Decentralization? We're still early!

开源路由器安全加固指南:FreshTomato、DD-WRT 与 OpenWrt

  • 开源路由器安全加固指南:FreshTomato、DD-WRT 与 OpenWrt

    發布人 Brave 2026-02-24 14:41

    1. 管理接口的安全防护

    路由器的管理接口是整个网络安全的"大门"。一旦攻击者获得了管理权限,你的整个网络就如同门户洞开。因此,管理接口的安全防护是第一优先级。

    🔑 更改默认凭据

    刷机后应立即通过 OpenWrt passwd 命令或各固件 GUI 修改 root 密码。绝大多数开源固件在刷入后默认 root 密码为空或极其简单,这意味着任何能连接到路由器的人都能直接获得完整控制权。 密码应满足以下要求:长度不低于 12 位,混合大小写字母、数字和特殊字符,避免使用字典词汇或可预测的组合。

    ⚠️ 安全提示在 OpenWrt 中,如果你尚未设置密码,Telnet 服务会默认开放以便初始配置。设置密码后 Telnet 会自动关闭并切换到 SSH。因此,设置强密码不仅保护了 Web 界面,还同时消除了 Telnet 这一不安全通道。


    🔒 强制 HTTPS 访问

    默认情况下,很多固件的 Web 管理界面通过 HTTP 明文传输,这意味着你的管理员用户名和密码在网络中以明文形式传递,任何处于同一网络的攻击者都可以通过简单的流量嗅探(如使用 Wireshark 或 tcpdump)截获你的管理凭据。

    📌 OpenWrt 配置步骤

    # 安装 HTTPS 支持包
    opkg update
    opkg install luci-ssl
    
    # 强制 HTTP 跳转到 HTTPS
    uci set uhttpd.main.redirect_https=1
    uci commit uhttpd
    /etc/init.d/uhttpd restart

    进一步的加固建议:安装完成后,可以通过以下命令将 uHTTPd 限制为仅监听 LAN 接口的 HTTPS 端口,彻底关闭 HTTP 监听:

    uci set uhttpd.main.listen_http=''
    uci set uhttpd.main.listen_https='192.168.1.1:443'
    uci commit uhttpd
    /etc/init.d/uhttpd restart

    这样做的好处是:即使在 LAN 内部,管理流量也全程加密传输,且 Web 界面仅可通过指定的 LAN IP 访问,进一步缩小了攻击面。

    📌 FreshTomato / DD-WRT:在管理设置中开启 HTTPS 并关闭 HTTP。DD-WRT 用户可在 Administration → Management 页面中将 "Web GUI Protocol" 设置为 "HTTPS Only";FreshTomato 用户同样在 Administration → Admin Access 中切换协议并指定端口。


    🛡️ SSH 安全化

    SSH 是远程管理路由器最重要的通道,但如果配置不当,它也可能成为攻击者的突破口。

    📌 核心措施

    • 禁用密码登录,仅允许 SSH 密钥认证。这可以从根本上消除暴力破解(Brute-force)攻击的风险——攻击者无法通过穷举密码来获取访问权限。
    • 建议在 OpenWrt 中更改默认的 Dropbear 端口(从 22 改为高位端口,如 2222 或更高的随机端口)。虽然更改端口本身不构成真正的安全措施(Security through Obscurity),但它能有效减少自动化扫描器的骚扰,降低日志噪音。
    # 更改 SSH 端口
    uci set dropbear.@dropbear[0].Port='22222'
    
    # 禁用密码认证
    uci set dropbear.@dropbear[0].PasswordAuth='off'
    uci set dropbear.@dropbear[0].RootPasswordAuth='off'
    
    # 限制 SSH 仅监听 LAN 接口
    uci set dropbear.@dropbear[0].Interface='lan'
    
    uci commit dropbear
    /etc/init.d/dropbear restart

    ⚠️ 重要提醒2025 年 12 月,OpenWrt 发布了安全公告 CVE-2025-14282,披露了 Dropbear SSH 服务器存在通过 Unix 域套接字转发进行的权限提升漏洞。虽然在默认配置(仅单一 root 用户)下实际影响有限,但如果你配置了非 root 用户账户,务必升级到 OpenWrt 24.10.4 或更新版本以修复此漏洞。

    📌 SSH 密钥生成与部署

    # 在你的电脑上生成 Ed25519 密钥对(比 RSA 更安全且更高效)
    ssh-keygen -t ed25519 -C "router-admin"
    
    # 将公钥上传到路由器
    # 方法一:通过 LuCI 界面 → System → Administration → SSH-Keys 粘贴公钥
    # 方法二:通过命令行
    cat ~/.ssh/id_ed25519.pub | ssh root@192.168.1.1 "cat >> /etc/dropbear/authorized_keys"

    建议优先使用 Ed25519 算法而非传统的 RSA,因为 Ed25519 密钥更短(256 位即可提供与 RSA 3072 位同等的安全强度)、签名和验证速度更快,且不易受到侧信道攻击。


    2. 无线网络的加固

    无线网络是家庭和小型办公网络中最脆弱的环节。与有线网络不同,Wi-Fi 信号穿透墙壁向四周广播,任何在信号范围内的人都可以尝试连接或窃听。因此,无线安全加固是路由器防护中至关重要的一环。

    🔐 强制 WPA3 加密

    只要硬件支持,应在 OpenWrt 无线设置或其他固件中优先开启 WPA3-SAE(Simultaneous Authentication of Equals,同时身份验证等式)。

    WPA3 相较于 WPA2 带来了根本性的安全提升:

    • 🛡️ 抵御离线字典攻击:WPA2 的 PSK 四次握手过程允许攻击者捕获握手包后在离线环境中无限次尝试密码破解。WPA3 的 SAE 握手(基于 Dragonfly 密钥交换协议)采用零知识证明机制,每次认证尝试都必须与接入点实时交互,从根本上消除了离线破解的可能性。
    • 🔑 前向保密(Forward Secrecy):即使密码最终被泄露,攻击者也无法解密之前捕获的历史流量——每个会话使用独立的加密密钥。
    • 🧩 抗 KRACK 攻击:WPA2 曾暴露的密钥重装攻击(KRACK)在 WPA3 架构下不再适用。

    ⚠️ 关于 WPA3 过渡模式(Transition Mode)的安全警告

    为了兼容不支持 WPA3 的旧设备,WPA3 定义了一种"过渡模式",允许同一 SSID 同时支持 WPA2 和 WPA3 连接。然而,安全研究人员 Mathy Vanhoef 和 Eyal Ronen 在 2019 年披露的"Dragonblood"漏洞系列表明,过渡模式会引入严重的降级攻击风险:攻击者可以搭建一个仅支持 WPA2 的恶意热点(Evil Twin),迫使支持 WPA3 的客户端回退到 WPA2 连接。虽然 WPA2 的四次握手会检测到降级并中止,但在部分握手过程中发送的帧已足以为字典攻击提供素材。

    2025 年的最新研究更进一步揭示了 WPA3 的其他弱点,包括 SAE 握手中的 SSID 未绑定缺陷(攻击者可利用此缺陷搭建同名恶意热点)、针对 SAE-PK 密码的时间-内存权衡攻击,以及管理帧保护(MFP)的局限性导致的解除认证攻击。目前学术界正在利用机器学习方法来检测 WPA3 降级攻击。

    📌 最佳实践如果你的所有设备都支持 WPA3,强烈建议使用纯 WPA3-SAE 模式(而非过渡模式),以彻底消除降级攻击的风险。如果必须使用过渡模式,请确保密码复杂度足够高(16 位以上随机密码),因为降级攻击最终还是依赖于对 WPA2 握手包的字典破解。


    📵 关闭 WPS

    WPS(Wi-Fi Protected Setup)漏洞极易被破解,所有固件均应彻底禁用此功能。

    WPS 的核心问题在于其 PIN 码认证机制存在严重的设计缺陷:8 位 PIN 码的最后一位是校验位,而前 7 位在验证时被分成两组(前 4 位和后 3 位)分别验证。这意味着攻击者只需要最多 11,000 次(10⁴ + 10³)尝试即可暴力破解 PIN 码,而非理论上的 10⁸ 次。使用 Reaver 或 Bully 等工具,整个破解过程可能仅需数小时。

    更关键的是,许多路由器即使在 GUI 中显示 WPS 已关闭,底层实现可能仍在响应 WPS 请求。 在 OpenWrt 中,确保在 /etc/config/wireless 中对每个无线接口设置 option wps_pushbutton '0'。在 DD-WRT 和 FreshTomato 中,在 Wireless Security 设置中明确禁用 WPS 所有模式(PIN 和 PBC)。


    📡 启用管理帧保护(802.11w / PMF)

    在 OpenWrt 中设置 ieee80211w=2(强制模式),可有效防止 Wi-Fi 解除认证攻击(Deauth Attack)。

    802.11w(也称为 Protected Management Frames, PMF)是 IEEE 于 2009 年批准的 802.11 标准修正案,旨在保护管理帧的完整性。在没有 PMF 的情况下,攻击者可以轻易伪造解除认证(Deauthentication)和解除关联(Disassociation)帧——只需知道目标的 MAC 地址,使用 aireplay-ng 等工具即可将任何设备踢出网络。这不仅是一种拒绝服务攻击手段,还常被用作"Evil Twin"攻击的前置步骤:先将目标断开,再引导其连接到恶意热点。

    📌 802.11w 的工作原理

    • 单播管理帧:使用已协商的会话密钥(PTK)添加消息完整性检查码(MIC),确保帧的来源合法且未被篡改。
    • 广播/多播管理帧:引入了新的完整性组临时密钥(IGTK,Integrity Group Temporal Key),通过四次握手过程协商,用于保护广播管理帧。
    • SA 查询机制(SA Teardown Protection):当 AP 收到已关联客户端的新关联请求时,不会立即断开原有连接,而是返回状态码 30("稍后重试")并附带重连时间,防止攻击者通过伪造关联请求来劫持连接。
    # OpenWrt 中启用 PMF(强制模式)
    uci set wireless.@wifi-iface[0].ieee80211w='2'
    uci commit wireless
    wifi reload

    ⚠️ 已知局限性802.11w 并非万能药。它仅保护特定类型的管理帧(解除认证、解除关联和健壮操作帧),不涵盖所有管理帧(如 Beacon 帧和 Probe 帧)。此外,在四次握手完成之前的管理帧仍然是不受保护的,这意味着攻击者可以在关联阶段实施干扰。RF 射频干扰型的拒绝服务攻击也完全不在 802.11w 的防护范围内。因此,802.11w/PMF 应作为纵深防御策略的第一层,建议结合无线入侵防御系统(WIPS)进行部署以获得更全面的保护。

    WPA3 已将 PMF 列为强制要求,因此如果你已经启用了纯 WPA3-SAE 模式,PMF 会自动启用。但对于仍在使用 WPA2 的网络,手动启用 PMF 仍然是极其重要的安全加固措施。


    🌐 访客网络隔离

    利用 OpenWrt 的网络防火墙区域(Zones),将访客 SSID 划入独立的隔离区域,严禁其访问主 LAN 资源。

    访客网络隔离的核心目标是:即使访客设备被恶意软件感染或访客本身怀有恶意,也无法触及你的核心网络资源(NAS、打印机、内网服务器等)。

    📌 OpenWrt 实现步骤

    1. 创建独立的访客网络接口:在 Network → Interfaces 中新建一个接口(如 guest),分配一个独立的子网段(如 192.168.2.0/24),与主 LAN 网段完全分离。
    2. 创建独立的防火墙区域:在 Network → Firewall 中新建一个名为 guest 的区域,设置其默认转发策略为 reject
    3. 配置区域间规则
      • guest → WAN:允许(让访客可以上网)
      • guest → LAN:拒绝(禁止访客访问内网资源)
      • LAN → guest:根据需要决定(通常也设为拒绝)
    4. 创建访客 SSID:在 Wireless 设置中新增一个 SSID,绑定到 guest 接口。
    5. 启用客户端隔离(AP Isolation)在访客无线接口中启用 option isolate '1',这将阻止连接到同一访客 SSID 的设备之间相互通信,防止访客设备间的 ARP 欺骗或横向攻击。

    在 DD-WRT 中,可以通过 Virtual Interfaces 功能创建多个 SSID,并利用 iptables 规则实现网段隔离。FreshTomato 则可通过 Advanced → Virtual Wireless 创建访客网络,并在 Access Restriction 中配置隔离规则。


    3. 系统漏洞与服务清理

    路由器运行的每一个服务都是一个潜在的攻击面。安全加固的核心原则之一就是"最小化攻击面"——只运行必要的服务,及时修补已知漏洞,移除一切不需要的组件。

    🔄 及时更新

    固件更新是最基础但也最容易被忽视的安全措施。根据安全社区的统计数据,大量路由器入侵事件的根因是已知漏洞未被及时修补。

    📌 OpenWrt

    关注 Security Advisory,使用 sysupgrade 保持固件为最新稳定版。

    截至 2026 年 2 月,以下是近期值得特别关注的 OpenWrt 安全漏洞:

    漏洞编号描述严重程度影响版本
    CVE-2025-14282Dropbear SSH 通过 Unix 域套接字转发的权限提升< 24.10.4
    CVE-2025-62526ubusd 微总线守护进程堆缓冲区溢出,可能导致远程代码执行(CVSS 7.9)🔴 高< 24.10.4
    CVE-2025-62525ltq-ptm 驱动本地权限提升,允许读写任意内核内存🔴 高< 24.10.4(仅影响 Lantiq 平台)
    TCP 会话劫持nf_conntrack_tcp_no_window_check 默认开启导致的路径外 TCP 会话劫持多个版本
    ASU 镜像服务器哈希碰撞SHA-256 截断为 12 字符导致哈希碰撞风险,恶意镜像可替代合法镜像🔴 高openwrt/asu 服务

    强烈建议升级到 24.10.4 或更新版本。注意:23.05、22.03 及更早版本已达到生命周期终点(EOL),不再接收安全更新,继续使用这些版本存在严重的安全风险。

    📌 FreshTomato

    定期检查 FreshTomato Wiki 获取更新。

    截至 2026 年 2 月,FreshTomato 的最新版本为 2026.1(2026 年 2 月 15 日发布)。此版本修复了多个 OpenSSL 1.1 相关的 CVE 漏洞(包括 CVE-2025-68160、CVE-2025-69418 至 CVE-2025-69421、CVE-2026-22795 和 CVE-2026-22796),并改进了 VPN 功能(包括 OpenVPN 对 2048 位 DH 参数的支持和 ECDH 密钥生成默认启用)和 WireGuard 的稳定性。强烈建议所有用户升级到 2026.1 以获取这些关键的安全修复。

    📌 DD-WRT

    DD-WRT 采用滚动发布模式(Rolling Release),通过频繁的 Beta 构建提供更新。截至 2026 年 1 月,最新的公开构建版本为 r63485(2026 年 1 月 25 日)。获取最新构建的推荐方式是访问 DD-WRT 论坛的构建公告板块,而非路由器数据库(其中的推荐版本可能严重过时)。务必使用有线 LAN 连接进行固件刷写,并在论坛中查看其他用户对新构建的稳定性反馈。


    🚫 禁用不安全协议

    彻底关闭 UPnP、SNMP 和 Telnet。在 OpenWrt 中,可以通过 opkg remove 彻底卸载不需要的服务包,减少攻击面。

    📌 UPnP(通用即插即用)——必须禁用

    UPnP 是路由器安全中最危险的功能之一。它的设计理念是"即插即用"——允许内网设备自动在路由器上开放端口,无需用户确认或任何认证。这一看似方便的功能带来了灾难性的安全后果:

    • 🔓 静默端口转发:任何内网设备(包括被恶意软件感染的设备)都可以在用户毫不知情的情况下在路由器上打开端口,将内部服务暴露到互联网。
    • 🤖 僵尸网络利用:历史上最著名的 IoT 僵尸网络 Mirai 就是通过暴露的 UPnP 端口传播的,发动了史上规模最大的 DDoS 攻击之一。
    • 🕵️ 内网侦察:CallStranger 漏洞(CVE-2020-12695)允许外部攻击者滥用 UPnP 服务进行 DDoS 攻击和内网扫描。
    • 2025 年仍在出现新的 UPnP 相关 CVECVE-2025-48821(Windows UPnP 权限提升,CVSS 7.1)、CVE-2025-25427(TP-Link 路由器 UPnP 页面 XSS)等漏洞表明,UPnP 的安全问题远未终结。

    现代智能家居设备(如 Philips Hue、Ring、Nest、Wyze 等)主流品牌均已采用云中继(Cloud Relay)架构,不需要 UPnP 或任何开放端口即可正常工作。如果你仍有少量设备确实需要端口转发,请使用手动端口转发代替 UPnP——这虽然稍微麻烦,但安全性高出数个量级。

    📌 SNMP——如非必需则禁用

    SNMP(简单网络管理协议)在企业环境中用于网络监控,但在家庭路由器上几乎没有使用场景。SNMPv1 和 SNMPv2c 使用明文传输社区字符串(相当于密码),极易被嗅探。如果确实需要 SNMP,务必使用 SNMPv3(支持加密和认证),并限制仅允许受信任的 IP 地址访问。 在 OpenWrt 中,可通过 opkg remove snmpd 彻底移除。

    📌 Telnet——必须禁用

    Telnet 以完全明文方式传输所有数据(包括密码),在任何安全评估框架中都被视为不可接受的协议。据统计,80% 的成功入侵起始于简单的网络配置错误,而开放的 Telnet 服务正是最典型的错误之一。 在 OpenWrt 中设置密码后 Telnet 自动关闭;在 DD-WRT 中应在 Services 选项卡中明确禁用 Telnet。

    📌 OpenWrt 服务清理命令示例

    # 查看当前已安装的服务包
    opkg list-installed
    
    # 移除不需要的服务
    opkg remove miniupnpd       # 移除 UPnP 守护进程
    opkg remove snmpd            # 移除 SNMP 守护进程
    opkg remove vsftpd           # 移除 FTP 服务(如已安装)
    
    # 检查并禁用不必要的启动服务
    # 通过 LuCI → System → Startup 查看所有服务列表
    # 对于不需要的服务,点击 "Disable" 阻止其随路由器启动

    🌍 DNS 劫持防护

    开启 Forced DNS Redirection。在 OpenWrt 上,推荐安装 https-dns-proxystubby 以实现 DNS over HTTPS(DoH)或 DNS over TLS(DoT),防止运营商嗅探访问记录。

    DNS 是互联网的"电话簿",将域名翻译为 IP 地址。传统的 DNS 查询以明文 UDP 传输(端口 53),这意味着:

    • 👁️ 运营商/中间人可以看到你访问的每一个网站域名
    • 🔀 恶意攻击者可以篡改 DNS 响应,将你引导到钓鱼网站(DNS 劫持/DNS 投毒)
    • 📊 部分运营商会记录、分析甚至出售用户的 DNS 查询日志

    📌 加密 DNS 方案对比

    方案协议OpenWrt 包名特点
    https-dns-proxyDoH(端口 443)luci-app-https-dns-proxy体积极小(<30KB),LuCI 界面支持,自动配置 dnsmasq,支持 Google/Cloudflare 等多家 DoH 提供商,非常适合嵌入式设备
    stubbyDoT(端口 853)stubby支持精细 TLS 版本控制、持久加密连接和 DNSSEC 验证,对解析器进行轮询
    dnscrypt-proxy2DNSCrypt / DoHdnscrypt-proxy2功能最全面,支持真正的负载均衡和匿名化,但资源占用较大

    选择建议:对于大多数用户,https-dns-proxy 是最易上手的方案(有 LuCI 图形界面支持)。如果你的运营商封锁了 DoT 使用的 853 端口,DoH 方案(使用标准的 443 端口)几乎不可能被封锁,因为这等于封锁所有 HTTPS 流量。如果你需要更精细的 TLS 控制和 DNSSEC 验证,stubby 是更好的选择。对于高安全需求环境,dnscrypt-proxy2 提供的匿名化功能是独一无二的。

    📌 https-dns-proxy 快速部署

    opkg update
    opkg install luci-app-https-dns-proxy
    
    # 安装后 init 脚本会自动更新 dnsmasq 配置
    # 默认使用 Google 和 Cloudflare 的 DoH 服务
    # 可通过 LuCI → Services → HTTPS DNS Proxy 进行配置
    /etc/init.d/https-dns-proxy enable
    /etc/init.d/https-dns-proxy start

    📌 强制 DNS 重定向(防止设备绕过路由器 DNS)

    即使你在路由器上配置了加密 DNS,内网中的设备(特别是智能电视、IoT 设备和使用内置 DoH 的浏览器如 Firefox)仍可能绕过路由器直接使用自己的 DNS 服务器。为了确保所有 DNS 查询都经过路由器的加密 DNS 通道,需要配置防火墙规则强制重定向所有 DNS 流量:

    # 在 OpenWrt 防火墙中添加 DNS 重定向规则
    # 将所有发往外部的 DNS 查询(端口 53)重定向到路由器本地
    iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:53
    iptables -t nat -A PREROUTING -i br-lan -p tcp --dport 53 -j DNAT --to-destination 192.168.1.1:53

    对于使用 DoH 的浏览器(如 Firefox 的 Trusted Recursive Resolver),由于它们使用 HTTPS 端口 443 进行 DNS 查询,简单的端口 53 重定向无法拦截。应对策略包括:在路由器上通过 DNS 黑名单屏蔽已知的 DoH 服务器域名(如 mozilla.cloudflare-dns.com),或在企业环境中使用组策略禁用浏览器内置 DoH。


    4. 进阶安全操作

    本章节面向有较高安全需求或希望深入了解路由器安全机制的进阶用户。这些操作需要一定的 Linux 网络和系统管理基础。

    🧱 防火墙策略

    OpenWrt 用户应熟悉 nftables/iptables 规则。例如,配置规则限制单 IP 的并发连接数,以抵御简单的 DDoS 或端口扫描。

    OpenWrt 从 22.03 版本开始默认使用 Firewall4(fw4),后端为 nftables,取代了传统的 iptables。nftables 相比 iptables 具有显著优势:语法更统一、性能更高(使用虚拟机架构处理规则)、支持原子更新(无需重载整个规则集),且在大量规则场景下表现远优于 iptables。

    📌 OpenWrt 内置的 SYN Flood 防护

    OpenWrt 默认防火墙配置已包含基础的 SYN Flood 保护,可在 /etc/config/firewall 中确认以下配置:

    option syn_flood '1'
    option synflood_protect '1'
    option synflood_rate '25/s'
    option synflood_burst '50'

    📌 使用 nftables 动态集合实现自动黑洞(推荐的 DDoS 缓解方案)

    以下是一种利用 nftables 动态集合(Dynamic Sets)进行自动化速率限制和恶意 IP 黑洞的高级配置方法。此方法源自 2025 年 1 月的安全实践,原理是:当某个 IP 的连接速率超过阈值时,自动将其加入黑洞集合,在指定时间内丢弃其所有流量:

    # 在 /etc/nftables.d/ 目录下创建自定义规则文件
    # 例如 /etc/nftables.d/10-rate-limit.nft
    
    # 定义动态黑洞集合,240 分钟超时后自动释放
    define blackhole_timeout = 240m
    
    table inet fw4 {
        set ratelimit_blackhole {
            type ipv4_addr
            flags dynamic, timeout
            timeout $blackhole_timeout
        }
    
        chain input_wan {
            # 先检查黑洞集合,命中则直接丢弃
            ip saddr @ratelimit_blackhole counter drop
    
            # 对新连接进行速率限制:超过每分钟 3 个新连接(突发 20 个)则加入黑洞
            ct state new limit rate over 3/minute burst 20 packets \
                add @ratelimit_blackhole { ip saddr } counter
        }
    }

    Firewall4 支持通过 /etc/nftables.d/*.nft 扩展机制添加自定义规则,文件按字母顺序加载。建议使用数字前缀命名(如 10-rate-limit.nft20-geo-block.nft)以控制加载顺序。nftables 的原子更新特性意味着你可以在不中断现有连接的情况下更新规则——这是相比 iptables 最大的优势之一。

    📌 连接数限制示例

    # 限制单个 IP 对本地 Web 服务的并发连接数
    nft add rule inet fw4 input_lan_rule \
        tcp dport {80, 443} \
        ct count over 10 \
        counter reject with tcp reset

    🔌 串口保护(物理安全)

    对于物理安全要求极高的环境,可在 OpenWrt 中通过以下命令开启 TTL 串口登录密码校验:

    uci set system.@system[0].ttylogin='1'
    uci commit system

    UART(通用异步收发传输器)串口是嵌入式设备调试中遗留的重大安全隐患。路由器电路板上通常保留有未焊接的 UART 测试点(TX、RX、GND、VCC 四个焊盘),攻击者只需要一个廉价的 USB-to-TTL 适配器(成本不到 10 元人民币)、一个万用表(用于识别引脚)和一个终端软件(如 PuTTY 或 minicom),就可以直接获得路由器的 root shell 访问权限——完全绕过 Web 界面和 SSH 的所有安全措施。

    2025 年仍在持续出现通过 UART 获取未授权 root 访问的 CVE,例如 CVE-2025-65731 影响 D-Link DIR-605L 路由器,攻击者通过物理接触 UART 引脚即可执行任意命令。

    📌 攻击过程揭秘

    1. 📋 开壳识别引脚:打开路由器外壳,在 PCB 上定位 UART 测试点(通常为 4 个排列成行的焊盘或过孔)
    2. ⚡ 确定引脚功能:使用万用表连续模式确定 GND,通电后测量电压确定 VCC(通常为 3.3V),通过逻辑分析仪或试验确定 TX 和 RX
    3. 🔗 连接适配器:将 USB-to-TTL 适配器连接到对应引脚(注意电压匹配,3.3V 设备连接 5V 适配器可能损坏设备)
    4. 💻 确定波特率:尝试常见波特率(9600、19200、38400、57600、115200),通常路由器使用 115200
    5. 🚨 获得 root shell:设备完全启动后,攻击者往往直接进入一个无需认证的 BusyBox root shell;或者在 U-Boot 启动阶段中断启动序列,获取 bootloader 级别的控制权

    📌 防护措施

    • 启用串口登录密码:如上述 ttylogin 设置,要求通过串口登录时也需要输入密码
    • 物理加固对于部署在非受控环境中的路由器(如公共场所、租赁办公室),考虑以下物理安全措施:使用防拆螺丝或环氧树脂封堵外壳、在 UART 焊盘上涂覆绝缘漆或移除焊盘、将路由器放置在带锁的网络机柜中
    • 固件加密在高安全需求场景下,可以考虑启用 U-Boot 的安全启动(Secure Boot)功能,防止攻击者通过串口篡改固件或加载恶意引导镜像

    🤖 自动拦截脚本

    在 DD-WRT 或 FreshTomato 中,可以编写自定义脚本定时从 Blocklist.de 获取恶意 IP 并写入防火墙黑名单。

    Blocklist.de 是一个由分布式 fail2ban 用户网络提供数据的恶意 IP 数据库,涵盖已知的密码暴力破解者、SSH 攻击源、垃圾邮件发送者等。通过定时拉取该列表并自动更新防火墙规则,你的路由器可以在恶意流量到达内网之前就将其阻断。

    📌 关键技术:使用 ipset 而非逐条 iptables 规则

    直接为每个黑名单 IP 创建一条 iptables 规则的方式效率极低——当黑名单包含数千个 IP 时,iptables 需要逐条顺序匹配,严重拖慢数据包处理速度。ipset 使用哈希表数据结构存储 IP 地址,查找时间复杂度为 O(1),只需一条 iptables 规则即可引用整个 IP 集合,性能提升数个数量级。注意 ipset 默认上限为 65,536(2¹⁶)个条目,对于大型黑名单可能需要调整 maxelem 参数。

    📌 FreshTomato 实现示例(在 Administration → Scripts → Scheduler 中配置):

    #!/bin/sh
    # 自动拉取 Blocklist.de 恶意 IP 并加入防火墙黑名单
    # 建议每 6-12 小时执行一次
    
    BLOCKLIST_URL="https://www.blocklist.de/downloads/export-ips_all.txt"
    IPSET_NAME="blocklist_de"
    TMP_FILE="/tmp/blocklist.txt"
    
    # 创建或刷新 ipset 集合
    ipset create $IPSET_NAME hash:ip maxelem 131072 -exist
    ipset flush $IPSET_NAME
    
    # 下载黑名单
    wget -q -O $TMP_FILE $BLOCKLIST_URL
    
    # 将 IP 地址逐行添加到 ipset
    if [ -f "$TMP_FILE" ]; then
        while IFS= read -r ip; do
            # 跳过空行和注释
            case "$ip" in
                ''|'#'*) continue ;;
            esac
            ipset add $IPSET_NAME "$ip" -exist
        done < "$TMP_FILE"
        rm -f $TMP_FILE
    fi
    
    # 确保 iptables 规则存在(避免重复添加)
    iptables -C FORWARD -m set --match-set $IPSET_NAME src -j DROP 2>/dev/null || \
        iptables -I FORWARD -m set --match-set $IPSET_NAME src -j DROP
    
    iptables -C INPUT -m set --match-set $IPSET_NAME src -j DROP 2>/dev/null || \
        iptables -I INPUT -m set --match-set $IPSET_NAME src -j DROP
    
    logger "Blocklist.de updated: $(ipset list $IPSET_NAME | grep 'Number of entries' | awk '{print $NF}') IPs blocked"

    📌 DD-WRT 实现

    在 DD-WRT 中,将上述脚本保存到 JFFS 分区(如 /jffs/etc/config/blocklist.sh),并在 Administration → Management → Cron 中添加定时任务:

    0 */6 * * * /jffs/etc/config/blocklist.sh

    也可以利用 GitHub 上的开源项目 kravietz/blacklist-scripts 或其维护分支 spithash/ipset-blacklist-script,这些脚本支持多个黑名单源(包括 Blocklist.de 和 Emerging Threats),能自动检测 OpenWrt 环境并识别 WAN 接口,为每个黑名单源创建独立的 ipset 集合以便日志中明确标识封锁来源。

    ⚠️ 注意事项ipset 数据存储在内存中,路由器重启后会被清空。建议将脚本同时配置为开机启动脚本和定时任务,确保重启后黑名单能及时恢复。此外,务必将你自己的公网 IP 和可信 IP 地址添加到白名单中,避免因误封而将自己锁在路由器外面。


    5. 安全加固检查清单

    为方便你在实际操作中逐项核对,以下是一份综合性的安全加固检查清单,涵盖本文所有关键配置项:

    类别检查项优先级
    🔑 管理接口修改默认 root 密码(12 位以上强密码)🔴 关键
    🔑 管理接口强制 HTTPS 访问管理界面🔴 关键
    🔑 管理接口SSH 禁用密码认证,仅使用密钥🔴 关键
    🔑 管理接口SSH/Web 界面限制仅 LAN 接口访问🟠 高
    🔑 管理接口更改 SSH 默认端口🟡 中
    🔐 无线安全启用 WPA3-SAE(优先纯模式)🔴 关键
    🔐 无线安全禁用 WPS 所有模式🔴 关键
    🔐 无线安全启用 802.11w/PMF(强制模式)🟠 高
    🔐 无线安全配置访客网络隔离🟠 高
    🔐 无线安全启用客户端隔离(AP Isolation)🟡 中
    🚫 服务清理禁用/移除 UPnP🔴 关键
    🚫 服务清理禁用/移除 SNMP🔴 关键
    🚫 服务清理禁用 Telnet🔴 关键
    🔄 系统更新升级到最新稳定版固件🔴 关键
    🔄 系统更新确认未使用 EOL 版本🔴 关键
    🌍 DNS 安全部署加密 DNS(DoH/DoT)🟠 高
    🌍 DNS 安全强制 DNS 重定向🟠 高
    🧱 防火墙确认 SYN Flood 保护已启用🟠 高
    🧱 防火墙配置连接速率限制🟡 中
    🤖 自动防御部署黑名单自动拦截脚本🟡 中
    🔌 物理安全启用串口登录密码🟡 中(视环境而定)

    📖 参考资源与延伸阅读

    Brave 回复 1 week, 6 days ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在