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