22行程式碼的JS指令碼導致英國航空公司38萬乘客資料洩露
9月6日,英國航空公司( British Airways,以下簡稱英航)釋出宣告稱因遭黑客攻擊從而導致其乘客資料被盜。在 BBC的採訪中 ,英航指出,經初步調查,約有38萬乘客資料在此交資料洩露事件中受到影響,這些被盜資料資訊包括個人基本資訊和付款記錄,但不包括個人護照資訊。
隨後,英航在其網站上發表了一篇文章,解釋了該事件的相關細節和一些乘客擔心的問題,該篇文章涉及的技術細節較少,但包括了以下資訊:
通過英航官網進行付款操作的乘客相關資訊受到影響
通過英航手機APP應用進行付款操作的乘客相關資訊受到影響
受影響的付款乘客時間段大約為2018年8月21日晚22:58至2018年9月5日晚21:45
英航在文中表明,攻擊者從其官網和移動應用程式中竊取了以上乘客資料資訊,但並未提及更多資料庫或伺服器被入侵的有價值線索。因為英航的被盜資訊僅與乘客的付款記錄相關,考慮到信用卡資料竊取的前科,我們對臭名昭著的網路犯罪集團Magecart有了懷疑。
在此之前,英國老牌票務網站Ticketmaster就報告過一起與英航類似的資料洩露事件,之後,我們RiskIQ調查清楚了整個事件。因為我們可以對涉事方官網進行網頁抓取和網際網路行為分析,因此我們團隊可以擴充套件涉事時間段,發現比一些公開報告更多的被攻擊網站。本文中,我們將對9月6日公開的英航資料被盜事件,進行前後15天的時間線擴充套件調查。
Magecart: 一個臭名昭著的網路犯罪集團
自2016年以來,RiskIQ對進行網路信用卡竊取的組織Magecart進行了多次報道。傳統上來說,犯罪份子會使用一種卡片讀取器的東西,隱藏附加在我們平時用到的ATM機、加油站和其它刷卡裝置中,以此來竊取使用者信用卡資訊,並進行卡片盜刷或個人資訊轉賣。而現在,Magecart使用的是各種線上電子竊取方式來實現使用者資訊盜取。
Magecart會對一些線上使用者支付網站注入指令碼,或入侵一些支付相關的第三方供應商網站,以此來竊取使用者資料。近期,Magecart攻擊者就通過入侵了一個第三方功能應用,然後在英國票務網站Ticketmaster上植入了一個線上的信用卡讀取指令碼,從而導致了Ticketmaster大量資料洩露。證據表明,在Ticketmaster之後,Magecart把攻擊目標轉向了英國航空公司(British Airways)。
英航資料洩露事件調查
網站使用者資訊竊取
調查剛開始,利用我們自己的Magecart檢測模式,我們把Magecart和英航資料洩露事件進行了適配關聯。對我們來說,Magecart的攻擊非常常見,以至於在調查剛開始,幾乎每小時都能響應到Magecart向英航網站植入的卡片讀取程式碼。
對RiskIQ的分析後端來說,其頁面抓取規模是一項值得肯定的能力,我們每天的網頁抓取量會達到20億頁,並能自動累積,另外由於很多現代網站傾向於使用JavaScript來實現架站服務,所以,我們只需載入英航公司網站的20個左右指令碼和30個左右的預訂子頁面就可以了。30個頁面雖然不多,但其中大多都是縮小的有數千行程式碼的指令碼頁面。
在該事件分析中,我們決定集中精力識別英航公司網站上的每個指令碼,驗證網站上的所有獨特指令碼,並在該過程中檢查指令碼的各種變化行為。最終,我們捕獲到了其中一個指令碼modernizr-2.6.2.min.js的變化行為,根據抓取記錄顯示,該指令碼是Modernizr JavaScript庫2.6.2的一個更改版檔案,英航公司網站的乘客行李認領頁面會載入該指令碼。modernizr-2.6.2.min.js的載入流程如下:
該指令碼明顯的變化在其底部程式碼,這是攻擊者慣用的修改JavaScript檔案,實現功能破壞目的的技術。其中一些小的指令碼標籤引起了我們的注意(紅框部分):
之後,我們在英航公司網站伺服器傳送的“伺服器頭資訊”中發現了更多證據,其中的 ‘Last-Modified’ 表明了檔案靜態內容的最近一次修改時間。根據我們的抓取記錄顯示,正常的英航公司網站modernizr-2.6.2.min.js檔案的頭資訊中,‘Last-Modified’日期為2012年12月18日。
但在英航公司當前網站的,經過修改的惡意modernizr-2.6.2.min.js檔案中,其頭資訊中的 ‘Last-Modified’ 時間戳與英航調查後給出的資料洩露時間點一致-2018年8月21日:
以下是惡意的modernizr-2.6.2.min.js指令碼檔案圖示,它只有22行JavaScript程式碼,但卻讓38萬乘客資料遭到竊取:
實際來說,該指令碼非常簡單實用,檔案中的每個元素載入完成之後,將會進行以下操作:
用以下回調程式碼把mouseup和touchend事件捆綁到submitButton按鈕上:
用id為paymentForm的形式將資料序列化到一個字典中
用id為personPaying的形式把頁面條目序列化,並歸類為paymentForm資訊,並歸入之前的同一個字典中
用這些序列化資料製作出一個文字字串檔案
用JSON形式把檔案資料傳送到攻擊者架設的baways.com網站
在實際操作中,mouseup和touchend事件代表了線上使用者在網頁或手機APP中,點選或提交了某個按鈕操作,然後放開滑鼠或離開手機螢幕之後的操作。也就是說,一旦使用者點選了英航公司網站或APP進行付款按鈕提交之後,其付款表單中的資訊將會被惡意程式碼提取,會複製一份傳送到攻擊者的架設伺服器baways.com中。
與我們過去對Magecart組織的行為分析相比,這種攻擊是一種簡單極具針對性的操作。其中植入的信用卡竊取器程式碼能完全與英航公司網站付款頁面適配生效,可以看出,Magecart沒有采用常規的植入程式碼,對該網站的入侵攻擊完全有著精心的考慮。
經調查發現,攻擊者在此次攻擊中使用的網路架構,完全是為英航公司獨身打造部署的,它把惡意指令碼與付款功能進行了完美融合,大大避免了被發現懷疑的可能。我們在攻擊者架設的伺服器 baways.com上發現了一些證據和廢棄路徑,該伺服器託管在羅馬尼亞IP地址89.47.162.248上。但實際上,該IP屬於立陶宛VPS供應商Time4VPS所有,攻擊者使用SSL證書進行伺服器登入。更有意思的是,為了看起來像個合法的伺服器,攻擊者未用免費的LetsEncrypt 證書,而是使用了一個付費的Comodo證書。
這個Magecart使用的付費證書是8月15日頒發的,間接表明了,Magecart攻擊者可能在8月21日前的很長時間範圍內就能入侵控制英航公司網站了。由於對自身網路資產沒有明確的識別判斷,英航公司最終沒能檢測到這種網站入侵攻擊。
移動APP的使用者資料竊取
在英航公司的安全公告中,它強調網站渠道和移動應用APP渠道的付款使用者都受到了資訊洩露影響。我們識別出了攻擊者對網站使用者資料的竊取方式,那麼對移動端的竊取方式又是什麼呢?我們先來看看英航公司的官方Android應用APP:
通常,開發者在開發一個移動APP時,會預留一個空白的shell區以便從其它地方把內容載入進來。在這裡的英航APP中,有一部份APP元件是原生的,但大部份功能都是從英航官網載入過來的。該移動APP中應用了一組不同的通訊主機與英航官網服務交流:
www.britishairways.com (英航官網)
api4-prl.baplc.com (英航的一個API服務端)
api4.baplc.com (英航的另一個API服務端)
使用API的目的在於,APP為了在UI上進行快速的資料更新,但要進行一些搜尋、預訂和管理航班操作,APP就得呼叫英航官網服務了,比如呼叫英航官網的一個路徑如下:
http://www.britishairways.com/travel/ba_vsg17.jsp/seccharge/public/en_gb
該呼叫頁面功能為,乘客選擇了不同國家不同機場之後的費用請求,它顯示的頁面如下:
現在,我們來認真看看這個頁面的原始碼,可以發現一個非常有意思的地方-該頁面和英航官網的組成一樣,都是由CSS和JavaScript元件構成的,也就是其設計和功能與英航官網完全類似。關鍵是這裡仍然被植入了之前我們分析的惡意指令碼modernizr-2.6.2.min.js,攻擊者就是利用這個指令碼再次實施了對移動APP使用者的資料竊取:
值得注意的一點是,Magecart攻擊者利用了之前的 touchend 回撥事件實現了資料竊取,所以,本質上來講,這種攻擊簡單高效也非常實用。
總結
正如在以上攻擊事件分析中所看到的那樣,Magecart通過訂製的,有目的的網路架構資源,與英國航空公司網站功能完美融合,偽裝得盡乎天衣無縫。目前,我們無法得知攻擊者在英國航空公司網站伺服器上的所竊取的具體內容,但他們具備網站資原始檔的修改許可權是相當可怕的,而且攻擊者在真正資料竊取之前就可能已經對網站形成了入侵,這對英航存在漏洞的網路資產來說是個警惕。
自2015年以來,RiskIQ就一直對Magecart組織的攻擊和發起了預警,也將繼續跟蹤報道其可能的攻擊事件。Magecart對英航的攻擊不像對票務網站Ticketmaster那樣的第三方攻擊,但卻引發了對當前一些支付安全問題的質疑。收集應用個人敏感財務資料的公司應該好好考慮一下自身的資訊保安形式,當然還要對使用者提交的支付資訊進行嚴格控制。目前,針對英航乘客來說,最好的方式就是重新從其它銀行辦理一張新卡。
*參考來源: riskiq ,clouds 編譯,轉載請註明來自 FreeBuf.COM