Bilginin Adresi Ana Sayfa
Forum Anasayfası Forum Anasayfası > Bilgisayar Güvenliği / Computer Security > Güvenlik / Security Makaleleri
  Aktif Konular Aktif Konular RSS - Nasıl güvensiz kod yazılır?
  SSS SSS  Forumu Ara   Events   Kayıt Ol Kayıt Ol  GiriÅŸ GiriÅŸ

Nasıl güvensiz kod yazılır?

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
megabros Açılır Kutu Gör
Security Professional
Security Professional
Simge

Kayıt Tarihi: 08-06-2009
Konum: Turkey
Status: Aktif DeÄŸil
Points: 752
Mesaj Seçenekleri Mesaj Seçenekleri   Thanks (0) Thanks(0)   Alıntı megabros Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Nasıl güvensiz kod yazılır?
    Gönderim Zamanı: 10-06-2009 Saat 12:57

Bu yazıda, bilgisayar korsanlarının, suçluların ve dijital geleceği yoketmek isteyenlerin bir geleceği olduğuna emin olmak için, konunun uzmanlarından nasıl güvensiz kod yazılacağı bilgisi verilmektedir. Bu ipuçlarını yaratılıcığınızla birleştirerek kendi maddi durumunuzu da güvenceye alabilirsiniz. Dikkatli olun, kodunuzun umutsuzca güvensiz görünmesini istemezsiniz, yoksa güvensizliğiniz farkedilir ve fix edilebilir.

Bu yazıyı yazma fikri Roedy Green”in Bakımı/Yönetimi zor kod nasıl yazılır yazısından doğmuştur. Zaten kodunuzu yönetilemez şekilde yazmak güvensiz hale getirmenizden önceki ilk önemli adımdır.

İroni konusunda anlayışı kıt olanlar için özel not: Bu makale bir şakadan ibarettir! Geliştiriciler ve mimarlar genelde nasıl güvenli kod yazılacağı konusunda konuşmaktan sıkılırlar. Bu belki de aynı noktaya değinecek farklı bir yoldur.

Genel İlkeler
Araçlardan uzak durun
Uygulamanın sonsuza dek güvensiz olması için, güvenlik açıklarının nasıl bulunduğu ve kapatıldığı konusunu düşünmelisiniz. Çoğu yazılım ekibi otomatik güvenlik denetimi araçlarının problemlerini çözeceğine inanır. Bu sebeple, eğer açıklarınızın kalıcı olmasını istiyorsanız bu tip otomatik araçların bulmasını zorlaştırmalısınız. Bunu yapması söylemesinden daha kolay. Tek yapmanız gereken açıklarınızın, aracın imza veritabanındakilerden farklı olmasını sağlamak. Kodunuzu istediğiniz kadar karmaşık yapabilirsiniz, böylece bulunması zorlaşır. Aslında, en bariz açıklar bile bu araçlarla bulunamaz zaten.

Karmaşıklık
Güvenlik kontrollerini dağıtın
Güvenlik kontrolleri kod tabanında mümkün olduğunda dağınık olarak dizayn edilmelidirler. Belirgin bir paterni takip etmemeye özen gösterin ve mekanizmanın kullanıldığı yerlerin kolayca bulunamamasını sağlayın. Bu güvenliğin tutarsız bir şekilde implemente edilmesini sağlayacaktır.

Açıkları yayın
Bulunmayı önlemenin diğer harika bir yolu da, güvenlik açıklarınızın hepsinin kodunuzda aynı yerde olmamasıdır. Analistlerin bütün kodları kafalarında tutmaları çok zordur, bu yüzden açıkları yaymak başkalarının onları bulmasını veya anlamasını engelleyecektir.

Dinamik kod kullanın
Bir güvenlik analistinin (veya güvenlik aracının) bir uygulamayı takip edip bir zayıflık bulmasını zorlaştırmanın en güzel yolu dinamik kod kullanmaktır. Çalışma sırasında yüklenen koddaki akışı takip etmek neredeyse imkansızdır. Reflection ve Classloading gibi özellikler açıkları gizlemek için harika özelliklerdir. Mümkün olduğunca çok “plugin” noktası aktif edin.

Güven İlişkileri
Başka yerlerde yapılan güvenlik kontrollerine güvenin
Güvenlik kontrollerini iki kez yapmak gereksizdir, bu sebeple eğer başka birisi kontrol yaptığını söylüyorsa, tekrar yapmanın gereği yoktur. Mümkün olduğunda, diğerlerinin güvenliği doğru yaptığını varsaymalı ve kendiniz yaparak vakit kaybetmemelisiniz. Web servisler ve diğer servis arabirimleri genellikle çok güvenlidir, bu sebeple ne gönderdiğinizi veya ne döndürdüklerini kontrol etmekle uğraşmayın.

Kayıt / Log
Debug için log larınızı kullanın
Eğer log larınızı debug saçmalıkları ile doldurursanız hiçkimse kodunuza olan saldırıları takip edemeyecektir. Ayrıca log mesajlarınızın sadece sizin tarafınızdan anlaşılır şekilde olması ekstra puan kazandırır. Ve dahası log mesajları güvenlikle alakalı gibi görünürse bu da artı puan demektir.

Kriptolama
Kendi kriptolama metodunuzu hazırlayın
Standart kriptolama mekanizmaları kullanmak için çok karmaşıktırlar. Gizli şeyleri birbirine karıştıran bir kriptolama algoritması yapmak çok daha kolaydır. Bir anahtarla veya başka bir şeyle uğraşmanız gerekli değil, sadece hepsini birbirine katın ve kimse de bulup çıkaramaz.

Kimlik doğrulama
Kendi kimlik doğrulama metodunuzu hazırlayın
Kimlik doğrulama kolaydır, sadece iç güdülerinizi kullanın ve implement edin. Oturum tahmini, kimlik bilgilerini hash fonksiyonundan geçirme, brute force saldırıları gibi anlaşılmazı zor şeyler hakkında endişelenmeyin. Sadece NSA”in çok bilmişleri bu tip şeyleri anlayabilir. Ve eğer kullanıcılar zayıf şifre seçerlerse, bu onların hatasıdır.

Giriş Onaylama
Onaylama aptallar içindir
Uygulamanız zaten bir güvenlik duvarı tarafından korunuyor, bu yüzden kullanıcı girişleri ile ilgili saldırılar için endişelenmeyin. Kusuru sürekli sende bulan güvenlik uzmanları büyük ihtimalle işlerini korumak istedikleri için ve programlama hakkında hiçbirşey bilmedikleri için öyle davranırlar.

Bırak geliştiriciler kendi bildikleri yolla yapsınlar
Onaylamayı standart bir şekilde yapmakla uğraşma, sadece geliştiricinin stilini kısıtlamış olursun. Gerçekten güvensiz kod yaratmak için, onay işlemini olabildiğince farklı yollardan ve farklı yerlerde yapmalısın.

Erişim Kontrolü
Bırak kimlik doğrulama metodun gelişsin
Uygulaman için tüm erişim kontrolü kurallarını bulmak çok zordur, bu sebeple “just in time” geliştirme metodolojisini kullan. Bu sayede bulduğunda yeni kurallar kodlayabilirsin. Eğer yüzlerce binlerce kimlik doğrulama kodu uygulamanın her yerine yayılmış hale gelirse, doğru yoldasın demektir.

Dokümantasyon
Güvenliğin nasıl işlediğini dokümante etme
Bir güvenlik dizaynının tüm detaylarını yazmanın hiçbir manası yoktur. Eğer birisi çalışıp çalışmadığını merak ediyorsa koda bakmalıdır. Ne de olsa kod değişebilir ve dokümantasyon işe yaramaz.

Kodlama
Güvenlik paternleri kullanma
Projende onaylama, kayıt, hata işleme gibi şeyler için standart bir yol olmadığına emin ol. Geliştiricileri kendilerini ifade etmede serbest bırakarak ilham perilerini koda kanalize etmelerini sağlamak en doğrusudur. Bir güvenli kodlama rehberi hazırlamaktan uzak dur, bu yaratıcılığı kısıtlayacaktır.

Uygulamanın yapım sürecinin çok sayıda adımdan oluştuğuna emin ol
Başarılı bir sonuç için yapım sürecindeki adımları maksimuma çıkarmak isteyeceksinizdir. Dağıtımı inşa etme ve konfigürasyon dosyalarının nasıl ayarlanacağını sadece tek bir kişinin bilmesi en iyisidir. Eğer adımları bir yere yazdıysan, çok sayıda farklı dosyaya yayılmış notlar, çeşitli farklı yerlere dağılmış dosya ve howto”larının olması gerekir.

Test işlemi
Bir web tarayıcı ile test et
Bir web uygulamasını test etmede tek ihtiyaç olan bir web tarayıcısıdır. Bu yolla kodunuzun tüm normal kullanıcılarınız için mükemmel çalıştığına emin olabilirsiniz. Ve bilgisayar korsanları, saldırganlar ve suçlular için doğru çalışmıyorsa kimin umurunda? WebScarab gibi komik bir güvenlik aracını kullanmak sadece değerli vaktini harcamaktır.

Statik analiz araçlarını kullanmayın
Bu araçlar mükemmel değildir, unutun onları. Statik analiz araçları muhtemelen can sıkıcı uyarı mesajları yaratarak uygulamayı geliştirmenizi yavaşlatacaktır. Ayrıca öğrenmesi, kurması ve kullanması tam bir başağrısıdır.

Bütün modüllere test kodu yerleştirin
Uygulamanızın bütün bölümlerine test kodları yerleştirmelisiniz. Böylece kurulum öncesi uygulamadan çıkarmak çok zor olacaktır.

Güvenlik uyarıları hep sahte alarmlardır
Güvenlik uyarılarının hepsinin yanlış alarm olduğunu herkes bilir, bu yüzden hepsini gözardı edebilirsin. Söz konusu sizin paranız değilken neden değerli vaktinizi muhtemel problemleri kovalayarak geçiresiniz ki? Eğer bir araç mükemmel sonuçlar üretmiyorsa, unutun gitsin.

Kütüphaneler
Çok sayıda önceden-derlenmiş kütüphane kullanın
Kütüphaneler harikadırlar çünkü kodda güvenlik problemi olup olmadığı konusunda endişelenmeniz gerekmez. Internet”ten indirdiğiniz herhangi eski bir kütüphaneye güvenebilir ve uygulamanızda kullanabilirsiniz. Kaynak kodunu kontrol etmekle uğraşmayın, muhtemelen kaynak kodu yoktur ve zaten tekrar derlemesi çok zahmetlidir. Ayrıca bütün kaynak kodunu kontrol etmek çok uzun zaman alır.

Saygılar..
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu Gör



Bu Sayfa 0.195 Saniyede Yüklendi.