BlackHat 2014 konferasından gösterilen bir “proof of concept” çalışma, BadUsb adında. SR Labs’dan iki kişi bir USB belleğin içerisine farklı kodlar ekleyerek, USB belleklikten fazlasını yapmasının önünü açmış.

Bütün teknoloji basını da “oo açık, alırım bir dal” diyerek buna abandı; Heartbleed ve Shellshock (ki ikisi de gerçek bir açıktı)’tan aldıkları trafik tatlı geldiği için. Bir örneği şurada: http://www.wired.com/2014/07/usb-security/

Başlık “Why the Security of USB Is Fundamentally Broken”. Görünce istemsizce aklıma “USB’de öyle bir şey oldu ki…” formatındaki Türk haber siteleri geldi. Neyse.

Detay olarak mevzu, kuzu postundaki kurttan ibaret. A işini yapacak bir cihaz takıyorsunuz bilgisayarınıza, A işini yapıyor da o cihaz, fakat size hissettirmeden B işini de yapıyor.

 

Şimdi bu zaten tech savvy bir çocuğun eline Arduino verildiğinde yapabileceği bir hikaye. Burada bir açık yok.

Açık olan kısmı, USB bellek olarak üretilen cihazın içine fiziksel müdahalede bulunmaksızın bu farklı kodu ekleyebilmek ise, bu da o USB diskin kontrolcüsünü üreten firmanın açığı olsun. Tüm USB standardına bunu maletmeyi anlamadım. Bahsi geçen açık, USB enumeration safhasından önce ya da bunu atlayarak bilgisayar ile konuşma / veri alma falan olsa anlayacağım.

USB cihazın firmware’ının değiştirilmesi mevzusu da pek az cihazda yapabileceğiniz bir mevzu. Çünkü ucuzcu üreticiler, maliyetten maksimum kısabilmek adına “field programmable” kontrolcüler kullanmıyorlar. Genelde firmware mask ROM’da, yani entegrenin içinde fiziksel olarak (taşa kazımak gibi düşünün) bulunuyor. Fare, klavye gibi içinde “blob” tabir edilen epoksi kaplı entegreler barındıran cihazlarda bunun olma ihtimali yok.

Maksat kullanıcıyı o şeyi bilgisayarına takması için ikna etmek.  

Ben pazardan bir USB bellek alarak içini söküp, kendi yazdığım firmware’ı çalıştıran bir entegre barındıran PCB de koyabilirim, aynı şey.

Öte yandan bir USB cihazda birden fazla endpoint olduğu zaman tüm endpointler için ayrı ayrı driver devreye girer. Yani taktığınız USB bellek, bir USB HID device da oluşturuyorsa bunu device tree’da ya da Windows’çası “device manager”da zaten göreceksiniz. Yani o kadar gizli de değil, az bilgisayardan anlayan farkedebilir.

Makalede geçen “can be installed on a USB device to completely take over a PC”, eğer ki ben ciddi bir noktayı atlamıyorsam, bu bahsi geçen açıkla yapılabilecek bir şey değildir. En olacağı söyleyeyim, bir USB cihazını USB HID ve Mass Storage olarak gözükecek şekilde programlarsınız.
a. Storage mount olduktan sonra HID endpointi ile PC’ye keypress göndererek hızlıca mount edilen diskteki malware’i çalıştırabilirsiniz. Autorun’unun kapalı olması vs. konusunu aşarsınız burada ancak.
b. Yine aynı HID endpointi ile command line açıp Internet’ten bir malware backdoor indiren ve çalıştıran komutları yazarsınız.

İki durumda da
a. kullanıcı bunu farkedecektir çünkü ekranında bir şeyler olup bitiyor olacak. Tabii ki çok hızlı bir şekilde halledilebilir, ancak maksimum verimliliğe sahip bir sistem olabilmesi için keypresslar arası bırakılacak boşluğu makul ayarlamak gerekecektir. Cihazın takılacağı bilgisayarın hızı önem arzediyor. (Hatta örnek: Windows sistemde bir commandline açıp içine komut yazıp çalıştıracağız diyelim, gönderilecek keypresslardan ilki windows+r tuşu, sonrasında “Run” penceresinin gelmesi için gereken süre kadar beklenmesi gerekiyor. Ahmet’in i7 ve canavar SSD’li makinasında 70ms sürdü diyelim, fakat Ayşe’nin PIII ve yavaş diskli makinasında belki 1 saniye sonra gelecek. Malware yazarı tüm bilgisayarlarda çalışabilsin diye 1 saniye bekleyebilir. Fakat beklemenin artması, kullanıcının yapılan şeyi farketmesi ihtimalini çok yüksek şekilde de artıracak.)
b. Bir antivirus yazılımı varsa indirilen/çalıştırılan malware’ı büyük ihtimalle engelleyecek.
c. kullanıcı malware yazarının düşündüğü işletim sisteminden farklı bir şey kullanıyorsa, işlevsiz olacak.

 

 

Formata uymak adına tanım verelim; olmayan açıktır.