31 March 2013

DD-WRTでtcpdumpを用いてリモート・パケットキャプチャ

BUFFALO WHR-AM54G54にインストールしたDD-WRTでtcpdumpを使えるように設定を行い、ssh接続したリモート端末でWiresharkを用いて通信パケットの解析をする方法。

■ DD-WRTのどのファームウエアを使うべきか

DD-WRT公式ページの“Router Database”検索で、“WHR”と入力して表示されるWHR-AMG54を選択すると、次のように数種類のファームウエアが提示される。

Firmware v24 preSP2

  • Micro Generic : dd-wrt.v24_micro_generic.bin (1.69 MB)
  • Mini Generic : dd-wrt.v24_mini_generic.bin (2.89 MB)
  • Standard Generic : dd-wrt.v24_std_generic.bin (3.58 MB)

tcpdumpをインストールするためにはJFFSを使う必要があるので、「DD-WRT : Journalling Flash File System」によれば、

To enable JFFS you will need a router with at least 4MB flash, a build that supports JFFS such as the Mini build which is the smallest build to support JFFS thus leaving the most space for the JFFS partition, and your build must leave at least 324KB of flash free for the JFFS file system structure which will not be usable space. v24 pre-SP2 Standard builds no longer leave enough space for JFFS on 4MB devices so use the Mini build or one of Eko's specialty builds.

http://www.dd-wrt.com/wiki/index.php/Journalling_Flash_File_System#Prerequisites

と書かれていて、StandardではなくMiniのファームウエアを使う必要があるとのことだ。(BUFFALO WHR-AM54G54のフラッシュメモリは4MBytesのため)

■ JFFSの有効化

DD-WRT管理用Webの“管理”ー“管理”画面を開き、中央よりやや下のJFFS2の設定で

20130331-ddwrt-jffs2.jpg

JFFS2の設定
・JFFS2 … 有効をチェック
・JFFS2の保存領域の初期化 … 初めて有効化する時は必ずチェック

■ SSHサーバの有効化

DD-WRT管理用Webの“ネットワーク”ー“サーバ/サービス”画面を開き、SSHを有効化する。

20130331-ddwrt-ssh.jpg

■ tcpdumpのインストール

Installing TCPDump on DD-WRT WRT54GL」を参考に、tcpdumpをインストールする。

telnetかsshでDD-WRTをインストールしたルータに接続し

# mkdir -p /tmp/smbshare/tmp/ipkg
# cd /tmp/smbshare/tmp/ipkg
# wget http://downloads.openwrt.org/whiterussian/packages/libpcap_0.9.4-1_mipsel.ipk
# ipkg -d smbfs install libpcap_0.9.4-1_mipsel.ipk
# wget http://downloads.openwrt.org/whiterussian/packages/tcpdump_3.9.4-1_mipsel.ipk
# ipkg -d smbfs install tcpdump_3.9.4-1_mipsel.ipk

■ tcpdumpをローカルで起動する

# env LD_LIBRARY_PATH=$LD_LIBRARYATH:/tmp/smbshare/usr/lib /tmp/smbshare/usr/sbin/tcpdump -i vlan1

■ リモートのWiresharkでキャプチャする

# ssh -x root@dd-wrt env LD_LIBRARY_PATH=$LD_LIBRARYATH:/tmp/smbshare/usr/lib /tmp/smbshare/usr/sbin/tcpdump -i vlan1 -s 0 -U -w - | wireshark -k -i -

The authenticity of host 'dd-wrt (172.29.1.1)' can't be established.
RSA key fingerprint is 10:5a:36:84:74:aa:4d:29:94:b5:2c:96:a9:44:ae:03.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'dd-wrt' (RSA) to the list of known hosts.
DD-WRT v24-sp2 mini (c) 2010 NewMedia-NET GmbH
Release: 08/07/10 (SVN revision: 14896)
root@dd-wrt's password: パスワードを入力
tcpdump: listening on vlan1, link-type EN10MB (Ethernet), capture size 65535 bytes

■ この方法の問題点

ルータの電源を切ると、インストール前の状況に戻ってしまう。なんとか、不揮発領域に書き込めないものなのか…