Makale Özeti

Yazılım güvenliği, her geçen gün bir öncekinden daha önemli hale geliyor. Bunun iki temel sebebi var: İnternet her geçen gün daha yaygınlaşıyor ve bu yaygınlaşmayla at başı olarak da yazılımların ve sistemler karmaşıklaşıyor. Ön yüzde her gün daha fazla kişinin daha basit bir biçimde kullandığı uygulamalar hem arka planları giderek karmaşıklaştığı hem de kullanımları arttıkça daha fazla kötü niyetli kişinin hedefi durumuna geldikleri için tehdit altındalar.

Makale

Yazılım güvenliği, her geçen gün bir öncekinden daha önemli hale geliyor. Bunun iki temel sebebi var: İnternet her geçen gün daha yaygınlaşıyor ve bu yaygınlaşmayla at başı olarak da yazılımların ve sistemler karmaşıklaşıyor. Ön yüzde her gün daha fazla kişinin daha basit bir biçimde kullandığı uygulamalar hem arka planları giderek karmaşıklaştığı hem de kullanımları arttıkça daha fazla kötü niyetli kişinin hedefi durumuna geldikleri için tehdit altındalar.

Güvenli yazılımlar geliştirilmesi ihtiyacı her geçen gün daha acil bir konuma geliyor. Bununla birlikte organizasyonlar üretimlerinde her geçen gün bir yenisi eklenen güvenlik sorunlarıyla başa çıkmak konusunda büyük zorluklarla karşı karşıya kalıyorlar.

Bir kutunun içinde çalışmak üzere uygulamalar yazdığımız ve virüslerin yaygınlaşmasında en belirgin metodun disketler olduğu günler geride kalalı çok oluyor. Artık yazdığınız uygulamalar internette çalışıyor. Bir şekilde internete bağlanmayan bilgisayar sayısı giderek azalıyor. İnternet bir bakıma atomun parçalanması gibi: İyiye de kullanılabilir kötüye de. Güvenlikle ilgili sorunların giderek artması gösteriyor ki, kötüye kullananların oranı hiç de az değil.

İşin ne boyutlara ulaştığını anlamak için mesela Amerika’da tüm e-postalar içinde SPAM’in ulaştığı seviyeyi bir inceleyin isterseniz. Benim bu konuyla ilgili birkaç ay önce okuduğum son makaleye göre bu oran 3’te 1’i geçmiş, yarıya doğru gidiyordu.

Aslında durumu daha yakınlara bakarak da analiz edebilirsiniz: Kendi posta kutunuza bir gün boyunca düşen e-postaların kaçının SPAM olduğunu sayabilirsiniz mesela, ama bence SPAM olmayanları saymanız daha kolay olabilir. Ya da şunu düşünün: Çalıştığınız firmada son bir yıl içinde virüs bulaşması yaşandı mı yaşanmadı mı? Çoğu firmada artık oluşmuş bulunan temel güvenlik seviyesine rağmen en ufak bir boşlukta virüs sorunları baş gösteriyor.

Güvenliğin öneminin bu kadar arttığı hepimizin günlük hayatında bile ortadayken, gerekli adımları atmakta zorlanıyoruz. Kendi açımızdan bakacak olursak, yazılım üretiminde çeşitli aşamalarda rol alan insanlar olarak bu zorluk içindeyiz. Burada özellikle proje planlayıcılar ve yazılımcılar üzerinde duracağız.

Proje planlayıcılar güvenliği önemli bir özellik olarak değerlendirmede hatalar yapıyorlar, çünkü:

Proje planlayıcılar güvenlik tehditlerinin farkında değiller. Eğer siz de bir proje planlayıcısı iseniz, yazılım uygulamaları tasarlamasında görev alıyorsanız, bu ifademizi bir suçlama gibi değerlendirmeden önce aşağıdakilerin farkında mısınız bir düşünün:

- Organize ataklarda bir başka organizasyonun ağına girerek gizli bilgilere ulaşmaya çalışan, böylelikle rekabet avantajı elde etmek isteyen bir diğer organizasyonun payı olabilir. Nasıl? 3-5 uygulama indirmiş sağı solu tırmalayan çocuklarla uğraşmaktan daha zor görünüyor değil mi?

- Otomatik ataklarla ağlarda olabilecek zayıflıklar kolaylıkla ve hızla taranabilmekte, şifreleri kırmak için incelikli yöntemler yerine işlem gücünün sağladığı hayal edilemez kuvvetle ‘kaba kuvvet’ atakları uygulanmakta, tüm olasılıklar denenerek sonuca ulaşılmaktadır. Bu durumda, kendi sisteminizi tehlikeli internetin kıyısında güvenli bir nokta olarak kalabileceğini hayal etmek pek mantıklı gözükmüyor. Üstelik sizi tehdit eden gücün çok zeki olmasına da gerek yok: Kasanızın kilidini açmak için incelikli metotlar kullanmıyor, doğrudan parçalayarak çalışıyor.

- Sisteminizde hiç açık olmadığını düşünüyor olabilirsiniz, ama ya sisteminizi zaten yapması gereken bir işi yaptığı için başı belaya girerse? Diyelim ki kullanıcılarınızın hesapları 3 hatalı denemeden sonra kilitleniyor ve bir yönetici açmazsa 1 gün boyunca kitli kalıyor. Ya birisi bir program yazıp elde ettiği kullanıcı isimlerinizle rasgele şifrelerle sisteminize girmeye çalışıyorsa? Sisteme giremeyecek kadar iyi önlemleri aldınız belki, ama ya kilitlenen hesaplardan dolayı sisteminizin normal kullanıcıları tarafından kullanılamaz hale gelmesine ne demeli? DoS demeli tabii, yani ‘denial of service’, yani hizmet vermenizin engellenmesi. DoS ataklarının o kadar çok yöntemi var ki!

- Uygulamanızın bilinen bir güvenlik açığı varsa, davetsiz misafirlerle karşı karşıya kalmanız için birkaç saat geçmesine bile gerek kalmayabilir: Virüsler, Truva atları, solucanlar!

- Kullanıcı testleri yaparken hiç kullanıcının normal işlemleri yapabildiğini test edilmesini sağlamak yanı sıra, kullanıcıların tipik olmayan davranışlar gösterebileceğini de düşündünüz mü? Bu tür davranışlar, güvenlik problemlerinin kazara ortaya çıkmasına sebep olabilir. Ama bu kazara ortaya çıkan hataların temelindeki sebep yine kötü alışkanlıklar ve süreçlerdir.

Bir diğer olasılık, proje planlayıcıların güvenlik tehditlerinin farkında olmakla birlikte bunları hep başkalarının başına gelen şeyler olarak görmeleridir. Uygulamanızın hiç saldırıya uğramamış olması güvenli olduğu anlamına gelmez. Hiç depreme uğramamış bir evin, sadece bulunduğu bölgede deprem olmadığı için depreme dayanıklı diye kabul edildiğini düşünsenize!

Unutmayın: Bir gün sizin de başınıza gelebilir.

Planlayıcılar güvenlik risklerinin farkında olmakla ve bunların önemli bir sorun olduğuna inanmakla birlikte, teslim sürelerine uymak için yoğun bir takvim baskısı altında olabilirler. Bu, reddedebileceğimiz bir gerçek değil. Ama birtakım dengelemeler yaparken, vicdanımızın sesini dinlememiz gerekli. Özellikle ülkemiz şartlarında düşünüldüğünde, insanlar ürettikleri sistemler hata oluşturduklarında çoktan konum değiştirmiş olabiliyorlar. Unutmayın ki, sizin devraldığınız konumda da bir başkası aynı şekilde nasılsa bu sistem sorun çıkardığında ben büyük olasılıkla burada olmam diye düşünmüş olabilir. Ayrıca kasıtlı olmasına ihtimal tanımadığımız ama zaman ve bütçe baskılarıyla yapılan bu tür hataların insanlara önemli zararlar verebileceğini her zaman göz önünde bulundurmamız gerekiyor. Giderek daha çok sistem bilgisayarlara bağlı hale geliyor ve artık yazılım güvenliğindeki bir hata sadece verimlilikle ilgili sorunlar doğurmanın ötesinde doğrudan insan hayatını tehdit eder hale gelebiliyor.

Giderek bilgisayarla bütünleşen bir dünyada, bir çivi bir nalı, bir nal bir atı, bir at bir haberciyi, bir haberci bir orduyu devre dışı bırakabilir. O iyi çalışılmamış çivi, sizin programınız da olabilir.

Proje planlayıcıların güvenlikle ilgili tehditleri doğru değerlendirememelerine benzer şekilde, yazılımcılar da güvenli kod üretmede hatalar yapabilirler. Bunun sebepleri şöyle sıralanabilir:

Yazılımcılar tüm olası güvenlik tehditlerinden haberdar olmayabilir. Yazılım geliştiricilerin güvenlikle ilgili dikkate almaları gereken konular, atakların çeşitlenmesiyle birlikte giderek gelişiyor. Güvenlik bilinci olan bir yazılımcının bu konularda sürekli kendini güncellemesi zorunludur. Güvenlik sorunlarının belirginleşmesini sağlamakla birlikte bunların çözümleri konusunda da internet bir araç olarak kullanılabilir. Başta http://msdn.microsoft.com/security gibi uygulama geliştirme araçlarını kullandığımız ana sağlayıcıların sayfaları ve güvenlik konusunda diğer birtakım sayfalar, haber grupları, haber mektupları bu konularda çok yararlı olabilir.

Yazılımcılar güvenlik tehlikelerinden haberdar olmakla birlikte bütçe kısıtları yüzünden temel güvenliği uygulayamayabilir. Özellikle yazılımcılar tarafından taşınabilecek bir yanlış bakış açısı çok tehlikelidir: Güvenlik, geliştirdiğim özellikleri kısıtlayan bir unsurdur. Bir bakıma doğru, ama trafik kuralları da yolda gidişi kısıtlayan unsurlar içerir! Güvenlik açıkları ya da benzeri bir problem yüzünden yazılımınız devre dışı kalır, yanlış çalışır ya da bulunduğu sisteme zarar verirse, ne gibi üstün yetenekleri olduğu artık kimsenin gözüne gözükmez, bunu unutmayın!

Bir uygulamayı baştan güvenli geliştirmediyseniz, sonradan bir güvenlik hatasının telafisi çok pahalıya mal olabilir. Güvenlik açıklarını kapatmak için sonradan şunları yapmanız gerekir:

- Bir web sitesinde güvenlik yamasını ilan etmek.

- Yamanın kurulumunu test etmek.

- Testçilerin yamayı test etmesi.

- Yazılımcıların kodu düzeltmesi.

Bütün bu maliyetler, yazılımın baştan güvenli geliştirilmesiyle en aza indirgenebilir. Güvenlikle ilgili bir konu ne kadar erken fark edilirse o kadar düşük bir maliyetle çözümlenebilir. Planlama aşamasındaki bir düzeltme kod yazma zamanındakinden, kod yazma zamanındaki bir düzeltme kararlılaştırma aşamasındakinden ya da dağıtım sonrasından çok çok daha ucuza gelmektedir.

Bazı durumlarda uygulamanın güvenliğinin tam sağlanamamasının sebebi, adminlerle koordinasyon gerektirmesi ve bunun sağlanamamasıdır. Artık güvenlik bireysel bir sorumluluk olmaktan çıkmıştır. Ekip çalışması yapılma gereksinimi vardır. İdeal olarak uygulamayı geliştiren yazılımcılarla uygulamayı kurup düzenli hizmet vermesini sağlayan adminler arasında iyi bir işbirliğinin olması gerekir.