从主机上找出「它藏在哪」——账户、进程、端口、启动项、计划任务、服务六个藏身处挨个翻
📌 来源声明|本文为学习笔记整理,非原创 主体内容整理自 CSDN 博主 @一只枷锁 的两篇 HW 系列文章,原文链接:
-
《【HW系列】—溯源与定位—Windows入侵排查》 【HW系列】—溯源与定位—Windows入侵排查_d盾是沙箱么-CSDN博客(对应第一章)
-
《【HW系列】—溯源与定位—Linux入侵排查》 【HW系列】—溯源与定位—Linux入侵排查_linux攻击溯源-CSDN博客(对应第二章)
另补充了公开应急响应资料中的排查顺序、Rootkit 检测与 auditd 用法(补充处标 💡,修正处标 ⚠️)。 感谢原作者分享,如有侵权请联系删除。
🧭 导读:这篇解决什么问题
第二篇告诉你"攻击者什么时候进来的",这一篇回答两个更硬的问题:
它把东西藏在哪了? —— 账户、进程、端口、启动项、计划任务、服务,六个藏身处挨个翻
它到底是谁? —— 威胁情报、IP 定位、端口扫描、社工拓线的溯源四板斧
阅读主线:
第一章 · Windows 排查 ── 六个藏身处 + 溯源心法
↓
第二章 · Linux 排查 ── 同样的思路换成 Linux 的玩法 + 溯源四板斧
📑 目录
| 一 | Windows 入侵排查 | 应急响应分类与十二步流程;隐藏/影子/克隆账户识别;进程伪装四步走;IFEO 镜像劫持 |
| 二 | Linux 入侵排查与溯源 | /etc/passwd 七段式与 UID=0 排查;Rootkit 与 Webshell 检测;溯源四板斧 |
⚠️ 合规前提:本文命令仅用于自有资产排查、护网值守与授权应急响应。 顺序很重要:先取证(内存、进程、连接),再清理。直接杀进程会丢失攻击者最关键的痕迹。
📕 第一章 · Windows 入侵排查
📌 本章整理自文章 《【HW系列】—溯源与定位—Windows入侵排查》(CSDN @一只枷锁)。 它是第 03 篇的实战续篇:日志告诉你"什么时候进来的",本章回答"它现在藏在哪"——账户、进程、端口、启动项、计划任务、服务,六个藏身处挨个翻。
一句话概括:入侵排查就是"翻 six 个藏身处 + 顺一条攻击链"。 恶意代码会换皮、换名、换目录,但它必须落在"账户 / 进程 / 端口 / 启动项 / 计划任务 / 服务"这六个持久化位置之一——这就是排查清单化的底气。
🗺️ 〇、本章速览
| 1 | 应急响应总览 | 三类事件分类 · 十二步排查流程图 |
| 2 | 账户排查 | 正常 vs 黑客账户对照 · 隐藏/影子/克隆账户三步识别与清除 |
| 3 | 端口与进程 | netstat 高级用法 · 进程伪装特征 · 四款工具对比 |
| 4 | 启动项 | 注册表 Run · 自启动文件夹 · IFEO 镜像劫持 |
| 5 | 计划任务与服务 | 检测命令 · 恶意任务/服务的识别特征 |
🧭 一、应急响应总览
1.1 常见应急响应事件分类
| Web 入侵 | 网页挂马、主页篡改、Webshell 后门 | 异常 HTTP 请求、未授权文件上传、代码注入日志 |
| 系统入侵 | 病毒木马、勒索软件、远控后门、RDP/SSH 爆破 | 高 CPU 占用、异常进程、可疑登录事件 |
| 网络攻击 | DDoS 攻击、DNS 劫持、ARP 欺骗、钓鱼邮件 | 流量突增、域名解析异常、内网 ARP 欺骗告警 |
💡 分类决定排查路线:Web 入侵先翻 中间件日志(第 02 篇),系统入侵做主机侧排查(本章),网络攻击看流量与 DNS(第 01 篇)。先定性,再动手。
1.2 入侵排查流程(十二步)
启动应急响应 → 信息收集 → 系统账号与日志 → 端口与进程 → 启动项与服务
→ 发现异常账户/登录 → 定位恶意进程/连接 → 识别恶意自启动
→ 关联分析攻击链 → 清除恶意组件 → 系统加固与恢复 → 输出报告
流程说明(原文):
信息收集:快速抓取账号、进程、日志等关键数据;
异常检测:聚焦隐藏账户、高危端口、无签名进程;
攻击链还原:关联日志(如事件 ID 4625 爆破记录)与文件痕迹;
清除与加固:删除后门 + 修补漏洞 + 强化策略。
⚠️ 原文开篇还有一句大实话,值得放进流程图旁边: "实在不会手动,打开一个杀毒软件,全盘扫描。" 排查清单是给"有线索、要溯源"的场景用的;如果只是客户一句"电脑感觉不对劲",先全盘扫描兜底,再决定要不要深挖。
👤 二、账户安全排查
2.1 正常账户 vs 黑客账户
| 命名规则 | 符合企业规范(如姓名缩写) | 随机字符串(如 $backup)、仿系统名(svchost1) |
| 所属组 | Users 组、受限权限 | Administrators 组、SYSTEM 权限 |
| 登录行为 | 工作时间段、固定 IP | 凌晨登录、境外 IP、高频失败尝试 |
| 隐藏性 | 账户可见于 lusrmgr.msc | 注册表隐藏、克隆合法账户 SID |
💡 四个维度对应四种排查手段:看名字 → 看权限 → 看登录日志(第 03 篇的 4624/4625)→ 看注册表。第四种最难查,就是下面的影子账户。
2.2 自启动与账户的快速排查
启动位置:
注册表:HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
计划任务:schtasks /query /fo LIST (检查异常脚本路径)
服务: sc query state=all (筛选未知服务)
检测工具:D 盾 —— 检测伪装成系统服务的恶意进程。
2.3 隐藏账户与影子账户排查(核心)
背景(笔记补充):net user 看不到以 $ 结尾的账户(如 admin$),这就是"隐藏账户"; 影子账户更隐蔽——把一个普通账户在注册表里的 F 值(权限指纹)改成 Administrator 的,lusrmgr.msc 里看到的是普通账户,实际权限却是管理员。
步骤 1:注册表深度检测
打开 SAM 注册表路径(需先给 Administrators 赋读取权限):
regedit → HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users
检查 Names 项:对比本地用户列表,发现/删除未知账户键值
步骤 2:克隆账户识别
:: 使用 D 盾工具 → "账户克隆"检测功能
:: 或手动比对注册表 F 值:
reg query "HKLM\\SAM\\SAM\\Domains\\Account\\Users\\000001F4" /v F :: 管理员正常 F 值
reg query "HKLM\\SAM\\SAM\\Domains\\Account\\Users\\<可疑SID>" /v F :: 不一致则为克隆
💡 笔记补充:000001F4 是十六进制的 RID 500 = 内置 Administrator。 影子账户的原理就是把可疑 SID 的 F 值改成 000001F4 的 F 值——F 值相同 = 权限相同,所以比对 F 值就能揪出克隆。
步骤 3:日志关联分析
# 筛选异常登录事件(重点:RDP 登录)
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4624} |
Where-Object { $_.Properties[8].Value -eq 10 } | # LogonType=10(RDP)
Select-Object TimeCreated, @{n='User';e={$_.Properties[5].Value}}, @{n='IP';e={$_.Properties[18].Value}}
步骤 4:强制清除
net user <隐藏账户名> /delete :: 先尝试常规删除
wmic useraccount where "name='<隐藏账户名>'" delete :: WMIC 强制删除
⚠️ 笔记提醒:WMIC 在新版 Windows 已弃用,替代方案:
Remove-LocalUser -Name "<隐藏账户名>"
且影子账户必须删注册表键值才删得干净——net user 删不掉注册表里已"断链"的影子账户残留。
🔌 三、异常端口与进程排查
3.1 端口与连接排查
netstat 高级用法:
netstat -ano | findstr ESTABLISHED :: 筛选活跃连接
netstat -anob :: 显示关联进程及路径(需管理员权限)
协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 37464
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 2032
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 6744
TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 6744
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 114548
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 13632
TCP 0.0.0.0:6850 0.0.0.0:0 LISTENING 27544
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 12096
TCP 0.0.0.0:9012 0.0.0.0:0 LISTENING 12672
TCP 0.0.0.0:9013 0.0.0.0:0 LISTENING 12672
TCP 0.0.0.0:27036 0.0.0.0:0 LISTENING 24072
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 1772
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 1688
TCP 0.0.0.0:49670 0.0.0.0:0 LISTENING 2560
关键分析点(原文):
-
异常外部 IP(尤其境外 IP)、非常用端口(如 55555)、无签名进程的端口占用;
-
结合 tasklist | findstr "PID" 定位进程。
图形化工具:D 盾 —— 查看端口-进程映射,识别无签名进程。
💡 笔记补充读法:0.0.0.0:xxx 是本机监听,重点看 ESTABLISHED 且对端是陌生外网 IP 的行——那才是"活着的外联"。 另外 445(PID 4 = System,SMB)、3306(MySQL)这类能对上业务的端口直接跳过,对不上业务的端口才是嫌疑人。
3.2 进程排查
进程伪装特征(原文):
① 名称仿系统进程:svch0st.exe(0 代替 o)、explore.exe(少了 r)
② 路径位于非系统目录:如 C:\\Windows\\Temp\\
💡 判别心法:真 svchost.exe 只会在 C:\\Windows\\System32。名字对、路径不对 = 伪装;路径对、名字拼错 = 伪装。两个维度一起看。
四款工具对比
| 任务管理器 | 检查 CPU/内存占用率 > 90%、无描述/属主信息的进程 | 基础异常进程识别 |
| D 盾进程查看 | 关注无数字签名、路径异常(如 Temp 目录)的进程 | 签名验证 + 路径合法性 |
| Process Explorer | 分析进程树,检测子进程注入(如 explorer.exe 加载异常 DLL) | 进程血缘关系追踪 |
| 微步云沙箱 | 上传可疑进程文件,检测恶意行为(如远控、挖矿) | 云端动态行为分析 |
💡 工具的分工:任务管理器捞、D 盾验、Process Explorer 追血缘、沙箱定谳。 其中"进程血缘"最值钱:正常 svchost.exe 父进程是 services.exe,如果是 Word 拉起来的 cmd.exe 再拉 powershell.exe,血缘链本身就是实锤。
🚀 四、启动项深度排查
4.1 注册表启动项
检查关键路径(需管理员权限):
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce
异常特征(原文):
-
指向非常见路径(如 .bat 脚本、临时目录);
-
键值名称伪装(如 "Windows Update");
-
发现可疑程序 → 丢到沙箱测一测。
4.2 用户自启动文件夹
shell:startup :: 当前用户启动项(%AppData%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup)
shell:common startup :: 所有用户启动项
排查点:非业务程序快捷方式、异常脚本文件。 (在"运行"框直接输入 shell:startup 即可跳转。)
4.3 镜像劫持(IFEO)
检查注册表路径:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options
劫持特征:合法程序(如 taskmgr.exe)被重定向到恶意路径。
💡 原理(笔记补充):IFEO 本是给调试器用的——在目标程序名下写一个 Debugger 键值后,每次运行该程序都会先启动 Debugger 指向的程序。 攻击者利用它做两件事:劫持杀软/任务管理器(你一点开就被顶掉)和借合法程序名执行恶意代码。 排查点:正常软件几乎不会在 IFEO 下留键值,这个目录里有 Debugger 键值的基本都是劫持。
⏰ 五、计划任务排查
检测方法:
schtasks /query /fo LIST /v :: 查看详细任务属性
Get-ScheduledTask | Where State -eq "Ready" | Format-Table TaskName, Actions
图形界面:control schedtasks → 检查可疑任务(如随机命名、高频触发)。
恶意任务特征(原文):
| 触发条件 | 系统启动/空闲时执行、每分钟触发(/sc minute /mo 1) |
| 操作路径 | 指向非常规目录(如 C:\\PowerShell.exe) |
| 运行身份 | SYSTEM 或高权限账户 |
💡 C:\\PowerShell.exe 这种例子值得记住:PowerShell 真身在 System32\\WindowsPowerShell\\v1.0\\,根目录出现副本 = 掉包。和进程排查一个道理——路径不对,名字再对也是假的。
⚙️ 六、异常服务排查
检测步骤:
sc query state= all :: 查看所有服务状态
sc qc "服务名" :: 查看服务依赖关系
Get-WmiObject Win32_Service | Where {$_.StartMode -eq "Auto"} :: 筛选自启动服务
重点排查项(原文):
-
无描述/公司名的服务;
-
二进制路径指向临时目录(如 C:\\Windows\\Temp\\);
-
服务名称与显示名称不一致(如伪装成 "Windows Update Service")。
依赖服务分析:sc qc "服务名" —— 异常现象:依赖不存在服务、或循环依赖。
⚠️ 笔记提醒:Get-WmiObject 基于 WMI,新版系统正被淘汰,替代写法:
Get-CimInstance Win32_Service | Where StartMode -eq "Auto"
🧭 六-B、笔记补充:应急响应的第一原则是「定性」
前面 1.1 给了事件分类表,这里补一张「现象 → 定性 → 查什么」的对照表,接到告警时按图索骥:
| Web 入侵 | 网页挂马、主页被篡改、Webshell | 网站目录 + 中间件日志(第二篇第一章) | 攻击是从 HTTP/HTTPS 端口进来的 |
| 系统入侵 | CPU 异常飙高(挖矿)、陌生进程、RDP/SSH 爆破成功 | 进程、账户、系统日志(第二篇第二章) | 攻击者已拿到主机控制权 |
| 网络攻击 | 网速骤降、域名被劫持、内网 ARP 告警 | 防火墙 / 路由器 / DNS / 邮件网关 | 攻击者没进主机,是在传输路上搞破坏 |
💡 为什么"定性"排第一 定性错了,后面全白干。把 DDoS 当入侵去查进程,把 Webshell 当病毒去杀毒——方向错了越努力越糟。 定性之后再决定取证对象,这是应急响应和"随便点点"的分界线。
👤 六-C、笔记补充:揪出后门账户的「四看」口诀
前面 2.1 给了对照表,这里压缩成能背下来的四句:
| ① 看名字 | net user + 注册表 SAM 比对 | 带 $ 的隐藏账户(命令行默认看不见)、乱码名、伪装名($backup、svchost1) |
| ② 看权限 | 查 Administrators 组成员 | 不认识的账号在管理员组里(黑客建号必给自己最高权限) |
| ③ 看时间 | 事件查看器查该账号的 4624 | 凌晨登录、境外 IP、登录前有高频 4625 失败 |
| ④ 用工具 | D 盾 / 微步 / 注册表 SAM 原始数据 | 系统面板被篡改时,图形界面不可信,必须看原始数据 |
💡 两个补充原理
-
$ 结尾的账户为什么"隐身":Windows 约定以 $ 结尾的是计算机账户/服务账户,net user 默认不列出。攻击者正是利用这一点。
-
克隆账户的本质:把可疑 SID 的注册表 F 值改成内置 Administrator 的 F 值(000001F4 = 十六进制 RID 500)。F 值相同 = 权限相同,系统在权限判定上就"认脸不认人"了。
🔬 六-D、笔记补充:恶意进程排查「四步走」
前面 3.2 列了工具,这里给一条从浅到深的操作顺序(别一上来就传沙箱):
① 一眼看 任务管理器:谁 CPU/内存异常高?谁没有描述和发行商?
↓ 发现可疑
② 二路看 D 盾:有没有数字签名?路径对不对?
↓ 路径/签名可疑
③ 查户口 Process Explorer:看进程树(谁生出了谁)+ 查 DLL 注入
↓ 仍拿不准
④ 送外检 微步/云沙箱:隔离环境跑一遍,看它连什么、改什么
| ① 任务管理器 | 资源占用异常、无描述/无发行商 | 挖矿木马(CPU 长期 90%+) |
| ② D 盾 | 无数字签名、路径在 Temp / 回收站 / AppData | 从临时目录启动的马 |
| ③ Process Explorer | 父进程不对(svchost.exe 的爹不是 services.exe)、explorer.exe 加载陌生 DLL | 进程伪装、DLL 注入 |
| ④ 沙箱 | 连接 C2、加密文件、创建计划任务 | 定性并产出 IOC |
💡 进程树为什么这么重要 正常 svchost.exe 一定由 services.exe 启动。如果它爹是 Word 或浏览器——这就是伪装的间谍。 攻击者可以改进程名,但改不了"谁启动了它"这条血缘关系。
🧰 六-E、笔记补充:别忘了 Autoruns 和 WMI
前面四、五、六章分别手工翻了注册表 Run、计划任务、服务。效率更高的做法是用 Sysinternals 的 Autoruns 一键枚举全部持久化点——它覆盖的启动位置远比手工翻的全(包括 IE 插件、驱动、Winsock 提供者、映像劫持等)。
⚠️ 一个 Autoruns 也扫不到的角落:WMI 事件订阅 __EventFilter + __EventConsumer + __FilterToConsumerBinding 三件套可以做到无文件、无注册表、无服务的持久化,只在满足条件(如特定时间、特定进程启动)时触发。 常规启动项检查看不到它,必须单独查:
Get-WMIObject -Namespace root\\Subscription -Class __EventFilter
Get-WMIObject -Namespace root\\Subscription -Class __FilterToConsumerBinding
Get-WMIObject -Namespace root\\Subscription -Class __CommandLineEventConsumer
🧾 七、本章总结
7.1 十条要点
先定性再动手:Web 入侵翻中间件日志、系统入侵做主机排查、网络攻击看流量——三篇笔记正好各管一线。
排查就是翻六个藏身处:账户、进程/端口、启动项、计划任务、服务——恶意代码想活下来,逃不出这几处。
黑客账户四个破绽:名字怪、权限高、登录时间/地点不对、想隐藏。
隐藏账户认 $ 结尾:net user 看不到,要到 HKLM\\SAM\\SAM\\Domains\\Account\\Users\\Names 里对。
克隆账户比 F 值:000001F4(RID 500 = Administrator)的 F 值是基准,相同即克隆;D 盾可自动检测。
删影子账户要删注册表:net user /delete 清不掉注册表残留;WMIC 已弃用,用 Remove-LocalUser。
进程看"名字 + 路径 + 签名 + 血缘":svch0st.exe、C:\\Windows\\Temp\\、无签名、services.exe 以外的爹——中一条就可疑。
IFEO 是最容易被漏的持久化点:Image File Execution Options 下出现 Debugger 键值基本就是劫持,专坑杀软和任务管理器。
计划任务盯三个特征:高频触发、路径非常规、SYSTEM 身份。
服务的判据也是路径:二进制指向 Temp 临时目录、无描述无公司名、名称与显示名不一致,再加一条——依赖不存在的服务。
7.2 命令速查卡
| 活跃外联连接 | netstat -ano \\| findstr ESTABLISHED |
| 连接关联进程(需管理员) | netstat -anob |
| PID 定位进程 | tasklist \\| findstr "PID" |
| 隐藏账户注册表 | HKLM\\SAM\\SAM\\Domains\\Account\\Users |
| 克隆比对 | reg query "HKLM\\SAM\\…\\Users\\000001F4" /v F |
| 强制删账户 | Remove-LocalUser -Name "xxx" |
| 计划任务详查 | schtasks /query /fo LIST /v |
| 自启动服务 | Get-CimInstance Win32_Service \\| Where StartMode -eq "Auto" |
| 服务依赖 | sc qc "服务名" |
| 启动文件夹 | shell:startup / shell:common startup |
7.3 一句话收尾
溯源查日志回答"发生了什么",入侵排查回答"它现在还在不在"。 六个藏身处翻完没有,比任何工具的"一键体检"都可靠——因为清单不会漏,而人会。
7.4 工具与资料
| D 盾 | 账户克隆检测、Webshell 查杀、进程/端口映射(免费) |
| 微步云沙箱 | s.threatbook.com,可疑文件云端动态行为分析 |
| Process Explorer | Sysinternals 出品,进程树/血缘追踪 |
| Autoruns(笔记补充) | Sysinternals 出品,一键枚举全部持久化点(含 IFEO/计划任务/服务),比手工翻注册表快得多 |
| 原文 | shining.blog.csdn.net/article/details/148354778 |
📕 第二章 · Linux 入侵排查与溯源
📌 本章整理自文章 《【HW系列】—溯源与定位—Linux入侵排查》(CSDN @一只枷锁)。 它是第 04 篇的 Linux 版:同样的六个藏身处换成 Linux 的玩法——/etc/passwd、UID=0、/proc、iptables——后半篇再往上走一层:从"排查主机"到"溯源攻击者"。
一句话概括:Windows 排查靠"注册表一家亲",Linux 排查靠"/etc + /proc 两兄弟"。 一切账户信息在 /etc/passwd,一切进程真相在 /proc——两个目录翻干净,Linux 的藏身处就覆盖了大半。
🗺️ 〇、本章速览
| 1 | 账户安全 | /etc/passwd 七段式全解 · UID=0 特权排查 · sudo 审查 · 锁定与删除 |
| 2 | 历史命令 | .*_history 读取 + history 的反取证陷阱 |
| 3 | 端口与进程 | netstat/ss/lsof 三件套 · /proc 深挖 · 隐藏进程比对 · Rootkit 检测 |
| 4 | 溯源分析 | 威胁情报 · IP 定位 · 端口扫描 · 社工四板斧 + 联动框架 |
🐧 一、Linux 入侵排查
1.1 账户安全
① 用户信息文件 /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh ← UID=0 的只有 root
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
…
七段式格式:account:password:UID:GID:GECOS:directory:shell
| 用户名 | account | 系统登录标识 | root、www-data |
| 密码 | password | x 表示密码占位符(实际密码存 /etc/shadow) | 普通用户无权查看加密密码 |
| 用户 ID | UID | 用户唯一标识(0 为 root,1–999 系统用户,1000+ 普通用户) | root 的 UID=0 |
| 组 ID | GID | 用户主组的标识号 | 同 /etc/group 中的组 ID 对应 |
| 用户说明 | GECOS | 用户备注信息(如全名、联系方式) | 可留空 |
| 家目录 | directory | 用户专属存储路径 | root → /root;普通用户 → /home/用户名;服务用户 → /var/www |
| 登录 Shell | shell | 用户登录后默认使用的命令解释器 | /bin/bash、/bin/zsh、/usr/sbin/nologin |
示例数据表(三行看懂三类账户):
| root | 0 | /root | /bin/bash | 超级管理员 |
| alice | 1000 | /home/alice | /bin/zsh | 普通用户 |
| www-data | 33 | /var/www | /usr/sbin/nologin | 服务用户 |
文件规则速记(转录自原文图片):
| 文件权限 | /etc/passwd 所有用户可读,仅 root 可修改 |
| 禁止登录 | Shell 为 /usr/sbin/nologin 时:无法图形界面/SSH 登录、无法 su 切换(常见于 www-data 等服务账户) |
| 家目录规范 | root → /root;普通可登录用户 → /home/用户名;服务用户 → 专属目录(www-data → /var/www) |
| 常见登录 Shell | /bin/bash、/bin/zsh、/bin/sh、/usr/bin/bash(带前缀路径) |
排查思路:是否存在可疑用户——除了 root 以外,是否还有 UID=0 的用户。
② 特权用户排查(UID=0)
awk -F: '($3 == 0) {print $1}' /etc/passwd # 列出所有 UID=0 的用户
分析重点:
-
除 root 外,若存在其他 UID=0 账户(如 toor、admin 等),立即锁定并调查;
-
攻击者常创建隐藏特权账户维持权限。
验证账户合法性:
grep '用户名' /etc/passwd # 检查账户 Shell、家目录等属性
ls -l /home/用户名 # 确认家目录是否存在异常文件
可疑特征(原文):
-
Shell 为 /sbin/nologin 却可登录;
-
家目录含非常规隐藏文件(如 .ssh/authorized_keys 中出现异常公钥——那就是免密后门)。
③ sudo 权限审查
# 提取非 root 的 sudo 用户
grep -v '^#\\|^root' /etc/sudoers | grep 'ALL=(ALL)'
# 审计 sudo 命令执行记录
grep sudo /var/log/auth.log
风险点:
-
普通业务账户不应拥有 ALL=(ALL) 权限,需按最小权限原则调整;
-
聚焦非运维时段或异常命令(如 sudo su -、sudo vim /etc/passwd——用 vim 直接改账户文件,意图明显)。
④ 账户管理操作
# 操作前务必备份
cp -p /etc/passwd /etc/passwd.bak
cp -p /etc/shadow /etc/shadow.bak
# 锁定可疑账户
usermod -L 用户名 # 锁定(/etc/shadow 密码栏首加 !)
passwd -l 用户名 # 等效命令
# 彻底删除账户
userdel -r 用户名 # 删除账户并移除家目录
⚠️ 笔记补充:usermod -L 只锁了密码登录,SSH 公钥登录不受影响——如果 .ssh/authorized_keys 里有攻击者的公钥,锁定账户也拦不住。清后门时必须连公钥一起删。
1.2 查看历史命令
cat /root/.*_history | more
📌 下图为原文示例(已用图像识别转录):
q / sdadad / q
ls / ls / / ls -a / ls -l
cd desktop / cd Desktop / ls -l
exit
cp /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list
apt clean
…
主要分析恶意操作:下载命令(wget/curl)、编译执行、改配置、删日志。
⚠️ 笔记补充:history 有三个反取证陷阱,排查时别把"没有记录"当"没做过":
bash 默认退出时才写入 history 文件——会话还在时内存里有、文件里没有;
攻击者可 unset HISTFILE / HISTSIZE=0 / history -c 直接不留痕;
靠谱的替代是 auditd(内核级审计),不依赖 shell 配合。 另外 .*_history 只翻了 root,每个用户家目录都要翻一遍(/home/*/.bash_history)。
1.3 异常端口与进程
① 端口排查
netstat -anltup
📌 下图为原文示例(已用图像识别转录):
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1032/sshd: /usr/sbi
tcp 0 0 192.168.234.128:54162 34.107.243.93:443 ESTABLISHED 2017/firefox-esr
tcp6 0 0 :::22 :::* LISTEN 1032/sshd: /usr/sbi
udp 0 0 192.168.234.128:68 192.168.234.254:67 ESTABLISHED 755/NetworkManager
常用命令(转录自原文图片):
| netstat -tulnp | 查看所有 TCP/UDP 监听端口及关联进程 | -t(TCP) -u(UDP) -l(监听) -n(数字格式) -p(显示 PID) |
| ss -tunlp | 更高效的替代命令(推荐) | 参数同 netstat,性能更优 |
| lsof -i :端口号 | 精准定位占用端口的进程 | 输出进程名、PID、用户及文件描述符 |
检测端口占用:
sudo ss -tunlp | grep ':80'
sudo lsof -i :80
异常端口特征(原文):
-
非常用端口监听(如 10000 以上随机端口);
-
外部 IP 连接(netstat -anp | grep ESTABLISHED);
-
无关联进程或进程名异常(如 [deleted] 提示——可能为无文件进程)。
防火墙与网络配置:
sudo iptables -L -n # 查看 iptables 规则
sudo firewall-cmd –list-all # firewalld 规则(CentOS/RHEL)
telnet 目标IP 端口号 # 测试 TCP 端口
nc -zv 目标IP 端口号 # 快速检测(推荐)
💡 笔记补充:防火墙规则本身也要审——攻击者拿到 root 后会加一条放行规则给自己留门(如放行 8888 端口)。iptables -L -n 里出现"业务说不出名堂"的放行条目,就是线索。
② 进程排查
基础进程分析(转录自原文图片):
| ps aux –forest | 显示进程树(识别异常父子关系) |
| top / htop | 实时监控资源占用(CPU/内存排序) |
| pstree | 树状图展示进程层级 |
深度进程检查:
# 检查进程真实路径(若返回 "deleted" 可能为恶意进程)
ls -l /proc/<PID>/exe
# 查看启动命令及参数
cat /proc/<PID>/cmdline
隐藏进程检测(对比 ps 与 /proc 的差异):
ps -ef | awk '{print $2}' | sort -n > ps_pids.txt
ls /proc | grep -E '^[0-9]+$' | sort -n > proc_pids.txt
diff ps_pids.txt proc_pids.txt # 差异项可能是隐藏进程
💡 原理(笔记补充):ps 读的是系统调用返回,/proc 是内核直接暴露的真实进程表。 Loadable Kernel Module(LKM)Rootkit 挂钩系统调用后,ps 看不到的进程在 /proc 里仍在——两边一 diff 就现形。这也是下文 unhide proc 的原理。
Rootkit 检测:
sudo chkrootkit # 扫描常见后门
sudo unhide proc # 专查隐藏进程
🔎 二、溯源分析
📌 前半篇回答"主机哪里脏了",这一章回答"脏是谁弄的"——四板斧从痕迹走向身份。
2.1 威胁情报(Threat Intelligence)
定义:通过收集、分析网络攻击数据(IP、域名、恶意文件哈希等),形成可行动的威胁信息。核心价值:把碎片化攻击痕迹转化为攻击者画像、战术链条和防御策略。
主流平台:
| 奇安信威胁情报中心 | https://ti.qianxin.com/ | APT 组织追踪、攻击链路还原、AI 驱动分析 |
| 微步在线 ThreatBook | https://x.threatbook.com/ | 暗网监控、ATT&CK 战术匹配、多维度拓线分析 |
| 腾讯安全威胁情报中心 | https://tix.qq.com/ | 基础情报 + 业务情报整合、IOC 研判 |
✅ 应用场景:快速研判恶意 IP、分析钓鱼邮件来源、关联 APT 攻击团伙活动。
2.2 IP 定位(IP Geolocation)
ASN 定位(自治系统号定位):通过 ASN(如 AS4538)关联 IP 所属运营商及地理区域(例:中国教育网覆盖高校范围)。
whois 58.192.55.255 # 查看 ASN 及归属机构
公开定位接口(转录自原文图片):
| 埃文科技 | https://www.ipuu.net/ | 公安版 ≤200 米 |
| IP138 | https://www.ip138.com/ | 城市级 |
| MaxMind | https://www.maxmind.com/ | 国家/城市级 |
⚠️ 原文提醒:境外 IP 定位精度受限,国内接口对本土 IP 支持更优。 笔记补充:溯源时 IP 本身只是线索——代理、VPN、跳板机会让"IP 归属地"完全失真,定位结果只能当参考,不能当结论。
2.3 端口扫描(Port Scanning)
作用:探测主机开放端口,识别潜在服务漏洞(如未授权的 Redis 端口 6379)。
常用工具:
nmap -sV 192.168.1.1 # 综合扫描:检测服务版本
masscan # 高速全网扫描,适用于大规模资产普查
防御关联:结合威胁情报平台(如微步在线),将扫描发现的异常 IP 与黑名单库比对,快速判定风险。
⚠️ 合规边界(笔记强调):nmap/masscan 属主动探测,只能用于自有资产或取得书面授权的目标。护网场景下它是蓝队的"自查工具"——扫自己的资产找 6379 未授权这类低级失误,而不是去扫别人。
2.4 社会工程学(Social Engineering)
攻击原理:利用人性弱点(信任、好奇、恐惧)诱骗泄露信息或执行恶意操作——非技术性突破防线的典型手段。
溯源常用渠道(原文):
| 注册网站检测 | https://www.reg007.com/search | 用手机号/邮箱反查注册过哪些网站 |
| 网站历史 | https://archive.org/web/ | 网页历史快照,找攻击者删掉的信息 |
| 社交软件 | https://checkusernames.com/ | 用户名在各平台的占用情况(拓线) |
| 社交媒体 | 各类社交平台 | 身份画像、活动轨迹 |
常见手法与防御(转录自原文图片):
| 钓鱼邮件 | 伪装成 IT 部门要求"密码重置" | 验证发件人域名、禁用自动加载远程内容 |
| 伪装技术支持 | 声称"系统故障"诱导安装远控软件 | 拒绝外部主动协助,联系内部确认 |
| 尾随进入 | 冒充访客混入办公区窃取数据 | 严格执行门禁刷卡制度 |
💡 溯源应用(原文): 分析钓鱼邮件头获取发送 IP → 结合威胁情报定位攻击团伙 → 关联历史攻击模式。
2.5 溯源技术联动框架
端口扫描发现异常IP ──▶ 威胁情报比对
│
┌───────────┴───────────┐
▼ ▼
命中黑名单 未知 IP
│ │
▼ ▼
IP定位 → 物理地址 社会工程学线索分析
│ │
└───────────┬───────────┘
▼
攻击者画像:身份/工具/意图
工具链推荐(原文): nmap(扫描)+ 微步在线(情报)+ 埃文 IP 定位(地理追踪)+ 员工安全意识培训(防社工)。
💡 精髓:通过技术 + 人性双维度溯源,实现从"攻击痕迹"到"攻击者身份"的闭环。
🐧 二-B、笔记补充:三种账户类型与「后门三板斧」
理解 /etc/passwd 的关键是先分清系统里本来该有哪三类账户:
| 超级管理员 | root | 0 | /bin/bash | 全场只该有这一个 UID=0 |
| 普通用户 | alice | ≥ 1000 | /bin/bash | 家目录在 /home/alice |
| 服务账户 | www-data | 通常 < 1000 | /usr/sbin/nologin | 跑 Apache/Nginx/DB 用,被剥夺登录能力 |
💡 为什么服务账户要设成 nologin 这是纵深防御的经典设计:即使攻击者通过网站拿下 www-data 的权限,他也登不进系统、执行不了命令。 所以排查时看到"名字像服务账户但 Shell 是 /bin/bash"——这本身就是异常。
后门账户三板斧:
# ① 有没有"伪造的老板":除了 root,还有谁 UID=0
awk -F: '$3==0 {print $1}' /etc/passwd
# ② 有没有"能登录的服务账户":Shell 不是 nologin/false 的非 root 账户
awk -F: '$1!="root" && $7!~/nologin|false/ {print $1, $3, $7}' /etc/passwd
# ③ 有没有"凭空出现的员工":最近新建的账户
awk -F: '$3>=1000 {print $1, $3}' /etc/passwd
⚠️ 别忘了 /etc/shadow 和 authorized_keys
-
/etc/passwd 里的 x 只是占位符,真正的密码哈希在 /etc/shadow(只有 root 可读)。
-
攻击者更常用的是往 ~/.ssh/authorized_keys 塞自己的公钥 —— 这条不看 passwd 是发现不了的。
-
呼应前文提醒:usermod -L 只锁密码登录,锁不住 SSH 公钥后门,清后门必须连公钥一起删。
🐧 二-C、笔记补充:应急响应的顺序 —— 先易失,后持久
💡 这是排查里最容易被忽略、也最不可逆的一条原则。 内存里的东西(当前连接、进程、登录会话)重启即消失,而持久化(cron、authorized_keys)留在磁盘上随时能查。 顺序反了,攻击者最关键的痕迹就永久没了。
# ① 易失数据(必须先做,且尽量别用被感染机器上的命令)
w # 当前谁在线
last # 最近的登录历史
ps auxf # 全量进程(含父子关系)
ss -tnpu # 全量网络连接 + 对应进程
lsof -i -n -P # 打开的网络文件
cat /proc/net/tcp # 最底层的连接表(连 ss 都被替换时用它)
# ② 持久化排查
cat /etc/crontab; ls -la /etc/cron.d/; crontab -l -u root
ls -la ~/.ssh/authorized_keys
systemctl list-unit-files –state=enabled
cat ~/.bashrc ~/.profile # 看有没有被追加恶意命令
# ③ 日志与文件(见第二篇)
⚠️ 两个实操细节
-
打包命令建议用静态编译的 busybox 或从救援盘启动。攻击者若替换了 ps/netstat(Rootkit 常见手法),你看到的输出是假的。
-
别急着重启。除非业务必须恢复,否则先做完内存取证(avml、dd if=/dev/mem)。
🐧 二-D、笔记补充:Webshell 专项检测
Webshell 是 Linux 服务器被入侵后最常见的落脚点,几条命令就能扫出大部分:
# 特征函数扫描(最经典的一类马)
grep -r –include='*.php' -l 'eval\\|base64_decode\\|system\\|passthru\\|shell_exec' /var/www/ 2>/dev/null
grep -r –include='*.php' 'eval(base64_decode' /var/www/ 2>/dev/null
# 近期新增 / 被改动的脚本文件
find /var/www -mtime -7 -name '*.php' -ls 2>/dev/null
# 权限异常(世界可写)与隐藏文件
find /var/www -name '*.php' -perm /o+w -ls 2>/dev/null
find /var/www -name '.*' -not -name '.htaccess' -ls 2>/dev/null
# 木马扫描器
clamscan -r –infected /var/www/ 2>/dev/null
💡 配合访问日志二次确认 扫出可疑文件后,一定要回查 Web 访问日志里谁 POST 过这个文件——这能直接给出攻击者 IP 和上传成功的确切时间,是时间线的关键锚点。 脚本类 UA(curl、python-requests、wget)直接访问一个 .php 并拿到 200,基本可以定性。
🐧 二-E、笔记补充:Rootkit 与隐藏进程检测
# ① 已知 Rootkit 特征扫描
chkrootkit -q
rkhunter –check –sk
# ② LD_PRELOAD 劫持(最常见的用户态 Rootkit)
cat /etc/ld.so.preload # 正常应为空
env | grep LD_PRELOAD
# ③ /proc vs ps 差分 —— 揪出被藏起来的进程
ls /proc/ | grep -E '^[0-9]+$' | sort -n > /tmp/proc_pids.txt
ps aux | awk '{print $2}' | tail -n +2 | sort -n > /tmp/ps_pids.txt
diff /tmp/proc_pids.txt /tmp/ps_pids.txt
# ④ 内核模块与内核污染标记
lsmod
dmesg | grep -i taint
sha256sum /boot/vmlinuz-$(uname -r) # 与官方源哈希比对
⚠️ 读懂 diff 结果:出现在 /proc 但不在 ps 输出里的 PID,就是被 Rootkit 隐藏的进程。 原理是:ps 走的是被挂钩的系统调用(假账本),而 /proc 是内核直接暴露的(真账本),两边一对就现形。
🐧 二-F、笔记补充:auditd 与完整性校验
前面的排查都依赖"日志还在"。但攻击者可以清日志、改 history——auditd 是内核级的,不依赖 shell 配合,是目前最可靠的硬审计手段:
# 监控关键文件被修改
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/crontab -p wa -k cron_changes
# 监控 /tmp 下的执行行为(马常驻留于此)
auditctl -w /tmp -p x -k tmp_exec
# 记录所有网络连接系统调用(能抓到"只运行了几秒"的进程)
auditctl -a always,exit -F arch=b64 -S connect -k network_connect
# 查询
ausearch -k passwd_changes -ts today
ausearch -k network_connect -ts today
系统文件完整性校验:
rpm -Va | grep '^..5' # RPM 系:第 3 位是 5 表示 MD5 变了
aide –check # 需提前初始化数据库
dpkg –verify # Debian 系
💡 最实用的一条:先算哈希,再删文件。 sha256sum 之后送 VirusTotal / 微步比对——既能确认是不是恶意样本,又能留作证据。 直接 rm 是最糟的做法:既丢证据,又无法判断它是不是还有别的副本。
🧾 三、本章总结
3.1 十条要点
/etc/passwd 是账户总账:七段式 用户名:密码:UID:GID:GECOS:家目录:Shell,密码真实存放地在 /etc/shadow。
UID=0 是红线:awk -F: '($3==0)' 查出 root 之外的特权账户,立即锁定调查。
后门不止在账户里:.ssh/authorized_keys 的异常公钥是免密后门;usermod -L 锁不住公钥登录。
sudo 审查看两条:业务账户不应有 ALL=(ALL);日志里盯非运维时段的 sudo su -。
history 会骗人:默认退出才落盘、可被 unset HISTFILE 清零——硬审计要上 auditd,且每个用户家目录都翻。
端口排查 ss 优先:ss -tunlp 替代 netstat;重点抓 10000+ 随机端口、ESTABLISHED 外联、[deleted] 进程。
/proc/<PID>/exe 返回 deleted = 无文件驻留嫌疑:进程还活着,文件已被删。
隐藏进程靠 diff /proc:ps 被内核 Rootkit 挂钩时会漏报,/proc 是内核的"真账本",两边比对即可现形(unhide proc 就是这么做的)。
溯源四板斧:威胁情报(定性)→ IP 定位(地理)→ 端口扫描(自查授权资产)→ 社工(拓线到人)。
情报先行:奇安信/微步/腾讯三平台先查一遍恶意 IP 和文件哈希,命中黑名单能省掉整个拓线过程。
3.2 命令速查卡
| 查 UID=0 特权账户 | awk -F: '($3 == 0) {print $1}' /etc/passwd |
| 非 root 的 sudo 用户 | grep -v '^#\\|^root' /etc/sudoers \\| grep 'ALL=(ALL)' |
| sudo 执行记录 | grep sudo /var/log/auth.log |
| 锁定 / 删除账户 | usermod -L 用户名 / userdel -r 用户名 |
| 历史命令 | cat /root/.*_history(每个用户都要看) |
| 监听端口(推荐) | ss -tunlp |
| 端口定位进程 | lsof -i :80 |
| 进程真实路径 | ls -l /proc/<PID>/exe |
| 隐藏进程比对 | diff <(ps -ef \\| awk '{print $2}' \\| sort -n) <(ls /proc \\| grep -E '^[0-9]+$' \\| sort -n) |
| Rootkit 检测 | chkrootkit / unhide proc |
3.3 一句话收尾
排查是把"脏东西"找出来,溯源是把"脏手"找出来。 /proc 和 /etc 不会说谎——说谎的是被挂钩的系统调用和被 unset 的 HISTFILE,所以真正可靠的审计,永远比攻击者多想一层。
3.4 工具与资料
| 奇安信威胁情报中心 | ti.qianxin.com |
| 微步在线 ThreatBook | x.threatbook.com |
| 腾讯安全威胁情报中心 | tix.qq.com |
| 埃文科技 IP 定位 | www.ipuu.net(公安版精度 ≤200 米) |
| chkrootkit / unhide | Linux Rootkit / 隐藏进程检测 |
| auditd(笔记补充) | 内核级命令审计,不依赖 shell 的 history |
| 原文 | shining.blog.csdn.net/article/details/148356432 |
🔗 系列导航
本系列共四篇,构成一条完整的蓝队证据链:
① 流量特征 ── 谁在打
↓
② 日志分析 ── 怎么进来的 / 干了什么
↓
③ 主机排查 ── 东西藏在哪 / 它是谁
↓
④ 防御体系 ── 怎么防 / 打穿了也能救
| 1 | C2 远控与 Webshell 流量特征 | 从流量里认出「谁在打你」 |
| 2 | 中间件与主机日志分析 | 从日志里还原「发生了什么」 |
| 3 ⬅ | Windows / Linux 入侵排查与溯源 | 从主机上找出「它藏在哪」 |
| 4 | 安全设备、内网处置与云上防护 | 从体系上做到「防得住」 |
🙏 致谢与声明
-
内容来源:CSDN @一只枷锁 的 HW 系列文章(具体链接见各章开头)。本文为学习笔记整理,非原创。
-
本文改动:结构重排、原理补全、错误修正(补充处标 💡,修正处标 ⚠️),并补充了公开资料中的指纹数据、排查顺序与落地清单。
-
合规声明:本文所有特征、规则与命令仅用于防守侧检测、护网值守与授权渗透测试/应急响应。 未经授权对他人系统实施远控、植入 Webshell、建立 C2 通道、内网横向移动、日志篡改或未授权端口扫描,均属违法。
-
如需转载请注明原作者与本文出处;如有侵权请联系删除。
网硕互联帮助中心




评论前必须登录!
注册