zoukankan      html  css  js  c++  java
  • 冰蝎动态二进制加密WebShell基于流量侧检测方案

    概述

    冰蝎是一款新型动态二进制加密网站工具。目前已经有6个版本。对于webshell的网络流量侧检测,主要有三个思路。一:webshell上传过程中文件还原进行样本分析,检测静态文件是否报毒。二:webshell上线或建立连接过程的数据通信流量。三:webshell已连接后执行远程控制命令过程的数据通信流量。本文通过分析多个历史冰蝎版本及五种脚本(asp|aspx|jsp|jspx|php),结合第二点检测冰蝎上线的静态特征,并总结部分snort规则。

    冰蝎通讯原理

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

    冰蝎上线数据包

    V1.0版本冰蝎连接

    抓取到的通信流量如下:

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

    V1.1版本冰蝎连接

    冰蝎工具从V1.1开始(包含V1.1)新增随机UserAgent支持,每次会话会从17种常见UserAgent中随机选取。这个版本的pass 与其他版本不同,pass(密码) 后跟10位数字。

    V2.0.1版本冰蝎连接

    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″,看上去多了几个字符,是显示的问题,其实并没有多。 

    静态特征

    弱特征1:密钥传递时URL参数

     

    ".(php|jsp|asp|jspx|aspx)?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}。

    弱特征2:加密时的URL参数

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

    ".(php|jsp|asp|jspx|aspx) HTTP/1.1"

    本文暂未使用此特征。

    强特征3:Accept字段(可绕过)

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

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

    冰蝎支持自定义HTTP Header,因此该特征可以被绕过。

    可以针对此特征做专门的检测,因为大多数人都没有修改Accept 习惯。

    本文暂未使用此特征。

    强特征4:UserAgent字段(可绕过)

    冰蝎工具从V1.1开始(包含V1.1)新增随机UserAgent支持,每次会话会从17种常见(较老)UserAgent中随机选取。

    如果发现历史流量中同一个源IP访问某个URL时,命中了以下列表(下载地址)中多个UserAgent,那基本确认就是冰蝎了。

    大多数人都没有修改Accept 习惯。但冰蝎支持自定义UA,该特征可以被绕过。

    本文暂未使用此特征。

    强特征5:传递的密钥

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

    因此密钥特征如下:

    "
    
    [A-Za-z0-9]{16}$" 

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

    "Content-Length: 16"

    弱特征6:加密数据上行

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

    “
    
    [a-zA-Zd+/]{10,}/[a-zA-Zd/]{50}

    数字50表示至少出现50字符才匹配,可根据IDS设备实际情况及需求调整。

    jsp加密流量上行

    php加密流量上行

    jspx加密流量上行

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

     aspx 加密上行流量独有。为减少误报,建议检查加密上行和下行,此特征同样适用aspx加密流量下行。 

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

    [^ws><=-'":;\,!(){}]”

    asp加密流量上行

    aspx加密流量上行

    弱特征7:加密数据下行

    jsp加密流量下行 


    这里使用正则的“非”匹配二进制非常见字符。

    " [^ws><=-'":;\,!(){}][w]{2}[^ws><=-'".:;\,!(){}][a-zA-Zd]{2}"

    [^ws><=-'":;\,!(){}] 表示不可见字符

    [w]{2} 表示特殊符号前至少有2个字符,经过大量对比分析,发现可以匹配的字符串例如:

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

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

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

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

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

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

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

    “不可见字符”+”Iz8o”

    ......

    且返回状态码 200 OK

    另外对于 php|jsp|asp|aspx,响应的Type特征还有

    "Content-Type: text/html"

    jspx稍有特殊。

    jspx加密流量下行

    "Content-Type:text/xml"

    弱特征8:长连接(可绕过)

    冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。因此默认情况下,请求头和响应头里都会带有:

    Connection: Keep-Alive

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

    本文暂未使用此特征。

    冰蝎snort规则检测思路

    一.从建立连接的第一个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 特征

    冰蝎snort规则总结

    综上

    alert http any any -> any any(msg:"MALWARE-BACKDOOR Behinder webshell online detected"; flow:established,to_client; pcre: "/ [A-Za-z0-9]{16}$/”; content:”200 OK”; content: “Content-Length: 16″; fast_pattern;nocase; flowbits: set, bx_first_get_resp; noalert; classtype:web-attack;sid:3000021; rev:1; metadata:created_at 2019_11_20, updated_at 2019_11_20;)

    alert http any any -> any any(msg:”MALWARE-BACKDOOR Behinder webshell online detected”; flow:established,to_server; content:”GET”; http_method; pcre:”/.(php|jsp|asp|jspx|aspx)?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(msg:”MALWARE-BACKDOOR Behinder webshell online detected”; flow:established,to_client; pcre: “/ [A-Za-z0-9]{16}$/”; content:”Content-Length: 16″; fast_pattern; nocase; flowbits: isset,bx_second_get_req; flowbits:set, bx_second_get_resp; noalert;classtype:web-attack; sid:3000023; rev:1; metadata:created_at 2019_11_20,updated_at 2019_11_20;)

    alert http any any -> any any(msg:”MALWARE-BACKDOOR Behinder webshell online detected”; flow:established,to_server; content:”POST”; http_method; pcre:”/.(php|jsp|asp|jspx|aspx) 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(msg:”MALWARE-BACKDOOR Behinder webshell online detected”; flow:established,to_client; pcre: “/[^ws><=-'":;\,!(){}][w]{2}[^ws><=-'".:;\,!(){}][a-zA-Zd]{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(msg:”MALWARE-BACKDOOR Behinder webshell-jspx online”; flow:established,to_server; pcre:”/ [a-zA-Zd+/]{10,}/[a-zA-Zd/]{50}/”; content:”Content-Type: application/octet-stream”; fast_pattern; flowbits:isset, bx_second_get_resp; flowbits: set, bx_req_jspx; noalert;classtype:web-attack; sid:3000026; rev:1; metadata:created_at 2019_11_20,updated_at 2019_11_20;)

    alert http any any -> any any(msg:”MALWARE-BACKDOOR Behinder webshell-jspx online”; flow:established,to_client; pcre:”/[^ws><=-'":;\,!(){}][w]{2}[^ws><=-'".:;\,!(){}][a-zA-Zd]{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的几种可能性

  • 相关阅读:
    HDU1196 ZOJ2417 Lowest Bit
    HDU1008 ZOJ2108 Elevator
    HDU2614 Beat
    HDU2057 A + B Again
    POJ3984 迷宫问题
    HDU1013 POJ1519 Digital Roots
    HDU2051 Bitset
    HDU2037 今年暑假不AC
    ACM入门练习与递推小结
    HDU2046 骨牌铺方格【递推】
  • 原文地址:https://www.cnblogs.com/0daybug/p/12004574.html
Copyright © 2011-2022 走看看