本文講的是<b>科普知識:什麼是攻擊隐寫術</b>,
前言
隐寫術是以隐藏格式發送資料的做法,是以這些發送的資料都會僞裝成各種形式。“隐寫”一詞是希臘語στεγανό和γράφειν的組合,στεγανό的意思是“覆寫,隐藏或受保護”,而γράφειν的含義是“graphein”,意思是“寫作”。
與隐藏秘密消息的密碼術不同,隐寫術是對傳達的消息進行隐藏。隐寫術的概念于1499年首次引入,但這個想法的出現其實在古代就有了,比如在羅馬帝國,那些需要秘密傳送的資訊會被寫在奴隸的頭皮上,具體的做法就是先将他們的頭發剃光,再将這些資訊以紋身的方式刻在頭皮上,等頭發長長後,就派他們再去送信,然後接受者再次剃光那些人的頭發,并閱讀資訊。

網絡攻擊中的隐寫術
在20世紀由于技術的發展,隐形術也得到很大地發展,比如隐藏資料的方法或傳遞的方法等也有了很多的突破。然而,随着網絡的興起,一個危險的新趨勢正在出現,隐寫術越來越多地被黑客用來建立惡意軟體和網絡間諜工具。由于目前大多數反惡意軟體解決方案都沒有提供隐私保護,而有效載荷可以被秘密攜帶的任何載體構成潛在的威脅。它可能包含由間諜軟體滲透的資料,惡意程式與其C&C之間的通信,或新的惡意軟體。
在本文中,我們将用到以下一些使定義:
有效載荷:隐藏或秘密發送的資訊,或隐藏的資料;
營運商(stego-container):任何有效載荷秘密嵌入的對象;
Stego系統:用于建立隐藏通道以傳達資訊的方法;
信道:載波被傳送的資料通信信道;
密鑰:用于從載波中提取有效載荷的密鑰。
目前卡巴斯基實驗室的研究人員已經科學地開發和測試了各種隐寫方法和算法,他們的總結如下:
1.在LSB隐寫中,有效載荷被編碼到載波的一個或幾個最低有效位中并在其中傳送。用于承載有效載荷的位數越少,對原始載波信号的影響越小。
2.離散餘弦變換或基于DCT的隐寫術是通常應用于JPEG格式載波(即當JPEG圖像用于承載有效載荷時)的LSB隐寫術的子類型。在該方法中,所傳送的資料被秘密地編碼成DCT系數。在所有其他因素相同的情況下,該方法提供了較低的資料承載能力,其原因之一是0和1的系數值不能被改變,是以每當系數取這些值時,是不會對資料進行編碼的。
3.基于Palette的 image steganography 基本上是LSB隐寫術的另一種子類型,其中傳送的資料被編碼成圖像Palette的最低有效位,而不是載體的編碼。這種方法的明顯缺點是其低資料承載能力。
譯者注:Image Steganography是體積小,易于使用的應用程式,用來将隐秘資訊儲存在保護指定的圖像之中。這個小工具非常有意思,你隻需待加密的圖像到界面,然後輸入密碼字元串,或者也可以拖動一個密碼檔案,然後加密。加密後的圖像跟以前的圖像似乎沒什麼差別(輸入為PNG格式),但是裡面隐藏了隻有你才知道的奧秘。
4.以資料格式使用服務字段,這是一種相對簡單的方法,其中有效載荷被嵌入到營運商頭部的服務字段中。不過,該方法存在低資料承載能力和低有效載荷保護的缺點,不過可以使用正常圖像檢視軟體來檢測嵌入式有效載荷。
5.有效載荷嵌入是将有效載荷編碼到載波中并且在傳送時使用雙方已知的算法進行解碼的方法。可以将多個有效載荷獨立地編碼到相同的載體中,隻要它們的嵌入方法是正交的。
6.寬帶方法(Wideband methods)分為以下幾種:
6.1 僞随機序列方法,其中秘密載波信号由僞随機信号調制。
6.2 跳頻方法,其中載波信号的頻率根據具體的僞随機規律變化。
7.覆寫方法,嚴格來說,這不算是隐寫術,而且該方法還是基于一些包含頭檔案中的資料大小的資料格式,比如基于連接配接圖像檔案的着名的RAR / JPEG方法,是以它由JPEG格式部分以及RAR歸檔部分組成。 JPEG檢視器軟體程式将讀取檔案頭檔案中指定的邊界,而RAR存檔工具将忽略RAR之前的所有内容。是以,如果在圖像檔案檢視器中打開這樣的檔案,它将顯示圖像,如果在RAR歸檔器中打開,它将顯示RAR存檔的内容。這種方法的缺點是添加到載體段的疊加層可以在視覺上被分析人員審輕松地識别。
在本文中,我們将僅介紹圖像載體和網絡通信中隐藏資訊的方法。不過,現實情況中,隐寫術的應用要多得多。
最近,我們已經看到在以下惡意軟體程式和網絡間諜工具使用了隐寫術:
那麼為什麼惡意軟體的開發者會越來越多地在工具中使用隐寫術?我們發現了三個主要原因:
1.不僅隐藏資料本身,而且隐藏資料正在上傳和下載下傳的痕迹;
2.它有助于繞過與公司系統相關的DPI系統;
3.使用隐寫術可能有助于避免被APT産品檢測到,因為APT産品還無法處理所有圖像檔案(公司網絡中包含太多的圖像檔案,分析算法的費用相當高)。
而對于個人使用者來說,檢測載波内的有效載荷更是不可能的任務了。舉個例子,我們來看看下面的兩個圖檔。一個是空載體,另一個是有載荷的載波。我們将使用标準的測試圖像Lenna。
兩張不同格式的圖檔分别為786位元組和486位元組,然而,你能看出來Lenna_stego.bmp格式的圖像包含了納博科夫小說《洛麗塔》的前10章内容嗎?
仔細看看這兩個圖像。你能看到有什麼差別嗎?它們在尺寸和外觀上都相同。但是,内部包含嵌入消息的載體去不同。
問題很明顯:
1.隐寫術現在非常受惡意軟體和間諜軟體作者的歡迎;
2.反惡意軟體工具通常對載荷量很大的載體非常難以檢測,因為它們看起來像正常的圖像檔案或其他類型的檔案;
3.今天的所有隐寫檢測程式都是基本的Poc,而且他們的邏輯不能在商業安全工具中實作,因為它們的速度很慢,檢測率相當低,有時甚至包含計算錯誤。
上面列出了一個使用隐寫術來隐藏他們通信的惡意程式(盡管不是完整的)。我們來看看這個清單中的一個具體案例,惡意加載器Zero.T。
卡巴斯基的研究人員在2016年底發現了這個裝載器,并将其命名為Zero.T,因為這個字元串在其可執行代碼中(在通向PBD檔案的路徑中):
我們不會在這裡讨論惡意加載程式如何繞過受害者系統并駐留在其中,但會讨論它以Bitmap檔案的形式加載有效載荷:
然後以特定方式處理它們以擷取惡意子產品:
從表面上看,這三個BMP檔案似乎是圖像:
但是,它們不僅僅是我們看到一般圖像,它們是被充分載荷的通信載體,在每一副圖像中,最低有效位都被有效載荷代替。
那麼,有沒有辦法确定圖像是否攜帶惡意的有效載荷呢?當然是有的,最簡單的辦法就是視覺沖擊(visual attack)。它基于從源圖像形成新圖像,其中包含不同顔色平面的最低有效位。
讓我們看看如何使用史蒂夫•喬布斯照片作為示例圖像。
我們對這個圖像進行視覺沖擊,并以适當的順序從單獨的有效位建構新的圖像:
在第二和第三圖像中,高熵(高資料密度)區域是顯而易見的,這些區域包含嵌入式有效載荷。
聽起來很簡單,不過這種分析很難自動化。幸運的是,科學家早就開發出了一些基于圖像的統計特征來檢測載波。然而,所有這些方法的前提都是基于編碼的有效載荷具有高熵。這在大多數情況下是可用的,由于容器的容量有限,是以有效載荷在編碼之前被壓縮或加密,進而增加其熵。
然而,我們的現實生活中的惡意加載器Zero.T在編碼之前并沒有壓縮其惡意子產品。相反,它增加了其使用的最低有效位數,其可以是1,2或4。使用較大數量的最低有效位将視覺僞像引入到載體圖像中,普通使用者可以通過視覺沖擊進行檢測。但是這個手動過程比較麻煩,是以還是要依靠自動分析。這就引出了一個問題,适用于檢測熵低的嵌入式有效載荷的統計方法是什麼?
統計分析方法:直方圖法
這種方法在2000年由Andreas Westfeld和Andreas Pfitzmann提出,也被稱為卡方檢驗方法。下面我們簡單介紹一下。
分析整個圖像光栅,對于每種顔色來說,在光栅内計數擁有該顔色的點數。為了簡單起見,我們以正在處理的一個具有一個顔色平面的圖像為例。對于不包含嵌入式有效載荷來說(見下圖A),該方法假設擁有兩個相鄰顔色的像素數量(僅一個最低有效位不同的顔色)。對于具有有效載荷的載體圖像,擁有這些顔色的像素數量是相似的(見圖B)。
以上是可視化地表示該算法的簡單方法。
嚴格來說,算法由以下步驟組成:必須按順序執行:
1.有效載荷嵌入圖像中顔色i的像素的預期出現頻率計算如下:
2.将特定顔色的像素的出現的測量頻率确定為:
3.k-1自由度的卡方數為:
4.P是這些條件下分布ni和ni *相等的機率。通過積分密度函數計算:
這幾個步驟下來,我們就已經測試了這種方法是否适用于檢測填充的容器。以下是檢測結果:
p = 0.95和p = 0.99的卡方分布的門檻值分别為101.9705929和92.88655838。是以,對于計算出的卡方值低于門檻值的區域,我們可以認為相鄰顔色具有相似的頻率分布,是以我們正在處理具有有效載荷的載波圖像。
事實上,如果我們看視覺沖擊圖像,就可以清楚地看到這些區域包含一個嵌入的有效載荷。是以,該方法适用于高熵有效載荷。
統計分析方法:RS法
檢測有效載荷的另一個統計方法是由Jessica Fridrich,MiroslavGoljan和Andreas Pfitzmann在2001年提出。它被稱為RS方法,其中RS代表“正常或奇異”。
分析的圖像被分成一組像素組,然後對每個組應用特殊的翻轉程序(flipping procedure)。基于應用翻轉程序之前和之後的判别函數的值,所有組被劃分為正常,單數(singular )和不可用組。
該算法基于一種假設,即原始圖像中的正常和特殊像素組的數量必須近似相等,并且在翻轉之後的圖像中應用。如果這些組的數量在應用翻轉之後變化明顯,則表示分析的圖像是具有有效載荷的載體。
該算法包括以下步驟:
1.原始圖像被分為n個像素(x1,…,xn)的組。
2.定義所謂的判别函數,其配置設定給每個像素組G =(x1,…,xn)實數f(x1,…,xn)∈
3.像素組(x1,…,xn)的判别函數可以定義如下:
4.然後我們定義具有以下屬性的翻轉函數:
根據應用翻轉之前和之後的判别函數的值,所有像素組都分為正常,單數和不可用組:
我們也将這種方法用于測試,并得到以下結果。我們使用與上一次測試相同的空載和有效載荷的載波。
請注意,這種攻擊方法在“該特定載體是否包含嵌入式有效載荷”方面沒有通過二進制校驗,而是确定嵌入式有效載荷的近似長度(以百分比表示)。
從上面的結果可以看出,該方法傳回了一個空消息的判定,它填充了小于1%的有效載荷,而對于有載荷載入的載體,它傳回了大約44%的填充結果。顯然,這些結果略有偏離。我們來看看裝滿的容器:從視覺沖擊來看,超過50%的容器被填滿,而RS檢測則告訴我們,44%的容器已經裝滿了。是以,如果我們建立一定的“觸發門檻值”,我們可以應用這種方法:我們的實驗表明10%是足夠的可靠性門檻值。如果RS檢測聲稱超過10%的容器已滿,你可以信任此檢測,并将該容器标記為被填滿。
現在是時候在真實的條件下,在有載荷具有規則熵的零載波上測試這兩種方法了,。
我們進行了适當的測試,結果如下:
我們看到,卡方檢測不适用于低熵圖像,因為産生不令人滿意的或不準确的結果。然而,RS檢測卻運作良好:在這兩種情況下,都檢測圖像中有隐藏的有效載荷。然而,如果自動分析方法檢測不準,該怎麼辦?
在這種情況下,我們可以應用針對特定惡意軟體家族開發的特定程式來提取有效載荷。對于上述的Zero.T加載器,我們已經編寫了我們自己的嵌入式有效載荷提取工具,其操作可以了解如下。
顯然,如果我們得到一個有效的結果(是一個可執行檔案),那麼源圖像中就有一個嵌入的有效載荷。
DNS隧道也是隐寫術嗎?
我們可以考慮使用DNS隧道進行隐寫術的子類型,首先,讓我們回顧一下DNS隧道的工作原理。
從封閉網絡中的使用者計算機發送請求以解析域,例如發送域wL8nd3DdINcGYAAj7Hh0H56a8nd3DdINcGYAlFDHBurWzMt[.]imbadguy[.]com 到一個IP位址,(在此URL中,二級域名無意義)。本地DNS伺服器會将此請求轉發到外部DNS伺服器。而外部DNS伺服器又不知道第三級域名,是以它會向前傳遞這個請求。是以,此DNS請求遵循從一個DNS伺服器到另一個DNS伺服器的重定向鍊,并到達域imbadguy[.]com的DNS伺服器。
惡意軟體的開發者可以通過解碼其第一部分來解決DNS伺服器上的DNS請求,而不是從接收到的域名中提取所需的資訊。例如,可以以這種方式傳送關于使用者系統的資訊。作為回應,惡意軟體的開發者的DNS伺服器還以解碼格式發送一些資訊,将其放入第三或更進階别的域名。
這意味着每個DNS分辨率的攻擊者具有255個字元的預留位置,子域名最多為63個字元。每個DNS請求發送63個字元的資料,并傳回63個字元作為響應等等。這樣就使得它成為一個正常的資料通信管道。最重要的是,它是隐藏的通信管道,肉眼看不到任何額外的資料。
熟悉網絡協定的專家,特别是DNS隧道的專家,才會對包含這種通信的流量轉儲很敏感,這可以通過包含太多的長域被發現。比如,我們正在檢視由Trojan Backdoor.Win32.Denis生成的流量的現實示例,其使用DNS隧道作為隐藏通道與C&C進行通信。
借助任何流行的入侵檢測(IDS)工具(如Snort,Suiricata或BRO IDS),都可以檢測DNS隧道。這可以使用各種方法完成,例如,最常用的就是使用在DNS解析過程中發送的域名在隧道期間比通常要長得多。
alertudp any any -> any 53 (msg:”Large DNS Query, possible cover channel”; content:”|01 00 00 01 00 00 00 00 00 00|”; depth:10; offset:2; dsize:>40; sid:1235467;)
這也是一個相當原始的方法:
Alert udp $HOME_NET and -> any 53 (msg: “Large DNS Query”; dsize: >100; sid:1234567;)
在這裡有很多的方法可以找出虛假數量和檢測實際DNS隧道執行個體之間的平衡。
除了可疑的長域名外,還有哪些其他因素可能有用呢?比如域名的異常文法。典型的域名通常包含字母和數字。但如果一個域名包含Base64字元,它會看起來很可疑,不是嗎?如果這樣的域名也很長,那麼肯定有存在某種問題或陰謀。
其實還有很多的異常因素,正規表達式對檢測它們有很大的幫助。
我們注意到,目前巴斯基實驗室的惡意軟體分析工具中,已經把DNS隧道檢測的方法加進去了,并檢測到使用DNS隧道作為C&C通信的隐蔽通道的幾個新的、以前未知的後門。
總結
我們看到惡意軟體開發人員使用隐寫術的趨勢已經出現并呈現強進的上升勢頭,包括隐藏C&C通信和下載下傳惡意子產品。對于惡意軟體的開發者來說,這是一種實作隐寫術有效的方法,因為考慮到使用者配備有效載荷檢測工具是很昂貴的一筆支出,是以這意味着大多數安全解決方案目前還無法處理可能包含隐寫術有效載荷的所有對象。
然而,确實存在有效的解決方案,它們基于不同的分析方法,及時的預檢測,潛在有效載荷的中繼資料分析等的組合。目前,這種解決方案在卡巴斯基實驗室的反目标攻擊(Anti-Targeted Attack,KATA)解決方案中就實作了。在部署KATA的情況下,資訊安全人員可以及時了解對受保護範圍所遭受的攻擊或資料正在被滲透的證據。
原文釋出時間為:2017年8月14日
本文作者:luochicun
本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。
<a href="http://www.4hou.com/technology/7022.html" target="_blank">原文連結</a>