勉強会
- Network -
2016/3/28 1
ネットワークといえば?
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
ネットワークプロトコル
2016/3/28 8
ネットワークプロトコル
■ 通信をする時に生じる様々な課題
■ 決まり(プロトコル)を作って課題を解決
どこに送れば
良いかな?
返事が来な
かったらどう
しよう
どこに送れば
良いかな?
どこに送れば
良いかな?
どのデータを
返そう
どのデータを
要求しよう
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
pcapを開く
■ Wiresharkの入ったPCでexample.pcapを開く
2016/3/28 17
Wiresharkの解析画面
2016/3/28 18
Display
Filter
ディスプレイフィルタ
Packet List
パケットの一覧
Packet Details
パケットの詳細
Packet Bytes
パケットのバイト表示
実際に流れてるデータ
2016/3/28 19
■ Packet Bytesの部分
■ よくわからない…
実際に流れているデータ
■ Packet Detailで選択 (Wiresharkが解析)
– 選択した情報がデータのどの部分かハイライトされる
2016/3/28 20
実際に流れているデータ
2016/3/28 21
Ethernet IP TCP HTTP
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)
2016/3/28 24
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
header
length
Reserved
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
Window Size
Checksum URG Pointer
Options
Data
0 3116
TCP
(Transimission Control Protocol)
2016/3/28 27
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 30
– パケットキャプチャで確認
– 通信を行う前に3way hand shakeをしている
TCP
(Transimission Control Protocol)
■ コネクション確立後
– データの送受信が可能になる
– シーケンス番号、確認応答番号を用いて正常か確認
2016/3/28 31
seq = 1, ack = 1, len=389 byte
flag = PSH, ACK
Data = GET / HTTP/1.1
seq = 390, ack = 957, len=0 byte
flag = ACK
Client Server
seq = 1、ack =390, len=956 byte
flag = PSH, ACK
Data = HTTP/1.1 200 OK
seq = 1、ack =390, len=0 byte
flag = 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
演習
■ 今日使った知識を使って問題を解いて下さい
– https://ctf-study.cpaw.site/questions.php?qnum=5
2016/3/28 33
まとめ
■ プロトコルの知識は重要
– 特にTCP/IPプロトコルは全員が知っておくべき
■ まずここからネットワークは勉強しましょう
– オススメの文献
■ マスタリングTCP/IP 入門編
■ 3分間Networking
– http://www5e.biglobe.ne.jp/%257eaji/3min/
2016/3/28 34

CpawCTF 勉強会 Network