云计算百科
云计算领域专业知识百科平台

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

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


📌 来源声明|本文为学习笔记整理,非原创 主体内容整理自 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

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

    用户名UIDdirectoryshell账户类型
    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 的关键是先分清系统里本来该有哪三类账户:

    类型例子UIDShell说明
    超级管理员 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 通道、内网横向移动、日志篡改或未授权端口扫描,均属违法。

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 蓝队笔记整理03 Windows / Linux 入侵排查与溯源
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!