You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新GitHub Actions CI 检测Python项目含恶意Unicode的木马代码提交

针对Trojan Source类不可见Unicode恶意代码的CI流水线配置方案

核心检测逻辑

你需要在CI流水线中添加两类不可见风险字符的扫描能力,覆盖Trojan Source白皮书中提到的所有攻击变体:

  • 扫描Unicode双向控制字符:这类字符是实现代码视觉误导的核心载体,包括U+202AU+202E、U+2066U+2069范围内的所有控制符
  • 扫描同形异义Unicode字符:这类字符视觉上和拉丁字母/数字完全一致,但实际编码不同,可被用来定义重名恶意函数

完整GitHub Actions配置

在你的项目仓库中创建 .github/workflows/trojan-source-detect.yml 文件,内容如下:

name: 检测不可见Unicode恶意代码
on:
  pull_request:
    paths:
      - '**.py' # 仅扫描Python代码文件

jobs:
  trojan-source-check:
    runs-on: ubuntu-latest
    steps:
      - name: 检出PR代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 扫描风险Unicode字符
        id: scan
        run: |
          # 定义风险字符正则
          BIDI_PATTERN=$'[\u202a-\u202e\u2066-\u2069]'
          HOMOGLYPH_PATTERN=$'[\u0430\u0435\u043e\u0440\u0441\u0443\u0445\u044c\u044f]' # 常见同形西里尔字母,可按需扩展
          # 递归扫描所有Python文件
          BIDI_MATCH=$(grep -r "$BIDI_PATTERN" --include="*.py" . || true)
          HOMOGLYPH_MATCH=$(grep -r "$HOMOGLYPH_PATTERN" --include="*.py" . || true)
          
          if [ -n "$BIDI_MATCH" ] || [ -n "$HOMOGLYPH_MATCH" ]; then
            echo "detected_risk=true" >> $GITHUB_OUTPUT
            echo "risk_details=检测到可疑不可见Unicode字符:%0A${BIDI_MATCH}%0A${HOMOGLYPH_MATCH}" >> $GITHUB_OUTPUT
            # 如需直接阻断PR合并,打开下面的注释
            # exit 1
          fi

      - name: 给PR添加风险提醒评论
        if: steps.scan.outputs.detected_risk == 'true'
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: `⚠️ 检测到本次PR提交的Python代码中存在可疑的不可见Unicode字符,可能是Trojan Source类恶意攻击,请人工核验所有代码变更后再合并。\n风险详情:\n\`\`\`\n${{ steps.scan.outputs.risk_details }}\n\`\`\``
            })

额外增强配置

  • 你可以根据项目实际情况扩展同形异义字符的检测规则,覆盖更多语种的混淆字符
  • 可以新增Python AST校验步骤,将提交代码解析为抽象语法树后对比视觉呈现的逻辑,拦截更隐蔽的注释注入、重名函数攻击
  • 如项目中存在合法的特殊Unicode字符使用场景(比如多语言文档字符串),可以在扫描步骤中添加路径或字符白名单,避免误判

内容的提问来源于stack exchange,提问作者Michael Altfield

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:27:01