Statik Kod Analizi ve Azure Devops Server Üzerinde Fortify Static Code Analyzer — Bölüm 1

Tolga Yıkılmaz
Devops Türkiye☁️ 🐧 🐳 ☸️
4 min readJun 24, 2019

Bir önceki yazımızda Fortify ile static code analizinin nasıl yapılacağından ve yapılmadığı durumlarda ufak bir kod satırı açığı ile ortaya çıkan büyük zararlarından bahsettik. Equifax bunlardan sadece bir tanesi ve ne yazık ki yalnız değil.

Peki son derece önemli olmasına rağmen bu tarama süreci yazılımcılar tarafından neden gereksiz görülüyor yada önemsenmiyor?

Birçok yazılımcı içinden “VAKİT” olarak cevaplıyor olabilir. O zaman canlı ortama taşıma yapıcak bir yazılımcı için Release süreci nasıl ilerliyor beraber bakalım

Feature branchinden kodu ana branch taşıma işlemleri için merge işlemleri çoğu zaman uzun vakit alabiliyor.Merge işlemlerinden sonra en büyük vakti derlenemeyen projeler yüzünden her iki ekibi uğraştıran projeler alıyor.Burda çoğu zaman geliştirme yapan yazılımcıya ihtiyaç duyuluyor. Güvenlik ekibi kodu taraması için önce projenin son halini alması , nuget/npm/maven dan paketler varsa bunları download edebilmesi ve kodu derleyebilmesi gerekiyor. Manual ilerliyen süreç dar vakitte epey can sıkıcı olabiliyor.

Burada yazılımcının referansımı lokalimdeki bir klasörden vereyim sonra düzeltirim bakışı ile hızlı verilen yanlış kararlarda sadece kendisinde derlenebilen projeler ortaya çıkartıyor.

Yazılımcı burada şu adımlara dikkat ediyor olması gerekiyor.

  • Lokal development ortamı ile sunucu source control arasında dosya farkı olmamalı ve tüm dosyaları source control eklemiş olmalı
  • Proje referansları kendi development ortamındaki klasörden farklı olmamalı. Örnek verecek olursak Oracle.DataAcccess.dll referansı Windows Assembly altından verilmemeli.Projenin herkeste derlenecek şekilde olmasını sağlamalı.

Birde bulgu çıkarsa kabus başlıyor. Tekrar feature branchine dön bulguyu çöz, merge yap, güvenlik ekibine son kodu indirmesine ve build edebilmesine yardım et ve herşey mutlu sonla biterse kodu paketle ve deploy et.Bunların hepsi taşıma işlemlerinde vakit alan bir süreç olarak karşımıza çıkıyor. Release günü taranmaya çalışılan paketler, zamanında yitişmeyen taramalar nedeniyle güvenlik ekipleri süreci yavaşlatan kişiler olarak görülüyor. Sonuç olarak vakti olmaması durumunda zafiyet ile beraber proda çıkmak için güvenlik ekiplerine baskı uygulanmaya başlanıyor. Ama asıl önemli olan detay atlanıyor

Bir kurumdaki herkes güvenlikten sorumludur

Bu kadar manuel ilerleyen süreçte CI/CD araçları hatalı referansları yada erişilemeyen paketleri önden yakalayarak işimizi kolaylaştırıyor olsa da güvenlik ekibi yinede burda yüzlerce proje arasında taranacak bir proje olarak sizi sırada bekletmesi gerekebiliyor. Her bir yazılımcı yada her bir uygulama için bir güvenlik taraması yapacak birini atamak mümkün gözükmüyor.

Burada imdadımıza yine devops süreçleri koşuyor. Azure Devops Server üzerinde Fortify build agentları kurarak build ve tarama işlemlerini sunucu üzerinden yaparak süreci otomize hale getirmek mümkün. Bu makalede bu süreci nasıl otomize hale getireceğimizden bahsediyor olacağız.

Azure Devops Server yada Tfs 2018 üzerinde mevcut CI larımızın sonuna fortify entegrasyonu yaparak her iki süreci birleştirebiliyoruz.

Tarama işlemleri için Fortify üzerinde bir application kaydı oluşturmanız gerekiyor.Source code üzerindeki her bir solutionınız bir applicationa denk geliyor. Applicationlar üzerindede versiyon oluşturuluyor. Fortify tarama sürecinde iki strateji güdebilirsiniz. Birincisi her bir CI sonucu oluşan tarama sonucunu Fortify projesinde bir versiyon altına atabilir ve hepsini burda biriktirebilirsiniz yada her bir CI için ayrı bir versiyon oluşturarak ayrıca upload edebilirsiniz. Bu örnekte tek bir versiyon üzerine upload ederek tarama işlemlerini tamamlamayı hedefliyoruz.

Fortify tarama işlemlerini yapmak için Azure Devops Marketplace üzerinden Micro Focus Fortify componentini kurmanız gerekmektedir.

Kurulum sonrasında Agent phase üzerinde Fortify extension tasklarını görebilirsiniz. Fortify Static Code Analyzer Assesment taskını CI ımızı ekleyerek tarama işlemleri configuration işlemlerine başlıyoruz.

Fortify analiz işlemleri için öncelikle agent çalışacağı sunucuya Fortify SCA yazılımının kurulması gerekiyor. Yazılımı kurarken lisans bilgilerini yazılım ile kurduğumuzdan burda ek olarak lisans dosyasını eklemedik ama mevcut lisansı ezerek bu CI daki lisans geçerli kılmak istiyorsanız burdan dosyayı yüklemelisiniz.Ek olarak Fortify rulepack en güncel halini Fortify portalinden indirip buna göre çalıştırmasını istiyorsanız Run Fortify Rulepack Update seçeneği seçili olmalıdır.Biz bu işi build agent sunucusu üzerinden kendimiz yöneteceğimizden bu senaryo için seçmiyoruz.Fortify Rulepack fortify firmasının yeni bulgular yayınlandıkça yazılıma entegre ederek analiz aşamasına kattığı kurallar bütünüdür

Fortify taraması build ve scan işlemleri olmak üzere iki ana gruba ayrılıyor. Build(translate) adımında analiz işlemleri için öncesinde fortify tarafından projenin build edilmesi gerekiyor.

Analiz edilecek proje pathini veriyoruz.build için ekstra bir parametreniz varsa bunları doldurup proje tipini seçiyoruz.Burda .Net ,Java gibi projeleri derleyebiliriz . Biz bu örnekte bir .Net projesini analiz edeceğiz.

Tarama kısmında önce tarama tipini belirtiyoruz. Local Scan seçeneğini seçerek tarama işlemlerini local daki agent üzerinde kurulu olan SCA üzerinde yapıyor olacağız. Diğer seçenek olan Cloud Scan ise cloud üzerinde bir tarama ortamınız var ise bunuda kullanabilirsiniz.

Tarama işlemleri sonrası sunucu üzerinde bir fpr dosyası oluşarak analiz işlemi tamamlanacaktır. Analiz sonucu oluşan dosyayı fortify SCA arayüzüne upload ederek analist ve yazılımcıların erişimine açabilirsiniz. Bundan sonraki süreçte artık bulgu sayısını ,bulgu tiplerini görebilir. Kategorilere bölerek bulguları adım adım inceleyebilir. Yorumlarınızı yazarak suppress edilmesini isteyebilirsiniz.

Basitçe tarama sürecimizi bu şekilde tamamlamış oluyoruz. Bundan sonraki yazımızda tarama sürecinin mutfağından ,birden fazla versiyon oluşturma, suppress süreçlerinden ve Deployment sürecinde fortify kontrolleri ile pipeline nasıl kesebiliriz konularını detaylandırıyor olacağız.

--

--