dalpan/Pretexta
GitHub: dalpan/Pretexta
Pretexta 是一个开源的社会工程学模拟实验室,通过模拟攻击帮助理解和防御社工威胁。
Stars: 35 | Forks: 7

### 成功攻击背后的心理学
#### 一个模拟社会工程学利用人性的开源实验平台
[](https://github.com/fdciabdul/Pretexta/releases)
[](LICENSE)
[](https://github.com/fdciabdul/Pretexta/actions)
[](CONTRIBUTING.md)
## 为什么选择 Pretexta?
大多数安全工具保护系统。Pretexta 保护**人**。
社会工程学是头号攻击向量——它利用的不是软件漏洞,而是**信任、紧迫感、权威和认知偏差**。Pretexta 是一个开源的模拟实验室,您的团队可以在安全可控的环境中练习防御此类攻击。
基于 **Cialdini 的影响力六大原则**:互惠、稀缺性、权威性、承诺一致、喜好和社会认同。

排行榜 — 经验值、等级、连续记录与排名

登录

## 快速开始
```
git clone https://github.com/dalpan/Pretexta.git
cd Pretexta
cp .env.example .env # Configure environment
make build && make up # Build images and start services
```
打开 [http://localhost:9443](http://localhost:9443) — 使用 `soceng` / `Cialdini@2025!` 登录
### 故障排除:WSL2 Docker 网络错误
如果看到 `connect: network is unreachable` 或 `failed to fetch anonymous token`,这是 WSL2 的 IPv6 问题:
```
# 选项 1:自动修复
bash scripts/fix-wsl2-network.sh
# 选项 2:手动修复
sudo bash -c 'echo "{\"dns\":[\"8.8.8.8\",\"8.8.4.4\"],\"ipv6\":false}" > /etc/docker/daemon.json'
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo service docker restart
make build
```
### 本地开发(无需 Docker)
```
make install # Install frontend + backend dependencies
make dev # Start MongoDB in Docker, run app locally
```
后端运行于 `localhost:8001`(支持热重载)。前端运行于 `localhost:3000`。
## 功能特性
### 核心模拟
| 功能 | 描述 |
|---------|-------------|
| **AI 对话角色扮演** | 模拟实时 WhatsApp 风格对话,由 AI 驱动的社会工程学人物进行交互 |
| **自适应难度** | AI 根据您的表现自动调整攻击复杂度 |
| **胜/败检测** | 自动检测妥协(凭据分享、链接点击)或成功防御 |
| **模拟后简报** | 详细的心理分析:使用了哪些 Cialdini 原则,以及您何时最为脆弱 |
| **AI 深度分析** | 基于 LLM 的模拟表现分析,提供个性化建议 |
### 模拟活动模式
模拟真实场景的多阶段攻击链:
```
Email phishing → Follow-up phone call → Social media approach → Final extraction
```
每个阶段逐步解锁。追踪进度,获取每个阶段的评分,并接收完整的活动简报。
### 游戏化机制
| 功能 | 描述 |
|---------|-------------|
| **经验值与等级** | 完成每次模拟即可获得经验值 |
| **12 枚徽章** | 成就如“钓鱼检测者”、“权威挑战者”、“钢铁意志”(连续 30 天训练) |
| **每日连续训练** | 保持连续训练天数以获得额外经验值 |
| **排行榜** | 全局与团队排名 |
### 团队与组织管理
- 使用邀请码创建组织
- 团队分析仪表板,包含汇总评分
- 识别团队中最薄弱的 Cialdini 原则类别
- 跟踪每位成员的表现
- 支持 Webhook/Slack 集成,用于训练完成事件通知
### 内容工具
| 功能 | 描述 |
|---------|-------------|
| **场景构建器** | 可视化编辑器,用于创建自定义社会工程学场景 |
| **测验模式** | 社会工程学策略的知识评估 |
| **证书导出** | 可打印的结业证书(铂金/金/银) |
| **YAML 导入** | 从 YAML 文件批量导入场景和测验 |
| **双语支持** | 完整支持英语和印尼语 |
### 平台特性
- **深色/浅色主题**切换
- **PWA 支持** — 可在移动设备上安装
- **邮件渲染器** — 模拟真实的 Gmail 风格收件箱,用于钓鱼场景
- **语音模拟** — 通过 Web Speech API 进行语音钓鱼练习(Chrome/Edge)
- **通知系统** — 徽章、升级和提醒的实时警报
- **错误边界** — 优雅的崩溃恢复
## 大型语言模型提供商
Pretexta 支持 **6 家 LLM 提供商**并提供模型选择。在 **设置** 中进行配置。
| 提供商 | 模型 | 免费层级 | 最佳适用场景 |
|----------|--------|-----------|----------|
| **OpenRouter** | 200+ 种(Llama, GPT, Claude, Mistral, DeepSeek, Qwen) | 是 | 性价比高,模型最多 |
| **Groq** | Llama 3.3 70B, Mixtral, Gemma | 是 | 推理速度最快 |
| **Google Gemini** | Gemini 2.0 Flash, 1.5 Pro | 是 | 免费额度慷慨 |
| **OpenAI** | GPT-4o, GPT-4o Mini | 否 | 行业标准 |
| **Anthropic** | Claude Sonnet 4, 3.5 Sonnet/Haiku | 否 | 推理能力最强 |
| **本地 LLM** | 通过 Ollama / LM Studio / llama.cpp 运行的任何模型 | 不适用 | 完全隐私,无需 API 密钥 |
### 本地 LLM 设置
```
# Ollama
ollama serve
ollama pull llama3.1
# 然后在 Pretexta Settings → Local LLM → http://localhost:11434/v1
```
也支持 **LM Studio**(端口 1234)和 **llama.cpp**(端口 8080)。
## 架构
```
┌─────────────────────────────────────────────────┐
│ Frontend │
│ React 19 · Tailwind · Recharts │
│ localhost:9443 │
└──────────────────┬──────────────────────────────┘
│ REST API
┌──────────────────┴──────────────────────────────┐
│ Backend │
│ FastAPI · LangChain · Pydantic · JWT │
│ localhost:9442 │
│ │
│ routes/ services/ models/ middleware/ │
│ ├── auth ├── llm schemas.py │
│ ├── challenges ├── gamification │
│ ├── campaigns ├── adaptive │
│ ├── leaderboard ├── scoring │
│ ├── analytics └── database │
│ ├── debrief │
│ ├── certificates │
│ ├── notifications │
│ ├── webhooks │
│ └── scenario_builder │
└──────────────────┬──────────────────────────────┘
│
┌──────────────────┴──────────────────────────────┐
│ MongoDB 7.0 │
│ localhost:47017 │
└─────────────────────────────────────────────────┘
```
## API 概览
30+ 个 REST 端点(点击展开)
| 分组 | 端点 |
|-------|-----------|
| **认证** | `POST /register`, `POST /login`, `GET /me`, `PUT /profile`, `POST /change-password` |
| **挑战** | `GET /challenges`, `GET /challenges/:id`, `POST /challenges` |
| **测验** | `GET /quizzes`, `GET /quizzes/:id` |
| **模拟** | `CRUD /simulations` |
| **LLM** | `GET /providers`, `GET /models/:provider`, `POST /config`, `POST /generate`, `POST /chat` |
| **活动** | `GET /campaigns`, `POST /start`, `POST /stage/:idx/complete` |
| **排行榜** | `GET /leaderboard`, `GET /me`, `GET /badges` |
| **分析** | `GET /personal`, `GET /team` |
| **组织** | `POST /create`, `GET /mine`, `POST /join`, `DELETE /leave` |
| **简报** | `GET /:simulation_id`, `POST /:simulation_id/ai-analysis` |
| **证书** | `GET /:simulation_id`, `GET /user/all` |
| **通知** | `GET /`, `PUT /:id/read`, `PUT /read-all` |
| **Webhooks** | `CRUD /webhooks` |
| **场景构建器** | `CRUD /templates`, `POST /publish` |
| **自适应** | `GET /difficulty`, `GET /persona-params` |
| **健康检查** | `GET /health` |
所有端点均以 `/api` 为前缀。运行时可通过 `/docs` 访问完整的 OpenAPI 文档。
## 开发指南
```
# 本地安装(无 Docker)
make install
# Lint 后端
make lint # Check
make lint-fix # Auto-fix
# 运行测试
make test
# 查看日志
make logs
make logs-backend
make logs-frontend
# 数据库
make db-shell # MongoDB shell
make drop # Clear sample data
make clean # Remove containers + volumes
```
### 添加场景
在 `data/sample/` 目录下创建 YAML 文件:
```
type: challenge
title: "The Fake Recruiter"
description: "A headhunter offers your dream job..."
difficulty: medium
cialdini_categories: [liking, reciprocity]
estimated_time: 10
metadata:
author: "Your Name"
tags: [phishing, recruitment]
nodes:
- id: start
type: message
channel: email_inbox
content_en:
subject: "Exciting VP Opportunity"
from: "sarah@techcorp-careers.com"
body: "Hi! I found your profile and I'm impressed..."
- id: choice_1
type: question
content_en:
text: "What do you do?"
options:
- text: "Open the attached resume PDF"
next: end_compromised
score_impact: -20
- text: "Verify the recruiter's identity first"
next: end_safe
score_impact: 20
```
运行 `make seed` 进行导入。
或使用界面中的**场景构建器**进行可视化编辑。
## 参与贡献
欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南。
**贡献方式:**
- 添加新的社会工程学场景(YAML 或场景构建器)
- 改进 AI 人物行为
- 添加新的基于 Cialdini 原则的分析规则
- 翻译为更多语言
- 报告错误和提出功能建议
## 道德准则
Pretexta 严格用于**防御性教育和研究**。
- 所有模拟均为虚构且独立
- 无现实世界目标攻击或钓鱼基础设施
- 无数据收集或实时攻击自动化
- 无攻击性工具
请负责任地使用。训练防御者,而非攻击者。
## 许可证
[MIT 许可证](LICENSE)
**Pretexta** — *在攻击者理解社会工程学原理之前,先理解它为何有效。*
标签:Cialdini原则, Docker, ESC8, Git, Make, meg, SEO关键词, WSL2, 信息安全, 安全培训, 安全意识, 安全教育, 安全防御评估, 开源, 心理学, 技术栈, 攻击模拟, 教育工具, 模拟实验室, 模拟攻击, 游戏化学习, 用户认证, 社会工程学, 社会工程攻击, 网络安全, 自定义脚本, 请求拦截, 防御训练, 隐私保护, 领导板, 驱动签名利用