-
• 命令: systemctl list-unit-files --type=service --state=enabled
(systemd服务) +ls -la /etc/init.d/ /etc/rc*.d/
(SysV init脚本) +grep -rE "^(exec|script)" /etc/init/
(Upstart) +cat /etc/rc.local
(传统) -
• 解析: 覆盖主流Linux初始化系统的启动项检查点: -
• systemctl ...
:列出所有已启用的 (enabled
) systemd服务。 -
• ls -la /etc/init.d/ /etc/rc*.d/
:查看SysV init脚本目录及其在对应运行级别 (rcX.d/
) 的符号链接(S
开头表示启动)。 -
• grep ... /etc/init/
:检查Upstart job配置文件(如有)。 -
• cat /etc/rc.local
:查看传统的rc.local
启动脚本内容。
-
-
• 场景:Linux持久化检查核心。 查找通过服务、init脚本、 rc.local
实现自启动的可疑项。 -
• 注意: 根据系统使用的init系统( systemd
为主流)侧重检查。
-
52. 目标:检查Windows WMI事件订阅(高级持久化)(Windows PowerShell) -
• 命令: Get-WmiObject -Namespace rootSubscription -Class __EventFilter; Get-WmiObject -Namespace rootSubscription -Class __EventConsumer; Get-WmiObject -Namespace rootSubscription -Class __FilterToConsumerBinding
-
• 解析: 分别查询WMI事件订阅的三个核心组件: -
• __EventFilter
:定义触发事件的条件(如特定时间、进程创建、登录)。 -
• __EventConsumer
:定义事件触发后的动作(如执行命令、发送邮件、记录日志)。恶意利用主要是ActiveScriptEventConsumer
(执行脚本) 和CommandLineEventConsumer
(执行命令)。 -
• __FilterToConsumerBinding
:将过滤器 (Filter
) 和消费者 (Consumer
) 绑定起来。
-
-
• 场景: 检测利用WMI事件订阅实现的无文件、高隐蔽持久化。攻击者常用此技术在特定事件(如用户登录)时触发恶意代码执行。 -
• 注意: 需要管理员权限。输出较技术化,需仔细分析过滤器和消费者的具体内容。工具如 WMI Explorer
或Autoruns
可辅助可视化。
-
-
53. 目标:查找含有隐藏属性的文件(Windows)(Windows cmd) -
• 命令: dir /s /b /a:h C: 2>nul
(系统根目录) 或指定目录 -
• 解析: dir /s
(递归子目录)/b
(裸格式,只显示路径)/a:h
(只显示隐藏属性文件)C:
(搜索C盘根)2>nul
(隐藏错误)。可替换C:
为C:Users
或C:WindowsTemp
等。 -
• 场景: 攻击者常将恶意文件设置为隐藏属性 ( attrib +h
) 以躲避普通文件浏览。检查隐藏文件中是否有可疑项。 -
• 注意: 系统文件也常隐藏。需结合路径、文件名、大小判断。PowerShell可用 Get-ChildItem -Path C: -Force -Recurse -Hidden -ErrorAction SilentlyContinue
。
-
-
54. 目标:查找ADS(Alternate Data Streams - 文件流)(Windows cmd) -
• 命令: dir /s /r <目录路径> | find ":$DATA"
(例如dir /s /r C:Users > ads.txt & type ads.txt | find ":$DATA"
) -
• 解析: NTFS文件系统特性。恶意软件可将代码隐藏在文件流中。 -
• dir /s /r
:递归 (/s
) 并显示备用数据流 (/r
)。 -
• 输出重定向到文件 ( > ads.txt
) 避免滚动过快。 -
• find ":$DATA"
:在输出中查找包含:$DATA
的行(标识数据流)。
-
-
• 场景: 检测利用文件流隐藏的恶意代码或数据(如 notepad.exe:hidden.exe
)。查看流内容可用more < file.txt:streamname
。 -
• 注意: 合法程序(如IE下载)也使用ADS。检查非预期文件上的非预期流名。PowerShell专用工具更佳(如 Get-Item -Path file.txt -Stream *
)。
-
-
55. 目标:查找大文件(定位潜在数据驻留/外泄源)(Linux) -
• 命令: find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f -size +100M -exec ls -lhS {} + 2>/dev/null | head -n 20
-
• 解析: -
• find ... -size +100M
:查找大于100MB的文件(大小可调)。 -
• -exec ls -lhS {} +
:ls -lhS
(-l
长格式,-h
人类可读大小,-S
按文件大小降序排序)。 -
• head -n 20
:显示最大的20个文件。
-
-
• 场景: 查找异常的大文件,可能是: -
• 攻击者驻留的数据(如窃取的数据库dump、打包的日志文件)。 -
• 恶意软件本体(如挖矿程序、勒索软件加密模块)。 -
• 未清理的临时转储文件。
-
-
• 注意: 数据库文件、虚拟机磁盘、日志归档等合法文件通常较大。需结合位置和上下文判断。
-
-
56. 目标:查找0字节文件(可能为占位符或失败产物)(Linux) -
• 命令: find /tmp /var/tmp /dev/shm /home -type f -size 0 -exec ls -la {} + 2>/dev/null
-
• 解析: 在临时目录和用户目录下查找大小为0字节的文件 ( -size 0
),并列出详细信息。 -
• 场景: 0字节文件有时是攻击工具运行失败的残留物,或是用于测试文件创建权限的占位符。检查其创建时间、权限和父目录。 -
• 注意: 很多程序也会创建合法的0字节文件(如锁文件 .lock
)。非核心线索。
-
-
57. 目标:检查文件的数字签名(Windows - 识别未签名/无效签名)(Windows PowerShell) -
• 命令: Get-AuthenticodeSignature -FilePath "C:pathtofile.exe" | Format-List *
(单文件) 或Get-ChildItem -Path C:WindowsSystem32*.exe -Recurse -ErrorAction SilentlyContinue | Get-AuthenticodeSignature | Where-Object {$_.Status -ne "Valid"} | Select-Object Path, Status, StatusMessage | Format-Table -AutoSize
(扫描目录示例) -
• 解析: -
• Get-AuthenticodeSignature
:获取文件的Authenticode签名信息。 -
• Format-List *
:显示签名所有详细信息(单文件)。 -
• Where-Object {$_.Status -ne "Valid"}
:过滤出签名状态非Valid
的文件(如NotSigned
,HashMismatch
哈希不匹配可能被篡改,UnknownError
)。
-
-
• 场景:重要! 检查关键系统文件或可疑程序是否具有有效的、可信的数字签名。未签名或签名无效的文件风险较高。 -
• 注意: 合法软件也可能未签名(尤其是开源软件)。 System32
下的未签名/无效签名文件需高度警惕。Sigcheck
(Sysinternals) 功能更强大。
-
-
58. 目标:查找Linux文件扩展属性(xattr - 可能隐藏元数据)(Linux) -
• 命令: getfattr -d -m - /path/to/file
(单文件) 或find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f -exec getfattr -d -m - {} ; 2>/dev/null | grep -v "file:"
(全盘找有xattr的文件,输出非空结果) -
• 解析: getfattr
显示文件扩展属性。一些高级恶意软件可能利用xattr存储配置或标记。 -
• 场景: 检查敏感文件(如SSH密钥、配置文件)或可疑文件是否被设置了异常的扩展属性。 -
• 注意: 合法程序(如SELinux, Capabilities)也广泛使用xattr ( security.*
命名空间)。非主流攻击向量。
-
-
59. 目标:检查SSH授权密钥(authorized_keys - 后门账户)(Linux) -
• 命令: grep -vE '^#|^$' /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null
-
• 解析: 查看所有用户(包括root)的 authorized_keys
文件内容,排除空行和注释 (grep -vE '^#|^$'
)。 -
• 场景: 攻击者常添加自己的公钥到 authorized_keys
文件,实现免密SSH登录后门。检查是否有非预期的公钥条目(尤其注意root用户)。 -
• 注意: 确认每个条目的来源和合法性。查看密钥注释(如果有)。
-
-
60. 目标:检查最近访问过的文件(按atime - 需文件系统支持)(Linux) -
• 命令: find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f -atime -1 -print 2>/dev/null | head -n 100
(最近1天) -
• 解析: -atime -1
查找访问时间在最近1天内的文件。head -n 100
限制输出。 -
• 场景: 如果攻击者访问了敏感文件(如 /etc/shadow
, 数据库凭证文件),其访问时间 (atime
) 可能更新(需确保文件系统挂载时使用了relatime
或strictatime
,默认的noatime
会禁用)。 -
• 注意: atime
更新依赖文件系统配置,默认可能不启用或非实时更新。 可靠性较低,作为辅助线索。
-
第五部分:日志审计 - 挖掘攻击痕迹 (命令 61-75)
日志是事件重建的关键证据源。
-
61. 目标:实时监控系统认证日志(SSH登录尝试)(Linux - journald) -
• 命令: journalctl -f -u sshd | grep -E "Failed password|Accepted password"
-
• 解析: -
• journalctl -f -u sshd
:实时跟踪 (-f
)sshd
服务的日志 (-u sshd
)。 -
• grep -E "Failed password|Accepted password"
:过滤出包含认证失败 (Failed password
) 或认证成功 (Accepted password
) 的关键行。
-
-
• 场景:实时检测暴力破解SSH。 观察失败尝试的来源IP、用户名、频率;警惕成功的非授权登录。 -
• 注意: 对于 syslog
/rsyslog
系统,查看/var/log/auth.log
或/var/log/secure
并使用tail -f
。关注Accepted publickey
(密钥登录成功) 同样重要。
-
-
62. 目标:统计过去24小时SSH登录失败最多的IP (Linux - syslog) -
• 命令: grep "Failed password" /var/log/auth.log | grep
date -d '24 hours ago' '+%b %e'| awk '{print $11}' | sort | uniq -c | sort -nr | head -n 20
-
• 解析: -
• grep "Failed password" /var/log/auth.log
:提取所有失败记录。 -
• grep
date -d '24 hours ago' '+%b %e'``:过滤出包含昨天日期(格式如May 29
)的行(时间范围可调)。 -
• awk '{print $11}'
:提取来源IP(字段位置可能因日志格式而异,需验证!常见是$11
或$NF
)。 -
• sort | uniq -c | sort -nr
:统计每个IP的失败次数并降序排序。 -
• head -n 20
:显示前20名。
-
-
• 场景: 快速识别正在进行或刚结束的SSH暴力破解攻击源IP,用于封禁 ( iptables
,hosts.deny
) 或进一步调查。 -
• 注意:日志格式至关重要! 使用 awk '{print NR " " $0}' /var/log/auth.log | less
查看样例行,确认IP所在字段号 ($NF
常指最后一列)。日期过滤需匹配日志时间格式。
-
-
63. 目标:查找成功登录系统的用户及来源 (Linux) -
• 命令: grep "session opened" /var/log/auth.log* | grep -E "user=| for " | awk '{print $1, $2, $3, $11, $12, $13}' | sort | uniq
(简化版,需适配格式) -
• 命令 (更可靠): last -ai | awk 'NF>5 && $0 !~ /reboot|wtmp/ {print $1, $3, $NF}' | sort | uniq
(使用last
命令) -
• 解析: -
• last -ai
: 显示登录历史,-a
显示主机名/IP在最后一列,-i
显示IP数字格式。 -
• awk 'NF>5 && $0 !~ /reboot|wtmp/ {print $1, $3, $NF}'
:过滤掉行字段少于5的无效行 (NF>5
),排除reboot
和wtmp
记录,打印用户名 ($1
)、登录日期时间 ($3
)、来源IP ($NF
)。
-
-
• 场景: 检查是否有异常用户(如 test
,oracle
, 未知用户)或从非预期IP(如外国IP、内网非常用IP)成功登录系统。 -
• 注意: last
命令读取/var/log/wtmp
,攻击者可能篡改或清除该文件 (echo > /var/log/wtmp
)。检查文件完整性或结合其他日志源。
-
-
64. 目标:分析Web访问日志寻找攻击迹象(如SQLi, XSS, Webshell访问)(Linux) -
• 命令 (Apache/Nginx): tail -f /var/log/apache2/access.log | grep -E -i "union.*select|%27|%22|%3Cscript|.php?.*=php|cmd=|system(|passthru(|shell_exec(|wget |curl |base64_decode|/../|/etc/passwd"
-
• 解析: -
• tail -f
:实时跟踪日志。 -
• grep -E -i
:不区分大小写 (-i
) 匹配常见攻击特征的正则 (-E
):-
• SQL注入: union.*select
,%27
(单引号),%22
(双引号) -
• XSS: %3Cscript
(<script
) -
• Webshell访问/参数执行: .php?.*=php
,cmd=
,system(
,passthru(
,shell_exec(
-
• 文件下载/外联: wget
,curl
-
• Base64混淆: base64_decode
-
• 路径遍历: /../
-
• 敏感文件访问: /etc/passwd
-
-
-
• 场景:实时Web入侵检测。 快速发现针对Web应用的攻击尝试或已成功的攻击行为(通过访问特征识别)。 -
• 注意:模式库需持续更新和调整! 高误报率,需结合上下文(如响应状态码、访问频率、源IP)分析。可保存匹配项到单独文件 ( >> suspicious_access.log
)。
-
-
65. 目标:分析Web错误日志寻找漏洞利用成功迹象 (Linux) -
• 命令: grep -E -i "PHP Fatal error|PHP Warning|PHP Notice|ORA-[0-9]{5}|Stack trace|Exception|error 500|mod_security" /var/log/apache2/error.log*
-
• 解析: 查找包含应用程序级错误的日志行,这些错误可能表明攻击尝试成功触发了漏洞: -
• PHP错误: PHP Fatal error
,Warning
,Notice
-
• 数据库错误: ORA-[0-9]{5}
(Oracle),SQLSTATE
(其他) -
• 堆栈跟踪: Stack trace
,Exception
-
• HTTP 500错误: error 500
-
• WAF拦截: mod_security
(ModSecurity规则触发)
-
-
• 场景: 攻击者利用漏洞时可能触发应用程序错误或异常。这些日志是漏洞可能被成功利用的重要间接证据。 -
• 注意: 并非所有错误都代表被入侵,但需结合访问日志和上下文调查。
-
-
66. 目标:查询Windows安全事件日志(重点:登录、账号管理、进程创建)(Windows PowerShell) -
• 命令: Get-WinEvent -LogName Security -FilterXPath '((EventID=4624) or (EventID=4625) or (EventID=4688) or (EventID=4720) or (EventID=4722) or (EventID=4726) or (EventID=4732) or (EventID=1102))' -MaxEvents 100 | Format-List TimeCreated, Id, Message
-
• 解析: 使用 Get-WinEvent
查询安全日志 (-LogName Security
),通过XPath筛选关键事件ID (-FilterXPath
):-
• 4624
:登录成功 -
• 4625
:登录失败 -
• 4688
:创建新进程 (关键!) -
• 4720
:创建用户 -
• 4722
:启用用户 -
• 4726
:删除用户 -
• 4732
:将成员添加到启用安全的本地组 (如管理员组) -
• 1102
:审计日志已清除 (可疑!) -
• -MaxEvents 100
:获取最近100条(可调)。 -
• Format-List
:详细列出时间、ID、完整消息。
-
-
• 场景:Windows事件日志分析核心。 追踪用户登录、账号变更、进程执行(特别是 4688
记录的命令行)、日志清除等高危事件。 -
• 注意: 需要管理员权限。事件ID列表可根据需要扩展(如 4672
特权登录,4697
服务安装,5140
文件共享访问)。EventID=4688
需启用命令行审计策略。工具如Event Viewer
或Zimmerman Tools
更强大。
-
-
67. 目标:查找Windows日志中特定进程创建事件(如恶意进程)(Windows PowerShell) -
• 命令: Get-WinEvent -LogName Security -FilterXPath 'EventID=4688 and (EventData/Data[@Name="NewProcessName"]="C:pathtomalware.exe")' | Format-List *
-
• 解析: 在 4688
进程创建事件中,通过XPath精确过滤EventData
下Data
节点Name="NewProcessName"
的值等于特定路径 (C:pathtomalware.exe
) 的事件。 -
• 场景: 确认特定恶意程序是否被执行过,并查看其执行时间、父进程、用户等详细信息。 -
• 注意: 路径需精确或使用通配符 ( contains
或*
在XPath中受限)。可结合父进程ID (EventData/Data[@Name="ParentProcessName"]
) 或命令行 (EventData/Data[@Name="CommandLine"]
) 过滤。
-
-
68. 目标:检查Linux系统日志是否被轮转或清除(异常时间戳)(Linux) -
• 命令: ls -l /var/log/*.gz /var/log/*.1 /var/log/messages* /var/log/syslog* | sort -k 6,7
(按日期排序) +grep "log file rotated" /var/log/syslog
(查看轮转记录) -
• 解析: 查看日志文件(当前、轮转、压缩)的修改时间 ( ls -l ... | sort -k 6,7
),检查时间序列是否连续、是否有大段空白。同时查看syslog
中logrotate
的轮转记录 (grep "log file rotated"
),确认轮转操作是否在预期时间发生。 -
• 场景: 攻击者可能手动删除或轮转日志 ( logrotate -f
) 以擦除入侵痕迹。检查日志文件的时间线是否异常中断。 -
• 注意: 正常轮转也会删除旧日志。关注非计划时间的轮转或大量日志文件时间戳相同。
-
-
69. 目标:分析Linux内核日志(dmesg)寻找硬件/驱动异常或Rootkit痕迹(Linux) -
• 命令: dmesg -T -l err,crit,alert,emerg | tail -n 50
(带时间戳的错误及以上级别信息) 或dmesg | grep -i -E "error|warning|tainted|malware|inject|rootkit"
-
• 解析: dmesg
显示内核环形缓冲区消息。-T
显示可读时间戳(需要dmesg
支持)。-l
过滤日志级别。查找错误、内核污染标志 (tainted
)、提及恶意软件、注入、Rootkit等关键词。 -
• 场景: 检测底层异常,如硬件故障、驱动崩溃、内核模块 ( LKM
) Rootkit加载痕迹(尽管高级Rootkit会隐藏)、内存损坏等。 -
• 注意: 信息较底层,需一定内核知识解读。 /var/log/kern.log
保存持久化记录。
-
-
70. 目标:聚合分析多台主机日志(需集中日志环境 - ELK/Splunk/Graylog等) -
• 场景: 大型HW/真实事件中,攻击往往跨越多个系统。集中式日志管理平台(如ELK Stack, Splunk, Graylog)是必需品。 -
• 关键能力: -
• 关联分析: 跨主机追踪攻击者行为链(如A主机SSH登录 -> B主机SMB连接)。 -
• 仪表盘: 可视化关键指标(登录失败地图、TOP攻击IP、异常进程创建)。 -
• 告警: 基于规则实时触发(如检测到 mimikatz
命令行特征)。 -
• 搜索: 强大的查询语言(如KQL, SPL)快速定位事件。
-
-
• 非单机命令: 强调在HW准备阶段部署集中日志的重要性。应急时可快速登录平台进行高级查询。
-
-
71. 目标:解析Windows PowerShell操作日志(Module Logging/Transcript)(Windows) -
• 命令: Get-WinEvent -LogName "Windows PowerShell" -MaxEvents 50 | Where-Object {$_.Id -eq 4103 -or $_.Id -eq 4104} | Format-List Message
(Module Logging) 或Get-ChildItem $env:USERPROFILEDocumentsWindowsPowerShellTranscripts* -ErrorAction SilentlyContinue | Select-Object -Last 1 | Get-Content
(查看最近的Transcript) -
• 解析: -
• Module Logging (事件ID 4103
,4104
): 记录执行的PowerShell命令块。需预先启用策略。 -
• Transcripts: 会话记录文件。需预先启用策略,记录在 DocumentsWindowsPowerShellTranscripts
。
-
-
• 场景: 攻击者大量使用PowerShell。如果启用了日志记录,这是追踪其活动的宝贵证据,能看到执行的命令、脚本内容。 -
• 注意:默认不启用! HW前强烈建议在关键系统启用PowerShell Module Logging和Script Block Logging ( 4104
)。Transcripts可能被攻击者发现并删除。
-
-
72. 目标:检查Linux cron任务执行历史(syslog)(Linux) -
• 命令: grep -E "CRON|REPORT" /var/log/syslog | grep -v "pam_unix(cron:session): session opened"
(过滤常见噪音) -
• 解析: 在 syslog
中查找包含CRON
或REPORT
的行(cron守护进程日志),排除session opened
这类低信息量的记录。关注任务执行命令 (CMD
) 和输出。 -
• 场景: 确认可疑cron任务是否实际执行,查看其执行时的输出(如有错误或异常行为)。 -
• 注意: 日志中记录了任务执行的命令 ( CMD (....)
),是溯源关键。
-
-
73. 目标:查找Windows RDP登录成功/失败记录 (Windows PowerShell) -
• 命令: Get-WinEvent -LogName Security -FilterXPath '((EventID=4624) and (EventData/Data[@Name="LogonType"]="10")) or ((EventID=4625) and (EventData/Data[@Name="LogonType"]="10"))' | Format-List TimeCreated, Id, Message
-
• 解析: 在登录事件 ( 4624
/4625
) 中,通过LogonType=10
筛选出远程交互式登录(即RDP)。查看成功和失败的RDP连接尝试。 -
• 场景: RDP是攻击者横向移动和控制的常用途径。检测RDP爆破 ( 4625
) 和成功的非授权RDP登录 (4624
+ 异常用户/IP)。 -
• 注意: LogonType=3
是网络登录(如SMB共享),2
是交互式本地登录,也需关注。
-
-
74. 目标:检查Linux sudo命令执行历史 (Linux) -
• 命令: grep sudo /var/log/auth.log* | grep -v "session opened" | grep COMMAND
(常见格式) 或直接查看/var/log/sudo.log
(如果配置) -
• 解析: 查找 auth.log
中sudo
相关的记录,过滤掉session opened
,重点看包含COMMAND
的行,记录了哪些用户通过sudo
执行了什么命令。 -
• 场景: 追踪特权命令执行。检查是否有低权限用户或异常用户执行了高危 sudo
命令(如/bin/bash
,chmod
,wget
,useradd
)。 -
• 注意: 确保系统配置了 sudo
日志(通常默认在auth.log
)。
-
-
75. 目标:分析Windows Defender/AV日志(检测/隔离事件)(Windows PowerShell) -
• 命令: Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" | Where-Object {$_.Id -eq 1116 -or $_.Id -eq 1117} | Format-List TimeCreated, Id, Message
(查看检测/隔离事件) -
• 解析: 查询Windows Defender操作日志,事件ID 1116
(检测到威胁),1117
(已执行操作,如隔离、删除)。查看检测到的威胁名称、路径、操作结果。 -
• 场景: 确认系统自带的AV是否检测到了恶意活动,即使未能完全阻止。威胁名称 ( Threat Name
) 是重要情报。 -
• 注意: 第三方AV日志位置不同。日志可能被攻击者禁用或清除。
-
第六部分:内存取证 - 冻结攻击现场 (命令 76-85)
当磁盘取证不够时,内存是活的证据库。需要专用工具(如Volatility/Volatility3)。
-
76. 目标:获取Linux内存快照 (LiME) -
• 命令: insmod lime-<kernel-version>.ko "path=/tmp/memdump.lime format=lime"
(需提前编译匹配内核版本的LiME模块) -
• 场景: 在不关闭系统的情况下获取物理内存的完整转储。关键第一步! -
• 注意: 需提前准备。操作有风险(加载内核模块)。确保路径 ( /tmp
) 有足够空间。Windows 常用DumpIt.exe
或FTK Imager
。
-
-
77. 目标:列出Linux内存中的进程(Volatility3 - linux.pslist
)-
• 命令: vol -f /path/to/memdump.lime linux.pslist
-
• 解析: 使用Volatility3 ( vol
) 分析内存镜像 (-f
),运行linux.pslist
插件,列出内存中捕获到的进程列表(PID, PPID, 名称, 启动时间等)。 -
• 场景:发现隐藏进程! 对比 ps
输出,找出内核级Rootkit隐藏的进程(仅在内存中可见)。
-
-
78. 目标:检查Linux进程命令行参数(Volatility3 - linux.psaux
)-
• 命令: vol -f /path/to/memdump.lime linux.psaux
-
• 解析: 显示每个进程的完整命令行参数 ( argv[]
)。 -
• 场景: 查看可疑进程实际执行的命令和参数,即使磁盘上的文件已被删除或进程已结束。
-
-
79. 目标:列出Linux网络连接(Volatility3 - linux.netstat
)-
• 命令: vol -f /path/to/memdump.lime linux.netstat
-
• 解析: 显示内存中的网络连接状态(协议、本地地址/端口、远端地址/端口、状态、PID)。 -
• 场景: 发现 netstat
/ss
未显示的隐藏连接(如通过Rootkit隐藏的C2连接)。
-
-
80. 目标:查找Linux内存中的Bash命令历史(Volatility3 - linux.bash
)-
• 命令: vol -f /path/to/memdump.lime linux.bash
-
• 解析: 尝试从Bash进程的内存中恢复命令历史记录。 -
• 场景: 即使攻击者清空了 .bash_history
文件,仍可能在内存中残留其执行过的命令。重要溯源线索!
-
-
81. 目标:扫描Linux内存中的恶意代码特征(Yara规则)(Volatility3 - linux.yarascan
)-
• 命令: vol -f /path/to/memdump.lime linux.yarascan -Y "/path/to/malware_signatures.yar"
-
• 解析: 使用Yara规则 ( -Y
) 扫描整个内存或特定进程空间,匹配已知恶意软件的特征(字符串、字节模式)。 -
• 场景: 主动在内存中搜寻已知恶意软件家族或自定义后门的痕迹。
-
-
82. 目标:获取Windows内存快照(WinPMEM/DumpIt)(Windows cmd) -
• 命令: WinPMEM_v3.3.exe -l
(列出选项) 然后WinPMEM_v3.3.exe <output>.raw
(转储为RAW格式) 或直接运行DumpIt.exe
(简单易用) -
• 场景: Windows内存取证第一步。获取物理内存镜像。
-
-
83. 目标:列出Windows内存中的进程(Volatility3 - windows.pslist
)-
• 命令: vol -f /path/to/memdump.raw windows.pslist
-
• 解析/场景: 同Linux,发现隐藏进程。比较 windows.psscan
(更全面扫描) 和windows.pslist
的结果差异。
-
-
84. 目标:提取Windows内存中的进程可执行文件(Volatility3 - windows.dumpfiles
/windows.procdump
)-
• 命令 (DLL/EXE): vol -f /path/to/memdump.raw -o /path/to/output/dir windows.dumpfiles --pid <PID> --virtaddr <BaseVirtAddr>
或vol -f ... windows.procdump --pid <PID> -D /path/to/output/dir
-
• 解析: 从内存中将指定进程 ( --pid
) 的可执行体(PE文件)或特定内存映射文件 (--virtaddr
指定基址)转储到磁盘。 -
• 场景: 对内存中的恶意进程进行二进制提取,用于静态分析(反编译、HASH、字符串提取)或沙箱运行。
-
-
85. 目标:查找Windows内存中的敏感信息(密码、令牌、证书)(Volatility3 - windows.hashdump
,windows.certs
,windows.vault
)-
• 命令: -
• 密码HASH: vol -f ... windows.hashdump
-
• 证书: vol -f ... windows.certs
-
• 凭据保险库: vol -f ... windows.vault
-
-
• 场景: 尝试从LSASS进程内存、注册表缓存、凭据管理器内存中提取密码HASH、明文密码(如果存在)、存储的证书和凭据。高风险高收益操作! -
• 注意: 提取的HASH可用于Pass-the-Hash攻击。需严格遵守授权和合规要求。
-
第七部分:威胁狩猎与主动检测 (命令 86-95)
基于假设和情报主动寻找威胁。
-
86. 目标:扫描本地文件系统匹配Yara规则(批量检测恶意文件)(Linux) -
• 命令: yara -r -s -m /path/to/malware_rules.yar /path/to/scan/directory > yara_scan_results.txt
-
• 解析: -
• yara
:Yara扫描引擎。 -
• -r
:递归目录。 -
• -s
:显示匹配字符串(方便验证)。 -
• -m
:显示元数据(规则中的meta
信息)。 -
• /path/to/malware_rules.yar
:包含恶意软件特征的Yara规则文件。 -
• /path/to/scan/directory
:扫描的目录。 -
• > yara_scan_results.txt
:保存结果。
-
-
• 场景: 使用已知的恶意软件特征库(如Valhalla, FLARE-VM, 自定义规则)对特定目录进行批量扫描,找出潜在恶意文件。 -
• 注意:规则质量是关键! 更新规则库。扫描范围要明确,避免全盘扫描消耗过大。结合HASH在VT验证结果。
-
-
87. 目标:检查计划任务/cron中是否有连接到C2的命令(如curl/wget)(Linux) -
• 命令: grep -E -l -r -i "curl |wget |nc |ncat |socat |telnet |ssh |openssl s_client" /etc/cron* /var/spool/cron/crontabs /etc/anacrontab 2>/dev/null
-
• 解析: 在cron配置文件中递归搜索 ( -r
) 包含常见网络工具 (curl
,wget
,nc
等) 的命令行 (-i
忽略大小写),只输出文件名 (-l
)。 -
• 场景: 查找通过定时任务建立与C2通信的持久化后门(如定时发送心跳、下载新指令)。 -
• 注意: 合法任务也可能使用这些工具(如定时拉取更新)。需人工复核命令内容和目标地址。
-
-
88. 目标:查找Linux进程内存中包含恶意IP/域名的进程 (Linux - gdb/scans mem) -
• 命令 (危险!仅示例思路): for pid in $(ps -e -o pid=); do if grep -s -q "malicious.domain" /proc/$pid/mem 2>/dev/null; then echo "Found in PID: $pid ($(ps -p $pid -o comm=))"; fi; done
(理论可行,但/proc/pid/mem
访问极其危险且复杂) -
• 推荐替代: 使用 memgrep
工具 (如https://github.com/orlikoski/memgrep
) 或 Volatility/Yara内存扫描 (命令81) 更安全有效。 -
• 场景: 检测正在运行的进程其内存空间中是否包含已知的恶意C2地址或指令。 -
• 注意: 直接扫描 /proc/pid/mem
极不稳定且可能导致进程崩溃!强烈建议使用专用工具。
-
-
89. 目标:检测Linux LD_PRELOAD劫持(检查环境变量和预加载库)(Linux) -
• 命令: grep -r -E 'LD_PRELOAD|LD_LIBRARY_PATH' /etc/environment /etc/profile.d/* /home/*/.*rc /root/.*rc 2>/dev/null
(配置文件) +ps e -eo pid,user,command | grep -E 'LD_PRELOAD|LD_LIBRARY_PATH'
(进程环境) -
• 解析: 在常见的Shell初始化文件 ( /etc/environment
,/etc/profile.d/*
,~/.bashrc
,~/.profile
等) 和 所有进程的环境变量 (ps e
) 中搜索LD_PRELOAD
或LD_LIBRARY_PATH
设置。 -
• 场景: LD_PRELOAD
劫持是常见的库注入技术。检查是否有非预期的库被预加载,特别是在进程环境中动态设置的(比配置文件更隐蔽)。 -
• 注意: 合法程序也会设置。关注路径是否指向 /tmp
,/dev/shm
或陌生路径的.so
文件。
-
-
90. 目标:检查Windows AMSI绕过痕迹(PowerShell日志/事件)(Windows PowerShell) -
• 命令: Get-WinEvent -LogName "Microsoft-Windows-PowerShell/Operational" | Where-Object {$_.Id -eq 4104 -and $_.Message -like "*amsiinitfailed*"}
(Script Block Logging) 或 查找事件ID1
(AMSI扫描开始) 但无后续成功/失败事件 (可能被绕过) -
• 解析: AMSI (Antimalware Scan Interface) 是防御恶意PowerShell的关键。攻击者会尝试绕过它。 -
• 事件ID 4104
(Script Block Logging) 中如果包含amsiinitfailed
等字符串,表明AMSI初始化失败(可能是绕过)。 -
• 如果看到事件ID 1
(AMSI扫描开始) 但没有对应的事件ID2
(威胁报告) 或3
(扫描完成无威胁),可能意味着扫描被绕过或结果被篡改。
-
-
• 场景: 检测攻击者是否成功绕过了AMSI防护机制执行恶意PowerShell脚本。 -
• 注意: 需要启用PowerShell Script Block Logging ( 4104
) 和AMSI审核。日志可能不完整。
-
-
91. 目标:查找异常的子进程关系(如explorer.exe启动cmd.exe)(Windows PowerShell) -
• 命令: Get-CimInstance Win32_Process | Select-Object ProcessId, ParentProcessId, Name, CommandLine | Where-Object {$_.Name -eq "cmd.exe" -and $_.ParentProcessId -ne (Get-Process -Name explorer).Id} | Format-Table -AutoSize
(查找非explorer启动的cmd) -
• 解析: 查询所有进程,选择PID、PPID、名称、命令行。过滤出进程名为 cmd.exe
且其父进程ID 不等于 Explorer进程ID的进程。 -
• 场景: cmd.exe
通常由用户交互 (explorer.exe
) 启动。如果它由其他进程(如w3wp.exe
IIS进程,sqlservr.exe
SQL进程, 未知进程)启动,则非常可疑,可能表示命令注入或利用成功。 -
• 注意: 可以扩展到其他进程(如 powershell.exe
,rundll32.exe
,mshta.exe
,wmic.exe
)。了解系统的合法自动化任务。
-
-
92. 目标:检查Linux系统调用表Hook(需root/内核模块 - SystemTap/lynis) -
• 思路: 检测内核级Rootkit对系统调用表的篡改。 -
• 非简单命令: -
• lynis
审计:lynis audit system
(检查kernel_modules
部分) -
• SystemTap脚本: 编写脚本比对 /proc/kallsyms
中的系统调用地址与预期值。 -
• 专用工具: rkhunter --checkall
,chkrootkit
(过时但基础检查)。
-
-
• 场景: 检测最隐蔽的内核级Rootkit。 -
• 注意: 操作复杂,风险高(加载内核模块)。通常由专业取证人员进行。
-
-
93. 目标:利用威胁情报平台查询本地IP/域名/HASH (Linux/Windows) -
• 命令 (使用API): 例如用 curl
查询VirusTotal:-
• curl -s --request GET --url 'https://www.virustotal.com/api/v3/files/<FILE_HASH>' --header 'x-apikey: <YOUR_VT_API_KEY>' | jq .
(查HASH) -
• curl -s --request GET --url 'https://www.virustotal.com/api/v3/ip_addresses/<SUSPECT_IP>' --header 'x-apikey: <YOUR_VT_API_KEY>' | jq .
(查IP)
-
-
• 场景: 将本地发现的IoC(文件HASH、IP、域名)提交到VirusTotal、AlienVault OTX、IBM X-Force等平台,获取全球威胁情报。 -
• 注意:注意隐私和合规! 不要上传敏感数据。使用API密钥。 jq
用于格式化JSON输出。
-
-
94. 目标:检测DNS隧道活动(高熵域名请求)(需专用工具 - dnscat2日志/IDS) -
• 思路: 攻击者利用DNS协议进行隐蔽通信(隧道)。 -
• 非简单命令: -
• 分析DNS查询日志: 查找大量长、随机子域名 ( b3jf9x8a.domain.tld
)、TXT
/NULL
等非常规类型查询、异常高频查询。 -
• 网络流量分析 (Wireshark/Zeek): 检查DNS载荷大小、请求/响应模式。 -
• 专用检测工具: dnspeep
,DNSMessenger
或IDS/IPS规则(如Suricata)。
-
-
• 场景: 检测高级持久化威胁(APT)常用的数据外泄或C2通信隐蔽通道。 -
• 注意: 需要基础DNS监控和日志记录。
-
-
95. 目标:模拟攻击者行为进行狩猎(假设已失陷 - MITRE ATT&CK驱动) -
• 思路: 根据ATT&CK框架,针对特定战术(如持久化、凭证访问、横向移动)设计检测命令组合。 -
• 示例 (查找凭证转储): -
• Linux: grep -i -E "passwd|shadow|sudoers|.kdbx|.ppk|.pem" /var/log/* /home/*/.*history
(日志/历史) +find /tmp /dev/shm /home -name "*cred*" -o -name "*pass*" -type f -exec ls -la {} + 2>/dev/null
(临时文件) -
• Windows: Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 4104 -and $_.Message -like "*sekurlsa::logonpasswords*"}
(检测mimikatz) +dir /s /b C: *.kdbx *.ppk *.pem *_history 2>nul
(查找密码库/密钥/历史文件)
-
-
• 场景: 主动假设系统已失陷,针对攻击者最可能的目标(如偷凭证)进行针对性搜索。 -
• 注意: 需要深入理解ATT&CK技术和攻击者行为。
-
第八部分:快速遏制与系统加固 (命令 96-100)
初步止损,防止进一步破坏。
-
96. 目标:隔离主机网络(Linux - 快速阻断进出流量) -
• 命令: iptables -P INPUT DROP && iptables -P OUTPUT DROP && iptables -P FORWARD DROP
(紧急断开所有网络) 或iptables -A INPUT -j DROP -s <攻击者IP>
(仅阻断特定攻击者IP) -
• 场景:紧急止损! 确认主机失陷后,立即切断其网络连接,防止C2通信、横向移动、数据外泄。仅在确定需要隔离时使用! -
• 注意:慎用! 会断开所有远程连接(包括你的SSH)。确保有其他访问途径(如物理Console、带外管理)或最后执行。更精确的方法是阻断特定IP/端口。
-
-
97. 目标:终止恶意进程及其子进程 (Linux) -
• 命令: pkill -TERM -P <父恶意PID>
(终止指定PID的所有子进程) 然后kill -9 <父恶意PID>
(强制终止父进程) -
• 场景: 快速停止正在运行的恶意进程,遏制其破坏活动(如挖矿、加密、通信)。 -
• 注意:确认PID准确! 误杀关键进程(如数据库)会导致服务中断。了解进程树结构 ( pstree
)。Windows 使用Stop-Process -Id <PID> -Force
。
-
-
98. 目标:锁定可疑用户账户 (Linux) -
• 命令: usermod -L <用户名>
(锁定密码登录) +passwd -l <用户名>
(同效) + 检查并移除其.ssh/authorized_keys
条目 +usermod -s /sbin/nologin <用户名>
(禁用Shell) -
• 场景: 当发现某个用户账户被用于非授权访问时,立即锁定其所有登录途径。 -
• 注意: 确认锁定用户不会影响关键业务。记录锁定操作。Windows 使用 net user <用户名> /active:no
。
-
-
99. 目标:临时禁用Web服务器(阻止Webshell访问)(Linux) -
• 命令: systemctl stop apache2
或systemctl stop nginx
-
• 场景: 发现Web应用存在Webshell且无法立即清除时,临时关闭Web服务,阻断攻击者访问入口。 -
• 注意: 会造成服务中断。应尽快清理Webshell并恢复服务。记录操作。
-
-
100. 目标:应用关键安全补丁(紧急修复已知漏洞)(Linux - 基于RHEL)*命令: yum --security check-update
(检查安全更新) 然后yum update --security
(仅安装安全更新) 或yum update <特定包名>
(更新特定漏洞包)*场景:如果事件是由未修补的已知漏洞(如ProxyLogon, Log4Shell)引发的,在遏制后立即应用相关补丁,防止再次被利用。*注意:务必在测试环境验证后再上生产!补丁可能带来兼容性问题。HW期间需评估补丁安装的窗口期。Debian/Ubuntu 使用apt list --upgradable | grep security
+apt upgrade --only-upgrade <包>
。Windows 使用Get-Hotfix
检查已安装补丁,通过WSUS或wuauclt /detectnow
/usoclient ScanInstallWait
安装更新。
原文始发于微信公众号(安小圈):HW必备:50个应急响应常用命令速查手册二(实战收藏)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论