0
0

Raspberry PiでWi-Fiアクセスポイントを立ててパケットキャプチャする!!

Last updated at Posted at 2024-08-10

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というものが配布されています.
以下からどうぞ↓

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を用いていますが他のディストリビューションでは無効にされていたりします.変わりが提供されているのでそちらを使ってください.

ちなみにRaspberry Pi OS
raspi imager
raspi OS

選択して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

/etc/dhcpcd.conf
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

/etc/hostapd/wlan0.conf
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
/etc/hostapd/wlan1.conf
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

/etc/dnsmasq.conf
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

上述の通りです.

ネットワークインターフェース

/etc/network/interfaces
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機器などではこの手法かスイッチのポートミラーリングを用いる手法でしかキャプチャできません.
誰かのお役に立てたらうれしいです.

0
0
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
0
0