注意:以下的事件处置类型是常见的,但安全威胁不断演化,因此可能需要根据具体情况进行调整。
1 Webshell类
1.1常见Webshell类型
1.1.1 一句话木马
特征:
一句话木马代码简短,通常只有一行代码,使用灵活,可以作为单独的文件也可以插入正常文件,通常为了达到隐蔽持续控制的效果,攻击者会对一句话木马进行变形混淆。
1.1.2 小马
特征:
小马一般功能单一(仅支持文件上传操作、命令执行等),文件体积较小,界面简单甚至没有前端界面。由于体积小所以变种多,特征难以统计,攻击者有可能先上传小马之后再通过小马上传大马或其他攻击工具。
1.1.3 大马
特征:
大马体积大,功能全,一般包括了文件管理,命令执行,数据库管理,系统探针,权限提升等功能。由于文件大,特征多,所以容易被发现。并且大马由于编写较为复杂导致变种门槛比小马高。
1.1.4 内存马
特征:
内存马是无文件攻击的一种常用手段。内存马是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,利用中间件的进程执行某些恶意代码,不会有文件落地。
1.2 文件落地Webshell处置流程
适用范围:一句话木马、小马、大马等
1.2.1 异常排查
常见webshell代码特征:
jsp的一句话并没有一句话那么简单,文件内容没办法做到像其他语言一样简略,这是其语言特性决定的。
确定入侵时间,可通过网站恶意攻击事件事件,webshell文件创建时间,webshell首次被访问时间等线索,判断攻击者实施攻击的时间范围。追踪攻击者IP及攻击途径,从而发现网站漏洞点。
如下图,可以确认该IP地址进行了恶意的目录扫描攻击行为。
确认攻击者IP之后,通过筛选日志,确认攻击者攻击途径,重点关注日志中攻击者发起的POST请求内容,尤其是上传功能页面的请求。
根据日志中分析的疑似存在漏洞的点位,进行漏洞排查分析。对漏洞进行利用复现,还原攻击者的完整攻击路径。
1.2.2 Webshell处置
对网站目录下的所有文件进行排查,查找webshell后门文件。
或者使用D盾扫描工具自动检测
(注意:通常工具是基于特征检测的,恶意攻击者精心构造的免杀马会对特征进行混淆达到绕过检测的目的)
1.2.3 漏洞修复及其他异常处置
(1)根据上述方法清除发现的Webshell文件,并修复发现的漏洞,避免网站系统再次受到攻击。排查服务器是否存在攻击者遗留的工具或其他后门,例如排查计划任务,启动项,进程等。(详情见 三 其他类型后门处置流程)
(2)检查相关业务系统(RDP、SSH、FTP等)是否存在弱口令账号,确认是否存在账号异常登录情况,修改弱口令,并对非必要对外开放的系统进行远程访问限制。
(3)查看系统补丁信息,根据当前系统补丁情况,确认是否存在未修复的系统漏洞。
(4)检查第三方软件漏洞,如果服务器内有运行对外应用软件(WEB、FTP 等),可通过官方公布的漏洞情况及补丁自查相关软件是否存在漏洞。
1.3 无文件落地Webshell处置流程
适用范围:内存马
1.3.1 异常排查
通过对Web日志文件的分析,确定异常访问的IP。
根据异常IP信息对日志进行筛选,进一步分析日志确认攻击者首次攻击时间及攻击行为。
筛选攻击者访问成功的页面,定位攻击者可能利用的漏洞点位页面。并根据日志中分析的可能存在漏洞的点位,排除网站存在的漏洞,并进行分析。对排查发现的漏洞进行利用复现,还原攻击者攻击路径。
对日志进行分析排查,发现攻击者多次对实际不存在的页面进行了请求,数据包返回大小不同,且服务器返回结果为200,此时将需要考虑服务器是否被植入了内存马,需要对服务进程进行分析。
1.3.2 内存马处置
1.3.2.1 JAVA内存马查杀
(1)cop.jar
只需要将cop.jar工具放在运行tomcat的服务器上运行cop.jar工具会识别你正在运行的应用列举出来由你自己选择ID,运行后会在同目录下生成.copagent目录储存结果result.txt。
result.txt中记录所有的类及危险等级
在java目录下或class文件夹下会保存木马以及运行的类
还原出内存马
可使用D盾进行扫描检查
(2)arthas-boot.jar
Arthas是一款开源的Java诊断工具,基本使用场景是定位复现一些生产环境比较难以定位问题。可以在线排查问题,以及动态追踪Java代码,实时监控JVM状态等等。
java -jar .\arthas-boot.jar #java应用进程PID |
输入Mbean 查看或监控 Mbean 的属性信息,根据哥斯拉内存马的特性,进行筛选出异常组件
mbean | grep "Servlet" #查看 Mbean 的信息,查看异常Filter/Servlet节点 sc *.Filter #搜索符合pattern的Filter jad --source-only org.apache.jsp.memshell_jsp #反编译指定类 |
(3)java-memshell-scanner
通过jsp脚本扫描并查杀各类中间件内存马。
只需要将tomcat-memshell-scanner.jsp放在可能被注入内存马的web录下,然后使用浏览器访问即可直接获得扫描结果。
点击kill即可删除内存马,测试扫描结果可查杀servlet型和filter型。
1.3.2.2 ASPX内存马查杀
ASP.NET-Memshell-Scanner
上传aspx-memshell-scanner.aspx到web目录,浏览器访问即可。
默认情况:
存在内存马情况:
其中类名为memoryShell.GodzillaVirtualPathProvider为哥斯拉的内存马
MemShell.SamplePathProvider为蚁剑的内存马
点击kill,提示操作成功,即可删除内存马
1.3.3 漏洞修复及其他异常处置
(1)根据上述方法清除发现的内存马,并修复发现的漏洞,避免网站系统再次受到攻击。排查服务器是否存在攻击者遗留的工具或后门,例如排查计划任务,启动项,进程等。(详情见 三 其他类型后门处置流程)
(2)检查相关业务系统(RDP、SSH、FTP等)是否存在弱口令账号,确认是否存在账号异常登录情况,修改弱口令,并对非必要对外开放的系统进行远程访问限制。
(3)查看系统补丁信息,根据当前系统补丁情况,确认是否存在未修复的系统漏洞。
(4)检查第三方软件漏洞,如果服务器内有运行对外应用软件(WEB、FTP 等),可通过官方公布的漏洞情况及补丁自查相关软件是否存在漏洞。
2 恶意程序类
2.1常见恶意程序类型
2.1.1 勒索病毒
特征:
勒索病毒主要以邮件、程序木马、网页挂马的形式进行传播。该病毒性质恶劣、危害性大,该病毒利用各种加密算法对用户的文件、数据进行加密,被感染者一般无法解密,必须拿到解密的密钥才有可能破解。
2.1.2 挖矿病毒
特征:
挖矿病毒会伪装成一个正常文件进入受害者的电脑,利用主机或者操作系统的高危漏洞,并结合高级攻击技术在局域网内传播,控制电脑进行大量的计算机运算来获取虚拟货币。挖矿病毒会导致计算机长时间执行高性能计算,严重占用CPU和内存,致使电脑性能严重下降。
2.1.3 钓鱼程序
特征:
钓鱼程序入侵事件一般发生于针对个人、企业和组织的网络钓鱼攻击。攻击者通常使用社交软件对指定范围的对象发送钓鱼程序,常见手段有发送钓鱼邮件、文件下载链接、社交软件传输文件等,将钓鱼邮件伪装成文档、工具软件等文件,引诱受害者下载运行钓鱼程序,从而获取受害者主机的控制权限。
2.1.4 后门程序
特征:
后门程序是驻留在计算机系统中,其目的是为攻击者在用户不知情的情况下潜入计算机系统中。它会绕过一般保护措施,植入特定的代码,为黑客提供潜入入口,可以在未被授权的情况下访问被植入后门程序的计算机系统。
2.1.5 提权程序
特征:
提权程序分为本地提权、数据库提权和第三方软件提权。大多数计算机系统设计为可与多个用户一起使用,特权升级意味着用户获得他们无权执行的特权。本地提权能以高权限对更多的文件进行「增删改查」操作,收集主机系统中的敏感信息;数据库提权通常是数据库配置缺陷使黑客恶意利用数据库机制达到命令执行的目的;第三方软件提权是利用第三方软件存在的漏洞来进行获取权限的操作。
2.2处置流程
适用范围:勒索病毒、挖矿病毒、钓鱼程序、后门程序、提权程序
2.2.1 异常排查
根据不同的操作系统,选择对应的方式进行系统异常查找,定位恶意程序的名称及位置,并根据服务器的业务系统开放情况,如web系统、数据库系统、操作系统等,对相关系统进行漏洞排查,分析恶意程序的入侵途径,并修复相关系统的漏洞。
2.2.1.1 排查Windows系统异常
(1)检查是否存在异常进程
使用端口查询命令,定位异常外连的进程PID
netstat -ano |
根据PID找到对应异常程序名称
tasklist | findstr XXXX |
根据异常程序名称找到其对应的位置
wmic process | findstr "wps.exe" |
(2)检查是否存在恶意服务
通过 sc query 查看windows 服务状态
发现可疑服务,可通过sc qc <服务名> 查看服务的详细内容
(3)检查是否存在恶意文件
查看各盘下的temp有无异常文件(Windows 产生的临时文件)
windows/temp
查看快捷桌面
%UserProfile%\Recent
通过查看文件的修改时间,可以快速定位异常文件
2.2.1.2 排查Linux系统异常
(1)检查是否存在异常进程
使用ps、top、htop等命令查看进程情况
使用netstat端口查询命令,定位异常外连的进程PID
根据PID找到对应异常程序名称
ps aux | grep pid |
根据异常程序名称找到其对应的位置
方法一:ps -ef | grep 进程名
方法二:lsof -p 进程PID
方法三:使用/proc文件系统查看进程文件位置
Linux系统中的/proc文件系统提供了有关系统进程的详细信息。每个进程都在/proc目录下有一个以其PID命名的子目录。进入该子目录后,可以查看进程的文件位置信息。
(2)检查是否存在恶意文件
敏感目录的文件分析(如/tmp目录,命令目录/usr/bin、/usr/sbin等)
着重关注文件权限、文件时间及可疑文件的内容
2.2.1.3 排查SQL Server数据库异常
SQL Server 的 xp_cmdshell 是一个系统存储过程,用于在 SQL Server 实例上执行操作系统级别的命令。它可以被滥用,因为它允许未经检查和限制地执行任意命令,这可能会导致安全风险。要进行 SQL Server xp_cmdshell 入侵检测,可以采取以下步骤:
(1)检查 xp_cmdshell 是否已启用
运行以下查询来检查 xp_cmdshell 是否可用
EXEC sp_configure 'xp_cmdshell'; |
如果返回结果中的 "run_value" 为 0,则表示 xp_cmdshell 已禁用。如果未禁用,请继续下一步。
(2)排查日志文件
定期监视 SQL Server 的错误日志和 Windows 事件日志,以检测任何与 xp_cmdshell 相关的异常记录。
(3)检查是否存在未授权的用户或角色
运行以下查询来查找具有高权限的用户或其他不受信任的用户
SELECT * FROM sys.server_principals; |
(4)禁用 xp_cmdshell
如果不需要使用 xp_cmdshell,可将其禁用。通过执行以下语句来禁用:
EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; |
2.2.1.4 排查MySQL数据库异常
MySQL UDF(用户定义函数)是一种允许用户编写自定义函数并将其加载到 MySQL 服务器中的功能。在特定情况下,恶意用户可能滥用 UDF 功能以获取提权或执行未经授权的操作。要进行MySQL UDF入侵检测,可以采取以下步骤:
(1)检查 MySQL 日志
查看 MySQL 的日志文件,通常位于 MySQL 的数据目录下,具体位置可在mysql的配置文件中查看(windows系统名称:my.ini,linux系统名称:my.cnf)。在日志中搜索与 UDF 或插件相关的错误信息,包括加载、安装或使用 UDF 的问题。
(2)检查已安装的 UDF
运行以下 SQL 查询来获取已安装的 UDF 列表
select * from mysql.func; |
检查返回的结果是否包含未知或可疑的 UDF。如果存在不明来源的 UDF,可能是一个潜在的后门。
(3)排查mysql 插件目录
运行以下 SQL 查询来获取插件目录
show variables like '%plugin_dir%'; |
通过排查插件目录寻找可疑文件,如高权限的文件夹和文件、近期创建的可疑文件。
(4)MySQL安全检查
检查用户口令强度
检查 MySQL 的用户和权限设置,确保只有授权的用户能创建UDF函数。
检查MySQL用户的读写权限(secure_file_priv权限)
(5)UDF提权清除
使用 drop function <name> 命令删除恶意UDF函数
删除恶意动态链接库文件
2.2.2 恶意程序分析
通过系统的异常排查定位到恶意程序文件,但仅通过系统层面排查无法确认恶意程序外连信息及操作行为时,则需要使用更为专业的监控工具对恶意程序进一步分析,必要时需要使用反汇编工具对恶意程序进行逆向分析,从而获取恶意程序的操作行为,分析其造成的影响,甚至可以获取到定位攻击者身份的关键信息。
常见分析思路:
- 静态恶意程序分析
静态恶意程序分析在不主动运行恶意程序代码的情况下查找可能损害系统的文件,使其成为暴露恶意库或打包文件的安全工具。静态恶意程序分析可以发现有关恶意程序性质的线索,例如文件名、哈希、IP 地址、域和文件头数据。可以使用各种工具(例如网络分析器)观察恶意程序。
- 动态恶意程序分析
动态恶意程序分析使用沙盒,沙盒是一个安全、隔离的虚拟环境,您可以在其中运行可疑的危险代码。安全专业人员可以密切监视沙箱中的恶意程序,而不必担心感染系统或网络的其余部分,从而使他们能够收集有关恶意程序的更多信息。
- 混合恶意程序分析
混合恶意程序分析结合了静态和动态技术。例如,如果恶意代码对计算机的内存进行更改,则动态分析可以检测到该活动。然后,静态分析可以准确确定进行了哪些更改。
(1)网络行为分析
- NetLimiter
通过此工具可监测程序的网络通讯信息,以方便进一步分析。
- CurrPorts
通过此工具可显示本地计算机上所有当前打开的TCP/IP和UDP端口的列表。对于列表中的每个端口,还显示打开该端口的进程的信息,包括进程名称、进程的完整路径、进程的版本信息(产品名称、文件描述等)、进程的创建时间以及创建该进程的用户。此外,CurrPorts允许你关闭不需要的TCP连接,杀死打开端口的进程,并将TCP/UDP端口信息保存到HTML文件、XML文件或以制表符分隔的文本文件中。
(2)程序行为监控分析
- DiffView
此工具可追踪一个程序在你系统上所做的修改或一些操作进行监控
- LISTDLLS
"LISTDLLS" 可列出当前运行的 Windows 进程所加载的动态链接库(DLL)信息。这个工具可以在 Windows 操作系统上帮助用户查看正在运行的进程所依赖的 DLL 文件,以及 DLL 的加载地址和状态。
- Process Explorer
Process Explorer是Windows操作系统的任务管理器的增强版本。Process Explorer提供了更丰富的功能和更详细的信息,用于管理和监视正在运行的进程、线程、以及系统的资源使用情况。
- Process Monitor
Process Monitor用于在Windows操作系统上监控进程、文件系统、注册表和网络活动。它提供了实时的、详细的日志记录,帮助用户深入了解系统中正在发生的操作和活动。特点是可监控进程写入文件,访问网络,注册表写入等细节。
(3)恶意程序逆向分析
使用监控工具对恶意程序网络行为和操作行为监控没有发现时,可使用相关工具对恶意程序进行逆向分析。通过对程序的逆向分析,可从反汇编的程序代码中获取恶意程序的外连信息、操作行为逻辑等,甚至可以获取确认攻击者身份的关键信息。逆向分析需要使用反编译工具,如IDA Pro、x64dbg等,Linux平台可使用objdump。
- x64dbg
x64dbg是一款功能强大的动态反汇编调试器,它能够在windows平台上进行应用程序的反汇编、调试和分析工作。
- objdump
objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。
常用参数说明:
-f 显示文件头信息
-D 反汇编所有section (-d反汇编特定section)
-h 显示目标文件各个section的头部摘要信息
-x 显示所有可用的头信息,包括符号表、重定位入口。-x 等价于 -a -f -h -r -t 同时指定。
-i 显示对于 -b 或者 -m 选项可用的架构和目标格式列表。
-r 显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。
-R 显示文件的动态重定位入口,仅仅对于动态目标文件有意义,比如某些共享库。
-S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。
-t 显示文件的符号表入口。类似于nm -s提供的信息
2.2.3 恶意程序清除
根据对服务器的安全排查找到恶意程序之后,需要对恶意程序进行清除。
1) 直接删除恶意程序
排查定位到恶意程序的位置,根据恶意程序执行逻辑删除恶意程序及其衍生文件。
2) 杀毒扫描工具查杀
使用杀毒软件、GScan等工具,自动查杀恶意程序。该方法适用于特征明显的恶意程序,对于特征隐藏的免杀恶意程序,则需要人工排查定位恶意程序进行清除。
Windows平台可使用Windows Defender安全软件查杀。
Linux平台可使用GScan工具进行主机安全扫描:
2.2.4 漏洞修复及其他异常处置
(1)检查相关业务系统(RDP、SSH、FTP等)是否存在弱口令账号,确认是否存在账号异常登录情况,修改弱口令,并对非必要对外开放的系统进行远程访问限制。
(2)查看系统补丁信息,根据当前系统补丁情况,确认是否存在未修复的系统漏洞
(3)检查第三方软件漏洞,如果服务器内有运行对外应用软件(WEB、FTP 等),可通过官方公布的漏洞情况及补丁自查相关软件是否存在漏洞。
3 其他类型后门处置流程
当发生安全事件并完成对Webshell、恶意程序的处置工作之后,为了避免攻击者通过其他形式在系统中留下后门,还需要对服务器进行安全检查。
3.1 Windows系统
3.1.1 查看计划任务
compmgmt.msc
排查是否存在恶意的计划任务并执行删除动作,若关联了恶意脚本则同步清除。
清除命令:schtasks /delete /tn "计划任务名称" /f
3.1.2 查看进程
清除命令:
taskkill /f /t /pid "进程PID" |
使用tasklist命令,排查是否存在恶意进程,查询进程文件位置,执行恶意文件删除及恶意进程清除。
3.1.3 查看启动项
使用msconfig命令或打开任务管理器,排查清除下列目录中的恶意自启动文件:
%appdata%\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
3.1.4 查看服务
services.msc
排查是否存在恶意服务,执行删除动作。
3.1.5 查看事件日志
eventvwr.msc
排查系统日志是否存在异常事件
3.1.6 查看隐藏用户
清除命令:
net user test$ /del |
使用net user命令查看有哪些用户,然后在输入net localgroup administrators 或者 net localgroup users或使用regedit打开注册表编辑器找到:[HKEY_LOCAL_MACHINE]——[SAM]——[SAM]——[Domains]——[Account]——[Users]
这里下面的数字和字母组合的子键是你计算机中所有用户帐户的SAM项。子分支[Names]下是用户名,每个对应上面的SAM项。
还可以使用D盾工具检测隐藏用户
3.1.7 查看注册表
运行键是注册表的一种开机运行机制:当用户登录或机器启动时,可以在Windows系统上执行一些程序。
通过以下命令查找注册表运行键:
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce" reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices" Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce" reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce" reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices" Reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce" |
删除运行键:
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v <name> /f |
3.2 Linux系统
3.2.1 查看计划任务
使用crontab命令查看
常用参数:
-u 指定一个用户
-l 列出某个用户的任务计划
-r 删除某个用户的任务
-e 编辑某个用户的任务
(编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件)
排查是否存在恶意计划任务并执行删除动作,若关联了恶意脚本则同步清除。
3.2.2 查看进程
清除命令:
kill -9 "进程PID" |
使用ps命令查看进程,排查是否存在恶意进程并执行清除,若关联了恶意文件则同步清除。
3.2.3 查看启动项
ls -alt /etc/init.d/ |
排查删除下列目录中的恶意自启动文件
3.2.4 查看异常用户
查看/etc/passwd文件,这个文件是保存着这个linux系统所有用户的信息,通过查看这个文件,我们就可以尝试查找有没有攻击者所创建的用户,或者存在异常的用户。
3.2.5 查看历史命令
使用history命令或者查看~/.bash_history文件,分析攻击者相关操作。
3.2.6 查看登录日志
使用last、lastb、lastlog命令查看系统用户登录相关日志,排查是否存在账号异常登录并修改相关账号口令。
修改密码命令:passwd 用户名