VNC和RPC加固措施

VNC和RPC加固措施

VNC(Virtual Network Computing)和RPC(Remote Procedure Call)是两种常见的远程访问与通信协议,但它们在默认配置下往往存在较大的安全风险。以下是针对 VNC 和 RPC 服务的全面加固方案,从配置优化、访问控制、加密传输到日志审计等多个维度进行深入讲解,并提供具体操作命令和代码示例,帮助你完成实际环境中的安全加固。


一、VNC 安全加固(以 RealVNC / TightVNC / TigerVNC 为例)

🔍 1. 漏洞原理与常见攻击方式

  • 明文传输:早期版本的 VNC 使用明文传输密码和屏幕数据,极易被中间人窃听。
  • 弱认证机制:使用固定密码或默认密码,易受暴力破解。
  • 无访问控制:未限制 IP 或用户访问,导致任意主机可连接。
  • 缺乏日志审计:无法追踪谁在何时进行了远程连接。

✅ 2. 安全加固措施(分步骤详解)

(1)升级到最新版本(推荐使用 TigerVNC 或 UltraVNC)
bash 复制代码
# 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

建议版本


(2)强制启用加密(SSL/TLS 或 SSH 隧道)
方法①:使用 SSH 隧道加密 VNC 流量(推荐)
bash 复制代码
# 在客户端通过 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 并启动时指定加密参数:

bash 复制代码
vncserver :1 -localhost no -rfbauth ~/.vnc/passwd -SecurityTypes TLSVnc,X509Vnc

⚠️ 注意:需要提前生成证书(OpenSSL),配置较复杂,适用于企业级部署。


(3)设置强密码并启用双因素认证(可选)
bash 复制代码
# 设置 VNC 登录密码(会生成 ~/.vnc/passwd)
vncpasswd

# 密码要求:
# - 至少8位
# - 包含大小写字母、数字、特殊字符
# - 不使用默认密码如 "password"、"123456"

🔐 推荐结合 Google Authenticator 实现双因素认证(需定制脚本或使用 UltraVNC 插件)。


(4)限制访问源 IP(防火墙 + hosts.allow)
bash 复制代码
# 使用 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 中一致,若无则添加:

bash 复制代码
echo "vncserver 5901/tcp" >> /etc/services

(5)关闭不必要的共享和剪贴板功能

在 VNC Viewer 或 Server 配置中禁用:

  • 共享剪贴板(防止信息泄露)
  • 文件传输功能
  • 多用户并发连接

TigerVNC 配置文件示例(~/.vnc/config):

ini 复制代码
desktop=Secure Desktop
geometry=1920x1080
localhost=no
alwaysshared=no
nevershared=yes
dontdisconnect=yes
rfbport=5901
SecurityTypes=TLSVnc

(6)启用日志审计
bash 复制代码
# 查看 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 服务
bash 复制代码
# CentOS/RHEL 停止并禁用 rpcbind
sudo systemctl stop rpcbind
sudo systemctl disable rpcbind

# 检查是否仍在监听
netstat -tuln | grep :111

❗ 若使用 NFS,请确保仅绑定内网接口:

bash 复制代码
# 编辑 /etc/rpcbind.conf
bind_address=192.168.10.10

(2)使用防火墙限制 RPC 端口范围

RPC 默认使用 135(TCP)作为监听端口,后续连接使用动态端口(1024~65535)。可通过注册表或配置文件固定端口。

Windows 固定 RPC 端口(注册表)
reg 复制代码
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet]
"Ports"=dword:0x0400
"PortsInternetAvailable"="Y"
"UseInternetPorts"="Y"

Reg

然后在防火墙开放指定端口段(如 50000-50100):

powershell 复制代码
# PowerShell 添加防火墙规则
New-NetFirewallRule -DisplayName "RPC Static Ports" -Direction Inbound -Protocol TCP -LocalPort 50000-50100 -Action Allow

(3)启用强身份验证和加密
  • 启用 Kerberos 身份验证(优于 NTLM)
  • 强制 SMB 签名和加密
  • 禁用匿名枚举
powershell 复制代码
# 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 接口
powershell 复制代码
# 禁用 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 相关活动:

powershell 复制代码
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)探测可调用接口:

    bash 复制代码
    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 漏洞

四、法律风险提示

本文内容仅用于合法网络安全研究、系统加固与等保合规。未经授权对他人系统进行扫描、渗透、爆破等行为违反《中华人民共和国网络安全法》及相关法律法规,可能导致刑事责任。请确保在授权范围内操作。

相关推荐
云手机掌柜2 小时前
从0到500账号管理:亚矩阵云手机多开组队与虚拟定位实战指南
数据结构·线性代数·网络安全·容器·智能手机·矩阵·云计算
一只小bit6 小时前
Linux网络:阿里云轻量级应用服务器配置防火墙模板开放端口
linux·网络·阿里云
帽儿山的枪手7 小时前
HVV期间,如何使用SSH隧道绕过内外网隔离限制?
linux·网络协议·安全
上海云盾商务经理杨杨7 小时前
2025数字藏品安全保卫战:高防CDN如何成为NFT应用的“隐形护甲”?
安全·网络安全
charlie1145141918 小时前
设计自己的小传输协议 导论与概念
c++·笔记·qt·网络协议·设计·通信协议
BachelorSC8 小时前
【网络工程师软考版】网络安全
网络·安全·web安全
(Charon)9 小时前
【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
网络·网络协议·http
Bryce李小白10 小时前
Kotlin实现Retrofit风格的网络请求封装
网络·kotlin·retrofit
Lovyk10 小时前
Linux网络管理
服务器·网络·php
MC皮蛋侠客12 小时前
AsyncIOScheduler 使用指南:高效异步任务调度解决方案
网络·python·fastapi