Yazılım Güvenliği Nedir?

Yazılım geliştirme işini bu işin mektebinde okuyanlar, sistem tasarımı ve yazılım mühendisliği derslerinden çok iyi bilirler. Her işin bir usülü ve yapılış şekli vardır. Yazılımcılar da bir yazılımı geliştirirken, yazılımı müşterinin isteklerini karşılamak üzere olgunlaştırırken, ister istemez izledikleri bir takım aşamalar vardır. Genelde izlenilen aşamalar şunlardır:

  1. Analiz

  2. Tasarım

  3. Kodlama

  4. Test

  5. Pilot Bölge Kurulumu

  6. Yazılımın Yaygınlaştırılması

  7. Bakım ve Sürüm Yönetimi

Her ne kadar teori, pratik hayatla örtüşmese de  yazılımlar bir şekilde biter.

Ayrıca bu işi alaylı bir şekilde yapan kişiler de hiç azımsanamayacak kadar çoktur. Yazılımcıların büyük bir çoğunluğu yazılım geliştirirken, bir saldırgan tarafından yazılımım nasıl hacklenir diye bir düşünceye ve bilgiye ne yazikki sahip değildir. Yazılımcı sadece işi bitirmeye odaklanmıştır. Saldırgan da bunu çok iyi bildiği için mutlaka açık bulacağı ümidiyle saldırılarını büyük bir iştahla yapar. Bir yazılımcının mutlaka şunu da bilmesi gerekir; bir saldırgan yazılıma nerelerden saldırabilir ve ortaya çıkan açıklar nasıl kapatılabilir.

İster alaylı olsun ister mürekkep yalamış yazımcılar olsun, proje geliştirirken şu üç kısıtlamayla karşı karşıya kalırlar:müşteri istekleri,zaman ve bu işi yapmak için gerekli eldeki kaynaklar (para, donanım, yazılımcı, tester vs.). Büyük projelere büyük kaynaklar ayrılır. Projenin bitirilmesi işi yüklenen firma açısından büyük önem taşır. Bu arada hem müşterinin hem de firmanın atladığı çok önemli bir sorun vardır: Geliştirilen yazılımın güvenli bir yazılım olup olmadığı. Müşteri, ihtiyaçlarının karşılanıp karşılanmadığına bakar, firma, ise işi bitirip hakettiği ücreti almaya çalışır.

Bundan 20-30 yıl önce hacker(saldırgan) adını verdiğimiz kişiler çok daha fazla bilgi ile çok zaman harcayarak, yazılımlardaki açıklıklardan faydalanırken, günümüzde sızma işlemlerini otomatize eden yazılımların ortaya çıkmasıyla, çok az bir bilgi ile bir çok yazılım bu otomatize sızma testi yapan programlarla hızlı bir şekilde hacklenmektedirler. İnternetin 1990'lı yıllardan sonra yaygınlaşması ve bilgiye hızlı erişim sayesinde artık herkes şu yada bu şekilde bu tür bilgilere sahip olabilmektedir. Yazılımların hacklenmesi, yazılımı geliştiren ve kullanan firmalar açısından itibar düşürücü bir durum oluşturmaktadır.

Dünya yazılım sektörünün lokomotifi olan büyük firmalar, artık yazılım geliştirme süreçlerine güvenli yazılım aşamasını eklemişlerdir. Artık müşteri ihtiyaçlarını tam karşılayan, performanlı bir yazılım yazma hedefi yanında güvenli bir yazılım geliştirme ihtiyaçı ortaya çıkmış ve yazılım süreçlerine dahil edinilmesi kaçınılmaz hale gelmiştir. Aylarca, bir çok kişi ve çok para harcayarak geliştirilmiş yazılımların hacklenmesi çok acı bir durum olsa gerek.

 

Yukarıda bahsedilen durumlardan kurtulmak için yazılımcı neler yapmalıdır?

 

  1. Asla kendisinin yazmadığı ve müdahale edemeyeceği kodları kullanmamalıdır. Dll kullanması gereken durumlarda dll'i yazan firma ya da kişinin kim olduğundan emin olmalıdır.

  2. Kullandığı veritabanı, işletim sistemi , yazılımı geliştirdiği dil ve eğer web uygulaması geliştiriyorsa, web sunucusu hakkında yeterli bilgiye sahip olmalı, hangi versiyonları kullandığı ve bunların tespit edilmiş açıklıkları ve nasıl kapatıldıklarını mutlaka öğrenmelidir. İşletim sistemi düzeyinde dizin ve dosya yetkilendirmenin, veritabanı kullanıcı yetkilendirmesinin, uygulamayı kullanırken kimlik denetiminin düzgün yapılması, uygulamanızı dizin gezinimine, işletim sistemi komut sızıntılarına, sql sızıntılarına ve hizmet dışı bırakma saldırılarına karşı koruyacaktır. Uygulama asla en yetkili veritabanı kullanıcısı ile çalıştırılmamalıdır.

  3. Kullanıcılardan istenilen bilgilerin mutkala istemci arayüzünde ve sunucuda doğruluk denetimlerinin yapılması gereklidir. Bu uygulamanızı XSS(html ve javascript sızıntıları) saldırılarından koruyacaktır.

  4. Uygulamanız işletim sistemi komutları çalıştıracak bir açıklığa sebebiyet vermemelidir.

  5. Saldırgan uygulamanıza saldırı yapmadan önce mutlaka uygulamanız hakkında google gibi arama motorlarında bilgi toplar. Ne kadar çok bilgi edinirse saldırı başarısı o kadar yüksek olacaktır.

  6. Otomatize saldırılardan kaçınmak için Güvenlik Kodu(CAPTCHA) kullanılabilir. Fakat bunun hacklenip hacklenmediği mutlaka test edilmelidir. Test işlemini yapan internet siteleri mevcuttur.

  7. En büyük tehlikelerden bir taneside kimlik denetiminden geçmiş kişilerin diğer kişilerin görülmesini istemediği bilgilere ulaşması durumudur. Bir forumda diğer kişilerin mesajlarına erişmek gibi. Bu sıklıkla rastlanan bir durumdur. İş mantığınızı iyi kurmalı ve mutlaka test etmelisiniz.

  8. Web uygulamanızın frame'lerde açılmasını engellemelisiniz. Karşı domainden(CSRF) sitenize yapılacak istekleri mutlaka kontrol etmelisiniz.

  9. Sızma testlerini manuel yapmanın yanısıra, bu işi otomatik yapan paralı ya da parasız program ve web siteleri mevcuttur. Bunları mutlaka deneyiniz.Burada en çok beğendiğim ücretsiz bir araç olan OWASP ZAP'ı kullanmanızı öneriyorum.