VNC和RPC加固措施
VNC(Virtual Network Computing)和RPC(Remote Procedure Call)是两种常见的远程访问与通信协议,但它们在默认配置下往往存在较大的安全风险。以下是针对 VNC 和 RPC 服务的全面加固方案,从配置优化、访问控制、加密传输到日志审计等多个维度进行深入讲解,并提供具体操作命令和代码示例,帮助你完成实际环境中的安全加固。
一、VNC 安全加固(以 RealVNC / TightVNC / TigerVNC 为例)
🔍 1. 漏洞原理与常见攻击方式
- 明文传输:早期版本的 VNC 使用明文传输密码和屏幕数据,极易被中间人窃听。
- 弱认证机制:使用固定密码或默认密码,易受暴力破解。
- 无访问控制:未限制 IP 或用户访问,导致任意主机可连接。
- 缺乏日志审计:无法追踪谁在何时进行了远程连接。
✅ 2. 安全加固措施(分步骤详解)
(1)升级到最新版本(推荐使用 TigerVNC 或 UltraVNC)
# Ubuntu/Debian 系统安装最新版 TigerVNC
sudo apt update
sudo apt install tigervnc-standalone-server tigervnc-common -y
# CentOS/RHEL
sudo yum install tigervnc-server -y
# 或使用 dnf(较新版本)
sudo dnf install tigervnc-server -y
✅ 建议版本:
- TigerVNC ≥ 1.12
- RealVNC Enterprise ≥ 6.8
- TightVNC 不推荐用于生产环境(已多年未更新)
🌐 下载地址:
- TigerVNC: https://github.com/TigerVNC/tigervnc
- RealVNC: https://www.realvnc.com/en/connect/download/vnc/
- UltraVNC: https://www.uvnc.com/downloads.html
(2)强制启用加密(SSL/TLS 或 SSH 隧道)
方法①:使用 SSH 隧道加密 VNC 流量(推荐)
# 在客户端通过 SSH 隧道连接 VNC(Linux/Mac)
ssh -L 5901:localhost:5901 user@vnc-server-ip
# 然后本地使用 VNC Viewer 连接 127.0.0.1:5901
✅ 优点:完全加密,无需修改 VNC 配置。
方法②:配置 TigerVNC 启用 TLS 加密(高级用法)
编辑 ~/.vnc/xstartup
并启动时指定加密参数:
vncserver :1 -localhost no -rfbauth ~/.vnc/passwd -SecurityTypes TLSVnc,X509Vnc
⚠️ 注意:需要提前生成证书(OpenSSL),配置较复杂,适用于企业级部署。
(3)设置强密码并启用双因素认证(可选)
# 设置 VNC 登录密码(会生成 ~/.vnc/passwd)
vncpasswd
# 密码要求:
# - 至少8位
# - 包含大小写字母、数字、特殊字符
# - 不使用默认密码如 "password"、"123456"
🔐 推荐结合 Google Authenticator 实现双因素认证(需定制脚本或使用 UltraVNC 插件)。
(4)限制访问源 IP(防火墙 + hosts.allow)
# 使用 iptables 限制仅允许特定 IP 访问 VNC 端口(默认 5900+n)
sudo iptables -A INPUT -p tcp --dport 5901 -s 192.168.10.100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5901 -j DROP
# 或使用 /etc/hosts.allow(基于 tcpd)
echo "vncserver: 192.168.10.100" >> /etc/hosts.allow
echo "vncserver: ALL" >> /etc/hosts.deny
📝 服务名需与
/etc/services
中一致,若无则添加:echo "vncserver 5901/tcp" >> /etc/services
(5)关闭不必要的共享和剪贴板功能
在 VNC Viewer 或 Server 配置中禁用:
- 共享剪贴板(防止信息泄露)
- 文件传输功能
- 多用户并发连接
TigerVNC 配置文件示例(~/.vnc/config
):
desktop=Secure Desktop
geometry=1920x1080
localhost=no
alwaysshared=no
nevershared=yes
dontdisconnect=yes
rfbport=5901
SecurityTypes=TLSVnc
(6)启用日志审计
# 查看 VNC 日志(通常位于 ~/.vnc/hostname:display.log)
tail -f ~/.vnc/$(hostname):1.log
# 建议将日志集中发送至 SIEM 系统(如 ELK、Splunk)
🛡️ 3. VNC 安全配置检查清单
项目 | 是否完成 |
---|---|
升级到最新稳定版 VNC | ✅ |
使用 SSH 隧道或 TLS 加密 | ✅ |
设置强密码(>8位,复杂度高) | ✅ |
限制访问源 IP(iptables 或 hosts.allow) | ✅ |
禁用剪贴板共享和文件传输 | ✅ |
关闭未使用的 VNC 实例 | ✅ |
启用日志记录并定期审查 | ✅ |
二、RPC(Remote Procedure Call)安全加固(以 Windows RPC / Linux RPCbind 为例)
🔍 1. 漏洞原理与常见攻击方式
- 端口动态分配:RPC 服务使用随机高端口,难以通过防火墙精确控制。
- 身份验证薄弱:NTLM 认证可被哈希传递攻击(Pass-the-Hash)。
- 服务暴露过多:如
lsass
,netlogon
,samr
等接口被滥用。 - 经典漏洞
- MS17-010(永恒之蓝)利用 SMB over RPC
- Zerologon(CVE-2020-1472)攻击 Netlogon
- PrintNightmare(CVE-2021-1675 / CVE-2021-34527)
✅ 2. 安全加固措施
(1)最小化启用 RPC 服务
- Windows:仅启用必要的 RPC 服务(如域控需要的
LSASS
,NETLOGON
) - Linux:关闭
rpcbind
若无需 NFS/RPC 服务
# CentOS/RHEL 停止并禁用 rpcbind
sudo systemctl stop rpcbind
sudo systemctl disable rpcbind
# 检查是否仍在监听
netstat -tuln | grep :111
❗ 若使用 NFS,请确保仅绑定内网接口:
# 编辑 /etc/rpcbind.conf bind_address=192.168.10.10
(2)使用防火墙限制 RPC 端口范围
RPC 默认使用 135(TCP)作为监听端口,后续连接使用动态端口(1024~65535)。可通过注册表或配置文件固定端口。
Windows 固定 RPC 端口(注册表)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet]
"Ports"=dword:0x0400
"PortsInternetAvailable"="Y"
"UseInternetPorts"="Y"
Reg
然后在防火墙开放指定端口段(如 50000-50100):
# PowerShell 添加防火墙规则
New-NetFirewallRule -DisplayName "RPC Static Ports" -Direction Inbound -Protocol TCP -LocalPort 50000-50100 -Action Allow
(3)启用强身份验证和加密
- 启用 Kerberos 身份验证(优于 NTLM)
- 强制 SMB 签名和加密
- 禁用匿名枚举
# PowerShell 设置本地策略(需管理员权限)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\" -Name "RestrictAnonymous" -Value 1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" -Name "RequireSignOrSeal" -Value 1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" -Name "RequireStrongKey" -Value 1
(4)修补已知漏洞(关键补丁)
漏洞编号 | 影响 | 补丁链接 |
---|---|---|
CVE-2017-0144 (MS17-010) | 永恒之蓝 | https://catalog.update.microsoft.com/v7/site/Search.aspx?q=KB4012212 |
CVE-2020-1472 (Zerologon) | Netlogon 特权提升 | https://catalog.update.microsoft.com/v7/site/Search.aspx?q=KB4557222 |
CVE-2021-34527 (PrintNightmare) | 远程代码执行 | https://support.microsoft.com/en-us/topic/kb4569745-print-spooler-security-feature-bypass-cve-2021-34527-6e79d8e8-3a9a-4d6d-8c6d-6f8f9b7b5e5f |
✅ 建议:所有 Windows 主机安装最新安全补丁,域控优先打补丁。
(5)禁用不必要的 DCOM/RPC 接口
# 禁用 Windows Print Spooler(若无需打印服务)
Stop-Service -Name Spooler
Set-Service -Name Spooler -StartupType Disabled
⚠️ 注意:关闭 Spooler 可防御 PrintNightmare 类攻击。
(6)监控与日志审计(Windows Event Log)
关键事件 ID:
- Event ID 4662:对象访问(如 RPC 调用)
- Event ID 5145:网络共享访问
- Event ID 4776:NTLM 认证尝试
- Event ID 4674:权限提升操作
使用 PowerShell 查询近期 RPC 相关活动:
Get-WinEvent -LogName "Security" | Where-Object { $_.Id -eq 4662 } | Select TimeCreated, Message
建议将日志转发至 SIEM 系统(如 Microsoft Sentinel、Graylog)进行关联分析。
🛡️ 4. RPC 安全配置检查清单
项目 | 是否完成 |
---|---|
关闭不必要的 RPC 服务(如 rpcbind) | ✅ |
固定 RPC 动态端口并配置防火墙 | ✅ |
启用 Kerberos 替代 NTLM | ✅ |
安装关键补丁(MS17-010、Zerologon 等) | ✅ |
禁用 Print Spooler(如非必要) | ✅ |
设置 RestrictAnonymous=1 | ✅ |
启用日志审计并集中管理 | ✅ |
三、综合建议(内网渗透视角)
结合你提供的图片中
192.168.1.x
网段存在多个开放 VNC/RPC 的主机,以下是从红队/蓝队角度的延伸建议:
🔹 红队视角(攻击检测)
若发现
5900
,5901
开放 → 尝试弱密码爆破(工具:hydra -t 4 vnc://target
)若发现
135
开放 → 使用
rpcdump.py
(Impacket)探测可调用接口:
python3 rpcdump.py @192.168.1.10 | grep -i print
若返回
MS-RPRN
接口 → 存在 PrintNightmare 风险。
🔹 蓝队视角(防御策略)
- 所有 VNC 服务必须通过 跳板机 + SSH 隧道 + MFA 访问
- 所有 RPC 请求必须经过 网络层微隔离(如 Zero Trust 架构)
- 部署 EDR(如 CrowdStrike、Bitdefender)监控
lsass.exe
异常行为 - 定期使用 Nessus / OpenVAS 扫描 RPC/VNC 漏洞
四、法律风险提示
本文内容仅用于合法网络安全研究、系统加固与等保合规。未经授权对他人系统进行扫描、渗透、爆破等行为违反《中华人民共和国网络安全法》及相关法律法规,可能导致刑事责任。请确保在授权范围内操作。