黑客滲透筆記 黑客挑戰賽之蜜罐取證

黑客滲透筆記 黑客挑戰賽之蜜罐取證技術

黑客花無涯 帶你走進黑客世界系列文章

學習黑客經典書籍 網絡黑白 某寶有售

接觸了某蜜罐取證挑戰賽的遊戲,環境是某IDS捕抓到一次Linux環境入侵的網絡流量,要求參加遊戲者通過pcap文件分析出攻擊過程,其中涉及到逆向、RSA密鑰破解以及信息隱藏等技術。

檢測低交互蜜罐:

配置失真與資源搶奪

我們已經知道低交互蜜罐是不能夠給敵人提供一個完整的操作系統環境,所以可以通過使用一些複雜的命令和操作,以及一些想不到的輸出解決來檢查是不是處在蜜罐環境中。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

另外一種情況就是出現了配置失真,也就是說在一臺機器上出現了兩種不同平臺的服務,舉個例子:運行一個Windows的Web服務器同時運行了一個Linux的FTP服務器,這樣的話就出現了配置失真。使用nmap -sV這個方法可以來觀察開啟的服務,如果發現了平臺與服務不匹配的,說明這很有可能就是一個蜜罐。

首先一如往常,舉辦方提供一份pcap文件,並有幾份簡單的日誌文件,如圖1所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

其中的doc文件就是此次比賽的問題了,大體如下:

1)攻擊者如何獲取登錄主機的權限;

2)攻擊者如何隱藏信息;

3)提供所有密鑰,隱藏信息;

4)最後的payload目的是什麼。

既然有shadow,就放到一臺服務器上用john跑下,這裡我們主要關注pcap文件(根據以往的經驗,這個pcap文件將會包括我們想要的東西)。

先用WireShark和NetworkMiner分別載入pcap文件看看。在WireShark中進行數據總覽,通過觀察,發現連接協議只有ssh和http(估計是出題者精簡掉某些包了),而且前期均是發起ssh連接請求,後期則是數個http通信。而前期的ssh通信過程中,可以觀察到都是不同高位端口連接服務器的22端口,交換密鑰,之後進行簡短的數據通信就關閉了連接,進行下一次的ssh連接,所以我們有理由相信這是使用sshbruteforce進行的攻擊。如圖2所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

圖3是john跑出來的結果,都是很弱的密碼。我們再看看sudoers.log文件的內容,如圖4所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

黑客滲透筆記 黑客挑戰賽之蜜罐取證

猜到manager或者sean的密碼再sudo下就是root了,多可愛的蜜罐。接著我們繼續看WireShark,如圖5所示。

在ssh暴破過後,可以看到為數不多的幾個http通信。通過Networkminer把httprespond中返回的數據提取出來,如圖6和圖7所示。(中國黑客協會創始人花無涯)

黑客滲透筆記 黑客挑戰賽之蜜罐取證

黑客滲透筆記 黑客挑戰賽之蜜罐取證

用file遞歸識別文件,可以發現d1和d2都是elf文件,其中d1是elf可執行文件,d2是模塊,d3則是shell腳本,其他被編碼過的文件名都是bmp圖片。還是先從明文的d3入手,看看能不能找到什麼蛛絲馬跡。

d3的目的是把d1移到/var/mail/mail中執行,加載模塊d2並加入到/etc/modules中,方便以後加載。啟動d1,把其pid寫入/proc/dmesg,最後清理環境。難道d1和d2才是malware?啟動IDA,加載模塊d2,如圖8所示。得益於Linux模塊沒有去掉函數名和調試信息,可以很清楚地看到模塊的流程如下:

黑客滲透筆記 黑客挑戰賽之蜜罐取證

Our_Proc_File=create_proc_entry(dmesg);//創建/proc/dmesghide_pid(ori_proc_readdir,my_proc_readdir);

結合上面d3的腳本,很容易猜到d2模塊是用來隱藏d1進程(pidofmail)的pid。我們整理下思路,從之前的分析得知,攻擊者先用爆破猜到ssh密碼,然後用wget拖了幾個文件到victim,為什麼我能確定是wget?看http通信的user-agent就知道了。其中d3是腳本啟動d1和d2,d2用於隱藏d1,而d1估計就是我們期待已久的malware了。很有意思的一點是,d1調用的libc.so版本是libc.so.6。查看常見的Linux發行版的CHANGELOG,發現REDHAT、centos和ubuntu服務器版本的CHANGELOG都沒用到那麼高版本的glibc,只有fedora16和比較新的ubuntults才包含這個版本的glibc。

接著我們來看看d1。首先還是動態跟蹤程序,strings查看程序,發現有UPX字樣。直接upx–d,用官方的加殼工具就能脫掉。再用ida觀察string,如圖9所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

有過base64編碼經驗的,對第一段字符串可能會很敏感,因為它苦惱是base64中引用到的字符串。先不忙下結論,接下來的一行“wget-O%s%shttp://%s/n/%s”很有意思,在WireShark裡用http,.request過濾看看數據包,如圖10所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

IP地址和在IDA中看到的string剛好匹配,http請求中都是http://xxx/n/xxx格式。結合兩者,現在可以判定圖片是由d1調用wget下載的。接著用IDA查看彙編代碼,程序沒有被strip過,能夠直接看到符號表symtable以及函數名,下面的偽代碼是main()函數的流程。

這樣整個流程就大概清楚了,接著就是真正考驗彙編功底的時候了。首先入手的是整個程序最複雜的makeKeys()函數,瀏覽該函數,發現好幾個有意思的函數和全局變量。

random()//產生隨機數genPrime()//產生primenum=quickPrimeTest()add(),subtract(),dec(),product()//經過逆向發現是大數加法,減法,自減,乘法//lookupPriv=PRIVATElookupMod=Module模數lookupPriv,lookupMod看到這麼多大數的運算函數,很容易想到是類RSA算法。類似RSA算法的套路一般如下:/**************************//*letp,qtoprime*/*/*/通過隨機數,計算出大素數p,q,注意p,q不能相同/*n=p*q/*oula(n)=(p-1)(q-1)/*lete:gcd(o(n),e)/*ed==1modo(n)歐拉函數*/歐幾里德求最大公約數gcd(a,b)=gcb(b,(amodb))*/e*d全等與1取模o(n)/**************************/公匙為Pu(e,n)Pr(d,n)利用方法:M^emod(n)=CC^dmod(n)=M//M是待加密的數據,C是取模後的數據(加密後)

//類rsa加密的巧妙之處就在這裡了對照這一套路,可以看到makeKeys()和以上的算法是十分類似的。而makeKey()使用隨機數調用getPrime()確定素數,再利用素數調用大數運算函數產生全局變量lookupMod、lookupPriv、lookupSize,和lookupFile。同時,我們在makeKey中的gcd使用的e為0x10001。由以上種種,我們猜測就是類RSA算法。下面我們要加以證明,因為整套程序的漏洞就在於此了。

makeKey後的操作是requestFile,就是通過base64把lookupMod編碼後向那幾個IP請求文件,如圖11所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

requestFile後程序通過decryptMessage來解密數據。該函數首先打開先前wget下的圖片,再調用extract_message,從圖片中釋放被加密的信息。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

我們再看看extract_msg函數。注意malware下載下來的圖片都是bmp格式的,extract_msg很明顯是從圖片中釋放被加密的信息。bmp有lsb隱藏的方式,我這裡簡單畫個圖進行說明,如圖13所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

一個bmp文件跟elf之類的文件一樣,先需要一個bmpfilehead來簡單描述圖片,通過infohead詳細描述,如圖片高度、寬度,再之後就是圖片的每個像素的信息了,每個字節中存放rgb和lsb信息,我們能改寫的就是lsb位了。因為lsb位又名最不重要位,由於bmp文件的性質,改變lsb位不會影響人們對圖片的敏感度。lsb位在每個字節的最後1位,也就是每一字節能存放1bit的數據。如圖14所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

以上這些信息還都是我們的猜想,還需要結合代碼來看,如圖15所示。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

extract_msg的原理就是先讀取bmp文件,並把offset指向文件開始的0x36處(bmp文件頭長為0x36=54),然後提取每字節的最後1bit,組合4byte作為長度(getbyte),再繼續讀出n*8byte數據。知道原理代碼就好寫了,我們可以利用一段簡單的python腳本實現類似extract_msg的功能。

defextract_message(bmp):data_offset=struct.unpack(c,bmp[10])[0]

從圖片中提取的信息明顯不是明文的,肯定是被之前rsakey加密過的(因為extract_ms後decrypt_Message函數再調用一次powmod()),這點更證明了之前encrypt類型是使用類RSA算法的判斷。

在decryptMessage後的processMessage()函數就相當的簡單了,通過之前rsadecrypt出來的文件,processMessage會用於判斷其文件頭是否包含PON還是NUR(不正是NOP和RUN的反轉嗎?),如圖16所示。如果發現是RUN,就把文件寫入/var/mail/sysutil,並通過popen執行。

黑客滲透筆記 黑客挑戰賽之蜜罐取證

這樣,整個程序的流程就分析出來了,關鍵問題是decryptMessage函數。據目前可知的攻擊RSA算法的方法,均是分解模數N,只要通過分解N,即能確定兩素數,這個RSA算法就沒有意義了。在與友人交流的時候,他們提醒了我一點,就是makeKey()函數中產生素數的時候,第二個素數是根據第一個素數產生的。這樣導致的問題便是,使用費馬大數分解

法,將在幾秒之內分解出兩個素數。

這份代碼很可能是malware編寫者在寫代碼時疏漏了,明明生成了兩個隨機數,可是第二個getPrime()居然使用第一個prime作為基數來生成第二個素數,由此使用費馬分解法能很簡單地分解出兩個相近的素數的乘積(也就是N)。

這裡就直接提供python代碼了。我們可以GDB調試.

學習黑客經典書籍 網絡黑白 某寶有售

中國黑客協會 普及網絡安全知識,讓更多的人學習並重視網絡安全和信息安全。

中國黑客協會是一種精神的傳承,黑客代表是一種精神,它是一種熱愛祖國、堅持正義、開拓進取的精神。


分享到:


相關文章: