パケットキャプチャーあれこれ

こんにちは。GMOインターネットグループ株式会社の新里です。

セキュリティ的な側面でなくても、通信経路上でパケットをキャプチャーして動作確認・データの有無について確認したくなる事は多々あると思います。たまに、どうやれば?という事を聞かれたりするので、少しパケットキャプチャーについて書いてみます。

対象ごとに分かれるキャプチャ

OSIレイヤーのEthernetの部分から見たいのか?アプリケーションレイヤーだけで良いのか?というので方法は全然変わってきますね。あと、OSがある端末でキャプチャーを行うのか?IoT端末のように、OSが無いような端末のキャプチャーはどうするのか?といった感じで方法が分かれますね。
僕の場合は、主に以下のような用途で分けて使っています。

  • Wireshark、tcpdump
    Windows・Linux・Mac上でパケットキャプチャを行い、L2~L4(主にTCP/UDP/TLS…など)を確認するとき。他にもiPhoneのパケットをMacでパケットキャプチャする際にも利用する。
  • Burpsuite
    ブラウザやモバイルアプリのL7(アプリケーションのデータ通信)の確認するときに利用。
  • モバイルホットスポット(Windows)
    IoT端末などOSを持たないアプリのキャプチャを行う際に、WiFiの接続先として利用する(L3として利用してキャプチャする)。ここで更にWiresharkでパケットキャプチャを行うことで、端末の通信を確認する。
  • ミラーリング(L2 HUB)
    WiFiを持たない端末で、Ethernetが使えるときに利用する。ミラー先のWindows/MacなどのPCでWiresharkでパケットキャプチャを行うことで、端末の通信を確認する。
  • BLE Sniffer
    BLEの通信をキャプチャするときに利用する。キャプチャしたパケットはWiresharkで確認を行う。これは僕の手持ちのBluefruit LE Sniffer。
  • WiFiのキャプチャ
    2.4GHz/5GHz WiFiのキャプチャをするときに利用する。MacのWireless Diagnostics(ワイヤレス診断)の機能で、WiFiのキャプチャを行って、Wiresharkでキャプチャしたパケットの確認を行う。この辺とかの通り。

どの方法を使っても、Wiresharkを主にメインのツールとして利用しています。意外なところで、BLEのキャプチャを行った内容もWiresharkで見ることができますね。Wiresharkを統合的なツールとして利用するため、Windows/Macを利用するときはデフォでインストールして利用しています。

RPi4でお手軽キャプチャ

Raspberry Pi4(以下、RPi4)はお手軽にLinuxルータに出来るので、RPi4をルータ化して接続する端末のパケットキャプチャを行うといった方法もあります。簡単に出来るので、以下に手順を示します。

環境

  • Raspberry Pi 4 model B 4Gbyte mem
  • OS : Ubuntu Server 22.04.1 LTS
  • USB to Ether : BUFFALO LUA4-U3-AGTE-WH
  • 上流:eth0(RPi4の物理NIC)
  • 下流:eth1(USB to EtherのNIC)

RPi4をルーター化させるので、上流はRPi4のNIC、下流にはUSB to Etherで接続します。下流側は適当にL2を指して有線端末のパケットをキャプチャーするというわけです。

設定

設定の流れとしては…

  • インターフェイス(IP)の設定
  • DHCPの設定
  • DNSの設定
  • ルーティング設定
  • IPマスカレード

といった流れです。
最初のIPの設定を行います。上流はDHCPでIPが配布される前提で、下流は192.168.80.0/24のレンジを使います。

# デフォルトで設定されている /etc/netplan/50-cloud-init.yaml を修正
network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
        eth1:
            dhcp4: false
            addresses: [192.168.80.1/24]
            nameservers:
                    addresses: [8.8.8.8]
            optional: true
    version: 2

次はDHCPの設定です。下流側から見たらルーターとして動作するので、DHCPでのIP配布からDNSの設定を行います。まずはDHCP側からです。ここで下流側のドメインはcapture.devということにしておきます。

# パッケージを以下でインストール
# sudo apt install -y isc-dhcp-server
#
# /etc/dhcp/dhcpd.conf を修正
option routers 192.168.80.1;
option domain-name-servers 192.168.80.1;
option domain-name "capture.dev";
subnet 192.168.80.0 netmask 255.255.255.0 {
    range 192.168.80.2 192.168.80.252;
    option routers 192.168.80.1;
}
# 設定が終わったら以下で再起動
# systemctl restart isc-dhcp-server.service

次はDNSサーバーとしての設定です。転送先は8.8.8.8(google)を利用することにします。

# パッケージを以下でインストール
# sudo apt install -y bind9
# 
# /etc/bind/named.conf.options を修正
options {
	directory "/var/cache/bind";

  listen-on port 53 { localhost; 192.168.80.0/24; };
  allow-query { localhost; 192.168.80.0/24; };
  forwarders { 8.8.8.8; };
  recursion yes;

	dnssec-validation auto;

	listen-on-v6 { any; };
};

# named.conf.local を修正
zone "capture.dev" IN {
  type master;
  file "capture.dev.zone";
};

# 設定が終わったら以下で再起動
# sudo systemctl restart named

最後にルーティングさせる設定を行います。

# /etc/sysctl.conf を以下に修正
# net.ipv4.ip_forward=1
# 
# 設定を有効化
sudo sysctl -p

最後にIPマスカーレドの設定です。RPi4でNATの設定を行い ConeNAT、Symmetric NATのような設定を変えることで、下流側NW端末の挙動を簡単に確認できるようになるというわけです。

# iptableの設定保持用のパッケージをインストールしておく
# sudo apt install -y iptables-persistent
#
# ここでは単にルーターとして動作させるようにするため、設定を全部除去してから行う。
iptables -F 
iptables -t nat -F 
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o eth0 -j MASQUERADE
# symmetric nat用の設定の場合は以下
# iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o eth0 -j MASQUERADE  --random
iptables-save > /etc/iptables/rules.v4

それでは実際にtcpdumpで下流側の通信を見てみます。sshでRPi4の上流(eth1)側から接続して “sudo tcpdump -i eth1” としてキャプチャーします。eth1側(下流)から接続すると、接続している自身のssh接続も余分にキャプチャーされるので、上流側から接続した方がよいでしょう。以下のような感じでキャプチャーされている様子が分かると思います。

その他

最後にこんな物も入れて使っていたりするよ、ということで。Mac AppStoreからゲットできるWiFi Explorerという物を使って電波の強度・周辺のWiFiの状況をスキャンしたりもしています。電波強度、チャネルなど様々な情報を一覧・時系列で見ることが出来て電波状況をスキャンするとき、お手軽にPCで出来るので重宝しています。

ケーブルや電波を伝ってくるパケットは様々な形でキャプチャー、問題点の把握などで利用することが出来るので、対象によって使えるようにしておくと便利だと思います。

ブログの著者欄

新里 祐教

GMOインターネットグループ株式会社

プログラマー。GMOインターネットグループにて開発案件・新規事業開発に携わる。またオープンソースの開発や色々なアイデアを形にして展示をするなどの活動を行っている。

採用情報

関連記事

KEYWORD

採用情報

SNS FOLLOW