在紧张激烈的网络安全攻防演练和真实的安全事件应急响应中,时间就是防线。面对狡猾的攻击者和海量的系统数据,安全工程师的效率直接决定了止损与反制的成败。单一命令如同单兵作战,而精心设计的组合命令则是协同作战的特种部队,它能精准打击、快速筛查、深度挖掘,将碎片化信息转化为可行动的威胁情报。
本手册摒弃华而不实的理论,直击HW与应急响应核心痛点,精炼出100个实战验证、即查即用的组合命令。这些命令融合了系统内置工具、常用开源工具(如 grep
, awk
, sed
, find
, netstat
, lsof
, ps
, PowerShell Cmdlets
等),覆盖系统侦察、进程分析、网络取证、文件追踪、日志挖掘、内存快照、威胁狩猎、快速遏制等全链条响应环节。每个组合命令均包含:
• 核心目标:解决什么具体问题。 • 适用系统:Linux / Windows (PowerShell为主)。 • 命令详解:完整的组合命令及常用参数。 • 关键解析:输出结果的核心关注点与实战解读。 • 典型场景:该命令在HW/IR中的典型应用场合。 • 注意事项:潜在风险、依赖工具或环境差异。
重要提示 (永恒不变):
1. 权限为王:绝大多数命令需要 root
(Linux) 或Administrator
(Windows) 权限。使用sudo
或Run as administrator
。2. 理解再执行:盲目粘贴命令极其危险!务必理解每条命令的作用,尤其是涉及修改或删除的命令 ( rm
,del
,kill
,Stop-Process
,Remove-Item
等)。操作前备份关键数据!3. 环境适配:命令细节(如路径、工具可用性、输出格式)可能因 OS 发行版、版本、已安装工具而异。在安全测试环境中预先演练。 4. 管道( |
)与重定向(>
)是灵魂:组合命令的核心在于利用管道将前一个命令的输出作为后一个命令的输入,利用重定向保存结果。grep
,awk
,sed
,sort
,uniq
,findstr
,Select-Object
,Where-Object
等是构建组合的基石。5. 结果导向:命令是工具,输出是线索。深刻理解输出内容的含义,结合上下文进行关联分析,才能得出准确结论。
50个HW应急响应组合命令详解
第一部分:系统侦察与快速健康检查 (命令 1-20)
快速掌握系统概况,识别明显异常。
1. 目标:快速获取系统关键信息概览 (Linux)
• 命令: echo "Hostname: $(hostname)"; echo "Kernel: $(uname -r)"; echo "Uptime: $(uptime)"; echo "Users: $(who)"; echo "Memory: $(free -h | awk '/Mem:/{print $3 "/" $2}')"; df -h --output=source,fstype,pcent,target | grep -v tmpfs
• 解析: • 一次性输出主机名、内核版本、运行时间及负载、当前登录用户。 • 显示已用内存/总内存 (Human-readable)。 • 列出主要文件系统(排除tmpfs)的挂载源、类型、使用百分比、挂载点。 • 场景: 连接可疑服务器后的第一步,快速建立系统基线印象,查看负载、用户、磁盘空间是否异常。 • 注意: free -h
和df -h
的-h
参数使输出更易读 (Human-readable)。
• 命令: systeminfo | Select-String -Pattern 'OS Name|OS Version|System Manufacturer|System Model|System Type|Boot Time|Total Physical Memory|Available Physical Memory|Hotfix(s)|Network Card'
• 解析: 使用 systeminfo
获取全面信息,并通过Select-String
(sls
) 精准过滤出操作系统、硬件型号、启动时间、内存状态、已安装补丁、网卡信息等关键行。• 场景: Windows系统初步排查,快速了解系统环境、补丁状态(判断是否缺失关键补丁)、运行时长(判断是否近期重启过)。 • 注意: Select-String
相当于Linux的grep
。-Pattern
支持正则表达式。
• 命令: env | grep -i -E 'path|home|tmp|java|perl|python|ruby' | sort
• 解析: 列出所有环境变量,重点过滤 ( grep -i -E
) 包含PATH
(执行路径)、HOME
(用户主目录)、TMP
/TEMP
(临时目录)、以及常见脚本/运行时环境 (JAVA
,PERL
,PYTHON
,RUBY
) 的变量(不区分大小写-i
),并按字母排序 (sort
) 便于阅读。• 场景: 攻击者常在环境变量中植入恶意路径或修改 PATH
以优先加载恶意程序。检查是否有异常路径(如/tmp
,/dev/shm
, 非标准用户目录)或可疑的运行时配置。• 注意: 重点关注 PATH
变量的顺序和内容。
• 命令: history | grep -E -i 'wget|curl|ssh|scp|ftp|telnet|nc|netcat|socat|chmod|chown|passwd|useradd|adduser|usermod|groupadd|rm |mv |tar |unzip|openssl|nohup|./|../'
• 解析:搜索历史命令记录,查找可能用于攻击或维持访问的命令,如下载工具 ( wget
,curl
)、远程连接/文件传输 (ssh
,scp
,ftp
,telnet
)、网络工具 (nc
/netcat
,socat
)、权限修改 (chmod
[+x/s],chown
)、用户管理 (passwd
,useradd
,usermod
)、文件操作 (rm
[尤其-rf
],mv
,tar
,unzip
)、加密/证书 (openssl
)、后台运行 (nohup
)、执行当前或上级目录脚本 (./
,../
)。• 场景: 怀疑攻击者通过交互式Shell进行操作后,检查其遗留痕迹。是溯源的重要线索。 • 注意: • 仅对当前用户的Bash历史有效。Root用户可能操作过其他用户。 • 攻击者可能清空 .bash_history
文件 (history -c
或echo "" > ~/.bash_history
)。• 检查 /root/.bash_history
及其他用户目录下的历史文件。
• 命令: rpm -qa --last | head -n 50
• 解析: rpm -qa
列出所有已安装RPM包,--last
按安装时间倒序排列(最近安装的在前),head -n 50
显示最近的50个。对于Debian系,可使用dpkg-query -W --showformat='${Package} ${Status} ${Version}n' | grep "install ok installed" | sort -k4 | tail -n 50
(按安装时间排序依赖apt
的日志)。• 场景: 快速查看最近安装的软件包,判断是否有未经授权的或可疑的软件(如攻击工具包、挖矿程序、后门)被安装。 • 注意: 时间戳的准确性依赖系统时钟。 yum history
或dnf history
(RHEL/CentOS/Fedora) 以及/var/log/apt/history.log
(Debian/Ubuntu) 提供更详细的安装历史记录。
• 命令: systemctl list-units --type=service --all --no-pager | grep -E 'loaded|running' | awk '{print $1}' | xargs -I{} sh -c 'echo -e "nService: {}"; systemctl status {} | grep -A 1 "Main PID:"'
• 解析:
1. systemctl list-units --type=service --all --no-pager
:列出所有服务单元(包括不活动的),禁用分页。2. grep -E 'loaded|running'
:过滤出状态为loaded
(已加载配置)或running
(正在运行)的服务。3. awk '{print $1}'
:提取服务单元名称(第一列)。4. xargs -I{} sh -c '...'
:对每个服务名{}
执行后续命令。5. echo -e "nService: {}"
:打印服务名。6. systemctl status {} | grep -A 1 "Main PID:"
:获取该服务的详细状态,并打印包含Main PID:
的行及其后一行(通常包含进程PID和命令)。
> services_status.txt
)。检查服务名是否仿冒、命令路径是否正常、是否监听预期端口。• 命令: Get-WmiObject Win32_Service | Select-Object Name, State, PathName, StartMode | Where-Object {$_.State -eq 'Running'} | Format-Table -AutoSize
• 解析: 使用WMI查询所有服务 ( Get-WmiObject Win32_Service
),选择名称、状态、路径、启动模式列 (Select-Object
),过滤出正在运行的服务 (Where-Object
),并以表格形式自动调整列宽输出 (Format-Table -AutoSize
)。• 场景: Windows下查找可疑服务。重点检查 PathName
:• 路径是否在非标准目录(如 C:UsersPublic
,C:WindowsTemp
,C:ProgramData
)?• 路径是否包含空格或特殊字符但未用引号包裹(可能是服务劫持漏洞利用点)? • 路径指向的文件是否存在、签名是否有效? • 注意: Get-Service
Cmdlet更简单但信息较少(不含路径)。此命令需要管理员权限。
• 命令: find /etc/cron* /var/spool/cron/crontabs -type f -exec echo -e "n>> {} <<n" ; -exec cat {} ; 2>/dev/null
• 解析: • find /etc/cron* /var/spool/cron/crontabs -type f
:查找/etc/cron.daily
,/etc/cron.hourly
,/etc/cron.monthly
,/etc/cron.weekly
,/etc/crontab
,/etc/cron.d/
以及用户级cron目录/var/spool/cron/crontabs
下的所有文件。• -exec echo -e "n>> {} <<n"
:对每个找到的文件,打印文件名({}
)并用>> <<
标记。• -exec cat {} ;
:打印该文件的内容。• 2>/dev/null
:忽略查找过程中的权限错误等噪音。• 场景: 攻击者常用cron实现持久化。检查所有系统级和用户级的cron任务,寻找可疑的命令执行(如下载、连接、执行特定脚本)。 • 注意: 仔细检查每个任务的执行时间和命令内容。高频率(如每分钟)或执行时间异常的任务需重点排查。
• 命令: Get-ScheduledTask | Get-ScheduledTaskInfo | Where-Object {$_.LastRunTime} | Select-Object TaskName, @{n="Last Run"; e={$_.LastRunTime}}, @{n="Next Run"; e={$_.NextRunTime}}, State, @{n="Command"; e={(Get-ScheduledTask $_.TaskName).Actions.Execute}} | Format-Table -Wrap -AutoSize
• 解析:
1. Get-ScheduledTask
:获取所有计划任务对象。2. Get-ScheduledTaskInfo
:获取任务的详细信息(如运行时间)。3. Where-Object {$_.LastRunTime}
:过滤出至少运行过一次的任务(避免显示大量未运行的任务)。4. Select-Object
:选择并格式化输出列:
• TaskName
:任务名。• @{n="Last Run"; e={$_.LastRunTime}}
:计算属性,显示最后运行时间。• @{n="Next Run"; e={$_.NextRunTime}}
:计算属性,显示下次运行时间。• State
:当前状态(如Ready
,Running
)。• 关键 @{n="Command"; e={(Get-ScheduledTask $_.TaskName).Actions.Execute}}
:再次获取任务对象并提取其执行命令 (Actions.Execute
)。这是核心检查项。
Format-Table -Wrap -AutoSize
:表格输出,自动调整列宽并允许文本换行。-Wrap
参数确保长命令能显示完整。• 命令: find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f ( -perm -4000 -o -perm -2000 ) -exec ls -ldb {} ; 2>/dev/null | sort -k 3
• 解析: • find /
:从根目录开始搜索。• -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o
:排除 (-prune
) 不需要搜索的虚拟文件系统目录/proc
,/sys
,/dev
(避免大量无关结果和错误),-o
表示“或”。• -type f
:只搜索普通文件。• ( -perm -4000 -o -perm -2000 )
:查找权限包含SUID位 (-perm -4000
) 或 SGID位 (-perm -2000
) 的文件。• -exec ls -ldb {} ;
:对找到的每个文件执行ls -ldb
,以长格式 (-l
) 显示详细信息(含权限、所有者、大小、时间等),-b
转义特殊字符(如空格)。• 2>/dev/null
:忽略权限错误。• sort -k 3
:按第三列(文件所有者)排序,方便查看同一所有者的文件。• 场景: SUID/SGID文件允许用户以文件所有者或组的身份执行,是提权漏洞的温床。攻击者可能放置恶意的SUID/SGID程序。检查系统关键目录下是否有异常或新增的SUID/SGID文件。 • 注意: 了解系统常见的合法SUID/SGID文件(如 /bin/passwd
,/bin/su
,/usr/bin/sudo
)。对比基线或检查陌生文件。
第二部分:进程深度分析与检测 (命令 11-20)
深入剖析运行中的进程,揪出恶意活动。
11. 目标:列出所有进程的详细信息(含完整命令行、PPID)并树状展示 (Linux)
• 命令: ps -e -o pid,ppid,user,group,nice,pcpu,pmem,vsz,rss,tty,stat,start,time,args --forest
• 解析: ps
命令的强大组合:• -e
:显示所有进程。• -o ...
:自定义输出格式,包含:PID, PPID(父PID), 用户, 组, 优先级(Nice值), CPU%, 内存%, 虚拟内存大小(VSZ), 常驻内存大小(RSS), 控制终端(TTY), 状态(STAT), 启动时间(START), 累计CPU时间(TIME), 完整命令行(ARGS)。• --forest
:以树状结构显示进程父子关系,极其有助于可视化进程链。• 场景: 全面进程审查的起点。识别异常进程名、可疑命令行参数、高资源占用、僵尸进程、以及关键的父子进程关系(如 bash -> curl -> sh
或apache -> perl -> nc
这类可疑链)。• 注意: 输出信息量大,可结合 grep
过滤或重定向到文件分析。重点关注无终端 (?
)、状态异常 (Z
僵尸,S
睡眠,R
运行)、占用资源高、路径异常、参数怪异的进程。
• 命令: netstat -tulpena | awk '{print $4, $7}' | grep -v "^-" | sort | uniq | while read addr pid; do echo -n "$addr -> "; ps -p ${pid%/*} -o pid=,user=,command= || echo "PID ${pid%/*} not found"; done
(较复杂,可拆解)• 解析 (拆解版更清晰):
1. 获取监听信息: sudo netstat -tulpena
• -t
(TCP)-u
(UDP)-l
(Listening)-p
(Show PID/Program)-e
(Extended)-n
(Numeric)-a
(All)。关键字段:Local Address
(监听地址:端口),PID/Program name
(进程ID/名)。
awk '{print $4, $7}'
(第4列是Local Address, 第7列是PID/Program)。grep -v "^-"
排除无效行。sort | uniq
去重。while read addr pid; do ... done
循环处理每一对地址和PID。• echo -n "$addr -> "
打印监听地址。• ps -p ${pid%/*} -o pid=,user=,command=
使用提取的PID(${pid%/*}
去除可能存在的/programname
后缀),-o
指定只输出PID、用户、完整命令行(command=
不显示列头)。• || echo "PID ${pid%/*} not found"
如果PID不存在则报错(可能进程已结束)。
sudo
)。检查非常见端口、无关联服务名 (-
)、非预期用户(如 nobody
监听特权端口)的监听项。lsof -i -P -n
是另一种常用方法。• 命令: lsof +D /path/to/suspect/dir/or/file 2>/dev/null
或lsof | grep -F "/path/to/suspect/dir/or/file"
• 解析: lsof
(List Open Files) 列出所有进程打开的文件(包括普通文件、目录、网络套接字、设备等)。• +D /path
:递归列出打开指定目录及其子目录下任何文件的进程(较慢但全面)。• | grep -F "/full/path"
:使用grep
精确查找 (-F
固定字符串) 打开特定完整路径文件或目录的进程记录。• 场景: 当发现可疑文件(如Webshell、恶意模块、日志文件)时,查找哪些进程正在使用它。这对于判断文件是否活跃、是否被注入、或尝试终止相关进程非常有用。 • 注意: 需要root权限查看所有进程信息。输出包含PID、进程名、用户、文件描述符等。
• 命令: pstree -p -a -s -u <target_pid>
(查看特定PID) 或pstree -p -a -s -u
(查看所有)• 解析: pstree
直观显示进程树:• -p
:显示PID。• -a
:显示命令行参数。• -s
:显示父进程直到init/systemd。• -u
:显示用户切换(如果进程以不同用户运行)。• 场景: 深入分析可疑进程的起源。它是由谁启动的(如 sshd -> bash -> ./malware
)?它又启动了哪些子进程?这对于理解攻击链和清除所有相关进程至关重要。• 注意: 比 ps --forest
更专注于特定进程的树状关系。
• 命令: lsof -Pan -p <pid> -i
或ss -tunape | grep "pid=<pid>"
• 解析: • lsof -Pan -p <pid> -i
:• -P
:禁用端口到服务名的转换(显示数字端口)。• -a
:AND条件(同时满足-p
和-i
)。• -n
:禁用IP到主机名的转换(显示数字IP)。• -p <pid>
:指定目标进程ID。• -i
:只显示网络连接。• ss -tunape | grep "pid=<pid>"
:• ss
(Socket Statistics) 是netstat
的现代替代。• -t
(TCP)-u
(UDP)-n
(Numeric)-a
(All)-p
(Process)-e
(Extended info)。• 通过 grep
过滤出包含指定pid
的行。• 场景: 针对已知的可疑PID,精确定位其所有的网络活动(监听哪些端口?建立了哪些对外连接?连接的对端IP和端口是什么?)。是分析C2通信、横向移动、数据外泄的直接证据。 • 注意: 需要root权限。 lsof
输出更详细(包含文件描述符类型),ss
通常更快。
• 命令 (CPU): ps -eo pid,user,pcpu,pmem,stat,start,time,args --sort=-pcpu | head -n 11
(前10 + 标题行)• 命令 (内存 RSS): ps -eo pid,user,rss,pmem,stat,start,time,args --sort=-rss | head -n 11 | awk 'NR==1; NR>1 {$3=int($3/1024)"MB"; print}'
(RSS转MB)• 解析: • ps -eo ...
:自定义输出格式,同上。• --sort=-pcpu
/--sort=-rss
:按CPU%降序 / 按常驻内存RSS降序排序。• head -n 11
:显示前10个进程(第1行是标题)。• (内存命令) awk ...
:将第3列RSS(单位KB)转换为MB显示,保留标题行 (NR==1
)。• 场景: 快速定位导致系统资源瓶颈的罪魁祸首。挖矿木马、加密勒索、DDoS僵尸、内存泄露程序常表现为持续高CPU或高内存占用。 • 注意: 区分瞬时高峰和持续占用。结合 top
/htop
动态观察。
• 命令: diff <(ps -eo pid) <(ls /proc | grep -E '^[0-9]+$' | sort -n) | grep '>' | awk '{print $2}'
• 解析: 利用 /proc
文件系统是进程信息的真实来源这一特性。
1. ps -eo pid
:列出ps
能看到的所有PID。2. ls /proc | grep -E '^[0-9]+$' | sort -n
:列出/proc
目录下所有纯数字目录名(即内核可见的所有PID)并排序。3. diff ...
:比较两个PID列表的差异。4. grep '>'
:找出在/proc
中存在但ps
中不存在的行。5. awk '{print $2}'
:提取这些隐藏的PID。
ps
等命令或库文件)隐藏的进程。这些进程对 ps
, top
等工具不可见,但在 /proc
下仍有其目录。/proc
中也不可见。需要结合内存取证或完整性检查工具。• 命令: pmap -X <pid>
• 解析: pmap
报告指定进程的内存映射。• -X
:显示扩展格式,包含更多细节:映射地址、权限、偏移量、设备号、inode、路径名(对于文件映射)、以及内存使用细分(RSS, Dirty, Swap等)。• 场景: • 查看进程加载了哪些共享库(特别是查找恶意注入的 .so
文件)。• 查看进程是否映射了异常文件(如 /dev/shm
中的共享内存文件)。• 分析内存占用细节,定位内存泄露区域。 • 配合核心转储 ( gcore
) 进行更深入分析。• 注意: 需要root权限。输出信息量大,结合 grep
过滤感兴趣的部分(如grep .so
找共享库)。
• 命令: ps -ef --cols=1000 | grep -E '[s]uspicious_pattern'
(注意括号技巧)• 解析: • ps -ef
:标准格式列出所有进程(-e
所有,-f
全格式)。• --cols=1000
:防止长命令行被截断(调整数值以适应环境)。• grep -E '[s]uspicious_pattern'
:使用正则表达式 (-E
) 搜索命令行中包含suspicious_pattern
的进程。关键技巧:将搜索词的首字母放入方括号(如[s]uspicious
),这样grep
进程自身的命令行(包含suspicious_pattern
)不会被匹配到,避免了结果中包含grep
自身。• 场景: 根据已知的恶意域名、IP、URL、文件路径、特定参数、关键字(如 miner
,mirai
,c2
,backdoor
,shell
)等特征,快速筛查进程列表。• 注意: 模式设计要尽量精确,避免误报。了解常见的攻击工具命令行特征。
• 命令: Get-WmiObject Win32_Process | Select-Object ProcessId, Name, ParentProcessId, CommandLine, ExecutablePath, CreationDate, WorkingSetSize, UserModeTime, KernelModeTime, ProcessPath | Format-List
• 解析: 使用WMI查询进程 ( Win32_Process
),选择关键属性:• ProcessId
(PID),Name
(进程名),ParentProcessId
(PPID),CommandLine
(完整命令行),ExecutablePath
(可执行文件路径),CreationDate
(创建时间),WorkingSetSize
(内存占用量),UserModeTime
/KernelModeTime
(CPU时间),ProcessPath
(有时更准确)。• Format-List
:以列表形式详细显示每个进程的属性。• 场景: Windows下最全面的进程信息获取方式之一。用于分析可疑进程的命令行参数、启动时间、资源占用、父子关系(结合 ParentProcessId
)。检查CommandLine
和ExecutablePath
是否一致、路径是否可疑。• 注意: Get-Process
Cmdlet更简单但不包含命令行(CommandLine
)!wmic process get ...
是命令行替代方案。
第三部分:网络连接取证与分析 (命令 21-40)
深入调查网络活动,追踪恶意通信和数据流向。
21. 目标:列出所有活动网络连接(TCP/UDP)及关联进程/程序 (Linux)
• 命令: ss -tunapeo
或netstat -tunapeo
• 解析: • ss
(推荐) /netstat
:• -t
(TCP),-u
(UDP),-n
(数字地址/端口),-a
(所有状态),-p
(显示进程信息),-e
(扩展信息, 如用户、inode),-o
(定时器信息)。• 关键输出: • Local Address:Port
(本地)• Peer Address:Port
(远端)• State
(连接状态:ESTAB
,LISTEN
,TIME-WAIT
等)• Process
(PID/程序名)• User
(进程所属用户)• Timer
(连接存活时间)• 场景:网络调查基石。 全面掌握系统所有网络连接状态。重点查找: • 监听端口 ( LISTEN
): 非预期端口、非预期程序、非特权用户监听特权端口 (<1024)。• 出站连接 ( ESTAB
): 连接到可疑IP/域名、非标准端口(如3389, 22以外的端口)、长时间连接、高频率连接、未知程序发起的连接。• 内部连接:检查可能的横向移动。 • 注意: 需要root权限查看所有进程信息。 ss
通常更快速高效。
• 命令: while true; do ss -tunap4 state established | awk '!x[$0]++'; sleep 1; done
• 解析: • while true; do ... done
:无限循环。• ss -tunap4 state established
:只显示已建立的IPv4 TCP/UDP连接及进程。• awk '!x[$0]++'
:使用awk数组x
跟踪已出现的行 ($0
),只打印第一次出现的行(即新连接)。• sleep 1
:每秒检查一次。• 场景:实时狩猎。 检测正在发生的恶意活动,如反弹Shell建立、C2心跳连接、横向扫描/爆破成功后的连接、数据外传连接。观察新连接的源/目的IP端口和进程。 • 注意: 输出会滚动,可重定向到文件 ( > live_connections.log
)。调整sleep
间隔和ss
过滤条件(如加dst 可疑IP
)。使用tcpdump
或tshark
进行更细粒度抓包分析。
• 命令: lsof -i @<可疑IP或域名>
• 解析: lsof -i
列出所有网络连接。@<host>
指定远程主机(IP或域名)。• 场景: 当威胁情报(TI)指示某个IP/域名为恶意时,快速定位系统中哪些进程正在与其通信。 • 注意: 也可用 ss -tunap dst <IP>
或netstat -tunap | grep <IP>
。
• 命令: ss -tulpn | grep -vE '(:22|:80|:443|:25|:53|:3306|:5432)s'
(根据需要调整排除的端口列表)• 解析: • ss -tulpn
:列出所有TCP/UDP监听端口及进程。• grep -vE ...
:使用-v
反转匹配,排除 (-E
正则) 包含常见服务端口(如SSH 22, HTTP 80, HTTPS 443, SMTP 25, DNS 53, MySQL 3306, PostgreSQL 5432)的行。s
确保匹配端口号后是空白(避免匹配如 8080, 33060)。• 场景: 攻击者常使用非标准端口(如 4444, 31337, 65535 等)或复用合法端口但由异常进程监听,以规避基础监控。此命令筛选出潜在的后门、代理、C2监听端口。 • 注意: 务必根据目标系统的实际服务端口调整排除列表。结合进程名和用户进一步判断。
• 命令: systemd-resolve --statistics | grep -A 100 "Cache"
(查看缓存大小) 然后journalctl -u systemd-resolved --since "1 hour ago" | grep -i "query"
(查看近期查询日志)• 解析: • systemd-resolve --statistics
:查看DNS解析统计信息,包含当前缓存记录数 (Current Cache Size
)。无直接查看缓存内容的标准命令。• journalctl -u systemd-resolved --since "1 hour ago"
:查询systemd-resolved
服务的日志(时间范围可调)。• grep -i "query"
:过滤出包含 "query" 的日志行,显示查询过的域名。• 场景: 恶意软件常进行DNS请求(如C2通信、DGA域名)。检查近期DNS查询日志,寻找可疑或已知恶意的域名。 • 注意: DNS缓存内容不易直接获取,依赖日志。其他DNS服务(如 dnsmasq
,bind
)需查其特定日志文件(如/var/log/syslog
,/var/log/messages
,/var/log/named.log
)。Windows 使用ipconfig /displaydns
。
• 命令: ipconfig /displaydns | findstr /C:"Record Name" /C:"Record Type" /C:"Data" | more
• 解析: • ipconfig /displaydns
:显示DNS客户端解析器缓存内容。• findstr /C:"Record Name" /C:"Record Type" /C:"Data"
:过滤出包含记录名、类型(A, AAAA, CNAME等)和解析数据(IP地址)的关键行。• more
:分页显示,防止输出过快。• 场景: 同Linux场景,在Windows上检查是否有对恶意域名的解析记录。 • 注意: 输出可能包含大量记录。可结合威胁情报进行自动化匹配筛查。 /flushdns
可清空缓存。
• 命令 (Linux): arp -vn
(详细+数字)• 命令 (Windows): arp -a
• 解析: 显示地址解析协议 (ARP) 缓存表,包含IP地址到MAC地址的映射。 • 场景: 检查是否存在异常的IP-MAC映射(如网关IP对应了错误的MAC地址),这可能是局域网内ARP欺骗攻击(中间人)的迹象。查找多个IP映射到同一个MAC(攻击者MAC)或同一个IP映射到多个MAC(冲突)。 • 注意: ARP缓存是动态的且有时效性。异常条目可能短暂出现。结合网络流量分析确认。
• 命令 (Linux): ip route show
或route -n
(数字)• 命令 (Windows): route print
• 解析: 显示内核的IP路由表。关键字段:目标网络/主机、网关、接口、度量值。 • 场景: 检查是否有异常的路由条目,如: • 指向未知或攻击者控制网关的默认路由。 • 针对特定IP或网段的异常路由(可能用于流量劫持或绕过安全策略)。 • 指向隧道接口(如 tun0
)的路由(可能表示存在VPN或攻击者建立的隧道)。• 注意: 了解正常的路由配置是识别异常的前提。
• 命令: lsof -i -P -n | grep RAW
• 解析: lsof -i -P -n
列出所有网络连接/套接字(数字端口/IP)。grep RAW
过滤出类型为RAW
的套接字。• 场景: RAW Socket允许程序绕过TCP/IP协议栈直接构造数据包。合法程序(如 ping
,tcpdump
)会使用,但恶意程序(如网络扫描器、自定义协议后门、数据包注入工具)也常用。查找非预期进程打开的 RAW Socket。• 注意: 需要root权限。对结果需谨慎分析,区分合法使用。
• 命令: tcpdump -i any -s 0 -w process_<pid>.pcap 'port not 22 and host not <your_IP>' and '(dst host <可疑IP> or src host <可疑IP>)' and 'proc <pid>'
(使用nproc
或tcpdump
新版特性) 或使用nsenter
(更通用)• 解析 (推荐 nsenter
方法):
1. 找到进程的Network Namespace: ls -l /proc/<pid>/ns/net
(记下inode号或使用nsenter
直接进入)2. 抓包命令: nsenter -t <pid> -n tcpdump -i any -s 0 -w process_<pid>_traffic.pcap 'port not 22 and host not <your_IP> and (host <可疑IP>)'
(进入目标进程的网络命名空间执行tcpdump
)
tcpdump
语法复杂,需根据目标调整过滤条件 ('...'
)。避免抓取自身管理连接(如SSH port 22
)和与自身分析主机的通信 (host not <your_IP>
)。捕获文件需用Wireshark等工具分析。• 命令: nethogs -c 10 -t <网卡名> | grep -E '<可疑IP>|PID'
(需安装nethogs
)• 解析: • nethogs
:按进程实时显示网络带宽占用。• -c 10
:刷新10次后退出(避免持续占用)。• -t
:跟踪模式(显示累计流量)。• - <网卡名>
:指定网卡(如eth0
)。• grep -E '<可疑IP>|PID'
:过滤显示连接到可疑IP的进程及其流量,并保留标题行 (PID
)。• 场景: 定位与特定恶意IP通信且流量显著的进程(如下载恶意负载、外泄数据、DDoS攻击)。 • 注意: 需要root权限。需安装 nethogs
(apt/yum install nethogs
)。
• 命令: Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess, @{n="ProcessName"; e={(Get-Process -Id $_.OwningProcess).Name}} | Format-Table -AutoSize
• 解析: • Get-NetTCPConnection
:获取TCP连接信息。• Select-Object
:选择本地地址端口、远端地址端口、状态、OwningProcess(PID)。• 关键计算属性: @{n="ProcessName"; e={(Get-Process -Id $_.OwningProcess).Name}}
:根据PID查找对应的进程名。• Format-Table -AutoSize
:表格输出。• UDP连接使用 Get-NetUDPEndpoint
,结构类似,但无State
和RemotePort
(UDP无状态)。• 场景: Windows下替代 netstat -ano
,更结构化地查看网络连接及其所属进程名。• 注意: 需要管理员权限。关注 RemoteAddress
为外部IP、State
为Established
且ProcessName
可疑的连接。
• 命令: Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess | ForEach-Object { $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue; [PSCustomObject]@{ LocalAddress=$_.LocalAddress; LocalPort=$_.LocalPort; PID=$_.OwningProcess; ProcessName=$proc.Name; Path=($proc.Path) } } | Format-Table -AutoSize
• 解析:
1. Get-NetTCPConnection -State Listen
:获取所有监听状态的TCP连接。2. Select-Object LocalAddress, LocalPort, OwningProcess
:提取本地地址、端口、PID。3. ForEach-Object { ... }
:对每个监听项进行处理:
• $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
:尝试根据PID获取进程对象,忽略错误(进程可能已结束)。• 创建自定义对象 [PSCustomObject]
,包含地址、端口、PID、进程名、关键的可执行文件路径 ($proc.Path
)。
Format-Table -AutoSize
:表格输出。$proc.Path
可能为空(系统进程或权限不足)。• 命令: type %windir%System32driversetchosts | findstr /v "#" | findstr /r "[0-9].*[a-zA-Z]"
或Get-Content $env:windirSystem32driversetchosts | Where-Object { $_ -notmatch '^#' -and $_ -match 'S' }
• 解析: 读取 hosts
文件内容:• 排除注释行 ( findstr /v "#"
或Where-Object { $_ -notmatch '^#' }
)。• 过滤出包含非注释内容的行( findstr /r "[0-9].*[a-zA-Z]"
找包含数字后跟字母的行,是IP映射域名的典型特征;或Where-Object { $_ -match 'S' }
找非空行)。• 场景: 攻击者常篡改 hosts
文件实现:• 域名劫持: 将合法域名(如杀软更新服务器、安全网站)解析到恶意IP或 127.0.0.1
(阻止访问)。• 屏蔽检测: 将恶意域名解析到 0.0.0.0
或127.0.0.1
(避免连接失败告警)。• 注意: 检查是否有非预期的域名-IP映射,特别是映射到内网地址、 127.0.0.1
、0.0.0.0
或已知恶意IP。
• 命令: grep -E -r -o -a '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|([a-zA-Z0-9][a-zA-Z0-9-]{1,61}.)+[a-zA-Z]{2,}' /path/to/scan 2>/dev/null | sort | uniq -c | sort -nr
• 解析: • grep -E -r -o -a
:递归 (-r
)、扩展正则 (-E
)、只输出匹配部分 (-o
)、处理二进制文件 (-a
)。• 复杂正则: 匹配IPv4地址或域名(简化域名匹配规则)。 • /path/to/scan
:扫描的起始目录(如/
,/var/www
,/tmp
, 用户目录)。• 2>/dev/null
:忽略权限错误。• sort | uniq -c | sort -nr
:排序、统计每个唯一IP/域名出现的次数、按次数降序排列。• 场景: 在Webshell、恶意脚本、配置文件、日志、二进制字符串中查找潜在的C2服务器地址、下载源、外联目标。高频率出现的未知IP/域名需重点排查。 • 注意:资源消耗大! 避免在根目录 /
无限制扫描。精准定位可疑目录后再执行。 结果包含大量合法IP/域名(如配置文件),需结合威胁情报筛选。
• 命令: ip link | grep -i promisc
• 解析: ip link
显示网络接口状态。grep -i promisc
查找处于混杂模式 (PROMISC
) 的接口。• 场景: 网卡处于混杂模式是网络嗅探器(如 tcpdump
,wireshark
,但也可能是恶意嗅探器)运行的典型标志。检查是否有非授权的接口处于此模式。• 注意: 合法管理操作(如网络故障排查)也可能开启。需结合上下文判断。Windows下检测较复杂,通常依赖驱动或专门工具。
• 命令: iptables -vnL --line-numbers
(IPv4) 和ip6tables -vnL --line-numbers
(IPv6)• 解析: • -v
(详细),-n
(数字),-L
(列出规则),--line-numbers
(显示规则编号)。• 查看 INPUT
(入站),OUTPUT
(出站),FORWARD
(转发) 链。• 场景: 检查防火墙规则: • 是否有异常放行规则(如允许外部访问敏感端口)? • 是否有异常屏蔽规则(如阻止连接到安全更新服务器)? • 是否有重定向规则(如 REDIRECT
,DNAT
)将流量导向恶意地址?• 规则编号 ( --line-numbers
) 便于后续删除 (iptables -D <chain> <num>
)。• 注意: 需要root权限。规则可能持久化在配置文件(如 /etc/iptables/rules.v4
),修改后需保存。
• 命令: Get-NetFirewallRule | Where-Object {$_.Enabled -eq $true -and ($_.Direction -eq 'Inbound' -or $_.Direction -eq 'Outbound')} | Format-Table Name, DisplayName, Direction, Action, Profile, Enabled -AutoSize
• 解析: • Get-NetFirewallRule
:获取所有防火墙规则。• Where-Object
:过滤出已启用 (Enabled -eq $true
) 且方向为入站 (Inbound
) 或出站 (Outbound
) 的规则。• Format-Table
:显示规则名称、显示名、方向、动作(允许/阻止)、配置文件(域/专用/公用)、启用状态。• 场景: 检查Windows防火墙是否有异常放行规则(如允许恶意程序出站通信或入站连接)。重点看 Action
为Allow
的规则,尤其是DisplayName
可疑或关联程序路径异常。• 注意: 更详细关联程序需结合 Get-NetFirewallApplicationFilter
或查看规则属性。netsh advfirewall firewall show rule name=all
是命令行替代方案。
• 命令: smbclient -L localhost -U%
(列出本地共享) 和smbstatus
(查看活动连接)• 解析: • smbclient -L localhost -U%
:匿名 (-U%
) 列出本地Samba服务器提供的共享。• smbstatus
:显示当前活动的SMB连接、会话、打开的文件。• 场景: 检查是否有未授权的或异常的SMB共享被创建或访问。攻击者利用SMB进行横向移动、凭证窃取(如Responder攻击)、文件共享投放恶意软件。 • 注意: 需要Samba服务运行。Windows 使用 net share
(查看共享) 和net session
/Get-SmbSession
(查看会话)。
• 命令: rpcinfo -p
(查看注册的RPC程序) 和netstat -tunap | grep rpcbind
(查看rpcbind连接)• 解析: RPC (Remote Procedure Call) 服务易被利用(如 rpc.mountd
,rpc.statd
漏洞)。检查注册的程序是否正常,是否有异常IP连接rpcbind
(端口111)。• 场景: 在老旧系统或未加固系统上,检查RPC服务安全。 • 注意: 现代系统可能较少使用传统RPC。重点检查暴露在网络的RPC服务。
第四部分:文件系统深度追踪与检测 (命令 41-60)
揪出恶意文件,分析其活动痕迹。
41. 目标:全盘查找最近N天内被修改的文件 (Linux)
• 命令: find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f -mtime -<N> -print 2>/dev/null
(例如-mtime -7
找7天内)• 解析: • find /
:从根开始。• -path /proc -prune -o ...
:排除/proc
,/sys
,/dev
。• -type f
:只找文件。• -mtime -<N>
:修改时间在最近<N>
天内的文件。• -print
:打印路径。• 2>/dev/null
:忽略错误。• 场景: 在入侵发生后,缩小调查范围,重点检查攻击窗口期内被篡改或新增的文件(如Webshell、恶意二进制、被修改的配置文件、日志擦除痕迹)。 • 注意:资源消耗大! 时间范围 ( -<N>
) 要尽可能精确。可指定更具体的起始目录(如/var/www
,/home
)。结合-cmin
/-amin
按分钟查找更近期的文件。
• 命令: find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f ( -perm -4000 -o -perm -2000 ) -exec ls -ldb {} ; 2>/dev/null | sort -k 6,7
(按第6、7列即月份日期排序)• 解析: 在命令10的基础上,将结果按 ls -l
输出的时间字段(默认是修改时间mtime
,第6列月份,第7列日期)排序。便于查看最近修改过的SUID/SGID文件。• 场景: 攻击者放置提权后门后,其修改时间可能较新。聚焦最近被修改或新增的可疑SUID/SGID文件。 • 注意: ls -l
时间格式不适合精确时间排序。如需按时间戳排序,可用find ... -printf "%T@ %pn" | sort -n
或find ... -exec stat -c "%Y %n" {} ; | sort -n
(显示时间戳和文件名)。
• 命令 (全局): find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type d ( -perm -0002 -a ! -perm -1000 ) -print 2>/dev/null
(找Sticky bit未设置的世界可写目录)• 命令 (用户级): find /home /root -type d -perm /u=w,g=w,o=w 2>/dev/null
(找用户主目录下用户、组、其他都可写的目录)• 解析: • 全局命令: 查找没有设置Sticky Bit ( ! -perm -1000
) 的世界可写 (-perm -0002
) 目录。这类目录任何用户都可删除/重命名其中的文件,是安全风险。• 用户级命令: 在 /home
和/root
下查找用户(u=w
)、组(g=w
)、其他(o=w
) 三者都可写的目录 (-perm /u=w,g=w,o=w
)。权限过于宽松。• 场景: 攻击者常将恶意文件投放到可写目录(如 /tmp
,/var/tmp
是正常的,但/etc
,/usr/bin
下的可写目录高危)。检查是否有异常位置存在过度宽松的写权限。• 注意: /tmp
和/var/tmp
通常设置了Sticky Bit (t
权限),属正常。关注其他位置。
• 命令: find / -path /proc -prune -o -path /sys -prune -o -path /dev -prune -o -type f -perm /a=x -exec ls -ltb {} + 2>/dev/null | head -n 50
• 解析: • find ... -type f -perm /a=x
:查找任何用户(a
)可执行(x
)的文件。• -exec ls -ltb {} +
:对找到的文件执行ls -ltb
(-l
长格式,-t
按修改时间倒序,-b
转义特殊字符)。+
高效传递多个文件。• 2>/dev/null
:忽略错误。• head -n 50
:显示最近修改的50个可执行文件。• 场景: 快速定位系统中最新添加或修改的可执行文件。恶意软件、后门、工具包通常在入侵过程中被放置或编译。 • 注意: 输出包含大量合法更新文件(如包管理器安装)。需结合路径、文件名、来源判断。指定目录范围(如 /tmp
,/dev/shm
,/var/www
, 用户home
)更有效。
• 命令 (单文件): sha256sum /path/to/file
(SHA-256) 或md5sum /path/to/file
(MD5)• 命令 (目录递归): find /path/to/dir -type f -exec sha256sum {} + > /path/to/baseline.sha256
• 解析: 计算文件的密码学哈希值(SHA-256更抗碰撞推荐,MD5较快)。递归计算目录下所有文件的哈希并保存到基线文件。 • 场景: • 文件验证: 计算可疑文件的哈希,在VirusTotal等威胁情报平台查询。 • 完整性检查: 在系统干净时建立关键目录(如 /bin
,/sbin
,/usr/bin
,/usr/sbin
,/lib
,/lib64
,/etc
, Web根目录)的哈希基线。在应急响应时重新计算并比对 (sha256sum -c baseline.sha256
),找出被篡改或新增的文件。• 注意: 确保基线文件存储在安全、只读的位置。系统更新后基线需重建。
• 命令: grep -E -l -r -a -i 'eval(|base64_decode|shell_exec|passthru|wscript.shell|cmd.exe|powershells+-e' /var/www /home/*/public_html 2>/dev/null
• 解析: • grep -E -l -r -a -i
:扩展正则(-E
)、只输出文件名(-l
)、递归(-r
)、处理二进制(-a
)、忽略大小写(-i
)。• 正则模式: 匹配常见Webshell/PHP后门函数 ( eval(
,base64_decode
)、命令执行函数 (shell_exec
,passthru
)、Windows脚本对象 (wscript.shell
)、命令行程序 (cmd.exe
)、混淆的PowerShell (powershells+-e
)。这是示例库,需根据实际威胁更新!• /var/www /home/*/public_html
:Web应用常见目录。• 2>/dev/null
:忽略错误。• 场景:快速筛查Web目录中潜在的Webshell或恶意脚本。基于已知的攻击特征。 • 注意: 存在误报(合法代码也可能使用这些函数)。匹配到的文件需要人工复核或进一步分析(如结合文件修改时间、HASH、文件权限)。调整搜索目录和特征库。
• 命令: find /tmp /var/tmp /dev/shm /home /var/www -type f ( -name "*.php" -o -name "*.jsp" -o -name "*.war" -o -name "*.py" -o -name "*.pl" -o -name "*.sh" -o -name "*.exe" -o -name "*.dll" -o -name "*.scr" -o -name "*.vbs" -o -name "*.js" -o -name "*.lnk" -o -name "[a-z0-9]{12,}" ) 2>/dev/null
• 解析: • find ... -type f
:在常见临时目录、用户目录、Web目录查找文件。• ( ... )
:指定多个-name
条件(-o
表示OR)。包含:• 常见Web/脚本扩展名 ( *.php
,*.jsp
,*.war
,*.py
,*.pl
,*.sh
,*.js
)。• Windows可执行/库文件 ( *.exe
,*.dll
,*.scr
- 屏保常被利用)。• Windows脚本 ( *.vbs
)。• 快捷方式 ( *.lnk
- 可能用于钓鱼)。• 长随机文件名模式 ( [a-z0-9]{12,}
- 12位以上小写字母数字组合,常见于恶意软件)。• 场景: 基于文件命名特征进行快速筛查。攻击者常用随机名、伪装扩展名(如 document.pdf.exe
)、或特定扩展名的文件。• 注意: 结果包含大量合法文件,需结合其他线索(路径、时间、大小、HASH)判断。模式 ( -name
) 可灵活调整。
• 命令: lsof +L1
或lsof | grep -i deleted
• 解析: lsof
列出打开的文件。+L1
显示链接数小于1的文件(通常是被删除但仍被打开的文件)。grep -i deleted
直接查找标记为deleted
的文件项。• 场景: 攻击者可能删除正在运行的恶意程序或其日志文件以隐藏踪迹。这些文件内容仍驻留在磁盘上,只要进程不结束,可通过 /proc/<pid>/fd/<fd>
恢复(如cp /proc/1234/fd/3 /tmp/recovered_file
)。• 注意: 需要root权限查看所有进程。恢复需及时(进程退出后文件空间可能被重用)。
• 命令: diff -rq /path/clean_backup /path/current_system | grep -vE '.log$|.cache|.swp$'
(忽略日志、缓存、swap文件)• 解析: • diff -rq
:递归 (-r
) 比较目录,只报告不同 (-q
),不显示具体差异。• /path/clean_backup /path/current_system
:干净的备份目录 和 需要检查的当前目录。• grep -vE ...
:排除 (-v
) 扩展名为.log
,.cache
,.swp
的文件(这些文件变化频繁且通常不重要)。• 场景: 如果有系统干净时的备份,快速比对关键目录(如 /bin
,/sbin
,/usr
,/etc
,/lib
),找出被篡改、新增或删除的文件。• 注意: 备份必须来自相同版本/配置的系统,且在入侵前创建。 -q
只报告差异文件,如需细节用diff -r
。
• 命令: Get-CimInstance Win32_StartupCommand | Select-Object Name, command, Location, User | Format-Table -AutoSize
(传统启动文件夹) +Get-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRun', 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRunOnce', 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun', 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRunOnce' | Select-Object -Property PSChildName, @{n="Command"; e={$_.'(default)'}} | Format-Table -AutoSize
• 解析: • 第一部分 ( Get-CimInstance Win32_StartupCommand
): 枚举传统“启动”文件夹 (C:ProgramDataMicrosoftWindowsStart MenuProgramsStartup
,C:Users<user>AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
) 中的快捷方式。• 第二部分 ( Get-ItemProperty ...
): 查询关键的注册表自动启动项:• HKLM...Run
/RunOnce
:系统级(所有用户)• HKCU...Run
/RunOnce
:当前用户级• 提取注册表项名称 ( PSChildName
) 和其默认值(即执行的命令Command
)。• 场景:Windows持久化检查核心。 查找通过注册表或启动文件夹实现自启动的可疑程序。检查命令路径、参数是否异常。 • 注意: 需要管理员权限查看所有用户。 schtasks
(计划任务) 和 服务 (Get-Service
) 也是重要持久化位置(见命令9, 7)。
• 权限: 绝大多数命令需管理员 ( root
/Administrator
) 权限。• 理解: 彻底理解命令作用后再执行,尤其涉及修改、删除、终止操作的命令。“三思而后敲回车”。 • 备份: 关键操作前备份配置、日志、可疑文件。 • 环境: 命令细节因OS版本、工具包、配置而异,在安全环境中预演。 • 组合:管道 ( |
)、重定向 (>
)、文本处理 (grep
,awk
,sed
,sort
,uniq
,findstr
,Select-Object
) 是构建高效命令的灵魂。• 输出: 命令是起点,深刻解读输出内容才是得出正确结论的关键。结合上下文关联分析。 • 工具链: 构建自己的便携工具包(静态: yara
,clamav
;动态:tcpdump
,sysinternals suite
;分析:jq
,volatility
)。• 持续学习: 攻击技术日新月异,命令和狩猎策略需不断更新迭代。
此手册旨在成为HW行动与应急响应中的强力参考,助您快速定位威胁、控制损失、溯源分析。请结合实战经验灵活运用,并不断补充完善你的专属武器库。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...