cpawctf 勉強会 network
TRANSCRIPT
ネットワークといえば?
Router
Switch
Packet
Protocol
大きく分けて2つの側面① ハードウェア(通信を行うための機器、ケーブル)② ソフトウェア(通信を行う方法など)
Client
Server
2016/3/28 3
通信を行う方法
■プロトコル(決まり)に従って通信を行う
■なぜプロトコルが必要なのか
– コンピュータは言われたことしか実行できない
– ルールを決めないと正しく会話できない
■プロトコル理解すること ≒ ネットワークを理解すること
■プロトコルの理解は必要不可欠
2016/3/28 4
CTFに必要なネットワークの知識
2016/3/28 5
■ ネットワークプロトコルについての知識
– 基本的なこと
– 学校、本、Webサイトなどで学べる内容
– 今回はこの内容を中心に解説
■ネットワークを流れる通信を解析する方法
– 通信を解析するツールの使い方
– ツールを使ってどう解析するか
– 今回はちょっと触れます
CTFでネットワークの知識は必要か
■問題を解くのに必要
– pcapファイルを読む問題
– パケットを変更して送信する問題
■ただし、、ネットワーク関連の問題は出題が減少している
– 差がつきにくい
– 多くの人が知っている、解ける
■最低限の知識は知っておく必要がある
2016/3/28 6
今回の内容
■ネットワークプロトコルについて
■実際に流れている通信を見るには?
■CTFのネットワーク問題を解いてみよう
■ “CTF初心者”というより、”ネットワーク初心者”向けかも?
2016/3/28 7
ネットワークプロトコル
■通信をする時に生じる様々な課題
■決まり(プロトコル)を作って課題を解決
どこに送れば良いかな?
返事が来なかったらどうしよう
どこに送れば良いかな?
どこに送れば良いかな?
どのデータを返そう
どのデータを要求しよう
ServerClient Router返事が来なかったらどうしよう
2016/3/28 9
ネットワークプロトコル
■一つのプロトコルですべて解決しない
– 役割毎にプロトコルの種類(階層)が分かれている
– ぞれぞれの役割のプロトコルを使う
OSI参照モデル TCP/IP 役割
アプリケーション層
アプリケーション層アプリケーションでのデータのやり取りの方法
プレゼンテーション層
セッション層
トランスポート層 トランスポート層通信を行うアプリケーション間の通信、通信の制御
ネットワーク層 インターネット層複数のネットワークを相互接続した環境での機器間の通信
データリンク層 ネットワークインターフェース層
実際のネットワークハードウェアが通信を実現する物理層
2016/3/28 10
プロトコルの階層
■さっきの例に当てはめると…
インターネット層どこに送れば良い
かな?
インターネット層どこに送れば良い
かな?
インターネット層どこに送れば良い
かな?
トランスポート層返事が来なかったらどうしよう
アプリケーション層どのデータを要求し
よう
アプリケーション層どのデータを返そう
トランスポート層返事が来なかったらどうしよう
ServerPC Router
2016/3/28 11
各層の代表的なプロトコル
TCP/IP 役割 プロトコルの例
アプリケーション層アプリケーションでのデータのやり取りの方法
HTTP, FTP, SMTP, POP, TELNET, SSH, NTP,
トランスポート層通信を行うプロセス間の通信、通信の制御
TCP, UDP
インターネット層複数のネットワークを相互接続した環境での機器間の通信
IP, ICMP
ネットワークインターフェース層
実際のネットワークハードウェアが通信を実現する
Ethernet, IEEE802.11, PPPなど
2016/3/28 12
データのカプセル化
■下位層のプロトコルで上位層のプロトコルを包む
– 上位層のデータに下位層の情報ヘッダを付与する
■例. HTTP通信
– Ethernet、IP、TCP、HTTPプロトコルが使われる
Ethernet header
IP header
TCP header
HTTP
TCP/IP
アプリケーション層(HTTP)
トランスポート層(TCP)
インターネット層(IP)
ネットワークインターフェース層
(Ethernet)
HTTP
HTTP
HTTP
TCP header
IP header TCP header
2016/3/28 13
Protocol Data Unit
■プロトコルが扱うデータ単位
■ヘッダ部+データ部で構成されている
■レイヤによって呼び方が変わる
– ネットワークインターフェス層 : フレーム
– インターネット層 : パケット
– トランスポート層 : セグメント
※赤枠はヘッダ部、それ以外はデータ部
■「データを送る単位」の意味として「パケット」と呼ぶことが多い
2016/3/28 14
Ethernet header HTTPIP header TCP header
HTTPIP header TCP header
HTTPTCP header
TCP/IP
アプリケーション層(HTTP)
トランスポート層(TCP)
インターネット層(IP)
ネットワークインターフェース層
(Ethernet)
TCP/IP
アプリケーション層(HTTP)
トランスポート層(TCP)
インターネット層(IP)
ネットワークインターフェース層
(Ethernet)
パケットの送受信
2016/3/28 15
EthernetIPTCPHTTP
IPTCPHTTP
TCPHTTP
HTTP
<html><body>…</body></html>
<html><body>…</body></html> 階層ごとに見るヘッダが異なる
Ethernet IP TCP HTTP
IP TCP HTTP
TCP HTTP
HTTP
TCPヘッダを付与
IPヘッダを付与
Ethernetヘッダを付与
Ethernetヘッダを解析
IPヘッダを解析
TCPヘッダを解析
パケット パケット
■例. Webページの閲覧
実際の通信を見てみよう
■Wiresharkを使って通信を見てみる
– GUIのプロトコル解析ツール
– ネットワークを流れるパケットのキャプチャ
– 記録したパケットの表示、解析
– フィルタ機能
– 統計機能
■ pcapファイルを開く
– キャプチャしたパケットを記録したファイル
– CTFではよく出題されるファイル形式
■今回は練習用のパケットを使う
– https://ctf-study.cpaw.site/questions.php?qnum=4
2016/3/28 16
Wiresharkの解析画面
2016/3/28 18
Display Filter
ディスプレイフィルタ
Packet Listパケットの一覧
Packet Detailsパケットの詳細
Packet Bytesパケットのバイト表示
Ethernet
■ネットワークインターフェス層のプロトコル
■一般的なLANで使われている
■CTFにおいてはあまり重要ではない
– ヘッダの構造がシンプル
■ 送信元MACアドレス
■ 送信先MACアドレス
■ インターネット層のプロトコル情報
■ FLAG情報は入らない
– MACアドレスから問題を作った環境を推定できるくらい
2016/3/28 22
IP (Internet Protocol)
■インターネット層のプロトコル
■インターネットでデータを伝送するのに使用
■ネットワークを知る上では必ず理解
■ IPのヘッダフォーマット
2016/3/28 23
Version Length Type of Service Total Length
Identification Flags Fragment Offset
Time to Live Protocol Header Checksum
Source Address
Destination Address
Options
Data
0 3116
IP (Internet Protocol)
■ IPアドレス
– プライベートIPアドレス
■ 10.0.0.0/8, 172.16.0.0/16, 192.168.0.0/24
■ オンラインCTF → ファイルの中に答えがある
■ オフラインCTF → そのアドレスにアクセスできる可能性
– グローバルIPアドレス
■ 上記のアドレスとマルチキャスト、グローバルキャストを除いたアドレス
■ オンラインCTF → アドレスにアクセスできる可能性
■ オフラインCTF → ファイルの中に答えがある可能性
– IPアドレスは答えの場所を探すヒントになる
2016/3/28 25
TCP (Transimission Control Protocol)■トランスポート層のプロトコル
■役割
– どのアプリケーションに通信を送るか
– 通信相手と接続を確立して信頼性のある通信を実現
■TCPヘッダフォーマット
2016/3/28 26
Source Port Destination Port
Sequence Number
Acknowledgment Number
headerlength
ReservedURG
ACK
PSH
RST
SYN
FIN
Window Size
Checksum URG Pointer
Options
Data
0 3116
TCP(Transimission Control Protocol)■ポート番号
– アプリケーションを識別する番号
– 0 - 1023 : Well Known Port
■ SSH 22
■ TELNET 23
■ DNS 53
■ HTTP 80
■ HTTPS 443
■ など
– エフェメラルポート
■ クライアント側が使うポート番号
2016/3/28 28
TCP(Transimission Control Protocol)■コネクションの確立
– 3ウェイハンドシェイク
2016/3/28 29
Client Server
SYN
SYN/ACK
ACK
TCP(Transimission Control Protocol)■コネクション確立後
– データの送受信が可能になる
– シーケンス番号、確認応答番号を用いて正常か確認
2016/3/28 31
seq = 1, ack = 1, len=389 byteflag = PSH, ACKData = GET / HTTP/1.1
seq = 390, ack = 957, len=0 byteflag = ACK
Client Server
seq = 1、ack =390, len=956 byteflag = PSH, ACKData = HTTP/1.1 200 OK
seq = 1、ack =390, len=0 byteflag = ACK
TCP(Transimission Control Protocol)■同じTCPコネクションのデータをまとめて表示
– Follow TCP Stream
– CTFにおいては重要な機能
2016/3/28 32
Ethernet IP TCP HTTP
Ethernet IP TCP HTTP
Ethernet IP TCP HTTP
Ethernet IP TCP HTTP
まとめ
■プロトコルの知識は重要
– 特にTCP/IPプロトコルは全員が知っておくべき
■まずここからネットワークは勉強しましょう
– オススメの文献
■ マスタリングTCP/IP 入門編
■ 3分間Networking
– http://www5e.biglobe.ne.jp/%257eaji/3min/
2016/3/28 34