mateocallec/security-awareness
GitHub: mateocallec/security-awareness
一个基于 BadUSB 的安全意识研究平台,通过物理投放 USB 设备来研究人们面对未知设备时的行为反应,并收集匿名问卷数据以评估和改进安全培训。
Stars: 0 | Forks: 0
# 安全意识
本项目的目的是研究人类在面对基于物理 USB 的社会工程学攻击时的行为反应。BadUSB 设备会被故意放置在公共或办公环境中。当有人将其插入电脑时,他们的浏览器会被重定向到一个意识提醒页面,该页面会解释可能发生的后果,并邀请他们填写一份匿名问卷。随后将对收集到的数据进行分析,以更好地理解人们为什么会插入未知的 USB 设备,以及如何改进安全意识培训。
## 技术栈
| 层级 | 技术 |
|---|---|
| **后端** | NestJS · TypeScript · Prisma ORM · MariaDB · JWT (httpOnly cookie) · AES-256-CBC (电子邮件加密) · CSRF双重提交 |
| **前端** | React · TypeScript · Vite · Tailwind CSS · shadcn/ui · React Router |
| **基础设施** | Docker · Docker Compose · nginx (反向代理 + SPA路由) |
## 快速开始
### 前置条件
- Docker 和 Docker Compose v2
### 1. 克隆
```
git clone https://github.com/mateocallec/security-awareness.git
cd security-awareness
```
### 2. 配置环境
```
cp .env.template .env
```
编辑 `.env` 并填写所有值:
| 变量 | 描述 |
|---|---|
| `DB_ROOT_PASSWORD` | MariaDB root 密码 |
| `DB_NAME` | 数据库名称 (例如 `security_awareness`) |
| `DB_USER` | 应用程序数据库用户 |
| `DB_PASSWORD` | 应用程序数据库密码 |
| `JWT_SECRET` | 用于 JWT 签名的随机密钥 — `openssl rand -hex 64` |
| `DASHBOARD_PASSWORD` | 访问控制面板的密码 |
| `ENCRYPTION_KEY` | 32字节 AES 密钥 (十六进制) — `openssl rand -hex 32` |
| `HTTP_PORT` | 前端的主机端口 (默认为 `80`) |
### 3. 构建并运行
```
docker compose up -d --build
```
应用程序将在 `http://localhost` (或配置的 `HTTP_PORT`) 上可用。
### 4. 使用应用程序
| URL | 描述 |
|---|---|
| `http://localhost/dashboard` | 管理控制面板 (受密码保护) |
| `http://localhost/login` | 控制面板登录 |
| `http://localhost/badusb-hit?id=` | 插入 USB 设备时显示的意识提醒页面 |
`` 值是在控制面板中创建时分配给每个 BadUSB 设备的 8 字符标识符。
## 使用预构建镜像
Docker 镜像已发布到 GitHub Container Registry:
```
docker pull ghcr.io/mateocallec/security-awareness:latest
```
## 本地开发
### 后端
```
cd backend
cp .env.template .env # fill in values
npm install
npx prisma migrate dev
npm run start:dev
```
### 前端
```
cd frontend
npm install
npm run dev
```
在 `frontend/.env.local` 中设置 `VITE_API_URL=http://localhost:3000`,以便开发服务器代理到本地后端。
## 仓库结构
```
security-awareness/
├── backend/ # NestJS REST API
│ ├── prisma/ # Schema and migrations
│ └── src/
├── frontend/ # React SPA
│ └── src/
├── nginx.conf # nginx config for the frontend container
├── Dockerfile # Multi-stage build (frontend + backend targets)
├── docker-compose.yml
└── .env.template
```
## 许可证
查看 [LICENSE](LICENSE)。
## 作者
**Matéo Florian Callec** — [mateo@callec.net](mailto:mateo@callec.net)
标签:AES-256, BadUSB, CSRF防护, Docker, Docker Compose, JWT, MariaDB, NestJS, Nginx, Prisma ORM, React, shadcn/ui, Syscalls, Tailwind CSS, TypeScript, USB社会工程学, Vite, 人类行为研究, 反向代理, 安全插件, 安全教育平台, 安全防御评估, 数据加密, 漏洞评估, 物理安全, 社会工程学防御, 网络安全实验, 自动化攻击, 请求拦截, 问卷调查系统