blackwall/README_RU.md

321 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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