蓝队笔记整理03 Windows / Linux 入侵排查与溯源

本文系统梳理蓝队在Windows和Linux主机上的入侵排查方法,覆盖账户、进程、端口、启动项、计划任务、服务六大持久化藏匿点,并延伸至威胁情报、IP定位、端口扫描和社会工程学等溯源技术。强调应急响应“先定性、先易失后持久”原则,详解影子账户、IFEO劫持、WMI事件订阅、Rootkit隐藏进程、SSH公钥后门等高阶对抗手法,配套命令速查与工具链(如Autoruns、auditd、ss、/proc比对)。

从主机上找出「它藏在哪」——账户、进程、端口、启动项、计划任务、服务六个藏身处挨个翻


📌 来源声明|本文为学习笔记整理,非原创 主体内容整理自 CSDN 博主 @一只枷锁 的两篇 HW 系列文章,原文链接:

另补充了公开应急响应资料中的排查顺序、Rootkit 检测与 auditd 用法(补充处标 💡,修正处标 ⚠️)。 感谢原作者分享,如有侵权请联系删除。

🧭 导读:这篇解决什么问题

第二篇告诉你"攻击者什么时候进来的",这一篇回答两个更硬的问题:

  1. 它把东西藏在哪了? —— 账户、进程、端口、启动项、计划任务、服务,六个藏身处挨个翻

  2. 它到底是谁? —— 威胁情报、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 入侵排查流程(十二步)
启动应急响应 → 信息收集 → 系统账号与日志 → 端口与进程 → 启动项与服务
     → 发现异常账户/登录 → 定位恶意进程/连接 → 识别恶意自启动
     → 关联分析攻击链 → 清除恶意组件 → 系统加固与恢复 → 输出报告

流程说明(原文):

  1. 信息收集:快速抓取账号、进程、日志等关键数据;

  2. 异常检测:聚焦隐藏账户、高危端口、无签名进程;

  3. 攻击链还原:关联日志(如事件 ID 4625 爆破记录)与文件痕迹;

  4. 清除与加固:删除后门 + 修补漏洞 + 强化策略。

⚠️ 原文开篇还有一句大实话,值得放进流程图旁边: "实在不会手动,打开一个杀毒软件,全盘扫描。" 排查清单是给"有线索、要溯源"的场景用的;如果只是客户一句"电脑感觉不对劲",先全盘扫描兜底,再决定要不要深挖。


👤 二、账户安全排查

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 十条要点
  1. 先定性再动手:Web 入侵翻中间件日志、系统入侵做主机排查、网络攻击看流量——三篇笔记正好各管一线。

  2. 排查就是翻六个藏身处:账户、进程/端口、启动项、计划任务、服务——恶意代码想活下来,逃不出这几处。

  3. 黑客账户四个破绽:名字怪、权限高、登录时间/地点不对、想隐藏。

  4. 隐藏账户认 $ 结尾:net user 看不到,要到 HKLM\SAM\SAM\Domains\Account\Users\Names 里对。

  5. 克隆账户比 F 值:000001F4(RID 500 = Administrator)的 F 值是基准,相同即克隆;D 盾可自动检测。

  6. 删影子账户要删注册表:net user /delete 清不掉注册表残留;WMIC 已弃用,用 Remove-LocalUser。

  7. 进程看"名字 + 路径 + 签名 + 血缘":svch0st.exe、C:\Windows\Temp\、无签名、services.exe 以外的爹——中一条就可疑。

  8. IFEO 是最容易被漏的持久化点:Image File Execution Options 下出现 Debugger 键值基本就是劫持,专坑杀软和任务管理器。

  9. 计划任务盯三个特征:高频触发、路径非常规、SYSTEM 身份。

  10. 服务的判据也是路径:二进制指向 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 ExplorerSysinternals 出品,进程树/血缘追踪
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
密码passwordx 表示密码占位符(实际密码存 /etc/shadow)普通用户无权查看加密密码
用户 IDUID用户唯一标识(0 为 root,1–999 系统用户,1000+ 普通用户)root 的 UID=0
组 IDGID用户主组的标识号同 /etc/group 中的组 ID 对应
用户说明GECOS用户备注信息(如全名、联系方式)可留空
家目录directory用户专属存储路径root → /root;普通用户 → /home/用户名;服务用户 → /var/www
登录 Shellshell用户登录后默认使用的命令解释器/bin/bash、/bin/zsh、/usr/sbin/nologin

示例数据表(三行看懂三类账户):

用户名UIDdirectoryshell账户类型
root0/root/bin/bash超级管理员
alice1000/home/alice/bin/zsh普通用户
www-data33/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 有三个反取证陷阱,排查时别把"没有记录"当"没做过":

  1. bash 默认退出时才写入 history 文件——会话还在时内存里有、文件里没有;

  2. 攻击者可 unset HISTFILE / HISTSIZE=0 / history -c 直接不留痕;

  3. 靠谱的替代是 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 驱动分析
微步在线 ThreatBookhttps://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 米
IP138https://www.ip138.com/城市级
MaxMindhttps://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 的关键是先分清系统里本来该有哪三类账户:

类型例子UIDShell说明
超级管理员root0/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 十条要点
  1. /etc/passwd 是账户总账:七段式 用户名:密码:UID:GID:GECOS:家目录:Shell,密码真实存放地在 /etc/shadow。

  2. UID=0 是红线:awk -F: '($3==0)' 查出 root 之外的特权账户,立即锁定调查。

  3. 后门不止在账户里:.ssh/authorized_keys 的异常公钥是免密后门;usermod -L 锁不住公钥登录。

  4. sudo 审查看两条:业务账户不应有 ALL=(ALL);日志里盯非运维时段的 sudo su -。

  5. history 会骗人:默认退出才落盘、可被 unset HISTFILE 清零——硬审计要上 auditd,且每个用户家目录都翻。

  6. 端口排查 ss 优先:ss -tunlp 替代 netstat;重点抓 10000+ 随机端口、ESTABLISHED 外联、[deleted] 进程。

  7. /proc/<PID>/exe 返回 deleted = 无文件驻留嫌疑:进程还活着,文件已被删。

  8. 隐藏进程靠 diff /proc:ps 被内核 Rootkit 挂钩时会漏报,/proc 是内核的"真账本",两边比对即可现形(unhide proc 就是这么做的)。

  9. 溯源四板斧:威胁情报(定性)→ IP 定位(地理)→ 端口扫描(自查授权资产)→ 社工(拓线到人)。

  10. 情报先行:奇安信/微步/腾讯三平台先查一遍恶意 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
微步在线 ThreatBookx.threatbook.com
腾讯安全威胁情报中心tix.qq.com
埃文科技 IP 定位www.ipuu.net(公安版精度 ≤200 米)
chkrootkit / unhideLinux Rootkit / 隐藏进程检测
auditd(笔记补充)内核级命令审计,不依赖 shell 的 history
原文shining.blog.csdn.net/article/details/148356432

🔗 系列导航

本系列共四篇,构成一条完整的蓝队证据链:

① 流量特征 ── 谁在打
      ↓
② 日志分析 ── 怎么进来的 / 干了什么
      ↓
③ 主机排查 ── 东西藏在哪 / 它是谁
      ↓
④ 防御体系 ── 怎么防 / 打穿了也能救
篇主题一句话
1C2 远控与 Webshell 流量特征从流量里认出「谁在打你」
2中间件与主机日志分析从日志里还原「发生了什么」
3 ⬅Windows / Linux 入侵排查与溯源从主机上找出「它藏在哪」
4安全设备、内网处置与云上防护从体系上做到「防得住」

🙏 致谢与声明

  • 内容来源:CSDN @一只枷锁 的 HW 系列文章(具体链接见各章开头)。本文为学习笔记整理,非原创。

  • 本文改动:结构重排、原理补全、错误修正(补充处标 💡,修正处标 ⚠️),并补充了公开资料中的指纹数据、排查顺序与落地清单。

  • 合规声明:本文所有特征、规则与命令仅用于防守侧检测、护网值守与授权渗透测试/应急响应。 未经授权对他人系统实施远控、植入 Webshell、建立 C2 通道、内网横向移动、日志篡改或未授权端口扫描,均属违法。

  • 如需转载请注明原作者与本文出处;如有侵权请联系删除。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值