
59
BGP Hijacking – это несанкционированный захват чужих IP-префиксов через подделку маршрутных анонсов в протоколе BGP (Border Gateway Protocol). Проще говоря: ты говоришь всему интернету «этот блок адресов – мой», и трафик начинает идти к тебе. Интернет верит тебе на слово – именно в этом и состоит корень всех проблем.
Как работает BGP: фундамент
BGP – это протокол, на котором держится вся маршрутизация интернета. Каждая Автономная Система (AS) – это сеть провайдера, дата-центра, корпорации – анонсирует своим соседям, какие IP-префиксы она обслуживает.
Например:
192.0.2.0/24 и объявляет об этом соседямПроблема: BGP не проверяет, имеет ли AS право анонсировать этот префикс. Никакой подписи, никакого токена – просто доверие.
Три вектора угона
1. Direct Prefix Hijack – прямой захват
Самая грубая атака: злоумышленник просто анонсирует чужой префикс из своей AS.
|
1 2 3 4 5 |
# Легитимный анонс AS3758 → 203.127.225.0/24 # Атакующий (AS17894) объявляет тот же префикс AS17894 → 203.127.225.0/24 ← BGP выберет по метрикам |
Реальный кейс: 10 февраля 2025 AS17894 сделал именно это – мисанонсировал /24 префикс, который входил в /16 легитимного владельца AS3758. Это был классический sub-prefix hijack.
2. Sub-Prefix Hijack – более специфичный маршрут
Это более умный вариант. BGP всегда предпочитает более конкретный маршрут (longer prefix match). Значит, анонсируя /25 вместо /24 жертвы, атакующий гарантированно побеждает в таблице маршрутизации.
|
1 2 3 |
Жертва: 10.10.0.0/24 (AS 1000) Атакующий: 10.10.0.0/25 (AS 6666) ← побеждает! 10.10.0.128/25 (AS 6666) ← захватывает весь /24 |
Именно этот метод использовался в инциденте с Cloudflare 1.1.1.1 в июне 2024 года – комбинация BGP hijack и route leak положила часть DNS-трафика.
3. AS-PATH Manipulation – путь через жертву
Продвинутая техника. Атакующий включает ASN жертвы в свой AS-PATH, имитируя легитимный маршрут. Это обходит фильтры, которые проверяют AS-PATH на предмет “чужих” ASN.
|
1 2 3 4 5 6 |
# Нормальный анонс от жертвы: AS-PATH: 64496 → destination # Атакующий добавляет ASN жертвы в начало: AS-PATH: 64496 → 99999 → destination ↑ подделан |
Реальные кейсы – деньги и хаос
| Год | Инцидент | Масштаб |
|---|---|---|
| 2018 | BGP hijack DNS Amazon Route 53 → угон MyEtherWallet | Украдено ~$150k в ETH |
| 2019 | DQE Communications + BGP Optimizer | ~20 000 префиксов, 15% трафика Cloudflare |
| 2022 | KLAYswap через BGP + поддельный TLS-серт | $2 млн украдено за несколько часов |
| 2024 | Cloudflare 1.1.1.1 DNS hijack | Route leak + hijack, июнь 2024 |
| 2025 | Stealthy sub-prefix hijack AS17894 | Подтверждён RIPE RIS, февраль 2025 |
Схема атаки на MyEtherWallet была особенно элегантной: угнали DNS Route53 → ответили на DNS-запрос поддельным IP → выдали фишинговый сайт с HTTPS-сертификатом, полученным на угнанный домен во время атаки.
Инструменты атакующего
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Мониторинг BGP-анонсов через RIPE Stat API # Можно использовать для разведки чужих префиксов import requests def get_prefix_origins(prefix: str): """Получаем все AS, которые сейчас анонсируют префикс.""" url = "https://stat.ripe.net/data/routing-status/data.json" r = requests.get(url, params={"resource": prefix}, timeout=10) data = r.json() origins = data.get("data", {}).get("origins", []) for o in origins: asn = o.get("origin") visibility = o.get("visibility", 0) print(f" AS{asn}: {visibility:.1f}% visibility") return origins # Разведка — смотрим кто анонсирует целевой блок get_prefix_origins("8.8.8.0/24") |
Разведывательный арсенал:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# ExaBGP конфиг для анонса произвольного префикса # (для тестовой среды / авторизованного пентеста) neighbor 192.168.1.1 { router-id 10.0.0.1; local-address 10.0.0.2; local-as 65001; peer-as 65000; static { route 198.51.100.0/24 next-hop 10.0.0.2; } } |
BGP Hijacking для угона TLS-сертификатов
Это отдельный класс атак – BGP + PKI = profit. Схема:
Именно так был атакован KLAYswap в 2022 году.
Обнаружение в реальном времени
Cloudflare и RIPE разработали системы детектирования на основе сравнения ожидаемых ROA (Route Origin Authorization) с реальными BGP-анонсами.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/bash # bgp-hijack-monitor.sh — запускать через cron каждые 5 минут PREFIX="YOUR_PREFIX/24" AUTHORIZED_ASN="YOUR_ASN" ORIGINS=$(curl -s \ "https://stat.ripe.net/data/routing-status/data.json?resource=$PREFIX" \ | python3 -c " import sys, json data = json.load(sys.stdin) for o in data.get('data', {}).get('origins', []): print(o.get('origin', '')) ") for asn in $ORIGINS; do if [ "$asn" != "$AUTHORIZED_ASN" ]; then echo "[ALERT] BGP Hijack! AS$asn анонсирует $PREFIX" \ | mail -s "BGP HIJACK DETECTED" admin@yourdomain.com fi done |
Инструменты мониторинга: ARTEMIS (open-source, RIPE NCC), Qrator Radar, Cloudflare Radar BGP Tools, NIST RPKI Monitor.
Защита: RPKI – единственный серьёзный ответ
RPKI (Resource Public Key Infrastructure) – это криптографическая инфраструктура, которая связывает IP-префиксы с авторизованными ASN через ROA (Route Origin Authorization) – подписанные сертификаты.
|
1 2 3 4 5 |
ROA содержит: - Префикс: 192.0.2.0/24 - Авторизованный ASN: 64496 - Max prefix length: /24 - Подпись: RSA/ECDSA от владельца ресурса (RIR) |
Если чья-то AS анонсирует твой префикс – роутеры с включённым ROV (Route Origin Validation) отбросят этот анонс как RPKI Invalid.
Но есть нюанс: RPKI работает только если оба – ты публикуешь ROA и транзитные сети включают ROV. Если твой аплинк не валидирует – RPKI тебя не спасёт. Это проблема коллективного действия, которая всё ещё не решена.
Дополнительные меры защиты:
BGP создавался в 1989 году на салфетке в ресторане – и до сих пор управляет трафиком всего интернета. В Q1 2025 Qrator Labs зафиксировали 12 глобальных BGP route leaks и 1 подтверждённый глобальный BGP hijack – и это только то, что попало в публичные коллекторы. Реальных инцидентов в разы больше.