LoginSignup
16
19

More than 5 years have passed since last update.

Raspberry Pi 3 ModelB で2.4GHz無線パケットキャプチャー

Last updated at Posted at 2018-05-12

目的

Raspberry Pi 3 ModelBで無線パケットキャプチャーをして遊ぶ

環境

  • Raspberry Pi 3 ModelB
  • Wireshark v2.2.6

作業メモ

参考サイト

https://qiita.com/eggman/items/b82c5b85438c1f4e4c86
http://cha-shu00.hatenablog.com/entry/2017/10/24/203112

無線LANのインターフェースをモニターモードに変更する

パケットキャプチャーするには無線LANのインターフェースをモニターモードにする必要がある
ここではその設定を行う

  • 無線LAN(ここではwlan0)の現在のモード設定を確認する
$ iwconfig
wlan0     ・・・
          Mode:Managed  
(以下略)

現在のモードはManagedとなっている。これをmonitorに変更するのが目的

  • モニターモードへの変更を試みる
$ sudo iwconfig wlan0 mode monitor
Error for wireless request "Set Mode" (8B06) :
    SET failed on device wlan0 ; Operation not supported.

そんな操作には対応していないから変更できない、とエラーが出た
参考サイトの情報などからすると、モニタモードに変更するための機能がない状態らしい
そのため、それを追加する方法を実施していく

モニターモード変更機能の追加

前項に引き続き参考サイトを見ると、以下を適用すればいい模様1
https://github.com/seemoo-lab/nexmon

その中でも次の手順を実施すればよい

・Build patches for bcm43430a1 on the RPI3/Zero W or bcm434355c0 on the RPI3+ using Raspbian (recommended)
・Using the Monitor Mode patch

Build patches for bcm43430a1 on the RPI3/Zero W or bcm434355c0 on the RPI3+ using Raspbian (recommended)

必要なDriverやfirmwareをビルドする
細かい手順は割愛して、特記事項だけ以下に記載していく

  • makeに失敗する

以下の手順を行うと、firmwareのインストールに失敗した

Install the patched firmware on your RPI3: make install-firmware

$ make install-firmware
(略)
COPYING brcmfmac43430-sdio.bin => /lib/firmware/brcm/brcmfmac43430-sdio.bin
cp: 通常ファイル '/lib/firmware/brcm/brcmfmac43430-sdio.bin' を作成できません:  許可がありません
Makefile:183: ターゲット 'install-firmware' のレシピで失敗しました
make: *** [install-firmware] エラー 1

Makefileを確認すると、以下のような警告が書かれており、インストールできない場合は手動でコピーが必要になる

$ less Makefile
(略)
else
        $(warning Warning: Cannot install firmware on this arch., bcm43430-sdio.bin needs to be copied manually into /lib/firmware/brcm/ on your RPI3)

なので、手動でコピー

$ sudo cp brcmfmac43430-sdio.bin /lib/firmware/brcm/brcmfmac43430-sdio.bin
  • Optionについて

以下のように書かれているが、wpa_supplicant以外で無線LANのインターフェースをコントロールする方法などご存じないので、実施していない

Optional: remove wpa_supplicant for better control over the WiFi interface: apt-get remove wpasupplicant

Using the Monitor Mode patch

  • Optionの実施

最初にこのOptionを実施した
(再起動時にmakeしたDriverをロードするための設定なので必要)

Optional: To make the RPI3 load the modified driver after reboot:

ちなみにkernelのversionは以下で確認できる

$ less /proc/version
Linux version 4.14.34-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1110 SMP Mon Apr 16 15:18:51 BST 2018
  • モニターモードのインターフェース(mon0)を追加する

これにより無線LANインターフェースのwlan0はそのままでパケットキャプチャーできる
つまり、パケットキャプチャーしつつ、WiFiは普通につなげる

モニターモードのインターフェースmon0を追加(無効状態)

$ sudo iw phy `iw dev wlan0 info | gawk '/wiphy/ {printf "phy" $2}'` interface add mon0 type monitor

モニターモード(Mode:Monitor)で追加されているか確認

$ iwconfig
(略)
mon0      IEEE 802.11  Mode:Monitor  Frequency:2.462 GHz  Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on

インターフェースを有効にする

$ sudo ifconfig mon0 up

パケットキャプチャーする

  • wiresharkでパケットキャプチャー

sudoしてwireshark起動
(sudoしないとmon0への権限がないためかパケットキャプチャーできなかった)

$ sudo wireshark

2.4GHzパケットのキャプチャーができていることを確認できた!

チャンネル変更してのパケットキャプチャー

かなり苦戦したのでメモとして残しておく
この方法だとwlan0のインターフェースをdownするので、パケットキャプチャー中はWiFiが使えない2

  • チャンネル変更前の準備

wlan0のWiFi機能を使って何かやっている場合はその機能を停止しておく
(例えば、SSH接続など)

  • wlan0のインターフェースをdown
$ sudo ifconfig wlan0 down
  • モニターモードのインターフェースmon0を追加(無効状態)
$ sudo iw phy `iw dev wlan0 info | gawk '/wiphy/ {printf "phy" $2}'` interface add mon0 type monitor

作成時の状態を確認
チャンネルは1ch(2.412GHz)になっている

$ iwconfig mon0
mon0      IEEE 802.11  Mode:Monitor  Frequency:2.412 GHz
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
  • チャンネル変更3

例として6ch(2.437GHz)へ変更する

$ nexutil -k6

チャンネルが変更されているか確認

$ iwconfig mon0
mon0      IEEE 802.11  Mode:Monitor  Frequency:2.437 GHz
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
  • インターフェースを有効にする
$ sudo ifconfig mon0 up

あとは sudo wireshark してwiresharkで6chのパケットキャプチャーができていることを確認できればOK!

まとめ

チャンネル変更などしつつ無線パケットのキャプチャーができたので目標達成!

Raspberry Pi 3 ModelBで無線パケットキャプチャーをして遊ぶ

課題としては、チャンネル変更してのパケットキャプチャーでも触れたが、wlan0をdownしないでチャンネルを変更する方法の検討が挙げられる。
(何となく理屈的に無理な気もするが)


  1. 一応サポートデバイスなのかをちゃんと確認。https://github.com/seemoo-lab/nexmon のSupported Devicesを確認すると、確かにBCM43438のモニターモードに対応していることが分かる 

  2. wlan0のインターフェースをdownしないでチャンネル変更できる方法を知っている方がいれば教えてほしい・・ 

  3. wlan0そのままでこの変更をすればいいのでは?と思うかもしれないが、mon0wlan0は同じphy0経由でインターフェースを作っているので、おそらくwlan0が何かしらのチャンネルでWiFi接続している場合、その設定を変更できないものと思われる(予想含む) 

16
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
19