bilgisayar güvenliği etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
bilgisayar güvenliği etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

16 Ağustos 2014 Cumartesi

GÜVENLİ KOD GELİŞTİRME-1 ERROR MESAJLARININ İŞLENMESİ

TANIM


Uygulama esnasında oluşacak hatanın detayları(yığın bilgisi) mutlaka gizlenmelidir. Bir veri sızıntısı güvenlik(data leaking) çeşididir. Sisteme hakim bir uzak kullanıcının sisteme müdahale etme ihtimali artmaktadır.

SENARYO -1- KÖTÜ DURUM 

Örnek kod bloğunda bir click event sonrasında bir veri tabanı bağlantısı gerçekleştirilmektedir.

public SQLContainer getMaleCustomer()
    {
        try
        {
            connectionPool = new SimpleJDBCConnectionPool(DRIVER_NAME,
                    DATABASE_URL, DATABASE_USERNAME, DATABASE_PWD);
            String query = "select * from t_customer where gender='Male'";
            prepareConnection();
            FreeformQuery freequery = new FreeformQuery(query, connectionPool,
                    "id");
            sqlContainer = new SQLContainer(freequery);
            connection.close();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
       
        return sqlContainer;
       
    }
Veri tabanı bağlantısı gerçekleştiren modüllerden birine baktığımız vakit try-catch kullanılmış ve e.printStackTrace() metodu kullanılarak hata catch edilmiştir.

TESPİT 

catch bloğuna printStackTrace() metodu kullanıldığı için exception mesajları olduğu gibi kullanıcı arayüz tarafına yansayacaktır(Şekil 1).

Şekil.1 Catch bloğunda data leaking



 ÇÖZÜM

public SQLContainer getMaleCustomer()
    {
        try
        {
            connectionPool = new SimpleJDBCConnectionPool(DRIVER_NAME,
                    DATABASE_URL, DATABASE_USERNAME, DATABASE_PWD);
            String query = "select * from t_customer where gender='Male'";
            prepareConnection();
            FreeformQuery freequery = new FreeformQuery(query, connectionPool,
                    "id");
            sqlContainer = new SQLContainer(freequery);
            connection.close();
        }
        catch (SQLException e)
        {
           
            Notification.show("Hata oluştu",
                    Type.HUMANIZED_MESSAGE);
            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            System.err.println(sw.toString());
           
        }
       
        return sqlContainer;
      
  }

Yukarıdaki kod bloğunda Senaryo -1- deki kod örneğine göre catch bloğuna kullanıcıya “Hata oluştu” gerekçesinde bir hata mesajı verilmiştir. Bunun yanında Senaryo-1- deki hata stack kısmı konsol tarafına StringWriter ve PrintWriter nesneleri kullanılarak yazılmıştır.Bu loglar log4j gibi 3.parti eklentilerle daha işlevsel, okunabilir hale getirilebilir.

Şekil.2 Doğru bir hata yönetimi



REFERANSLAR VE DETAYLI BİLGİ İÇİN





10 Ağustos 2014 Pazar

DOS-DDOS Saldırısı Nedir ?


DoS aslında sistemi ele geçiren bir saldırı değildir.Amacına göre iki türlü DoS saldırısı vardır.Bunlar

·         Bandwith tüketimine yönelik saldırı
·         CPU,RAM,disk,buffer gibi sistem kaynaklarını tüketmeye yönelik saldırı

DDoS un DoS saldırılarından tek farkı çok noktadan(farklı IP adreslerinden) saldırının gerçeklenmesidir.
Belli başlı saldırı türleri;
  • SYN Flooding
  • UDP Flooding
  • ICMP Flooding
  • HTTP-GET Flooding
  • Smurfing

Çoğunluğu flood yani sel gibi birim zamanda yüksek şiddette zarar verecek şekilde sistemin kaynaklarının kullanılmasıdır.
SYN Flooding

SYN saldırısı,TCP katmanında(OSI seviye 7) gerçekleşen bir saldırıdır.TCP paketlerinin değiştirilip karşı tarafın üçlü el sıkışması mekanizmasını bozacak şekilde gerçekleşir.Üçlü el sıkışması TCP bağlantısının gerçekleşmesi için yapılan bir alt bağlantıdır.



    
Üçlü el sıkışmanın aşamaları soldaki gibidir.Resmin soldaki şekline A noktası, sağdakine ise B noktası diyelim.
A noktası SYN pakedini gönderir.
B noktası SYN-ACK pakedini 
ve son olarak A noktası tekrardan ACK pakedi göndererek üçlü el sıkışması gerçekleştirilir






Bu noktada SYN Flooding saldırısı üçüncü aşamada gerçekleştirilir.İkinci aşamada SYN-ACK pakedi geldikten sonra alan taraf asla ACK pakedi göndermez bu şekilde karşı taraf ACK pakedini alamadığı için TCP mimarisi gereği SYN-ACK pakedini tekrar tekrar göndermeye çalışacaktır.Burada hem ağ hemde sistem yorulmaktadır.Ağın yorulması,ağ üzerinde giden SYN-ACK paketleri bantgenişliğini doldurmaktadır.Sistem tarafında ise pakedi SYN-ACK pakedini gönderen makine her pakedi üretimde işlemci zamanını harcar ve gönderdiği SYN-ACK pakedi başına TCP bufferı dolmaya başlar.İşte SYN saldırısının etkili tarafı buradadır.Hem ağı hemde ağa bağlı bir bilgisayarı hizmet dışı bırakabilmektedir.
Bir SYN Flooding saldırısı




20 Mart 2013 Çarşamba

ulimit komutu

Unix tabanlı sistemlerde,sistemin hangi ölçülerle kullanıldığının istatistiğini veren ve kullanıma göre ince optimizasyonlar yapılarak kullanıcının kaynakları kullanımında sınırlamalar getirilebilir.Olası DOS saldırıları bu şekilde engellenebilir.
terminale
ulimit -a
yazarak sistemde kullanılan kaynaklar hakkında daha ayrıntılı bilgi edinebilirsiniz.

Görüldüğü gibi max user process dediğimiz kullanıcının bir oturumda açabileceği process sayısı unlimited olarak ayarlanmış.Bu sebeple olası bir DOS tipi saldırı olan fork bombinge ortam hazırlamaktadır.

ulimit -u <girmekIstediğinizSayi>
ornek : ulimit -u 30


Gördüğümüz gibi max process sayısı 30 ile sınırlandırıldı.
Şimdi bir fork bombing scripti olan
 :(){ :|:& };:
komutu terminale yazarak sistemin vereceği cevabı görelim.

İşte sonuç :
Resource temporarily unavailable
Yani kaynak geçici olarak uygun değil.Bu ayarlama yapılmamış olsaydı yani siz konsolu açtığınızda direk
 :(){ :|:& };:
girdiğinizde makineniz kilitlenecek ve sistemi yeniden başlatmanıza sebep olacaktı.Bir sistemin yeniden başlatılması küçük boyutlu işlerde maliyet açısından gideri elle tutulur ölçülerde olmayabilir lakin büyük ölçekli sistemlerde(banka serverları,devlet kurumlarının kullandığı sistemler) bir sistemi yeniden başlatmak demek ana haber bültenlerinde son dakika haberi olmak demektir.

19 Mart 2013 Salı

Fork Bombing ve Korunumu

İsminden de anlaşılacağı gibi,bir process in kontrol dışı çoğalması ve kaynakların hunharca tüketilip sistemi dondurup,devre dışı haline getirmesidir.
Bir DOS(denial of service) saldırısıdır.Prosesler geometrik bir şekilde(1,2,4,8,16,32....) artacağı için memoryde akıl almaz bir kaynak tüketimi ve cpu nun işlem gücünü çalarak sistem üzerinde çalışan diğer hizmetlerin,programların çalışmasını engeller.
Şematize Fork Bombing

Fork Bombing den nasıl korunuruz ?

Unix türü işletim sistemlerinde kullanıcının bir oturumda açabileceği process sayısı önceden belirlenmiştir.Kullanıcı bu process sayısını kesinlikle aşamaz.unix te ulimit shell komutuyla bu sınırlama gerçekleştirilebilir.

Windows türü işletim sistemlerinde bu işlem process sayısı olarak değil de cpu kullanımı olarak ele alınmıştır.
kullanıcıların cpu kullanımı sınırlandırılır.

Basit bir Fork Bombing
Unix tabanlı işletim sisteminize aşağıdaki kodu yazıp çalıştırarak ne kadar çaresiz kalabileceğinizi öğrenebilirsiniz :)

#include <stdio.h>
#include <unistd.h>
void main(){
while(1){
fork();}
}
NOT:Derleyip çalıştırmadan önce açık kalan kayıt edilmemiş programlarınızı kapatın.

Attack Tree ve Yazılım Güvenliği

Güvenlik konusunda saldırı ağacı dediğimiz Attack Tree,bir güvenlik sisteminde gerçekleşecek saldırı türlerini ve bu saldırı türlerinin hangi yollarla gerçekleştirilebileceğini bir ağaç formunda gösterilmesidir.
[1] Attack Tree Örneği

Yukarıdaki ağaçtan bahsedecek olursak.Dosyaya bulaşan bir virüsün sistem üzerinde yapabileceklerini simgelemektedir.Ağaç,yapraklarına ayrıldıkça durum sayısı artar.Bu durumuların herhangi birisi gerçekleşebileceği gibi aynı anda aynı seviyede bütün durumlarda gerçekleşir.
Örnekleyecek olursak
1.Senaryo
Virüs dosyaya bulaşır -> Virüs kod gereği kendisini Administrator yetkisinde olarak çalıştırır ->Virüs üreteceği kötü niyetli kodla(exploit) dosya sisteminin köküne ulaşabilir ve istediğini yapabilir.
2.Senaryo
Virüs dosyaya bulaşır -> Virüs kendini normal kullanıcı yetkisinde çalışır ->Virüs kendisi gibi zararlı programları internetten indirir ve makineye zarar verir.

Bunun gibi tepeden tırnağa bir kötü yazılımın,açığın sisteme hangi zararları vereceğini bu yapıyı kullanarak optimum bir şekilde gösterebiliriz.

Bu ağaç çeşitli yazılım güvenliği modelleme araçlarıyla dizayn edilir ve kurumların kullandıkları,ürettikleri sistemlerin olabilecek güvenlik açıklarını,bu açıklara karşı davranışları simüle edilebilir ve iş devamlılığı bu sayede sağlanabilir.

Kaynaklar
[1] http://en.wikipedia.org/wiki/Attack_tree#Attack_tree_modeling_software