Sign in

    moon-audit

    Static security scanner for MoonBit projects

    security
    scanner
    static-analysis
    Download zip
    Author
    Version
    0.1.0
    License
    MulanPSL-2.0
    Last updated
    3 months ago
    Downloads
    120

    #moon-audit

    MoonBit 生态安全静态分析工具。基于 AST 语法树分析,检测 MoonBit Web 应用中的安全漏洞。

    #功能特性

    • 11 条安全检测规则,覆盖 OWASP Top 10 中的注入、访问控制、安全配置错误等类别
    • Import 门控:根据项目依赖自动激活相关规则,降低误报率
    • 多格式输出:支持 Text、JSON、SARIF 2.1.0(兼容 GitHub Code Scanning)
    • LLM 辅助分析:生成结构化提示词,供 LLM 进行深度漏洞验证和误报过滤
    • PoC 自动生成:根据检测结果生成 Python 漏洞利用脚本模板
    • 修复建议引擎:提供每种 CWE 的修复方案,含 Before/After 代码示例
    • 污点追踪:追踪用户输入从 Source 到 Sink 的数据流
    • 扫描报告统计:按规则、文件、CWE、OWASP 分类聚合分析结果

    #检测规则

    规则 ID描述严重级别
    CWE-116/replace-escapingString::replace() 仅替换首次出现,HTML 转义不完整Error
    CWE-79/cmark-unsafecmark 渲染 Markdown 时默认 safe=false,允许注入Error
    CWE-79/inner-htmlinner_html() 接收动态内容,DOM XSSError
    CWE-79/template-injectionHTML 响应中使用字符串插值,反射型 XSSError
    CWE-94/eval-externextern JS 中使用 eval()/new Function()Error
    CWE-113/crlf-injectionHTTP 响应头注入动态值,CRLF 注入Error
    CWE-942/cors-credentialsCORS credentials=true 且未限制 OriginError
    CWE-614/cookie-attrsCookie 缺少 HttpOnly/Secure/SameSite 属性Warning
    CWE-770/no-body-limit服务器无请求体大小限制,DoS 风险Warning
    CWE-346/ws-originWebSocket 无 Origin 校验Warning
    CWE-22/path-concat路径拼接可能导致目录穿越Warning

    #安装

    moon add nicball/moon-audit

    #使用方式

    #扫描项目

    moon run src/main -- /path/to/moonbit-project

    #指定输出格式

    # JSON 格式 moon run src/main -- --format json /path/to/project # SARIF 格式(GitHub Code Scanning) moon run src/main -- --format sarif -o results.sarif /path/to/project

    #列出所有规则

    moon run src/main -- list-rules

    #配置文件

    在项目根目录创建 .moon-audit.json:

    { "rules": { "CWE-116/replace-escaping": { "enabled": true, "severity": "error" }, "CWE-94/eval-extern": { "enabled": false } }, "exclude": ["_build", ".mooncakes", "*_test.mbt"] }

    #架构

    src/ ├── scanner.mbt # 主扫描引擎:目录遍历、AST 解析、规则调度 ├── types.mbt # 核心类型:Finding, Severity, RuleId, Config ├── helpers.mbt # AST 参数检查工具函数 ├── import_analysis.mbt # moon.pkg/moon.mod 依赖分析 ├── config.mbt # .moon-audit.json 配置加载 ├── output.mbt # Text/JSON 输出格式化 ├── sarif.mbt # SARIF 2.1.0 输出 ├── llm_prompt.mbt # LLM 辅助分析提示词生成 ├── poc_gen.mbt # PoC 漏洞利用脚本生成 ├── remediation.mbt # 修复建议引擎 ├── taint.mbt # 污点追踪数据流分析 ├── summary.mbt # 扫描统计报告 ├── cwe*.mbt # 各 CWE 规则实现 ├── scanner_test.mbt # 核心规则测试 ├── extended_test.mbt # 扩展模块测试 └── main/main.mbt # CLI 入口

    #工作原理

    1. Import 分析:解析 moon.pkg 提取依赖信息,构建 ImportContext
    2. AST 解析:使用 moonbitlang/parser 将 .mbt 源文件解析为语法树
    3. 规则匹配:每条规则实现 IterVisitor trait,遍历 AST 匹配漏洞模式
    4. 门控过滤:仅在项目使用相关框架时激活对应规则
    5. 结果输出:支持 Text/JSON/SARIF 多种格式

    #LLM 辅助分析流程

    静态分析发现 → 生成结构化提示词 → LLM 深度分析 → 误报过滤 → 高精度结果

    generate_analysis_prompt() 将每个 Finding 转换为包含源码上下文、Import 信息和 MoonBit 语义提示的分析请求,输出 Claude API 兼容的 JSON 格式。

    #PoC 验证流程

    静态分析发现 → 分类 CWE 类型 → 生成 Python 利用脚本 → 红队验证

    generate_poc() 为 CORS、Cookie、DoS、XSS、路径穿越、CRLF 注入等类型自动生成可执行的 PoC 脚本。

    #开发

    # 编译检查 moon check # 运行测试 moon test # 格式化代码 moon fmt

    #许可证