🔮 香农-未受限制
认知侦察,献给那些拒绝被自身假设束缚的人
"凡是无需证据就能断言的,都可以无需证据就能驳斥。" ------克里斯托弗·希钦斯
"即使有证据支持,也必须考虑到其不确定性。" ------《EQBSL账簿》
这到底是什么?
Shannon-Uncontained 是一个渗透测试编排框架,它将安全侦察视为一种 认知系统设计实践,而非简单的工具清单。我们拒绝将观察结果局限于"发现"或"未发现"这种陈旧的分类。正如希钦斯可能指出的那样,现实并不遵循这种简单的二元对立。
与其他将输出打包到 Docker 容器中的渗透测试框架(啊,没错,这可是现代懒惰的万能工具)不同,我们采用非容器化运行。我们的世界模型完全开放------可检查、可证伪,对于那些喜欢把安全机制包装得井井有条的人来说,这无疑会让他们感到不适。
核心主张
大多数安全工具给人以绝对确定的感觉。但它们会说谎。
端口扫描结果显示"开放",但这并不能告诉你端口背后的真正含义。今天有效的凭据明天可能就失效了。测试环境中存在的漏洞可能在生产环境中已被修复。传统工具将这种复杂的认知环境简化为布尔值标志。
Shannon-Uncontained 采用了一种不同的方法:每个观测值都包含其置信度 、不置信度 、不确定性 和基准率 。我们称之为EQBSL 张量------证据量化贝叶斯主观逻辑------它是我们整个世界模型的基石。
理念(或者:我们为什么建造它)
确定性的问题
大多数渗透测试报告读起来就像宗教宣言:*"系统存在 SQL 注入漏洞。"*句号。没有不确定性。没有来源。完全没有提及测试人员是在周二下午针对一个与生产环境共享约 40% 代码库的测试环境运行了三次攻击载荷。
这不是科学,这是货物崇拜式的安全感。
EQBSL替代方案
我们采用基于证据的主观逻辑的认知框架,并将其扩展到具有显式算子语义的张量空间。我们世界模型中的每个断言都包含:
| 成分 | 象征 | 意义 |
|---|---|---|
| 信仰 | b |
确信该说法属实 |
| 怀疑 | d |
确信该说法不实 |
| 不确定 | u |
双方都缺乏证据。 |
| 基准利率 | a |
类似情境下的先验概率 |
受限于以下条件:b + d + u = 1
期望值能提供一个概率估计,它真实地反映了我们未知的情况。不确定性只会随着证据的积累而降低。你不能用无关紧要的理由将其抹杀掉**。** E = b + a·u
核心架构
notranslate
<span style="background-color:#f6f8fa"><span style="color:#1f2328"><span style="color:#1f2328"><span style="background-color:#f6f8fa"><code>┌─────────────────────────────────────────────────────────────┐
│ Shannon-Uncontained │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Recon │───▶│ World │───▶│ Epistemic │ │
│ │ Agents │ │ Model │ │ Ledger │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Evidence │◀──▶│ Claims │◀──▶│ EQBSL │ │
│ │ Graph │ │ & Proofs │ │ Tensors │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
</code></span></span></span></span>
关键组成部分
- 侦察代理:协调各种工具(nmap、subfinder、whatweb 等)并发布结构化证据
- 世界模型:实体、主张和关系的中心知识图谱
- 认知账本:管理所有主体的 EQBSL 张量;如实记录不确定性
- 证据图:仅追加存储,包含内容寻址事件和来源信息
- 预算管理器:资源限制(时间、代币、网络)以防止代理失控
快速入门
# Clone and install
git clone https://github.com/Steake/shannon-uncontained.git
cd shannon-uncontained
npm install
# Configure your LLM provider (see LLM Provider Setup below)
cp .env.example .env
# Edit .env with your API key or local provider settings
# Generate reconnaissance for a target
./shannon.mjs generate https://example.com
# View the world model
./shannon.mjs model show --workspace shannon-results/repos/example.com
# Export interactive knowledge graph
./shannon.mjs model export-html --workspace shannon-results/repos/example.com --view provenance
⚠️重要提示: Shannon 需要 LLM 提供商才能正常运行。请参阅下方的"LLM 提供商设置"部分,了解配置说明。
图形视图模式
| 模式 | 描述 |
|---|---|
topology |
基础设施网络:子域 → 路径类别 → 端口 |
evidence |
代理人来源:哪个代理人发现了哪些证据 |
provenance |
EBSL-native:源 → 事件类型 → 目标(带张量边) |
LLM提供商设置
Shannon 需要一家 LLM 服务提供商进行分析并生成代码。我们支持多家服务提供商,以满足不同的需求和预算。
快速设置
-
复制示例环境文件:
cp .env.example .env -
请选择并配置以下服务提供商之一。
云服务提供商(需要 API 密钥)
GitHub 模型(免费套餐推荐)
通过 GitHub 的基础架构免费访问 GPT-4 和其他模型:
# .env
GITHUB_TOKEN=ghp_your_token_here
获取您的令牌:github.com/settings/tokens
**费用:**免费(有流量限制)
OpenAI
访问 GPT-4、GPT-4o 和其他 OpenAI 模型:
# .env
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-your_key_here
获取密钥:platform.openai.com/api-keys
**费用:**每次请求约 0.01-0.10 美元
Claude
获取 Claude 3.5 Sonnet、Opus 和其他 Claude 型号的使用权限:
# .env
LLM_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-your_key_here
**费用:**每次请求约 0.01-0.10 美元
本地提供商(无需 API 密钥)
模型完全在您的机器上运行,无需任何 API 费用:
奥拉玛
# Install Ollama from ollama.com
ollama pull llama3.2
# .env
LLM_PROVIDER=ollama
LLM_MODEL=llama3.2
默认端点:http://localhost:11434/v1
llama.cpp
# Run llama.cpp server
python -m llama_cpp.server --model your_model.gguf
# .env
LLM_PROVIDER=llamacpp
LLM_MODEL=local-model
默认端点:http://localhost:8080/v1
LM工作室
# Download and start LM Studio from lmstudio.ai
# Start local server from the UI
# .env
LLM_PROVIDER=lmstudio
LLM_MODEL=local-model
默认端点:http://localhost:1234/v1
自定义端点
使用任何与 OpenAI 兼容的 API 端点:
# .env
LLM_PROVIDER=custom
LLM_BASE_URL=https://your-endpoint.com/v1
LLM_MODEL=your-model-name
# Optional: Include an API key if needed
OPENAI_API_KEY=your-key-here
这适用于:
- Azure OpenAI 终结点
- 自托管推理服务器(vLLM、TGI)
- 公司代理人
- 任何与 OpenAI 兼容的 API
高级配置
针对不同任务覆盖特定模型:
# .env
LLM_FAST_MODEL=gpt-3.5-turbo # For quick classification
LLM_SMART_MODEL=gpt-4o # For architecture inference
LLM_CODE_MODEL=claude-sonnet-3.5 # For code generation
为任何提供商设置自定义端点:
# Override base URL (useful for proxies)
LLM_BASE_URL=https://your-proxy.com/v1
有关完整的配置选项,请参阅.env.example。
证据优先工作流程
1. 侦察阶段
代理将证据事件发送到图中:
{
source: 'NetRecon',
event_type: 'PORT_SCAN',
target: 'example.com',
payload: { port: 443, state: 'open', service: 'https' },
timestamp: '2024-01-15T10:30:00Z'
}
2. 权利要求推导
证据以明确的置信度支持论点:
{
subject: 'example.com:443',
predicate: 'runs_service',
object: 'nginx',
confidence: 0.85,
evidenceIds: ['ev_a1b2c3', 'ev_d4e5f6']
}
3. EQBSL 张量分配
每个声明都包含一个张量:(b, d, u, a)
// High-confidence claim from strong evidence
{ b: 0.82, d: 0.03, u: 0.15, a: 0.5 }
// Expectation: 0.82 + 0.5 × 0.15 = 0.895
// Low-confidence claim from weak evidence
{ b: 0.20, d: 0.10, u: 0.70, a: 0.5 }
// Expectation: 0.20 + 0.5 × 0.70 = 0.55
4. 可视化
知识图谱根据边的认知状态来渲染边的样式:
- 颜色:青色(高度确信)→ 黄色(不确定)→ 红色(低度确信)
- 宽度:边缘越厚 = 期望值越高
- 不透明度:不透明度越高,不确定性越低。
为什么叫"不受控制"?
因为 Docker 容器是架构失败的体现。
更严重的是:传统的渗透测试工具往往各自独立运行。Nmap 对 Burp 的发现一无所知。Nuclei 也不会关心你的手动测试结果。每个工具都会生成自己的测试结果,而可怜的分析师必须费力地将它们拼凑成一个连贯的叙述。
香农-Uncontained模型反对这种碎片化。所有证据都汇入一个统一的世界模型。所有论断都依据其证据基础。所有不确定性都被追踪记录,而非隐藏。
我们不受束缚,因为我们的知识拒绝被框定,我们的不确定性拒绝被否认,我们的架构拒绝假装安全只是运行正确脚本的简单问题。
项目结构
notranslate
<span style="background-color:#f6f8fa"><span style="color:#1f2328"><span style="color:#1f2328"><span style="background-color:#f6f8fa"><code>shannon-uncontained/
├── shannon.mjs # CLI entry point
├── local-source-generator.mjs # Black-box recon orchestration
├── src/
│ ├── core/
│ │ ├── WorldModel.js # Central knowledge graph
│ │ ├── BudgetManager.js # Resource constraints
│ │ └── EpistemicLedger.js # EQBSL tensor management
│ ├── cli/
│ │ └── commands/ # CLI command handlers
│ └── local-source-generator/
│ └── v2/
│ └── worldmodel/
│ └── evidence-graph.js # Append-only event store
├── EQBSL-Primer.md # Full EQBSL specification
└── workspaces/ # Generated reconnaissance outputs
</code></span></span></span></span>
CLI 参考
# Core commands
shannon run <target> [options] # Full pentest pipeline
shannon generate <target> [options] # Recon-only, builds world model
# Model introspection
shannon model show --workspace <dir> # ASCII visualization
shannon model graph --workspace <dir> # ASCII knowledge graph
shannon model export-html --workspace <dir> # Interactive D3.js graph
shannon model why <claim_id> --workspace <dir> # Explain a claim's evidence
# Evidence commands
shannon evidence stats --workspace <dir> # Evidence statistics
EQBSL实践
对于数学爱好者,请参阅EQBSL-Primer.md获取完整规范。
简而言之:
- 证据是向量值:每次观测有多个通道(正/负)。
- 观点来源于证据 :
b = r/(r+s+K),,d = s/(r+s+K)``u = K/(r+s+K) - 衰减是必然的:证据会随着时间推移而失去效力(可按通道配置)
- 传播是明确的:传递信任使用阻尼见证折扣
- 嵌入是确定性的:可从状态中可复现地导出的、可用于机器学习的特征
贡献
我们欢迎投稿,尤其欢迎以下人士投稿:
- 发现确定性可疑
- 贝叶斯先验是一个好的开始,但还不够。
- 我认为安全工具应该解释其运行原因。
- 在对抗性情境下,对认知谦逊有自己的看法
请参阅CONTRIBUTING.md获取相关指南。
路线图
v0.1 ✅(基础版)
- 具有 EQBSL 张量的世界模型
- 证据图(仅追加)
- CLI 与
generate,model show/graph/export-html - 三种图表视图模式(拓扑、证据、来源)
v0.2 ✅(当前版本)
- 包含代理编排的完整渗透测试流程
- LLM 集成分析代理
- 具有传递折扣的索赔传播
- 端点验证的真实性验证
- 新增 12 个 LSGv2 代理(漏洞利用、侦察、蓝队)
- OWASP ASVS 合规性映射(14 章)
- 增强型报告,包含 EBSL 置信度评分
v1.0(未来版本)
- ZK 证据来源证明
- 对抗性模拟模式
- 与外部漏洞数据库集成
- 基于浏览器的交互式报表仪表板
常问问题
问:这只是对现有工具的另一种封装吗?
答:不。它是一个认知框架,恰好用来协调各种工具。工具产生观察结果;我们创造知识------其中明确包含不确定性。
问:为什么使用 EQBSL 而不是简单的置信度评分?
答:因为"80% 的把握"混淆了两种截然不同的状态:"我有强有力的证据支持肯定观点"和"我有支持和反对观点的微弱证据"。EQBSL 将信念、怀疑和不确定性区分开来。这在做决策时至关重要。
问:为什么引用希钦斯的话?
答:因为渗透测试的核心在于质疑。我们会质疑系统管理员、开发人员和安全厂商的说法。我们的证据必须足够确凿,经得起交叉质询。