隱身的藝術:濫用404頁面的新型Magecart活動
近日,Akamai安全情報小組的研究人員發現,一種復雜且隱蔽的Magecart web skimming活動已經瞄準Magento和WooCommerce網站。此外,一些食品和零售行業的大型組織也都受到了影響。
調查顯示,這場活動已經持續了數周甚至更長時間。更糟糕的的是,這次活動使用了前所未見的高級隱藏技術,令人吃驚之余又不免擔憂。
一、新型Magecart攻擊活動
Magecart攻擊通常從利用目標網站中的漏洞或感染這些網站正在使用的第三方服務開始。而在此次活動中,研究人員檢測到的所有受害網站都被直接利用,因為惡意代碼片段被注入了他們的第一方資源中。在某些情況下,惡意代碼被插入到HTML頁面中;在其他情況下,它被隱藏在作為網站一部分加載的某個第一方腳本中。
與許多其他Magecart攻擊活動一樣,此攻擊活動的攻擊基礎結構由三個主要部分組成:加載程序、惡意攻擊代碼和數據滲漏(見圖1)。
- 加載程序——簡短、晦澀的JavaScript代碼片段,負責加載攻擊的完整惡意代碼;
- 惡意攻擊代碼——執行攻擊的主要JavaScript代碼,負責檢測敏感輸入、讀取數據、中斷簽出過程并注入假表單;
- 數據滲漏——用于將竊取的數據傳輸到攻擊者控制的C2服務器。
【圖1:Magecart攻擊基礎設施】
研究人員解釋稱,將攻擊分為三個部分的目的是隱藏攻擊,使其更難以被發現。這允許在特定目標頁面上激活完整的攻擊流程;也就是說,由于攻擊者使用的混淆措施,整個攻擊流的激活只能發生在攻擊者想要執行的地方。這使得攻擊更加隱蔽,更難以被安全服務和外部掃描工具檢測到。
盡管大多數Magecart活動在流程和階段上都存在相似之處,但將一個活動與另一個活動區分開來的是攻擊者使用的各種隱藏技術。這些技術被用來掩蓋攻擊的基礎設施、行動痕跡、復雜化檢測與逆向工程,并最終延長攻擊時間。
二、活動的三種變體
研究人員發現,該攻擊活動存在三種不同的變體,展示了攻擊的演變以及攻擊者隨著時間的推移所做的改進,目的是逃避針對該攻擊活動的檢測和緩解。以下為三個變體的概述:
- 前兩個變體非常相似,只有加載程序部分的細微差異。
- 第三個版本是獨特的,因為攻擊者使用網站默認的404錯誤頁面來隱藏他們的惡意代碼;這是一種前所未見的創造性隱藏技術。
接下來,研究人員詳細分析了三個變體的技術細節。
三、變體1
研究人員最初在一家大型企業的網站上發現了一些可疑代碼片段,在對其進行分析后,研究人員發現它們是惡意編碼的JavaScript加載程序,這些加載程序仍然存在并在網站上活躍。這一發現促使他們進一步調查,并揭示了整個活動及其對眾多網站的影響。
1.變體1加載程序
該skimmer成功地將帶有onerror屬性的錯誤格式HTML圖像標簽注入被利用的網站(見圖2)。該屬性包含混淆的base64編碼惡意加載程序代碼片段。圖像標簽的src屬性故意為空,目的是防止網絡請求,并觸發包含混淆的惡意JavaScript代碼片段的內聯onerror回調的執行。
為了執行JavaScript代碼而使用圖像標記是一種不太常見但更復雜的技術。它可以幫助skimmer繞過安全措施,例如通常分析網絡流量的外部掃描儀,這些措施在此特定情況下不會觸發。混淆后的代碼將在頁面的上下文中執行,并像由頁面本身發起的本地第一方腳本一樣運行。
【圖2:變體1加載器-帶有onerror屬性的格式錯誤HTML圖像標簽,其中包含惡意加載器代碼】
2.解碼加載程序代碼—運行時
一旦混淆的base64編碼代碼在運行時執行,它就會轉換為純JavaScript,并負責啟動WebSocket通道(見圖3)。該通道充當瀏覽器和攻擊者的C2服務器之間的雙向通信鏈接。
事實上,這并非是第一次在Magecart攻擊中檢測到WebSockets。WebSocket被認為是一種更隱匿、更靈活的通信方法,允許攻擊者利用單個網絡通道實現各種目的。這包括將攻擊的不同部分從C2服務器發送到瀏覽器(反之亦然),以及在某些場景中促進數據滲漏活動。
代碼的另一個值得注意的方面是機器人(bot)檢測,它檢查用戶代理是否處于自動化控制之下。如果是這種情況,代碼將終止其執行。這是一種智能的反機器人技術,旨在避開可能檢測到攻擊的外部安全掃描儀和沙箱。
【圖3:解碼的變種1加載程序JavaScript代碼】
3.Websocket通信流程
一旦建立了WebSocket通道,第一個消息就從攻擊者的C2服務器發送到瀏覽器。該消息作為base64編碼的字符串傳輸,其中包含一行JavaScript命令,指示瀏覽器發送回頁面的當前URL。
此步驟的目的是使C2服務器能夠確定當前頁面是結賬(敏感)頁面(checkout page)還是任何其他非結賬頁面。這樣,攻擊者就可以相應地調整接下來的步驟。
這種簡單的服務器端驗證使攻擊者能夠僅在相關的目標頁面上激活攻擊,從而避免在非敏感頁面上暴露。這一案例突出了skimmer為逃避安全服務和外部掃描儀的檢測所做的努力。
當C2服務器識別出結帳頁面URL時,流程將進入下一個階段。在此步驟中,將向瀏覽器發送另一條消息。它是一個長base64編碼的字符串,包含了整個攻擊代碼。解碼后,顯示了冗長且混淆的JavaScript代碼(見圖4)。
該代碼負責在目標敏感頁面上執行各種惡意活動,其目標是讀取用戶的敏感個人和信用卡數據,并將其傳輸回skimmer的C2服務器。
隨后,包含敏感被盜數據的混淆數據滲漏消息就會從瀏覽器發送到C2服務器。如前所述,與XHR、fetch或HTML資源請求等更傳統的通信方法相比,使用相同的WebSocket通道來加載完整的惡意代碼和滲漏被盜的數據可以使該過程更隱匿,并且涉及更少的網絡請求。
【圖4:結帳頁面上的WebSocket流程】
四、變體2
1.變體2加載程序
變體1和變體2的主要區別就在加載程序部分。在變體2中,skimmer插入了一個內聯腳本,其中的代碼片段與Meta Pixel(一個著名的Facebook訪問者活動跟蹤服務)代碼片段非常相似,并在其中添加了幾行代碼(見圖5)。
這些添加的行是實際的加載程序部分,而周圍的Meta Pixel代碼是一個誤導性的掩護,使它看起來像是一個合法且不可疑的代碼片段。
這種隱藏技術使惡意代碼片段看起來像是谷歌標簽管理器或Facebook等知名服務,因而在最近的Magecart活動中越來越受歡迎。它允許skimmer逃避外部掃描儀和研究人員的靜態分析。
【圖5:變體2加載程序—內聯腳本偽裝成Meta PIxel代碼片段,內部帶有惡意加載程序】
2.請求圖像
當研究人員仔細檢查虛假Meta Pixel代碼片段中的可疑行時,發現它似乎是從網站自己的目錄中獲取PNG圖像。該網絡請求似乎是對網站上托管的無害圖像的典型請求。然而,當進一步檢查該圖像的實際內容時,研究人員發現它并不像看起來那般無害(見圖6)。
【圖6:網絡圖像請求已被攻擊者篡改并包含惡意代碼的圖像】
3.圖像二進制數據內的惡意JavaScript代碼片段
PNG圖像的二進制數據包含一個附加在圖像二進制文件末尾的base64編碼字符串(見圖7)。這個字符串隨后被加載程序代碼片段提取、解碼并執行(見圖8)。解碼后的字符串展示了一個JavaScript代碼片段,該代碼片段與在變體1加載程序的onerror屬性中找到的代碼片段相同。
后續步驟基本與變體1保持不變。該代碼片段在運行時轉換為純JavaScript代碼,并負責啟動連通攻擊者C2服務器的WebSocket通道,隨后的步驟如前所述。
【圖7:包含隱藏惡意代碼的圖像二進制數據】
【圖8:惡意代碼最初以Base64編碼并隱藏在圖像中,解碼后顯現】
五、變體3
現在,到了最精彩的部分。雖然此前發生過類似的攻擊,但這次絕對是獨一無二的,其復雜和創新程度讓研究人員大吃一驚。
1.變化3加載程序:相同,但又完全不同
乍一看,這個加載程序與變體2中的加載程序類似,但仔細研究會發現這是一個完全不同的場景。在某些情況下,這個加載程序偽裝成Meta Pixel代碼片段,如變體2所示(見圖9)。但在其他情況下,它會被注入到頁面上的隨機內聯腳本中(見圖10)。
該加載程序第一個值得注意的方面是對一個名為“icons”的相對路徑的獲取請求。
【圖9:變體3加載程序—偽裝成Meta Pixel代碼片段的惡意代碼片段】
【圖10:變體3加載程序—隱藏在任意內聯腳本中的惡意代碼片段】
2.404錯誤?真的嗎?
加載程序執行后,攻擊者會向/icons發送一個獲取請求,這是一個實際不存在的相對路徑。此請求會導致“404 Not Found”錯誤(見圖11)。在分析響應中返回的HTML后,它看起來像是網站的默認404頁面(見圖12)。這讓研究人員懷疑自己發現的受害網站上的skimmer是否不再活躍。
【圖11:加載程序向不存在的路徑發起請求,返回404錯誤】
【圖12:默認錯誤頁面HTML】
3.永遠不要低估加載程序
為此,研究人員后退一步,重新分析了加載程序,找到了缺失的那塊拼圖。研究人員發現,該加載程序包含字符串“COOKIE_ANNOT”的正則表達式匹配,這應該在作為圖標請求的一部分返回的404錯誤頁面上執行。
因此,研究人員開始在返回的404 HTML中搜索這個字符串,結果發現隱藏在頁面末尾的注釋包含“COOKIE_ANNOT”字符串(見圖14)。在這個字符串的旁邊,連接了一個長base64編碼的字符串。這個編碼的字符串顯示了整個混淆的JavaScript攻擊代碼。加載程序從評論中提取該字符串,對其進行解碼,然后執行攻擊,其目的是竊取用戶輸入的個人信息。
研究人員還模擬了對不存在的路徑的其他請求,它們都返回相同的404錯誤頁面,其中包含帶有編碼惡意代碼的評論。這些檢查確認攻擊者成功更改了整個網站的默認錯誤頁面,并在其中隱藏了惡意代碼!
【圖13:加載程序變體3—字符串“COOKIE_ANNOT”的regex匹配。】
【圖14:隱藏在錯誤頁面HTML中的惡意編碼注釋】
六、數據滲漏
1.虛假表單
與變體1和變體2相反,攻擊者在變體3中使用了一種不同的常見數據滲漏技術——注入假表單(見圖15)。這種技術通常在skimmer無法訪問敏感輸入時使用。
當網站使用第三方支付服務,在第三方iframe或外部頁面中實現支付表單時,就會發生這種情況。為了繞過這些場景,攻擊者創建了一個與原始支付表單非常相似的假表單,并將其覆蓋——這種技術正日益流行。這就是變種3中竊取數據的方式。
【圖15:惡意代碼注入的假表單】
當用戶向攻擊者的假表單提交數據時,將顯示錯誤,隱藏假表單,顯示原始付款表單,并提示用戶重新輸入付款詳細信息(見圖16)。
【圖16:假表單被隱藏并提示用戶重新輸入信息】
2.帶有被盜數據的圖像請求
提交假表單會向攻擊者的C2服務器發起一個圖像網絡請求,在查詢參數中以base64編碼的字符串的形式攜帶所有被盜的個人和信用卡信息(見圖17)。解碼后,該字符串揭示了請求的真實意圖,整個攻擊流程也變得清晰起來。
【圖17:圖像請求以base64編碼的字符串查詢參數形式呈現】
七、從變體3中吸取的教訓:404案例
這種隱藏技術是非常新穎的,且在之前的Magecart活動中從未出現過。操縱目標網站的默認404錯誤頁面的想法可以為Magecart威脅行為者提供各種創造性的選擇,以改進隱藏和逃避技術。
在撰寫本文時,惡意加載程序已經從受影響網站的頁面上刪除。然而,默認404頁面中的惡意評論仍然存在,這可能使skimmer很容易重新激活攻擊。這突出了檢測的復雜性以及緩解這種方法的重要性和迫切性。
對指向404頁面的第一方路徑的請求是另一種逃避技術,它可以繞過內容安全策略標頭和其他可能正在積極分析頁面上的網絡請求的安全措施。這無疑是最近出現的最復雜的Magecart策略之一。
八、結語
這一活動強調了一個事實,即web skimming正在不斷發展。它們變得越來越復雜,這使得通過靜態分析和外部掃描進行檢測和緩解變得越來越具有挑戰性。這個領域的威脅行為者總是能找到更好的方法,來隱藏他們在受害者網站中的攻擊行為,并逃避各種可能暴露他們的安全措施。
這項研究強調的復雜性應該提醒組織保持警惕,關注web skimming攻擊向量,并積極尋求新的和先進的方法來處理這些類型的攻擊。
原文鏈接:https://www.akamai.com/blog/security-research/magecart-new-technique-404-pages-skimmer