目录
[windows ---> Linux 对抗技术对比表](#windows ---> Linux 对抗技术对比表)
[PE 结构层免杀(节表/IAT/重定位/附加数据) → ELF 层几乎没有对应实践](#PE 结构层免杀(节表/IAT/重定位/附加数据) → ELF 层几乎没有对应实践)
[ShellCode 加密 / 编码 → 概念通用,但载体不同](#ShellCode 加密 / 编码 → 概念通用,但载体不同)
[Loader 执行载体(11 种) → memfd + fexecve / mmap exec / dlopen / .init_array / 信号处理](#Loader 执行载体(11 种) → memfd + fexecve / mmap exec / dlopen / .init_array / 信号处理)
[注入(远程线程 / APC / 镂空 / 映射) → ptrace / /proc/pid/mem / process_vm_writev](#注入(远程线程 / APC / 镂空 / 映射) → ptrace / /proc/pid/mem / process_vm_writev)
[IAT Hook → PLT/GOT 覆写](#IAT Hook → PLT/GOT 覆写)
[API 劫持 / DLL 劫持 → LD_PRELOAD / /etc/ld.so.preload](#API 劫持 / DLL 劫持 → LD_PRELOAD / /etc/ld.so.preload)
[反调试(28 个点) → ptrace TRACEME / TracerPid / PPID / SIGTRAP / 时间差](#反调试(28 个点) → ptrace TRACEME / TracerPid / PPID / SIGTRAP / 时间差)
[反虚拟化(注册表 / 服务 / 设备名) → DMI / procfs / cpuinfo / MAC / systemd-detect-virt](#反虚拟化(注册表 / 服务 / 设备名) → DMI / procfs / cpuinfo / MAC / systemd-detect-virt)
[反沙箱(开机时长/内存/核数/用户交互) → uptime 通用;容器特征成为新维度](#反沙箱(开机时长/内存/核数/用户交互) → uptime 通用;容器特征成为新维度)
[持久化(注册表 Run / 计划任务 / 服务) → systemd / cron / shell 启动文件 / ld.so.preload / PAM / udev / SSH](#持久化(注册表 Run / 计划任务 / 服务) → systemd / cron / shell 启动文件 / ld.so.preload / PAM / udev / SSH)
[ETW 绕过 / 日志绕过 → auditd / syslog / wtmp / eBPF 可观测性](#ETW 绕过 / 日志绕过 → auditd / syslog / wtmp / eBPF 可观测性)
[内核层(BYOVD / 回调摘除 / DKOM / minifilter / PPL) → LKM / ftrace / kprobes / eBPF / task_struct DKOM / io_uring](#内核层(BYOVD / 回调摘除 / DKOM / minifilter / PPL) → LKM / ftrace / kprobes / eBPF / task_struct DKOM / io_uring)
[权限提升(UAC / 令牌 / Potato) → SUID/SGID / sudo 配置 / capabilities / 内核 LPE / polkit](#权限提升(UAC / 令牌 / Potato) → SUID/SGID / sudo 配置 / capabilities / 内核 LPE / polkit)
[凭据与横向(LSASS / NTLM / Kerberos / PTH) → SSH 私钥 / authorized_keys / sudo 缓存 / 云元数据 / Docker socket](#凭据与横向(LSASS / NTLM / Kerberos / PTH) → SSH 私钥 / authorized_keys / sudo 缓存 / 云元数据 / Docker socket)

研究Linux对抗的前提
-
Windows 技术是围绕一个特定威胁模型长出来的:
-
「用户双击一个文件,安全软件从磁盘到内存层层检查它」。
-
那套技术里的大部分(PE 结构改写、壳、多态、IAT 重建、执行载体多样性)都是为这个问题服务的。
-
-
Linux 的威胁模型不一样。
-
攻击者很少需要「投递一个文件」------ 常见入口是弱口令、暴露的服务、泄露的凭据、供应链。
-
也就是说,Linux 上很多时候压根没有「让它跑起来」这一步。
-
-
所以正确的读法是:
-
不要问「Linux 怎么做同样的事」,要问「Linux 上这个问题存不存在」。
-
本文档里标成「无对应」的那些条目,就是这个问题的否定答案。
-
三条读法建议
-
『Linux 上有没有对应』这个问题 ------看 mapping_summary 那张表就够。
-
如果你想判断『该不该学 Linux 这块』------ 先看 threat_model,大部分人的 Windows 免杀知识在 Linux 上迁移不过去,不是因为技术难,是因为问题不一样。
-
如果你想找学习入口 ------ 从内核层那一节开始,不要从执行载体开始,Linux 上执行载体那一层是被压缩的,内核那一层才是展开的。
windows ---> Linux 对抗技术对比表
总对照表
|---------------------------------------------|----------------------------------------------------------------|-------|
| Windows 技术 | Linux 对应 | 对应程度 |
| PE 结构层免杀(节表/IAT/重定位/附加数据) | ELF 层几乎没有对应实践 | 无对应 |
| ShellCode 加密 / 编码 | 概念通用,但载体不同 | 近似 |
| Loader 执行载体(11 种) | memfd + fexecve / mmap exec / dlopen / .init_array / 信号处理 | 近似 |
| 注入(远程线程 / APC / 镂空 / 映射) | ptrace / /proc/pid/mem / process_vm_writev | 只解决一半 |
| IAT Hook | PLT/GOT 覆写 | 精确 |
| API 劫持 / DLL 劫持 | LD_PRELOAD / /etc/ld.so.preload | 精确 |
| 反调试(28 个点) | ptrace TRACEME / TracerPid / PPID / SIGTRAP / 时间差 | 近似 |
| 反虚拟化(注册表 / 服务 / 设备名) | DMI / procfs / cpuinfo / MAC / systemd-detect-virt | 近似 |
| 反沙箱(开机时长/内存/核数/用户交互) | uptime 通用;容器特征成为新维度 | 近似 |
| 持久化(注册表 Run / 计划任务 / 服务) | systemd / cron / shell 启动文件 / ld.so.preload / PAM / udev / SSH | 近似 |
| ETW 绕过 / 日志绕过 | auditd / syslog / wtmp / eBPF 可观测性 | 近似 |
| 内核层(BYOVD / 回调摘除 / DKOM / minifilter / PPL) | LKM / ftrace / kprobes / eBPF / task_struct DKOM / io_uring | 近似 |
| 权限提升(UAC / 令牌 / Potato) | SUID/SGID / sudo 配置 / capabilities / 内核 LPE / polkit | 近似 |
| 凭据与横向(LSASS / NTLM / Kerberos / PTH) | SSH 私钥 / authorized_keys / sudo 缓存 / 云元数据 / Docker socket | 无对应 |
- 看第三列「无对应」占了两行,而它们在 Windows 侧都是很大的板块(PE 结构层、凭据与横向)
- 这不是遗漏 ------ 这两块在 Linux 上确实没有意义。
说明为什么
PE 结构层免杀(节表/IAT/重定位/附加数据) → ELF 层几乎没有对应实践
对应程度:无对应
- 不是因为 ELF 更难改,是因为 Linux 上没有『落地就被扫』这道关。PE 层那些手段的收益全部来自『静态扫描器读你的文件』这个前提,这个前提在 Linux 侧不成立。
ShellCode 加密 / 编码 → 概念通用,但载体不同
对应程度:近似
- Linux 侧对应物是『加密的 stage2 二进制 / 加密的脚本』,不是 shellcode。因为 Linux 有 execve,你要的效果一行命令就有,不需要先造一段机器码。
Loader 执行载体(11 种) → memfd + fexecve / mmap exec / dlopen / .init_array / 信号处理
对应程度:近似
- 目的相同(把代码跑起来),机制完全不同。
- Windows 那 11 种大多是在『绕 API 钩子 + 找不寻常的调用栈』,Linux 上 EDR 不靠用户态钩子拿数据,所以这个动机不存在。
注入(远程线程 / APC / 镂空 / 映射) → ptrace / /proc/pid/mem / process_vm_writev
对应程度:只解决一半
- 机制都在,但生态里不是主流。拿到 shell 后你已经有代码执行,注入解决的是『我进不去别人进程』这个问题,而 Linux 上这个问题通常不存在。
IAT Hook → PLT/GOT 覆写
对应程度:精确
- IAT 和 GOT 都是『调用跳转表』,改表项就改行为。
- 这是全清单里对应最精确的一对。
API 劫持 / DLL 劫持 → LD_PRELOAD / /etc/ld.so.preload
对应程度:精确
- 都是符号解析顺序劫持。但 Linux 的全局版本(ld.so.preload)比 Windows 的等价物(AppInit_DLLs)能力强得多,也持久得多。
反调试(28 个点) → ptrace TRACEME / TracerPid / PPID / SIGTRAP / 时间差
对应程度:近似
- 数量上少得多 ------ 因为 Linux 上调试基本就是 ptrace 一个机制。Windows 那 28 个点里有相当一部分是在检查『Windows 特有的内核结构和调试 API』,那些在 Linux 上不存在,也就不需要检测。
反虚拟化(注册表 / 服务 / 设备名) → DMI / procfs / cpuinfo / MAC / systemd-detect-virt
对应程度:近似
- 目的相同,但 Linux 侧更简单 ------ systemd-detect-virt 一条命令直接给答案。反过来 Linux 侧更重要的是容器检测,那是 Windows 侧不成体系的一块。
反沙箱(开机时长/内存/核数/用户交互) → uptime 通用;容器特征成为新维度
对应程度:近似
- 沙箱在 Linux 侧的常见形态是容器而不是 VM,所以 /proc/1/cgroup 和 /.dockerenv 这类容器特征比开机时长更有判别力。
持久化(注册表 Run / 计划任务 / 服务) → systemd / cron / shell 启动文件 / ld.so.preload / PAM / udev / SSH
对应程度:近似
- Linux 的持久化选择面远比 Windows 大。Windows 的持久化点是被微软主动收敛过的(有明确的枚举清单),Linux 是一堆松散机制各自演化出来的,可插拔点多。
ETW 绕过 / 日志绕过 → auditd / syslog / wtmp / eBPF 可观测性
对应程度:近似
- 轴的差别比机制差别更大:Windows 是『把遥测源关掉』,Linux 更常见的是『不留日志』。而且 Linux 的日志是普通文件,可写,这跟 Windows 事件日志的数据库模型完全不同。
内核层(BYOVD / 回调摘除 / DKOM / minifilter / PPL) → LKM / ftrace / kprobes / eBPF / task_struct DKOM / io_uring
对应程度:近似
- ★ 最大的结构性差别:Windows 内核准入被四道门堵死(签名信任、HVCI、驱动黑名单、测试签名无实义),Linux 侧模块签名很多发行版默认不强制。所以 R3→R0 这条路 Windows 是关的、Linux 是开的。
权限提升(UAC / 令牌 / Potato) → SUID/SGID / sudo 配置 / capabilities / 内核 LPE / polkit
对应程度:近似
- 完全不同的机制集。Windows 的提权围绕令牌和完整性级别,Linux 围绕文件权限位、capabilities 和内核漏洞。
凭据与横向(LSASS / NTLM / Kerberos / PTH) → SSH 私钥 / authorized_keys / sudo 缓存 / 云元数据 / Docker socket
对应程度:无对应
- 这是两个完全不同的认证世界。Windows 是域 + 集中式凭据存储,Linux 是分散的密钥文件和信任关系。把 PTH 的思路套到 Linux 上是套不上的。