3、主机隔离实战:进程隔离与沙箱技术、主机防火墙(iptables/Windows Defender)、文件系统隔离与权限控制

主机一旦失陷,攻击者第一件事是什么?

不是删库跑路,而是横向移动。他会在你的主机上驻留,然后扫描内网,寻找下一个跳板。所以,主机隔离的核心思路就一句话:让失陷主机变成一座孤岛。

怎么做到?三个层面:进程隔离、网络隔离、文件隔离。咱们一个一个来拆。

3.1 进程隔离与沙箱技术

进程隔离,说白了就是让恶意进程「关在笼子里」。它想访问别的进程内存?不行。它想读写系统关键文件?没门。

3.1.1 Linux 下的进程隔离:Namespace + Cgroups

Linux 的容器技术,本质就是靠 Namespace 和 Cgroups 实现的进程隔离。我当年在攻防演练中,就见过攻击者利用容器逃逸漏洞,从 Web 容器直接打到宿主机。嗯,那之后我对进程隔离的配置就格外小心。

核心思路:

  • PID Namespace:让进程只能看到自己 namespace 内的进程列表。
  • Mount Namespace:隔离文件系统挂载点,防止看到宿主机 /etc/shadow。
  • Network Namespace:隔离网络栈,进程只能使用虚拟网卡。
  • Cgroups:限制 CPU、内存、磁盘 IO,防止资源耗尽。

实战命令:使用 unshare 创建隔离环境

# 创建一个新的 PID 和 Mount Namespace,并 chroot 到隔离目录
unshare --pid --mount --fork --mount-proc chroot /isolated-root /bin/bash

# 在隔离环境中,进程 PID 从 1 开始,看不到宿主机进程
# 挂载隔离后的 /proc,防止通过 /proc 逃逸
mount -t proc proc /proc

我的习惯:在应急响应中,我会先用 lsns 查看当前系统有哪些 namespace,确认是否有可疑的隔离环境被攻击者利用。如果发现异常 namespace,直接 nsenter 进去看进程,往往能抓到后门。

3.1.2 Windows 下的进程隔离:AppContainer 与 Sandbox

Windows 也有自己的沙箱机制。Windows Defender Application Guard(WDAG)和 Windows Sandbox 就是现成的工具。

你想想看,如果业务应用必须运行,但又怕它被攻破后横向扩散,怎么办?

  • Windows Sandbox:每次启动都是全新环境,关闭后所有数据销毁。适合运行可疑文件。
  • AppContainer:Windows 8 引入的轻量级隔离,每个 UWP 应用都在自己的容器里运行,权限极低。
  • WDAG:基于 Hyper-V 的硬件隔离,适合浏览器等高危应用。

我曾经踩过的坑:Windows Sandbox 默认不保存数据,但如果你在沙箱内挂载了宿主机磁盘,攻击者依然可以通过沙箱访问宿主机文件。所以,永远不要在沙箱内挂载宿主机敏感目录。

3.2 主机防火墙:iptables 与 Windows Defender 防火墙

进程隔离搞定了,接下来是网络隔离。主机防火墙是阻断横向扩散的第一道防线。

3.2.1 Linux iptables:精细化流量管控

iptables 虽然老,但够稳。我习惯用 iptables 做三层隔离:

  1. 入站隔离:只允许必要端口(如 80、443、22)对外暴露。
  2. 出站隔离:限制失陷主机主动外联,防止 C2 通信。
  3. 内网隔离:只允许访问特定业务服务器,禁止扫描内网。

实战规则:限制失陷主机横向扩散

# 1. 清空默认规则
iptables -F
iptables -X

# 2. 设置默认策略:拒绝所有入站和转发
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT  # 出站默认允许,但后续细化

# 3. 允许回环接口
iptables -A INPUT -i lo -j ACCEPT

# 4. 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 5. 只允许特定端口(以 Web 服务为例)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 6. 限制出站:只允许访问特定 DNS 和业务服务器
iptables -A OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.100 -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -d 0.0.0.0/0 -j DROP  # 拒绝其他所有出站

避坑指南:我曾经在配置 iptables 时,忘了加 -m state --state ESTABLISHED,RELATED,结果 SSH 连上去几秒就断了。因为防火墙只允许新连接,但返回的包被当成新连接给拦了。记住:状态跟踪一定要开。

3.2.2 Windows Defender 防火墙:图形化与命令行双管齐下

Windows 环境,我推荐用 PowerShell 配置防火墙规则,比图形界面快得多。

场景 PowerShell 命令 说明
阻止所有入站 Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True -DefaultInboundAction Block 默认阻止入站,只允许显式放行的流量
放行特定端口 New-NetFirewallRule -DisplayName "Allow Web" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow 只放行 Web 服务端口
限制出站 IP New-NetFirewallRule -DisplayName "Block C2" -Direction Outbound -RemoteAddress 10.0.0.0/8 -Action Block 阻止访问内网其他网段
应用级隔离 New-NetFirewallRule -DisplayName "Block Notepad" -Direction Outbound -Program "C:\Windows\System32\notepad.exe" -Action Block 禁止特定程序联网

注意:Windows Defender 防火墙的规则优先级是:显式阻止 > 显式允许 > 默认策略。如果你同时配了「允许所有出站」和「阻止特定 IP」,阻止规则会生效。但如果你配了「阻止所有出站」再配「允许特定 IP」,允许规则会覆盖阻止。逻辑别搞反了。

3.3 文件系统隔离与权限控制

最后一道防线:文件系统。攻击者就算进了进程,也拿不到敏感文件;就算拿到了文件,也执行不了。

3.3.1 Linux 文件权限:最小权限原则

我见过太多运维把 Web 目录设成 777,结果被上传了 webshell 直接 getshell。权限控制,说白了就是「够用就行」。

  • 文件所有者:只给需要修改的用户写权限。
  • 组权限:业务组只读,不要给写。
  • 其他用户:一律无权限。

实战配置:Web 目录权限

# 设置 Web 目录所有者为 www-data
chown -R www-data:www-data /var/www/html

# 目录权限:755(所有者可读写执行,组和其他只读执行)
find /var/www/html -type d -exec chmod 755 {} \;

# 文件权限:644(所有者可读写,组和其他只读)
find /var/www/html -type f -exec chmod 644 {} \;

# 禁止执行上传目录
chmod -R 750 /var/www/html/uploads
# 或者用 mount 选项:noexec
mount -o remount,noexec /var/www/html/uploads

我的习惯:我会在 /etc/fstab 里给 /tmp 和 /var/tmp 加上 noexec,nosuid 选项。这样攻击者就算上传了二进制文件到 /tmp,也执行不了。很多挖矿脚本就是靠 /tmp 目录落地的,这一招能卡掉不少。

3.3.2 Windows 文件系统:ACL 与 BitLocker

Windows 的权限控制比 Linux 复杂,但更精细。核心是 NTFS 权限和访问控制列表(ACL)。

权限项 说明 实战建议
完全控制 可以修改权限、删除文件 只给管理员
修改 可以编辑、删除文件 只给业务账户
读取和执行 可以读取和运行程序 给普通用户
列出文件夹内容 只能浏览目录 给审计账户
读取 只能查看文件内容 给只读用户

我曾经踩过的坑:Windows 的权限继承机制。有一次我改了某个子目录的权限,但忘了禁用继承,结果父目录的「Everyone 完全控制」权限直接覆盖了子目录的配置。攻击者通过父目录的漏洞,直接拿到了子目录的敏感文件。记住:敏感目录一定要禁用权限继承,并单独配置 ACL。

3.4 知识体系总览

下面这张图,把主机隔离的三个层面串起来了。你可以把它当作一个检查清单:

主机隔离实战知识体系 主机隔离实战:阻断横向扩散 进程隔离与沙箱 主机防火墙 文件系统隔离 阻断横向扩散 Namespace Cgroups 沙箱 / 容器 iptables Windows Defender 入站/出站规则 Linux 权限 Windows ACL 最小权限原则 三层隔离联动:进程隔离防止逃逸 → 防火墙阻断网络扩散 → 文件系统限制权限

这张图的核心逻辑是:三层隔离必须联动。进程隔离防止攻击者逃逸到宿主机;防火墙阻断攻击者通过网络横向移动;文件系统权限让攻击者即使拿到 shell,也写不了文件、读不了敏感数据。

嗯,这三板斧下去,大部分横向扩散的路径就被堵死了。剩下的,就是日常的监控和应急响应了。