分析研判属于护网蓝队的中级岗位,需要进一步分析判断流量包是否为攻击,为何种攻击,并执行IP封禁协助溯源等工作,在实际的工作中安全服务/安全运维岗基本也需要会这一块的内容,分析研判大部分内容是分析告警流量特征,学习的内容包括常见的攻击流量特征、攻击工具流量特征、框架及中间件流量特征、Webshell管理工具流量特征等,面试题一般也是问这些流量特征!
1、常见的攻击流量特征
(1)SQL注入流量特征
-
SQL语句关键字:select、where、order by、union、update、delete
-
系统函数:user()、@@version、database()
-
特定的数据库函数或者特性:information_schema库(用来获取数据库库名、表名、字段名)、报错注入三大函数(updatexml、extractvalue、floor)
-
编码和转义:URL编码(%27代表单引号...)、十六进制编码(char(39)...)、ASCII编码(0x27...)等、注释语句--或者#或者/**/
-
多个或者错误的SQL语句:在一个请求中插入多条查询语句,或者插入格式错误的查询语句
(2)XSS流量特征
-
请求包中包含各种形式的HTML或者JavaScript标签(如<script>、<img>、<iframe>等)以及弹窗函数(如alert()、confirm()、prompt()),返回包中返回了对应的未被正确过滤的前端脚本语句
(3)RCE流量特征
-
请求头或者URL中可能会有危险的函数:比如PHP中的命令执行函数如system()、exec()、shell_exec()、passthru()函数、文件操作函数如popen()函数、代码执行函数如eval()、assert()函数,Java中的命令执行函数runtime.getruntime.exec函数等
-
流量中包含特殊的字符:比如|、||、&、&&、反单引号、>、>>、<、<<等
-
流量中包含系统命令或敏感文件路径:命令如ls、cat、rm,敏感文件路径如/etc/passwd、/etc/shadow、/var/log等
(4)SSRF流量特征
-
URL参数异常:URL参数指向内网地址或者不应该访问的地址,参数值是内网IP或127.0.0.1或者使用了伪协议(file://、ftp://、dict://、gopher://)
-
参数值后面存在特殊的字符或者使用编码绕过:特殊字符比如点号、冒号、空格,编码比如URL编码、Base64编码、16进制编码等隐藏或混淆IP地址或者域名
2、攻击工具流量特征
(1)Cobalt Strike流量特征
-
HTTP请求特征:默认使用GET方法向特定URL地址(比如/load、/dpixel、/pixel.gif、/__utm.gif等)发送请求,cookie里面有一个Base64编码的数据
-
DNS请求特征:在DNS请求中,域名可能以特定前缀开头(比如cdn、www6、api等),域名的查询结果可能包含非常规IP地址,这些地址被用于指令传输和心跳检测
-
心跳包特征:CS的默认心跳间隔是60秒,每隔60秒发送一次心跳包,用来确认被控端是否在线,当然可以在Beacon会话中执行sleep命令来修改心跳间隔
-
端口特征:CS默认端口为50050,当然这个端口可以通过编辑teamserver文件中的server_port进行修改
(2)Metasploit流量特征
-
端口特征:MSF数据库默认使用的postgresql端口是5432,MSF默认使用的反向连接端口是4444
-
数据包特征:MSF数据包中通常包含“meterpreter”、“revshell”等特殊字符串
-
使用特殊协议:MSF框架通常使用如Meterpreter、Reverse TCP等特殊的协议
(3)sqlmap流量特征
-
User-Agent头特征:sqlmap工具在发起请求的时候,默认的User-Agent中通常包含"sqlmap"关键字,比如sqlmap/1.7.5.2#dev (sqlmap: automatic SQL injection and database takeover tool)
-
攻击流程具有顺序和规律:sqlmap的攻击流程通常遵循一定的顺序和规律。比如在使用--os-shell攻击时,它会首先测试链接是否能够访问,接着判断操作系统版本,尝试爆绝对路径,指定上传路径,写入一个php文件,找到上传文件的访问路径,上传另一个php文件并执行命令等
-
Payload测试语句模板化:sqlmap使用的payload测试语句往往具有模板特征。比如在盲注入时,它会使用逻辑语句(如and、or)和特定的函数来测试SQL注入的可行性。这些语句在流量中会以特定的模式出现,如尝试让SQL语句报错来发现SQL漏洞,或者使用特定的函数(如@@version_compile_os)来判断操作系统等
3、框架及中间件流量特征
(1)Apache Shiro反序列化漏洞及其流量特征
漏洞原理:
-
Apache Shiro框架提供了记住密码的功能(RememberMe),在用户登录成功后会生成经过加密并编码的cookie,在服务端对rememberMe的cookie值,先base64解码然后再AES解密最后再反序列化,最后导致了反序列化RCE漏洞
Shiro550与Shiro721的区别:
-
Shiro550:由于AES密钥被泄露(密钥被硬编码),攻击者不需要获取真实的rememberMe字段,可以通过密钥重新构造请求,导致反序列化漏洞的产生
-
Shiro721:在该版本中,AES密钥不再是硬编码的了,而是系统随机生成的,但是攻击者还可以利用登录后获取的真实的rememberMe cookie值作为Padding Oracle Attack的前缀,通过构造的cookie值来实现反序列化攻击
Shiro反序列化流量特征:
-
登录失败:返回包中包含rememberMe=deleteMe
-
不勾选记住密码登录成功:返回包中set-Cookie包含rememberMe=deleteMe字段,但是后续请求中Cookie不包含rememberMe字段
-
勾选记住密码登录成功:返回包中set-Cookie包含rememberMe=deleteMe字段以及rememberMe字段,后续请求中Cookie也包含rememberMe字段
(2)Apache Log4j2远程代码执行漏洞及其流量特征
漏洞原理:
-
log4j2的lookup功能下的Jndi Lookup模块未对用户输入进行严格判断,请求了恶意资源导致了远程代码执行漏洞
Log4j2远程代码执行漏洞流量特征:
-
数据包中包含{jndi:ldap//}字段、响应体中可能存在命令执行的结果(有回显)、可能存在源IP与DNSlog的外联日志记录(无回显)
(3)fastjson反序列化漏洞及其流量特征
漏洞原理:
-
Fastjson在使用autoType功能实例化指定类时会读取@type指定的对象类型到内容,试图把JSON数据反序列化为这个对象,导致攻击者可以通过@type指定比如com.sun.rowset.JdbcRowSetImpl这样的远程命令执行类构造恶意利用链进行攻击
fastjson反序列化流量特征:
-
个人感觉主要特征就是请求包中包含"@type"、"ldap"、"rmi",还有就是Content-Type字段为"application/json"
(4)Apache struts2命令执行漏洞及其流量特征
漏洞原理:
-
Apache Struts2框架执行了恶意用户传入的OGNL表达式,造成远程代码执行
struts2命令执行漏洞流量特征:
-
请求参数中包含OGNL表达式,比如"${}"、"%{}",请求包中包含#_memberAcecess,请求参数的值中包含"java.lang.Runtime",该参数值用于执行系统命令
4、Webshell管理工具流量特征
(1)菜刀流量特征
-
默认Webshell连接密码为caidao
-
请求包中User-Agent头为百度或者火狐等爬虫标识
-
请求体中存在eval、base64等特征标识
-
流量参数中包含z0、z1、z2
-
建立连接后会发送特定的验证码,比如"knife"、"dadan"等进行验证
(2)蚁剑流量特征
-
默认的User-Agent头为英文的蚁剑(antsword)
-
PHP类型的Webshell流量请求体通常都以@ini_set("display_errors","0");@set_time_limit(0)开头(通常是URL加密)
-
响应体通常会进行base64编码,解码后可以观察到攻击行为的payload
(3)冰蝎2.x/3.x/4.x流量特征
冰蝎2.x:
-
请求体进行了AES加密 + Base64编码,使用的是动态密钥
-
请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个
-
请求的Cookie的格式通常为: Cookie: PHPSESSID=; path=/;
冰蝎3.x:
-
请求体进行了AES加密 + Base64编码,使用的是固定的连接密钥,AES加密的密钥直接固定为webshell连接密码的MD5哈希值的前16位,默认连接密码是“rebeyond”,因此AES加密的密钥就是“e45e329feb5d925b”
-
请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个,通信时可能会频繁使用特定的User-Agent,比如"WOW64"等
-
请求包中Content-Length为5740或5720(可能会根据Java版本而改变)
-
每一个请求头中存在Pragme: no-cache,Cache-Control: no-cache
-
可能会频繁访问默认路由,比如"/con"
冰蝎4.x:
-
该版本不再有连接密码这个概念,自定义传输协议的算法就是连接密码,与3.x相同的是默认情况下Webshell都有"e45e329feb5d925b"这个连接密钥
-
请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个
-
使用了长连接,请求头和响应头中connection头为"keep-alive"
-
Content-Type字段通常为"Application/x-www-form-urlencoded"
-
默认情况下有固定的请求头和响应头,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
(4)哥斯拉流量特征
-
Webshell使用了eval函数以及base64编码
-
请求包通常以"pass="开头
-
通常请求包较长,但是响应包长度可能为0
-
默认的User-Agent字段是Java/版本号,但是可以被修改
-
最后一个Cookie值的末尾有一个不必要的分号
-
响应包具有特定的结构特征,结构特征为:md5前十六位+base64+md5后十六位
三、攻击溯源
攻击溯源属于护网蓝队的高级岗位,需要根据攻击者的留下的IP、域名、网站url、攻击样本等信息,定位出攻击者的个人信息,包括攻击者的物理地址、攻击者服务器地址、攻击者姓名、电话、邮箱等信息。攻击溯源分为三大部分:攻击源捕获、溯源反制手段、攻击者画像绘制
1、攻击源捕获
(1)安全设备报警:扫描IP、威胁阻断、病毒木马、入侵事件等
(2)日志以及流量分析:异常的流量、攻击来源与攻击目标等
(3)服务器资源异常:异常的文件、账号、进程、端口、启动项
(4)计划任务和服务等
(5)邮件钓鱼:获取恶意文件样本、钓鱼网站URL等
(6)蜜罐系统:获取攻击者行为、意图的相关信息
2、溯源反制手段
(1)IP定位技术:通过IP定位物理地址-代理IP
(2)ID追踪术:搜索引擎、社交平台、技术论坛、社工库匹配
(3)网站URL:域名whois查询-注册人姓名、地址、电话和邮箱
(4)恶意样本:提取样本特征、用户名、ID、邮箱、C2服务器等信息
(5)社交账号:基于JSONP跨域,获取攻击者的主机信息、浏览器信息、真实IP及社交信息等
3、攻击者画像
(1)攻击路径
-
攻击的目的:拿到权限、窃取数据、获取利益、DDOS等
-
网络代理:国外VPN、代理IP、跳板机、C2服务器等
-
攻击手法:鱼叉邮件钓鱼、Web渗透、水坑攻击、社会工程等
(2)攻击者身份画像
-
虚拟身份:ID、昵称、网名
-
真实身份:姓名、物理位置
-
联系方式:手机号、qq/微信、邮箱
-
组织情况:单位名称、职位信息
4、溯源案例
攻击溯源面试题一般就问你做过溯源没有,怎么做的,接下来我就举一个被fastjson攻击的溯源流程案例:
(1)流量监控与日志分析:通过监控网络流量和审查应用服务器日志,发现了异常的JSON请求,其中包含了不寻常的@type字段和dataSourceName字段
(2)识别攻击特征:分析请求中的@type字段和dataSourceName字段,发现它们指向了一个外部的RMI服务,这是Fastjson漏洞的一个典型特征
(3)IP地址溯源:通过WHOIS以及威胁情报平台等对dataSourceName中的RMI地址进行溯源,确定了攻击者控制的服务器IP地址以及其它信息
(4)漏洞验证与复现:在隔离的环境中复现了攻击,验证了漏洞的存在,并分析了攻击触发的流程
(5)漏洞修复及后续行动:为防止再次被攻击,更新了Fastjson库到最新的安全版本,并禁用了autoType功能。同时根据获取到的IP地址以及其它相关信息进行了报警处理