本文所介紹的工具適合家庭環境下的「黑盒測試」,它能夠幫助你記錄網絡中發生的全部事情。你能夠用它來檢測網絡威脅,或將數據提供給相關專家來進行網絡取證分析。html
若是你須要的是企業環境下的解決方案,你能夠參考Security Onion的【這篇文章】。python
1. 樹莓派3 (外殼+電源+電路板)linux
2. 閃迪Class 10 microSD卡 64GB(80Mb/s)nginx
3. Debian OS-Linux RaspbianLitegit
4. 網件千兆交換機或其餘支持端口鏡像的設備,我使用的是D-Link1100-08Pgithub
5. Critical Stack API(Threat Intel/ IOCs)sql
6. Mailgun帳號或相似支持警報/通知的郵件服務數據庫
總價值:約75英鎊ubuntu
什麼是端口鏡像?vim
將一個端口的流量數據複製到另外一個端口(被動式),會增長交換機的運行負荷。
什麼是Bro?
一款IDS協議分析工具,你能夠把它看成Wireshark的協議分析器,可是它沒有GUI界面,並且速度更快。
什麼是Netsniff?
進行數據包捕獲的守護進程,它使用了AF-packet來提高數據包的捕捉速度。
什麼是LOKI?
基於YARA的文件掃描守護進程。有些相似基於簽名檢測的反病毒產品,可是你能夠自行制定檢測規則。
什麼是Critical Stack?
一個威脅情報平臺,你能夠在樹莓派上經過API來與該平臺連接。
什麼是Team Cymru MHR?
一個惡意軟件哈希庫,你可使用該數據庫中的信息來對檢測到的惡意程序哈希進行匹配。
1. 把系統刷到樹莓派中
2. 給樹莓派分配一個IP
3. 運行bash腳本
4. 搞定
我使用的是MacBook,因此不一樣平臺的方法可能會有所不一樣,其餘平臺用戶能夠參考【這篇教程】來獲取更多內容。
插入microSD卡:
diskutil list
找到磁盤號:
diskutil unmountDisk /dev/disk<disk#from diskutil>
將Raspbian鏡像刷入到microSD卡’disk’中:
sudo dd bs=1m if=image.imgof=/dev/rdisk<disk# from diskutil>
完成以後,卸載microSD卡:
diskutil unmountDisk /dev/disk<disk#from diskutil>
使用默認配置登陸。用戶名:pi,密碼:raspberry。
設置wlan0(wifi)的IP,用於受信管理訪問:
sudo nano/etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="The_ESSID_from_earlier" psk="Your_wifi_password" }
sudo ifdown wlan0 sudo ifup wlan0 ifconfig wlan0
當你獲取到了一個DHCP IP以後,你可使用SSH訪問這個節點了。接下來,將eth0留下看成鏡像接口,它不須要設置IP地址。
sudo apt-get update && sudo apt-get-y install vim sudo vim /etc/network/interfaces
添加下列代碼:
iface eth0 inet static static ip_address=0.0.0.0
重啓eth0接口:
sudo ifconfig eth0 down && sudoifconfig eth0 up
下載並運行bash腳本,腳本已在Raspbian上成功測試。
-安裝程序的核心組件
-配置網絡選項(禁用NIC offloading)
-給每個程序建立服務
-使用Mailgun/SSMTP建立郵件警報
-配置cron任務
pi@foxhound:~# sudo su - root@foxhound:~# apt-get install -y git root@foxhound:~# cd ~ root@foxhound:~# git clonehttps://github.com/sneakymonk3y/foxhound-nsm.git root@foxhound:~# chmod +xfoxhound-nsm/foxhound.sh root@foxhound:~# ./foxhound-nsm/foxhound.sh
如今,環境部署已經徹底完成啦!
接下來呢?當腳本完成運行以後,全部的服務都會被馬上激活,而後你就能夠看到全部流入的數據啦!
經過pcap數據來向鏡像端口eth0發送一些垃圾信息,我使用的是一些提早準備好的數據:
pi@foxhound:~ $ sudo tcpreplay -t -K -q--loop=10 --intf1=eth0 /opt/foxhound-1476541443.pcap Actual: 1048570 packets (1050923190 bytes)sent in 87.62 seconds. Rated:11994102.0 bps, 91.51 Mbps, 11967.25 pps
下面是發送前和發送後的broctl netstats數據:
root@foxhound:/etc/network# broctl netstats bro: 1476547903.768150 recvd=1951368 dropped=5408 link=1956776
root@foxhound:/etc/network# broctl netstats bro: 1476548144.248161 recvd=3012168 dropped=14608 link=3026776
對於家庭或實驗室環境來講,它的性能相對還算很好了(1000000個數據包只會丟棄10000個)。個人帶寬速度爲40Mbps,對於IDS系統來講已經足夠了。若是你還須要提高性能,建議考慮換掉樹莓派。
若是你想進行更多的NIC perf測試,你能夠在服務器上運行下列命令:
mark@ubuntu:~$ sudo apt install iperf3 mark@ubuntu:~$ iperf3 -s ----------------------------------------------------------- Serverlistening on 5201
而後在樹莓派上運行:
root@foxhound:~# apt install iperf3 root@foxhound:~# iperf3 -c 10.0.0.7 -i 1 -t20 Connecting to host 10.0.0.7, port 5201 [ 4]local 10.0.0.180 port 38562 connected to 10.0.0.7 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 8.86 MBytes 74.3 Mbits/sec 0 89.1 KBytes ... ... ... [ 4] 19.00-20.00 sec 9.26 MBytes 77.7 Mbits/sec 0 1.23 MBytes - - - - - - - - - - - - - - - - - - - - - -- - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-20.00 sec 185 MBytes 77.5 Mbits/sec 139 sender [ 4] 0.00-20.00 sec 184 MBytes 77.1 Mbits/sec receiver iperf Done.
我假設這裏的瓶頸是microSD卡,它的速度大約是80MB/s。
-全部Bro日誌的默認存儲路徑爲/nsm/bro/logs/
-默認的腳本路徑爲/usr/local/bro/share/bro/site/bro-scripts/
日誌目錄結構大體以下所示:
pi@foxhound:/nsm/bro/logs/current $ ls-lash
total 6.9M
4.0K drwxr-xr-x 3 root root 4.0K Oct 15 16:11 .
4.0K drwxr-xr-x 5 root staff 4.0K Oct 1516:50 ..
4.0K -rw-r--r-- 1 root root 349 Oct 15 16:51 app_stats.log 4.0K -rw-r--r-- 1 root root 121 Oct 15 15:51 .cmdline 16K-rw-r--r-- 1 root root 14K Oct 15 16:30communication.log 2.9M -rw-r--r-- 1 root root 2.9M Oct 15 16:52 conn.log 16K-rw-r--r-- 1 root root 14K Oct 15 16:52dhcp.log 384K -rw-r--r-- 1 root root 379K Oct 15 16:52 dns.log 4.0K -rw-r--r-- 1 root root 345 Oct 15 15:51 .env_vars 1.2M -rw-r--r-- 1 root root 1.2M Oct 15 16:52 files.log 1.6M -rw-r--r-- 1 root root 1.6M Oct 15 16:52 http.log 4.0K -rw-r--r-- 1 root root 291 Oct 15 16:44 known_hosts.log 4.0K -rw-r--r-- 1 root root 327 Oct 15 16:34 known_services.log 12K-rw-r--r-- 1 root root 11K Oct 15 16:50notice.log 4.0K -rw-r--r-- 1 root root 5 Oct 15 15:51 .pid 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.communication 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.conn 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:01 .rotated.conn-summary 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.dhcp 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.dns 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.files 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.http 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.known_hosts 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.known_services 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.loaded_scripts 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.notice 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.packet_filter 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.software 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.ssl 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.weird 4.0K -rw-r--r-- 1 root root 18 Oct 15 16:00 .rotated.x509 4.0K -rw-r--r-- 1 root root 3.0K Oct 15 16:51 software.log 320K -rw-r--r-- 1 root root 314K Oct 15 16:52 ssl.log 4.0K -rw-r--r-- 1 root root 58 Oct 15 15:51 .startup 4.0K drwx------ 3 root root 4.0K Oct 15 15:51 .state 4.0K -rwx------ 1 root root 18 Oct 15 15:51 .status 4.0K -rw-r--r-- 1 root root 46Oct 15 15:51 stderr.log 4.0K -rw-r--r-- 1 root root 188 Oct 15 15:51 stdout.log 24K-rw-r--r-- 1 root root 17K Oct 15 16:52weird.log 416K -rw-r--r-- 1 root root 412K Oct 15 16:52 x509.log
你可使用head命令來查找文本域名稱:
pi@foxhound:$ head dns.log #separator \x09 #set_separator , #empty_field (empty) #unset_field - #path dns #open 2016-10-15-16-00-01 #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto trans_id query qclass qclass_name qtype qtype_name rcode rcode_name AA TC RD RA Z answers TTLs rejected #types time string addr port addr port enum count string count string count string count string bool bool bool bool count vector[string] vector[interval] bool
使用bro-cut來解析日誌:
pi@foxhound:$ cat dns.log | bro-cut -D tsid.orig_h id.orig_p id.resp_h id.resp_p proto query answers TTLs
基礎報告:
pi@foxhound:$ bro-cut query < dns.log |sort | uniq -c | sort -rn | head -n 10
若是你還須要更多的示例,你能夠查看Bro提供的官方練習【傳送門】。
你可使用tail命令輸出DNS日誌並在客戶端生成一些DNS流量:
tail -f dns.log | awk '{print $3, $7, $9}'
請注意,只有conn.log才能夠啓用MaxMind GEOIP查詢。
pi@foxhound:$ bro-cut resp_cc < conn.log| sort | uniq -c | sort -rn | head -n 10 755 US 524 RO 123 GB 49 NL 28 EU 25 IE 10 DE 7 ES 6 CA
我尚未製做儀表盤(Dashboard),若是你不想本身作的話,你能夠直接使用VPS ELK實例在雲端存儲全部的日誌,或者你也可使用ELK/Splunk/Graylog將日誌存儲在本地。
開啓/中止netsniff-ng:
pi@foxhound:~ $ sudo service netsniff-ngstop pi@foxhound:~ $ sudo service netsniff-ngstart pi@foxhound:~ $ sudo service netsniff-ngstatus
開啓/中止bro(網絡統計):
pi@foxhound:~ $ sudo -i broctl stop pi@foxhound:~ $ sudo -i broctl start pi@foxhound:~ $ sudo -i broctl netstats pi@foxhound:~ $ sudo -i broctl status
手動運行Loki:
root@foxhound:~ $ python /nsm/Loki/loki.py--noprocscan --dontwait --onlyrelevant -p /nsm/bro/extracted -l /nsm/Loki/log
檢測CriticalStack的入侵威脅指標(IoCs),可經過cron腳本實現按期檢查:
root@foxhound:~ $ sudo -u critical-stackcritical-stack-intel list
1. 部署網絡安全監控:http://www.appliednsm.com/
2. 網絡安全監控實踐:https://www.nostarch.com/nsm
3. Laika BOSS-對象掃描系統:https://github.com/lmco/laikaboss
4. PassiveDNS:https://github.com/gamelinux/passivedns
5. D3js(圖形化工具):https://d3js.org/
6. Graylog:https://www.graylog.org/