Bro 建置與介紹

TONY
5 min readMar 28, 2018

--

Bro 是一個很強大的開源網路流量分析的框架,我們可以把他想成是一個強化版的 IDS(Intrusion Detection System)

安裝環境

  • ubuntu 16.04
  • Bro 2.5.3

# 安裝原文:https://www.digitalocean.com/community/tutorials/how-to-install-bro-on-ubuntu-16-04

Pre-install

sudo update

sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev git
sudo apt-get install bison cmake flex g++ gdb make libmagic-dev libpcap-dev libgeoip-dev libssl-dev python-dev swig2.0 zlib1g-dev

Download both the IPv4 and IPv6 databases

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz
gzip -d GeoLiteCity.dat.gz
gzip -d GeoLiteCityv6.dat.gz
sudo mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
sudo mv GeoLiteCityv6.dat /usr/share/GeoIP/GeoIPCityv6.dat

Install

git clone --recursive git://git.bro.org/bro

# 進入 clone 下來的資料夾後,檢查本機環境
./configure
# 建立安裝的程式,需要花一段時間
make
# 安裝完記得看有無錯誤訊息
sudo make install

建立軟連結 or 加入 PATH

這個擇一做就好囉

# 軟連結 
sudo ln -s /usr/local/bro/bin/broctl /usr/local/bin/broctl
sudo ln -s /usr/local/bro/bin/bro /usr/local/bin/bro
# PATH
export PATH=/usr/local/bro/bin:$PATH

修改參數檔

請檢查的需監聽的網卡(這個步驟是一定要修改的),當然後面還有很多要改的,但目前只需要監聽封包這個功能,所以我們只修改這裡

sudo vim /usr/local/bro/etc/node.cfg

Bro 的操作

安裝完畢後,我們有兩種使用的方式,一種是使用 Broctl,另一種是直接使用 command-line 運行 bro

使用 broctl

$ sudo broctl # 初始化參數 
>> install

# 錄製與停止
# 這邊如果出現錯誤訊息,可以用 diag 來檢測
>> start
>> stop

在內部可以做許多操作,詳情可以查看help

主要程式預設是放置在

/usr/local/bro

錄製結束後的檔案會被封裝在下面路徑

# 錄製中
/usr/local/bro/logs/current
# 錄製完
/usr/local/bro/logs/{錄製日期}

使用 command-line 運行 bro

會直接在運行位置下生成檔案

sudo bro -i {網卡裝置}

可以利用 bro-cut 幫你整理資料

# 幫你把時間做轉換 
cat ssl.log | /usr/local/bro/bin/bro-cut -C -d | tail -n 5

Using Docker

這邊我有嘗試利用 docker 來監聽,但最後失敗了,還是記錄下並且改使用替代方案

Docker image

Capture Live Traffic(失敗)

選定好網卡讓 bro 直接錄製

$ docker run --rm --cap-add=NET_RAW --net=host -v ${PWD}:/pcap:rw blacktop/bro -i eth0

這邊只能監聽到 docker 內部的網路,沒有看到本地端的網卡裝置,就算已加入 --net=host 參數依舊無法監聽本地端的網路,如果要監聽 host 的網路可能需要額外的導入?

需再研究一下 docker 內部的網路
https://docs.docker.com/network/

Capture Live Traffic with tcpdump(替代方案)

所以這裡使用 tcpdump 的方式來監聽本地端網路

sudo tcpdump -i en6 -w output.trace

我們可以加入 -s 參數來抓到更完整的封包

sudo tcpdump -i en0 -s 0 -w mypackets.trace

我們可以使用ifconfig 來找出系統中正確的網路卡介面取代 en0 (而 -s 0 可以告訴 tcpdump 抓取完整的 packets ,有些時候要使用 -s 65535)

接著用 bro 分析,他會使用預設的腳本來對錄製好的 trace 做分析,會輸出數個檔案

docker run --rm -v ${PWD}:/pcap:rw blacktop/bro -r output.trace

--

--