今週の気になった出来事(7月1日~9日)
新しい試みとして、一週間のうちに気になった記事をまとめていこうと思います。
過去の振り返りに使えると思いますし、個人的には過去のセキュリティ記事を探す手間を省きたいので。。。。
【セキュリティニュース】
決済サービス「7Pay」の不正利用
7月1日からスタートした、モバイル決済サービスの7Payが第三者の不正アクセスを受け、不正にチャージ・利用されるという事件が発生しました。
また、アカウントのパスワード再設定の際に、生年月日、会員番号、電話番号を知っているだけで、第三者がパスワード変更できるようになっていたようです。
本件に関して、複数の逮捕者が出ています。
その他、セブン・ペイの記者会見の内容に関してデマが流れる事態にもなっていました。
【参考】
「7pay」で不正アクセス被害 「クレカから勝手にチャージされた」報告相次ぐ 運営元はID・パスワード変更を推奨 - ITmedia NEWS
「脆弱性は見つからなかった」 セブン・ペイ緊急会見の“甘すぎる認識” (1/2) - ITmedia NEWS
経産省、決済事業者に「ガイドライン」順守を要請 7payの不正ログイン被害受け - ITmedia NEWS
7pay不正容疑者「7、8人の名義使った」 - ITmedia NEWS
中国人店員、新たに逮捕=セブンペイ悪用で窃盗容疑-警視庁:時事ドットコム
「7pay(セブンペイ)」に対する不正アクセスの件(第 3 報) セキュリティ対策の強化を目的とした新組織発足のお知らせ
「SMSってTwitterのことですよね」 セブン・ペイ記者会見で「社長が勘違い発言した」とするデマ拡散 - ねとらぼ
「漫画村」元運営者
【その他】
「重大事故の時にどうするか?」
ヤフーの前社長・宮坂さんが公開した「重大事故の時にどうするか?」が話題になりました。
是非とも皆さん一読していただきたい良い内容でした。
重大事故の時にやったほうがいいこと10個
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1.作戦司令室をつくる
2.キックオフが重要
3.チームをわける。そしてチーム毎に一人だけチームリーダをつくる
4.定時連絡の仕組みをつくる
5.ホワイトボードを用意
6.食い物と睡眠も復旧対策
7.広報はユーザーファーストに
8.対外リリースも定時化
9.トップは帰ってはいけない
10.終息宣言
調査・解析ツール紹介
私がセキュリティ事案の際に利用する調査・解析ツールをまとめておきます。
(随時更新予定)
マルウェア解析
VirusTotal
ファイルやウェブサイトのマルウェア検査を行うウェブサイト.
アンチウイルス製品による検査を行って各製品の検査結果を一覧表示する。
ファイルのマルウェアか否かの簡易的な検査を行うことができる。
ファイルのアップロードやハッシュ値による検索によって検査結果が取得可能。
Hybrid Analysis
ファイルやウェブサイトのマルウェア検査を行うウェブサイト.
ファイルのアップロードやハッシュ値による検索によって検査結果が取得可能。
詳細な解析がされており、通信先・ファイル内部の文字列・プロセス構造など得られる情報は多岐にわたる。
https://www.hybrid-analysis.com/
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
【構築】
・フォルダ作成
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
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
--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が起動していることが確認できました。
Honeypotを植えてみた(備忘録)
ずっと前から運用したいと思っていたハニーポットをようやく構築したので、備忘録として構築手順を残します。
【構築環境】
ハニーポット構築した際には以下の環境で行いました。
WOWhoneypot
・サーバー
さくらVPS上に設置
スペック
メモリ :512M
CPU :1Core
ストレージ:SSD(20GB)
【ハニーポット】
今回構築した環境ではハニーポットとして、WOWhoneypotを利用しています。
WOWhoneypotはmorihi-socさんが作成された初心者向けのWebハニーポットです。
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>」にアクセスすると、デフォルトのページが表示される。
【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