raceksd-source/anci-oiv-resolver
GitHub: raceksd-source/anci-oiv-resolver
为智利国家网络安全法下的915个关键基础设施运营商提供从官方注册名称到真实域名的规范解析,消除推断误报并支持多维覆盖分析。
Stars: 0 | Forks: 0
# anci-oiv-resolver
[](LICENSE)
[](https://www.npmjs.com/package/anci-oiv-resolver)
[](#el-coverage-gap)
[-brightgreen.svg)](#la-solución)
[](#la-solución)
[](package.json)
[]()
[英文自述文件](README.en.md)
## 什么是 OIVs,为什么它们很重要?
**关键基础设施运营商 (OIVs)** 是被智利国家正式认定为**对国家安全至关重要**的组织。第 21.663 号法律(国家网络安全框架 · 2024)将 915 个组织归入此类,包括:
| 行业 | 代表性示例 |
|------|-----------|
| **银行/金融** | BCI · BancoEstado · Santander · Banco de Chile · 证券交易所 |
| **公共医疗** | FONASA · 地区医院 · MINSAL |
| **私立医疗** | Clínica Las Condes · Hospital Alemán · Clínica Indisa |
| **能源** | Enel · ENAP · Colbún · AES Andes · CGE |
| **电信** | ENTEL · Movistar · VTR · WOM · GTD |
| **水务** | Aguas Andinas · ESSBIO · ESSAL · Aguas del Altiplano |
| **交通运输** | Metro · LATAM · EFE · 高速公路特许经营商 |
| **燃料** | COPEC · Shell · Gas Natural · Sonacol |
| **政府** | SII · ANCI · ONEMI · CMF · 民事登记处 |
| **数字基础设施** | Sonda · Microsystem · 关键 IT 提供商 |
**国家网络安全局 (ANCI)** 在新法律下监督这些组织,规定了以下义务:
- 网络风险管理
- 在规定时间内报告事件
- 定期安全审计
- 业务连续性计划
## 此 resolver 面向谁?
该库对以下人员有用:
- **网络安全研究人员**:需要在被动 OSINT 研究之前解析 OIVs 的规范域名(主要用例)
- **合规顾问**:就第 21.663 号法律规定的义务向 OIVs 提供建议
- **科技记者**:在网络安全或关键基础设施调查中核实组织身份
- **学者**:研究智利关键基础设施的网络暴露差距
- **事件响应团队**:在活跃事件期间将域名与 OIVs 关联
- **监管机构和政策制定者**:审计监管框架的实际覆盖范围
如果你在上述任何领域工作,并且曾需要手动解析“ANCI 注册名称 → 实际域名”,此工具可自动完成**915 个 OIVs(100% 全部)**的解析,并伴有诚实的 DNS 验证。
## 为什么构建这个工具?
在研究智利负责任的披露差距(“覆盖率差距” · 参见配套论文)时,我们发现**自动根据注册名称推断域名的工具系统性失效**。已注册 OIVs 的分布如下:
```
915 OIVs registrados ANCI (Ley 21.663)
│
└── 915 catalogados — este tool (100% universo)
├── 10 sectores cerrados 100%
│ └── banca · telecomunicaciones · transporte · agua · empresas_estado
│ combustibles · salud · administración_estado · energía_eléctrica
│ infraestructura_digital
├── ~80% con dominios DNS verificados (A record confirmado)
└── ~20% con estado honesto documentado
└── NXDOMAIN · email-only · individual contractor · sin web pública
```
这些推断错误污染了学术研究数据集,用虚假报告填满了错误供应商的收件箱,并削弱了任何关于智利关键基础设施的严肃研究的可信度。
`anci-oiv-resolver` 提供了经过验证的 RUT → 规范域名的映射,消除了这些系统性的误报。
## 问题
在根据第 21.663 号法律(国家网络安全框架)正式注册的 **915 个关键基础设施运营商 (OIVs)** 中,**只有极小一部分拥有可验证的联系渠道**来接收负责任的披露报告。公共攻击面的实际覆盖范围有限,很少有组织满足启动符合 ISO/IEC 29147 原则的协调披露流程的最低条件。
这是智利 **覆盖率差距的第一层结构性问题**。
**第二层** 更加微妙但同样具有系统性:通过简单启发式推断“注册名称 → 域名”的被动研究工具会产生大量误报:
| OIV(ANCI 注册名称) | 简单推断 | 实际域名 |
|---|---|---|
| BANCO DE CRÉDITO E INVERSIONES | `bancodecrditoeinversiones.cl` ❌ | **bci.cl** ✓ |
| BANCO DEL ESTADO DE CHILE | `bancodelestadodechile.cl` ❌ | **bancoestado.cl** ✓ |
| BANCO BICE | `bancobice.cl` ❌ | **bice.cl** ✓ |
| TELEFÓNICA CHILE S.A. | `telefonicachile.cl` ❌ | **movistar.cl** ✓ |
| EMPRESA NACIONAL DE TELECOMUNICACIONES | `empresanacionaldetelecomunicaciones.cl` ❌ | **entel.cl** ✓ |
如果没有规范的 resolver,任何扫描智利 OIVs 的工具都会在根本不存在的域名上产生发现结果,污染向供应商的报告,损害研究的可信度,并污染学术数据集。
## 解决方案
`anci-oiv-resolver` 提供经过 DNS 验证的 **RUT → 规范域名** 映射,覆盖官方目录的 **915 个 OIVs(100%)**:
| 行业 | 总数 | 已验证 | 状态 |
|------|------|--------|------|
| 银行/金融 | 34/34 | 31/34 | 100% 已关闭 ⭐ |
| 电信 | 29/29 | 24/29 | 100% 已关闭 ⭐ |
| 交通运输 | 25/25 | 21/25 | 100% 已关闭 ⭐ |
| 水务 | 25/25 | 9/25 | 100% 已关闭 ⭐ |
| 国有企业 | 20/20 | 16/20 | 100% 已关闭 ⭐ |
| 燃料 | 25/25 | 22/25 | 100% 已关闭 ⭐ |
| 医疗 | 111/111 86/111 | 100% 已关闭 ⭐ |
| 国家行政管理 | 155/155 | 114/155 | 100% 已关闭 ⭐ |
| 电力能源 | 147/147 | 60/147 | 100% 已关闭 ⭐ |
| 数字基础设施 | 413/413 | 410/413 | 100% 已关闭 ⭐ v0.4.0 |
| **总计** | **915/915** | **~793/915** | **100% 全部** |
当 RUT 不在表中时,提供改进的启发式回退(重音标准化 + 法律后缀去除 + 品牌覆盖映射)。
**915 个 OIVs 已分类 · 100% ANCI 全部 · ~80% DNS 已验证 · 10/10 行业已关闭 · 被动 OSINT · 零主动扫描 · v0.4.0**
## 快速安装
```
npm install anci-oiv-resolver
```
## 使用方法
```
import { resolveOIVDomain } from 'anci-oiv-resolver';
// Lookup por tabla — alta confianza
const bci = await resolveOIVDomain('97006000-6', 'BANCO DE CRÉDITO E INVERSIONES');
// → { domain: 'bci.cl', source: 'known-domains', confidence: 1.0, verified: null }
// Con verificación DNS
const transbank = await resolveOIVDomain('96689310-9', 'TRANSBANK S.A.', { verify: true });
// → { domain: 'transbank.cl', source: 'known-domains', verified: true, mxRecords: ['10 mx.transbank.cl'] }
// Fallback heurístico para RUTs sin tabla
const unknown = await resolveOIVDomain('99000000-1', 'DISTRIBUIDORA GAS NORTE S.A.');
// → { domain: 'distribuidoragasnorte.cl', source: 'heuristic', confidence: 0.45, verified: null }
```
### 批量解析
```
import { resolveBatch } from 'anci-oiv-resolver';
const oivs = [
{ rut: '97006000-6', razonSocial: 'BANCO DE CRÉDITO E INVERSIONES' },
{ rut: '97030000-7', razonSocial: 'BANCO DEL ESTADO DE CHILE' },
{ rut: '62000560-6', razonSocial: 'AGENCIA NACIONAL DE CIBERSEGURIDAD' },
];
const resolved = await resolveBatch(oivs, { verify: true });
```
### 覆盖率统计
```
import { getCoverageStats } from 'anci-oiv-resolver';
const stats = getCoverageStats();
// → { total: 995, bySector: { infraestructura_digital: { count: 416, dnsVerified: 410 }, banca_finanzas: { count: 34 }, salud: { count: 111 }, administracion_estado: { count: 155 }, energia_electrica: { count: 150 }, ... }, dnsVerified: 793, dnsUnverified: 202 }
```
### CLI 演示
```
# 查找个体
npx tsx examples/cli-demo.ts 97006000-6
# 使用 DNS 验证
npx tsx examples/cli-demo.ts 96689310-9 "TRANSBANK S.A." --verify
# 覆盖率统计
npx tsx examples/cli-demo.ts --stats
```
## 完整 API
### `resolveOIVDomain(rut, razonSocial, options?)`
主要解析函数。
| 参数 | 类型 | 描述 |
|------|------|------|
| `rut` | `string` | 智利 RUT — 接受 `"97006000-6"`、`"97.006.000-6"`、`"97006000-k"` |
| `razonSocial` | `string` | ANCI 注册名称 — 用于启发式回退 |
| `options.verify` | `boolean` | 如果为 `true`,则执行 DNS A/MX 查找(增加 50–300ms) |
返回:`Promise`
```
interface OIVDomainResolution {
domain: string; // ej: "bci.cl"
source: 'known-domains' | 'heuristic';
rut: string; // RUT normalizado
razonSocial: string;
sector: OIVSector;
confidence: number; // 0–1 (1.0 = tabla+verificado, 0.45 = heurístico)
verified: boolean | null; // null si verify no fue solicitado
mxRecords: string[] | null;
}
```
### 底层原语
`resolveBytable(rut)` / `heuristicInfer(razonSocial)` / `verifyDomain(domain)` / `batchVerify(domains)`
已导出供高级使用。参见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
## 覆盖率差距
**915 个已注册的 OIVs。只有一小部分拥有有记录的披露联系人或公开映射的攻击面。**
这就是覆盖率差距:智利关键基础设施在很大程度上对安全研究社区不可见,不是因为它是安全的,而是因为基本的侦察层(域名映射)从未被系统化。
该库是逐步缩小这一差距的第一步。
有关完整方法论和负责任使用指南,请参见 [docs/METHODOLOGY.md](docs/METHODOLOGY.md)。
## 法律和道德背景
该 resolver 在**被动 OSINT 研究**框架下运行,符合:
- **第 21.663 号法律**(智利国家网络安全框架) — 通过 ANCI 正式指定 OIVs
- **第 21.459 号法律**(计算机犯罪) — 保护不涉及未授权访问的善意研究
- **ISO/IEC 29147:2018** — 协调漏洞披露
- **DOJ 善意安全研究框架**(2017) — 非恶意研究
该工具**不对系统进行任何未授权访问**。它仅查询公共 DNS(A 记录、AAAA 记录、MX 记录)并维护一张从公开来源(ANCI 注册表、NIC Chile、公共 DNS)手动验证的映射表。
## 配套研究
该工具伴随工作论文:
参见 [dmzs.dev/research](https://dmzs.dev/research) 获取研究主页和相关出版物。
## 学术引用
如果你在研究中使用此工具,请引用:
```
@misc{mellafe2026anci,
author = {Mellafe Zuvic, David},
title = {anci-oiv-resolver: Canonical Chilean OIV Domain Resolver},
year = {2026},
publisher = {GitHub},
version = {v0.1.0},
howpublished = {\url{https://github.com/raceksd-source/anci-oiv-resolver}},
note = {Companion paper: "Coverage Gap in Chilean Critical Infrastructure Cybersecurity" (Zenodo DOI pending)}
}
```
## 公开路线图
- **v0.2.0 — 已发布** — 367 条记录 · 6 个行业 100% 关闭 · 40.4% 全量覆盖
- **v0.3.0 — 已发布** — 644 条记录 · 9 个行业 100% 关闭 · 70.8% 全量覆盖
- **v0.4.0 — 已发布** — 915 个 OIVs 已分类 · 100% ANCI 全部 · 10/10 行业已关闭 · ~80% DNS 已验证 ⭐
- **2026 年第三季度** — v0.5.0 · CLI 二进制 (`npx anci-oiv-resolver --rut X`) · 反向查找 · Zenodo DOI
- **2026 年第三季度** — LASCON 2026 奥斯汀 TX(CFP 评估中)
- **2026 年第四季度** — 年度报告“智利 OIV 网络安全状况 2026”
## 作者
**David Mellafe Zuvic** · 独立网络安全研究员 · 智利拉塞雷纳
[david@reizan.io](mailto:david@reizan.io) · [dmzs.dev/research](https://dmzs.dev/research)
## 致谢
该工具是正在进行的关于第 21.663 号法律框架下智利 OIVs 网络暴露研究的一部分。所有数据均来自公开来源(ANCI 注册表、NIC Chile、公共 DNS)。
## 许可证
Apache 2.0 — 参见 [LICENSE](LICENSE).
标签:ANCI, CII, GNU通用公共许可证, Ley 21.663, MITM代理, Node.js, npm包, OIV, SYN扫描, 关键基础设施, 国家网络安全框架, 域名解析, 安全合规, 扫描工具, 数据映射, 智利, 暗色界面, 注册名称解析, 网络代理, 网络安全, 自动化攻击, 覆盖缺口研究, 隐私保护, 风险分析