IoT 安全态势感知:利用网络空间测绘发现暴露的 IoT Web 资产

📅 发布时间:2026/7/6 12:05:25 👁️ 浏览次数:
IoT 安全态势感知:利用网络空间测绘发现暴露的 IoT Web 资产
前言技术背景在现代网络攻防体系中信息收集是决定成败的第一步也是最关键的一步。网络空间测绘技术如同为数字世界绘制的“卫星地图”它将传统零散的端口扫描、服务识别提升到了战略层面使我们能够从宏观视角俯瞰全球或特定区域的资产分布、技术栈和安全漏洞。对于物联网IoT领域而言由于设备数量庞大、协议多样且安全防护普遍薄弱网络空间测绘成为发现未知、暴露资产进而进行大规模风险评估和威胁狩猎的核心手段。它在攻击链的“侦察”阶段扮演着无可替代的角色。学习价值掌握利用网络空间测绘发现IoT资产的方法您将能够解决“看不见”的问题主动发现企业网络边界之外未知、被遗忘或影子IT中的IoT设备。提升评估效率从一次性、小范围的渗透测试升级为持续性、大规模的资产安全态势感知。精准定位高危目标快速筛选出存在弱口令、未授权访问、已知漏洞的脆弱IoT Web管理界面为后续的渗透测试或应急响应提供精确输入。使用场景这项技术的使用方法非常广泛实际应用包括企业安全自查IT/安全部门定期测绘自身公网IP段排查未经授权上线的IoT设备。红蓝对抗演练攻击方红队用于快速找到防守方的薄弱环节如暴露的摄像头、门禁系统、楼宇自控系统等。安全研究与威胁情报安全研究员用于分析特定IoT设备的全球暴露情况、固件版本分布并生成威胁情报。合规性审计审计人员验证企业资产是否符合安全基线要求是否存在违规暴露的管理接口。一、IoT Web 资产测绘是什么精确定义IoT Web 资产测绘是一种利用网络空间搜索引擎如 Shodan、ZoomEye、FOFA 等的庞大数据集和高级检索语法通过分析HTTP/HTTPS服务的响应头Headers、响应体Body、证书Certificate、**图标Favicon**等特征来识别、分类和定位暴露在公网上的物联网IoT设备的Web管理界面的技术。一个通俗类比想象一下你要在全城找到所有“大华”品牌的摄像头。传统方法你开着车一条街一条街地跑看到一个摄像头就凑近看看品牌标识。这就像传统的端口扫描效率低下覆盖范围有限。测绘方法你直接走进城市监控指挥中心调出全市所有摄像头的实时画面和品牌型号列表。网络空间搜索引擎就是这个“指挥中心”它已经提前“跑”遍了整个互联网并把每个设备的“长相特征”如网页标题、特定HTML代码都记录在案。你只需要输入“大华摄像头”的特征就能立即得到一份完整的清单。实际用途攻击面发现快速找到可能存在漏洞的IoT设备入口。资产清点帮助企业全面了解自身暴露在外的IoT资产情况。漏洞应急当某个IoT设备爆发0-day漏洞时可迅速定位全球所有受影响的设备评估风险范围。供应链安全分析分析使用了特定有漏洞SDK或固件的设备在全球的分布情况。技术本质说明网络空间测绘的本质是“特征匹配”。搜索引擎的爬虫节点持续扫描全球IPv4/IPv6地址空间的常见端口抓取服务的Banner信息、HTTP响应、TLS证书等数据并为这些数据建立索引。用户通过提交检索查询语句Dork在庞大的索引库中匹配符合特定特征组合的资产。对于IoT Web资产这些特征通常是其Web管理界面独有的字符串、HTML结构、服务器类型或证书信息。下图通过 Mermaid 流程图展示了其核心原理安全工程师网络空间搜索引擎持续扫描全球IP结构化处理与索引提取唯一指纹提交查询在数据库中匹配返回匹配结果分析与验证爬虫节点原始数据采集\n(Banner, HTTP Response, Certs)海量资产特征数据库分析目标IoT设备特征构造检索语法 DorkAPI/Web接口资产列表\n(IP, Port, 快照)定位脆弱IoT资产这张图清晰地展示了从数据采集到用户查询并最终定位资产的完整流程突出了“特征提取”与“数据库匹配”这两个核心环节。二、环境准备本次实战我们将使用FOFA作为网络空间搜索引擎并结合 Python 编写自动化脚本。工具FOFA 平台账号、Python 3.x核心依赖requests库工具版本Python 版本3.8requests 库版本2.25.1下载与安装方式注册 FOFA 账号访问fofa.info并注册一个账号。免费会员有查询限制建议升级为高级会员以获得更强的查询能力和API访问权限。获取 API Key登录后在“个人中心” - “API接口”中找到你的 Email 和 API Key。这是后续脚本自动化调用的凭证。安装 Python 环境如果你的系统中没有 Python请从python.org下载并安装。安装 requests 库这是 Python 中用于发送HTTP请求的标准库。# 核心配置命令安装依赖库pipinstallrequests可运行环境你可以在任何安装了 Python 和 requests 库的操作系统Windows, macOS, Linux上运行后续的脚本。为了环境隔离推荐使用venv。# 创建并激活虚拟环境 (以 Linux/macOS 为例)python3 -m venv fofa_envsourcefofa_env/bin/activate# 在虚拟环境中安装依赖pipinstallrequests# 退出虚拟环境# deactivate对于希望使用 Docker 的用户可以创建一个包含 Python 和所需库的简单环境。Dockerfile 示例# 使用官方 Python 镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 安装 requests 库 RUN pip install requests # 容器启动时默认执行的命令例如保持容器运行 CMD [python]构建和运行 Docker 容器# 构建镜像dockerbuild -t fofa-scanner.# 运行容器并进入交互式 shelldockerrun -it --rm fofa-scanner /bin/bash三、核心实战本次实战目标是发现暴露在公网上的某款常见的**海康威视Hikvision**网络摄像头的 Web 管理界面。这类设备历史上曾爆出过多个严重漏洞。警告以下所有操作仅限在获得明确授权的测试环境中使用。未经授权的扫描和测试行为可能违反当地法律法规。步骤 1指纹特征分析首先我们需要找到这类设备 Web 界面的独有特征。通过浏览器访问一个已知的海康威视摄像头IP查看网页源代码CtrlU。我们发现其登录页面通常包含一个名为web-hikvision.css的样式表文件。目的提取一个足够独特且不易改变的字符串作为搜索指纹。发现的指纹/web-hikvision.css步骤 2在 FOFA 平台进行手动验证在 FOFA 的搜索框中输入我们找到的指纹。FOFA 的查询语法是keyvalue的形式。目的验证指纹的有效性和准确性。查询语句body/web-hikvision.css请求在 FOFA 网站上执行此搜索。响应/输出结果FOFA 返回了大量IP地址列表点击任意一个结果其网页快照或直接访问都显示为海康威视的登录界面。这证明了我们的指纹是有效的。(注此为示意图实际结果会显示IP、端口、标题等信息)步骤 3编写自动化脚本手动搜索效率有限我们需要编写一个自动化脚本来批量获取并处理这些资产。以下是一个完整的 Python 脚本它通过调用 FOFA API 来执行查询、翻页并保存结果。# -*- coding: utf-8 -*-# 语言: Python 3importrequestsimportbase64importjsonimporttimeimportos# --- 参数配置 ---# 警告本脚本仅用于授权的教育和安全研究目的。未经授权的扫描是违法的。# 请在此处填入您的 FOFA 个人信息FOFA_EMAILos.getenv(FOFA_EMAIL,your_emailexample.com)FOFA_KEYos.getenv(FOFA_KEY,your_fofa_api_key)# 查询参数SEARCH_QUERYbody/web-hikvision.css# 目标资产的搜索语法PAGE_SIZE100# 每页获取的数据量会员最大10000MAX_PAGES5# 最大查询页数防止滥用# API 地址FOFA_API_URLhttps://fofa.info/api/v1/search/alldefsearch_fofa_assets(query,pages,size): 通过 FOFA API 查询资产。 :param query: str, FOFA 查询语句. :param pages: int, 要查询的总页数. :param size: int, 每页的结果数量. :return: list, 包含所有资产信息的列表. ifFOFA_EMAILyour_emailexample.comorFOFA_KEYyour_fofa_api_key:print([错误] 请在脚本中配置您的 FOFA Email 和 API Key。)return[]print(f[信息] 开始查询:{query})all_assets[]# FOFA API 要求查询语句为 Base64 编码query_b64base64.b64encode(query.encode(utf-8)).decode(utf-8)forpageinrange(1,pages1):try:params{email:FOFA_EMAIL,key:FOFA_KEY,qbase64:query_b64,size:size,page:page,fields:host,ip,port,title,server# 指定需要返回的字段}print(f[信息] 正在获取第{page}/{pages}页...)responserequests.get(FOFA_API_URL,paramsparams,timeout30)response.raise_for_status()# 如果请求失败 (非2xx状态码)则抛出异常dataresponse.json()ifdata.get(error):print(f[错误] API 返回错误:{data.get(errmsg)})breakresultsdata.get(results,[])ifnotresults:print([信息] 未找到更多结果。)breakall_assets.extend(results)print(f[成功] 已获取{len(results)}条资产总计{len(all_assets)}条。)# API 调用频率限制友好等待time.sleep(2)exceptrequests.exceptions.RequestExceptionase:print(f[严重错误] 网络请求失败:{e})# 可以在这里加入重试逻辑breakexceptjson.JSONDecodeError:print(f[严重错误] 解析响应失败内容:{response.text})breakexceptExceptionase:print(f[未知错误] 发生异常:{e})breakreturnall_assetsdefsave_results_to_file(assets,filenamefofa_results.txt): 将资产列表保存到文件。 :param assets: list, 资产列表. :param filename: str, 输出文件名. print(f\n[信息] 查询完成总共发现{len(assets)}条资产。)ifnotassets:returnwithopen(filename,w,encodingutf-8)asf:f.write(host,ip,port,title,server\n)# 写入表头forassetinassets:# asset 是一个列表顺序与 fields 参数对应line,.join(map(str,asset))f.write(line\n)print(f[成功] 结果已保存到文件:{filename})if__name____main__:# --- 脚本主入口 ---# 核心实战示例discovered_assetssearch_fofa_assets(querySEARCH_QUERY,pagesMAX_PAGES,sizePAGE_SIZE)ifdiscovered_assets:save_results_to_file(discovered_assets)代码说明参数化将 FOFA 凭证、查询语句、查询页数等作为可配置参数方便复用。注释关键代码行都有注释说明其目的。错误处理使用try...except块捕获网络异常、API返回错误、JSON解析失败等情况并给出明确提示。授权警告代码开头明确标注了授权测试的警告信息。运行将你的 FOFA Email 和 Key 填入脚本或设置为环境变量然后执行python your_script_name.py。脚本将自动查询并将结果保存为fofa_results.txt文件。四、进阶技巧常见错误指纹过于宽泛如使用titleLogin会导致大量无关结果浪费查询资源。指纹必须尽可能精确。指纹过于狭窄如使用包含固件版本号的字符串可能只能匹配到特定版本的设备错过其他版本。忽略证书信息很多IoT设备使用自签名证书或特定的证书颁发机构cert和cert.subject字段是极佳的指纹来源。例如cert.subjectHikvision。忘记编码FOFA API 的qbase64参数要求查询语句必须是 Base64 编码直接传入明文会报错。性能 / 成功率优化组合查询使用逻辑运算符,||,!组合多个特征提高准确率。例如要寻找在美国的、使用了特定服务器软件的海康设备body/web-hikvision.css countryUS serverHikvision-Webs。利用 Favicon 图标网站的小图标Favicon是极强的指纹。FOFA 支持对图标的 hash 进行搜索。你可以先获取目标图标计算其 MurmurHash3 值然后使用icon_hash-123456789这样的语法进行搜索。这是最高效、最准确的指纹之一。关注协议特定字段除了body和title还可以利用header、server等字段。例如某些设备在 HTTP 响应头中有独特的Server字段。时间范围过滤只关注近期活跃的资产可以加入after2025-01-01或before2026-01-01来过滤。实战经验总结指纹是活的设备固件会更新网页会改版。一个好的指纹可能在几个月后失效。需要持续对已知设备进行分析维护和更新你的指纹库。多平台交叉验证在 FOFA 找到的结果可以去 Shodan 或 ZoomEye 用等价的语法再搜一遍进行交叉比对可能会有新的发现。从已知到未知先从你手头已有的IoT设备开始分析提取指纹再用这个指纹去发现你未知的同类设备。这是最可靠的指纹获取方式。对抗 / 绕过思路高级的对手或注重安全的产品会有意对抗网络空间测绘。修改默认特征厂商或管理员会修改默认的网页标题、CSS文件名、Server头等使基于这些特征的搜索失效。WAF/IPS 拦截Web应用防火墙可能会拦截来自已知测绘平台爬虫节点的扫描流量。蜜罐攻击者可能会部署大量伪装成IoT设备的蜜罐诱骗你进行攻击从而暴露你的身份和意图。绕过思路寻找“不变”的特征即使网页内容可改但某些深层次的特征如特定的JS库函数调用方式、API端点路径、证书的组织单位OU等可能更难修改。利用旁路信息例如如果设备会与特定的NTP服务器或云平台通信虽然这不属于Web特征但结合威胁情报可以间接关联资产。主动探测与被动测绘结合对于被WAF拦截的情况可以尝试使用自己的VPS更换IP和User-Agent对测绘平台给出的IP列表进行小范围、低频率的二次验证。五、注意事项与防御错误写法 vs 正确写法 (以查询语法为例)场景错误写法 (低效/不准)正确写法 (高效/精准)查找海康设备titleHIKVISIONbody/web-hikvision.css serverHikvision-Webs查找特定区域资产bodycamera bodyUSAbodycamera countryUS查找特定图标bodyfavicon.icoicon_hash-2102144229风险提示法律风险未经授权的资产发现和漏洞扫描在绝大多数国家都是违法行为。务必在授权范围内进行。数据准确性测绘平台的数据存在延迟某个IP现在可能已经不是IoT设备了。所有结果都需要二次验证。触发告警你的查询和后续验证行为可能会被目标的安全设备如SIEM, IDS记录和告警。开发侧安全代码范式 (给IoT设备厂商)移除或随机化硬编码特征不推荐link relstylesheet typetext/css href/css/web-hikvision.css推荐在构建过程中生成带哈希值的文件名如link relstylesheet typetext/css href/static/css/main.a8f5e7.css。自定义服务器响应头不推荐Server: Hikvision-Webs/2.0推荐Server: Web-Server或直接不返回该字段。提供可配置的标题允许管理员在首次设置时修改默认的网页标题。运维侧加固方案 (给设备使用者)网络隔离最核心的防御措施。将IoT设备置于独立的VLAN中并使用防火墙严格限制其对公网的访问。除非业务绝对必要否则禁止将Web管理界面暴露在公网上。访问控制列表 (ACL)如果必须公网访问应配置防火墙或设备自身的ACL仅允许来自特定可信IP地址如公司总部、运维堡垒机的访问。修改默认凭证立即修改设备的默认管理员密码。固件更新保持设备固件为最新版本以修复已知漏洞。使用VPN接入部署VPN服务要求所有远程管理操作必须通过VPN连接到内网后才能进行。日志检测线索Web服务器日志监控到大量来自非正常用户的、针对特定路径如/web-hikvision.css的GET请求尤其是来源IP分散且非业务常用IP段时可能是测绘行为。防火墙日志大量来自已知测绘平台IP段FOFA, Shodan等会公布其爬虫IP的连接请求。异常登录尝试在发现暴露资产后攻击者通常会尝试弱口令爆破。监控登录页面的失败尝试率是关键。总结核心知识IoT Web资产测绘的本质是利用网络空间搜索引擎通过匹配HTTP响应体、响应头、证书、图标等独特指纹来大规模发现暴露的设备管理界面。使用场景它贯穿于企业自查、红蓝对抗、威胁情报和安全研究等多个领域是现代网络安全态势感知的基石能力。防御要点最有效的防御是网络隔离禁止将管理界面直接暴露于公网。如果无法避免则必须结合ACL、VPN、强密码和及时的固件更新。知识体系连接这项技术是资产管理和漏洞管理的前置步骤。发现资产看到它- 识别漏洞评估它- 进行处置修复它。它完美连接了侦察与后续的攻击/防御阶段。进阶方向深入研究特定协议如RTSP, ONVIF、学习二进制固件分析以提取更深层次的指纹、结合机器学习对测绘数据进行自动化聚类和风险排序是成为该领域专家的必经之路。自检清单是否说明技术价值是否给出学习目标是否有 Mermaid 核心机制图是否有可运行代码是否有防御示例是否连接知识体系是否避免模糊术语