
पाइपलाइन कॉन्फ़िगरेशन में सुरक्षा कमजोरियों की पहचान करने के लिए एक बहु-प्लेटफ़ॉर्म CI/CD भेद्यता पहचान और आक्रमण स्वचालन उपकरण।
ट्राजन CI/CD पाइपलाइनों में सुरक्षा कमजोरियों को स्कैन करता है जिनका उपयोग हमलावर सॉफ्टवेयर आपूर्ति श्रृंखलाओं से समझौता करने के लिए करते हैं। यह GitHub Actions, GitLab CI, Azure DevOps, Jenkins और JFrog का समर्थन करता है।
ट्राजन वर्कफ़्लो YAML फ़ाइलों को पार्स करता है, निर्भरता ग्राफ़ बनाता है, पहचान प्लगइन्स चलाता है, और अंतर्निहित हमला क्षमताओं के माध्यम से शोषण क्षमता को मान्य करता है।
[!NOTE] ट्राजन सक्रिय विकास के अंतर्गत है। कुछ सुविधाएँ अधूरी हो सकती हैं और खुरदुरे किनारों की उम्मीद है। यदि आपको समस्याएँ आती हैं, तो कृपया एक खोलें।
पूर्व-निर्मित बाइनरी रिलीज़ पृष्ठ पर उपलब्ध हैं।
go install github.com/praetorian-inc/trajan/cmd/trajan@latest
या स्रोत से निर्माण करें:
git clone https://github.com/praetorian-inc/trajan.git
cd trajan && make build
repo दायरे के साथ (निजी रिपॉजिटरी के लिए) या public_repo दायरे के साथ (केवल सार्वजनिक रिपॉजिटरी के लिए)pkg/lib)ट्राजन को प्रोग्रामेटिक CI/CD सुरक्षा स्कैनिंग के लिए Go लाइब्रेरी के रूप में एम्बेड किया जा सकता है। pkg/lib पैकेज एक सार्वजनिक SDK प्रदान करता है जो ट्राजन के आंतरिक प्लेटफ़ॉर्म रजिस्ट्री, पहचान इंजन और स्कैनर को एक एकल उच्च-स्तरीय API में लपेटता है।
import "github.com/praetorian-inc/trajan/pkg/lib"
result, err := lib.Scan(ctx, lib.ScanConfig{
Platform: "github",
Token: os.Getenv("GH_TOKEN"),
Org: "myorg",
Repo: "myrepo",
Concurrency: 10,
Timeout: 5 * time.Minute,
})
if err != nil {
log.Fatal(err)
}
for _, f := range result.Findings {
fmt.Printf("[%s] %s in %s: %s\n", f.Severity, f.Type, f.WorkflowFile, f.Evidence)
}
type ScanConfig struct {
Platform string // CI/CD platform (required)
Token string // API authentication token
BaseURL string // Custom base URL for self-hosted instances
Org string // Organization/owner name
Repo string // Repository name (empty = scan all org repos)
Concurrency int // Parallel detection workers (default: 10)
Timeout time.Duration // Max scan duration (default: 5m)
LocalPath string // Local filesystem path (file or dir) for offline scan
}
type ScanResult struct {
Findings []detections.Finding // पाई गई सुरक्षा कमजोरियाँ
Workflows []platforms.Workflow // खोजी गई CI/CD वर्कफ़्लो फ़ाइलें
Errors []error // स्कैनिंग के दौरान गैर-घातक त्रुटियाँ
SkippedDetections []string // LocalPath मोड में छोड़े गए पहचान नाम (केवल API); API-मोड स्कैन में हमेशा खाली
}
SDK का उपयोग Chariot आक्रमण सतह प्रबंधन प्लेटफ़ॉर्म द्वारा CI/CD सुरक्षा स्कैन को एक क्षमता के रूप में चलाने के लिए किया जाता है:
import trajanlib "github.com/praetorian-inc/trajan/pkg/lib"
result, err := trajanlib.Scan(ctx, trajanlib.ScanConfig{
Platform: platformName,
Token: token,
Org: repo.Org,
Repo: repo.Name,
})
// Convert result.Findings → capmodel.Risk emissions
# Scan a GitHub repo
export GH_TOKEN=ghp_your_token
trajan github scan --repo owner/repo
# Scan a GitHub org
trajan github scan --org myorg --concurrency 20
# Scan GitLab projects
export GITLAB_TOKEN=glpat_your_token
trajan gitlab scan --group mygroup
# Scan Azure DevOps
export AZURE_DEVOPS_PAT=your_pat
trajan ado scan --org myorg --repo myproject/myrepo
# Offline scan: scan local workflow files without API access
trajan github scan --path ./my-repo
trajan github scan --path ./.github/workflows/ci.yml
# JSON output
trajan github scan --repo owner/repo -o json > results.json
विस्तृत उपयोग, पहचान स्पष्टीकरण और आक्रमण वॉकथ्रू के लिए, Wiki देखें।
ट्राजन एक WebAssembly बाइनरी में भी संकलित होता है जो पूरी तरह से ब्राउज़र में एक एकल HTML फ़ाइल के रूप में चलता है। यह CLI के समान पहचान इंजन, हमला प्लगइन्स और गणना तर्क का उपयोग करता है, बस WASM में संकलित होता है। ट्राजन का वेब संस्करण मूल्यांकन के भाग के रूप में लक्ष्य वातावरण में कम-घर्षण वितरण को सक्षम बनाता है।
make wasm # build browser/trajan.wasm
make wasm-dist # build self-contained trajan-standalone.html
graph TD
subgraph CLI
CMD[Cobra Commands]
end
subgraph Platforms
GH[GitHub]
GL[GitLab]
ADO[Azure DevOps]
JK[Jenkins]
JF[JFrog]
end
CMD --> GH & GL & ADO & JK & JF
subgraph SF[Scan Flow]
API[Platform API] --> |fetch workflows| YAML[Workflow YAML]
YAML --> P
subgraph P[Parser]
direction LR
GHP[GitHub] ~~~ GLP[GitLab] ~~~ ADP[Azure] ~~~ JKP[Jenkins]
end
P --> NW[Normalized Workflow]
NW --> GB[Graph Builder]
GB --> Graph[Workflow → Job → Step Graph]
end
subgraph AE[Analysis Engine]
direction LR
TT[Taint Tracker] --> Tagged[Tagged Graph]
Tagged --> DP[Detection Plugins]
DP --> GA[Gate Analysis]
GA --> Findings
end
subgraph AF[Attack Flow]
direction LR
AP[Attack Plugins] --> |artifacts| Session[Session Tracker]
Session --> Cleanup
end
Graph --> AE
AE --> AF
अतिरिक्त CI/CD प्लेटफ़ॉर्म समर्थन सक्रिय विकास में है:
विकास दिशानिर्देशों, प्लगइन लेखन और परियोजना संरचना के लिए CONTRIBUTING.md देखें।
Gato, Glato, Adnan Khan द्वारा Gato-X, और GitHub Security Lab के शोध पर निर्मित।
Apache 2.0. LICENSE देखें।
| फ़ंक्शन | विवरण |
|---|
lib.Scan(ctx, cfg) | पूर्ण स्कैन: प्लेटफ़ॉर्म आरंभीकरण → वर्कफ़्लो खोज → पहचान निष्पादन |
lib.GetPlatform(name) | नाम से प्लेटफ़ॉर्म एडेप्टर प्राप्त करें (github, gitlab, azuredevops, bitbucket, jenkins, jfrog) |
lib.ListPlatforms() | सभी पंजीकृत प्लेटफ़ॉर्म नामों की सूची बनाएं |
lib.GetDetections(platform) | किसी विशिष्ट प्लेटफ़ॉर्म के लिए पहचान प्लगइन्स प्राप्त करें |
lib.GetDetectionsForPlatform(platform) | प्लेटफ़ॉर्म-विशिष्ट + क्रॉस-प्लेटफ़ॉर्म पहचान प्राप्त करें |
lib.ListDetectionPlatforms() | पंजीकृत पहचान वाले प्लेटफ़ॉर्मों की सूची बनाएं |
| प्लेटफ़ॉर्म | पहचान | हमले | गणना |
|---|
| GitHub Actions | 11 | 9 | टोकन, रिपॉजिटरी, रहस्य |
| GitLab CI | 8 | 3 | टोकन, प्रोजेक्ट, समूह, रहस्य, रनर, शाखा-सुरक्षा |
| Azure DevOps | 6 | 9 | टोकन, प्रोजेक्ट, रिपॉजिटरी, पाइपलाइन, कनेक्शन, एजेंट-पूल, उपयोगकर्ता, समूह, और अधिक |
| Jenkins | 7 | 3 | पहुँच, कार्य, नोड, प्लगइन |
| JFrog | केवल-स्कैन | - | - |