Pentesting CI/CD Methodology
Last updated
Last updated
VCS, Sürüm Kontrol Sistemi anlamına gelir ve bu sistemler geliştiricilerin kaynak kodlarını yönetmelerine olanak tanır. En yaygın olanı git olup, genellikle şirketlerin aşağıdaki platformlardan birini kullanarak kullandığını göreceksiniz:
Github
Gitlab
Bitbucket
Gitea
Bulut sağlayıcıları (kendi VCS platformlarını sunarlar)
Pipelines, geliştiricilere kodun otomatik olarak yürütülmesini (derleme, test, dağıtma vb. amaçlarla) belirli eylemler gerçekleştikten sonra sağlar: Bir itme, bir PR, cron... Bunlar, geliştirmeden üretime kadar olan tüm adımları otomatikleştirmek için son derece kullanışlıdır.
Ancak, bu sistemlerin bir yerde yürütülmesi ve genellikle kod dağıtmak için ayrıcalıklı kimlik bilgilerine sahip olması gerekir.
Bazı VCS platformlarının bu bölüm için pipeline'lar oluşturmaya izin vermesine rağmen, sadece kaynak kodun kontrolüne yönelik potansiyel saldırıları analiz edeceğiz.
Projenizin kaynak kodunu içeren platformlar, hassas bilgiler içerir ve insanlar bu platform içinde verilen izinlere çok dikkat etmelidir. Saldırganın istismar edebileceği bazı yaygın sorunlar şunlardır:
Sızıntılar: Kodunuz, taahhütlerde sızıntılar içeriyorsa ve saldırgan repo'ya erişebiliyorsa (genel veya erişimi olduğu için), sızıntıları keşfedebilir.
Erişim: Bir saldırgan, VCS platformu içindeki bir hesaba erişebilirse, daha fazla görünürlük ve izin elde edebilir.
Kayıt: Bazı platformlar yalnızca harici kullanıcıların hesap oluşturmasına izin verir.
SSO: Bazı platformlar kullanıcıların kaydolmasına izin vermez, ancak geçerli bir SSO ile herkesin erişmesine izin verir (bu nedenle bir saldırgan örneğin github hesabını kullanabilir).
Kimlik bilgileri: Kullanıcıların bir şekilde bir repo'ya erişmek için çalabileceği kullanıcı adı + şifre, kişisel belirteçler, ssh anahtarları, Oauth belirteçleri, çerezler... birkaç tür belirteç vardır.
Webhooks: VCS platformları, webhooks oluşturmayı sağlar. Eğer bunlar görünmez sırlarla korunmuyorsa, bir saldırgan bunları istismar edebilir.
Eğer bir sır yoksa, saldırgan üçüncü taraf platformunun webhook'unu istismar edebilir
Eğer sır URL'de ise, aynı şey olur ve saldırgan ayrıca sırra sahip olur
Kodun tehlikeye girmesi: Kötü niyetli bir aktörün repo'lar üzerinde bir tür yazma erişimi varsa, zararlı kod enjekte etmeye çalışabilir. Başarılı olmak için genellikle dal korumalarını atlatması gerekebilir. Bu eylemler farklı hedeflerle gerçekleştirilebilir:
Üretimi tehlikeye atmak için ana dalı tehlikeye atmak.
Geliştiricilerin makinelerini tehlikeye atmak için ana (veya diğer dalları) tehlikeye atmak (genellikle test, terraform veya diğer şeyleri repo içinde makinelerinde çalıştırırlar).
Pipeline'ı tehlikeye atmak (bir sonraki bölüme bakın)
Bir pipeline'ı tanımlamanın en yaygın yolu, pipeline'ın oluşturulduğu repo'da barındırılan bir CI yapılandırma dosyası kullanmaktır. Bu dosya, yürütülen işlerin sırasını, akışı etkileyen koşulları ve yapılandırma dosyasına karşı belirtilen komutları tanımlar. Bu dosyalar genellikle tutarlı bir ad ve formata sahiptir, örneğin — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI) ve .github/workflows altında bulunan GitHub Actions YAML dosyaları. Pipeline işlemi tetiklendiğinde, pipeline işi seçilen kaynaktan (örneğin taahhüt / dal) kodu çeker ve bu kod üzerinde CI yapılandırma dosyasında belirtilen komutları çalıştırır.
Bu nedenle, saldırganın nihai hedefi, bu yapılandırma dosyalarını veya yürütülen komutları bir şekilde tehlikeye atmaktır.
Zehirli Pipeline Yürütme (PPE) yolu, bir SCM deposundaki izinleri istismar ederek bir CI pipeline'ı manipüle etmek ve zararlı komutları yürütmektir. Gerekli izinlere sahip kullanıcılar, CI yapılandırma dosyalarını veya pipeline işi tarafından kullanılan diğer dosyaları değiştirerek zararlı komutları içerecek şekilde pipeline'ı "zehirler". Bu, bu zararlı komutların yürütülmesine yol açar.
Bir saldırganın PPE saldırısı gerçekleştirirken başarılı olabilmesi için şunlara ihtiyacı vardır:
Genellikle bir itme veya bir pull isteği gerçekleştirildi
Chain-bench, yeni bir CIS Yazılım Tedarik Zinciri benchmark üzerinde güvenlik uyumluluğunu denetlemek için açık kaynaklı bir araçtır. Denetleme, kod zamanından dağıtım zamanına kadar olan tüm SDLC sürecine odaklanır ve riskleri ortaya çıkarabilir.
Cider'a göre en iyi 10 CI/CD riski hakkında ilginç bir makaleyi kontrol edin: https://www.cidersecurity.io/top-10-cicd-security-risks/
Yerel olarak çalıştırabileceğiniz her platformda, onu istediğiniz gibi yapılandırarak test etmek için nasıl başlatacağınızı bulacaksınız.
Gitea + Jenkins laboratuvarı: https://github.com/cider-security-research/cicd-goat
Checkov: Checkov, altyapı olarak kod analizi aracıdır.