刚配好服务就被 Censys 扫到了?解密全网测绘的底层黑科技与防线收敛

在云服务器上刚刚拉起一个全新的 Nginx 实例,或者刚刚用 Let's Encrypt 申请完 SSL 证书,还没来得及在任何微信群、朋友圈或前端代码中公开域名,翻开访问日志,赫然出现了一串来自 scanner-*.censys-scanner.com 或 User-Agent 为 CensysInspect/1.1 的请求。

许多开发者常常产生一种悬疑感:这台机器的公网 IP 没有任何外部链接指向,域名也是刚刚解析的,扫描器到底是怎么在数分钟内精准顺藤摸瓜找上门的?

在网络安全与空间测绘(Cyber Asset Attack Surface Management, CAASM)领域,Censys 绝非普通的端口扫描脚本。它是一套融合了极速无状态探测算法、全球证书透明度日志实时监听与应用层指纹提取的超级雷达。

本文将从第一性原理出发,拆解 Censys 全网测绘的底层技术机制,并给出收敛网络暴露面、防止源站 IP 泄漏的硬核防御方案。


测绘双引擎:Censys 的全景感知拓扑

要理解 Censys 为什么如此"敏锐且流畅",首先需要审视其整体架构。Censys 并非盲目地在单机上跑循环,而是将全网探测拆解为宏观无差别轮巡微观事件驱动诱发两大通道。

如上图架构所示,Censys 的全网测绘管道主要由四大核心机制协同驱动:

  1. 宏观无差别轮巡(ZMap L4 高速探针):对全球整个 IPv4 地址空间(42.9 亿地址)以及数十亿 IPv6 前缀进行周期性地毯式扫描,监控 3,500+ 个常用与高危端口。
  2. 事件诱发流(CT Logs 秒级触发):实时挂载全球各大 CA 机构的证书透明度日志流(Certificate Transparency Logs),一旦捕获到新颁发的域名证书,立即触发探针对关联资产执行定向精细化探测。
  3. 应用层深度握手(ZGrab2 L7 探针):对所有开放端口发起真实的应用层协议握手(HTTP/HTTPS、SSH、TLS、SMB、MySQL、Elasticsearch 等),提取完整的服务端 Banner、TLS 证书链、Favicon Hash 与 HTTP 响应头。
  4. 资产知识图谱(Entity Knowledge Graph):将 IP、域名、组织 ASN、SSL 证书指纹与已知 CVE 漏洞关联,构建起实时可检索的网络空间地图。

破局 45 分钟:ZMap 无状态数学置换黑科技

在传统的网络扫描认知中,工具如 Nmap 采用的是有状态连接(Stateful Scanning)

传统有状态扫描的物理死穴

当使用传统工具扫描大量目标时,操作系统必须为每一个发出的 TCP SYN 数据包分配一个 Socket 句柄,并在内存中维护连接跟踪表(Connection State Table),记录目标 IP、目标端口、本地序列号并设置超时定时器等待对方响应。

  • 内存爆炸与句柄耗尽 :随着扫描并发度上升,内存占用呈 O(N) 线性暴涨,系统连接表瞬间溢出。
  • 网络风暴与防火墙拦截 :按顺序线性递增扫描 IP(如 192.168.1.1192.168.1.254)会打满相邻路由器的队列,并直接触发目标子网 IDS/IPS 防火墙的阈值拦截。
  • 单机耗时巨大:单机扫描完整的 42.9 亿 IPv4 空间通常需要数月乃至数年。

如上图对比所示,现代无状态扫描与传统有状态扫描在架构哲学上实现了代际跨越:

ZMap 的无状态发包即忘(Stateless)范式

2013 年,密歇根大学的研究团队(即 Censys 创始人团队)发布了开源扫描工具 ZMap。ZMap 彻底颠覆了传统的扫描哲学:

内存复杂度归零:O(1) 无状态发包

ZMap 完全绕过了操作系统的 TCP/IP 协议栈,直接利用 Raw Socket 在数据链路层构造原始以太网帧。它发出 SYN 包后绝不在内存中记录任何状态

为了在收到目标主机的 SYN+ACK 时确认这是一个合法的扫描响应(而非伪造包或历史残留数据),ZMap 将验证 Token 通过密码学哈希编码进了 TCP 报文的初始序列号(ISN)和源端口中:

text 复制代码
ISN = HMAC_Secret(DestIP || DestPort)

当接收模块抓取到外来的 SYN+ACK 响应包时,目标返回的确认号必定为 ISN + 1。接收进程只需在 O(1) 时间内用本地密钥计算哈希并比对,即可瞬间验证其有效性,无需任何内存查表操作。

乘法循环群伪随机全局置换

为了避免扫描流量集中冲击局部子网引发网络阻塞和安全风控,ZMap 必须让探测包完全均匀地离散飞向全球。

ZMap 引入了抽象代数中的有限域乘法循环群 。对于所有 IPv4 地址数量规模(取一个大于 2³² 的素数 p = 2³² + 15),选取一个本原元(Primitive Root)g。通过递推公式:

text 复制代码
x_{k+1} = (g · x_k) mod p

该算法可以在常数时间内生成一个覆盖整个 IPv4 空间、绝对不重复且全局均匀伪随机离散的 IP 访问序列。全网各个机房、各个国家的服务器在同一毫秒内随机接收到 1 个探测包,完全避免了单点网络风暴。

凭借这种纯粹的数学美感与无状态 Raw Socket 架构,单台配备普通千兆网卡的商用服务器即可跑满 1.488 Mpps(百万数据包每秒)的线速极限,在 45 分钟内完整扫描一遍全球所有 IPv4 地址


为什么刚配好 HTTPS 就被秒扫?CT 日志实时诱发

很多开发者发现,自己的服务既没有开放标准 80 端口,IP 也是冷门地址,但刚用 Let's Encrypt 配好域名证书不到 2 分钟,Censys 探针就如期而至。

这正是 证书透明度(Certificate Transparency, 简称 CT) 机制带来的副产物。

复制代码
[ 域名管理者申请 SSL/TLS 证书 ]
               │
               ▼
[ CA 机构 (Let's Encrypt / DigiCert) ]
               │
               ▼ (必须实时写入公共不可篡改日志)
[ CT Logs (RFC 6962 证书透明度日志流) ]
               │
               ▼ (秒级 WebSocket / HTTP 流式监听)
[ Censys CT Ingestion Pipeline ]
               │
               ▼ (提取 SANs 字段:api.example.com 及其 A 记录 IP)
[ 自动下发针对该 IP/域名的 ZGrab2 精准 L7 深度握手 ]

证书透明度的双刃剑

为了防止 CA 机构私自签发中间人攻击证书,现代浏览器体系强制要求所有公开合规的 SSL 证书在签发时,必须实时写入公开可查的 Merkle Tree 结构日志(CT Logs)。

Censys 等空间测绘巨头 24 小时挂载了全球所有主流 CT Log 的实时数据流。一旦我们在服务器上签发了证书,该证书的 Common Name (CN)、Subject Alternative Names (SANs) 就会在 5~10 秒内推送到 Censys 的爬虫队列中

随后,探针系统自动解析该域名的 DNS A 记录,并下发针对该 IP 的 L7 协议握手(HTTP GET、TLS Handshake、SSH Probe),提取对应的服务指纹。这就是服务刚上线就被秒级捕获的底层真相。


隐蔽风险:HTTPS 证书与源站 IP 逆向穿透

在实际业务架构中,Censys 扫描最常引发的严重安全隐患,是穿透 CDN / WAF 防护、导致源站真实 IP 裸露

如上图攻防链路所示,源站 IP 泄漏的核心机理在于证书与主机的绑定关系被逆向检索:

源站泄漏攻击链

许多团队在架构设计时,为业务域名配置了 Cloudflare 等 CDN/WAF 防护,以为攻击者只能看到 CDN 的节点 IP,从而高枕无忧。

然而,真实的源站 Nginx 服务器往往存在如下配置漏洞:

  1. 源站 443 端口对全网开放 :云安全组配置了 0.0.0.0/0 允许访问 443 端口。
  2. 默认虚拟主机绑定了真实证书 :当 Censys 扫描该服务器的真实公网 IP 时,发起的是一个不带 SNI(Server Name Indication) 的裸 TLS 握手。Nginx 由于没有配置哑主机,默认返回了配置中的真实业务证书(包含 *.company.com)。
  3. Censys 完成关联索引:Censys 将该证书指纹与源站真实 IP 存入数据库。
  4. 攻击者逆向搜索 :攻击者只需在 Censys 平台输入 services.tls.certificates.leaf_data.subject.common_name: "company.com" 或证书 SHA-256 哈希,即可一秒查出该域名背后隐藏的真实源站公网 IP。
  5. 绕过 CDN 直连攻击:拿到真实 IP 后,攻击者直接绕过 Cloudflare 的 DDoS 防御与 WAF 拦截规则,向源站发起打崩攻击或漏洞利用。

防线收敛:四步构建零暴露面防御体系

防范网络空间测绘与自动化扫描,最根本的原则是:绝不要试图依靠 IP 黑名单(把 Censys 的 IP 加入封禁列表毫无意义,因为黑客可以使用完全相同的 ZMap 引擎从任意 VPS 发起探测),而是要彻底消除非必要的暴露面,实施强身份验证与协议收敛

Nginx 默认虚拟主机哑响应(消除 SNI 证书泄漏)

在源站 Web 服务器中,必须将默认的 default_server 配置为自签名哑证书或直接挂断连接(HTTP 444),确保任何直接通过 IP 访问或未携带正确 SNI 域名的握手请求无法获取真实业务证书:

nginx 复制代码
# 捕获所有未匹配域名或裸 IP 直连请求,直接丢弃连接
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444; # Nginx 特有非标准状态码:立即无响应关闭 TCP 连接
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    # 配置无效的自签名哑证书
    ssl_certificate /etc/nginx/ssl/dummy.crt;
    ssl_certificate_key /etc/nginx/ssl/dummy.key;

    # 拒绝握手或返回 444
    return 444;
}

启用边缘双向认证(Authenticated Origin Pulls / mTLS)

在源站与 CDN 之间配置双向 mTLS 认证。源站 Nginx 仅信任 CDN 厂商下发的客户端证书:

nginx 复制代码
server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_certificate /etc/nginx/ssl/origin.crt;
    ssl_certificate_key /etc/nginx/ssl/origin.key;

    # 启用客户端证书验证(例如 Cloudflare 官方客户端 CA)
    ssl_client_certificate /etc/nginx/ssl/cloudflare-origin-ca.pem;
    ssl_verify_client on;

    location / {
        proxy_pass http://backend_upstream;
    }
}

当 Censys 探针或外部恶意脚本直接扫描源站 443 端口时,由于其无法提供合法的客户端 mTLS 证书,在 TLS 握手阶段就会被内核级切断,根本无法探测到应用层任何信息。

云安全组与网络防火墙白名单收敛

源站云主机的安全组(Security Groups)严禁对 0.0.0.0/0 开放 80/443 端口。必须仅放行 CDN 官方发布的出站 IP 网段:

bash 复制代码
# 示例:仅允许 Cloudflare 官方 IPv4 段访问 443 端口
iptables -N CLOUDFLARE
iptables -A INPUT -p tcp --dport 443 -j CLOUDFLARE

for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
    iptables -A CLOUDFLARE -s $ip -j ACCEPT
done

# 其余所有来源(含 Censys 及全网扫描器)直接 DROP
iptables -A CLOUDFLARE -j DROP

采用零公网入站架构(Cloudflare Tunnel)

对于不需要直接暴露公网 IP 的中后台服务或 API,最彻底的防御是采用 反向隧道架构(如 Cloudflare Tunnel / FRP / WireGuard)

  • 服务器完全不需要开放任何公网入站端口(入站防火墙全部封死)。
  • 本地运行 cloudflared 守护进程,向外主动建立出站 gRPC/QUIC 连接与边缘节点通信。
  • 全网任何 L4/L7 扫描器对该主机 IP 发起的任何端口探测,都只会收到无响应的黑洞丢包。

结语:在全网测绘时代重新审视暴露面

互联网的发展早已跨越了"隐蔽即安全"(Security through Obscurity)的时代。在 ZMap O(1) 无状态置换算法与 CT 证书透明度流的加持下,任何连入公网的设备与服务,都会在几分钟内被数字化索引。

面对 Censys 等测绘体系,我们不必恐慌,更无需将精力耗费在与扫描 IP 玩"打地鼠"式的拉黑游戏。理解其底层的网络与密码学原理,收敛默认虚拟主机、实施 mTLS 边缘契约并建立零信任入站防线,才是构建现代云原生架构的底气所在。

相关推荐
Sagittarius_A*10 小时前
【好靶场】PHP反序列化入门练习2
开发语言·web安全·信息安全·php·代码审计·反序列化
白猫不黑1 天前
从运维到网络安全:转行优势、路径与薪资前景全解析
运维·网络·web安全·网络安全·信息安全·渗透测试
Sagittarius_A*2 天前
公钥密码基础(三):RSA 数学原理:欧拉定理、模逆与快速幂
信息安全·密码学·rsa·公钥密码·密钥分发
Sagittarius_A*7 天前
公钥密码基础(一):从对称密码到公钥密码——密钥分发问题
信息安全·密码学·公钥密码·密钥分发
Sagittarius_A*10 天前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
.Peter11 天前
.NET/WPF 程序在部分 Windows 电脑无法保存用户环境变量:使用 DPAPI 实现安全兼容
windows·信息安全·c#·.net·wpf·环境变量·dpapi
Sagittarius_A*12 天前
后量子密码|前置基础 01|PQC 极简数学:模运算、有限域、多项式环、矩阵、范数与小系数噪声
线性代数·信息安全·矩阵·密码学·量子计算·pqc·后量子密码
Sagittarius_A*14 天前
哈希与认证基础(一):哈希函数的安全目标:原像、第二原像与碰撞
算法·安全·信息安全·密码学·哈希算法
Sagittarius_A*15 天前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码