Raspberry PiでWi-Fiアクセスポイントを立ててパケットキャプチャする!!
Raspberry Pi を使ってWi-FiのAPを作ります.ラズパイでAPを作ることで特にスマホやタブレットなどのパケットキャプチャができます.
たしか,Andorid,ios共に脱獄などしないとキャプチャできません. VPNやxcodeを使って一応できるようです.個人的には最初の環境構築に時間がかかりますがそれ以降は簡単に取得できると思います,Windows,LinuxなどではWiresharkでキャプチャできますが...
あとはロマンです.
Wi-Fiについて
Wi-Fiは言わずもがなIEEE802.11の中で規定されている無線LANの1種である.
主なWi-Fiバージョンは以下の通り.
世代 | 通称 | 規格名 | 最大通信速度 | 周波数 |
---|---|---|---|---|
第1世代 | - | IEEE802.11 | 2Mbps | 2.4GHz帯 |
第2世代 | - | IEEE802.11a | 54Mbps | 5GHz帯 |
- | IEEE802.11b | 11Mbps | 2.4GHz帯 | |
第3世代 | - | IEEE802.11g | 54Mbps | 5GHz帯 |
第4世代 | Wi-Fi 4 | IEEE802.11h | 600Mbps | 5GHz帯 |
第5世代 | Wi-Fi 5 | IEEE802.11ac | 6.9Gbps | 5GHz帯 |
第6世代 | Wi-Fi 6 | IEEE802.11ax | 9.6Gbps | 5GHz帯 |
以上の表からもわかるようにWi-Fiには2.4GHz帯と5GHz帯の2つを用いている
2.4GHz帯と5GHz帯のそれぞれの良し悪し
- 2.4GHz
-
長所:電波の到達距離が5GHz帯に比べてより遠く,遮蔽物に対しても強い
短所:電子レンジ,Bluetoothなどと近接した周波数を用いているため干渉が起きやすい.特にラズパイなど安定感が欠ける製品だと如実.5GHz帯と比べると速度が遅い - 5GHz
-
長所:電波の干渉が起きにくく通信速度が2.4GHzと比べると速い
短所:障害物や遮蔽物の影響を受けやすい.通信可能距離が2.4GHzと比べると短い.また,5GHz帯自体の欠点ではないがIoT機器などの低予算デバイスでは5GHz帯をサポートしていないことがある
実際に作ってみる
今回使用するものはRaspberry Pi model 4Bです.他のバージョンでも可能かどうかは使用しているWi-Fiチップセットによって変わるので調べてみてください.ちなみに,Wi-FiのmodeをAP用のMasterにできればAP化可能です.
Raspberry PiではどうやらBROADCOMのチップセットが用いられているようです.
AP化できるかはチップセットのドライバでmode Masterをサポートしているかに依存しています.
また,IntelではすべてのチップセットでAP化できないようにされているようなのでラズパイ以外で試す方はご注意を
intelのWi-Fiチップセットについて
用意するもの
- Raspberry Pi model 4B(結構発熱するので冷やすケースやファンがあるとなお良し)
- 有線LANケーブル(ラズパイではWi-Fi通信できますが,Wi-Fiでデータ通信を利用しつつAPにすることはできません)
まずはRaspberry Piの環境構築
Raspberry Pi のOSをSDカードに焼きます.
ラズパイのOSを焼くツールとして公式からRaspberry Pi Imagerというものが配布されています.
以下からどうぞ↓
様々なOSをインストールできますが今回はRasberry Pi OS(other)からRaspberry Pi OS Lite(64bit)を選択しました.
Raspberry Pi OSはDebian系のLinux OSです.今後の設定は他のDebian系Linux OSであるUbuntuやdebianなどでも可能ですが,少し設定が異なる場合があります.debianではrfkillがNICをソフトブロックする,本記事ではrc.localを用いていますが他のディストリビューションでは無効にされていたりします.変わりが提供されているのでそちらを使ってください.
選択してSDカードに焼いてください.終了後,ラズパイにさして起動します.
指示通りに初期設定を済ませてください.もし,初期設定がわからない方はほかの方の記事を参照してみてください.そこを作成するのがめんどかった(小声)
注意
初期設定終了後必ずアップデートをかけてください.不具合でうまくAPできない場合があります.また,電源をとるときはできるだけコンセント直接から取ってください.電源が不安定だとうまく動作しません.
sudo apt update
sudo apt upgrade
実際にLinuxで設定をする
使うソフトウェア
今回利用するLinuxでのソフトウェアは以下の通りです.
- dhcpcd:ネットワークインターフェースのIPアドレスの固定
- hostapd:Wi-Fiの送出
- dnsmasq:DHCPサーバ
- iptables;NAPT
dhcpcd
dhcpcdではWLAN用のNICのIPアドレスを固定します.固定しないとめんどくさくなります.
まずはインストール.(デフォで入っている場合もあります)
sudo apt-get install dhcpcd
インストールが完了できたら設定ファイルを編集していきます.
sudo nano /etc/dhcpcd.conf
ファイルを開いたらwlan0のipアドレスを固定する旨を書きます.IPはお好きなプライベートIPをどうぞ.
interface wlan0
static ip_address=192.168.0.1/24
hostapd
hostapdは実際にWi-FiのAPについて設定をするソフトウェアです.まずは,インストール.
sudo apt-get install hostapd
次に設定ファイルを開いて,設定ファイルを編集
sudo nano /etc/hostapd/hostapd.conf
設定ファイルは以下の通り
interface=wlan0
driver=nl80211 #Wi-Fiなので
#IEEE802.11の中でどのモードを使うか.NICが対応する中で最新を選ぶと良い
hw_node=g #IEEE802.11nを使う場合でもg.model 4Bではacまで利用可能
channel=6 #2.4GHz帯と5GHz帯で使えるチャンネルが異なる.周辺環境を踏まえて選ぶとよい.
macaddr_acl=0 #MACアドレスのフィルタリングをするか(0=off/1=on)
auth_algs=1 #認証方法(1=WPA/2=WEP.WEPは脆弱性が確認されているのでWPAを使う)
ignore_broadcast_ssid=0 #SSIDを非表示にするか
wmm_enabled=1 #wmmの設定
country_code=JP #国設定.大文字なので注意
ieee80211d=1
ieee80211h=1
ieee80211ac=0
ieee80211n=0
#無線出力設定
local_pwr_constraint=3
spectrum_mgmt_required=1
#WPAのバージョン設定 WPA3には対応していない.1=WPA,2=WPA2,3=両方.理由がなければ2に
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
ssid = #お好きなSSIDを
wpa_passphrase = #お好きなWi-Fiパスワードを
ここで,設定したファイルをhostapdが読み込めるようにデーモンを設定する
sudo nano /etc/default/hostapd
そしてファイルの13行目にある
DEAMON_CONF="/etc/hostapd/hostapd.conf"
と書き換えて保存する.
保存ができたらhostapdを再起動します.
sudo systemctl restart hostapd
再起動すると,
Failed to restart hostapd.service: Unit hostapd.service is masked
のようなメッセージが出てくるのでマスクを外します.ついでに自動起動できるようにします.
sudo systemctl unmask hostapd
sudo systemctl restart hostapd
sudo systemctl enable hostapd
再起動すると
● hostapd.service - Access point and authentication server for Wi-Fi and Ethern>
的な長々とメッセージが出てきたら成功です.おかしいと赤文字エラーが出ます,エラーメッセージを読んで修正してください.
dnsmasq
dnsmasqではDHCPサーバーの役割を持たせる.
sudo nano apt-get install dnsmasq
同様に設定ファイルを編集する.
sudo nano /etc/dnsmasq.conf
で設定ファイルを開いて一番下に以下を追加.
interface=wlan0 #dhcpサーバの対象インターフェースを指定
dhcp-range=192.168.0.2,192.168.0.100,255.255.255.0,24h
#↑は先ほど固定したIPと対応するように.第1,2引数は配布するIPの範囲,第3引数はサブネットマスク,第4はリース時間
iptables
IPマスカレードを行うための設定です.LAN内でのプライベートIPアドレスから外部サイトなどにアクセスるために用いるパブリックIPへの変換を行うNAPTの役割を担います.
まずはiptablesをインストール
sudo aot-get install iptables
実際にNAPTの設定を行う.
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ここで書いた設定は電源を落とすと失ってしまいます,そこで,rc.localなどに記述しておくことで電源を落としても設定を保持できるようにします.
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" #設定ファイルの書き出し
そしてrc.localに記述する.
sudo nano /etc/rc.local
でrc.local設定ファイルを開いて,exit 0以前に以下の通り書く.
iptables-restore < /etc/iptables.ipv4.nat
パケットをフォワーディングできる設定をする
sudo nano /etc/sysctl.conf
このファイルの中で
net.ipv4.ip_forward=1
と書き換えて設定を適用させる.
sudo sysctl -p
でnet.ipv4.ip_forward=1がでてきたらOK.
最後にネットワークインターフェースを作成する.
sudo nano /etc/network/interfaces
に以下を追加
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
保存できたら
sudo reboot
でできあがり.
お疲れ様です.
2つのAPを出す
以上のように,Raspberry Piでは一つのAPしか建てられません(NICが一つだけなので).しかしながら,2.4GHz,5GHzどちらも出したいという方もいるかと思います.
その場合にはUSBトングルを追加することで実現可能です!!!
利用するUSBトングルはELECOMのWDC-150SU2Mを利用しました.linux自体はサポートしていませんが有志の方が作成したドライバを利用してAP化が可能です.とっても感謝です!!
rtl8188euのドライバです
ドライバのgithubページはこちらから
この製品ではrealtek社のrtl8188EUというチップが用いられています.
linuxにもデフォルトでこのチップに対応したドライバが入っていますがAPには対応していません.そこで,対応したドライバに入れ替えることで
AP化を行います.つまり,この製品以外でも,AP化に対応したドライバがあれば実現可能です,
ドライバの導入
lssub #指しているUSB情報を取得
ドライバのソースコードを取得
cd ~
mkdir tools && cd tools
git clone https://github.com/aircrack-ng/rtl8188eus
不要なドライバを読み込み対象から外す
sudo echo 'blacklist r8188eu' | sudo tee -a 'etc/modprobe.d/realtek.conf'
同一名称のドライバを削除する
cd /lib/modules/$(uname -r)/kernal/drivers/net/wireless
rm -rf ./realtek ~/tools
コンパイル,インストール
cd ~/tools/rtl8188eus
make && sudo make install
以上を実行し再起動をかける
再起動後,読み込めているか確認
sudo airmon-ng
ドライバが適用できているか確認
airmon-ngがない時には
sudo apt install aircrack-ng
でインストールできます.
sudo iwconfid wlan1 down
sudo iwconfig wlan1 mode master #modeをmasterに
sudo iwconfig wlan1 up
でwlan1のmodeをmasterに
dhcpcd
interface wlan0
static ip_address=192.168.0.1/24
static routers=192.168.0.1
interface wlan1
static ip_address=192.168.1.1/24
static routers=192.168.1.1
hostapd
interface=wlan0
driver=nl80211
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
wmm_enabled=1
country_code=JP
ieee80211d=1
ieee80211h=1
ieee80211ac=0
ieee80211n=0
local_pwr_constraint=3
spectrum_mgmt_required=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
ssid= #SSID
wpa_passphrase= #password
driver=nl80211
hw_mode=a
channel=36
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wmm_enabled=1
country_code=JP
ieee80211d=1
ieee80211h=1
ieee80211ac=0
ieee80211n=1
local_pwr_constraint=3
spectrum_mgmt_required=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
ssid= #SSID
wpa_passphrase= #password
そして,
sudo systemctl stop hostapd
sudo systemctl disable hostapd
sudo systemctl start hostapd@wlan0
sudo systemctl start hostapd@wlan1
また,rc.localに以下を追加します.
sudo systemctl start hostapd@wlan0
sudo systemctl start hostapd@wlan1
dnsmasq
interface=wlan0
dhcp-range=wlan0,192.168.0.2,192.168.0.100,255.255.255.0,24h
interface=wlan1
dhcp-range=wlan1,192.168.1.2,192.168.1.100,255.255.255.0,24h
iptables
上述の通りです.
ネットワークインターフェース
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
allow-hotplug wlan1
iface wlan1 inet static
address 192.168.1.1
netmask 255.255.255.0
以上で再起動をすると動作します!!!
パケットを収集する.
ここまで頑張ってAPを作成した後にはパケット情報を収集したいと思います.今回はtcpdumpで収集を行います.
sudo apt install tcpdump
sudo tcpdump -i wlan0 -i wlan1
でリアルタイムにパケットを見ることができます.保存したい場合は-wオプションを付けてください.
まとめ
今回は,ラズパイでAPを作成する手段についてまとめました,後半駆け足となってしまいました,
必ずしもラズパイでないとできないわけではなく対応するNIC,ドライバ,Linuxがあれば可能です,スマホなどでは基本的にこのような手段でなければパケットキャプチャができないかと思います.
アプリなどでキャプチャできるようですが初期導入以降はアプリより簡単に取得できると思います.
また,IoT機器などではこの手法かスイッチのポートミラーリングを用いる手法でしかキャプチャできません.
誰かのお役に立てたらうれしいです.