LF3551/ClawSec
GitHub: LF3551/ClawSec
ClawSec 是一款轻量级现代加密网络工具,以单密码即可提供端到端加密通信、反向 Shell、文件传输和隧道转发,同时具备反 DPI 和后量子安全能力。
Stars: 3 | Forks: 0
从 Cryptcat 演进而来的现代加密网络工具,采用最先进的加密技术。
## 为什么选择 ClawSec?
| 特性 | ClawSec | Cryptcat | Ncat (--ssl) | socat (openssl) |
|---------|---------|----------|--------------|---------------|
| **加密** | AES-256-GCM | Twofish (已弃用) | TLS 1.3 | TLS 1.3 |
| **密钥交换** | X25519 ECDHE | 无 | TLS 握手 | TLS 握手 |
| **完全前向保密** | ✅ 是 | ❌ 否 | ✅ 是 | ✅ 是 |
| **身份验证** | 密码绑定的 ECDHE | 无 | 证书 | 证书 |
| **配置** | 单一密码 | 硬编码密钥 | 需要证书 | 需要证书 |
| **重放保护** | ✅ 序列号计数器 | ❌ 否 | ✅ TLS | ✅ TLS |
| **UDP 支持** | ✅ `-u` 标志 | ❌ 否 | ✅ 是 | ✅ 是 |
| **IPv6** | ✅ `-4`/`-6` 标志 | ❌ 否 | ✅ 是 | ✅ 是 |
| **轻量级** | ✅ ~50KB | ✅ 体积小 | ❌ ~3MB (nmap) | ❌ ~400KB |
| **Netcat 直接替代** | ✅ 是 | ✅ 是 | ⚠️ 部分 | ❌ 否 |
| **Shell 自动补全** | ✅ bash/zsh/fish | ❌ 否 | ❌ 否 | ❌ 否 |
| **保持连接** | ✅ `-K` 多客户端 | ❌ 否 | ✅ 是 | ✅ 是 |
| **端口转发** | ✅ `-L` (无需 SSH) | ❌ 否 | ❌ 否 | ✅ 是 |
| **反向隧道** | ✅ `-R` (类 SSH 反向转发) | ❌ 否 | ❌ 否 | ✅ 是 |
| **自动重连** | ✅ `--persistent` (指数退避) | ❌ 否 | ❌ 否 | ❌ 否 |
| **流量混淆** | ✅ `--obfs http/tls` | ❌ 否 | ❌ 否 | ❌ 否 |
| **TLS 伪装** | ✅ `--obfs tls` (TLS 1.3) | ❌ 否 | ❌ 否 | ❌ 否 |
| **TLS 指纹** | ✅ `--fingerprint` (Chrome/FF/Safari) | ❌ 否 | ❌ 否 | ❌ 否 |
| **TOFU 身份** | ✅ `--tofu` (类 SSH 的 known_hosts) | ❌ 否 | ❌ 否 | ❌ 否 |
| **后量子** | ✅ `--pq` (X25519 + ML-KEM-768) | ❌ 否 | ❌ 否 | ❌ 否 |
| **加密客户端问候** | ✅ `--ech` (GREASE ECH) | ❌ 否 | ❌ 否 | ❌ 否 |
| **主动探测防御** | ✅ `--fallback` (类 REALITY) | ❌ 否 | ❌ 否 | ❌ 否 |
| **流多路复用** | ✅ `--mux` (64 个流) | ❌ 否 | ❌ 否 | ❌ 否 |
| **抗流量分析** | ✅ `--pad` + `--jitter` | ❌ 否 | ❌ 否 | ❌ 否 |
| **隐蔽端口扫描** | ✅ `--scan` (SYN/connect, 随机化) | ❌ 否 | ✅ nmap | ❌ 否 |
| **Banner 抓取** | ✅ `-b` (服务版本检测) | ❌ 否 | ✅ nmap | ❌ 否 |
| **SOCKS5 代理** | ✅ `--socks` (加密隧道) | ❌ 否 | ❌ 否 | ❌ 否 |
| **文件传输** | ✅ `--send/--recv` (断点续传 + SHA-256) | ❌ 否 | ❌ 否 | ❌ 否 |
| **压缩** | ✅ `-z` zlib | ❌ 否 | ❌ 否 | ❌ 否 |
| **进度条** | ✅ `-P` 内置 | ❌ 否 | ❌ 否 | ❌ 否 |
| **文件校验** | ✅ `-V` SHA-256 | ❌ 否 | ❌ 否 | ❌ 否 |
| **零依赖** | ✅ 仅 libssl | ✅ | ❌ nmap 套件 | ❌ |
适用场景:安全文件传输、反向 shell、无需证书管理的加密隧道。
## 安全特性
- **AES-256-GCM**:带完整性验证的认证加密
- **X25519 ECDHE**:完全前向保密 —— 每个会话都有唯一的临时密钥
- **PBKDF2**:基于密码的密钥派生,100,000 次迭代
- **随机会话盐值**:每次会话的盐值交换防止会话间密钥重用
- **重放保护**:消息序列计数器拒绝重复/乱序的数据包
- **安全随机 IV**:加密强度高的每消息随机化
- **协议版本控制**:面向未来的二进制消息格式
- **内存安全**:安全的密钥擦除和资源清理
### 反审查 / 反 DPI
| 特性 | 标志 | 功能说明 |
|---------|------|--------------|
| TOFU 身份 | `--tofu` | 类似 SSH 的 Ed25519 服务器身份 + known_hosts |
| 后量子 | `--pq` | 混合 X25519 + ML-KEM-768 (抗量子) |
| TLS 伪装 | `--obfs tls` | 将连接包装在真实的 TLS 1.3 会话中 |
| 浏览器模拟 | `--fingerprint chrome\|firefox\|safari` | 调整 ClientHello 以匹配真实浏览器 (JA3/JA4) |
| 加密客户端问候 | `--ech` | 使用 GREASE ECH 扩展向 DPI 隐藏 SNI |
| 主动探测防御 | `--fallback host:port` | DPI 探测会看到一个真实网站;只有 ClawSec 能获得隧道 |
| 数据包填充 | `--pad` | 所有数据包变为统一的 1400 字节 |
| 时间抖动 | `--jitter N` | 随机的 0-N 毫秒延迟,对抗时间相关性分析 |
| 隐蔽端口扫描 | `--scan range` | 并行 SYN/connect 扫描,带有随机顺序和抖动 |
| Banner 抓取 | `-b` | 检测开放端口上的服务版本 (SSH, HTTP 等) |
| SOCKS5 代理 | `--socks port` | 通过加密隧道路由任何应用 (curl, 浏览器等) |
## 快速开始
### 自动安装
```
# 克隆仓库
git clone https://github.com/LF3551/ClawSec.git
cd ClawSec
# 运行安装程序
chmod +x install.sh
./install.sh
```
### 手动构建
```
cd src
make linux # Linux with system OpenSSL
make macos # macOS with Homebrew OpenSSL
make alpine # Alpine Linux (Docker)
make freebsd # FreeBSD
make netbsd # NetBSD
```
### Docker
```
# 构建镜像
docker build -t clawsec .
# 运行 server
docker run -p 8888:8888 clawsec -l -p 8888 -k "YourPassword"
# 或使用 docker-compose
docker-compose up
```
### 基本用法
ClawSec 支持三种主要模式:**聊天模式**、**反向 Shell 模式**和**文件传输模式**。
#### 1. 聊天模式(加密通信)
具有会话指纹、已读回执、内联文件共享和斜杠命令的安全加密聊天。
**服务端:**
```
./clawsec -l -p 8888 -k "TestPass123" -c -n "Alice"
```
**客户端:**
```
./clawsec -k "TestPass123" -c -n "Bob" server-ip 8888
```
**功能:**
- 🔐 **会话指纹**:连接时显示 emoji + 十六进制指纹 —— 验证双方是否匹配以确认没有中间人攻击 (MITM)
- 📛 **自定义昵称** (`-n`):显示名称而不是 Server/Client
- ✓✓ **已读回执**:自动送达确认
- 📎 **内联文件共享**:`/file path` 通过聊天发送最大 4MB 的文件
- 🏓 **加密 ping**:`/ping` 测量通过加密隧道的 RTT
- 斜杠命令:`/file`、`/ping`、`/clear`、`/whoami`、`/help`
- 彩色时间戳:本地显示为绿色,远程显示为青色
- 断开连接时显示会话持续时间
- 所有通信均使用 AES-256-GCM + PFS 加密
#### 2. 反向 Shell 模式(加密远程访问)
获取对远程机器的加密命令行访问权限。
**服务端(目标机器):**
```
cd ~/ClawSec/unix
./clawsec -l -p 8888 -k "TestPass123" -e /bin/bash
```
**客户端(你的机器):**
```
./clawsec -k "TestPass123" server-ip 8888
```
**功能:**
- 对目标机器的完全加密 shell 访问
- 运行命令:`ls`、`cd`、`cat`、`ps`、`whoami`、`pwd` 等
- 所有流量端到端加密
- 无格式化的干净输出
**注意**:现在通过 PTY(伪终端)支持交互式程序(`nano`、`vim`、`top`)。使用 Ctrl+C 终止程序,使用 `exit` 或 Ctrl+D 关闭 shell。
#### 3. 文件传输模式(安全文件传输)
支持压缩、进度条和 SHA-256 校验的文件传输。
**服务端(接收机器):**
```
./clawsec -v -l -p 8888 -k "FilePass123" > received_file.py
```
**客户端(发送机器):**
```
./clawsec -v -k "FilePass123" server-ip 8888 < file_to_send.py
```
**带压缩、进度和校验:**
```
# Server
./clawsec -l -p 8888 -k "FilePass123" -z -P -V > received.tar.gz
# Client
./clawsec -k "FilePass123" -z -P -V server-ip 8888 < archive.tar.gz
```
**功能:**
- `-z` zlib 压缩:文本文件带宽减少 3-5 倍
- `-P` 内置进度条,显示速度和字节数(无需外部 `pv`)
- `-V` SHA-256 端到端校验:传输后发送哈希值,接收方进行验证
- 传输完成后自动关闭连接
- 传输统计:`[Transfer complete] Sent/Received X bytes`
- 文件采用完整的 AES-256-GCM 加密传输
- 支持任何文件类型(文本、二进制、压缩包)
**高级示例:**
```
# 传输存档
tar -czf - /path/to/directory | ./clawsec -k "pass" server 9999
./clawsec -l -p 9999 -k "pass" | tar -xzf -
# 带进度的传输(需要 pv)
pv largefile.iso | ./clawsec -k "pass" server 7777
./clawsec -l -p 7777 -k "pass" > largefile.iso
```
## 依赖要求
- **OpenSSL 3.x**:用于 AES-GCM 加密
- **GCC/G++**:C++11 或更高版本
- **POSIX 系统**:Linux、BSD、macOS、Solaris
### 安装 OpenSSL
```
# macOS
brew install openssl@3
# Debian/Ubuntu
sudo apt-get install libssl-dev
# RedHat/CentOS
sudo yum install openssl-devel
```
## 用法
```
Usage: clawsec [options] hostname port
clawsec -l -p port [options]
Required:
-k password Encryption password (REQUIRED)
Connection:
-l Listen mode for inbound connections
-p port Local port number
Options:
-c Chat mode with timestamps and colors
-v Verbose mode
-z Compress data with zlib before encryption
-P Show transfer progress bar
-V SHA-256 end-to-end file verification
-n name Chat nickname (default: Server/Client)
-K Keep-open: accept multiple clients
-L host:port Port forwarding (encrypted tunnel)
--obfs http Traffic obfuscation (anti-DPI)
--obfs tls TLS 1.3 camouflage (stealth mode)
--ech Encrypted Client Hello (hide SNI from DPI)
--mux Multiplex streams over one tunnel (with -L)
--fallback h:p Proxy non-ClawSec probes to real site (REALITY-like)
--tofu Trust On First Use (SSH-like server identity)
--pq Post-quantum hybrid (X25519 + ML-KEM-768)
--fingerprint p Mimic browser TLS (chrome, firefox, safari)
--scan range Stealth port scan (1-1024, 22-443, all)
-b Banner grab (show service version on open ports)
--socks port SOCKS5 proxy through encrypted tunnel
--pad Pad packets to uniform 1400 bytes
--jitter ms Random delay 0-N ms between packets
-w secs Timeout for connects
-e prog Execute program after connect (requires GAPING_SECURITY_HOLE)
```
## 示例
### 聊天模式
```
# Server: 监听加密聊天
./clawsec -l -p 8888 -k "TestPass123" -c -n "Alice"
# Client: 连接到 server 进行聊天
./clawsec -k "TestPass123" -c -n "Bob" server-ip 8888
```
双方将看到:
```
╔══════════════════════════════════════╗
║ 🔐 ClawSec Encrypted Chat ║
╚══════════════════════════════════════╝
🔐 Session: a3f2-81bc-44de-9f71 🔒🌟💎🚀🍀🌸
Verify this matches on both sides to confirm no MITM.
Type /help for commands
📛 Peer identified as: Bob
[10:30:15 Alice] Hello!
✓✓ delivered
[10:30:18 Bob] Hi! Check /ping
✓✓ delivered
🏓 Pong: 12 ms RTT
```
### 反向 Shell 模式
```
# Server: 提供加密的 shell 访问
./clawsec -l -p 8888 -k "TestPass123" -e /bin/bash
# Client: 连接并执行命令
./clawsec -k "TestPass123" server-ip 8888
ls
pwd
whoami
```
### 文件传输模式
```
# Server: 接收文件并显示统计信息
./clawsec -v -l -p 8888 -k "FilePass123" > received.py
# Client: 发送文件
./clawsec -v -k "FilePass123" server-ip 8888 < file.py
# 带压缩 + 进度 + 验证
./clawsec -z -P -V -l -p 8888 -k "FilePass123" > received.iso
./clawsec -z -P -V -k "FilePass123" server-ip 8888 < file.iso
```
输出:
```
[Sent] 42.3 MB (12.5 MB/s)
[Transfer complete] Sent 88000000→42300000 bytes (compressed)
[Verify] SHA-256 OK: ba7816bf8f01cfea...
```
### 高级示例
```
# 将目录作为存档传输
tar -czf - /data | ./clawsec -k "pass" server 9999
./clawsec -l -p 9999 -k "pass" | tar -xzf -
# 详细 debug 模式
./clawsec -vv -l -p 8080 -k "debug"
```
### 隐蔽端口扫描
```
# 扫描常用端口 (1-1024)
./clawsec --scan 1-1024 target.com
# 扫描所有端口 (65535) — localhost 约需 2 秒,远程约需 60 秒
./clawsec --scan all target.com
# 带抖动的自定义范围 (anti-IDS)
./clawsec --scan 1-65535 --jitter 50 target.com
# 强制 IPv4/IPv6
./clawsec --scan 1-1024 -4 target.com
./clawsec --scan 1-1024 -6 target.com
# Verbose — 显示扫描方法
./clawsec --scan 22-443 -v target.com
```
### Banner 抓取
```
# 带服务版本检测的扫描
./clawsec --scan 1-1024 -b target.com
# 示例输出:
# 22/tcp open
# └─ SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
# 80/tcp open
# └─ HTTP/1.1 200 OK
# 443/tcp open
# └─ (TLS — 无明文 banner)
```
### SOCKS5 代理(加密隧道)
```
# Server: 接受连接并代理出站流量
./clawsec -l -k "strongpass" -p 9999 --socks 0
# Client: 在端口 1080 开启本地 SOCKS5 proxy
./clawsec -k "strongpass" --socks 1080 server.com 9999
# 现在使用任何支持 SOCKS5 的应用程序:
curl --proxy socks5://127.0.0.1:1080 https://ifconfig.me
# Firefox: Settings → Network → SOCKS5 → 127.0.0.1:1080
# ssh: ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' user@target
# 结合其他功能:
./clawsec -k "pass" --socks 1080 --pq --tofu --obfs tls server.com 9999
```
### 加密文件传输(断点续传 + SHA-256)
```
# 接收端: 监听并将文件保存到 ./incoming/
./clawsec -l -k "secretkey" -p 4444 --recv ./incoming
# 发送端: 加密并传输文件
./clawsec -k "secretkey" --send backup.tar.gz remote.host 4444
# 功能特性:
# - AES-256-GCM 加密传输
# - SHA-256 端到端验证
# - 中断传输自动恢复
# - 带速度显示的进度条
# - 接收端的路径遍历保护
# 结合后量子加密和 obfuscation:
./clawsec -k "pass" --send secret.pdf --pq --obfs tls server.com 4444
```
### 反向隧道 (-R)
```
# 将内部服务(例如 :3000 上的 web app)公开到远程 server
# Server: 监听 9999,开放公共端口 8080 用于 reverse
./clawsec -l -k "strongpass" -p 9999 -R 0.0.0.0:8080 -v
# Client (在 NAT/firewall 后): 连接并转发到本地 :3000
./clawsec -k "strongpass" -R 127.0.0.1:3000 -v server.com 9999
# 现在任何人都可以访问 server.com:8080 → 隧道到 client 的 localhost:3000
# 工作原理类似 SSH -R,但使用 AES-256-GCM 加密,无需证书
# 结合 stealth 功能建立隐蔽通道:
./clawsec -k "pass" -R 127.0.0.1:22 --pq --obfs tls --persistent server.com 443
```
### 持久自动重连
```
# Client 在断开连接时自动重新连接(exponential backoff 1s→60s)
./clawsec -k "pass" --persistent -R 127.0.0.1:22 server.com 9999
# 在网络中断期间保持隧道活跃
# 适用于任何模式: -L, -R, --socks, chat 等
./clawsec -k "pass" --persistent --socks 1080 server.com 443
# 适用于:
# - 不稳定的网络(移动网络、卫星网络)
# - 必须在重启后继续存在的长期运行隧道
# - Pentest 植入程序的持久化(使用 --obfs tls --pq)
```
### 密码要求
**强密码:**
- 建议至少 12 个字符
- 混合使用大写字母、小写字母、数字和符号
- 示例:`MyS3cur3Tr@nsf3r2025`
**应避免:**
- 默认密码
- 字典词汇
- 短密码(少于 8 个字符)
### 操作安全
1. 切勿在脚本中硬编码密码
2. 在自动化场景中使用环境变量
3. 使用后清除命令历史记录
4. 仅通过安全渠道共享密码
```
# 使用环境变量
export CLAW_KEY="YourSecurePassword"
clawsec -l -p 1234 -k "$CLAW_KEY"
```
## 加密规范
| 组件 | 算法 | 参数 |
|-----------|-----------|------------|
| 密码算法 | AES-256 | 256 位密钥 |
| 模式 | GCM | 带身份验证的 AEAD |
| 密钥派生 | PBKDF2-HMAC-SHA256 | 100,000 次迭代 |
| IV | CSPRNG | 96 位 (12 字节) |
| 认证标签 | GMAC | 128 位 (16 字节) |
### 协议格式
```
[MAGIC:4][VERSION:2][FLAGS:2][SEQ:4][LENGTH:4][IV:12][TAG:16][CIPHERTEXT]
```
- Magic number:`0x434C4157` ("CLAW")
- 版本:`0x0001` (协议 v1)
- 序列号:单调递增计数器(重放保护)
- 自动身份验证和完整性校验
### 会话握手
```
Client ──TCP connect──▶ Server
Client ◀──X25519 pubkey (32B)── Server
Client ──X25519 pubkey (32B)──▶ Server
[Both: key = SHA256(ECDH_secret || PBKDF2(password))]
Client ◀──encrypted messages──▶ Server
```
完全前向保密:即使密码后来被泄露,
以前记录的会话也无法被解密。
有关详细的加密文档,请参阅 [SECURITY.md](SECURITY.md)。
## 对比
| 特性 | ClawSec | 原版 Cryptcat | Netcat |
|---------|---------|-------------------|--------|
| 加密 | AES-256-GCM | Twofish (已弃用) | 无 |
| 身份验证 | GCM 标签 | 无 | 无 |
| 密钥派生 | PBKDF2 | 直接密钥 | N/A |
| 内存安全 | 安全擦除 否 | N/A |
| 协议版本 | 是 | 否 | N/A |
## 测试
```
# 运行集成测试套件(65 个测试)
cd src
make macos # or: make linux
make test XFLAGS='-I/opt/homebrew/opt/openssl@3/include' XLIBS='-L/opt/homebrew/opt/openssl@3/lib -lssl -lcrypto -lstdc++'
# 在 Linux 上(系统 OpenSSL):
make linux && make test
```
测试覆盖范围:
- 加密/解密往返
- 多消息排序
- 随机盐值生成及唯一性
- 不同盐值 → 不同密文
- 错误密码拒绝
- 重放保护(重复数据包被拒绝)
- 大消息 (8KB)
- 输入验证(NULL/空密码,无效盐值)
- 协议 Magic number 验证
- 完整握手模拟
- 双向通信
- 混淆(HTTP 模式发送/接收,多消息,大负载)
- Host:port 解析(IPv4, IPv6, 主机名,无效输入)
- Zlib 压缩/解压往返
- SHA-256 已知向量和增量哈希
- 会话指纹确定性
- 控制消息协议格式
- farm9crypt_initialized 状态跟踪
- 原始 32 字节密钥初始化
- 未初始化时的指纹错误
- write_all 完整缓冲区正确性
- TLS 伪装 接受/连接往返
- 数据包填充/去填充往返
- 不同输入的填充统一大小
- 填充拒绝超大的输入
- 时间抖动应用延迟
- 时间抖动(0) 为无操作
```
# 手动连接测试(两个终端)
# 终端 1:
./clawsec -l -p 12345 -k "TestPassword" -v
# 终端 2:
echo "Test message" | ./clawsec localhost 12345 -k "TestPassword"
```
## 故障排除
### "Encryption not initialized"
缺少 `-k` 密码选项。请始终提供密码参数。
### "Decryption/authentication failed"
密码不匹配或数据损坏。请验证两端是否使用了完全相同的密码。
### "Connection closed by peer"
协议版本不匹配或网络错误。请将两端更新至相同版本。
### OpenSSL 库错误
```
# macOS: 设置 OpenSSL 路径
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
make clean && make linux
```
## 贡献
欢迎贡献。请:
1. 在提交与安全相关的更改之前,请查看 [SECURITY.md](SECURITY.md)
2. 进行彻底的测试
3. 记录所有更改
4. 遵循现有的代码风格
## 许可证
基于 Netcat 和 Cryptcat。详情请见 [LICENSE](LICENSE)。
## 法律声明
本工具仅用于授权测试和合法用途。
- 在测试网络之前获取许可
- 遵守所有适用的法律和法规
- 作者不对滥用或未经授权的访问负责
- 风险自负
## 致谢
- 原版 Netcat:Hobbit
- 原版 Cryptcat:Farm9 团队
- ClawSec 现代化:2025 安全增强
- OpenSSL 项目:加密库
## 文档
- [SECURITY.md](SECURITY.md) - 详细的安全文档
- [docs/EXAMPLE_USAGE.md](docs/EXAMPLE_USAGE.md) - 使用示例
- [docs/FAQ.md](docs/FAQ.md) - 常见问题解答
- [CHANGELOG.md](CHANGELOG.md) - 版本历史
- [CONTRIBUTING.md](CONTRIBUTING.md) - 开发指南
- [OpenSSL GCM 文档](https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption)
- [NIST SP 800-38D](https://csrc.nist.gov/publications/detail/sp/800-38d/final) - GCM 规范
- [PBKDF2 RFC 8018](https://tools.ietf.org/html/rfc8018)
## 项目结构
```
ClawSec/
├── src/ # Source code (C/C++)
├── tests/ # Test suite (58 tests)
├── docs/ # Documentation (FAQ, examples, man page)
├── scripts/ # Build, install, quickstart scripts
├── deploy/ # Deployment configs (systemd, k8s, Homebrew)
├── completions/ # Shell completions (bash, fish, zsh)
├── releases/ # Release archives
├── .github/workflows # CI/CD (build, CodeQL, Docker)
├── Dockerfile # Docker build
└── docker-compose.yml
```
标签:AES-256-GCM, Bing搜索, BSD, ECDHE, Netcat替代品, PB级数据处理, UML, X25519, 前向保密, 加密通信, 安全运维, 安全防护, 客户端加密, 数据传输, 数据挖掘, 文件传输, 极简主义, 端到端加密, 网络信息收集, 网络安全, 网络安全, 网络工具, 请求拦截, 逆向Shell, 通信加密, 隐私保护, 隐私保护, 隧道代理