golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用

Golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用

工具介绍

ChainJacking是一个用于查找Go语言直接GitHub依赖项是否容易受到RepoJacking攻击的工具。

readme cover image

系统要求

  • 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

使用示例

  1. 首先安装工具:
pip install chainjacking
  1. 然后运行扫描(使用你的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
  1. 查看输出结果,识别存在风险的依赖项

注意:请确保已设置好Go环境,并且有足够的权限访问GitHub API。


更多关于golang检测GitHub依赖链劫持攻击风险插件ChainJacking的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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

基本使用方法

  1. 在项目目录下运行:
chainjacking
  1. 指定Go模块路径扫描:
chainjacking -p github.com/yourorg/yourproject
  1. 输出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("未发现依赖链劫持风险")
	}
}

防范措施

  1. 使用go.sum文件:确保提交go.sum到版本控制,它记录了依赖的加密哈希值

  2. 定期更新依赖

go get -u ./...
go mod tidy
  1. 使用代理和校验
GOPROXY=https://proxy.golang.org,direct
GOSUMDB=sum.golang.org
  1. 审查依赖:定期检查项目依赖
go list -m all

高级用法

  1. 排除特定路径:
chainjacking --exclude github.com/some/package
  1. 设置超时时间:
chainjacking --timeout 30s
  1. 仅检查直接依赖:
chainjacking --direct-only

ChainJacking是保护Golang项目免受供应链攻击的重要工具,建议将其集成到CI/CD流程中,在每次构建时自动检查依赖安全。

回到顶部