
أداة متعددة المنصات للكشف عن الثغرات في 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)يمكن تضمين تراجان كمكتبة Go للفحص الأمني البرمجي لـ CI/CD. توفر حزمة pkg/lib واجهة SDK عامة تغلف سجل المنصات الداخلي لتراجان ومحرك الكشف والماسح في واجهة برمجية واحدة عالية المستوى.
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 (مطلوب)
Token string // رمز مصادقة API
BaseURL string // عنوان URL أساسي مخصص للنسخ المستضافة ذاتيًا
Org string // اسم المؤسسة/المالك
Repo string // اسم المستودع (فارغ = فحص جميع مستودعات المؤسسة)
Concurrency int // العمال المتوازيون للكشف (الافتراضي: 10)
Timeout time.Duration // المدة القصوى للفحص (الافتراضي: 5 دقائق)
LocalPath string // مسار نظام الملفات المحلي (ملف أو مجلد) للفحص دون اتصال
}
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,
})
// تحويل result.Findings → انبعاثات مخاطر capmodel
# فحص مستودع GitHub
export GH_TOKEN=ghp_your_token
trajan github scan --repo owner/repo
# فحص مؤسسة GitHub
trajan github scan --org myorg --concurrency 20
# فحص مشاريع GitLab
export GITLAB_TOKEN=glpat_your_token
trajan gitlab scan --group mygroup
# فحص Azure DevOps
export AZURE_DEVOPS_PAT=your_pat
trajan ado scan --org myorg --repo myproject/myrepo
# فحص دون اتصال: فحص ملفات سير العمل المحلية دون وصول API
trajan github scan --path ./my-repo
trajan github scan --path ./.github/workflows/ci.yml
# إخراج JSON
trajan github scan --repo owner/repo -o json > results.json
للحصول على استخدام مفصل وشروحات الكشف ودراسات الهجوم، راجع الويكي.
يتم تجميع تراجان أيضًا إلى ملف ثنائي WebAssembly يعمل بالكامل في المتصفح كملف HTML واحد. يستخدم نفس محرك الكشف وإضافات الهجوم ومنطق التعداد مثل CLI، ولكن يتم تجميعه إلى WASM. يتيح الإصدار الويب من تراجان تسليمًا منخفض الاحتكاك إلى البيئات المستهدفة كجزء من التقييم.
make wasm # بناء browser/trajan.wasm
make wasm-dist # بناء 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 و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 | فحص فقط | - | - |