捕获与解密
一般抓取流量用最多的就是Wireshark,其次就是tcpdump。抓取流量可以按时间段来,比如攻击发生前后10分钟,还有前端接口的流量,比如MySQL的3306端口以此来过滤,减少干扰。
关键词与特征
恶意关键词搜索
可以搜一些高危的关键词,比如是eval、UNION SELECT、shell,最好是选择不分大小写,因为有的攻击手法它是靠大小写来绕过的,还有双写。可以用一些Wireshark的过滤语法,例如tcp contains "关键词",可以快速的定位可疑的数据包。
动态的就要分析一些高频的POST请求,异常的Content-Length和加密流量还有监控系统的调用,比如Web进程启动了cmd。
Webshell特征识别
冰蝎
静态特征
PHP版的使用的是16位预共享密钥,比如e45e329feb5d925b,JSP版的有ClassLoader反射代码。
代码中检测OpenSSL支持,动态切换加密算法,比如AES或者XOR加密。
动态特征
加密通信:全程用AES加密流量,密钥通过MD5截断生成的,默认密码一般是rebeyond。
会话特征:使用长连接(Connection:Keep-Alive),Content-Length的值比较大,比如像有5740个字节。
请求头:包含Pragma:no-cache和Accept:application/xhtml+xml等弱特征。
哥斯拉
静态特征
默认生成的后门包含xc、pass等变量名,JSP版的用的是ClassLoader和getClass().getClassLoader()。
支持多协议混淆,比如HTTP和SOCKS5,支持多种加密模块。
动态特征
请求头:Accept头固定为text/html,application/xhtml+xml...
响应头:Cache-Control:no-store,no-cache标识无缓存策略。
加密机制:采用AES加密+Base64编码+MD5认证的多层加密流程。
Cookie特征:请求里面的Cookie末尾有分号,比如Cookie: key=value;
蚁剑
静态特征
一般默认@ini_set()、@set_time_limit(0)作为代码开头。
支持多语言后门,比如PHP的assert、JSP的ClassLoader反射调用。
动态特征
请求体:参数值通过随机变量名传递Base64编码的指令,比如p1=base64编码的代码。
响应格式:结果被随机数包裹,例如随机数的结果是随机数,增强隐蔽性。
流量混淆:支持插件扩展,可以自定义编码器,比如AES加密,绕过基础检测。
中国菜刀
静态特征
代码里面固定包含eval($_POST'caidao')或者eval request("caidao")等敏感函数调用。
PHP/ASP/JSP脚本均使用统一的后门参数,例如caidao。
动态特征
请求头:UA头一般会伪装成百度爬虫或者火狐浏览器
请求体:payload用的是Base64编码,里面固定字符串QGluaV9zZXQ...解码后是@ini_set()
响应格式:明文的返回结果包裹在X@Y中,例如写入成功是X@Y1X@Y,写入失败是X@Y0X@Y
通用特征
1.混淆技术
·字符串拆分,比如"UN"+"ION",变量名随机化,插入无关的注释。
·利用图片上传模块等正常功能伪装恶意代码。
2.反检测机制
·动态生成密钥,比如说冰蝎4.0,无文件驻留,像内存马。
·模拟合法流量,比如会伪装成数据库查询。
TLS证书的定位与导出
本地流量
如果是本地拦截的流量的话可以在环境变量里新建用户变量,变量名SSLKEYLOGFILE,变量值就是绝对路径,例如E:\XXX\SSLKey\sslkey.log。然后重新打开浏览器,当再次访问页面时会把密钥日志放到sslkey.log文件里。打开Wireshark
流量包
把需要分析的流量包导入到Wireshark之后在过滤栏中输入tls.handshake.type == 123(这里的123指的是TLS握手协议中的证书类型,例如Handshake Type: Certificate),直接筛选出所有包含Certificate消息的TLS握手包。在筛选结果中展开数据包的协议层次,例如Transport Layer Security → TLSv1.2/1.3 Record Layer → Handshake Protocol: Certificate(服务器证书→中间CA→根CA),然后右键证书字段,例如Certificate: [证书名],选择Export Packet Bytes...保存为.der文件。
PEM格式的证书可以直接从File →Exprot Objects →TLS →选择证书 →Save,然后保存为.pem文件