網(wǎng)絡(luò)釣魚技術(shù)之HTML走私
時(shí)間:2023-07-22 04:39:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-07-22 04:39:01 來源:網(wǎng)站運(yùn)營
網(wǎng)絡(luò)釣魚技術(shù)之HTML走私:
前言
今天介紹一種走私技術(shù),HTML Smuggling,這不是一種特別新的攻擊方法,但是它確實(shí)在越來越多的攻擊場(chǎng)景中出現(xiàn),其中就包括網(wǎng)絡(luò)釣魚。接下來我們就來了解一下HTML走私的來龍去脈以及它在釣魚中是怎樣被利用的吧。
HTML走私介紹
什么是HTML走私?HTML走私是指,瀏覽器根據(jù)HTML文件的內(nèi)容在主機(jī)上創(chuàng)建惡意文件,而不是直接轉(zhuǎn)發(fā)/下載惡意軟件的一種技術(shù)。HTML走私可以通過在HTML頁面中將惡意文件隱藏為編碼后的“string”來繞過外圍安全性檢查和在線檢測(cè)。
大多數(shù)周邊/在線安全檢測(cè)方法都是通過匹配文件中的某些特定模式。但在HTML走私的情況下,惡意文件被嵌在瀏覽器中,所以檢測(cè)這樣隱藏的代碼是困難的。而且由于代碼中的混淆,甚至檢測(cè)HTML走私這種情況本身也很困難。
利用方法
在去年也就是2020年的網(wǎng)絡(luò)釣魚調(diào)查中,我遇到了兩種本質(zhì)上不同的HTML走私方式。這兩種方案都將數(shù)據(jù)存儲(chǔ)在HTML文件中,并且提供了無需向服務(wù)器發(fā)送額外請(qǐng)求就可以“下載”數(shù)據(jù)的方法。此外,這兩種方案都是基于HTML5的下載屬性(雖然不是強(qiáng)制性的但是有好處)。
Javascript Blob
先介紹第一種方案,基于JavaScript Blob,也是我經(jīng)??吹降姆桨?。Blob對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類文件對(duì)象。它的數(shù)據(jù)可以按照文本或二進(jìn)制的格式進(jìn)行讀取,也可以轉(zhuǎn)換為ReadableStream來讀取。借助Blob,我們可以將我們的惡意文件存儲(chǔ)在HTML代碼中,然后將其置入瀏覽器中,而不是直接向Web服務(wù)器發(fā)送文件上傳請(qǐng)求。
我們可以通過下面兩個(gè)鏈接來創(chuàng)建我們的HTML頁面:
https://gist.github.com/darmie/e39373ee0a0f62715f3d2381bc1f0974
https://developer.mozilla.org/en-US/docs/Web/API/Blob
要存儲(chǔ)文件,首先,需要將文件編碼為base64,可以在PowerShell中使用一下代碼來實(shí)現(xiàn):
$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($FileName))
然后替換下面html文件中
<>
所指的值。
fileName
變量表示你希望在默認(rèn)情況下下載文件的名稱。
base64_encoded_file
變量存儲(chǔ)
base64
編碼后的文件。
<html> <body> <script> var fileName = <> var base64_encoded_file = <>+WX:machinegunjoe666 免費(fèi)獲取資料 function _base64ToArrayBuffer(base64,mimeType) { var binary_string = window.atob(base64); var len = binary_string.length; var bytes = new Uint8Array( len ); for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); } return URL.createObjectURL(new Blob([bytes], {type: mimeType})) } var url = _base64ToArrayBuffer(base64_encoded_file,'octet/stream') const link = document.createElement('a'); document.body.appendChild(link); link.href = url; link.download = fileName; link.innerText = 'Download'; </script> </body> </html>
現(xiàn)在只要我們點(diǎn)擊上面的鏈接,就會(huì)開始下載步驟。
DataURL
實(shí)現(xiàn)HTML走私的另一種方案是使用DataURL。這種解決方案就不需要使用JavaScript了。使用DataURL進(jìn)行HTML走私的目標(biāo)就是將較小的文件嵌入HTML文件中。
雖然上面強(qiáng)調(diào)了小文件,但是實(shí)際上,限制也不是很嚴(yán)格。DataURL的最大長度由瀏覽器中的最大URL長度決定。比如,在Opera中,這個(gè)大小是65535個(gè)字符,雖然這個(gè)字節(jié)數(shù)對(duì)于轉(zhuǎn)移1080p的電影來說是遠(yuǎn)遠(yuǎn)不夠的,但是用來反彈shell已經(jīng)足夠了。
這種方法比第一種基于JS Blob的要簡(jiǎn)單得多。先看一下語法:
data:
:前綴;
[<mediatype>]
:可選項(xiàng),是一個(gè)MIME類型的字符串,比如我們最常見的image/jpeg
表示JPEG圖像,如果缺省,默認(rèn)值為text/plain;charset=US-ASCII
;
[;base64]
:可選項(xiàng),如果數(shù)據(jù)是base64編碼的,那么就用;base64
標(biāo)記
,
:將數(shù)據(jù)與控制信息分開;
<data>
:數(shù)據(jù)本身。
<html> <body> <a href="data:text/x-powershell;base64,aXBjb25maWcNCmhvc3RuYW1l" download="test.ps1"> Download </a> </body> </html>
這是一個(gè)簡(jiǎn)單的HTML例子,加載該頁面的時(shí)候會(huì)顯示一個(gè)download按鈕。我們點(diǎn)擊下載,瀏覽器就會(huì)將
test.ps1
文件保存到我們的電腦上。而寫入的內(nèi)容自然就是
aXBjb25maWcNCmhvc3RuYW1l
base64解碼后的內(nèi)容。
發(fā)現(xiàn)了一個(gè)比較有意思的事情。當(dāng)講將
<a>
標(biāo)簽中的
download
去掉后,也就是變成了下面的樣子:
<html> <body> <a href="data:text/x-powershell;base64,aXBjb25maWcNCmhvc3RuYW1l" > Download </a> </body> </html>
我們重新在Chrome瀏覽器中打開并嘗試下載,這個(gè)時(shí)候發(fā)現(xiàn),這個(gè)按鈕已經(jīng)失效了,點(diǎn)擊不會(huì)有任何反應(yīng)。但是用Firefox打開,依舊可以下載文件,只不過firefox會(huì)創(chuàng)建一個(gè)隨機(jī)的文件名,并且保存的文件不會(huì)有后綴:
綜上,我們可以將DataURL和JS Blob相結(jié)合來添加一個(gè)函數(shù),當(dāng)然我們可以不適用任何腳本,但是和上面的例子中的問題一樣,顯然會(huì)更到更多的限制。
為什么攻擊者會(huì)使用HTML走私?
HTML走私是釣魚攻擊一個(gè)很好的補(bǔ)充。在HTML走私的幫助下,攻擊者可以逃避一些檢測(cè)和記錄機(jī)制。在這種方式下,文件被“注入”到HTML文檔中,而絕大多數(shù)的安全解決方案根本不會(huì)去檢測(cè)。
當(dāng)然HTML走私也有一些缺點(diǎn)。首先,它需要用戶交互,雖然瀏覽器會(huì)自動(dòng)處理惡意文件,但是下載到用戶主機(jī)還是需要用戶同意,除非配置了未經(jīng)用戶確認(rèn)的自動(dòng)下載。而且即使文件被下載了,還是需要將其執(zhí)行。
利用HTML走私來釣魚
上面介紹了兩種常見的HTML走私方法,回到文章的主題,如何利用HTML走私來進(jìn)行釣魚呢?這里介紹兩種比較常見的方法。首先,第一種是讓電子郵件包含一個(gè)指向外部網(wǎng)頁的鏈接,而該指向的網(wǎng)頁使用了HTML走私技術(shù)。這是比較常見的郵件釣魚方式。另一種方法是,在電子郵件中添加一個(gè)HTML附件,該HTML文件走私了惡意代碼,這種情況下,用戶打開的就是本地的HTML文件,不需要訪問外部站點(diǎn)。
在這兩種情況下,好處是惡意內(nèi)容很難被檢測(cè)到,因?yàn)閻阂獯a隱藏在HTML內(nèi)容中。通過這種方式,可以繞過很多道安全防御。
正常文件下載
首先,我們來看一下正常的文件下載步驟是怎樣的。在下圖的例子中,用戶訪問一個(gè)網(wǎng)站,然后下載一個(gè)exe文件:
- 1 . 首先,用戶打開一個(gè)正常的網(wǎng)站。這個(gè)網(wǎng)站可以是用戶自己輸入的,也可以從包含鏈接的釣魚郵件中獲得。
- 2 . 瀏覽器向網(wǎng)站發(fā)送HTTP請(qǐng)求。如果存在代理,那么這個(gè)流量就會(huì)走代理。
- 3 . 代理會(huì)檢查瀏覽器請(qǐng)求的URL。因?yàn)樵S多的代理都有檢查域信譽(yù)的能力,如果代理認(rèn)為請(qǐng)求的域是惡意的,那么Proxy不會(huì)進(jìn)行后續(xù)的請(qǐng)求,通信將在這一步就停止;反之,代理會(huì)將請(qǐng)求轉(zhuǎn)發(fā)給Web服務(wù)器。
- 4 . Web服務(wù)器返回請(qǐng)求的資源給代理,在本例中,Web服務(wù)器返回的就是一個(gè)普通的HTML頁面。
- 5 . 代理檢查Web服務(wù)器的響應(yīng)。在這一步會(huì)進(jìn)行各種過濾。代理可以阻止用戶下載一些類型的文件。此外,代理可以有一個(gè)內(nèi)置的沙箱來測(cè)試文件是否安全,而HTML文件通常不會(huì)再沙箱中進(jìn)行測(cè)試就被允許通過代理轉(zhuǎn)發(fā)給用戶。
- 6 . 頁面通過代理轉(zhuǎn)發(fā)給瀏覽器。此時(shí)判斷文件可信度的角色就變成了用戶,用戶可以決定瀏覽器中顯示的某個(gè)文件是否安全,如果用戶信任,就可以進(jìn)行文件下載,在本例中,該文件是一個(gè)exe文件。
- 7 . 瀏覽器向Web服務(wù)器發(fā)送文件下載請(qǐng)求。
- 8 . 代理的處理和之前相同,這一步?jīng)]什么區(qū)別。
- 9 . Web服務(wù)器將請(qǐng)求的exe文件發(fā)送給代理。
- 10 . 當(dāng)代理獲得該exe文件時(shí)候,它會(huì)對(duì)其進(jìn)行綜合性評(píng)估。如果設(shè)置了網(wǎng)絡(luò)中禁止下載exe文件,那么顯然,exe下載請(qǐng)求在這一步就結(jié)束了,文件將無法到達(dá)用戶的機(jī)器。代理還會(huì)檢查文件是否是已知的惡意文件。此外,它還可以決定是不是要將文件放到沙箱中進(jìn)行測(cè)試。這里有一個(gè)關(guān)鍵點(diǎn),當(dāng)代理知道這個(gè)文件是一個(gè)可執(zhí)行文件時(shí)候,它可以決定是不是要繼續(xù)轉(zhuǎn)發(fā)。而且,網(wǎng)絡(luò)分路器(Network Taps)可以檢測(cè)到這個(gè)exe文件,如果它們認(rèn)為該文件是惡意的,也可以阻止用戶下載該文件。
- 11 . 如果一切順利,那么文件就到達(dá)了它的最終目的地——用戶的電腦。
- 在上面的步驟中,最重要的一步就是第10步。這一步有普通文件下載和HTML走私下載的最大區(qū)別。在正常下載的情況下,exe文件易于檢測(cè)和評(píng)估(比如檢查散列,沙箱執(zhí)行檢查,收集頭文件信息來判斷等等)。而在HTML走私的情況下,文件不會(huì)以一種未編碼的方式在網(wǎng)絡(luò)上傳播,它總是會(huì)被嵌入到另一個(gè)HTML文件中。
通過e-mail中的外部鏈接
首先,先介紹一種很常見的走私技巧。在這種情況下,攻擊者會(huì)將事先準(zhǔn)備好的鏈接放入電子郵件中。該鏈接會(huì)指向包含走私文件的外部鏈接。在這種情況下,惡意的內(nèi)容不會(huì)通過電子郵件的網(wǎng)關(guān),而是以隱藏的形式,通過代理被用戶訪問。
- 1 . 有一個(gè)帶著外部鏈接的e-mail向目標(biāo)用戶發(fā)送。
- 2 . 郵件網(wǎng)關(guān)對(duì)郵件進(jìn)行檢查。在這一步有很多種檢查方法,但在本例的場(chǎng)景下,我們就認(rèn)為郵件網(wǎng)關(guān)并不會(huì)阻攔該郵件,因?yàn)檫@里沒有包含什么惡意文件。
- 3 . 用戶點(diǎn)擊郵件中的鏈接。
- 4 . 默認(rèn)瀏覽器啟動(dòng)。
- 5 . 瀏覽器向存儲(chǔ)(或是生成)HTML文檔的外部站點(diǎn)發(fā)送HTTP請(qǐng)求。
- 6 . 代理會(huì)進(jìn)行一些必要的檢查,但是如果該URL并沒有被加入黑名單,那么該請(qǐng)求就會(huì)被轉(zhuǎn)發(fā)到該站點(diǎn)所對(duì)應(yīng)的服務(wù)器。
- 7 . 服務(wù)器返回HTML頁面以及隱藏在其中的exe文件。exe文件是以字符串的形式存儲(chǔ)在文檔中,此時(shí)它已經(jīng)變成了HTML內(nèi)容的一部分。
- 8 . 代理會(huì)檢查響應(yīng)內(nèi)容。在本例中,響應(yīng)只是一個(gè)HTML文件,代理不會(huì)去攔截HTML文件。而且,HTML文件在絕大多數(shù)情況下不會(huì)被轉(zhuǎn)發(fā)到沙箱中執(zhí)行檢查。因而,隱藏在HTML文檔中的惡意內(nèi)容幾乎不會(huì)在這里被檢測(cè)到。當(dāng)然通過其他的檢測(cè)技術(shù),它們也可能能識(shí)別到HTML走私技術(shù)(但是這里指的也只是HTML走私這件事本身,而不是隱藏在HTML中的惡意文件)。現(xiàn)在我們就認(rèn)為代理沒有識(shí)別出這個(gè)情況,將響應(yīng)HTML頁面轉(zhuǎn)發(fā)給瀏覽器。
- 9 . 瀏覽器重新拼接嵌入在HTML頁面中的字符串,然后啟動(dòng)下載進(jìn)程。
- 10 . 最后惡意exe文件被存儲(chǔ)到用戶的電腦上。
我們可以看到,在這種情況下,e-mail的安全檢查機(jī)制并不能起到太大的作用。因?yàn)殡娮余]件本身不是惡意的,其中的鏈接可以是合法的鏈接。
代理當(dāng)然可以查看HTML文件,但是很少有安全性檢測(cè)方案會(huì)對(duì)HTML文件進(jìn)行徹底地處理。大多數(shù)情況下,這些文件都是被允許通過代理的。IDS解決方案還傾向于依賴檢測(cè)文件擴(kuò)展名或是magic bytes(主要是通過分析文件的第一個(gè)字節(jié)來判斷文件的類型),因此文件中的編碼字符串很難被它們捕獲。但是其實(shí)我們可以創(chuàng)建一個(gè)模式匹配解決方案來檢測(cè)一些隱藏在HTML中的東西。這在后面會(huì)提到。
通過電子郵件中的HTML附件
這種方法是指包含走私的HTML文件被附加到了電子郵件中。
- 1 . 郵件網(wǎng)關(guān)收到一份帶有HTML附件的電子郵件。
- 2 . 郵件網(wǎng)關(guān)會(huì)對(duì)電子郵件中附帶的HTML進(jìn)行檢查。如果檢查未通過,那么郵件網(wǎng)關(guān)會(huì)阻擊電子郵件的后續(xù)轉(zhuǎn)發(fā)或者選擇刪除附件。但是,現(xiàn)在還沒有聽說過什么電子郵件安全解決方案能夠通過靜態(tài)分析或者動(dòng)態(tài)分析來檢測(cè)HTML走私(即使是在HTML走私的是惡意代碼。)
- 3 . 用戶打開HTML附件。
- 4 . 瀏覽器打開并加載HTML文檔。
- 5 . 瀏覽器處理HTML文件的內(nèi)容,處理被走私的文件并將其提供給用戶下載。
- 6 . 文件被保存到計(jì)算機(jī)上。當(dāng)然,在這一步,要么需要用戶的批準(zhǔn),要么需要瀏覽器設(shè)置了自動(dòng)下載,就是未經(jīng)確認(rèn)的下載。
這種方法相比上一種的好處就在于,它不需要通過任何代理。而且,網(wǎng)絡(luò)上的IDS/IPS安全檢查通常不會(huì)去檢查電子郵件,所以,如果攻擊者能夠成功欺騙電子郵件網(wǎng)關(guān),那么在網(wǎng)絡(luò)上就沒有其他的難處了。
防御與檢測(cè)
在這一小節(jié)中我們來探討一下如何防御與檢測(cè)HTML走私。
在發(fā)生了HTML走私的情況下,我們可以有兩種檢測(cè)方式,我們要么就關(guān)注HTML走私技術(shù)本身,要么可以嘗試捕獲隱藏在HTML文檔中的惡意代碼。
防御方法
這里介紹幾種防御方法。
1. 禁止JavaScript執(zhí)行
雖然對(duì)于HTML走私?jīng)]有什么萬能的防御辦法。禁用JavaScript看起來是一種可行的方案,畢竟一種HTML走私技術(shù)就是基于JavaScript Blob的,但是,在企業(yè)環(huán)境中禁用JS肯定會(huì)帶來很多問題。當(dāng)然,如果在你遇到的顯示場(chǎng)景中,禁用JS是可行的,那么也可以嘗試這種方法,那么在這個(gè)時(shí)候,你只需要用模式匹配去識(shí)別DataURL是不是存在HTML走私情況就好。
2. 禁止郵件中的HTML附件
HTML走私的一種類型是使用HTML文件作為附件。不幸的是,這在很多場(chǎng)景中都是常見的,實(shí)際上,現(xiàn)在有很多帶有HTML附件的合法的、與業(yè)務(wù)相關(guān)的電子郵件在增加。另一方面,不法分子也利用HTML附件來進(jìn)行釣魚。
如果你能在不影響業(yè)務(wù)的情況下阻止帶有HTML附件的郵件,那么對(duì)于利用郵件中帶有的HTML來進(jìn)行釣魚的路就被堵住了。那此時(shí)我們只需要關(guān)注郵件中附帶的鏈接了。
我們可以看到,前面這兩種防御方法都無法同時(shí)覆蓋所有的HTML走私情況。在最好的情況下,我們可以使用這兩種方案來防住部分HTML走私;在最壞的情況下,我們甚至都不能使用這些防御解決方案,因?yàn)檫@些方案在大多數(shù)現(xiàn)在企業(yè)環(huán)境中是不適用的。
3. Windows應(yīng)用程序防護(hù)(Microsoft Defender Application Guard)
Microsoft Defender Application Guard是Windows提供的一種安全解決方案,主要用于隔離各種試圖使用來自不可信源資源的應(yīng)用程序,后面簡(jiǎn)稱MDAG。MDAG有兩種不同的形式。第一種是
Application Guard for Edge,它主要是用來隔離企業(yè)定義的不受信任(或不特別受信任)的站點(diǎn),在企業(yè)的員工瀏覽Internet時(shí)保護(hù)公司。Application Guard通過在一個(gè)啟用了Hyper-V的隔離容器中打開站點(diǎn)來實(shí)現(xiàn)這一點(diǎn)。而且,它還與Firefox和Chrome瀏覽器兼容。
另一個(gè)版本是
Application Guard for Office。它能夠保護(hù)可信資源不受不可信資源的攻擊。它也是通過在一個(gè)容器中打開不受信任的Word、Excel、PowerPoint文檔來實(shí)現(xiàn)。當(dāng)然,這也和HTML走私無關(guān),所以就不繼續(xù)討論了。
Application Guard for Edge我們已經(jīng)知道,Application Guard for Edge主要是通過在隔離的虛擬環(huán)境中打開不受信任的鏈接來保護(hù)我們的系統(tǒng)。如此一來,一個(gè)未知的URL,或者說是一個(gè)惡意的URL就不會(huì)對(duì)主機(jī)造成危害了。下載的惡意文件會(huì)被隔離存儲(chǔ)在隔離的環(huán)境中,而不會(huì)直接與宿主機(jī)接觸。
如果一個(gè)鏈接在電子郵件中到達(dá),并且給定的URL并不在Application Guard的白名單中,那么它就會(huì)在一個(gè)隔離的Edge中被打開。因?yàn)閷?duì)于該URL的訪問是在隔離的環(huán)境中進(jìn)行的,那么每個(gè)文件下載行為也都是在這個(gè)隔離的環(huán)境中進(jìn)行的,因此被走私的惡意文件不會(huì)對(duì)主機(jī)造成真實(shí)傷害。
當(dāng)然,這個(gè)解決方案也并不是十全十美的。它也有一些缺點(diǎn):
- 1 . 為了使Edge能發(fā)揮作用,你需要使用白名單和untrust來標(biāo)記一切網(wǎng)站。這在大公司中,意味著相關(guān)的管理員需要承受巨大的負(fù)載。因?yàn)橛脩魰?huì)不斷地進(jìn)行異常請(qǐng)求。
- 2 . 雖然Application Guard能夠防住以鏈接形式附在電子郵件中的HTML走私請(qǐng)求,但是它無法防御以電子郵件附件形式傳遞的HTML走私。這些附件到達(dá)用戶主機(jī)后,會(huì)作為本地文件在瀏覽器中打開,因此,這些文件不會(huì)被當(dāng)作不受信任的域來處理,不會(huì)在隔離的Edge容器中打開這些HTML文件,也就不會(huì)觸發(fā)Application Guard。因此通過電子郵件附件進(jìn)行的HTML走私在這種情況下依然可以成功。
- 3 . 會(huì)影響用戶訪問站點(diǎn)的速度,因?yàn)樾枰獑?dòng)容器。
檢測(cè)方法
1. 模式匹配
如果HTML文件中沒有利用JS來走私,而是僅僅使用了DataURL,在這種情況下,我們可以使用模式匹配(比如匹配
data:
)來判斷是不是發(fā)生了HTML走私。我們可以實(shí)用IDS或是簡(jiǎn)單的YARA工具來檢測(cè),比如github上的開源工具LaikaBOSS就是一款可用的檢測(cè)工具。
KaikaBOSS對(duì)于下載的文件(HTML文件),甚至是電子郵件附帶的文件,都非常有效。它可以檢測(cè)大量的數(shù)據(jù),伸縮性很好,所以即使在大型環(huán)境中,也同樣可以派上用場(chǎng)。
如果使用了JavaScript,那么可能代碼是被混淆過的,此時(shí)模式匹配可能就不太有效果了。我們只能用其他的方法來檢測(cè)混淆的代碼。
2. 檢測(cè)瀏覽器是否通過網(wǎng)絡(luò)下載文件
在使用了HTML走私的場(chǎng)景下,被下載的文件是在瀏覽器中創(chuàng)建的,而在一般的下載場(chǎng)景中,我們可以看到,是需要我們向Web服務(wù)器發(fā)起請(qǐng)求,然后Web服務(wù)器傳送給我們的,而且還會(huì)經(jīng)過代理,經(jīng)由代理檢查文件的安全性。因此我們還可以通過關(guān)注普通文件下載和基于HTML文件創(chuàng)建下載文件之間的區(qū)別來鑒別HTML走私。因此我們可以通過查看代理日志、觀察是否有瀏覽器進(jìn)行在主機(jī)上創(chuàng)建文件等方式來查看是不是發(fā)生了HTML走私。
這種方式的缺點(diǎn)在于:- 1 . 許多流量在默認(rèn)情況下不會(huì)通過代理。比如,一些公司會(huì)配置它們的網(wǎng)絡(luò),使其內(nèi)部網(wǎng)站無法通過代理訪問。這個(gè)時(shí)候,如果通過瀏覽器生成了一個(gè)文件,但是沒有代理日志。這種情況經(jīng)常發(fā)生,不應(yīng)該基于這種情況創(chuàng)建警報(bào)。
- 2 . 在一些情況下,用戶可以繞過代理,也不會(huì)產(chǎn)生代理日志。
- 3 . 可以在瀏覽器中打開本地文件,然后保存為新文件,這也是瀏覽器創(chuàng)建的文件,同樣沒有代理日志。
- 如果用戶是在上面的情況下進(jìn)行合法行為,我們都不應(yīng)該進(jìn)行攔截,因此難點(diǎn)就在于我們很難區(qū)分這是不是一種走私情況。
3. 沙箱執(zhí)行
您可以將HTML文件發(fā)送到沙箱,然后使用沙箱中的瀏覽器打開它。不是通過互聯(lián)網(wǎng)訪問的HTML文件除了一些臨時(shí)文件之外,不應(yīng)該在機(jī)器上創(chuàng)建任何文件。理論上,如果在沒有網(wǎng)絡(luò)訪問的情況下,HTML文件在沙箱中創(chuàng)建了文件,那么沙箱應(yīng)該要發(fā)出一個(gè)警報(bào)來提醒用戶。
但是,經(jīng)驗(yàn)表明,HTML文件通常不會(huì)放到沙箱中打開。它們可以通過靜態(tài)分析進(jìn)行檢查(如LaikaBoss),也可以動(dòng)態(tài)分析進(jìn)行檢查,但是動(dòng)態(tài)分析將花費(fèi)更多的時(shí)間,并且會(huì)顯著降低網(wǎng)絡(luò)速度。
但是沙箱這個(gè)解決方案在大多數(shù)的情況下不是特別友好,因?yàn)樵谵D(zhuǎn)發(fā)給用戶之前打開每個(gè)HTML文件負(fù)載也挺大的。而且,如果惡意文件是需要用戶點(diǎn)擊下載的,那么這種方式也行不通,只有在頁面配置了自動(dòng)下載的情況下,我們才能通過沙箱來檢測(cè)。所以總體來說,這也不是一個(gè)特別好的方法。
4. 使用Zone.Identifier
另一種方式是使用取證分析中可能會(huì)使用的技術(shù)——Zone.Identifier來區(qū)分是不是發(fā)生了HTML走私。
由HTML走私創(chuàng)建的文件的Zone.Identifier是這樣的(在新版Edge、Chrome和Firefox測(cè)試過):
[ZoneTransfer] ZoneId=3 HostUrl=about:internet
而正常下載的文件的Zone.Identifier則是(這在不同的瀏覽器之間存在區(qū)別):
[ZoneTransfer] ZoneId=3 ReferrerUrl=
https://www.sans.org/security-resources/posters/windows-forensic-analysis/170/download HostUrl=
https://www.sans.org/security-resources/posters/windows-forensic-analysis/170/download這種方法的局限就在于,它只能在Windows(NTFS)上這樣做。因此這種方式也不是完全可靠的。
5. Chrome組件
Chrome會(huì)存儲(chǔ)下載文件的來源,如果源是JavaScript Blob或是DataURL,那么這些信息就會(huì)作為源顯示。
當(dāng)我們打開一個(gè)本地的HTML被走私文件:
當(dāng)然上面的信息不會(huì)告訴我們?cè)摫蛔咚降膼阂馕募菑哪睦锵螺d的。
當(dāng)我們?cè)L問遠(yuǎn)程的走私HTML文件時(shí),我們就可以看到相應(yīng)的惡意文件下載URL了,但是也僅僅是在走私文件是使用了JS Blob時(shí)能看到,在使用DataURL時(shí)則不會(huì)顯示遠(yuǎn)程鏈接:
這種情況相比前面的幾種方法看起來更加實(shí)用。在遠(yuǎn)程訪問,并使用了JS Blob的情況下,我們甚至能看到惡意文件的真實(shí)來源,如果攻擊者使用了DataURL,我們還可以利用這個(gè)信息重新生成文件,這在一些場(chǎng)景下可能也是有用的。
總結(jié)
總體來說,目前想要完全檢測(cè)和防御HTML走私是一件比較困難的事情。當(dāng)然,上面介紹的方法也只是相對(duì)簡(jiǎn)單地介紹了HTML走私下的釣魚事情,在現(xiàn)實(shí)攻擊場(chǎng)景中,可能會(huì)遇到更復(fù)雜的情況。
?
關(guān)鍵詞:技術(shù),網(wǎng)絡(luò)