2015年8月2日 星期日

利用 RaspBerry pi 2 進行Wardriving

之前介紹的移動式滲透測試--帶著我的 Nexus7進行 Wifi 行動探索(Wardriving/Warwalking)是帶著一台外接無線網卡的平板進行Wardriving,最近跟著同事玩 RaspBerry Pi(見RaspBerry pi 2 + 3.5" TFT + Kali Linux 移動式滲透測試平台),想說用 RaspBerry 體積可以更輕巧,這篇就來談談用RaspBerry做成的 Wardriving 裝置,這台裝置已經事先安裝 Kali Linux for RaspBerry,這一部分就不再重述,如果不知如何在RaspBerry上安裝Kali,請參考RaspBerry pi 2 + 3.5" TFT + Kali Linux 移動式滲透測試平台。為了要將裝置做得更輕巧,且不易引人注目,所以也把3.5"的TFT螢幕拆掉了。
先來看看我的成品:
Wardriving 裝置的內部,就只有主機板及GSP模組

閤上蓋子後,就一個名片盒大小,右邊是偵查用的WiFi網卡(TP-Link:TL-WN721N),下方還有一只16GB的USB隨身碟
只有這麼小? 沒有螢幕? 不接鍵盤? 那要怎麼操作? 我是利用VNC,為了一開機就能透過VNC控制RaspBerry,需要做兩項設定:
第一項是啟用RaspBerry的DHCP功能:這樣才能讓控制端的電腦(或平板)連接到RaspBerry時自動取得相同網段的IP,我是利用 dnsmasq 來實作dhcp Server,設定步驟如下:
~# apt-get install dnsmasq             #安裝 dnsmasq
~# nano /etc/dnsmasq.conf           #編輯 dnsmasq.confi,內容如下
log-facility=/var/log/dnsmasq.log

port=
listen-address=192.168.5.1       # 這裡要對應到RaspBerry的有關網卡(eth0)
dhcp-leasefile=/tmp/dnsmasq.leases            # ip 配發結果的紀錄
interface = eth0                      #指定配發的介面卡
dhcp-range=eth0:1,192.168.5.151,192.168.5.200,12h
dhcp-option=1,255.255.255.0           #subnet mask
dhcp-option=3,192.168.5.254           #default gateway
dhcp-option=28,192.168.5.255         #broadcast

log-queries
log-dhcp

# 可設置不同名稱的 dnsmasq.conf,啟動 dnsmasq 時,用 -C CONF-FILE 指定

~#  nano /etc/network/interfaces               # 編輯 /etc/network/interfaces 加入以下內容
auto eth0
iface eth0 inet static
    address 192.168.5.1                  #使用固定位址,才知道連線對像
    netmask 255.255.255.0
    gateway 192.168.5.1

post-up /etc/init.d/dnsmasq start
post-down /etc/init.d/dnsmasq stop
 
完成上面設定後,將RaspBerry重開機(執行 reboot 指令),之後就可以藉由RaspBerry的Ethernet介面利用 SSH 操控RaspBerry,不過SSH開啟的是虛擬 TTY (pts/N),每次斷線後重新連線,並不一定可以回到前一組console,也就是說看不到之前執行的情形,所以才會想用 VNC。
第二項是安裝及設定VNC:步驟如下:
首先編輯 /etc/NetworkManager/NetworkManager.conf
managed=false 改成 managed=true
再執行 service network-manager restart     #重新啟動 network-manager

接著安裝  itghtvncserver
~# apt-get install tightvncserver
# 然後在 /etc/init.d 目錄裡建立 vncboot 檔案,內容如下:
### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO
# 上面的資料表頭要小心,不可敲錯字,否則可能無法順利執行 vncboot
#! /bin/sh
# /etc/init.d/vncboot

USER="root"
HOME="/root"

export USER HOME   # 將USER 及 HOME 轉為環境變數

case "$1" in      # 執行vncboot 時要指定 start 或 stop
start)
    echo "Starting VNC Server"
    #下一行可以自行設定螢幕解析度及顏色數
    su $USER -c "/usr/bin/vncserver :0 -geometry 1280x800 -depth 16 -pixelformat rgb565"
;;

stop)
    echo "Stopping VNC Server"
    /usr/bin/vncserver -kill :0
;;

*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac

exit 0

~# chmod 755 /etc/init.d/vncboot      # 將剛剛編輯的vncboot  設定為可執行檔
~# update-rc.d vncboot defaults       # 將 vncboot  設定為開機時執行的服務
~# service vncboot start                  # 第一次手動執行,以便設定連線密碼,密碼只能設8個字元

# 接下來要設定開機時,tty1 不執行getty,再搭配 ~/.profile 自動啟動 XWindow

~# nano /etc/inittab                     # 編輯 /etc/inittab
# 找到「1:2345:respawn:/sbin/getty 115200 tty1」 這一行,將它註解掉(在前頭加 # )

~# nano ~/.profile                          # 編緝 ~/.profile,內容如下
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then
    /usr/bin/startxfce4
fi                                           # 開機就進入 startx 模式

~# reboot                        # 重新啟動 RaspBerry

好了,先用我的筆電試試看,連接兩台的Ethernet 埠,嗯! 真的有自動取得IP,然後利用 VNC 連線成功。
既然要帶出門,總不能還要再加一台筆電吧!如果可以用平板就太棒了,幸好Nexus7可以利用外接式的USB Ethernet,就將筆電改成 Nexus7 !
或許您會問「幹嘛不用WiFi?」如果用WiFi就必須在RaspBerry多加一張無線網卡,還要多帶一台WiFi AP,何況Wardriving 裝置只有在「啟動」和「結束」時需要連線,無線網卡不連線時只有平白耗電。
左上角的零件就是USB 乙太網卡,RJ45網路線接在RaspBerry,另一端是USB接頭,接到平板電腦。

啟動平板上的VNC viewer,跟筆電一樣成功連線
接下來就是Wardriving所需的功能:

~# apt-get install kismet  gpsd                   # 安裝 Kismet 和 gpsd
~# mount /dev/mmcblk0p1 /boot               # mount RaspBerry的開機區,以便修改 cmdline.txt
~# nano /boot/cmdline.txt


# 將cmdline.txt中  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
中有關 ttyAMA0 的部分都刪除

~# nano /etc/inittab
# 編輯 /etc/inittab,將 T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
 這一行註解掉(在前頭加 # )

# 利用下列指令測試GPS是否有作用,記得要拿到室外
~# killall gpsd
~# gpsd /dev/ttyAMA0 -F /var/rungpsd.sock
~# cat /dev/ttyAMA0                    # 下了這一指令後,螢幕上應該會輸出一堆訊息

編輯 /etc/kismet/kismet.conf,找到下面這兩行,將註解取消,並指定適當的值(如我的網卡是wlan0,如果您的網卡不是wlan0,就該配合修正)
ncsource=wlan0
gpstype=gpsd

不想每次執行時都要敲落落長的指令,就寫成一支批次檔,並存成 do_kismet ,內容如下:
#! /bin/bash killall gpsd          #先關閉所有 gpsd 服務
sleep 3
gpsd /dev/ttyAMA0 &            # 重新以背景模式啟動 gpsd
sleep 1
if [ -n "$1" ]; then                # 如果有指定儲存目錄
   umount $1
   mount /dev/sda1 $1         #就將外接隨身碟 mount 到指定的目錄
   sleep 3
   kismet -f /etc/kismet/kismet.conf -p $1   # 啟動 kismet時就指定輸出目錄
else
   kismet -f /etc/kismet/kismet.conf
fi
sleep 3
killall do_kismet                   # 結束時,關閉所有 kismet 服務
echo "kismet is terminated!"

上面的批次檔,為了將收集到的資料寫到外接USB隨身碟,每次執行時都要指定 /mnt 參數,為了偷懶,另寫一支直接輸到隨身碟的短程式,命名為 do_kis
#! /bin/bash
./do_kismet /mnt

上面兩支批次檔,第一次存檔時,只是一般文字檔,並不能執行,請再執行下面兩行,將它們改成可執行。
~# chmod 755 do_kismet
~# chmod 755 do_kis

利用平板啟動VNC viewer 後,在 Console 裡執行 ./do_kis

啟動 kismet 確實有抓到AP  資訊
利用平板啟動 gpsd 及 Kismet後,就可以拔掉網路線,只要帶著那一小台RaspBeryy(含行動電源)到處走走,底下是我下班回家途中錄到的情形。

後記:
至於利用 Nexus 或 RaspBerry進行 Wardriving 哪一種方便?我個人覺得還是 Nexus 7 方便,只要外接無線網卡就解決了,也不用外接行動電源。只是 Nexus 7必須進行 Root,安裝 Kali 過程每繁瑣,而且 Nexus7 的價格也比 RaspBerry 高,之前若沒有準備 nexus 做為滲透工具,RaspBerry是相當不錯的選擇,特別是 RaspBerry 可以利用更換 micro SD 變換作業環境。

5 則留言:

  1. 終於 走馬觀花 囫圇吞棗 狼吞虎咽 得把博文粗閱了一遍。

    回覆刪除
    回覆
    1. 非常感謝您幫我衝人氣,個人所學有限,如果您發現內容有謬誤之處,也請您多多指教。畢竟不是敢寫就表示內容都是對的,而知識也因為大家分享才會愈來愈精進

      刪除
    2. 我只是一個 noob ,過來您的博客學習的。
      如果發現錯誤會指出來的,嗯,分享交流才會有進步。

      刪除
    3. 我只是一個 noob ,過來您的博客學習的。
      如果發現錯誤會指出來的,嗯,分享交流才會有進步。

      刪除
  2. 參考您的blog
    VNC部分使用RealVNC軟體(較習慣),隨開機啟動部分設定了幾天
    發現不需要修改到etc/init.d 或 rc.local 只要輸入重啟服務即可
    systemctl disable vncserver-x11-core
    systemctl enable vncserver-x11-core

    回覆刪除