一、攻防演练应急思路
HW场景下红队攻击流程简述:
1. 攻击阶段的初步研判: 根据告警判断攻击者可能处于什么攻击阶段, 并优先考虑抑制动作
2. 抑制动作: 根据业务, 演练规则情况考虑抑制手段, 列出抑制动作的优先级并及时与业务部门沟通, 并核实完成情 况
3. 找入口点: 在态势感知等检测设备上根据告警攻击方向及告警时间, 找入口主机
4. 入口点主机的后门代理处置: webshell,、后门、 代理、横向攻击工具、持久化排查及处置、远控排查
5. 溯源: 查看访问日志找利用的漏洞, 本机上的痕迹及fscan扫描结果等判断失陷范围
6. 批量排查受影响主机: 利用溯源处置时收集的IOC, 制作规则批量下发扫描(MRH/MMH)并且加入安全设备规则 库中(加黑名单等)
7. 加固: 漏洞修复及拦截规则确认(禁止访问某路径等规避措施)
8. 持续监测
与web攻击或篡改等事件不同, HVV场景下需要额外注重抑制环节, 发现IOC及时进行抑制动作同时也要做好风险管理, 及时与业务部门通抑制动作的完成情况。
二、安全设备日志分析
01.日志分析思路
目的:
1. 研判, 针对单一事件判断是否为攻击事件, 除了明确是否是攻击流量外, 还要明白攻击者在做什么(攻击目的是探测漏洞还是getshell了?)
2. 行为, 比如XFF字段的顺序可以看是否经过AD或代理设备, dnslog域名或者UA来判断是否为漏扫, payload可以判断攻击所处阶段(与后面服务器web日志排查对应攻击时间)
X-Forwarded-For(XFF)
XFF是header请求头中的一个参数
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
代表了HTTP的请求端真实的IP。X-Forwarded-For: client1, proxy1, proxy2, proxy3
//浏览器IP,第一个代理服务器,第二个三个四个等等其他头部字段:
User-Agent:使得服务器能够识别客户使用的操作系统,浏览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
Cookie:网站为了辨别用户身份进行session跟踪,并储存在用户本地终端上的数据(通常经过加密)
X-Forwarded-For:简称XFF头,代表了HTTP的请求端真实的IP。它被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地址的一个标准(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或某文件[通过修改XXF头可以实现伪造IP])。
Rerferer:浏览器向 WEB 服务器表明自己的页面来源。
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。
3. 结果, 攻击是否成功, 落地的文件(后门等)路径在哪里?(web日志请求的路径和webshell文名)
4. 溯源, 除了找到攻击源IP以外, 还能否确认攻击者身份, 攻击是否为僵尸网络发起? 是否存在VPS地址
漏洞利用/攻击
着重关注:通过设置筛选条件着重关注紧急、高危的攻击日志。
关注对象:服务器;
事件类型:网络攻击事件
攻击结果:成功、失陷
告警分析&研判
[1] 通过威胁定性和标签过滤掉病毒类低优先级的告警事件。
[2] 优先关注严重、高危、中危等级的事件,标记的紧急事件第一时间处置。
[3] 优先关注攻击结果为成功和失陷的告警,攻击源为境内的IP。
查看告警详情进行初步研判。根据举证信息(基本详情、数据包)进行初步研判
分析背景:
HW期间每天都检测到大量的攻击行为,到底那些攻击是成功的,造成什么危害,需要及时分析并处置。
分析方法:
1、过滤态势感知最近一段时间检测到攻击成功的安全事件。
2、结合攻击数据包以及响应数据包进行研判攻击是否成功(以通用命令执行检测为例,具备回显的主要看响应数据包是否返回攻击成功的回显,无回显特征的主要结合dnslog解析记录来看是否存在对应解析记录看判断是否攻击成功)
反弹SHELL案例
思路:筛选攻击结果“失陷、成功”状态事件,分类里“恶意远控工具”->正向/反向反弹shell
查看反弹shell执行的命令(未加密情况下)
Linux反弹shell
Windows反弹Shell
针对加密反弹shell通信,告警展示内容为乱码,由于无法获得私钥,暂不支持解密通信内容。对于特征不明显的反弹shell, 如果是公网IP,可以去多家威胁情报网站查询该IP是否已被标记恶意而确认。
代理
思路:可直接在检索框搜索“frp”、“代理”这样的关键字。
以及存在http正向代理(regeorg、reduh等)的这种代理行为也需要重点关注,出现这种行为一般也会有webshell上传或者连接行为。
reGeorg主要是把内网服务器的端口通过 http/https 隧道转发到本机,形成一个隧道。
reDuh是Glenn Wilkinson在2008年美国黑客大会上演示的一款正向代理工具,该工具实现了HTTP代理功能。
SQL注入
思路:Sql注入主要体现在交互过程,在提交参数的地方容易存在注入,通过平台搜索关键字“select”, 或者通过威胁分类,选择注入类型。SQL注入返回状态码筛选200/500/进一步判断。
1.【存在SQL漏洞】返回包包含“ You have an error in your SQL syntax”,同样可以进一步测试验证, 搜索关键字“sql syntax”。
2. 【存在SQL漏洞】搜索高危事件,锁定特殊状态码也可以发现有效的攻击事件。例如搜索SQL注入,着重 分析状态码为500的事件,成功发现报错型SQL注入攻击。
部分业务,存在文明SQL语句传输,且不需要身份验证,这类同样可以提交SQL注入,部分日志会体现在信息泄露。
下载恶意文件
思路: 使用certutil命令远程下载C&C文件,属于常见的黑客远控下载手法,其他常见命令的还有:bitsadmin、 curl、wget、powershell(downloadstring),以及windows下最新的cmdl32远程下载。
判定特征如下:
1、User-Agent为certutil,调用 certutil命令进行下载,属于异常 行为;
2、响应头Server:SimpleHTTP, 该web服务器常被黑客用于搭建 简单的web服务;
3、通过直接访问IP地址 47.242.112.14:8000下载文件而 不是域名;
4、有时候请求下载的不是exe文 件,比如txt或者jpg,但exe可执 行文件一般会在响应体表现特征 “MZ”开头、“This programe cannot be”,证明该文件是exe 文件
下载伪造后缀的恶意文件:
02.日志分析辅助工具
解码工具
CyberChef 是一款强大的编码转换器,https://gchq.github.io/CyberChef/ 可以下载到本地打开 简单易懂易上手,集成了多种编码转换的功能,如:base64解编码、hex转换、url转换、正则表达式等,能辅助大家方便快捷地解密出恶意脚本。
可以自定义规则, 分享一个常用的: 对于用 chr() 函数混淆的(ascii编码), 可以载入以下代码, 效果如下:
Regular_expression('User defined','([0-9]{2,3}(,\\s|))+',true,true,false,false,false,false,'List matches') From_Charcode('Line feed',10)
三、WEBSHELL识别
01.代码基础
PHP webshell
常见函数总结:
system() exec() shell_exec() passthru() proc_open() popen() pcntl_exec() eval() assert() call_user_func() call_user_func_array() array_filter() array_map() filter_var() uasort() execute()
遇到base64_decode, 可以自己base64解码看下,当然遇到webshell可以使用工具扫描。
JSP webshell
常见函数和类等关键字:
直接调用, 直接执行命令的
java.lang.Runtime
java.lang.ProcessBuilder
远程调用和本地加载
远程调用可以看到url, 本地加载可以看到类的路径
URLClassLoader
如果找到了远程调用的url, 或者找到加载自定义的字节码(可能是加密或编码后的) 可以通过反编译来看具体执行了什么命令
加载字节码: java.lang.ClassLoader
加载自定义类, 如冰蝎 defineClass
反射:
MethodAccessor.invoke
Method.invoke
应急过程中可能会遇到webshell.jsp已经被删除了, 这时候可以尝试找下webshell.java或者webshell.class.可以证明主机被上传webshell而且攻击者有访问过. tomcat场景在 /work/Catalina/localhost/ 下 JSP在第一次被访问的时候会先被翻译成Java文件,这个步骤由Tomcat等web容器完成;接着Java文件会被编译成JVM可以识别的class文件。
看不懂代码情况下快速判断:
webshell特征: DES加密算法, 一个奇怪的字符串(7x4T2T8y, 可以怀疑是密码), defineClass, method.invoke(反射) 综上判断虽然出现 isLogin, Cookies 等看似业务的关键字, 但是webshell特征更明显, 一眼鉴定为webshell
02.内存马查杀-工具介绍
1)tomcat-memshell-scanner.jsp + jadx
2)arthas
3)java VisualVM + VisualVM-MBeans
4)ProcessHacke
https://www.msangfor.com/tools
MSI内存马检测工具
以下这些工具自动化程度较高, 有些自带规则
copagent
河马内存马扫描工具
内存马学习资源
https://github.com/Getshell/Mshell
1)tomcat-memshell-scanner.jsp + jadx
这个工具大家应用的的比较多, 放入任意一个webapp目录(可以为ROOT)并访问,可以dump可疑的class文件, 然后用java反编译工具进行分析确认
2)arthas
https://arthas.aliyun.com/arthas-boot.jar
arthas为阿里开发的java诊断工具,运行该工具,其会扫描本主机java进程并且列出,选择先要检测的java进程即可
java -jar arthas-boot.jar [pid] //pid可选, 不填扫描所有java进程
如果是windows服务模式运行的Java业务进程, 使用as-service.bat -pid [p]
arthas(无查杀功能,只能分析java进程) 主要关注如下命令:
• sc——查看 JVM 已加载的类信息
• sm——查看已加载类的方法信息
• jad——反编译指定已加载类的源码
• dump——dump 已加载类的 byte code 到特定目录
• classloader——查看 classloader 的继承树,urls,类加载信息
官网文档 https://arthas.aliyun.com/doc/commands.html
使用sc查看JVM已加载的类信息, 针对从jsp文件加载的类, 可以搜索“*_jsp$*”相关类信息
使用jad命令反编译已加载类的源码, 可检查源码并判断是否为异常类
arthas 查看 Mbean 的信息
Godzilla 的 FilterShell 存在非常明显的特征 ⇒ 尾部时间戳
使用sc查看JVM已加载的类信息, sc *.Filter | grep "ValueInstantiators" ⇒ 得到类全路径
mbean 的注册只是为了方便资源的管理,并不影响功能,所以攻击者植入内存 Webshell 之后,完全可以通过执行 Java 代码来卸载掉这 个 mbean 来隐藏自己 包括后面要介绍的jvm工具,如果攻 击者卸载了mbean,也不能通过 mbean查看
使用dump命令将该类的字节码dump到文件, 然后在本地反编译class文件查看代码
3)java VisualVM
java VisualVM
Java 虚拟机监控和分析工具 在jdk 下的 bin\jvisualvm.exe里打开, 安装插件VisualVM-MBeans, 直接打开MBeans标签页就可以查看
4)ProcessHacker
直接找到进程,属性-Memory功能创建进程内存的快照,然后在内存里搜索痕迹如执行的命令
03.WebShell研判案例
思路: 1、webshell安全事件快速研判方法:Webshell上传 & webshell后门通信是攻击场景最常用的web攻击方法,核心业务每天遭受的webshell相关攻击近3700条,如何快速的对这些攻击进行分析,快速找出攻击 成功事件是防守的核心。目前使用的有效方法是根据HTTP的返回状态码进行判断,有几种情况:
(1)HTTP没有返回的情况,有1200条,说明是攻击被拦截的数据,直接PASS不用关注。 (2)HTTP返回4XX的,有1100条,说明访问不成功,要么是webshell路径不存在,要么是服务器不接受客 户端请求,即攻击不生效。
(3)HTTP返回2XX的,有1602条,利用态势感知的日志 归并相同ip,相同攻击行为,过滤出10条webshell上传、 webshell后门访问事件,逐一确认,发现webshell攻击 通信行为:如下图。
(4)HTTP返回5XX的,有3条,说明服务器执行报错,通过与业务方确认是对攻击方的数据处理出错,攻击不成功。
查看日志详情可以发现有命令执行成功的回显
目前部分主流态势感知平台支持检测加密webshell通信, 主要检测冰蝎、哥斯拉等加密通信,该事件可通过分析 中心-日志检索比对通信时间节点,是否存在较多攻击流 量或被上传webshell进行确认。