セキュリティ猫の備忘録

セキュリティに関する事柄を備忘録として記していく

今週の気になった出来事(7月1日~9日)

新しい試みとして、一週間のうちに気になった記事をまとめていこうと思います。
過去の振り返りに使えると思いますし、個人的には過去のセキュリティ記事を探す手間を省きたいので。。。。

セキュリティニュース

決済サービス「7Pay」の不正利用

7月1日からスタートした、モバイル決済サービスの7Payが第三者不正アクセスを受け、不正にチャージ・利用されるという事件が発生しました。
また、アカウントのパスワード再設定の際に、生年月日、会員番号、電話番号を知っているだけで、第三者がパスワード変更できるようになっていたようです。
本件に関して、複数の逮捕者が出ています。
その他、セブン・ペイの記者会見の内容に関してデマが流れる事態にもなっていました。

1000件以上の「Android」アプリが無許可でデータ収集

何千ものAndroidアプリがユーザーが許可していない情報を収集しているという衝撃的な内容のニュースがありました。

その他

「重大事故の時にどうするか?」

ヤフーの前社長・宮坂さんが公開した「重大事故の時にどうするか?」が話題になりました。
是非とも皆さん一読していただきたい良い内容でした。

重大事故の時にやったほうがいいこと10個

                                                                                                                            • -

1.作戦司令室をつくる
2.キックオフが重要
3.チームをわける。そしてチーム毎に一人だけチームリーダをつくる
4.定時連絡の仕組みをつくる
5.ホワイトボードを用意
6.食い物と睡眠も復旧対策
7.広報はユーザーファーストに
8.対外リリースも定時化
9.トップは帰ってはいけない
10.終息宣言

おわりに

なかなか時間が取れず、まとめるのも上手ではないため、グダグダなまとめになってしまいましたが、今後ともこういった気になった記事をまとめていこうと思います。
今後は、脆弱性情報やIPAなどが出している内容なども載せていきたいですね!

調査・解析ツール紹介

私がセキュリティ事案の際に利用する調査・解析ツールをまとめておきます。
(随時更新予定)

マルウェア解析

VirusTotal

ファイルやウェブサイトのマルウェア検査を行うウェブサイト.
アンチウイルス製品による検査を行って各製品の検査結果を一覧表示する。
ファイルのマルウェアか否かの簡易的な検査を行うことができる。
ファイルのアップロードやハッシュ値による検索によって検査結果が取得可能。

Hybrid Analysis

ファイルやウェブサイトのマルウェア検査を行うウェブサイト.
ファイルのアップロードやハッシュ値による検索によって検査結果が取得可能。
詳細な解析がされており、通信先・ファイル内部の文字列・プロセス構造など得られる情報は多岐にわたる。
https://www.hybrid-analysis.com/

ANY.RUN

インタラクティブマルウェアを解析できるサービス。
ファイルのアップロードやハッシュ値による検索によって検査結果が取得可能。

URL・ドメイン調査

urlscan.io

Webサイトの代理アクセスに活用。
ファイルのダウンロードの場合、VirusTotalやHybrid Analysisと連携し、各々のリンクを載せている。

PassiveTotal

ドメインIPアドレス調査に活用。
Whoisの場合、調査時に紐づいているIP、ドメインしかわからないが、PassiveTotalは過去の紐づいている情報が調査可能。
数時間おきに紐づけが変わるものや過去の調査時に有効。
ただし、無料版の場合、一日あたりWebアクセス、API、各々15回のリクエスト制限があります。

aguse.jp: ウェブ調査

urlscan.io同様Webサイトへの代理アクセス時に活用。
urlscan.ioと異なり「日本のIPアドレス」が割り当てられているため、日本からのアクセスにしか攻撃が成立しない場合のサイト調査に有効。

Shodan

インターネットに接続している様々なコンピュータを検索対象なオンラインサービス。
検索結果には、動いているサービスや有している脆弱性の情報まで表示される。
アカウント自体は無料で作れますが、その他有料のメンバーシップがある。基本的に得られる情報量に違いがある。詳しくは以下のページを参考。
Shodan のメンバーシップアカウントでできること - setodaNote
メンバーシップは49ドルで買うことができるが、秋のBlack Fridayの際には5ドルで購入できます。

Censys

shodanと同様にインターネットに接続している様々なコンピュータを検索対象なオンラインサービス。
shodanと似たようなものを検索できますが、こちらは無料で機能を使用することができます。

暗号化・復号

CyberChef

暗号化、復号を行う際に利用。
様々なエンコード・デコードに対応している。
また、ダウンロードすればオフラインでも利用できるため、オンラインにアップするのをためらわれる情報の場合、有効。

脆弱性情報

Exploit Database

脆弱性検証の際の、PoCを探す際に利用。
CVE番号などから検索できる
https://www.exploit-db.com/

情報サイト

その他

OSINT Framework

OSINT情報サイトをカテゴリごとに分類してまとめられたサイト。

NICTの脅威情報自動収集ツールEXISTをdockerで起動してみた

国立研究開発法人情報通信研究機構NICT)が、脅威情報を自動収集するWebアプリEXIST(EXternal Information aggregation System against cyber Threat)を公開しました。
そこで今回は、そのEXISTをdockerで動かせたので、備忘録として残しておきます。

※注意※
私自身、dockerの初心者も初心者なので、完全に把握していない部分も多くあります。
ひとまず、私の環境で「起動する」ことは確認できましたので、docker上で構築するのが得意な方がいらっしゃいましたら、是非ともアドバイスを頂けますと幸いです。

【目次】

環境
構築
実行
確認

EXISTと参考資料

EXISTの機能と通常のインストール方法は、以下の公開されたGitHubを参照してください。
github.com


インストール方法、コード等は以下のサイトを参考にしました。
qiita.com
dev.classmethod.jp

環境

以下の環境上で、EXISTをdockerを使って起動させることができました。

仮想化ソフト

  VirtualBox

ゲストOS

  CentOS 7
  メモリ  :2GB
  プロセッサ:1CPU
  ストレージ:20GB
  IPアドレス :192.168.56.200(Host only)
         XXX.XXX.XXX.XXX(NAT)

構築

・フォルダ作成

Dockerfileやその他のスクリプトファイルを置くフォルダを作成する
私の環境では、以下のフォルダを作成&移動しました。

mkdir /opt/<folder name>/
cd /opt/<folder name>/

スクリプトファイルの用意

上記で作成したフォルダの中に以下のファイルを作成、スクリプトを記述していきます。

settings.py

こちらは、GitHub上のファイルを落としてくるか、ソースをコピペします。
https://github.com/nict-csl/exist/blob/master/intelligence/settings.py.template

その後、以下の内容を修正します。

#ALLOWED_HOSTSはブラウザからアクセスする際のFQDNを設定
ALLOWED_HOSTS = [
    'localhost',
    '192.168.56.200',
]

#DATABASESはMariaDB(後述)の設定(NAME,USER,PASSWORD,HOST)を記入
DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'intelligence_db',
        'USER': 'exist',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': 'SET character_set_connection=utf8mb4;'
                            'SET collation_connection=utf8mb4_unicode_ci;'
                            "SET NAMES 'utf8mb4';"
                            "SET CHARACTER SET utf8mb4;"
        },
    }
}
celery

非同期でタスクを実行するceleryの設定ファイルを作成。

CELERYD_NODES="localhost"
CELERY_BIN="/bin/celery"
CELERY_APP="intelligence"
CELERYD_MULTI="multi"
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"
celeryd

celeryの起動スクリプトを作成する。

Type=forking
User=root
Group=root
EnvironmentFile=/etc/sysconfig/celery
WorkingDirectory=/exist
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
--pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
   :
case "$1" in
  start)
        $ExecStart
        ;;
  stop)
        $ExecStop
        ;;
  reload|)
        $ExecReload
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac
existdb.sql

MariaDBセットアップ用スクリプトを作成。

--MySQLのインデックスサイズに767byteまでしかつかえない問題の回避策
--これを行っていないと、Djangoをマイグレーション時にエラーが発生
set global innodb_large_prefix = ON;
set global innodb_file_format = BARRACUDA;
set global innodb_file_per_table=ON;
set global innodb_default_row_format = DYNAMIC;

--mysql_secure_installation実行の代用(ほぼ同一の処理を行う)
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;

--EXIST用のDB作成
create database intelligence_db;
-- GRANT ALL PRIVILEGES ON `intelligence_db`.* TO '<user name>'@'localhost' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON `intelligence_db`.* TO 'exist'@'localhost' IDENTIFIED BY 'password';
Dockerfile

dockerの構成ファイルを作成する。

FROM ubuntu:latest

RUN apt-get update && apt-get -y upgrade

RUN apt-get -y install git python3 python3-pip locales
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

RUN curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
RUN apt-get install -y mariadb-client-10.1
RUN apt-get install -y mariadb-server
RUN apt-get -y install redis-server

WORKDIR /root
RUN git clone https://github.com/nict-csl/exist.git nict-exist
WORKDIR /root/nict-exist

RUN pip3 install -U -r requirements.txt

ADD ./settings.py ./intelligence/settings.py
ADD ./celery /etc/sysconfig/celery
ADD ./celeryd /etc/init.d/celeryd
ADD ./existdb.sql ./existdb.sql

実行

上記ファイルを作成したら、dockerイメージを構築、コンテナを起動します。

docker build -t <image name>  /opt/<folder name>/
docker run -it -p 8000:8000 -d --name <container name> <image name>
#コンテナにアクセス
docker exec -i -t <container name> /bin/bash

コンテナを作成したら、コンテナにアクセスし、内部で以下を実行。

#MySQLがソケットがないといってくるので回避策
/etc/init.d/mysql stop
rm -f /var/run/mysqld/mysqld.sock
rm -f /tmp/mysql.sock
/etc/init.d/mysql start
#DBのセットアップ
mysql -u root < existdb.sql
python3 manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter
python3 manage.py migrate
/etc/init.d/redis-server start
chmod +x /etc/init.d/celeryd
/etc/init.d/celeryd start
#EXISTの起動
python3 manage.py runserver 0.0.0.0:8000

確認

ホストOS上のブラウザで、「http://192.168.56.200:8000/」にアクセスしてみると、EXISTが起動していることが確認できました。

f:id:nekochanSecurity555:20190401233028p:plain
図1.EXIST起動

まとめ

今回は、NICTが公開した情報収集ツールEXIST(EXternal Information aggregation System against cyber Threat)をdocker上で起動させてみました。
しかし、まだ機能全てが使えるかの検証は行っていないため、今後は検証を行いながら、EXISTを活用していきたいを思います。
一応は、Twitter Hunterに自身のアカウントを登録してみましたが、使い方が全く分からないためまだ有効活用できないです。。。。。

f:id:nekochanSecurity555:20190401233441p:plain
図2.Twitter Hunter

Honeypotを植えてみた(備忘録)

ずっと前から運用したいと思っていたハニーポットをようやく構築したので、備忘録として構築手順を残します。

構築環境

ハニーポット構築した際には以下の環境で行いました。

ハニーポット

  WOWhoneypot

・サーバー

  さくらVPS上に設置

  スペック

    メモリ  :512M

    CPU   :1Core

    ストレージ:SSD(20GB)

    OS    :Ubuntu 16.04(amd64)(標準OS)


ハニーポット

今回構築した環境ではハニーポットとして、WOWhoneypotを利用しています。

WOWhoneypotはmorihi-socさんが作成された初心者向けのWebハニーポットです。

github.com


WOWhoneypotの概要は以下のサイトを参照してください。
初心者向けハニーポット WOWHoneypot の紹介 - Speaker Deck

構築手順

ハニーポットは停止・初期化を簡単にするためにDocker上で動かすことにしました。
構築にあたり以下のサイトを参考にしました。
tk-secu.hateblo.jp


【さくらVPS:サーバー】

さくらVPSでサーバーを購入し、

初期設定の際にOSとして「標準OS」の「Ubuntu 16.04(amd64)」を選択。

オプションとして「Ubuntu_DockerCompose」スクリプトを選択することで、Docker環境をプリインストールされた状態でサーバーを使用することができる。


【Dockerfile作成】

コンテナ作成のために以下のDockerfileを作成する。


/opt/<workdir>/Dockerfile

FROM ubuntu:latest

RUN apt-get update && apt-get -y upgrade
RUN apt-get -y install git python3

WORKDIR /root
RUN git clone https://github.com/morihisa/WOWHoneypot.git wowhoneypot
WORKDIR /root/wowhoneypot
CMD ["python3", "wowhoneypot.py"]

【コンテナイメージ作成と実行】

Dockerfileを作成したディレクトリで以下のコマンドでコンテナイメージを作成。

docker build -t <container_image_name>

その後、作成したイメージからコンテナを起動する。

docker run -it -v /home/<user_name>/wowhoneypot/log:/root/wowhoneypot/log -p 80:8080 -d --name <image_name> <container_image_name>

起動したら、ブラウザで「http://<サーバーip or domain>」にアクセスすると、デフォルトのページが表示される。

f:id:nekochanSecurity555:20190317211500p:plain
図1.WOWhoneypot起動の確認

SSH接続の制限

ハニーポットが起動して、これであとは攻撃を待つだけになりました。

しかし、ハニーポットを運用していくうえで一番危惧しなければならないのは、ハニーポットを乗っ取られて、または、利用されて攻撃に加担し第三者に迷惑をかけることです。

いろいろ対策はあるかと思うが、とりあえずは、ハニーポットのサーバーにSSHでの接続は安全に行いたいので、SSH接続の設定は行っておきます。


【rootユーザーでの接続を禁止】

SSH接続はrootユーザーを使わないようにしたいので、ハニーポットサーバーを操作するための一般ユーザーを作っておきます。

#一般ユーザを作成
adduser <local_user>
#一般ユーザのパスワードを設定
passwd <local_user>
#rootユーザでのアクセス終了
exit

SSH設定ファイルを編集してrootユーザーでのSSH接続を禁止にします。

#設定ファイルを編集
vim /etc/ssh/sshd_conf
#次の記述を検索
#PermitRootLogin yes
#次の内容に変更
PermitRootLogin no

編集後、SSHサービスを再起動すると、設定が反映されます。

#sshdを再起動すると設定が有効になる。
systemctl restart sshd.service

【パスワード入力での接続を禁止】

パスワードでのSSH接続を禁止してブルートフォースを受けてもアクセスされないようにしておきます。

そのために、鍵認証接続の設定を行います。

#鍵を作成
cd ~/.ssh
ssh-keygen -f <key file name> -t rsa -b 2048
#鍵をサーバに登録
ssh-copy-id -i ~/.ssh/<key file name>.pub <local_user>@xxx.xxx.xxx.xxx

作成した鍵ファイルはローカルに落としておきましょう。(.pubファイルではない方です)

その後、またsshd_confファイルをいじって、パスワード認証を禁止の設定を行いサービスの再起動を行います。

#下記の設定をnoに設定する。
PasswordAuthentication no 

SSHポート番号の変更】

また、SSHのデフォルトポート番号を22から変更しておく。

#下記の記述を検索。
#Port 22
#ポート番号を変更。
Port xxxxx

設定変更後、サービスの再起動を行う。

また、このままではFireWallではじかれてアクセスできなくなるため、SSHように設定したポート番号に穴をあけておく。

さくらのVPSでは/etc/iptables/iptables.ruleにiptablesの設定が記述されているので設定したsshのポートの部分だけ修正する

#次の内容を検索。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#22ポートを上記で設定したポート番号に変更
-A INPUT -m state --state NEW -m tcp -p tcp --dport xxxxx -j ACCEPT

その後、ルールを反映させる。

更新したiptables.ruleを取り込み

iptables-restore < /etc/iptables/iptables.rule

今後の展望

ハニーポットの運用を開始することができました。

意外と簡単だったので、もっと早くから始めていればとちょっと後悔しています。

現在、ハニポのログを可視化の環境構築を行っていますが、現状手動でログを取り込んでいるので、複数のハニポを立てた時の場合に備えて、Syslogで飛ばせるようにはしたいです。

または、Slackに日時のログを飛ばす設定にするか。。。

週次の分析は少しずつ記事にしていきたいでdす。