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 做三层隔离:
- 入站隔离:只允许必要端口(如 80、443、22)对外暴露。
- 出站隔离:限制失陷主机主动外联,防止 C2 通信。
- 内网隔离:只允许访问特定业务服务器,禁止扫描内网。
实战规则:限制失陷主机横向扩散
# 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 知识体系总览
下面这张图,把主机隔离的三个层面串起来了。你可以把它当作一个检查清单:
这张图的核心逻辑是:三层隔离必须联动。进程隔离防止攻击者逃逸到宿主机;防火墙阻断攻击者通过网络横向移动;文件系统权限让攻击者即使拿到 shell,也写不了文件、读不了敏感数据。
嗯,这三板斧下去,大部分横向扩散的路径就被堵死了。剩下的,就是日常的监控和应急响应了。