首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

冰蝎动态二进制加密WebShell基于流量侧检测方案

2019-12-21

冰蝎是一款新式动态二进制加密网站东西。现在已经有6个版别。关于webshell的网络流量侧检测,主要有三个思路。一:webshell上传进程中文件复原进行样本剖析,检测静态文件是否报毒。二:webshell上线或树立衔接进程的数据通讯流量。三:webshell已衔接后履行长途操控指令进程的数据通讯流量。本文通过剖析多个前史冰蝎版别及五种脚本,结合第二点检测冰蝎上线的静态特征,并总结部分snort规矩。

冰蝎选用AES加密,许多文章已有介绍,并有对应解密脚本,这儿不再赘述。

抓取到的通讯流量如下:

Content-Type: application/octet-stream表明以二进制流传输数据。GET恳求体回来16位大小写字母或数字。

冰蝎东西从V1.1开端新增随机UserAgent支撑,每次会话会从17种常见UserAgent中随机选取。这个版别的pass 与其他版别不同,pass 后跟10位数字。

php shell上线数据包

asp shell 上线数据包

仅在php shell 上线时发现。测验版别 V2.0和V2.0.1

php shell上线时会发生两个POST恳求和呼应。第一个POST 呼应无呼应体,第二个POST呼应有呼应体。这儿需求额定写snort判别。用flowbits 设置多包联合检测。

第一个POST呼应

第二个POST呼应

有两条很久以前抓的冰蝎包,写的snort一向匹配不上,忘了是哪个版别。细心一看,竟然没有Content-Length字段。php shell 上线,GET呼应竟然无强特征 ”Content-Length: 16,查资料说假如是 chunked 加密的,或许就不显现这个content-length字段了。这个特别类型我选择性忽视。

下面也是php GET呼应 无强特征 “Content-Length: 16″,看上去多了几个字符,是显现的问题,其实并没有多。 

 \.\?\w{1,8}=\d{1,10}HTTP/1\.1 

这儿 \w{1,8} 表明暗码的长度,可根据实践需求及探针功能调整。\d{1,10} 表明暗码后边跟的数字长度,为了兼容V1.0和V1.1,用1-10。假如只检测V2.1版别,能够调整为 \d{2,3}。

在加密通讯进程中,没有URL参数。是的,没有参数自身也是一种特征。

 \. HTTP/1.1 

本文暂未运用此特征。

Accept是HTTP协议常用的字段,但冰蝎默许Accept字段的值却很特别,这个特征存在于冰蝎的任何一个通讯阶段。

Accept: text/html,image/gif, image/jpeg, *; q=.2, */*;q=.2

冰蝎支撑自定义HTTP Header,因而该特征能够被绕过。

能够针对此特征做专门的检测,由于大多数人都没有修正Accept 习气。

本文暂未运用此特征。

冰蝎东西从V1.1开端新增随机UserAgent支撑,每次会话会从17种常见UserAgent中随机选取。

假如发现前史流量中同一个源IP拜访某个URL时,命中了以下列表中多个UserAgent,那根本承认便是冰蝎了。

大多数人都没有修正Accept 习气。但冰蝎支撑自定义UA,该特征能够被绕过。

本文暂未运用此特征。

加密所用密钥是长度为16的随机字符串,大小写字母+数字组成。密钥传递阶段,密钥存在于get恳求的呼应体中。需求划要点的是,不论哪种冰蝎脚本的shell,上线进程客户端都是要与服务器商议2次暗码的,也便是会发2个get恳求,并回来2次 16位的key。

因而密钥特征如下:

 \r
\r
[A-Za-z0-9]{16}$ 

还有一个特征,get恳求呼应体长度一定是16位的。

 Content-Length: 16 

jsp|php|jspx 加密数据上行特征如下:

“\r
\r
[a-zA-Z\d\+\/]{10,}\/[a-zA-Z\d\/]{50} 

数字50表明至少呈现50字符才匹配,可根据IDS设备实践状况及需求调整。

jsp 加密流量上行

php 加密流量上行

jspx 加密流量上行

asp,aspx 不行用上面的特征。 

aspx 加密上行流量独有。为削减误报,主张查看加密上行和下行,此特征相同适用aspx加密流量下行。

数据包中的 “.” 其实是不行见字符。

”[^\w\s =\-' \:\;\,\!\{\}]”

asp 加密流量上行

aspx 加密流量上行

jsp 加密流量下行

这儿运用正则的“非”匹配二进制十分见字符。

 [^\w\s =\-' \:\;\,\!\{\}][\w]{2}[^\w\s =\-' \.\:\;\,\!\{\}][a-zA-Z\d]{2} 

[^\w\s =\-' \:\;\,\!\{\}] 表明不行见字符

[\w]{2} 表明特别符号前至少有2个字符,通过很多比照剖析,发现能够匹配的字符串例如:

“不行见字符”+”VO?ES”

“不行见字符”+”Fl#fB”

“不行见字符”+”9w+rv”

“不行见字符”+”6G/SW”

“不行见字符”+”mN]ss”

“不行见字符”+”ss[ss”

“不行见字符”+”gV|05”

“不行见字符”+”Iz\8o”

......

且回来状况码 200 OK

别的关于 php|jsp|asp|aspx,呼应的Type特征还有

Content-Type: text/html

jspx稍有特别。

jspx 加密流量下行

 Content-Type:text/xml 

冰蝎通讯默许运用长衔接,避免了频频的握手形成的资源开支。因而默许状况下,恳求头和呼应头里都会带有:

Connection: Keep-Alive

这个特征存在于冰蝎的任何一个通讯阶段。

本文暂未运用此特征。

一.从树立衔接的第一个GET恳求的呼应体开端检测,

 1.呼应体必chujian0定为16位大小写字母或数字,
 2.回来状况码200 OK

能够作为IDS的进口正则,避免接入过多流量影响IDS功能。

二.之后检测第二个GET恳求,

1.满意上面提取的GET恳求弱特征

三.检测第二个GET呼应体特征,特征与过程一共同,但应满意递进联系。

四.这儿分为2种状况,

第一种状况,

 1.检测POST恳求通用特征
 2.检测POST呼应特征,匹配到则判定为冰蝎 asp|jsp|aspx|php  上线。

第二种状况,

 1.检测POST恳求 jspx 特征
 2.检测POST呼应 jspx 特征

综上

alert http any any - any any
alert http any any - any any\?\w{1,8}=\d{1,10} HTTP/1\.1/”;flowbits:isset, bx_first_get_resp; flowbits:set, bx_second_get_req; noalert;classtype:web-attack; sid:3000022; rev:1; metadata:created_at 2019_11_20,updated_at 2019_11_20;)
alert http any any - any any
alert http any any - any any HTTP/1\.1/”; flowbits:isset, bx_second_get_resp;flowbits:set, bx_first_post_req; noalert; classtype:web-attack; sid:3000024;rev:1; metadata:created_at 2019_11_20, updated_at 2019_11_20;)
alert http any any - any any\{\}][\w]{2}[^\w\s =\-' \.\:\;\,\!\{\}][a-zA-Z\d]{2}/”;content: “200 OK”; content: “Content-Type: text/html”;flowbits: isset, bx_first_post_req; classtype:web-attack; sid:3000025; rev:1;metadata:created_at 2019_11_20, updated_at 2019_11_20;)
alert http any any - any any
alert http any any - any any\{\}][\w]{2}[^\w\s =\-' \.\:\;\,\!\{\}][a-zA-Z\d]{2}/”;content: “200 OK”; content: “Content-Type: text/xml”;fast_pattern; flowbits: isset, bx_req_jspx; classtype:web-attack; sid:3000027;rev:1; metadata:created_at 2019_11_20, updated_at 2019_11_20;)

流量加密又怎样?多种姿态检测“冰蝎”

webshell衔接东西冰蝎检测特征提取

http呼应头里没有或许有content-length的几种或许性

*本文作者:chujian0,转载请注明来自FreeBuf.COM

热门文章

随机推荐

推荐文章