Merhaba arkadaşlar,

Bugün sizlere uygulama analiz ederken birçok kez karşılaştığım bir durumdan bahsetmek istiyorum.
Bazı acemi yada bilinçsiz programcı arkadaşlar, geliştirdikleri uygulamalarda sanırım derlendikten sonra hiç bulunamayacağını yada gözükmeyeceğini düşünerek birtakım gizli ve önemli verileri saklamaktadırlar.
Örneğin; yakın geçmişte incelediğim bir uygulamada, uygulamanın ailt olduğu şirketin ftp kullanıcı bilgileri ve şifresini uygulama içinde tanımlanmış ve çalışma zamanı bu ftp adresinden veri alınacak şekilde ayarlanmış.
Böyle bir şey programcının istediği amaca hizmet edebilir fakat herhangi bir saldırganın bu bilgilere ulaşarak, elde ettiği bilgilerle sitenin sunucusuna girmesi işten bile değil.
Anlattığım örnekte daha da vahim olan kısım ise; müşteri bilgilerinin ftp adresi tanımlanan sunucuda tutuluyor olmasıydı.

Örnek Ekran Görüntüsü ( Ollydbg - Bilgiler hayali ve göstermek için yapılan uygulama aittir. )


DotNet için Örnek Ekran Görüntüsü :


Yine birçok programcı arkadaş, programlarından kendilerine ulaşılabilmesi için mail formu oluşturmakta ve bu mail formuna da sabit mail kullanıcı adı ve şifresi tanımlamaktalar. Bu mail adreslerine ait bilgilerinde ele geçirilmesinin mümkün ve çok kolay olduğunu bilmek gerekir.
Ayrıca bu gibi bilgileri şifreleyerek programda tutmanın da çözüm olmayacağını söylemeliyim. Çünkü; programda bu bilgileri kullanmak için er yada geç bir metod yardımıyla şifreyi çözmek gerekecek, işte tam da bu aşamada çalışma zamanı uygulama debug/trace gibi işlemlerle izlenerek yada kod enjekte edilerek yakalanabilir.
Hemen bir örnek vermek gerekirse;
C# ile geliştirilmiş bir uygulamamız olduğunu varsayalım.
Uygulama içinde kendi metodumuzla oluşturduğumuz bir şifre ve şifreyi çözen bir fonksiyonumuz olsun.
Bu şifre de uygulamadan mail göndermek için kullandığımız şifre olsun.


Örnek metodumuz şöyle bir yapıda olacaktır.

public string SifreCoz(string sifreliMetin)

{
string CozulenAnahtar = "";
.... İşlemler...
.........
return CozulenAnahtar;
}
Programı decompile eden bir saldırgan belki direk mail şifremizi göremeyecektir ama uygulamanızda şifre çözmek için kullandığımız metodda bulunan return CozulenAnahtar; satırından önce bir kod enjekte eder ve MessageBox.Show(cozelenAnahtar); derse anahtarınızı zahmetsizce elde etmiş olacaktır. (Nasıl kod enjekte edildiği hususunu merak edenler için bknz : .Net Reflector bkz: Reflexil )

Bunların dışında yine uygulama analizinde rastladığım güvenlik zafiyetlerinden bir tanesi de;
Lisans vb. kontrol işlemlerini web sitesi üzerinden ve veritabanından kontrol eden uygulamalarda sql injection açığı bulunmasıdır. Programdan sunucuya gönderdiğiniz veri kullanıcıyla alakalı değil diye kontrol etmeden işleme sokmak hiç hesaba katmadığın kadar başınızı ağrıtabilir. Saldırdan programı çalışma zamanı izleyerek bağlanılan adresleri kolayca tespit edip bunlar üzerinden sitenize/sisteminize saldırıda bulunabilir.
Sözün özü, programınızda bir hesap yada sunucuyla bağlantılı işlemler yapmayı düşünüyorsanız; güvenlik konusunda kesinlikle ince eleyip sık dokumalısınız.

Bu makale, bu gibi güvenlik açıkları nedeniyle hem sizin mağdur olmamanız hemde müşterilerinizin (belki bizim) mağdur olmaması için yayınlanmıştır.
Maalesef nasıl saldırıldığı bilinmeden önlem almakta mümkün olmuyor.

Kaynak : www.turkishcode.com