AIRsecu/AIR

GitHub: AIRsecu/AIR

AIR 是一个自主防御与自动化事件响应测试平台,在漏洞实验环境中实现从攻击检测到自动启用防护、风险评分、告警及 LLM 源码补丁的完整安全闭环,并集成 AI 驱动的 DevSecOps 流水线进行扫描误报过滤与风险重评。

Stars: 0 | Forks: 0

# AIR — 自主防御 vuln-lab (`feature/air-defense`) ## 技术栈 | 领域 | 内容 | |---|---| | Backend | Java 21, Spring Boot 3.3.5, Spring Security + JJWT, MyBatis 3, SQLite | | AIR 防御 | `com.shop.air` (DetectionFilter · DefenseRegistry · IncidentService · DynamicRuleRegistry) | | 协调器 | `air-orchestrator/` (Python: responder.py · knowledge.py · verify.sh) — 自动源码补丁 | | Frontend | 纯 HTML/CSS/JS SPA (+ 🛡 **AIR IR 仪表盘**) | | Infra | Docker, docker-compose(`-p airlab`), nginx `:8081` | ## 自主防御结构 (标志切换) - 脆弱代码与防御卫士**共存于同一代码库**。通过 `DefenseRegistry` 标志切换(**默认 OFF = 脆弱**)。 - 检测到攻击时,AIR 会**立即开启**该标志 → 从同一请求开始拦截(自主防御闭环)。 - 数据库持久化 → 重启后仍保留防御状态。 ## 防御卫士 | 标志 | 对应漏洞 | |---|---| | `order.qty-guard` | 负数数量订单(余额倍增) | | `sql.injection-guard` | SQL Injection (`${}` 动态查询) | | `xss.input-guard` | Stored XSS | | `authz.idor-guard` | IDOR (查看他人订单) | | `ddos.rate-guard` | DDoS (请求洪泛 rate-limit) | | `ransom.massdelete-guard` | 勒索型批量删除 | | `upload.file-guard` | 文件上传 (扩展名未校验·路径篡改·LFI) | | `air.detection` / `anomaly.detection` | 签名检测 / 未知攻击异常检测(4xx·5xx 突发) | | `air.shield` | 异常来源隔离(冷却拦截) | ## 检测 → 响应闭环 1. **DetectionFilter**(内联): SQLi(q), XSS/负数数量(正文), DDoS/勒索(rate), 4xx/5xx 异常检测 + **UploadService.autoDetect**(恶意文件名/路径篡改) 2. **IncidentService.report** → ① 防御标志立即 ON ② 记录安全事件 ③ 计算 **Risk Score** ④ **Discord 告警** 3. **air-orchestrator/responder.py** → LLM/模板 **自动源码补丁** → `verify.sh` 重新攻击验证 → 提交 ## IR 自动响应 - **Risk Score**: 类型 → severity(CRITICAL/HIGH/MEDIUM/LOW) + score(0~100)。在 `/air/incidents` 响应中进行 enrich。 (SQLi/勒索 95, 上传恶意 90, 负数数量/路径篡改 85, IDOR 80, XSS 75, DDoS 70, 异常 50~60) - **Discord Webhook**: 环境变量 `AIR_DISCORD_WEBHOOK`。每次事件包含风险等级的告警进行**异步发送**(未设置时为 no-op)。 - **IR 仪表盘**: `super_admin` 登录 → 顶部 **🛡 AIR** — 防御标志切换 + 事件(风险等级徽章/类型/IP/操作/时间)实时更新。 ## AIR 控制 API (super_admin) ``` GET /api/v1/air/defenses # 방어 플래그 상태 POST /api/v1/air/defenses/{key}/enable # / disable GET /api/v1/air/incidents?limit= # severity/riskScore 포함 GET /api/v1/air/rules · POST · DELETE /rules/{id} # 런타임 동적 룰 ``` ## 快速开始 (vuln-lab) ``` # .env: JWT_ACCESS_SECRET / JWT_REFRESH_SECRET / ADMIN_PASSWORD (高强度) # AIR_DISCORD_WEBHOOK= (可选, IR 通知) docker-compose -p airlab -f docker-compose.lab.yml up -d --build # 访问: http://<主机>:8081/ 登录: super_admin 账户(.env 的 ADMIN_USERNAME / ADMIN_PASSWORD) ``` 种子数据: 租户 **`demo`**(演示商店) + 4 个商品 + 1 个演示客户(账号/密码在种子脚本中设置,余额 50 万)。 ## 演示流程 ``` 1) 공격 python air-attack/attack.py <시나리오> --base http://:8081 \ --admin-user --admin-pass '' 2) 자율방어 탐지 → 가드 자동 ON(DEFENDED) + Discord 경고 + 대시보드 인시던트 3) (선택) air-orchestrator/responder.py 로 자동 소스패치 시연 ``` 场景: `negative-qty · sqli · xss · idor · upload · ddos · ransom · unknown` (脆弱=exit1 / 防御=exit0) ## 协调器 (自动源码补丁) - `knowledge.py` : 针对各漏洞类型的补丁模板/验证(负数数量·SQLi·XSS·IDOR·**上传**) - `responder.py` : 轮询事件 → LLM/启发式补丁 → `verify.sh` 重新攻击验证 → 提交 - 免费演示: `responder.py --heuristic` / 实际 LLM: `AIR_LLM_PROVIDER`(anthropic|gemini|groq) - **自动补丁安全机制(#6)**: 自动应用仅限于隔离分支(`air/auto-patch/*`) — 不直接 push/merge 到 base。 LLM 生成的补丁必须通过验证 + **静态扫描**(OS执行/反射/反序列化/网络/混淆/破坏性删除/硬编码密钥/授权失效) 才会被采用(失败时回退到确定性模板 fallback)。LLM 补丁设有**人工审查门控**(若无 `--allow-llm-push` 则暂停 push)。 使用 `--regression` 确认拦截重放攻击后,执行正常功能回归冒烟测试。 ## 运维注意事项 - 演示结束后**删除所有 `/air/rules`**(防止单一 nginx IP 环境下 IP 拦截规则导致全面拦截)。可信 IP 白名单为可选项。 - `.env`, `*.pem`, Webhook URL **禁止提交**。故意设为脆弱 — 仅限隔离/可信 IP 使用。 ## 安全特性与局限 (演示注意事项) - **签名仅用于演示,实际防御依赖 anomaly + guard(#7)**: `SQLI/XSS` 等正则表达式签名可能被 编码·注释插入(`/**/`)·变形 payload 绕过。可信的防线是 (1) 异常检测(5xx/4xx 扫描)→ `air.shield` 来源隔离 + 动态规则,(2) 针对各类型的运行时 guard(标志),签名仅为提升演示可读性的辅助手段。 - **风险评分是基于类型的静态值(#10)**: `RiskScoring` 采用类型→分数的固定映射(无持久化·无聚合),因此 不反映重复次数/成功与否/暴露量。将基于重复·上下文加权与仪表盘聚合、并在事件中对 severity 进行 **持久化(schema 迁移)** 后的扩展列为未来课题。 - **XSS 演示的层次(#8)**: nginx 对 **web·defense 两端的所有响应**(`/api` 代理包含在内,继承 server 块) 均应用 `Content-Security-Policy: script-src 'self'`(经实测确认)。因此,以同源方式存储/上传的 内联脚本在任何分支中都会被浏览器拦截执行。`xss` 场景在 web 端显示为 VULNERABLE 是为了 验证 **应用层(存储/反射时缺失转义)** 的漏洞,与浏览器执行 alert 是两回事。 → 诚实的演示: 展示 web 响应 JSON 中的 payload 以**未转义**形式存储/反射(defense 则进行了转义),从而 对比代码层的漏洞/防御。如果一定要弹出 alert,请在 CSP 之外的上下文(下载的文件 `file://` 或放宽 CSP 的 演示页面)中进行确认,并明确指出这是 CSP 这一独立防御层之外的影响。 ## 分支布局 `feature/web`(脆弱 baseline `:80`) ↔ **`feature/air-defense`**(自主防御 `:8081`) / `feature/air-attack`(DAST) / `dev`(CI)。 _这是一个用于学习/安全实践的自主防御测试平台。_

# AIR — 基于 LLM 的风险重评与报告生成 (`feature/risk-eval-agent`) # AI 驱动的 DevSecOps Pipeline 在应用程序开发生命周期(CI/CD)内自动化 **SAST, DAST, SCA(依赖项)** 扫描,并引入**基于 LangGraph 的多 AI Agent(GPT-4o-mini)**,以过滤漏洞误报(False Positive)并重新评估业务风险等级的智能 DevSecOps 流水线。 ## 主要功能及特点 (Key Features) 1. **优化的三大安全扫描集成** * **SAST (Semgrep):** 应用针对 Spring Boot, MyBatis, JWT, Vanilla JS 环境优化的规则,并屏蔽噪音(测试代码、Python 脚本)。 * **SCA (Trivy):** 检测容器镜像及开源依赖项漏洞。 * **DAST (ZAP):** 利用 `zap-full-scan.py` 进行主动型(Active) Web 模拟黑客攻击及攻击 payload 注入测试。 2. **考虑可移植性(Portability)的架构** * 将目标应用程序的依赖管理工具(Poetry, Maven 等)与安全流水线分离。 * 使用内置 `pip` 和独立的 `requirements.txt`,只需复制粘贴即可在任何代码库环境中运行。 3. **基于 LangGraph 多 Agent 的误报验证 (Zero-Trust)** * 不盲目相信扫描器的结果,而是由 AI 分析实际代码上下文和防御逻辑,**尽早拦截虚假漏洞(误报)(Early Exit)**。 * 为防止 token 浪费并克服 GPT-4o-mini 的性能局限,采用**单一职责(Single Responsibility)节点分离设计**。 ## 流水线架构 (Workflow) CI/CD 流水线采用并行执行安全扫描后,在 `summary` Job 中提炼数据并传递给 AI Agent 的 Funnel 结构。 ``` graph TD A[Push / PR] --> B(Semgrep SAST) A --> C(Trivy SCA) A --> D(ZAP DAST) B --> E[데이터 경량화 추출] C --> E D --> E E -->|extract_*.py| F((AI Agent Pipeline)) F --> G{Security Gate} G -->|Threshold Fail| H[Pipeline FAIL ❌] G -->|Threshold Pass| I[Pipeline PASS ✅] F -.->|Markdown Report| J[GitHub Step Summary] ``` ## AI Agent 详细结构 (Phase 1 ~ 4) AI 流水线(`run_ai_pipeline.py`)通过 LangGraph 以 4 阶段的传送带方式运作。 * **[Phase 1] 信息提取器 (Extractor):** * 从原始数据中仅提取认证装饰器、防御逻辑、DB 模型等事实(Fact)并进行结构化(JSON)。 * *预处理:* Python 脚本截取漏洞上下 ±30 行并直接注入(Direct Feed),以防止注意力分散。 * **[Phase 2] 误报判定器 (Triage):** * 基于 Phase 1 的事实判断漏洞的实际触发可能性。 * *条件路由(Conditional Edge):* 如果判定为误报(False Positive),则跳过复杂的风险评估(Phase 3)直接进入报告(Phase 4)阶段以节省成本。 * **[Phase 3] 业务风险评估器 (Assessor):** * 考虑系统上下文(目录树、OS、技术栈)及所发现漏洞的暴露范围,重新调整最终的 CVSS 风险等级(Critical ~ Low)。 * **[Phase 4] 报告生成器 (Reporter):** * 渲染便于开发人员和安全负责人阅读的集成 Markdown 报告。 ## 目录结构 (Directory Structure) ``` .github/workflows/ └── security.yml # CI/CD 파이프라인 메인 엔트리포인트 scripts/ ├── generate_summary.py # 전체 스캔 통계 카운트 스크립트 ├── extract_semgrep.py # SAST 리포트 LLM용 경량화 ├── extract_trivy.py # 의존성 리포트 LLM용 경량화 ├── extract_zap.py # DAST 리포트 LLM용 경량화 │ └── ai_agent/ # 🤖 AI 파이프라인 독립 격리 공간 ├── requirements.txt # AI 구동을 위한 독립 의존성 (Poetry 대체) ├── state.py # Pydantic 기반 스키마 및 LangGraph 상태 장부 ├── nodes.py # Phase 1~4 에이전트 로직 ├── graph.py # LangGraph 노드 및 조건부 엣지 조립 ├── tools.py # 코드 청킹, 디렉토리 트리 추출 유틸리티 └── run_ai_pipeline.py # AI 파이프라인 실행 메인 스크립트 policy/ ├── security_gate.py # 임계치(Threshold) 기반 CI 통제 로직 └── security_policy.json # 각 스캐너별 허용 임계치 설정 파일 ``` ## 初始化与测试 ### 1. 设置必需的环境变量 要使此流水线正常运行,需要在 GitHub 代码库的 **Secrets** 中注册 OpenAI API Key。 * 导航至 `Settings` > `Secrets and variables` > `Actions` * `OPENAI_API_KEY` ### 2. 验证流水线运行 (GitHub Actions) 1. 将代码推送到 `dev` 或 `main` 分支,或创建 Pull Request。 2. `security.yml` 工作流将被自动触发。 3. 流水线完成后,可以在相应 Run 页面的 **Summary 标签页**底部查看由 AI 编写的 `🤖 AI DevSecOps Integrated Security Report` Markdown。 ### 3. 未来扩展性 (Next Steps) * **引入 Agentic Tool Calling:** 在 SAST/DAST 分析中如果上下文不足,提升 Phase 1 逻辑,使 LLM 能够直接探索目录并读取额外文件。 * **将报告语言更改为中文:** 修改为以中文输出最终报告。
标签:AppImage, CISA项目, Spring Boot, Web应用防火墙, 域名枚举, 安全靶场, 异常检测, 自动化响应, 请求拦截, 逆向工具