🌐 Мова: English | Українська | Русский

The Blackwall
Адаптивний 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 ![Архітектура Blackwall](assets/architecture.svg) ![Потік сигналів загроз](assets/signal-flow.svg) Мовою 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 (для ШІ-функцій). ### Збірка ```bash # eBPF-програми (потрібен nightly) cargo xtask build-ebpf # Юзерспейс cargo build --release -p blackwall # Ханіпот cargo build --release -p tarpit # Лінт + тести cargo clippy --workspace -- -D warnings cargo test --workspace ``` ### Запуск ```bash # Демон (потрібен 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 ``` ### Конфігурація ```toml [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 ``` ## Візуальні результати ![Візуальні результати Blackwall](assets/results-overview.svg) ----- ## Зв'язок із 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) ``` ----- ## Філософія розробки > *"Скільки б разів я не бачив Найт-Сіті... він завжди перехоплює дух."* 1. **Жодних залежностей, де це можливо.** Якщо алгоритм займає менше 500 рядків — пишеш сам. Жодного `reqwest` (50+ транзитивних залежностей), жодного `clap` (зайве для 2 аргументів CLI). 2. **Контракт на першому місці.** Крейт `common` визначає всі спільні типи. eBPF та юзерспейс ніколи не сперечаються про структуру пам'яті. 3. **Жодних шорткатів в eBPF.** Кожен доступ `ctx.data()` має bounds check. Не тому що верифікатор вимагає, а тому що кожен байт із пакетів атакуючого — це ворожий вхід. 4. **Тарпіт ніколи не видає себе.** Системний промпт LLM ніколи не згадує "ханіпот". Prompt injection очікується і захищений. 5. **Спостережуваний, але не балакучий.** Структуроване tracing з рівнями. Жодних `println!` у продакшені. ----- ## Дисклеймер Це дослідницький проєкт у сфері безпеки. Створений для вашої власної інфраструктури, в оборонних цілях. Не використовуйте для атак на інших. Не розгортайте тарпіт на продакшн-серверах, не розуміючи наслідків. Я не афілійований із CD Projekt Red. Я просто зіграв у їхню гру, і вона зламала мені мозок у найкращий можливий спосіб. ----- ## Ліцензія BSL 1.1 — бо Мережа потребує і свободи, і сталого розвитку. -----

Хочеш, щоб це розвивалось далі? — Постав зірку!

"Прокинься, самураю. Нам ще мережу захищати."