前言今天介紹一種走私技術(shù),HTML Smuggling,這不是一種特別新的攻擊方法,但是它確實(shí)在越來越多的攻擊場(chǎng)景中出現(xiàn),其中就包括網(wǎng)絡(luò)釣魚。接下來我們就來了解一下HTML走私的來龍去脈以及它在釣魚" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > 網(wǎng)絡(luò)釣魚技術(shù)之HTML走私

網(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文件:







通過e-mail中的外部鏈接

首先,先介紹一種很常見的走私技巧。在這種情況下,攻擊者會(huì)將事先準(zhǔn)備好的鏈接放入電子郵件中。該鏈接會(huì)指向包含走私文件的外部鏈接。在這種情況下,惡意的內(nèi)容不會(huì)通過電子郵件的網(wǎng)關(guān),而是以隱藏的形式,通過代理被用戶訪問。







我們可以看到,在這種情況下,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文件被附加到了電子郵件中。







這種方法相比上一種的好處就在于,它不需要通過任何代理。而且,網(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):

檢測(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)在于:

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ò)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉