Actenon/actenon-scan

GitHub: Actenon/actenon-scan

actenon-scan 是一款专注于 AI Agent 执行安全的防御性静态分析扫描器,用于检测 Agent 工具边界中缺少权限校验的不可逆危险操作。

Stars: 0 | Forks: 0

# actenon-scan ![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg) [![PyPI](https://img.shields.io/pypi/v/actenon-scan.svg)](https://pypi.org/project/actenon-scan/) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](https://pypi.org/project/actenon-scan/) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) **阻止 AI agent 执行其未获授权的重大操作。** `actenon-scan` 是一款防御性的静态分析扫描器,用于发现**执行漏洞**:即在没有对代码路径进行预先权限或凭证校验的情况下,从 AI agent 工具边界即可触达重大且不可逆操作(支付、删除、部署、访问授权)的代码位置。 可以把它看作是 Bandit 或 Semgrep —— 但只专注于一个问题:**Replit 事件,即 agent 执行了本不该执行的破坏性操作。** ## 快速开始 ``` pip install actenon-scan actenon-scan scan . ``` 输出示例: ``` actenon-scan: 3 finding(s) in 3 file(s) (scanned 47 file(s)) refund_tool.py 8:4 [HIGH] PAY-STRIPE-REFUND (payments) stripe.Refund.create(payment_intent=payment_id, amount=amount) confidence: high Guard this payment call with actenon proof verification. See: https://github.com/Actenon/actenon-permit delete_tool.py 14:4 [HIGH] DATA-DELETE-SQL (data_destruction) 'DELETE FROM {table_name}' confidence: high Guard this destructive call with actenon proof verification. See: https://github.com/Actenon/actenon-permit ``` ## GitHub Action (SARIF + PR 内联注解) ``` name: actenon-scan on: [pull_request] jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: Actenon/actenon-scan@v0.1.1 with: path: . fail-on: medium # SARIF is automatically uploaded to GitHub code scanning # — inline PR annotations appear automatically ``` SARIF 输出可以在 GitHub 代码扫描中原生呈现 —— 内联注解会自动显示在 PR diff 中。 ## 判定原理 当 **SINK** 同时满足 **AGENT-REACHABLE** 且 **UNGUARDED** 时,将触发 **finding**。 | 信号 | 含义 | 检测方式 | |---|---|---| | **SINK** | 调用重大/不可逆操作(退款、DELETE FROM、kubectl apply、IAM 授权) | 基于调用名称 + SQL 字符串字面量进行 AST 模式匹配 | | **AGENT-REACHABLE** | 该 sink 位于已注册的 agent 工具内(`@tool`、`@mcp.tool`、`@server.tool`、工具包装器,或继承自 `BaseTool` 的类) | AST 装饰器/包装器/类检测 | | **UNGUARDED** | 在同一函数内,通往 sink 的路径上没有预先的权限/凭证校验 | 对防护调用(`verify_proof`、`authorize`、`check_permission`)或防护装饰器进行词法前置检查 | 如果 sink 不是 agent 可达的(例如,它位于一个没有导入 agent 框架的普通脚本中),则不会触发 finding。这能保持较低的误报率。 如果 sink 已被防护(在同一函数中,它之前出现了 `authorize()` 或 `verify_proof()` 调用,或者该函数带有防护装饰器),则不会触发 finding。 ## 修复方法 当 `actenon-scan` 标记出一个 finding 时,修复方法是在重大操作调用之前添加一个**绑定凭证的权限校验**: ``` # BEFORE (已标记) @tool def process_refund(payment_id: str, amount: int): stripe.Refund.create(payment_intent=payment_id, amount=amount) # AFTER (已清理) @tool def process_refund(payment_id: str, amount: int): from actenon import verify_proof verify_proof(action="refund", target=payment_id, amount=amount) stripe.Refund.create(payment_intent=payment_id, amount=amount) ``` 该扫描器可以识别 **Actenon 防护**(`verify_proof`、`require_proof`、`actenon.*`)以及**通用防护**(`authorize`、`check_permission`、`require_approval`)。因此,即使您不使用 Actenon,添加防护也能消除该 finding —— 这款工具对非 Actenon 用户也非常实用。 - **[actenon-kernel](https://github.com/Actenon/actenon-kernel)** — 开放式凭证网关 - **[actenon-permit](https://github.com/Actenon/actenon-permit)** — 开发者优先的签发器 + PDP + 代理 ## 抑制 如果某个 finding 属于误报,可以通过内联方式将其抑制: ``` # actenon-scan: ignore[PAY-STRIPE-REFUND] stripe.Refund.create(...) ``` 或者使用 baseline 来抑制已知的 finding: ``` actenon-scan scan . --format json > baseline.json # Future runs 抑制这些: actenon-scan scan . --baseline baseline.json ``` ## CLI ``` actenon-scan scan [--format pretty|json|sarif] [--fail-on none|low|medium|high] [--config config.json] [--baseline baseline.json] [--include GLOB]... [--exclude GLOB]... actenon-scan rules # list active rules actenon-scan init # write a default config actenon-scan --version ``` ## 退出码 - `0` — 没有达到或超过 `--fail-on` 阈值(默认:`medium`)的 finding - `1` — 存在达到或超过阈值的 finding 这使得该工具可用于 CI 门禁。 ## 检测到的 Sinks (v1) | 类别 | 严重性 | 示例 | |---|---|---| | payments | HIGH | stripe refund/charge/payout、braintree、adyen、通用的 `refund()`/`charge()` | | data_destruction | HIGH | `DELETE FROM`、`DROP TABLE`、`shutil.rmtree`、`os.remove`、S3 `delete_object` | | deployment | HIGH | `subprocess.run(["kubectl", ...])`、terraform、helm、ansible | | access_control | HIGH | `put_user_policy`、`attach_role_policy`、`create_access_key`、IAM mutations | | communication | MEDIUM | `sendmail`、Twilio `messages.create`、Slack `chat.postMessage` | 规则可通过 JSON/YAML 配置进行扩展。请参阅 `actenon-scan init`。 ## 许可证 Apache-2.0。详见 [LICENSE](LICENSE)。 ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。安全披露:请参阅 [SECURITY.md](SECURITY.md)。
标签:AI安全, Chat Copilot, DLL 劫持, GitHub Actions, LNA, Python, SAST, 大语言模型, 无后门, 盲注攻击, 自动化payload嵌入, 自动笔记, 逆向工具, 静态代码扫描