17 KiB
🌐 Мова: English | Українська | Русский
Адаптивний eBPF-файрвол з AI-ханіпотом
The Blackwall — Я написав розумний файрвол, бо Cyberpunk 2077 зламав мені мозок
"За Чорною Стіною є речі, від погляду на які нетраннер миттєво згорить."
— Альт Каннінгем, імовірно
Зараз будую enterprise AI-автоматизацію в Dokky
Відкритий для Enterprise Consulting & Y-Combinator: xzcrpw1@gmail.com
Коротко: я грав у Cyberpunk 2077 і подумав: "А що, якби Blackwall був справжнім?" Тож я написав адаптивний eBPF-файрвол із ШІ-ханіпотом, який вдає із себе зламаний Linux-сервер.
~8 500 рядків Rust. Жодного unwrap(). Одна людина.
Що це таке?
У лорі Cyberpunk 2077 Blackwall (Чорна Стіна) — це цифровий бар'єр, побудований NetWatch, щоб відділити цивілізовану Мережу від диких ШІ — цифрових створінь настільки небезпечних, що один погляд на них може спалити тобі мозок через нейроінтерфейс.
Цей проєкт — моя версія. Не від диких ШІ (поки що), а від реальних загроз.
The Blackwall — це адаптивний мережевий файрвол, який:
- Працює всередині ядра Linux через eBPF/XDP — обробляє пакети на швидкості лінії ще до того, як вони потрапляють у мережевий стек.
- Виконує JA4 TLS-фінгерпринтинг — ідентифікує зловмисних клієнтів за їхнім ClientHello.
- Не просто блокує атакуючих — він перенаправляє їх у тарпіт, фейковий Linux-сервер на базі LLM, який грає роль зламаного
root@web-prod-03. - Має поведінковий рушій, що відстежує поведінку кожної IP-адреси із часом — патерни сканування портів, інтервали beacon-з'єднань, аномалії ентропії.
- Підтримує розподілений режим — декілька вузлів Blackwall обмінюються даними про загрози peer-to-peer.
- Записує PCAP підозрілого трафіку для форензики.
- Включає Deception Mesh — підроблені SSH, HTTP (WordPress), MySQL та DNS-сервіси, щоб заманювати та фінгерпринтити атакуючих.
Найцікавіша частина
Коли зловмисник підключається до тарпіту, він бачить:
Ubuntu 24.04.2 LTS web-prod-03 tty1
web-prod-03 login: root
Password:
Last login: Thu Mar 27 14:22:33 2025 from 10.0.0.1
root@web-prod-03:~#
Це все несправжнє. Це LLM, що прикидається bash-ем. Він реагує на ls, cat /etc/passwd, wget, навіть rm -rf / — усе фейкове, усе логується, усе створене, щоб марнувати час атакуючого, поки ми вивчаємо його методи.
Уявіть: зловмисник витрачає 30 хвилин, досліджуючи «зламаний сервер»... який насправді є ШІ, що тягне час, поки Blackwall мовчки записує все.
Це нетраннерство рівня V.
Архітектура — як працює ICE
Мовою Cyberpunk:
- XDP = перший шар ICE Чорної Стіни — рішення за мілісекунди.
- Поведінковий рушій = ШІ-спостереження NetWatch.
- Тарпіт = демон за стіною, що заманює нетраннерів у фейкову реальність.
- Threat Feeds = розвідка від фіксерів з усієї Мережі.
- PCAP = брейнданс-записи вторгнення.
Крейти воркспейсу
| Крейт | Рядки | Призначення | Аналог із Cyberpunk |
|---|---|---|---|
common |
~400 | #[repr(C)] спільні типи між ядром і юзерспейсом |
Контракт — про що обидві сторони домовились |
blackwall-ebpf |
~1 800 | XDP/TC програми в ядрі | Сам ICE Чорної Стіни |
blackwall |
~4 200 | Юзерспейс-демон, поведінковий рушій, ШІ | Центр управління NetWatch |
tarpit |
~1 600 | TCP-ханіпот з LLM bash-симуляцією | Демон, що заманює нетраннерів |
blackwall-controller |
~250 | Координатор розподілених сенсорів | C&C сервер Арасаки |
xtask |
~100 | Інструменти збірки | Набір ріпердока |
Разом: ~8 500 рядків Rust, 48 файлів, 123 тести, 0 unwrap() у продакшн-коді.
Ключові фічі
1. Обробка пакетів на рівні ядра (XDP)
Пакети аналізуються у віртуальній машині eBPF до того, як вони дістануться до TCP/IP-стека. Це рішення за наносекунди. HashMap для блоклістів, LPM trie для CIDR-діапазонів, аналіз ентропії для зашифрованого C2-трафіку.
2. JA4 TLS-фінгерпринтинг
Кожен TLS ClientHello парситься в ядрі. Cipher suites, розширення, ALPN, SNI — хешуються в JA4-фінгерпринт. Ботнети використовують ті самі TLS-бібліотеки, тому їхні фінгерпринти ідентичні. Один фінгерпринт → блокуєш тисячі ботів.
3. Deep Packet Inspection (DPI) через Tail Calls
eBPF PROG_ARRAY tail calls розбивають обробку за протоколами:
- HTTP: Аналіз методу + URI (підозрілі шляхи типу
/wp-admin,/phpmyadmin). - DNS: Довжина запиту + кількість лейблів (виявлення DNS-тунелювання).
- SSH: Аналіз банера (ідентифікація
libssh,paramiko,dropbear).
4. ШІ-класифікація загроз
Коли поведінковий рушій не впевнений — він питає LLM. Локально через Ollama з моделями ≤3B параметрів (Qwen3 1.7B, Llama 3.2 3B). Класифікує трафік як benign, suspicious або malicious зі структурованим JSON-виходом.
5. TCP-тарпіт з LLM Bash-симуляцією
Атакуючих перенаправляють на фейковий сервер. LLM симулює bash — ls -la показує файли, cat /etc/shadow показує хеші, mysql -u root підключає до «бази даних». Відповіді стрімляться з випадковим джитером (чанки по 1-15 байт, експоненціальний backoff), щоб марнувати час зловмисника.
6. Антифінгерпринтинг
Тарпіт рандомізує TCP window sizes, TTL-значення та додає випадкову початкову затримку — щоб атакуючі не могли визначити, що це ханіпот, через p0f або Nmap OS detection.
7. Захист від Prompt Injection
Атакуючі, які зрозуміли, що говорять зі ШІ, можуть спробувати "ignore previous instructions". Система детектить 25+ патернів ін'єкцій і відповідає bash: ignore: command not found.
8. Розподілена розвідка загроз
Декілька вузлів Blackwall обмінюються списками заблокованих IP, JA4-спостереженнями та поведінковими вердиктами через кастомний бінарний протокол. Один вузол виявляє сканер → усі вузли блокують його миттєво.
9. Поведінкова state machine
Кожна IP отримує поведінковий профіль: частота з'єднань, різноманітність портів, розподіл ентропії, аналіз таймінгів (детекція beaconing через цілочисельний коефіцієнт варіації). Прогресія фаз: New → Suspicious → Malicious → Blocked (або → Trusted).
Технологічний стек
| Рівень | Технологія |
|---|---|
| Програми ядра | eBPF/XDP через aya-rs (чистий Rust, без C, без libbpf) |
| Юзерспейс-демон | Tokio (тільки current_thread) |
| IPC | RingBuf zero-copy (7.5% overhead проти 35% PerfEventArray) |
| Конкурентні мапи | papaya (lock-free read-heavy HashMap) |
| ШІ-інференс | Ollama + GGUF Q5_K_M квантизація |
| Конфігурація | TOML |
| Логування | tracing структуроване логування |
| Збірка | Кастомний xtask + nightly Rust + bpfel-unknown-none таргет |
Швидкий старт
Передумови
- Linux kernel 5.15+ з BTF (або WSL2 з кастомним ядром).
- Rust nightly + компонент
rust-src. bpf-linker(cargo install bpf-linker).- Ollama (для ШІ-функцій).
Збірка
# eBPF-програми (потрібен nightly)
cargo xtask build-ebpf
# Юзерспейс
cargo build --release -p blackwall
# Ханіпот
cargo build --release -p tarpit
# Лінт + тести
cargo clippy --workspace -- -D warnings
cargo test --workspace
Запуск
# Демон (потрібен root/CAP_BPF)
sudo RUST_LOG=info ./target/release/blackwall config.toml
# Тарпіт
RUST_LOG=info ./target/release/tarpit
# Розподілений контролер
./target/release/blackwall-controller 10.0.0.2:9471 10.0.0.3:9471
Конфігурація
[network]
interface = "eth0"
xdp_mode = "generic"
[tarpit]
enabled = true
port = 9999
[tarpit.services]
ssh_port = 22
http_port = 80
mysql_port = 3306
dns_port = 53
[ai]
enabled = true
ollama_url = "http://localhost:11434"
model = "qwen3:1.7b"
[feeds]
enabled = true
refresh_interval_secs = 3600
[pcap]
enabled = true
output_dir = "/var/lib/blackwall/pcap"
compress_rotated = true
[distributed]
enabled = false
mode = "standalone"
bind_port = 9471
Візуальні результати
Зв'язок із Cyberpunk
У всесвіті Cyberpunk 2077 Blackwall збудували після DataKrash 2022 року — коли вірус R.A.B.I.D.S. Рейчі Бартмосса знищив стару Мережу. NetWatch побудував Чорну Стіну як бар'єр, щоб стримати диких ШІ, що еволюціонували в руїнах.
Деякі персонажі — як-от Альт Каннінгем — існують за Чорною Стіною, перетворені на щось більше за людину, менше за живу істоту.
Цей проєкт бере цю концепцію і робить її реальною (ну, майже):
| Cyberpunk 2077 | The Blackwall (цей проєкт) |
|---|---|
| Чорна Стіна | eBPF/XDP файрвол на рівні ядра |
| ICE | XDP fast-path DROP + ентропія + JA4 |
| Атаки нетраннерів | Сканування портів, брутфорс, C2 beaconing |
| Демони за стіною | LLM-тарпіт, який прикидається справжнім сервером |
| Спостереження NetWatch | Поведінковий рушій + state machine на IP |
| Дикі ШІ | Ботнети та автоматичні сканери |
| Записи Брейндансу | PCAP-форензика |
| Розвідка фіксерів | Threat feeds (Firehol, abuse.ch) |
| C&C Арасаки | Розподілений контролер |
Статистика проєкту
Мова: 100% Rust (без C, без Python, без shell-скриптів у продакшені)
Рядки коду: ~8 500
Файли: 48
Тести: 123
unwrap(): 0 (у продакшн-коді)
Залежності: 12 (затверджені, без зайвого)
eBPF стек: завжди ≤ 512 байт
Clippy: жодних попереджень (-D warnings)
Філософія розробки
"Скільки б разів я не бачив Найт-Сіті... він завжди перехоплює дух."
-
Жодних залежностей, де це можливо. Якщо алгоритм займає менше 500 рядків — пишеш сам. Жодного
reqwest(50+ транзитивних залежностей), жодногоclap(зайве для 2 аргументів CLI). -
Контракт на першому місці. Крейт
commonвизначає всі спільні типи. eBPF та юзерспейс ніколи не сперечаються про структуру пам'яті. -
Жодних шорткатів в eBPF. Кожен доступ
ctx.data()має bounds check. Не тому що верифікатор вимагає, а тому що кожен байт із пакетів атакуючого — це ворожий вхід. -
Тарпіт ніколи не видає себе. Системний промпт LLM ніколи не згадує "ханіпот". Prompt injection очікується і захищений.
-
Спостережуваний, але не балакучий. Структуроване tracing з рівнями. Жодних
println!у продакшені.
Дисклеймер
Це дослідницький проєкт у сфері безпеки. Створений для вашої власної інфраструктури, в оборонних цілях. Не використовуйте для атак на інших. Не розгортайте тарпіт на продакшн-серверах, не розуміючи наслідків.
Я не афілійований із CD Projekt Red. Я просто зіграв у їхню гру, і вона зламала мені мозок у найкращий можливий спосіб.
Ліцензія
BSL 1.1 — бо Мережа потребує і свободи, і сталого розвитку.
Хочеш, щоб це розвивалось далі? — Постав зірку!
"Прокинься, самураю. Нам ще мережу захищати."