Sunday, February 23, 2020

Kısa fıkra: "Açık kaynaklı yazılımlarda arka kapı olmaz"

Geçtiğimiz hafta Windows sistemlere bulaşmış olabilecek zararlı yazılımları ve izinsiz erişimleri tespit etmeye yardımcı olabilecek çok basit bir uygulamayı ücretsiz yayımladım. (Uygulamanın ayrıntılarına https://sparta.com.tr/rontgen/ adresinden ulaşabilirsiniz.) Sonrasında çıkan 1-2 trolün söylediklerini ciddiye aldığımdan değil, açık kaynak yazılımların güvenlik seviyesine bakmak için iyi bir fırsat olduğu için yazıyorum.



“Açık paketlerde problem yok” yazmış mesela bir tanesi… Açık kaynaklı yazılımlara yerleştirilen arka kapılara bakalım öyleyse.

Güvenlikle ilgili başımıza dert olan birkaç hurafeden biridir bu. “Linuxlara virüs bulaşmaz” ve “MAClere kimse virüs yazmıyor” gibi bilimsel herhangi bir temele bağlayamadığımız konulardan birisi.

Açık kaynak kodlu yazılımlar daha mı güvenilir?
Genel algı bu yazılımların kaynak kodlarının açık olması sebebiyle pek çok kişi tarafından denetlendiği, dolayısıyla arka kapı yerleştirmenin mümkün olmadığı yönündedir. Ne yazık ki bu tezi çürütecek pek çok olay yaşandı. Bunlar phpmyadmin gibi çok geniş bir kullanıcı sayısına sahip yazılımları da etkiledi, daha az bilinen ssh-decorator Python kütüphanesini de etkiledi. Öncelikle herhangi bir açık kaynak yazılım projesine arka kapı eklenmesinin çok zor olmadığını kabul etmek gerekir. Dolayısıyla konu eklenen arka kapının tespit edilememesine geliyor. 

Açık kaynak kodlu yazılım projelerini iki ana gruba ayırabiliriz; ürün ve modül. “Ürün” olarak adlandırabileceklerimiz tek başına kullanılan yazılımlardır (örn: ProFTD, VSFTP veya PHPmyAdmin). “Modül” dediklerimse yukarıda sözünü ettiğim “ssh-decorator” gibi tek başına kullanılmayan ancak başka kodlar içerisine dahil edilenlerdir.

2018 yılında açık kaynaklı event-stream Javascript kütüphanesine bir arka kapı yerleştirildiği ortaya çıktı. Olay ortaya çıktığında event-stream kütüphanesi 2 milyondan fazla yazılım içerisinde kullanılıyordu. Açık kaynak yazılımın güvenliğine ayrıca dikkat edilmesi gerektiğine dair önemli bir nokta çünkü bunların bir kısmı bizim “ticari” olarak nitelendirdiğimiz yazılımların içerisinde. Yazılım geliştiriyorsanız veya size özel bir yazılım geliştiriliyorsa bunun içerisindeki açık kaynak yazılım oranını takip etmenizde fayda var. Böylece, en basiti GitHub’da bedava olan kodlara mı para veriyorsunuz yoksa gerçekten size özel mi yazılıyor görebilirsiniz. Bu konuda “açık kaynak kod oranı tespit hizmeti” veriyoruz ve bir müşterimizde açık kaynak kod oranı %90’nın üzerinde bir projeye rastladık. Bunun yanında bünyenizde kullanılan yazılımların içerisinde ortaya çıkması muhtemel bir güvenlik açığının da sizi nasıl etkileyeceğini takip etme şansınız olur. Biraz önce sözünü ettiğimiz event-stream kütüphanesi kuruluşunuzun bünyesinde bulunan açık kaynaklı veya ticari lisanslı herhangi bir yazılım içerisinde kullanılmış mı mesela?

Arka kapılar yazılımlardaki tek tehlike mi?
Asıl sorun daha büyük; yazılım hataları. Açık kaynak veya ticari lisanslı olsun yaızlımı geliştirenlerin tamamen iyi niyetli olduklarını düşünelim. Yaızlımın tasarlanma aşamasından geliştirmesine kadar pek çok noktada hatalar yapıldığını görüyoruz. Bunların sonucunda yazılımlarda güvenlik açıkları ve çeşitli hatalar meydana gelmektedir. Çok büyük açık kaynak kodlu projelerde birden fazla yazılımcının çalıştığını görebiliriz ancak daha küçük modüllerde genellikle tek kişinin ve günlük mesaisinin dışında kalan zamanlarda çalıştığı bir senaryo daha gerçekçi oluyor. Bu durumda insanın aklına şu geliyor; onlarca yazılımcısı, test mühendisi ve güvenli yazılım geliştirme süeci ve yatırımı olan Microsoft hata yaparken bu arkadaşların hata yapma ihtimali yok mu gerçekten? Elbette var ve genelde yazılım test konusuna ağırlık verilmediği için basit hataların (örn. Tanımlanmış değişkenin kod içerisinde hiç kullanılmaması, girdinin temizlenip çıktının temizlenmemesi, vb.) daha sık görülmesi muhtemeldir. Hataların bir kısmının yine yazılım geliştirme hijyen kurallarına uymamaktan kaynaklandığını görebiliyoruz (örn. Sınıfların tek bir işlev yapması, controller sınıflarının olmaması, vs.). 

2018 yılında BitPay ve CoPay kriptopara cüzdanı uygulamalarında kullanılan bir NodeJS kütüphanesinin arka kapı barındırdığı açıklanmıştı. Yazılım tedarik zincirimizin oluşturduğu riskleri değerlendirmezsek bizlerin de, özellikle yerli ve milli yazılım geliştirme konusunda gelişmeler yaşanırken, başını ağrıtabilecek bir konu haline gelebilir. Bu örnekte NodeJS kütüphanesine eklenen zararlı kod parçası sıradan bir arka kapı değil, özellikle kriptopara cüzdanı uygulamalarında kullanılması halinde devreye girmek üzere planlanmış bir arka kapıydı. Özetle birisi şunu düşünmüş: “Ticari lisanslı kriptopara cüzdanları var, bunlardaki paraları çalmak lazım. Bunun için ben arka kapıyı açık kaynak koldu bileşene yerleştireyim, nasılsa fark etmezler”. Kısmen haklıymış diyebiliriz çünkü arka kapının tespit edilmesi 3 aydan fazla sürmüş ve bu arada kriptopara cüzdanlarının 5.0.2 ile 5.1.0 arasındaki sürümlerini etkilemiş.

Nasıl oluyor da gözden kaçıyor?
Yukarıda verdiğim kriptopara cüzdanı örneğinde kullanılan arka kapı kodunun “okunabilir” formata getirilmiş hali aşağıda;


… Evet? Binlerce satırlık açık kaynak kodlu bir proje içerisinde hemen göze çarpacağını iddia edemezsiniz herhalde. Kaynak kod içerisine yerleştirilecek arka kapılar hayal ettiğimiz gibi “GET” veya “POST” olarak gönderilen bir HTTP talebinden biraz daha farklıdır. Bu da arka kapıları tespit etmeyi oldukça zorlaştırıyor. Üstelik proje içerisinde özellikle kaynak kod incelemesi yapmaya gönüllü olmuş kimse yoksa zaten tespit edilmesi neredeyse imkânsız. Bu kodu herhangi bir projenin Türkçe dil desteği paketine rahatlıkla yerleştirebiliriz. (Laf aramızda İstihbaratta çalışsam gece gündüz bu işle uğraşan bir ekibim olurdu ki hiç değilse belli başlı açık kaynaklı yazılımların kullanıldığı sistemlere erişimimiz olsun).

Açık kaynaklı yazılımların güvenliği
Açık kaynak kodlu bir yazılım kullanıyorsanız veya kuruluşunuza özel yazılımlar geliştiriliyorsa, bütçenizin el verdiği ölçüde, aşağıdaki kontrol maddelerini yerine getirmeye çalışmakta fayda olur;
  • Açık kaynak kod kullanım oranını takip edin
  • Kullanılan açık kaynak kod parçalarının envanterini tutun
  • Güvenli yazılım geliştirme prensiplerine uyun
  • Kaynak kod analizi yapın
  • Yazılım testlerini yapın
  • Güvenlik testlerini yapın
  • Güncellemelerden sonra testleri tekrarlayın
Yazılım güvenliği teoride basit pratikte neredeyse imkansıza yakın bir konu olarak gündemimizde olmaya devam edecek.
 

Saturday, December 14, 2019

TUBITAK Zararlı Yazılım Analizi Platformu


TÜBİTAK BİLGEM Siber Güvenlik Enstitüsü zararlı yazılım analizi platformunu duyurdu.



"Cuckoo kurmuşlar ya bişi diil" tarzı küçümsemeler yapanlar olacaktır elbette ama bunu genel şuursuzluklarına veriyorum. Kendine "DDoS uzmanı" diyenlerin "sunucunun fişini çekin" önerisinde bulunduğu ve "uzman" arkadaşların "eniştemin görücesinin Erzurumlu bir bacanağı var. Onun da çalıştığı yerde dahi heykır bir çocuk varmış. Heykır çocuk diyesiymiş ki yakında Türkiye'nin önemli kurumlarına çok büyük saldırı olacakmış." türü kıllandırmalarının olduğu bir ortamda bu tür gereksiz yorumları duymamayı çabuk öğrenip işin özüne odaklanmanın bir yolunu bulmanız gerekiyor. Aksi takdirde önemli adımları kaçırabilirsiniz.

Bence TÜBİTAK'ın Cuckoo kurması önemli bir adım. Her şeyden önce Türkiye'de zararlı yazılım faaliyetlerinin şimdiye kadar olmadığı kadar yakından takip edilmesine imkan sağlayacaktır. Buraya zararlı yazılım numuneleri yüklendikçe trendler ve istatistikler da gelişecek. Platformun aktif olarak kullanıldığını ve ilgi gördüğünü varsayarsak, bundan bir kaç yıl sonra "Salı öğleden sonraları Türkiye'deki kamu kurumlarının en çok fidye yazılım saldırısına maruz kaldıkları zamandır" gibi çok faydalı istatistikler de gelişecektir.
Bu projede çalışan herkese teşekkür ederim.

Platformu nasıl kullanıyoruz? 
https://zar.sge.gov.tr adresini ziyaret ettiğimizde bizi aşağıdaki ekran karşılıyor;



 Deneme amaçlı bir Wannacry fidye yazılım örneği yükledim.



Analiz biraz zaman aldığı için daha önce yüklenmiş başka bir zararlı yazılım örneğinin sonuç raporuna bakacağız. Yüklenen zararlı yazılım örneklerini "Uploaded Samples" sekmesinden "Analysis Report" olarak ilgili örneğin karşısında bulabilirsiniz.

Şüpheli dosyaları yükledikten sonra analiz raporunda bazı noktalara bakmakta fayda var.

Öncelikle raporun "İmzalar" başlığı bizim için önemli. İncelediğim örnekte (https://zar.sge.gov.tr/UploadedSamples/RaporGoster?cuckooTaskId=4390) aşağıdaki imzalar görünüyor;
Bunlar;
  • Yüklenen dosyanın Virustotal üzerinde birden fazla antivirüs tarafından zararlı olarak tanımlanması. 
  • Uygulamanın içerisinde şifreli veya sıkıştırılmış veri bulunması
  • İnternet tarayıcısından bilgi çalması
  • Windows başlatıldığında çalışacak biçimde kurulması.
"Statik Analiz" ve "Davranış Özeti" kısımları ise bize zararlı yazılımın davranışları hakkında bilgi verirken aynı zamanda bu zararlı yazılımı başka sistemler üzerinde tespit etmemizi sağlayacak önemli ipuçları veriyor. 

Zararlı yazılım analizi konusunda işinize yarayabilecek bazı araçları ele aldığım bir sunumu https://www.slideshare.net/AlperBasaran/zararl-yazlm-analizi-zet adresinden indirebilirsiniz. 
Virustotal'in tek başına kullanımı konusunda https://sibersavascephesi.com/mac-virusu-ve-virustotal-kullanimi/ adresindeki yazının faydası olacaktır. 

Kolay kullanılan, amaca hizmet eden bir uygulama gibi duruyor, devamının da aynı şekilde gelmesini dilerim. 


"Heykır" arkadaşlara ufak bir not:
Aşağıda görüldüğü gibi bazı XSS girişimleri olmuş. 

Sayfada giriş fonksiyonu olmadığı için XSS bulunsa bile ne işe yaracağını ben anlayamadım. Fikrinizi almak isterim gerçekten. Sonuçta aşağıdaki gibi bir şey olacak, XSS'in oturum çerezlerini çalmak için kullanılabileceğini biliyoruz ama, dediğim gibi sayfada giriş ekranı yok. Anlamadım gerçekten... Yardımcı olabilir misiniz?







Saturday, October 26, 2019

Kablosuz Ağ Güvenliği: Saklayamazsın! Korunman Lazım


Kritik yerlerdeki kablosuz ağlar konusunda akla gelen ilk güvenlik yaklaşımlarından birisi kablosuz ağları “görünmez” yapmaktır. Bazı ağ yöneticilerine sorarsanız; kablosuz ağın adının gizlenmesi onu saldırganların gözünde “görünmez” yapmakta ve böylece kimse “göremediği bir şeye saldıramayacağı için” kablosuz ağ güvendedir. 

Herhangi bir şeyin “görünmediği” için güvende olduğu varsayımı port kullanımı konusunda da karşımıza çıkmaktadır. Bir web uygulaması veya web servisini standart olmayan bir porttan çalıştırıldığını ve sadece bu nedenle “güvende” olduğunun varsayıldığı pek çok durumla karşılaştım.
Evet, web uygulaması denilince aklımıza önce 80 ve 443 numaralı portlar gelir. Web uygulamalarını hedef alacak bir saldırganın da öncelikle bu portlarla ilgilenmesi belli ölçüde anlamlıdır. 

Ne yazık ki saldırganların sadece bu portlara bakıp “burada bir şey yokmuş, başka IP adresine bakayım” dediği bir dünyada yaşamıyoruz. Bu nedenle gizlemenin veya saklamanın bir güvenlik unsuru olarak düşünülmesi gerçekçi değildir. 
Kablosuz ağların temel güvenlik sorunu her şeyin havadan ve her yöne gidiyor olmasıdır. Normal şartlarda kuruluş ağımıza bağlı bir Ethernet kablosunu Istanbul’da Taksim meydanına veya Ankara’da Kızılay meydanına kadar uzatıp ucunu boşta bırakmayız. Konu kablosuz ağ olunca ne yazık ki durum biraz bu şekilde gelişiyor. Bu nedenle kablosuz ağın güvenliğini sağlamak sadece “gizleyerek” mümkün olmuyor.  

Aşağıdaki ekran görüntüsünde civardaki kablosuz ağlar görülebilir. Bunların bazılarının ismi görünürken, bazılarının ismi “gizli”. İşletim sistemlerine bağlı olarak “normal” kullanıcılar bu ağları görmeyebilir ancak kuruluşunuzu hedef alacak bir saldırgan bunları görebilir. En azından o kanalda bir kablosuz ağ erişim noktasının var olduğunu görebilir. 



<length:  0> olarak görünen kablosuz ağ erişim noktaları isimlerini yayınlamayacak şekilde kurulmuştur. 


Yukarıda görülebileceği gibi bir saldırganın bu kablosuz ağ erişim noktasının adını kolayca görebilecektir. 

Kablosuz ağ erişim noktalarını kablosuz ağ ismini yayınlamayacak şekilde ayarladığımızda aslında ismin sadece kablosuz ağ erişim noktasının (wireless Access point veya Access point) tarafından gönderilen paketlerde görünmesi engellenir. Kablosuz ağ erişim noktasına bağlı bir istemci (laptop, el terminali, telefon veya tablet) olması halinde bu cihazından çıkan paketlerde erişim noktasının adı görünecektir. 
Saldırganın yapması gereken tek şey ortamı dinleyerek bir istemcinin bu kablosuz ağ erişim noktasına bağlanmasını beklemektir. 
Bu neredeyse hiç dikkat çekmeyecek bir yöntemdir ve saldırganın belli ölçüde sabırlı olmasını gerektirebilir. 
Saldırganın daha aceleci olduğu durumlarda ise kullanılan teknik “deauth” adı verilen bağlantı kesme paketlerini gönderdiğini görüyoruz. Bu durumda saldırganın amacı mevcut istemcilerin bağlantılarını kopartarak yeniden bağlanmalarını sağlamaktır. Bu bağlantı tekrar kurulurken, yine istemcinin göndereceği paketlerden kablosuz ağ erişim noktasının adını öğrenebilir. 

Kablosuz ağ erişim noktalarını tanımlayan 3 temel değer vardır; MAC adresi, erişim noktası adı (kablosuz ağ adı) ve yayın yaptığı kanal. Bu 3 değere sahip bir saldırgan kablosuz ağ erişim noktasının bir “ikizini” oluşturup “evil twin attack” (kötü kalpli ikiz) olarak adlandırılan bir saldırı gerçekleştirip istemcilerin kendine bağlanmasını sağlayabilir. 

Bu tür bir saldırıya karşı kendimizi korumak için yapabileceğimiz bazı şeyler şunlardır;
  • Kafe veya otel gibi herkese açık bir kablosuz ağa bağlanırken ilk denemede parolayı bilerek yanlış girin. Buna rağmen bağlanmanıza izin veriyorsa muhtemelen kötü niyetli bir ağ erişim noktasıyla karşı karşıyasınız.
  • "Bu ağı hatırla" veya "otomatik bağlan" gibi seçenekleri devre dışı bırakın. Bu sayede bilgisayarınız veya tabletiniz tanıdığını zannettiği bir erişim noktası bulduğunda otomatik olarak bağlanmaya çalışmayacaktır. 
  • Aynı kablosuz ağa bağlı olarak uzun süre çalışacaksanız belli aralıklarla bağlantıyı kesip yeniden bağlanmayı deneyin (önce yanlış parolayla) böylece hala doğru ağ erişim noktasına bağlı olduğunuzu teyit etmiş olursunuz.
  • Düzenli aralıklarla kuruluş içerisinde bulunan ağ erişim noktalarını tarayın (katları ve ortak alanları gezin) ve tanımadığınız, fazla veya sonradan ortaya çıkmış ağ erişim noktalarını tespit edin.
  • Kablosuz ağ trafiğinizi izleyip çok sayıda deauth paketi gönderen istemcileri tespit edecek bir mekanizma kurun. Bunun için herhangi bir şey satınalmanıza gerek yok, basit bir kaç betikle yapılabiliyor. 
  • Halka açık kablosuz ağlarda mutlaka güvendiğiniz bir VPN kullanın.

MITRE ATT&CK Gerçek Hayatta Ne İşimize Yarar?

  Rusya kaynaklı siber saldırılar webinarı sırasında üzerinde durduğum önemli bir çalışma vardı. MITRE ATT&CK matrisini ele alıp hangi...