如何更新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
相关产品推荐
相关产品推荐

