Statik Kaynak Kod Analizi
30 Temmuz 2008Yazılım geliştirilirken her zaman en önemli unsur yazılımın yapması gereken işi bir an önce yapmasını sağlamak olmuştur. Sağlam, dirençli, dayanıklı, güvenilir ve güvenli yazılımlar geliştirmek ikinci plana atılmaktadır. Bu şekilde yazılım bir an önce faal duruma geçer ve maaliyetini bir an önce sahibine kazandırmaya başlar.
Günümüzde geliştirilmekte olan yazılımların büyük çoğunluğu çevrimiçi çalışmaktadır. Her ne kadar güvenlik duvarı, saldırı tespit sistemi, saldırı önleme sistemi, uygulama katmanı güvenlik duvarı gibi birçok güvenlik önlemi alsak da, çevrimiçi çalışan yazılımımıza erişmek için açık kapılar bırakmak zorundayız. Bu nedenle yazılımın kendi kendini koruması günümüzdeki olmazsa olmaz ihtiyaçlardandır. Aksi taktirde yazılımımız yapması gereken işi tam olarak yaparken, diğer yandan hiç yapmaması gereken işleri de yapabilir duruma gelebilmektedir. Bu nedenle yazılımların güvenlik ön planda tutularak geliştirilmesi önem kazanmaktadır.
Bir yazılımın güvenli olup olmadığı birkaç yöntemle test edilebilir. Bilindik numaralar ile çalışma anında kandırılmaya çalışılabilir (penetrasyon testi). Bu yöntem ile bir miktar güvenlik açığı tespit edilerek çözülebilir. Ancak tüm güvenlik açıklarının bu yolla tespit edilmesi mümkün değildir. Peki ya kolayca yeniden oluşturulamayan bir durumla karşılaşıldığında ne olacak? Samanlıkta iğne arar gibi ne olduğunu tam olarak algılayamadığımız sorunun kaynağını aramaya çalışırız. Bu aşamada statik kaynak kod analiz yöntemi kullanılmaktadır.
Statik kaynak kod analizi gözle kod üzerinden geçerek yapılabilir. Ancak bu çok uzun ve zahmetli bir süreç. İşin içinde insan faktörü de olacağı için zamanla yorulan göz ve beyin bir miktar hatayı kaçırmaya başlayacaktır. Statik kaynak kod analizi ile verinin izlediği yol boyunca ne tür kontrollerden geçirildiği, güvenlik açısından sakıncalı bulunan işlevlerin kullanılıp kullanılmadığı, threadler arası race condition gibi durumların söz konusu olup olmadığı, … gibi birçok açıdan incelenebilmektedir.
Statik kaynak kod analizi yapan araçlar bulunmaktadır. Örneğin açık kaynak kodlu ve özgür bir yazılım olan findbugs Java uygulamalarındaki olası hatalı durumları tespit etmekte kullanılmaktadır. Doğrudan java bytecode düzeyinde çalışmaktadır. Güzel sonuçlar üretmekle beraber, yanlış bulguları da oldukça fazladır. Statik Kaynak Kod Analizi teknolojisinin oldukça başlarında yer alan bir araç diyebiliriz.
Statik Kaynak Kod Analizi konusunda birçok özgür ve ticari yazılım olan araç var. Hepsinden tek tek bahsetmem mümkün değil. Ancak WikiPedia‘dan oldukça kapsamlı bir liste alınabiliyor. Benim burada bahsetmek istediğim araç, en iyi ve doğru sonuçları üreten, en yakın rakibinden bile 6 – 12 ay kadar önde giden, yoğun kullanılan programlama dillerinin hemen hemen hepsini de destekleyen, statik kaynak kod analizi sektörünün lideri Fortify‘dır.
Fortify ile ilk tanıştığımda kendi geliştirdiğim koddaki bulgularını, önerilerini görünce kendisine hayran oldum. Beni çok şaşırttı ve etkiledi. Statik kaynak kod analizi için kullanmış olduğum uygulamalar arasında en az hatalı ve en kapsamlı sonuç üreten araç Fortify Source Code Analyzer’dır (Fortify SCA). Tespit edilen hata örneklerle beraber ayrıntılı bir şekilde açıklanmakta, oldukça ayrıntılı bir çözümleme yöntemi de tarif edilmektedir. AuditWorkbench ile kodun sorunlu satırları üzerinde hızlı ve kolay gezinme imkanı sağlamaktadır. Kaynak kodu güvenlik, sağlamlık, kod kalitesi gibi değişik açılardan incelemektedir. Oldukça ayrıntılı geliştirici raporu sunabilmektedir. Developer lisansı ile alındığında Fortify Manager adındaki ürün de Fortify tarafından sağlanmaktadır. Fortify Manager ile projelerinizin trendlerini izleyebilir, hangi projelerinizde ne tür hatalar tespit edilmiş, hangi geliştiriciniz ne tür hatalar yapmış gibi yönetim kadrosunun karar almasını kolaylaştıracak raporları kolayca sunabilmektedir. Gecelik build’lara ant entegrasyonu sayesinde müdahil olarak düzenli olarak projelerinizin Fortify ile taranması sağlanabilmektedir. Fortify SCA Java, tüm .NET dilleri, ASP.NET, Classic ASP, VB script, VB6, PHP, C, C++, Javascript, PL/SQL, T-SQL, COBOL, XML ve PROPERTIES dosyası olan yapılandırma dosyalarını inceleyebilmektedir. Hem de lisansının aldığı andan itibaren tüm bu dillerdeki kaynak kodlar Windows, Linux, Solaris, AIX, HP-UX platformlarında statik kaynak kod analizine tabi tutulabilmektedir.
Fortify’ın Türkiye’deki temsilcisi Pro-G‘dir. Fortify SCA aracı kullanılarak, dış kaynak kullanarak geliştirtmiş olduğunuz yazılımların teslimatındaki kabul testleri kriteri olarak veya kendi öz yazılımlarınızın kullanıma geçmeden önce kaynak kod analizini yaptırmak isterseniz Türkiye’de Pro-G ile görüşmeniz gerekecek. Yoğun bir şekilde yazılım geliştiriyorsanız Fortify’a sahip olmak maddi açıdan daha uygun olabilir. Fortify’a sahip olmak için yine Pro-G ile görüşebilirsiniz.
Etiketler: analiz, analysis, findbugs, fortify, kaynak kod, kaynak kod analizi, race condition, source code, source code analysis, static, thread, wikipedia