構建一個高交互型的難以發現的蜜罐
本文我將手把手的帶大家來,構建一個高交互型的蜜罐。我們將會利用到兩款開源工具sysdig和falco,來幫助我們快速構建這個系統。在正式開始之前,讓我們對什么是高交互型蜜罐?以及sysdig和falco做個簡單的了解!
一、高交互型蜜罐
一個高交互蜜罐是一個常規的計算機系統,如商用現貨(commercial off-the-shelf ,COTS)計算機、路由器或交換機。該系統在網絡中沒有常規任務,也沒有固定的活動用戶,因此,除了運行系統上的正常守護進程或服務,它不應該有任何不正常的進程,也不產生任何網絡流量。這些假設幫助檢測攻擊:每個與高交互蜜罐的交互都是可疑的,可以指向一個可能的惡意行為。因此,所有出入蜜罐的網絡流量都被記錄下來。此外,系統的活動也被記錄下來備日后分析。
相較于低交互型蜜罐,高交互型蜜罐由于運行著帶有所有漏洞的真實的操作系統,沒有使用仿真,攻擊者可以與真實的系統和真實的服務交互。因此,允許我們捕獲大量的威脅信息,同時也更難被攻擊者發現。
二、Sysdig和Falco
sysdig是一款開源的工具,可以捕獲并保存當前正在運行的Linux的系統狀態及活動。因此這對于我們進行相關進程、網絡和I/O活動的離線分析,提供了極大的便利。Sysdig falco是一個活動行為監視器,用于檢測和發現應用程序中的異常活動。Falco可以檢測和警告涉及使Linux系統調用的任何行為。借助于sysdig的核心解碼和狀態跟蹤功能,可以通過使用特定的系統調用其參數,以及調用進程的屬性來觸發falco警報。
三、將服務器轉換為蜜罐
作為一個合格的蜜罐服務器,都應該具有文件捕獲和cifs-utils包,以掛載到保存我們sysdig抓取文件的遠程samba共享上。
四、手動安裝
Sysdig和falco可以部署在不同的Linux發行版中。以下是在不同發行版中的安裝過程:
1.RHEL,CentOS和Fedora下的安裝:
- 信任Dralex GPG密鑰并配置yum存儲庫
- 安裝EPEL存儲庫(只有在發行版中不提供DKMS時,才需要使用)。你可以使用“yum list dkms”驗證DKMS是否可用。
- 安裝內核頭文件
- 安裝falco
以下為命令執行過程(注意在root權限下運行)
- rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
- curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
- rpm -i http://mirror.us.leaseweb.net/epel/6/i386/epel-release-6-8.noarch.rpm
- yum -y install kernel-devel-$(uname -r)
- yum -y install falco psmisc
2.Ubuntu,Debian下的安裝
基本步驟與上面一致,操作命令如下:
- curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add -
- curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list
- apt-get update
- apt-get -y install linux-headers-$(uname -r)
- apt-get -y install falco
五、自動安裝
為了讓大家能夠在任何Linux發行版中快速部署sysdig和falco,我們特意開發了一個簡易的chef cookbook,大家可以在GitHub上獲取到它。
當cookbook成功執行后,sysdig將開啟連續捕獲模式,以便持續捕獲系統的運行狀態和活動。同時falco也開始運行,將所有警報發送到syslog。這里我們需要確保文件捕獲已經開啟,并將syslog發送到我們設置的集中分析的ELK堆棧。此外,我們還需要檢查 sysdig捕獲文件目錄,是否已經存在于samba共享。最后一步配置弱口令的root帳戶,例如passw0rd和test123。
要創建一個蜜罐,我們需要克隆一個合適的受害者機器,并在該系統上運行cookbook。Red Hat,Fedora,CentOS,Debian或Ubuntu操作系統都可以正常運行cookbook。注意!以下命令必須要以root身份運行。
- wget https://packages.chef.io/files/stable/chefdk/1.0.3/ubuntu/16.04/chefdk_1.0.3-1_amd64.deb
- dpkg -i chefdk_1.0.3-1_amd64.deb
以上命令是在Debian操作系統中獲取并安裝Chefdk。對于其他架構包請參閱此鏈接。
現在讓我們來安裝git并克隆cookbook庫。
- apt-get install git -y
- mkdir ~/cookbooks
- cd ~/cookbooks
- git clone https://github.com/mwrlabs/honeypot_recipes sysdig-falco
- cd sysdig-falco
在運行cookbook之前,請確保當前我們系統的內核版本為最新版本。這樣可以避免內核和kernel-devel包之間的版本不同問題。
然后,我們執行以下命令來運行cookbook:
- chef-client --local-mode --runlist 'recipe[sysdig-falco]'
當cookbook被成功執行后,我們可以看到一個名為mysysdig的文件,在/etc/init.d/目錄下被創建。該init腳本將使用以下參數啟動sysdig:
- sysdig -C 5000 -W 3 -w /usr/local/src/image.$(date +"%Y%m%d-%H%M%S").gz > /dev/null 2>&1 &
Sysdig將以連續捕獲模式啟動(選項-W)。使用-C選項,指定捕獲文件的大小。最后使用-w選項,將我們捕獲的文件保存到/usr/loca/src/目錄中。此外,我們還可以通過編輯/sysdig-falco-cookbook/templates/default/目錄下cookbook中的mysysdig.erb文件來更改這些選項。
六、Samba服務器
除了蜜罐服務器,我們還需要有一個samba服務器,以便實時發送我們捕獲的文件。以下是samba服務器的設置步驟。
- apt-get install samba -y
- smbpasswd -a ubuntu
ubuntu是我們的用戶名。創建一個目錄,用于保存sysdig的捕獲文件。
- mkdir -p /home/ubuntu/image
然后編輯位于/etc/samba/目錄下的smb.conf文件,并在該文件的末尾附加以下內容:
- [image]
- path = /home/ubuntu/image
- valid users = ubuntu
- read only = no
最后,讓我們來啟動samba服務。
- /etc/init.d/samba restart
現在我們可以來啟動init腳本了,這將啟動sysdig程序。但是在此之前,我們需要在/usr/local/src/目錄下,掛載遠程文件共享。
- apt-get install cif-utils -y
- mount.cifs -o user=ubuntu //IP_of_samba_server/image /usr/local/src/image/
出現密碼提示,輸入我們之前設置的密碼。
現在我們運行init腳本,以確保falco正在運行,并通過init腳本啟動sysdig。
- /etc/init.d/falco status
- /etc/init.d/mysysdig start
七、監控攻擊者
我們嘗試監測攻擊者何時與我們的蜜罐進行互動。我們的蜜罐基本架構如下:
- 作為蜜罐的幾臺Linux機器
- 一臺作為samba服務器的Ubuntu機器
- 一臺安裝了ELK(Elasticsearch Logstash Kibana)堆棧的Ubuntu機器。
選擇ELK堆棧是因為它適合于消耗和分析,來自syslog的sysdig/falco輸出的數據。
我們在兩個蜜罐上安裝了文件捕獲,以便將syslog和auth.log都發送到ELK堆棧。
為了檢測攻擊者,我們監控了Kibana中的身份驗證日志(auth.log)。除了身份驗證日志,我們正在監控falco警報。例如,下圖顯示的falco警報,說明了某人與我們的一個蜜罐進行了互動。
我們還可以通過觀察sysdig捕獲文件的大小,來初步判斷是否有人與我們的蜜罐進行了互動。突然增加,則表明有人正在與我們的蜜罐進行互動,因為這些機器上本身的活動很少。
八、實例探究
為了驗證我們的Sysdig/Falco蜜罐主機,對攻擊者的監控和檢測的有效性,我們打算將蜜罐放置在公網的云設備上。
1. 案例研究1
我們將蜜罐暴露在互聯網上,很快我們得到了第一個結果。攻擊者試圖猜解我們的root賬戶密碼,如圖。
從上圖可以看出,攻擊者的行為發生在17:25:00。在17:26:36,我們又捕獲了一個不同的IP試圖猜解root密碼,如圖。
我們確信雖然IP不同,但應該是同一人所為。最初,攻擊者嘗試爆破的IP地址為221.194.44.216,可能使用的是爆破腳本或肉雞,而后密碼被成功爆破后,地址又回到了原IP 103.42.31.138。以下兩圖顯示了它們的相關聯性:
從上面的第一張圖,我們可以看到,IP地址221.194.44.216有2522個生成的警報(右上角)。這些警報與爆破root密碼的失敗嘗試相關聯,如圖。
攻擊者獲取到root密碼后,又返回到了原IP 103.42.31.138重新訪問目標機器。搜索與此特定IP地址相關聯的不同警報,我們發現只有以下兩個警報,如圖所示。
falco警告顯示,有人突破了我們的蜜罐,如下圖所示。
我們快速下載sysdig捕獲的文件,并運行以下鑿子(鑿子是用于分析sysdig捕獲的事件流的小腳本)。
- sysdig -r image.20160721-1547320 -c list_login_shells
我們使用另一個鑿子,通過使用sysdig運行以下命令,基于loginshellid來查看攻擊者運行的命令。
- sysdig -r image.20160721-1547320 -c spy_users proc.loginshellid=1743
從falco的警報,我們看到攻擊者在/etc/cron.hourly目錄中創建了一個名稱為zbbpxdqalfe.sh的文件。sysdig能夠幫助我們輕松的看到文件的內容,因為sysdig記錄了每一個I/O操作。
運行以下命令:
- sysdig -r image.20160721-1547320 -A -c echo_fds fd.filename=zbbpxdqalfe.sh
我們得到以下輸出信息。
搜索攻擊者運行的命令“mv /usr/bin/wget /usr/bin/good ”,我們發現了一個關于嘗試DDoS不同目標的ELF惡意軟件二進制的分析。該分析講述了一種多態惡意軟件,在“/bin”或“/usr/bin”目錄下創建了具有隨機名稱的不同可執行文件,我們可以從以下falco警報中看到。
2. 案例研究2
為了更進一步的研究,我們又為系統添加了三個賬戶,并分別使用了僵尸網絡通常會嘗試爆破的賬戶及密碼,分別為user,user2,且用戶名和密碼相同。幾個小時后,我們發現有人用用戶名“user”進行了登錄。十四分鐘后,攻擊者又再次登錄,我們可以從auth.log到kibana看到。
我們檢查了falco警報信息,但并沒有發現與該事件相關的信息。我們從samba服務器下載了sysdig捕獲文件,嘗試看看發生了什么。首先,我們使用”spy user” 鑿子來查看已執行的所有交互式命令。
- sysdig -r image.20160729-104943.gz0 -c spy_users
我們觀察了攻擊者執行的一些命令。為了更清楚地看到攻擊者試圖做什么,我們再次運行相同的鑿子,但是這次我們使用proc.loginshellid過濾器字段來限制spy user鑿子的輸出。從上圖可以看出,攻擊者的登錄名為2308,所以我們運行:
- sysdig -r image.20160729-104943.gz0 -c spy_users proc.loginshellid=2308
并觀察以下輸出。
我們可以看到攻擊者試圖為不同的處理器架構運行一些二進制文件。他們試圖運行的第一個二進制文件名為kaiten。在google中搜索kaiten二進制文件,我們可以看到,這個惡意軟件二進制文件是用C編寫的,并且已經在許多漏洞利用數據庫站點中公開已久。主要目的是通過利用我們的unix和IoT設備,來實現對不同目標的DDoS。更多信息請點擊鏈接。
分析二進制文件時,我們發現沒有一個符號被剝離,這也使得我們更容易對其進行逆向工程。經過一些額外的研究,我們發現github上的一個腳本是用于設置該惡意二進制文件的。硬編碼的加密密鑰/通道密鑰都沒有被改變,這也說明攻擊者剛剛下載并運行的就是github上的這個腳本。通過對Jackmy$arch二進制文件的逆向我們發現,這些二進制文件通過/usr/bin/sshd替換進程(proc名稱)的第一個參數,在ps aux中隱藏其進程列表。
九、總結
以上我們學習了,如何利用Sysdig和falco來快速的構建一個高交互型蜜罐。以及通過兩個研究案例,證明了該蜜罐系統的有效性。從中我們也可以看出,對于一個企業或組織而言,建立一套良好的防御體系的重要性和不可或缺性。在安全方面的投入,作為企業而言永遠不能吝嗇!