Herkese selamlar,
uzun zaman oldu makale yazmayalı. Bu gece bir konu hakkında bilgilendirme ve konunun ne kadar ehemmiyetli olduğunu anlatmaya çalışacağım. Başrol oyuncularımız bir Türk yazılım firması ve .Net. .Net'i kötülemiyorum, sadece öyle bir furya var ki; eğitim setleri, kitaplar ile birlikte yazılıma yatkınlığı olmayan, algoritmik zekası gelişmemiş kişiler ürün çıkarmaya çalışıyor. Bu belki ülkemiz adına güzel bir şey olsa da arka planda nelerin yaşandığını bu makale ile sizlere anlatmak isterim.
Hemen hemen 1 ay önce bir yazılımı lab ortamına alarak inceleme yaptım. İnceleme sonucunda ilgili firmanın veri tabanı bilgilerini erişerek ve aynı zamanda 20.000 (ortalama) adet kullanıcı verisine ulaştım. Bu veriler arasında;
- Ad Soyad / Firma Adı
- Vergi numarası
- Telefon numaraları
- E-Posta adresleri
- Açık adresleri
ve buna benzer birçok iletişim bilgisi mevcut. Öyle ki, firmaya yapılan ödemeler, lisans tarihleri vs. gibi birçok veriden bahsediyorum. Konu bu kadar mühim. Şimdi en baştan başlayalım. Konu nasıl gelişti? Ne yaptım ve ne yapacağım? Okurlarımız veya takipçilerimiz bilirler ki genelde siber güvenlik veya reverse ile ilgili makalelerim komut satırı bazında gerçekleşir. Bu makalede ona bile ihtiyacımız olmayacak. Yani bu makale aslında herkese hitap ediyor.
Unutulmamalıdır ki; ilgili firma veya elde edilen veriler makale içinde veya 3. şahıslar ile asla paylaşılmayacaktır. Konu ile ilgili KVKK ve ilgili firmaya gerekli bilgilendirmeler yapılacaktır.
Başlayalım
Bu programı keşfetme ve inceleme isteği bende, benzeri bir uygulama geliştirme fikri ile oluştu. Bu uygulama ve ona benzer tüm uygulamaları cihazıma indirerek testler gerçekleştirdim. Bu testler içerisinde bulunan özellikler ve dezavantaj veya eksik olan özelliklerin tespiti ile beraber, yeni geliştireceğim uygulamada bu eksikliklerin olmaması veya dezavantajları tekrar yaşamamaktı. Birçok uygulama test ettikten sonra sıra ilgili uygulamaya geldi. Uygulamayı açtığımda ekran gelir gelmez, geliştirici bakış açısı ile direkt olarak .Net ürünü olduğunu (grid, buton tasarımı vb. faktörler) tahmin ettim. Açılış ekranında oluşan yavaşlık ve lisanslama koşullarındaki bazı parametrik durumlar ilgili uygulamanın bir API aracılığı yerine, direkt olarak veri tabanı bağlantısı (MySQL) gerçekleştirdiğini tahminlerim arasına koydum. Direkt veri tabanı bağlantısının çok riskli bir işlem olduğunu mevcut teknoloji ile herkesin bilmesi gerektiğini düşünüyorum. İncelemelerim sonrasında ilgili tahminlerimi test etmek üzere dosya yapısı ve bağlantıları test etmeye başladım.
Toplanılan Bilgilerin Teyit Edilmesi
Kullanılan DLL dosyaları ve 3. parti araçlarım ile (exeinfoPE vb.) .Net ile yazıldığına kanaat getirdim. Daha sonra Fiddler aracı ile herhangi bir API adresine ulaşıp, ulaşmadığını sniff yöntemi ile test ettim. Yine tahmin ettiğim gibi herhangi bir API adresine veya uç noktasına ulaşmadı. .Net ile yazıldığında her crackerın aklına gelen hangi obfuscator yönteminin kullanıldığıdır. Evet, bu uygulamada obfuscator yöntemi kullanılmamış. Çok basit bir şekilde (.Net framework kaynaklı) tüm kodlara erişimim kolay olacaktı. Bunun için DnSpy aracı ile uygulamayı açıp ilgili sınıf, fonksiyon vb. tüm bilgilere erişim sağlıyorum.
Ekran Görüntüsü - DnSpy sınıf listesi

Ekran Görüntüsü - Fonksiyon örnekleri

Teyit Edilen Bilgilerin Kullanılabilirliği
Erişim sağladıktan bir süre sonra ufak bir araştırma ile bazı ilginç verilere erişiyorum. Daha öncesinde dosya yapısını incelerken denk geldiğim MySql.Data.dll dosyasını gördüğümde, içimden "hayır, hayır" diye yakındım. Tahmin ettiğimiz gibi eriştiğim bilgiler ilgili firmanın sunucusunun bağlantı bilgileriydi. Devam edelim, böyle büyük bir açık veya adına ne derseniz artık... Böyle büyük bir açık var dedim ama belki sunucu tarafında yetkilendirmeler düzenlenmiş, en azından verilerin silinmesi, güncellenmesi, eklenmesi vb. eylemlerin en azından uygulama tarafında yapılmadığını düşünmüştüm. Anladım ki, ilgili user tüm yetkilere sahip.
Ekran Görüntüsü - Erişim Bilgileri

Belki okurken "yok artık yahu!" diyenleriniz vardır, bende aynısını söyledim. Belki daha fazlası...
Tabloları ve verileri incelerken kullanıcıların bilgilerini eriştiğimde ilk olarak "geçmiş olsun" ibaresi yakışacaktı ama sonrasında biraz daha incelediğimde şöyle tablolar buldum;
- İlgili şirketin bulut tabanlı bir uygulamaları mevcut. Bu uygulamanın kullanıcı bilgileri ve şifreleri (tabi ki hash edilmemiş; saçmalamayın 😀 ).
- Kullanıcıların yaptığı destek görüşme notları.
- Kullanıcıların yaptığı ödeme bildirimleri.
- Kullanıcıların cihazından gelen hata logları.
- Kullanıcıların cihazında yürütülen SQL sorguları.
İlk madde de veri zafiyetinin boyutu aslında başka seviyelere ulaşıyor. Zira bu bulut uygulaması içinde, kullanıcının müşterisinin bilgileri de mevcut. Yani;
Yazılım firması -> Kullanıcı (veri zafiyeti) -> Kullanıcı müşterisi (veri zafiyeti x2)
Bazı sorgu sonuçlarını (sansürleyerek) sizlere göstermek istiyorum;



Sorgulardaki verilerin güvenliği için görüntü üzerinden erişimini imkansız hale getirmek için arka plandaki veriler ilgili görüntü üzerinden kaldırılıp aynı zamanda blurlanmıştır.
Ne Yapılmalı?
Konunun bilinçli bir şekilde yapıldığını düşünmüyorum. 1 aylık süreçte arada baktığımda herhangi bir değişiklik görmediğim için bir makale olarak yayınlamak, bu durumdan ders çıkarılması gerektiğini düşündüm. Değerli okurlarımız, bu durumda yapılması gerekenler çok basit ve temel maddeler. Eminim bu konulara ilgisi olan kişiler yazıyı okurken çözüm yollarını çoktan kendi içlerinden geçirmişlerdir.
- İlgili masaüstü uygulaması için bir API sistemi geliştirilmeli. Sadece API sistemi ile işlem yapılmalı.
- Bu API sistemi JWT gibi authentication sistemi ile ek olarak korunmalı. Önüne gelen istek gönderemesin. Zira yine sniffer yöntemi ile ilgili istekler manipüle edilebilir.
- Ürünlerin sunucuları ayrılmalı ve mümkünse iki sunucu arasında herhangi bir iletişim olmamlı.
- Ofis içi işlemler (örneğin ödemeler veya destek iletileri) için ayrı bir sunucu oluşturmalı.
- Bulut uygulaması mevcut uygulama IP adresi dışında (SSR olduğu için ip sabit, CSR olsaydı bu durumu gerçekleştirmek yine API sistemine kalacaktı) erişim izinin verilmemesi.
- Az yaygınlıkta bilinen (bunun önüne geçmek imkansız diyebiliriz) obfuscator yöntemlerini kullanarak ilgili masaüstü uygulamasının kod bilgilerine erişimini zorlaştırmak.
Bunlar ilk aklıma gelenler. Aklıma gelmeyenler muhakkak vardır ve ek olarak bu önlemler en temel önlemlerdir.
Son Söz
Son dönemde ülkemizde bilinçsiz şekilde büyüyen yazılım sektörünün bu tarz vakalar ile karşılaşması çok doğaldır. Kendi naçizane görüşüm şudur ki; her insan belki yazılım geliştirebilir fakat sürdürülebilir yazılımı yazmak, algoritmik zekaya sahip ve en önemlisi işini aşk ile yapan kişilerin yapacağı bir eylemdir.
Bir başka yazıda görüşmek üzere,
sağlıkla kalın!