mirror of
https://github.com/xzcrpw/blackwall.git
synced 2026-04-27 12:16:22 +02:00
322 lines
18 KiB
Markdown
322 lines
18 KiB
Markdown
|
|
<p align="center">
|
|||
|
|
<strong>🌐 Язык:</strong>
|
|||
|
|
<a href="README.md">English</a> |
|
|||
|
|
<a href="README_UA.md">Українська</a> |
|
|||
|
|
<a href="README_RU.md">Русский</a>
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<img src="https://readme-typing-svg.herokuapp.com?font=JetBrains+Mono&weight=800&size=45&duration=3000&pause=1000&color=FF0000¢er=true&vCenter=true&width=600&lines=THE+BLACKWALL" alt="The Blackwall">
|
|||
|
|
<br>
|
|||
|
|
<em>Адаптивный eBPF-файрвол с AI-ханипотом</em>
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
# The Blackwall — Я написал умный файрвол, потому что Cyberpunk 2077 сломал мне мозг
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<img src="https://img.shields.io/badge/язык-Rust-orange?style=for-the-badge&logo=rust" />
|
|||
|
|
<img src="https://img.shields.io/badge/ядро-eBPF%2FXDP-blue?style=for-the-badge" />
|
|||
|
|
<img src="https://img.shields.io/badge/ИИ-Ollama%20LLM-green?style=for-the-badge" />
|
|||
|
|
<img src="https://img.shields.io/badge/вайб-Cyberpunk-red?style=for-the-badge" />
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<em>"За Тёмным Заслоном есть вещи, от одного взгляда на которые нетраннер мгновенно сгорит."</em><br>
|
|||
|
|
<strong>— Альт Каннингем, наверное</strong>
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<strong>Сейчас строю enterprise AI-автоматизацию в <a href="https://dokky.com.ua">Dokky</a></strong><br>
|
|||
|
|
<strong>Открыт для Enterprise Consulting & Y-Combinator: <a href="mailto:xzcrpw1@gmail.com">xzcrpw1@gmail.com</a></strong>
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Коротко:** я играл в 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 (для ИИ-функций).
|
|||
|
|
|
|||
|
|
### Сборка
|
|||
|
|
|
|||
|
|
```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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Визуальные результаты
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
-----
|
|||
|
|
|
|||
|
|
## Связь с 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 — потому что Сеть нуждается и в свободе, и в устойчивом развитии.
|
|||
|
|
|
|||
|
|
-----
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<strong>Хотите, чтобы это развивалось дальше? — <a href="https://github.com/xzcrpw/blackwall">Поставьте звезду!</a></strong>
|
|||
|
|
</p>
|
|||
|
|
|
|||
|
|
<p align="center">
|
|||
|
|
<strong><em>"Проснись, самурай. Нам еще сеть защищать."</em></strong>
|
|||
|
|
</p>
|