golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用
Golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用
工具介绍
ChainJacking是一个用于查找Go语言直接GitHub依赖项是否容易受到RepoJacking攻击的工具。
系统要求
- Python 3.6+ 和 pip
- Go及其二进制文件 >= 1.13
- GitHub token (用于API查询)
- 这个token仅用于读取目的,不需要任何权限
安装方法
pip install chainjacking
在CI工作流中使用
ChainJacking可以轻松集成到现代CI工作流中,用于测试新的代码贡献。
GitHub Actions示例配置
name: Pull Request
on:
pull_request
jobs:
build:
name: Run Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: ChainJacking tool test
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python -m pip install -q chainjacking
python -m chainjacking -gt $GITHUB_TOKEN
命令行界面(CLI)
ChainJacking模块可以作为CLI工具运行:
python -m chainjacking
CLI参数
-gt <token>
- GitHub访问token,用于在GitHub API上运行查询(必需)-p <path>
- 要扫描的路径(默认=当前目录)-v
- 详细输出模式-url <url>
- 扫描一个或多个GitHub URL-f <path>
- 从文件中扫描多个GitHub URL,每行一个URL
示例: 扫描Go项目
导航到Go项目的目录,然后运行:
python -m chainjacking -gt $GH_TOKEN
使用示例
- 首先安装工具:
pip install chainjacking
- 然后运行扫描(使用你的GitHub token):
# 扫描当前目录的Go项目
python -m chainjacking -gt your_github_token
# 扫描指定路径的Go项目
python -m chainjacking -gt your_github_token -p /path/to/your/go/project
# 扫描单个GitHub URL
python -m chainjacking -gt your_github_token -url https://github.com/user/repo
# 从文件扫描多个GitHub URL
python -m chainjacking -gt your_github_token -f urls.txt
- 查看输出结果,识别存在风险的依赖项
注意:请确保已设置好Go环境,并且有足够的权限访问GitHub API。
更多关于golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用ChainJacking检测Golang项目的GitHub依赖链劫持风险
ChainJacking是一个用于检测Golang项目中依赖链劫持(Dependency Chain Hijacking)风险的工具,它能够识别项目中可能被劫持的依赖关系。
什么是依赖链劫持
依赖链劫持是指攻击者通过控制项目依赖的某个上游包(特别是间接依赖),将恶意代码注入到项目中。这种情况在Golang中尤其值得关注,因为Go模块会直接从代码托管平台(如GitHub)获取依赖。
安装ChainJacking
go install github.com/Checkmarx/chainjacking@latest
基本使用方法
- 在项目目录下运行:
chainjacking
- 指定Go模块路径扫描:
chainjacking -p github.com/yourorg/yourproject
- 输出JSON格式结果:
chainjacking -o json
示例代码:集成到CI/CD流程
以下是一个Golang程序示例,展示了如何以编程方式使用ChainJacking:
package main
import (
"encoding/json"
"fmt"
"os"
"os/exec"
)
type ChainJackingResult struct {
Vulnerabilities []Vulnerability `json:"vulnerabilities"`
}
type Vulnerability struct {
Package string `json:"package"`
Type string `json:"type"`
Description string `json:"description"`
Severity string `json:"severity"`
Remediation string `json:"remediation"`
}
func main() {
// 运行chainjacking并获取JSON输出
cmd := exec.Command("chainjacking", "-o", "json")
output, err := cmd.Output()
if err != nil {
fmt.Printf("执行chainjacking失败: %v\n", err)
os.Exit(1)
}
// 解析结果
var result ChainJackingResult
if err := json.Unmarshal(output, &result); err != nil {
fmt.Printf("解析chainjacking结果失败: %v\n", err)
os.Exit(1)
}
// 处理结果
if len(result.Vulnerabilities) > 0 {
fmt.Println("发现依赖链劫持风险:")
for _, vuln := range result.Vulnerabilities {
fmt.Printf("包: %s\n类型: %s\n严重性: %s\n描述: %s\n修复建议: %s\n\n",
vuln.Package, vuln.Type, vuln.Severity, vuln.Description, vuln.Remediation)
}
os.Exit(1) // CI流程中应该失败
} else {
fmt.Println("未发现依赖链劫持风险")
}
}
防范措施
-
使用go.sum文件:确保提交go.sum到版本控制,它记录了依赖的加密哈希值
-
定期更新依赖:
go get -u ./...
go mod tidy
- 使用代理和校验:
GOPROXY=https://proxy.golang.org,direct
GOSUMDB=sum.golang.org
- 审查依赖:定期检查项目依赖
go list -m all
高级用法
- 排除特定路径:
chainjacking --exclude github.com/some/package
- 设置超时时间:
chainjacking --timeout 30s
- 仅检查直接依赖:
chainjacking --direct-only
ChainJacking是保护Golang项目免受供应链攻击的重要工具,建议将其集成到CI/CD流程中,在每次构建时自动检查依赖安全。