
Guardプラットフォーム向けのセキュリティケイパビリティを構築するための共有Go SDK。
pkg/capability - ケイパビリティインターフェースセキュリティスキャナが実装する標準化されたインターフェースを定義します。
型:
// Target - ケイパビリティがスキャンする対象
type Target struct {
Type TargetType // domain, ip, port, url, cloud_resource
Value string // ターゲットの値
Meta map[string]string // 追加のコンテキスト
}
// Finding - ケイパビリティが発見するもの
type Finding struct {
Type FindingType // asset, risk, attribute
Severity Severity // info, low, medium, high, critical
Data map[string]any // 柔軟なペイロード
}
// Capability - 実装するインターフェース
type Capability interface {
Name() string
Run(ctx context.Context, target Target) ([]Finding, error)
}
実装例:
type SubdomainScanner struct{}
func (s *SubdomainScanner) Name() string {
return "subdomain-scanner"
}
func (s *SubdomainScanner) Run(ctx context.Context, target capability.Target) ([]capability.Finding, error) {
if target.Type != capability.TargetDomain {
return nil, fmt.Errorf("expected domain, got %s", target.Type)
}
// Scan logic here...
return []capability.Finding{
{
Type: capability.FindingAsset,
Data: map[string]any{
"dns": "found.example.com",
"class": "domain",
},
},
}, nil
}
pkg/formatter - 出力フォーマットスキャン結果をレンダリングするためのマルチフォーマット出力システム。
サポートされるフォーマット:
基本的な使い方:
import "github.com/praetorian-inc/capability-sdk/pkg/formatter"
// Create a formatter
f, err := formatter.New(formatter.Config{
Format: formatter.FormatJSON,
Writer: os.Stdout,
Pretty: true,
})
if err != nil {
return err
}
defer f.Close()
// Format findings
f.Format(ctx, formatter.Finding{
ID: "vuln-001",
Title: "Security Issue",
Severity: formatter.SeverityHigh,
})
// Complete with summary
f.Complete(ctx, formatter.Summary{TotalFindings: 1, HighCount: 1})
ケイパビリティのFindingの変換:
import (
"github.com/praetorian-inc/capability-sdk/pkg/capability"
"github.com/praetorian-inc/capability-sdk/pkg/formatter"
)
// Run capability
findings, err := scanner.Run(ctx, target)
// Convert and format for CLI output
for _, cf := range findings {
ff := formatter.FromCapabilityFinding(cf)
f.Format(ctx, ff)
}
マルチ出力 (TeeFormatter):
terminal, _ := formatter.New(formatter.Config{Format: formatter.FormatTerminal, Writer: os.Stdout})
jsonFile, _ := formatter.New(formatter.Config{Format: formatter.FormatJSON, Writer: file})
tee, _ := formatter.NewTee(terminal, jsonFile)
tee.Format(ctx, finding) // Writes to both
並行送信 (Aggregator):
agg := formatter.NewAggregator(f, 100) // buffer size 100
// From multiple goroutines
go func() { agg.Submit(ctx, finding1) }()
go func() { agg.Submit(ctx, finding2) }()
agg.Close() // Wait for all writes
pkg/clisurface - CLIドキュメントドリフトゲートcobraコマンドツリーを走査し、そこから構築されたドキュメント成果物を生成、スプライス、チェックするため、コミットされたドキュメントがバイナリから黙って乖離することがなくなります。clisurface.NewでDocsを構築し、Docs.Writeで再生成、Docs.CheckArtifactsとDocs.LintRepoでコミットされたファイル、散文、GoコメントがCLIと一致しなくなったときにCIを失敗させます。完全なAPIについてはgo doc ./pkg/clisurfaceを参照してください。
┌─────────────────────────────────────────────────────────────────────┐
│ STANDALONE TOOL │
│ Implements: capability.Capability │
│ Produces: []capability.Finding │
└────────────────────────────┬────────────────────────────────────────┘
│
┌──────────────┴──────────────┐
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────────-────────┐
│ CLI OUTPUT PATH │ │ CHARIOT INTEGRATION PATH │
│ │ │ │
│ capability.Finding │ │ capability.Finding │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ formatter.Finding │ │ Chariot Adapter (in chariot repo) │
│ (FromCapabilityFinding)│ │ │ │
│ │ │ │ ▼ │
│ ▼ │ │ Tabularium Model (Asset/Risk/Attr) │
│ Terminal/JSON/SARIF │ │ │ │
│ │ │ ▼ │
│ stdout/file │ │ job.Send() → Storage │
└─────────────────────────┘ └───────────────────────────────-──────┘
git_repoターゲット型が必要"pkg/capability/target.goに追加:
TargetGitRepo TargetType = "git_repo"
Valid()メソッドを更新relationship Finding型が必要"pkg/capability/finding.goに追加pkg/formatter/capability_converter.goのコンバータを更新diocletian - クラウドセキュリティスキャナApache License 2.0。LICENSEを参照してください。
ライセンスはリポジトリルートに一度だけ記載します。ファイルごとの著作権表示やライセンスヘッダーを追加しないでください — それらを含む兄弟リポジトリからコードを移植する場合も同様です。ルートのLICENSEが正式な表明であり、すべてのファイルでそれを繰り返す必要はありません。