mcpField
P
PandaWard

PandaWard

本地服务
pandaward.dev安全32今天更新

关于 PandaWard

PandaWard 是面向自有代码的本地应用安全评估工具,提供 Go 命令行工具和 Claude Code 插件。它以只读扫描和带证据的本地账本记录检查结果,并在复测确认后更新发现状态。

主要功能

  1. 01默认只读的离线检查
  2. 02记录脱敏证据与控制项状态
  3. 03跨扫描跟踪发现及修复
  4. 04生成 HTML、Markdown、JSON 等报告
  5. 05支持人工批准的网络测试
  6. 06Claude Code 中自动复测代码变更

适用场景

  1. 01评估自有代码仓库的应用安全
  2. 02复测修复后的发现并查看差异
  3. 03汇总未决控制项与证据
  4. 04导出安全评估报告

MCP 相关

Claude Code 插件通过 MCP 服务器连接 PandaWard 引擎,供技能和只读 Agent 调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbpandaward-mcp.mcpb0.2.7

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PandaWard

PandaWard

为你自己的代码提供本地、基于证据的应用安全评估。
独立的 Go 命令行工具和 Claude Code 插件。默认采用被动扫描,如实说明未测试的内容。

持续集成 OpenSSF 安全评分卡 许可证:AGPL-3.0 Go 1.26+ 状态:alpha

网站和演示 · 文档 · 快速开始 · 局限性


大多数扫描器会打印一串警报,然后就此结束。PandaWard 会保留一份台账:记录每项可检查的控制、检查方式、脱敏后的证据,以及所有无法判定的控制。每次扫描都会为发现生成指纹,因此只有再次运行检查且不再发现问题时,修复才会标记为 REMEDIATED;而文件即使移动或重命名,其发现、ID 和分诊结果也会保留,不会被误认为已修复。

随附演示项目的终端会话:pandaward init 检测技术栈,pandaward scan 报告运行了哪些适配器、哪些适配器处于 BLOCKED 状态,以及 38% 的确定性覆盖率和 33 个未关闭发现;随后展示发现、跨域关系图和按顺序排列的修复计划
随附演示项目中的真实会话,由 tools/termdemo 生成。

随附 acme-shop 测试样例的 PandaWard 发现浏览器:20 项已确认发现、11 项疑似发现、38% 的确定性覆盖率;顶部显示一项关键级别的 pull_request_target 发现和硬编码密钥
对随附易受攻击测试样例进行真实扫描后得到的发现。打开在线演示,查看终端回放和完整报告。

## PandaWard 的优势
默认安全默认配置文件只读取代码仓库。它绝不会运行安装脚本、Makefile 或构建任务,绝不跟随符号链接,也不会向任何目标发送流量。
由人授权的网络测试任何会发送请求的操作都需要一份由真人在交互式终端中填写并批准的范围清单。AI Agent 无法批准。
不虚报「一切正常」只有 PASS 和 FAIL 是决定性结果。缺少扫描器时结果为 BLOCKED,发生崩溃时为 ERROR,命中启发式规则时为 SUSPECTED。这些结果都不代表安全。
提供证据,而非主观判断每项发现都关联到一条经过脱敏、以 SHA-256 寻址的证据记录。模型提出的问题在人工判定前始终为 HYPOTHESIS。
绝不泄露密钥值在存储、打印、报告或返回给模型之前都会被屏蔽。.env 和密钥文件只按名称记录。
跨会话保留记录状态保存在本地 SQLite 台账中,因此上下文压缩或重启不会导致结果丢失。
跨领域关联分析诸如 身份 -> 授权(BC1)或 Webhook -> 支付状态(FG1)这样的关联会根据代码中的共享资产创建,并单独跟踪。
保护隐私无需账户,也没有云后端。除非你主动开启,否则使用遥测处于关闭状态;pandaward telemetry show 会打印它将发送的每个字节(详情)。

原名 PenSec。 该项目在 0.2.0 版本中更名为 PandaWard。如果你使用过 PenSec,请参阅从 PenSec 迁移。

快速开始

作为 Claude Code 插件
/plugin marketplace add ratomirjovanovic/pandaward
/plugin install pandaward@pandaward            # macOS and Linux
/plugin install pandaward-windows@pandaward    # Windows

你也可以在终端中执行相同步骤:运行 claude plugin marketplace add ratomirjovanovic/pandaward 和 claude plugin install pandaward-windows@pandaward(在 macOS 和 Linux 上运行 pandaward@pandaward)。之后重启 Claude Code;/mcp 应显示 plugin:pandaward:pandaward 已连接。两个插件只能安装其中一个。如果遇到问题,请参阅故障排除。

更新。 除非你启用自动更新,否则 Claude Code 不会自行更新第三方市场。你可以启用一次自动更新(运行 /plugin,然后依次选择 Marketplaces、pandaward、Enable auto-update),也可以手动更新:

claude plugin marketplace update pandaward
claude plugin update pandaward-windows@pandaward   # or pandaward@pandaward on macOS and Linux

然后重启 Claude Code。运行 /plugin 可查看已安装的版本。

卸载。 运行 claude plugin uninstall pandaward-windows@pandaward(或 pandaward@pandaward),然后运行 claude plugin marketplace remove pandaward。结果会保留在各项目的 .pandaward/ 目录中,直到你将其删除。卸载指南介绍了 CLI 程序包以及 PandaWard 创建的所有文件。

然后,在项目中让 Claude 检查安全性,或运行:

/pandaward:start

这就是唯一需要运行的命令。Claude 会扫描项目,让专业审查 Agent 检查自动化无法判定的内容,对结果进行分类,制定修复计划并编写报告,同时提供实时检查清单。最后,它会询问一个问题——修改计划、记录分类结果,还是安装缺失的扫描器——并按你的选择执行,每次修复后都会重新测试。在本次会话后续过程中,只要代码发生变化,它也会自动重新测试。更改发现项状态的命令仍会显示确认提示;网络测试则始终需要你在自己的终端中批准测试范围。

单项技能
技能功能
/pandaward:init创建 .pandaward/ 并显示检测到的内容
/pandaward:scan执行被动扫描并如实汇总
/pandaward:review让只读专业 Agent 检查自动化无法判定的内容
/pandaward:fix-plan按顺序逐项修复,每项都需你批准
/pandaward:retest更改后重新扫描并显示差异
/pandaward:report生成 HTML、Markdown、JSON、SARIF、CSV 报告
/pandaward:status查看评估进展以及哪些内容已过时

该插件会从 plugin 和 plugin-windows 分支安装预构建且经过校验和验证的二进制文件;发布工作流会在每个版本标签发布时推送这些文件(如何验证)。如需在 Claude Code 之外使用 PandaWard,请参阅下文。

作为 CLI

使用程序包管理器:

brew tap ratomirjovanovic/pandaward https://github.com/ratomirjovanovic/pandaward && brew install ratomirjovanovic/pandaward/pandaward   # macOS, Linux
scoop bucket add pandaward https://github.com/ratomirjovanovic/pandaward; scoop install pandaward/pandaward     # Windows

或者从发布页面下载二进制文件(Linux 和 macOS 支持 amd64 和 arm64;Windows 支持 amd64)。例如,在 Linux 上:

v=v0.2.7
curl -fLO https://github.com/ratomirjovanovic/pandaward/releases/download/$v/pandaward-linux-amd64
curl -fLO https://github.com/ratomirjovanovic/pandaward/releases/download/$v/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
chmod +x pandaward-linux-amd64 && sudo mv pandaward-linux-amd64 /usr/local/bin/pandaward

在 Windows(PowerShell)上,将 pandaward-windows-amd64.exe 保存为 pandaward.exe,放入 PATH 中的某个文件夹:

Invoke-WebRequest https://github.com/ratomirjovanovic/pandaward/releases/download/v0.2.7/pandaward-windows-amd64.exe -OutFile pandaward.exe
(Get-FileHash pandaward.exe).Hash   # compare with the line in SHA256SUMS

或者使用 Go 1.26 或更高版本安装:go install github.com/ratomirjovanovic/pandaward/cmd/pandaward@latest。该二进制文件没有运行时依赖项。

运行 brew upgrade pandaward 或 scoop update pandaward 进行更新;如果使用的是下载的二进制文件,则用新版本替换该文件。运行 brew uninstall pandaward 或 scoop uninstall pandaward 进行卸载,也可以直接删除二进制文件。运行 pandaward version 可查看当前版本。

然后,在项目中运行:

pandaward assess          # init, scan with progress, reports and a summary
pandaward findings        # then dig in
pandaward fix-plan

发布的二进制文件可重现构建,并附带校验和、CycloneDX SBOM 和签名构建来源证明;docs/VERIFYING.md介绍了如何验证这些内容。

工作原理

flowchart LR
    subgraph Claude Code
      S[Skills /pandaward:*] --> M[MCP server]
      A[Read-only agents] --> M
      H[Hooks] --> L
    end
    CLI[pandaward CLI] --> E
    M --> E[Engine]
    E --> I[Inventory<br/>read-only walk]
    E --> AD[Adapters<br/>built-in + optional tools]
    E --> P[Scope and policy<br/>fail closed]
    AD --> R[Redaction]
    R --> EV[Evidence store<br/>SHA-256]
    E --> L[(SQLite ledger)]
    L --> RP[Reports<br/>HTML MD JSON SARIF CSV]
  1. 清点以只读方式遍历代码库,并记录文件、路由、清单、工作流、IaC、移动端清单以及 AI/MCP 使用情况。
  2. 规划将控制项目录(A 到 R 域)映射到发现的内容。没有匹配资源的控制项会标记为 NOT_APPLICABLE,并附上可供你审核的原因。
  3. 适配器开始运行。内置检查为离线检查,始终可用;只有在你安装了 gitleaks、semgrep、osv-scanner、trivy 和 apktool 时才会使用它们。apktool 会解码项目中找到的 .apk 文件(仅资源,绝不包含应用代码),因此清单检查也会针对你交付的内容运行(K-005)。如果你在本机运行 MobSF,请设置 scan.mobsf_url(例如 http://127.0.0.1:8000),并将其 REST API 密钥导出为 MOBSF_API_KEY;PandaWard 会将找到的 .apk 和 .ipa 文件上传到该服务,运行静态扫描,并将 MobSF 的高风险和警告项作为假设报告在 K-006(APK)和 L-005(IPA)下。对于 MobSF 仅在捆绑库代码中、应用自身包命名空间之外报告的代码问题,则会列出供审核。只接受环回地址;代理和重定向会被忽略;密钥绝不会出现在证据、日志或报告中。该适配器已针对 MobSF 4.5.3 测试。安装 semgrep 后,它会运行 PandaWard 附带的离线规则(参见 rules/README.md)以及你配置的任何规则。你自行运行的分析器(CodeQL 或其他 SAST 工具)生成的 SARIF 2.1.0 文件,会从 .pandaward/sarif/*.sarif 和 scan.sarif_files 中列出的任何路径导入;PandaWard 绝不会运行这些工具。导入结果会作为控制项 R-002 下的假设处理,片段会从你的文件中读取并脱敏,而非取自 SARIF。inventory.exclude 中的目录(例如 .next/ 和 dist/ 等构建输出目录、node_modules/)适用于每个适配器:扫描器在这些目录中报告的结果会被丢弃,摘要中的适配器条目会说明丢弃了多少条。
  4. 发现项会经过脱敏、指纹识别,并关联到证据。重复运行会更新其生命周期:OPEN、REMEDIATED、REOPENED、FALSE_POSITIVE、RISK_ACCEPTED。同一文件中的相同命中会根据位置区分,因此修复其中一处只会修复该处;文件被移动或重命名的发现项会保留其 ID 和状态,并报告为已移动,而绝不会报告为已修复。
  5. 仅根据共享资源创建域之间的关联,其状态取自关联的控制项。
  6. 报告会展示已确认的发现项、疑似信号、各域覆盖情况、每项尚未决议的控制项以及证据索引。

在 Claude Code 中,钩子会自动保持台账最新,无需执行任何命令。文件在编辑过程中会被标记为过期;Claude 完成一轮对文件的编辑后,PandaWard 会运行仅针对变更内容的被动复测(最长 40 秒),并将任何新增或重新打开的发现项反馈给 Claude,由 Claude 解释这些发现并提供修复方案。复测干净时不会发出消息;如果复测超时或失败,会明确说明,而不会声称问题已修复。要关闭此功能,请在 .pandaward/config.yaml 中设置 hooks.auto_retest: false。

专业审查 Agent 运行期间,你可以查看每个 Agent 正在做什么。提示词下方的子 Agent 面板会显示其行记录,包括已用时间、读取的文件、搜索、记录的假设以及当前查看的文件或模式,并由 Claude Code 刷新。聊天中,Claude 会在审查 Agent 启动、记录假设或完成时告知进展;在此期间,大约每分钟提供一次简短摘要,并在审查 Agent 静默 10 分钟时发出警告。聊天中的这些消息需要 Claude Code 的 Monitor 工具;在 Windows 上,该工具需要 Git Bash。钩子只会为名为 pandaward:* 的子 Agent 将这些信息记录到 .pandaward/private/progress.jsonl。它们会记录文件名和搜索模式,绝不记录文件内容;pandaward progress 可在终端中显示相同的视图。

检查内容

域当前可自动检查(离线)需要审查或运行时检查
A 清单与架构带文件和行号的入口点(pandaward routes):Express、NestJS、Next.js、Flask、FastAPI、Django、Go、Spring、Laravel、Rails、ASP.NET 的 HTTP 路由(已解析路由器前缀和挂载);GraphQL 架构操作;gRPC 服务;队列消费者和 cron 作业;单体仓库中的服务;OpenAPI 漂移威胁模型
B 身份验证JWT none 或未经验证的解码、Cookie 标志拒绝已撤销的凭据(staging-active);登录、重置和 MFA 流程
C 授权使用测试身份进行对象级和功能级授权(staging-active)、路由审查(人工辅助)
D 注入eval、Shell、SQL 拼接、不安全反序列化ZAP 主动扫描(staging-active,可选)
E 密钥与加密16 种高特异性密钥格式、受版本控制的 .env 和密钥文件、已禁用的 TLS 验证、弱哈希或随机数
F 业务逻辑不变量、幂等性、竞态条件(人工辅助)
G API 与 Webhook是否存在 Webhook 签名验证契约与运行时对比
H Web原始 HTML 接收点、带凭据的 CORS 通配符安全标头(production-observe)
I 供应链缺少锁文件、npm 安装脚本、未固定版本的 Python 需求通过 osv-scanner 检查安全公告
J 基础设施Terraform 中的 Dockerfile root 和未固定版本的基础镜像、特权容器、公开存储和管理端口trivy
K、L 移动端Android 清单标志和导出的组件、SharedPreferences 中的凭据、全局可读存储;iOS ATS、发布版授权中的 get-task-allow、Keychain 可访问性和 UserDefaults 中的凭据通过 apktool 检查已构建的 APK;通过本地 MobSF 服务检查已构建的 APK 和 IPA;在模拟器或仿真器上检查应用存储中的明文凭据(local-runtime)
N CI/CD未固定版本的操作、脚本注入、pull_request_target 检出、令牌权限
O 可观测性日志调用中的凭据告警审查
P AI 与 MCP模型输出流入 exec 接收点、MCP 服务固定版本和内联凭据提示词注入测试
R 保障证据完整性、导入的 SARIF 结果

pandaward capabilities 会打印完整目录及各适配器的成熟度。目前所有适配器均为 implemented_unvalidated。每次拉取请求中,CI 都会运行可选工具适配器,分别使用 gitleaks 8.30.1、semgrep 1.182.0、osv-scanner 2.7.0 和 trivy 0.76.1:该作业会扫描打包的易受攻击样本,并在适配器未能完成运行或其解析器漏掉预期发现时失败。其他版本可能可用,但未经检查。

pandaward benchmark 会针对一个带版本的易受攻击和安全案例语料库运行每条内置规则,并按规则打印 TP、FP、FN、TN、精确率和召回率。如果规则漏掉易受攻击案例,或在安全案例上触发,CI 就会失败;每个版本都会附带 benchmark.json。只有在至少 3 个易受攻击案例和 3 个安全案例上,精确率和召回率均不低于 0.95,规则才会被视为 implemented_and_benchmarked。目前每条规则各有 1 个易受攻击案例和 1 个安全案例,因此尚无规则符合条件。该语料库由 PandaWard 自行构建,因此这些数字反映的是这些案例,而非真实世界的准确率。在面向 Java 的公开 OWASP Benchmark 上,内置规则得分为 0.00:它们只匹配单行,不跟踪数据流,因此未发现其中任何测试案例(也没有误报)。对于 Java 注入问题,请通过 PandaWard 使用 Semgrep 或其他具备数据流感知能力的分析器;docs/BENCHMARKS.md 提供了相关数字及复现方法。

命令

命令作用
pandaward assess一步完成整个本地评估:按需初始化、显示进度条进行扫描、生成报告和摘要
pandaward init创建 .pandaward/,其中包含配置和私有台账
pandaward plan适用的控制项、门槛、候选边和清单缺口
pandaward scan [--fail-on high]被动扫描,包括从 .pandaward/sarif/ 导入 SARIF;达到门槛时退出代码为 4
pandaward retest [--changed]重新扫描上次扫描以来发生更改的文件,并显示差异;--changed 只重新运行受这些更改影响的控制项对应的适配器
pandaward status覆盖范围、未解决的发现、过时文件、阻碍项、下一步操作
pandaward findings [show ID]列出或检查发现;apply --file 可一次记录多项决策
pandaward graph [--format mermaid]域和跨域边
pandaward routes已发现的入口点(HTTP、GraphQL、gRPC、工作进程、cron),包括文件和行号
pandaward fix-plan按顺序排列的修复步骤
pandaward report [--format ...]HTML、Markdown、JSON、SARIF 2.1.0、CSV
pandaward evidence show ID | verify查看或验证已编辑的证据
pandaward diff [FROM TO]两次评估之间新增、重新打开、已修复、已移动、过时和已豁免的发现(默认:上一次与最新一次对比)
pandaward progress [--watch] [--json]查看引导式审查中的审查子 Agent 正在执行的工作;--watch 会在所有子 Agent 完成之前,为每次开始、提出假设和结束打印一行
pandaward export --bundle out.zip为审查者打包报告和已编辑的证据,并附上 SHA-256 清单;绝不包含原始工具输出
pandaward verify-bundle out.zip重新计算包中的每个哈希值;将打印的清单哈希与发送方提供的哈希进行比较
pandaward scope init | validate | approve | revoke网络测试授权
pandaward test --profile production-observe审查已批准来源的标头和 Cookie
pandaward test --profile local-runtime将配置的 Android 测试版本存储到正在运行的模拟器中,并将 iOS 测试版本存储到已启动的模拟器中;不接受真实设备
pandaward test --profile staging-active使用测试身份进行授权检查,然后对已批准的预发布来源执行 ZAP 爬取和被动扫描;清单允许时执行主动扫描
pandaward feedback false-positive ID | false-negative | summary准备有关错误发现或漏报的报告;打印预填的 issue 链接,不会发送任何内容
pandaward doctor可选扫描器及其网络需求
pandaward benchmark对随附语料库中的每条内置规则统计 TP、FP、FN 和 TN
pandaward selftest使用恶意测试仓库(注释、README、OpenAPI、MCP 描述和扫描器输出中的指令)运行扫描、报告、MCP 和钩子,并检查 PandaWard 是否受到其操控;CI 和每次发布都会运行此测试,任何用例失败都会导致失败
pandaward mcp插件使用的本地 stdio MCP 服务
pandaward telemetry [on | off | show]使用情况计数器采用选择加入方式,默认关闭;on 需要交互式终端(发送哪些数据)

人工决策会明确记录:

pandaward findings false-positive PW-0007 --by "Jane" --note "constant input, not user controlled"
pandaward findings accept-risk   PW-0003 --by "Jane" --note "internal tool" --expires 2027-03-01
pandaward findings apply --file decisions.json --by "Jane"   # many at once, all or nothing

decisions.json 是一个数组,包含 {"finding_id", "action", "note", "expires},其中 action 可为 confirm、false-positive、accept-risk(需要 expires)或 reopen。写入任何内容前都会检查每个条目,因此一个无效条目就会导致整个批次被拒绝。在 Claude Code 中,引导式评估会通过此方式记录分类结果:你会在一个确认提示中看到完整列表,而不是针对每项发现分别收到一个提示。

网络测试

网络测试默认关闭,需由你手动启用:

pandaward scope init                       # writes .pandaward/scope.yaml, unusable as shipped
# fill in owner, written permission reference, purpose, targets, limits, acknowledged: true
pandaward scope approve --by "Jane"        # interactive terminal only, bound to the file's SHA-256
pandaward test --profile production-observe
pandaward test --profile staging-active    # staging or local targets, needs ZAP

引擎最多向列出的源发送 max_requests_total 个 GET 请求,并按配置的速率发送;它不会跟随重定向,并会在连接时检查每个解析出的地址。除非清单明确允许使用本地测试装置,否则会拒绝环回、私有和链路本地地址;云元数据地址始终会被拒绝。编辑 scope.yaml 会使审批失效。审批还绑定到存放在项目之外的每用户密钥(位于用户配置目录中的 approval.key),因此随仓库一同提供的范围文件或账本绝不会被视为已获审批。

staging-active 会通过 ZAP 的自动化框架运行你已安装的 ZAP(需要 Java 17+;PandaWard 绝不会安装它):爬虫和被动扫描用于判定 M-001;若清单中设有 zap.active_scan: true,主动扫描还会判定 D-005(注入)。ZAP 会通过环回地址上的 PandaWard 代理发送请求,该代理负责终止 TLS,并通过同一范围防护机制转发每个请求,因此源、排除路径、允许的方法、请求预算、速率限制和地址检查适用于每个 ZAP 请求。连续出现三次 429 或 5xx 响应后,防护机制也会停止运行。失败的 ZAP 运行结果为 ERROR;因预算或防护机制而提前停止的运行结果为 INCONCLUSIVE;标记为 environment: production 的目标会被拒绝。如果 ZAP 不在 PATH 中或不在默认安装位置,请在 .pandaward/config.yaml 中设置 runtime.zap_path。

staging-active 还会在运行 ZAP 前执行清单中的 authorization_checks。你需要列出测试身份(名称、租户、承载凭据的请求头,以及存放凭据的环境变量;凭据本身绝不能写入文件),并列出测试所需对象或函数的只读请求,以及允许访问这些对象或函数的身份:

identities:
  - {name: alice, tenant: acme, header: Authorization, value_env: PANDAWARD_ID_ALICE}
  - {name: bob,   tenant: beta, header: Authorization, value_env: PANDAWARD_ID_BOB}
  - {name: carol, tenant: acme, header: Authorization, value_env: PANDAWARD_ID_CAROL}   # an admin
  - {name: alice-logged-out, tenant: acme, header: Authorization, value_env: PANDAWARD_ID_OLD, revoked: true}
authorization_checks:
  - {name: acme invoice, kind: object,   method: GET, path: /api/invoices/inv_acme_1, allowed: [alice]}
  - {name: user admin,   kind: function, method: GET, path: /admin/users,            allowed: [carol]}

每项检查都会以每个身份的身份发送一次,并在不带凭据的情况下发送一次。允许的身份必须获得 2xx 响应,否则无法判定该检查,结果为 INCONCLUSIVE。任何其他身份若也获得 2xx 响应,则会产生一项发现:若其响应正文与允许身份获得的正文相符,结果为 CONFIRMED;若不相符,结果为 STRONGLY_SUPPORTED。对象检查用于判定 C-001(BOLA),函数检查用于判定 C-002;标记为 revoked 的身份会在每项检查中用于判定 B-004。只允许使用 GET 和 HEAD,因此不会更改数据,也无需进行清理。证据会按身份保留状态、大小、内容类型和正文哈希,但不会保留请求头、正文或凭据。若缺少凭据环境变量,运行会在发送第一个请求前停止。

模拟器和仿真器检查

pandaward test --profile local-runtime 会检查测试构建实际存储的内容。它不会发送网络流量,因此不需要范围清单:

# .pandaward/config.yaml
runtime:
  android_package: com.acme.shop      # debuggable test build on a running emulator
  ios_bundle_id: com.acme.shop        # test build in a booted simulator (macOS)

在 Android 上,它会使用 adb,并选择同时报告 ro.kernel.qemu=1 的 emulator-* 序列号;然后通过 run-as 读取应用的 shared_prefs,这仅适用于可调试构建。在 iOS 上,它会使用 xcrun simctl get_app_container booted,并且只接受位于 CoreSimulator 内的容器,然后读取应用的偏好设置 plist。若类似凭据的键(token、password、session 等)下存在非空值,则会产生 K-003 或 L-002 发现;PandaWard 会记录键名,绝不会记录其值。真实设备会被拒绝;若缺少模拟器、仿真器、工具或设置,则该控制项会标记为 BLOCKED 并附上原因。运行时不会测试传输安全和 Keychain 可访问性。

在 CI 中

permissions:
  contents: read
  security-events: write
steps:
  - uses: actions/checkout@<pinned-sha>
  - id: pandaward
    uses: ratomirjovanovic/pandaward@<pinned-sha>   # v0.1.3 or later
    with:
      fail-on: high          # empty to never fail on findings
      new-only: "true"       # on pull requests, gate only on findings the change introduces
  - if: always()
    uses: github/codeql-action/upload-sarif@<pinned-sha>
    with:
      sarif_file: ${{ steps.pandaward.outputs.sarif-file }}

该 Action 会下载一个发布二进制文件,根据 SHA256SUMS 对其进行校验,执行扫描,并将 SARIF、HTML、Markdown 和 JSON 报告写入 pandaward-report/,同时添加一份仅包含数量的简短作业摘要(summary: full 会列出发现项;公开仓库的作业摘要也是公开的)。使用 new-only 时,会在单独的工作树中扫描基准提交,并且仅统计指纹为新增的发现项。输入和输出见 action.yml 文档。

每次提交前

使用 pre-commit,将以下内容添加到 .pre-commit-config.yaml,并在项目中运行一次 pandaward init:

repos:
  - repo: https://github.com/ratomirjovanovic/pandaward
    rev: v0.2.7
    hooks:
      - id: pandaward-system   # uses the pandaward on your PATH; use id: pandaward to build it with Go 1.26+

该钩子会运行 pandaward scan --quiet --fail-on high,并在存在未解决的高危或严重发现项时阻止提交。它扫描的是工作树,而不仅是暂存文件。

PandaWard 不会告诉你的内容

  • 你的应用是安全的。没有任何工具能够证明不存在漏洞。
  • 关于其报告为 BLOCKED、UNSUPPORTED、SUSPECTED、INCONCLUSIVE、ERROR 或 STALE 的控制项的任何信息。
  • 尚未实现的运行时测试结果:登录、重置和 MFA 流程(B-003)、API 契约与运行时的一致性(G-002),以及针对 LLM 端点的提示词注入测试(P-003),目前均报告为 UNSUPPORTED。

PandaWard 报告是自动化技术评估。它不是认证、证明、法律意见或经独立签署的渗透测试。

路线图

里程碑范围状态
M0 基础CLI、台账、范围策略、清单、静态报告已完成
M1 公共 Alpha内置适配器、可选工具适配器、捆绑的 Semgrep 规则、边、HTML/JSON/SARIF、插件、经签名且可复现的发布版本已完成(v0.1.1)
M2 上下文安全 Beta按域失效、定向复测、证据包、差异报告、恶意仓库测试套件已完成
M3 运行时 Beta配备角色和租户测试数据的暂存环境配置、ZAP 适配器已完成
M4 移动端和 AIapktool 和模拟器或仿真器存储检查、会阻止发布的恶意仓库测试套件、MobSF 适配器;LLM 端点测试进行中
1.0冻结的架构(已完成)、基准语料库(每条规则至少包含 3 个有漏洞案例和 3 个安全案例)、外部审查进行中

详情请参阅问题列表。

从 PenSec 迁移

PandaWard 0.2.0 是重命名后的 PenSec。你的结果会保留:

  • 在项目中首次运行 pandaward 时,会将 .pensec/ 及其中的台账、证据、报告、配置和范围清单迁移到 .pandaward/。如果你曾提交 .pensec/config.yaml 或 scope.yaml,请提交重命名后的文件。
  • 审批仍然有效:审批密钥会从用户配置目录中的旧 pensec 文件夹继承。
  • 未设置 PANDAWARD_* 环境变量时,仍会读取 PENSEC_* 环境变量。
  • 现有发现项 ID(如 PSEC-0007)仍可使用;新发现项会获得 PW- ID。

只需切换一次工具:

/plugin uninstall pensec-windows@pensec        # or pensec@pensec
/plugin marketplace remove pensec
/plugin marketplace add ratomirjovanovic/pandaward
/plugin install pandaward-windows@pandaward     # or pandaward@pandaward on macOS and Linux

CLI:运行 brew uninstall pensec && brew untap ratomirjovanovic/pensec,然后按上述说明安装 pandaward(Windows 上运行 scoop uninstall pensec; scoop bucket rm pensec)。在 CI 中,将 uses: 指向 ratomirjovanovic/pandaward;GitHub 目前仍会将旧名称重定向到新名称,但请改用新名称并固定版本。

错误或遗漏的发现项

请告知我们,我们会修正规则。运行 pandaward feedback false-positive <PW-ID> 或 pandaward feedback false-negative --rule <id>(或在 Claude Code 中使用 /pandaward:feedback),即可生成一份仅包含规则元数据的报告,并打印预填的问题链接;除非你主动提交,否则不会发送任何内容。报告会按规则分组并自动排序优先级,每项修复都会新增一个基准案例。请参阅 docs/FEEDBACK.md。

贡献与安全

欢迎贡献。请从 CONTRIBUTING.md 开始。如需报告 PandaWard 本身的漏洞,请按照 SECURITY.md 中的说明私下报告。

许可证

PandaWard 是遵循 GNU Affero General Public License v3.0(AGPL-3.0-only)的免费开源软件。

您可以使用、研究、修改和分享本软件,包括在公司内部使用。如果您分发 PandaWard 或其修改版本,或允许他人通过网络使用修改版本(例如将其作为托管扫描服务),则必须依照相同许可证发布完整的对应源代码。对于无法满足这些条款的用途,可向版权所有者申请商业许可。

PandaWard 可以调用的第三方扫描器仍遵循各自的许可证。本许可证不适用于您评估的项目,也不适用于 PandaWard 为这些项目生成的报告。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。