应急响应——入侵排查
1. Windows入侵排查
1.1 账号
1.1.1 弱口令
服务器是否存在弱口令?
远程连接端口是否对公网开放?(默认3389)
- 检查方法:直接询问管理员。
- 处理方法:修改弱口令;远程连接端口不对外开放或通过注册表编辑器修改为其他,例如23389
1.1.2 新建账号和可疑账号
- 检查方法一:Win+R/cmd,输入
lusrmgr.msc
本地用户和组,观察是否有新建账号和可疑账号,属不属于Administrators组?
- 检查方法二:cmd,输入
net localgroup administrators
效果同法一,本地用户和组-组
- 检查方法三:powershell,输入
Get-WmiObject -Class Win32_UserAccount | Select-Object Name, SID
效果同法一,本地用户和组-用户,但是能看到SID
- 处理方法:禁用或删除对应的账户
net user 用户名 /del
#删除用户
- 或者在本地用户和组中删除
1.1.3 隐藏账号和克隆账号
- 检查方法一:Win+R/cmd,输入
lusrmgr.msc
去本地用户和组查看是否有$符号的隐藏账号,如果有隐藏账户,需要查看详细信息,看看是不是本地超级管理员组的
cmd,输入
net user admin$
,效果同上。
- 检查方法二:Win+R,输入
regedit
打开注册表编辑器,访问
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users
,访问注册表权限不够要设置可读权限,设置好权限后点击查看-刷新
即可查看到users目录
查看注册表对应的键值
克隆账号跟超级管理员的F注册表通常是一样的,说明也是属于超级管理员组的
- 处理方法:删除注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\ 下对应帐户的键值即可(两处)
- 另外:也可以借助d盾 https://www.d99net.net/
查看是否存在克隆账号,要注意用管理员权限启动d盾和注册表权限问题
1.1.4 在线用户
检查除了自己外,是否还有其他人连接到服务器。
- 检查方法一:如下命令进行查询。
cmd,输入
quser
cmd,输入query user
cmd,输入query session
- 检查方法二:任务管理器中用“用户”功能模块。
- 处理方法:禁用或删除对应的账户
1.1.5 登录日志
- 检查方法:
- win+R,输入
eventvwr.msc
,打开事件管理器- Windows日志 -> 安全 -> 将所以事件另存为Security.evtx导出到c盘根目录下,并在该目录下启动cmd(方便命令执行)
- 利用Log Parser进行分析
Log Parser https://www.microsoft.com/en-us/download/details.aspx?id=24659,下载安装完成后(默认路径安装),添加到环境变量
查询成功登录的所有事件:cmd,输入LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM Security.evtx where EventID=4624"
指定登录时间范围的事件:cmd,输入Logparser.exe -i:EVT –o:DATAGRID "SELECT * FROM Security.evtx where TimeGenerated>'2025-03-05 23:32:11' and TimeGenerated<'2025-03-06 23:34:00' and EventID=4624"
提取登录成功的⽤户名和IP:cmd,输入LogParser.exe -i:EVT -o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM Security.evtx where EventID=4624"
。这里如果得到了对方的主机名,可以使用cmd,输入ping 主机名 -4
获取到对方的ip地址
还有一些常用的命令
查询登录失败的所有事件:LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM Security.evtx where EventID=4625"
提取登录失败⽤户名进⾏聚合统计:LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,EXTRACT_TOKEN(Message,19,' ') as user,count(EXTRACT_TOKEN(Message,19,' ')) as Times,EXTRACT_TOKEN(Message,39,' ') as Loginip FROM Security.evtx where EventID=4625 GROUP BY Message"
系统历史开关机记录(注意这条命令审计的是系统日志):LogParser.exe -i:EVT –o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM System.evtx where EventID=6005 or EventID=6006"
关于Windows系统日志分析
- 日志分析前必做的几个设置
- 建议将应⽤程序⽇志、系统⽇志、安全⽇志的属性做如下设置,日志满时将其存档,不覆盖事件
- 设置审核策略
gpedit.msc —>Windows设置—>安全设置—>本地策略—>审核策略
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发⽣的事件。⽤户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有以下三类日志记录系统事件:应⽤程序日志、系统日志和安全日志。
1.应⽤程序日志
包含由应⽤程序或系统程序记录的事件,主要记录程序运⾏⽅⾯的事件,例如数据库程序可以在应⽤程序⽇志中记录⽂件错误,程序开发⼈员可以⾃⾏决定监视哪些事件。如果某个应⽤程序出现崩溃情况,那么我们可以从程序事件⽇志中找到相应的记录,也许会有助于你解决问题。
⽇志的默认位置为:C:\Windows\System32\winevt\Logs\Application.evtx
2.系统日志
Windows系统组件产⽣的事件,主要包括驱动程序、系统组件、应⽤程序错误消息等。
日志的默认位置为:C:\Windows\System32\winevt\Logs\System.evtx
3.安全日志(这个查看比较多)
主要记录系统的安全信息,包括成功的登录、退出,不成功的登录,系统⽂件的创建、删除、更改,需要指明的是安全⽇志只有系统管理员才可以访问,这也体现了在⼤型系统中安全的重要性。
日志的默认位置为:C:\Windows\System32\winevt\Logs\Security.evtx
系统和应⽤程序⽇志存储着故障排除信息,对于系统管理员更为有⽤。 安全⽇志记录着事件审计信息,包括⽤户验证(登录、远程访问等)和特定⽤户在认证后对系统做了什么,对于调查⼈员⽽⾔,更有帮助。
Windows系统内置三个核⼼日志⽂件:System、Security、Application,默认大小均为20480kB也就是20MB,记录数据超过20MB时会覆盖过期的日志记录;其他的应⽤程序以及服务日志默认⼤⼩均为1MB,超过这个大小⼀样的处理⽅法。
- 事件类型
Windows事件⽇志共有5种类型,所有的事件类型必须是这5种的其中⼀种,⽽且只能是⼀种。
这五类事件中最重要的是成功审核(Success Audit),所有系统登录成功都会被标记为成功审核。每个成功登录事件都会标记⼀个登录类型。
登录类型2:交互式登录(Interactive): 就是指⽤户在计算机的控制台上进⾏的登录,也就是在本地键盘上进⾏的登录。
登录类型3:⽹络(Network): 最常⻅的是访问⽹络共享⽂件夹或打印机。另外⼤多数情况下通过⽹络登录IIS时也被记为这种类型,但基本验证⽅式的IIS登录是个例外,它将被记为类型8。
登录类型4:批处理(Batch) :当Windows运⾏⼀个计划任务时,“计划任务服务”将为这个任务⾸先创建⼀个新的登录会话以便它能在此计划任务所配置的⽤户账户下运⾏,当这种登录出现时,Windows在⽇志中记为类型4,对于其它类型的⼯作任务系统,依赖于它的设计,也可以在开始⼯作时产⽣类型4的登录事件,类型4登录通常表明某计划任务启动,但也可能是⼀个恶意⽤户通过计划任务来猜测⽤户密码,这种尝试将产⽣⼀个类型4的登录失败事件,但是这种失败登录也可能是由于计划任务的⽤户密码没能同步更改造成的,⽐如⽤户密码更改了,⽽忘记了在计划任务中进⾏更改。
登录类型5:服务(Service) :与计划任务类似,每种服务都被配置在某个特定的⽤户账户下运⾏,当⼀个服务开始时,Windows⾸先为这个特定的⽤户创建⼀个登录会话,这将被记为类型5,失败的类型5通常表明⽤户的密码已变⽽这⾥没得到更新。
登录类型7:解锁(Unlock) :很多公司都有这样的安全设置:当⽤户离开屏幕⼀段时间后,屏保程序会锁定计算机屏幕。解开屏幕锁定需要键⼊⽤户名和密码。此时产⽣的⽇志类型就是Type 7。
登录类型8:⽹络明⽂(NetworkCleartext) :通常发⽣在IIS 的 ASP登录。不推荐。
登录类型9:新凭证(NewCredentials) :通常发⽣在RunAS⽅式运⾏某程序时的登录验证。
登录类型10:远程交互(RemoteInteractive) :通过终端服务、远程桌⾯或远程协助访问计算机时,Windows将记为类型10,以便与真正的控制台登录相区别,注意XP之前的版本不⽀持这种登录类型,⽐如Windows2000仍然会把终端服务登录记为类型2。
登录类型11:缓存交互(CachedInteractive) :在⾃⼰⽹络之外以域⽤户登录⽽⽆法登录域控制器时使⽤缓存登录。默认情况下,Windows缓存了最近10次交互式域登录的凭证HASH,如果以后当你以⼀个域⽤户登录⽽⼜没有域控制器可⽤时,Windows将使⽤这些HASH来验证你的身份。
- 常⻅的事件ID对应表
其中常用的是
举例1:筛选4720 看到被创建的隐藏账号
举例2:筛选4625 找到⼤量的失败的登录⽇志 有可能被暴⼒破解
windows安全事件查看及安全事件id汇总 https://blog.csdn.net/qq_45825991/article/details/115577680
如何查找事件id?
控制⾯板-管理⼯具-事件查看器-Windows日志-安全-筛选当前日志-输入事件id
1.2 端口和进程
可能存在一些还在运行中的后门程序,方便快速定位。
1.2.1 检查端口情况
检查端口连接,是否有远程连接、可疑连接等
- 检查方法:
- cmd,输入
netstat -ano
查看目前的网络连接、本地端口等情况,定位可疑的ESTABLISHED、LISTENING和TIME_WAIT进程pid。
LISTENING 服务启动后⾸先处于侦听
ESTABLISHED 建⽴连接。表示两台机器正在通信。
CLOSE_WAIT 对⽅主动关闭连接或者⽹络异常导致连接中断,这时我⽅的状态会变成CLOSE_WAIT,此时我⽅要调⽤close()来使得连接正确关闭
TIME_WAIT 我⽅主动调⽤close()断开连接,收到对⽅确认后状态变为TIME_WAIT
另外:
cmd,输入netstat -anob
查看每个pid对应的进程名称,需要管理员权限才能执行
cmd,输入tasklist /svc
显示每个进程的进程名pid以及显示每个进程中主持的服务。- 根据查询到的pid定位到进程cmd,输入
tasklist | findstr "5080"
- 根据查询到的建立连接的IP,可以去微步https://x.threatbook.com/上查一下是否为已知C2服务器(命令与控制服务器)
1.2.2 检查异常进程
- 检查方法一:任务管理器-进程
- 检查方法二:cmd,输入
msinfo32.exe
,点击 “软件环境” -> “正在运行任务”
- 检查方法三:使用Process Explorer
Process Explorer https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer#download
- 检查方法四:
cmd,输入
wmic process get caption,commandline /value
在windows下查看所有运行程序(或进程)的命令行参数
cmd,输入wmic process where caption="chrome.exe" get caption,commandline /value
查询某一个进程的命令行参数
1.2.3 检查进程关联文件
- 检查方法一:
在Process Explorer中打开如下选项,即可查看到进程关联的文件、注册表等,实现类似linux中
lsof -p <pid>
的效果。
假如此时通过powershell打开Eula.txt,可成功看到powershell进程关联到的Eula.txt文件
- 检查方法二:
cmd,输入
tasklist /m
可以通过输⼊这条命令查看进程加载了哪些dll
cmd,输入tasklist /m ntdll.dll
如果有怀疑的dll,可以通过这条命令查看调⽤ntdll.dll模块的进程都有哪些
1.2.4 如何快速定位恶意进程?
- 没有签名验证信息的进程(D盾-工具-进程)
- 没有描述信息的进程(D盾-工具-进程)
- 进程的属主(ProcessExplorer)
- 进程的路径是否合法(ProcessExplorer)
- CPU或内存资源占用长时间过高的进程(任务管理器)
- 攻击时间段内启动、被修改过的进程(LastActivityView)
1.2.5 如何速定位进程目录?
- 任务管理器的进程栏,直接右键,点击“打开文件所在的位置”
- msinfo32可以直接看进程对应的路径。cmd,输入
msinfo32.exe
-软件环境-正在运行的任务
1.2.6 KILL进程
一般乙方只负责排查出报告,不负责后续的清理,如果一定要清理必须要在客户有明确的说明的情况下再去清理。最好是有文字留档,避免背锅。
- 命令行:
taskkill /F /PID <进程ID>
taskkill /F /IM <进程名,可以用*表示通配符>
- 图形化:
选中进程,右键选择Kill就可以
1.3 开机启动项、计划任务、服务、防火墙
1.3.1 开机启动项
- 检查方法一:启动目录
操作系统中的启动菜单,该目录下的文件可以随着用户登录系统自启动
文件管理器-C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Win+R,输入shell:startup
- 检查方法二:任务管理器-启动
- 检查方法三:注册表启动
Windows+r,输入
regedit
打开注册表编辑器
HKEY_CURRENT_USER\software\micorsoft\windows\currentversion\run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
观察右侧是否有启动异常的项目,这里数值数据写入后门文件地址,后门软件即可随着用户登录系统自启动
HKEY_CURRENT_USER\Environment\
是否存在UserInitMprLogonScript参数(Logon Scripts 后门);
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
的Userinit的参数值是否有除userinit.exe外的其他程序(userinit后门);
如有请删除,并建议安装杀毒软件进行病毒查杀,清除残留病毒或木马。
- 检查方法四:组策略编辑器下的脚本文件
cmd输入,
gpedit.msc
点击显示文件会自动跳转到 C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
点击显示文件会自动跳转到 C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
点击显示文件会自动跳转到 C:\Windows\System32\GroupPolicy\User\Scripts\Logon
点击显示文件会自动跳转到 C:\Windows\System32\GroupPolicy\User\Scripts\Logon
1.3.2 计划任务
- 检查方法一:任务执行计划程序库
cmd,输入
taskschd.msc
打开任务计划程序库-查看属性,检测是否存在可疑的任务
- 检查方法二:命令行
cmd,输入
schtasks
,效果同上
1.3.3 服务
- 检查方法:cmd,输入
services.msc
,注意服务状态和启动类型,检查是否有异常服务。
木马和后门程序如果存在,都会在这个界面中有所体现,随系统启动而启动
1.3.4 防火墙
- 检查方法:
确认防火墙开关状态。
打开【Windows防⽕墙】窗⼝,单击【⾼级设置】,然后选择【⼊站规则】或【出站规则】可查看防⽕墙的⼊站规则或出站规则。入站表示从外部访问内部。
1.4 系统信息
1.4.1 近期活动
- 检查方法:使用工具LastActivityView
LastActivityView是一款适用于Windows操作系统的工具,它从运行系统的各种来源收集信息,并显示用户的操作日志以及这台计算机上发生的事件。LastActivityView所显示的活动包括:运行.exe文件、打开打开/保存对话框、从资源管理器或其他软件打开文件/文件夹、软件安装、系统关机/启动、应用程序或系统崩溃、网络连接/断开等等。
https://www.nirsoft.net/utils/computer_activity_view.html
记得下载语言文件并放入到文件夹中
1.4.2 可疑目录和文件
注意:检查前先开启隐藏文件和文件后缀
- 检查方法:
- 文件管理器-
%UserProfile%\Recent
,打开最近操作过的文件,对可疑的⽂件进⾏分析,也可以丢到在线检测分析平台。- 文件管理器-%TMP%、文件管理器-%TEMP%、文件管理器-C:\Windows\Temp,可以打开临时文件目录,对可疑的⽂件进⾏分析,也可以丢到在线检测分析平台。
- 文件管理器-%WINDIR%、文件管理器-%WINDIR%\System32、文件管理器-%LOCALAPPDATA%,对可疑的⽂件进⾏分析,也可以丢到在线检测分析平台。
- 用户目录,如C:\Users、C:\Users\Public,系统创建⽤户以及账号登录的时候,会在c:\users⽬录下留痕,对可疑的⽂件进⾏分析,也可以丢到在线检测分析平台。
- 回收站、文件管理器-%SystemDrive%$Recycle.Bin,对可疑的⽂件进⾏分析,也可以丢到在线检测分析平台。浏览器下载目录、浏览器历史记录。
- 修改时间在创建时间之前的为可疑文件,或者近期更新过的文件。
- ADS隐藏后门
当看到运行进程中调用的文件名包含:
,或者dir /r
看到的文件列表中包含:
,类似test.txt:1.vbs
时,可考虑此后门,直接删除test.txt即可
1.4.3 异常流量
- 检查方法:
icmp or dns
# wireshark
后门不一定会是TCP的,可能是走的其他协议比如DNS后门
1.4.4 系统补丁
- 检查方法:cmd,输入
systeminfo
,将结果复制到提权辅助页,查看是否有相应可用的漏洞
提权辅助页
http://bypass.tidesec.com/exp/
1.5 自动化查杀
1.5.1 病毒查杀
- 检查方法:下载安全软件,更新最新病毒库,进行全盘扫描。
1.5.2 杀毒软件推荐
- 卡巴斯基:http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe (推荐理由:绿色版、最新病毒库)
- 大蜘蛛:http://free.drweb.ru/download+cureit+free (推荐理由:扫描快、一次下载只能用1周,更新病毒库)
- 火绒安全软件:https://www.huorong.cn (推荐理由:如果用火绒就一定要用联网控制的功能,虽然很烦,但是很好用
- 360杀毒:http://sd.360.cn/download_center.html
1.5.3 在线病毒扫描(在线检测分析平台)
- https://x.threatbook.cn/ // 微步在线
- https://www.virustotal.com/gui/ // 老牌查杀
- http://www.virscan.org //多引擎在线病毒扫描网 v1.02,当前支持 41 款杀毒引擎
- https://habo.qq.com //腾讯哈勃分析系统
- https://virusscan.jotti.org //Jotti恶意软件扫描系统
- http://www.scanvir.com //针对计算机病毒、手机病毒、可疑文件等进行检测分析
另外
一些特殊情况,比如使用了msf的migrate迁移到内存了,可能手动什么也查不出来,所以还是建议安装杀软做一次扫描,尽可能保证内存的安全。
扫描后,成功发现恶意的内存:
- 不要盲目信任杀软的处理,经测试火绒处理了权限还是在
- 如果被加载了恶意的内存,最好的办法是在备份进程内存后重启进程(不需要取证分析的话可以不备份)
1.6 推荐的辅助工具
上面每一项都太杂了,而且比如伪装成一样的进程名可能也不太方便判断,那么是否有什么工具集成了这些功能,能够辅助看,然后再去查漏补缺呢?当然有,如下:
- Autoruns
Autoruns for Windows是Mark Russinovich和Bryce Cogswell开发的一款软件,它能用于显示在 Windows启动或登录时自动运行的程序,并且允许用户有选择地禁用或删除它们,例如那些在“启动”文件夹和注册表相关键中的程序。此外,Autoruns还可以修改包括:Windows资源管理器的Shell扩展(如右键弹出菜单)、IE浏览器插件(如工具栏扩展)、系统服务和设备驱动程序、计划任务等多种不同的自启动程序。
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns
- 火绒剑
火绒剑是火绒安全软件里的高级工具,也是一款用于分析、处理恶意程序的安全工具软件,适用于Windows系统的安全分析辅助工具,具有系统动作监控、文件管理、进程管理、启动项管理、注册表管理、服务管理、驱动模块、网络管理、系统内核查看、钩子扫描等功能。后面改名成了安全分析工具,在火绒的安全工具最下面。
下载地址:https://www.huorong.cn/person6.html(官网先下载安装火绒,然后去安全工具中找到 安全分析工具,一般客户有安装火绒的情况下建议用,或者安装后把它和依赖dll提取出来放到U盘,还是推荐用autoruns
- OpenArk
OpenArk是一款Windows平台上的开源Ark工具. Ark是Anti-Rootkit(对抗恶意程序)的简写, OpenArk目标成为逆向工程师、编程人员的工具,同时也能为那些希望清理恶意软件的用户服务。以后也将会支持更多功能和命令。
下载地址:https://github.com/BlackINT3/OpenArk/releases/latest
2. Linux入侵排查
2.1 账号
2.1.1 前置
- 查看系统所有⽤户信息
cat /etc/passwd
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的 shell
Linux用户登录的过程:
- ⾸先在/etc/passwd⽂件中查找是否有你的账号,如果没有则⽆法登录,如果有的话将该⽤户的UID和GID读出来,此外将此⽤户的shell设置也⼀并读出。
- 然后根据UID到/etc/shadow⽂件中去寻找相应⽤户的密码,如果匹配⼀致
- 进⼊shell控制的阶段。
要注意,无密码的用户只允许本机登陆,不允许远程登陆
- 查看可登录的账号
cat /etc/passwd | grep "/bin/bash"
- 关于影子文件
sudo cat /etc/shadow
/etc/shadow⽂件,⽤于存储Linux系统中⽤户的密码信息,⼜称为“影⼦⽂件”。
/etc/shadow⽂件只有root⽤户拥有读权限,其他⽤户没有任何权限,这样就保证了⽤户密码的安全性。
同 /etc/passwd ⽂件⼀样,⽂件中每⾏代表⼀个⽤户,同样使⽤ “:” 作为分隔符,不同之处在于,每⾏⽤户信息被划分为 9 个字段。每个字段的含义如下:
⽤户名:加密密码:最后⼀次修改时间:最⼩修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过
期后的宽限时间:账号失效时间:保留字段
- 查看当前⽤户的登录情况
who
tty表示本地登陆 pts表示远程登录
- 显示目前登录到系统的用户
w
USER:表示登录系统的用户名
TTY:表示用户使用的TTY名称
FROM:表示用户从哪里登录来(一般显示远程登录主机的IP地址或主机名)
LOGIN@:表示用户登录的时期和时间
IDLE:表示某个程序上次从终端开始执行到现在持续的时间
JCPU:表示该终端上的所有进程及子进程使用系统的总时间
PCPU:表示当前活动进程使用的系统时间
WHAT:表示当前用户执行的进程名称和选项
- 查看系统已开机运行了多长时间、当前登录用户数,系统负载的平均值
uptime
grep "model name" /proc/cpuinfo | wc -l
这个命令可以查看服务器CPU的核心数.
2.1.2 是否为弱口令
- 检查方法:询问管理员
- 检查空口令用户:执行命令
sudo awk -F: 'length($2)==0 {print $1}' /etc/shadow
2.1.3 是否有可疑账号
- 检查方法:执行命令
cat /etc/passwd
2.1.4 查询特权用户(uid=0)
- 检查方法:执行命令
sudo awk -F: '$3==0{print $1}' /etc/passwd
2.1.5 查询可以远程登录的账号
- 检查方法:执行命令
sudo awk '/\$1|\$6/{print $1}' /etc/shadow
2.1.6 其他账号是否拥有sudo权限
如非管理需要,普通帐号应删除sudo权限
- 检查方法:执行命令
sudo cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
2.1.7 公私钥免密登陆
- 检查方法:执行命令
sudo cat /root/.ssh/authorized_keys
查看/root/.ssh/authorized_keys是否被修改?
2.1.8 登陆日志
- 注意:使用 ssh root@ip whoami这种执行命令的,是没有登陆日志的。
- 检查方法:
执行命令:
last
和lastlog
(不建议,ssh -T root@127.0.0.1 /bin/bash -i
可以隐藏记录)
执行命令:sudo cat /var/log/secure | grep -E "Accepted|Failed"
(建议)
查看⽤户错误的登录信息
执行命令:lastb
可查看显示⽤户错误的登录列表 包括错误的登录⽅法 、ip地址 、时间等。
2.2 历史命令
history
⽤来查阅输⼊的历史命令,攻击者可以可以通过history -c
来清除记录
如何让
history
命令显示的历史命令记录带有时间戳?
vi /etc/profile
、将下列内容写入这个文件并保存 HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S `whoami` "
刷新环境变量source /etc/profile
再次进入/bin/bash下的history
命令,即带有时间戳。
- 检查方法:执行命令
cat /root/.bash_history
、cat /home/$USER/.bash_history
,假如被清楚后可以在这两个文件内查看是否存在可疑的命令操作
2.3 端口和进程
2.3.1 检查是否有异常连接的端口
- 检查方法:
执行命令
netstat -antlp | more
,根据查询到的建立连接的IP,可以去微步上查一下是否为C2?
根据获取到的pid执行ls -l /proc/$ PID/exe
或file /proc/$ PID/exe
($PID为对应的pid号),看一下路径。
也可通过lsof -i:port
来查看所有打开指定端口的进程,根据查询到的建立连接的IP,可以去微步上查一下是否为已知C2
关闭未知连接kill -9 pid
即可关闭
2.3.2 检查异常进程
注意事项
- 注意有没有命名奇怪的进程,如以.xxx开头的进程
- 注意有没有CPU占用比较高的进程。
top
命令是linux下常⽤的内存分析管理⼯具,能够实时显示系统中各个进程的资源的占⽤状况,类似于windows的任务管理器(在显示结果内按c或m可以优先查看cpu占用比高和内存占用比高的进程)
- kill -9 PID后是否重启复活
- 命名为[xxx]的不一定都是正常的,比如[ksoftirqd/0],可能是被种到内核了,可以用
lsof
来辅助分析
- 检查方法:
- 执行命令
ps -auxwww
(列出所有正在运行的进程,包括完整命令。常规,针对可见的进程) - 使用工具unhide(针对隐藏的进程,如使用工具libprocesshider进行隐藏)
lsof -p PID
可以看到pid对应进程,文件的完整路径和连接状态,lsof -u user
可以看到user用户的所有进程
2.4 开机启动项、计划任务、服务
2.4.1 开机启动项
- 系统运行级别示意图:
查看运行级别命令runlevel
,系统默认允许级别在下列配置文件内:
vi /etc/inittab
id=3:initdefault #系统开机后直接进入哪个运行级别
- 开机启动项配置文件:
/etc/rc.local
/etc/rc.d/rc[0~6].d
当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d
目录下,然后在/etc/rc.d/rc*.d
文件中建立软链接即可。(此中的 * 代表0,1,2,3,4,5,6[0~6]这七个等级)
举例:
ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此处sshd是具体服务的脚本文件,S100ssh是其软链接,S开头代表加载时自启动;如果是K开头的脚本文件,代表加载时需要关闭的。
- 检查方法:检查启动项文件
ls -al /etc/rc.local
和ls -al /etc/rc.d/rc[0~6].d/*
2.4.2 计划任务
- 利用crontab创建计划任务
crontab -l
列出当前用户cron服务的详细内容
Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
crontab -r
删除当前用户cront任务(谨慎:删除所有的计划任务)
crontab -e
使用编辑器编辑当前的crontab文件
- 利用anacron命令实现异步定时任务调度
每天运行 /home/backup.sh 脚本:
vi /etc/anacrontab
@daily 10 example.daily /bin/bash /home/backup.sh
当机器在backup.sh期望被运行时是关机的,anacron会在机器开机十分钟之后运行它,而不用再等待7天。
- 检查方法:检查如下目录的内容中,是否包含恶意的脚本
more /var/spool/cron/*
/var/spool/anacron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab - 检查方法补充:
crontab -l
查看当前用户的计划任务
crontab -u root -l
查看指定⽤户的计划⽤户
ls /etc/cron*
使⽤利⽤正则表表达式的*筛选出/etc⽬录下所有以cron开头的⽂件
反解cron表达式
https://crontab.guru/
https://qqe2.com/dev/cron
2.4.3 服务
- 检查方法:
查看服务自启动状态,执行命令
systemctl list-unit-files --type service
查看服务的状态
service --status-all
3.关闭和启动服务
sudo systemctl stop xxx.service
//停⽌服务
sudo systemctl start xxx.service
//启动服务
sudo systemctl disable xxx.service
//禁⽌服务开机启动
sudo systemctl enable xxx.service
//开机启动服务
2.5 系统信息
2.5.1 可疑的目录和文件
- 检查方法:
- 检查敏感目录,如/tmp、/var/tmp、/usr/tmp、/usr/bin等,上述目录经常作为恶意软件的下载⽬录及关键⽂件被替换的⽬录。~/.ssh和/etc/ssh也经常作为⼀些后⻔配置的路径,需要重点检测。
- 使用find查找最近修改过的文件
# 查找60分钟内内容修改的文件
find ./ -name '*' -mmin -60 # +60表示60分钟之前修改过的
# 查找24小时内内容修改的文件
find ./ -name "*" -mtime 0
# 查找48小时内状态修改的文件
find ./ -ctime -2
# 查找 2022-10-24 - 2022-11-26 间修改过的文件
find ./ -type f -newermt 2022-10-24 ! -newermt 2022-11-26
-amin n 查找n分钟以前被访问过的所有文件。
-atime n 查找n天以前被访问过的所有文件。
-cmin n 查找n分钟以前文件状态被修改过的所有文件。
-ctime n 查找n天以前文件状态被修改过的所有文件。
-mmin n 查找n分钟以前文件内容被修改过的所有文件。
-mtime n 查找n天以前文件内容被修改过的所有文件。
-print:将搜索结果输出到标准输出。 #
- 使用find查找指定时间段内修改的文件
touch -t 10301500 file1 #10.30 15:00
touch -t 10301600 file2 #10.30 16:00
stat file1
stat file2
find ./ -newer file1 ! -newer file2 # 列出比file新但是比file2旧的文件
- 使用find查找特殊权限的文件
find / -name ".*" -perm 4777 #防止suid提权
find / -perm /4000 #防止suid提权
find / -uid 1001 #找出uid为1001的用户的文件
- 查找首字符为.的隐藏文件,如果rm -rf不能删除,可能是使用chattr +i锁定了,只需要chattr -i文件然后rm -rf删除即可
find ./ -name ".*" #当前目录的隐藏文件
在Linux中,使⽤chattr命令来防⽌root和其他管理⽤户误删除和修改重要⽂件及⽬录,此权限⽤ls -l是查看不出来的,从⽽达到隐藏权限的⽬的。
chattr +i webshell.php
锁定⽂件
chattr -i webshell.php
解除锁定
lsattr webshell.php
属性查看
rm -rf webshell.php
删除⽂件
- 可疑文件可能被touch命令修改过文件时间来混淆,可用stat命令来确认。
2.5.2 系统环境变量
分析有无敏感可疑信息
echo $PATH
set
cat ~/.bashrc
2.5.3 命令被替换排查
- 通常被替换的程序有login、ls、ps、ifconfig、du、find、netstat、ss等。执行一些命令参数,查看程序是否被替换。
- 按时间排序查看二进制命令目录列表,查看是否有修改的痕迹
ls -alt /bin/ | head -n 10
ls -alt /usr/bin | head -n 10
2.5.4 异常流量
后门不一定会是TCP的,可能是走的其他协议比如DNS后门。
# 捕获DNS和ICMP的流量
tcpdump -i eth0 'icmp or (udp port 53)'
2.6 自动化查杀
2.6.1 Rootkit查杀
- chkrootkit 网址:http://www.chkrootkit.org
# 使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
#编译完成没有报错的话执行检查
./chkrootkit
- rkhunter 网址:http://rkhunter.sourceforge.net
# 使用方法:
wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zxvf rkhunter-1.4.4.tar.gz
cd rkhunter-1.4.4
./installer.sh --install
rkhunter -c
2.6.2 病毒查杀
- Clamav 网址:http://www.clamav.net/download.html
安装方式1:
#安装 zlib:
wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz
tar -zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
#安装一下gcc编译环境: yum install gcc
CFLAGS="-O3 -fPIC" ./configure --prefix= /usr/local/zlib/
make && make install
#2、添加用户组 clamav 和组成员 clamav:
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
#3、安装 Clamav
tar –zxvf clamav-0.97.6.tar.gz
cd clamav-0.97.6
./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
make
make install
#4、配置 Clamav
mkdir /opt/clamav/logs
mkdir /opt/clamav/updata
touch /opt/clamav/logs/freshclam.log
touch /opt/clamav/logs/clamd.log
cd /opt/clamav/logs
chown clamav:clamav clamd.log
chown clamav:clamav freshclam.log
#5、ClamAV 使用:
/opt/clamav/bin/freshclam 升级病毒库
./clamscan –h 查看相应的帮助信息
./clamscan -r /home 扫描所有用户的主目录就使用
./clamscan -r --bell -i /bin 扫描bin目录并且显示有问题的文件的扫描结果
安装方式2:
#安装
yum install -y clamav
#更新病毒库
freshclam
#扫描方法
clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
#扫描并杀毒
clamscan -r --remove /usr/bin/bsd-port
clamscan -r --remove /usr/bin/
clamscan -r --remove /usr/local/zabbix/sbin
#查看日志发现
cat /root/usrclamav.log |grep FOUND
2.6.3 RPM check 检查(不适用Ubuntu)
系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看哪些命令是否被替换了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查。
./rpm -Va > rpm.log
如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。
验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验是否改变(可以看成文件内容是否改变)
D 设备中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
如果命令被替换了,如果还原回来:
文件提取还原案例:
rpm -qf /bin/ls 查询 ls 命令属于哪个软件包
mv /bin/ls /tmp 先把 ls 转移到 tmp 目录下,造成 ls 命令丢失的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取 rpm 包中 ls 命令到当前目录的 /bin/ls 下
cp /root/bin/ls /bin/ 把 ls 命令复制到 /bin/ 目录 修复文件丢失
2.7 Github优秀脚本
- https://github.com/al0ne/LinuxCheck(一个linux信息搜集小脚本 主要用于应急响应,在Debian或Centos下都可使用)
- https://github.com/grayddq/GScan(本程序旨在为安全应急响应人员对Linux主机排查时提供便利,实现主机侧Checklist的自动全面化检测,根据检测结果自动数据聚合,进行黑客攻击路径溯源。)
3. Web入侵排查
3.1 Webshell排查
3.1 WEB日志
- 查看日志中是否存在可疑的可执行文件,如upload/aaa/ias.php、upload/index.jsp等
3.2 查找异常修改时间的文件
如果有安全设备更好,比如青藤云,可以直接分析时间段内落地的文件。
- Linux
参考2.5.1 - Windows
参考1.4.1、1.4.2
3.3 内存马
- 重启(暴力清除,而且可能无法提取内存马)
- arthas https://arthas.aliyun.com/doc/
- java-memshell-scanner https://github.com/c0ny1/java-memshell-scanner
- FindShell https://github.com/geekmc/FindShell?tab=readme-ov-file
- copagent https://github.com/LandGrey/copagent
3.4 文件对比
如果代码量太大的情况下,可以通过对比上个版本代码和现有代码的差异性,来确定修改过的文件
3.2 Webshell查杀工具
3.2.1 D盾_Web查杀
阿D出品,使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的 WebShell 后门行为。
兼容性:只提供 Windows 版本。
工具下载地址:http://www.d99net.net
3.2.2 河马
专注 WebShell 查杀研究,拥有海量 WebShell 样本和自主查杀技术,采用传统特征+云端大数据双引擎的查杀技术。查杀速度快、精度高、误报低。
兼容性:支持 Windows、Linux,支持在线查杀。
官方网站:https://www.shellpub.com
3.2.3 Web Shell Detector
Web Shell Detector 具有 WebShell 签名数据库,可帮助识别高达 99% 的 WebShell。
兼容性:提供 PHP、Python 脚本,可跨平台,在线检测。
官方网站:http://www.shelldetector.com
github项目地址:https://github.com/emposha/PHP-Shell-Detector
3.2.4 CloudWalker(牧云)
一个可执行的命令行版本 Webshell 检测工具。目前,项目已停止更新。
兼容性:提供 Linux版本,Windows 暂不支持。
在线查杀 demo:https://webshellchop.chaitin.cn
GitHub 项目地址:https://github.com/chaitin/cloudwalker
3.2.5 PHP Malware Finder
PHP-malware-finder 是一款优秀的检测webshell和恶意软件混淆代码的工具
兼容性:提供Linux 版本,Windows 暂不支持。
GitHub 项目地址:https://github.com/jvoisin/php-malware-finder
3.2.6 findWebshell
这个项目是一款基于 Python 开发的 WebShell 检查工具,可以根据特征码匹配检查任意类型的 WebShell 后门。
GitHub 项目地址:https://github.com/he1m4n6a/findWebshell