dalpan/Pretexta

GitHub: dalpan/Pretexta

Pretexta 是一个开源的社会工程学模拟实验室,通过模拟攻击帮助理解和防御社工威胁。

Stars: 35 | Forks: 7

Pretexta ### 成功攻击背后的心理学 #### 一个模拟社会工程学利用人性的开源实验平台 [![版本](https://img.shields.io/badge/Version-3.0.0-blue?style=flat-square)](https://github.com/fdciabdul/Pretexta/releases) [![许可证](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE) [![持续集成](https://img.shields.io/github/actions/workflow/status/fdciabdul/Pretexta/ci.yml?style=flat-square&label=CI)](https://github.com/fdciabdul/Pretexta/actions) [![欢迎提交 PR](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square)](CONTRIBUTING.md)
## 为什么选择 Pretexta? 大多数安全工具保护系统。Pretexta 保护**人**。 社会工程学是头号攻击向量——它利用的不是软件漏洞,而是**信任、紧迫感、权威和认知偏差**。Pretexta 是一个开源的模拟实验室,您的团队可以在安全可控的环境中练习防御此类攻击。 基于 **Cialdini 的影响力六大原则**:互惠、稀缺性、权威性、承诺一致、喜好和社会认同。 ![设置](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/dc00d6311d161903.png)
排行榜 — 经验值、等级、连续记录与排名 ![排行榜](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b54135ce09161905.png)
登录 ![登录](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/89c7b0a6ca161906.png)
## 快速开始 ``` 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, 信息安全, 安全培训, 安全意识, 安全教育, 安全防御评估, 开源, 心理学, 技术栈, 攻击模拟, 教育工具, 模拟实验室, 模拟攻击, 游戏化学习, 用户认证, 社会工程学, 社会工程攻击, 网络安全, 自定义脚本, 请求拦截, 防御训练, 隐私保护, 领导板, 驱动签名利用