Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

CTF for ビギナーズ ネットワーク講習資料

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 108 Anzeige

CTF for ビギナーズ ネットワーク講習資料

CTF for ビギナーズのネットワーク講習で使用した資料です。

講習に使用したファイルは、以下のリンク先にあります。
https://onedrive.live.com/redir?resid=5EC2715BAF0C5F2B!10056&authkey=!ANE0wqC_trouhy0&ithint=folder%2czip

CTF for ビギナーズのネットワーク講習で使用した資料です。

講習に使用したファイルは、以下のリンク先にあります。
https://onedrive.live.com/redir?resid=5EC2715BAF0C5F2B!10056&authkey=!ANE0wqC_trouhy0&ithint=folder%2czip

Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie CTF for ビギナーズ ネットワーク講習資料 (20)

Anzeige

Aktuellste (20)

CTF for ビギナーズ ネットワーク講習資料

  1. 1. ネットワーク講習 @takahoyo 1
  2. 2. 今回の内容 1. ネットワーク分野で必要なこと 2. CTFにおけるネットワーク分野 3. パケットを解析してみよう - パケット解析問題を解いてみよう - パケットを解析するときのポイント 4. 今後のレベルアップするためには 付録 3
  3. 3. 1.ネットワーク分野で必要なこと 4
  4. 4. ネットワーク分野で必要なこと • ネットワークプロトコルについての知識 - 学校などで習う基本的なこと - 今回は説明少なめ • ネットワークを流れる通信(パケット)を解析する方法 - 通信を解析するツールの使い方 - ツールを使ってどう解析するか - 今回はここを中心に説明 5
  5. 5. パケットと通信プロトコル 6
  6. 6. パケット(packet)とは • 直訳 → 小包、小箱の意味 • ネットワーク上に分割されたデータ = パケットが流れている •パケットキャプチャ = 流れているパケットを捕まえる 7 011011… 110110… 010111… 111110… 011011…010101… 010101…011011…110110…010111…111110…011011… データ 010101…011011…110110…010111…111110…011011… 分割 再構成 パケット キャプチャ ツール パケット データ
  7. 7. 通信プロトコル • 通信は、プロトコルという決まりによって行われる • 通信プロトコルは、役割ごとに階層が分かれている 8 OSI参照モデル TCP/IP 主なプロトコル アプリケーション層 アプリケーション層 HTTP, FTP, SMTP, POP3 TELNET, SSH, DNS プレゼンテーション層 セッション層 トランスポート層 トランスポート層 TCP, UDP ネットワーク層 インターネット層 IP, ICMP データリンク層 ネットワーク インターフェース層 Ethernet, ARP 物理層
  8. 8. Ethernet header 通信プロトコルとパケットの構造 • 各プロトコルの階層ごとに制御情報(Header)が付与 • ex. Webページ閲覧 9 IP header TCP header data TCP/IP アプリケーション層 (HTTP) トランスポート層 (TCP) インターネット層 (IP) ネットワーク インターフェース層 (Ethernet) data data data TCP header IP header TCP header ポート番号 MACアドレス Ethernet ヘッダを 付与 IPヘッダを 付与 TCPヘッダ を付与 IPアドレス
  9. 9. • Ex. Webページの閲覧 TCP/IPの通信の例 10 TCP/IP アプリケーション層 (HTTP) トランスポート層 (TCP) インターネット層 (IP) ネットワーク インターフェース層 (Ethernet) TCP/IP アプリケーション層 (HTTP) トランスポート層 (TCP) インターネット層 (IP) ネットワーク インターフェース層 (Ethernet)Ethernet headerIP headerTCP headerdata IP headerTCP headerdata TCP headerdata data Ethernet header IP header TCP header data IP header TCP header data TCP header data data TCPヘッダ を解析 IPヘッダを 解析 Ethernet ヘッダを 解析 Ethernet ヘッダを 付与 IPヘッダを 付与 TCPヘッダ を付与 パケット <html> <body> … </body> </html> <html> <body> … </body> </html> パケット 階層ごとに見るヘッダが異なる
  10. 10. 2.CTFにおける ネットワークの問題 11
  11. 11. CTFにおけるネットワークの問題 • パケットが記録されているファイルを解析する問題 - pcapやPcapNgなどのファイルが渡される - ファイルを解析して、ファイル内からFLAGを探す - ForensicsやNetworkのジャンルとして出題されることが多い - CryptoやWebジャンルの複合問題として出題されることも • サーバへ接続する問題 - パケットが問題として与えられるパターン - パケットを解析して、アクセスするサーバを決める - パスワード等の情報がパケットに記録されている場合もある - アドレス情報が与えられているパターン - 書かれている情報を基にサーバへ接続する 12
  12. 12. pcap・PcapNgファイルとは • キャプチャしたパケットを記録したファイル • CTFでは、このファイル形式で出題されることが多い → これを読めるようにならなければならない • fileコマンドすると… 13 ※ PcapNgファイルがdataとして表示されるfileコマンドもある ※fileコマンド : ファイルの種類をデータの内容から判定するコマンド
  13. 13. pcapファイル • pcapファイルをバイナリエディタで見ると… 14 ※バイナリエディタ Strilingを使ってます
  14. 14. PcapNgファイル •PcapNgファイルをバイナリエディタで見ると… 15 ※バイナリエディタ Strilingを使ってます
  15. 15. pcapファイルを読むためには… • ネットワーク解析ツールを利用する • 主な解析ツール - Wireshark (Windows, OS Ⅹ, Linux) - Network Miner (Windows) - バイナリエディタを使用する(上級者向け) 16
  16. 16. 3. パケットを解析してみよう 17
  17. 17. CTFで出題されるパケット • pcapもしくはPcapNgファイルを解析 • 様々なプロトコルのパケットが記録されている - TCP/IP - USB - Bluetooth - など • これらを解析して… - ファイル内からFlagを見つける - サーバにアクセスしてFlagを見つける 18
  18. 18. 解析の主な手順 1. .pcapおよび.pcapngファイルをWiresharkで開く 2. どのようなパケットが記録されているか把握 3. Wiresharkもしくは他のツールで怪しい部分を特定・抽出 • 今回はWiresharkのみで解析する手法を紹介します • Wiresharkの使い方は付録を参照 19
  19. 19. 演習 20
  20. 20. 演習 •演習1 - ファイル名:sample.pcap - この中にFLAGが隠されています - Wireshark画面の見方や使い方がわかる人 - 解析してフラグを見つけてみましょう - FLAGのフォーマットは今回は指定しません - Wireshark画面の見方や使い方がわからない人 - 今から見方や基本的な使い方を説明します - その間に分かる人は問題を解いてください - 基本的な説明が終わったら、問題の解説をします 21
  21. 21. この問題のポイント • Wiresharkの画面の見方 • DisplayFilterの使い方 • 怪しい通信の絞り方 • 通信を詳しく見る方法 - Packet Details - 送受信されているTCPデータ 22
  22. 22. 23 Wiresharkの画面の見方 Display Filter ディスプレイフィルタ Packet List パケットの一覧 Packet Details パケットの詳細 Packet Bytes 生のパケット
  23. 23. Display Filterを使う • 一つずつパケットを見る • TCPとHTTP(TCPのデータをくっつけて解析したもの) • HTTPのみに絞りたい - HTTPリクエストやHTTPレスポンスが見やすくなる • Display Filterのウインドウに次のように入力 - - フィルタの他の構文は参考資料を参照 24
  24. 24. 25
  25. 25. 怪しい通信を絞る • 30個のHTTPパケットが絞れた - 4個のGETリクエストとレスポンス - 11個のPOSTリクエストとレスポンス • そもそも何やってるの? - “GET /ctf_web/login/” → ログインページにアクセスしてるぽい - POSTは、nameやpasswordを送っている → ログインを試行してる - Webの認証ページにログインしている 26
  26. 26. 怪しい通信を絞る •見るべきポイント - 他の通信との違いを見つける • 今回の場合 - “302 Found”のリクエストが一つ - 1個だけ他の通信と異なる → 怪しい - ログインに成功してるから他と挙動が異なる? - その直後の”logout.php”というのも怪しい 27
  27. 27. 28
  28. 28. TCPで送受信されるデータを見る • 怪しいデータを抜いたら、それを見る • Packet Detailsを見る - Wiresharkがパケットを解析してくれる - どのフィールド(要素)にどのような値があるか表示してくれる ※ TCPで送受信されるデータに限らず使える • 送受信されているTCPデータを見る - Follow TCP Streamを使う 29
  29. 29. TCPで送受信されるデータを見る • TCPパケットを選択して右クリック -> Follow TCP Stream 30
  30. 30. TCPで送受信されるデータを見る 31
  31. 31. TCPで送受信されるデータを見る • “FLAG is account password” • このログインした時のパスワードがFLAG • この時POSTで送信したパスワード 32
  32. 32. FLAG c2bd8772532521ef2e127c020503f09f 33
  33. 33. 演習 • 演習2 - ファイル名:sample2.pcap - フラグを見つけてください - ノーヒントです - FLAGの形式は”ctf4b{~}”です - CTF for ビギナーズのCTF演習の過去問 34
  34. 34. この問題のポイント • 他と違う怪しい通信を探す - ICMPとTCPの通信が混ざりあう - FLAGはデータ - データを運ぶためのプロトコルは? • TCPのデータ部分を見る - (例:HTTPなど)ではない - Packet Detailsは、TCPのデータ部分を解析できないためあまり意味ない - Follow TCP Stream 35
  35. 35. 36
  36. 36. 37 TCPのデータ部分を見る Follow TCP Streamすると、 ctf4b{netcat-is-useful}
  37. 37. FLAG ctf4b{netcat-is-useful} 38
  38. 38. 演習 • 演習3 - ファイル名 : sample3.pcap - 3つのFLAGが隠されているので、それを探して下さい - フラグの形式は、flag{〜}です - 少し難しい 39
  39. 39. この問題のポイント • パケットの数が圧倒的に多い • パケットの統計から記録されているパケットを把握する • パケットをフィルタする • フィルタしたパケットを詳しく見ていく 40
  40. 40. パケット数を見る • 演習1 : 166 packets • 演習2 : 242 packets • 演習3 : 9268 packets → 一つずつ見るのは非効率 41
  41. 41. パケットの統計をみる • IPアドレスを見る • 使われてるプロトコルを見る • 特定のアドレス、ポートへの通信量を見る • Wiresharkの統計機能を使う 42
  42. 42. 43 • Statistics - IPアドレスとドメイン名の関係を知りたい → Show address resolution - 利用されているプロトコルの統計を知りたい → Protocol Hierarchy - どの端末がどの端末と通信しているかの統計を知りたい → Conversations - どのような端末が通信しているかの統計を知りたい → Endpoints Wiresharkの統計機能
  43. 43. IPアドレス • オンラインCTFの場合 - グローバルIPの通信 → そこに接続する問題の可能性が高い - プライベートIPの通信 → パケットの中に答えがある可能性が高い • オフラインCTFの場合 - 競技用ネットワークから到達できるIPの通信 → そこに接続する問題の可能性が高い - 競技用ネットワークから到達できないIPの通信 → パケットの中に答えがある可能性が高い • Statisticsの”Conversations”機能を使うとわかりやすい 44
  44. 44. 45 •Statistics -> Conversations どの端末がどの端末と通信しているか統計を知りたい
  45. 45. 46 プライベートIP同士の通信 (作問者が意図して発生させた?)
  46. 46. 使われているプロトコル • 暗号化されていないプロトコルを探す - http - telnet - ftp - smtp - など • 暗号化されている場合、パケットキャプチャしても情報がわ からないため(暗号解読は、cryptoのジャンル) • Statisticsの”Protocol Hierarchy”機能を使うとわかりやすい 47
  47. 47. 48 • Statistics -> Protocol Hierarchy 利用されているプロトコルの統計を知りたい
  48. 48. 49 暗号可されてないプロトコル FTP, SMTP, HTTPなど…
  49. 49. 特定のアドレス・ポートの通信量 • 問題のために発生させた通信 - 通信量が多い - 通常とは異なるポートを使っていることがある • Statisticsの”Conversations”機能を使うとわかりやすい - パケット数やポート番号などでソートが可能なため 50
  50. 50. 51 ローカルIPの通信 HTTPで一般利用されないポート
  51. 51. まず… • 暗号化されていないプロトコル - FTP (File Transfer Protocol) → ファイル転送 - SMTP (Simple Message Transfer Protocol) → メール転送 - HTTP(は通信が多いのでひとまずそのまま 52
  52. 52. FTP • ftpで、制御情報をやり取り • ftp-dataで、データのやり取り • 暗号化されてないので、すべて見える • ここにFLAG? 53
  53. 53. FTP • TCPなのでFollow TCP Stream 54 PNGファイル “save as”で結果を保存
  54. 54. FLAG1 55
  55. 55. SMTP • メールの本文が暗号化されてないので読める • TCPでデータが交換されているので、Follow TCP Stream 56
  56. 56. 57
  57. 57. 58
  58. 58. SMTP • “Decode the following String”と書いてあるので、 Decode したい • Base64方式でエンコードされた文章 • 後ろのメールにヒント - HINT: echo [encoded string] | base64 –d - echo ZmxhZ3ttYWlsX3dhc19zZW50X3BsYWludGV4dH0K | base64 -d 59
  59. 59. FLAG2 flag{mail_was_sent_plaintext} 60
  60. 60. HTTPで一般利用されないポート • ローカルIPアドレス間の通信 • 8080/tcpがあったので、フィルタリングしてみる • • httpがあるので、httpも条件を加える • 61
  61. 61. 62
  62. 62. 63
  63. 63. HTTPで一般利用されないポート • HTTP/1.1 401 Unauthorized - 何かの認証をおこなっている - 認証が成功していない (成功していると “200 OK”) • HTTPリクエストを見ると、”Authorization”ヘッダ 64 Basic認証 認証情報はbase64でエンコード
  64. 64. HTTPで一般利用されないポート • 成功しているHTTPリクエストを見てみる 65
  65. 65. FLAG3 flag{basic_auth} 66
  66. 66. 解析するときのポイントまとめ • キャプチャファイルに記録されているパケット数 • パケット数が多い場合 → WiresharkのStatistics機能を使用 - IPアドレス - 使われているプロトコル - 特定のアドレス・ポートの通信量 • パケット数が少ない場合 → Wiresharkの各種機能を使用 - TCP・UDPのデータ - Follow TCP Stream - 送受信されているファイル - HTTP Export Objects - Export Selected Packet Bytes 67
  67. 67. 4. 今後レベルアップ していくためには 68
  68. 68. 今後レベルアップしていくためには • 不審な通信を探し、不審な箇所を探す - 通常の通信と不審な通信を見分ける目が必要 = ネットワークの知識、パケットを見る経験が必要 - それを見るための手法 = Wireshark等のツールの使い方を極める • パケットを作れるようになる - nmap等を利用してポートスキャン - hping, Scapyなどで手動でパケット生成 • 過去問題の解法を知る = Writeupを読む 69
  69. 69. 今後レベルアップしていくためには •書籍 - マスタリングTCP/IP 入門編(オーム社) - ネットワークの知識を得たい人に - 実践パケット解析( オライリー) - もっとパケット解析について知りたい人に • Webサイト - 3分間Networking - http://www5e.biglobe.ne.jp/%257eaji/3min/index.html - Wireshark公式サイト(英語) - http://www.wireshark.org/ 70
  70. 70. Thank You For Listening Network Packets Don’t Lie. 71
  71. 71. 付録1 Wiresharkの使い方 72
  72. 72. Wiresharkの主な機能 • ネットワークを流れるパケットをキャプチャ • キャプチャしたパケットを表示する • 表示したパケットを解析する - 指定した条件でフィルタリング - パケットからファイルを抽出 - TCPやUDPのデータ部分(ペイロード)を取り出す - 通信を行ってるIPアドレスの統計を表示 - その他にもいろいろ(紹介したらキリがない) 73
  73. 73. 74 パケットキャプチャ機能 ①アダプタの選択 ②Start → パケットキャプチャ開始
  74. 74. 75 詳細なパケット表示機能 Display Filter ディスプレイフィルタ Packet List パケットの一覧 Packet Details パケットの詳細 Packet Bytes 生のパケット
  75. 75. 76 Packet List (パケット一覧) 送信元アドレス 送信先アドレス プロトコル時間 パケットの概要 View->Time Display Format で形式を変更可 View->NameResolution の”Enable for Transport Layer” のチェックを外す Edit->Perference->User Interfaces ->Columns でカスタマイズ可 パケット長
  76. 76. 77 Packet Details (パケットの詳細) Ethernet header HTTPIP header TCP header パケットの各ヘッダ情報 と対応
  77. 77. 78 Packet Bytes (生のパケット) • Wiresharkが解析し、整形してくれている • 場合によっては見る必要アリ
  78. 78. 【目的別】Wiresharkの使い方 • 条件にあった通信を抜き出したい → Filter • TCPで送受信されるデータを抜きたい → Follow TCP Stream • HTTPで扱ってるファイルを抽出 → Export Object->HTTP • パケットから生データ抽出 → Export Selected Packet Bytes • パケットの様々な統計を知りたい → Statistics 79
  79. 79. 80 Filter •Capture Filter •Display Filter
  80. 80. Filter •Capture Filter - パケットキャプチャを始める前に指定 - キャプチャしたいパケットが決まっている時に有効 - 無駄なパケットをとらなくて済む - 今回は説明省略 •Display Filter - パケット表示画面で指定(パケットキャプチャしながら指定可能) - キャプチャ中もキャプチャ後もFilterをかけることが可能 •各フィルタで書式が違う!! 81
  81. 81. Display Filter •プロトコルの指定 •例 - IPを使ってるパケットのみ - ICMPを使ってるパケットのみ - TCPを使ってるパケットのみ - UDPを使ってるパケットのみ - HTTPを使ってるパケットのみ 82
  82. 82. Display Filter •プロトコルの要素でフィルタリング •例 •TCPの80番ポートを利用している通信をフィルタ - tcp.port == 80 •IPアドレスが133.242.50.254の通信をフィルタ - ip.addr == 133.242.50.254 •IPアドレスが133.242.50.254で、TCP80番ポートの通信 - ip.addr == 133.242.50.254 && tcp.port == 80 •TCPでSYNフラグが立っているパケットをフィルタ - tcp.flags.syn == 1 83
  83. 83. 84 比較演算子 意味 eq (==) 等しい ne (!=) 等しくない gt (>) 大きい lt (<) 小さい ge (>=) 以上 le (<=) 以下 Display Filter フィルタ 意味 ip.addr == IPアドレス IPアドレス ip.src == IPアドレス 送信元のIPアドレス ip.dst == IPアドレス 送信先のIPアドレス tcp.flags == 0x02 TCPパケット(syn) tcp.flags == 0x12 TCPパケット(syn/ack) tcp.flags == 0x14 TCPパケット(rst/ack) tcp.port == ポート番号 TCPのポート番号 tcp.srcport == ポート番号 TCPの送信元ポート番号 tcp.dstport == ポート番号 TCPの送信先ポート番号 http.request HTTPのリクエスト http.response HTTPのレスポンス よく使う(独断と偏見)フィルタの構文 比較演算子 論理演算子 論理演算子 意味 and (&&) 論理積(かつ) or (||) 論理和(または) not (!) 否定
  84. 84. 85 •Display Filterしたパケットを保存することも可能 •File -> Export Specified Packets Display Filter
  85. 85. 86 •フィルタの構文忘れた -> 補完機能 •構文が間違っていると、ウインドウが赤くなる •絞りたい情報があるけど、構文がわからん → 補完機能でそれらしき構文を選んでみて、試してみる Display Filter
  86. 86. 87 • TCPパケットを選択して右クリック -> Follow TCP Stream TCPで送受信されるデータを抜きたい
  87. 87. 88 •File -> Export Objects -> HTTP HTTPで取り扱ってるファイルを抽出
  88. 88. 89 •パケットの詳細画面で、抽出したい部分を右クリック ->Export Selected Packet Bytes パケットから生データを抽出
  89. 89. 90 • Statistics - IPアドレスとドメイン名の関係を知りたい → Show address resolution - 利用されているプロトコルの統計を知りたい → Protocol Hierarchy - どの端末がどの端末と通信しているかの統計を知りたい → Conversations - どのような端末が通信しているかの統計を知りたい → Endpoints Wiresharkの統計機能
  90. 90. 91 •Statistics -> Protocol Hierarchy 利用されているプロトコルの統計を知りたい
  91. 91. 92 •Statistics -> Conversations どの端末がどの端末と通信しているか統計を知りたい
  92. 92. 93 •Statistics -> Show address resolution IPアドレスとドメイン名の関係を知りたい
  93. 93. 94 •Statistics -> Endpoints どのIPアドレスが記録されてるのか知りたい
  94. 94. 付録2 Network Minerの使い方 95
  95. 95. 96 Network Minerの使い方 • pcapファイルをドラッグ&ドロップ
  96. 96. Network Miner • Network Minerでわかる情報 - ホスト情報(OS, Open TCP Port, Service name , version) - ファイル抽出 - 画像抽出(サムネイル付き) - 認証情報 - etc… 97
  97. 97. 98 ホスト情報 OS種類 (passive finger printing) ホストの詳細 開いているポート
  98. 98. 99 ファイル 抽出
  99. 99. 100 画像
  100. 100. 101 認証情報
  101. 101. Network Miner メリット・デメリット • メリット - ネットワークの知識が少なくても扱いやすい - Wiresharkを使うより効率が良い場合がある • デメリット - Windowsでしか使えない(工夫すれば他のOSでも使えるが…) - フィルタリング機能がない - ネットワークの勉強には不向き - pcap-ng形式のファイルは扱えない(有償版なら可) 102 WiresharkとNetwork Minerをうまく併用
  102. 102. 付録3 CTFで使えるネットワーク系ツール 103
  103. 103. CTFで使えるネットワーク系ツール • CTFで使えると便利なネットワーク系ツール • 下記のジャンルに分類 - パケットキャプチャ - パケット解析 - パケット生成・送信 - Wireshark付属 - その他 • 赤字のツールは重要 (だと考えてる)ツール 104
  104. 104. パケットキャプチャツール • tcpdump (Linux, Mac OS XなどのUNIX系OS) - CUIでパケットキャプチャ、pcapファイルを簡易表示することも - 軽い - http://www.tcpdump.org/ • Windump (Windows) - tcpdumpのWindows移植版 - http://www.winpcap.org/windump/ • dumpcap / tshark / Wireshark - Wiresharkをダウンロードすると付属 - dumpcapとtsharkはCUI, WiresharkはGUI - 機能的には、dumpcap ⊂ tshark ⊂Wireshark 105
  105. 105. パケット解析ツール • Wireshark - GUIでパケットキャプチャ、豊富なパケット解析機能 - tcpdumpと比べると重い - https://www.wireshark.org/ • Network Miner - パケットキャプチャ、ファイル抽出機能など - Wiresharkに比べると機能が少ない - http://www.netresec.com/?page=NetworkMiner • Scapy / dpkt - Pythonのモジュール - Pcapファイルをパースして、Pythonで解析することが可能 - scapy : http://www.secdev.org/projects/scapy/ - dpkt : https://code.google.com/p/dpkt/ 106
  106. 106. パケット生成・送信ツール • nmap - ネットワークスキャンツール - http://nmap.org/ • hping - Pingのようなインターフェースでパケットを生成できる - http://www.hping.org/ • Scapy / dpkt - パケット関連のPythonライブラリ - パケットをパースするのみでなく、パケットの中身を操作して送信できる • netcat (nc) - ネットワークを扱う万能ツール - 様々な種類のnetcatが存在する - 参考: http://d.hatena.ne.jp/EijiYoshida/20111109/1320800716 107
  107. 107. Wireshark付属のツール • editcap - pcapngファイルからpcapファイルへの変換 - 参考 : http://divisionbyzero.hatenablog.jp/entry/2012/09/03/223000 - pcap, pcapngファイルの分割 • mergecap - pcap, pcapngファイルの結合 - 参考 : http://d.hatena.ne.jp/giugno/20110914/1315983399 • text2pcap - テキスト形式のパケットをpcap形式に変換 108
  108. 108. その他ツール • pcapfix - 破損しているpcapファイルを修復 - https://f00l.de/pcapfix/ • tcpreplay - pcapファイルに保存されているパケットを再送可能 - pcapファイルのパケットの情報を書き換えることができる機能 - http://tcpreplay.jp/ 109

×