If you are looking for an English version of this article, please visit here.
Her yıl, Ağustos ayında, ABD’nin Las Vegas kentinde düzenlenen geleneksel Black Hat Bilgi Güvenliği Konferansı‘nın sonuncusunda, Karsten NOHL ve Jakob LELL adındaki iki araştırmacı, BadUSB adında dikkat çekici bir sunuma imza attı.
Bu sunumda kısaca, USB’de yer alan mikrodenetleyici tarafından kullanılan donanım yazılımının (firmware) yamalanarak (patch) beklenenden farklı bir şekilde çalışması (hedef sistem üzerinde komut çalıştırma gibi) sağlanmış. Bunun için araştırmacılar öncelikle bu mikrodenetleyici tarafından kullanılan donanım yazılımını temin etmişler ardından Wireshark yardımı ile donanım yazılımı güncellemesi esnasında kullanılan komutları tespit etmişler. Daha sonra 2 aydan kısa bir süre içinde donanım yazılımını tersine mühendislik ile analiz ederek, orjinal donanım yazılımında yer alan ve kullanılmayan alanlara kendi komutlarını yükleyerek (notepad aç, şunu yaz, x sitesinden şu zararlı yazılımı indir ve çalıştır gibi) yeni bir donanım yazılımı oluşturup bunu USB belleğe yükleyip, işlemi tamamlamışlar. Bundan sonra hedef sisteme takılan USB bellek, veri depolamanın haricinde kullanıcının donanım yazılımı ile belleğe yüklemiş olduğu komutları çalıştırarak sistem ile etkileşime geçebilmiş.
Peki bunun daha önce üzerine yazı yazdığım ve yine hedef sistem üzerinde USB bağlantı noktasından takıldığı taktirde komut çalıştırmaya imkan tanıyan Teensy‘den veya USB Rubber Ducky‘den ne farkı var ? Pratikte pek bir farkı bulunmuyor. BadUSB ile gerçekleştirilen sosyal mühendislik testlerinde diğerlerine kıyasla hem sistemsel hem de görüntü itibariyle yakalanma/tespit edilme olasılığı görece biraz daha düşük olabiliyor. Maliyet açısından da bakacak olursak, BadUSB’nin 20$’lık Teensy’den, 40$’lık Rubber Ducky’den daha ucuza mal edilebileceğini görebilirsiniz.
BadUSB ile ilgili çalıştırma yapan araştırmacıların web sitesini ziyaret edecek olursanız bu çalışmaya ait POC (proof-of-concept) kodlarını yayınlamadıklarını görebilirsiniz. Benim gibi ben de bir BadUSB oluşturmak istiyorum diyenlerin üzülmesine gerek yok çünkü Adam Caudill ve Brandon Wilson adındaki iki güvenlik araştırmacısı da benzer bir çalışma yaparak bunu Eylül ayının sonlarına doğru DerbyCon isimli Bilgi Güvenliği Konferansı’nda sundular ve araştırma esnasında geliştirdikleri araçlarını da kaynak kodları ile birlikte GitHub‘a yüklediler.
Sunum dosyasına ve kodlara baktıktan sonra ben de bir BadUSB oluşturmak için işe koyuldum. Araştırmacıların kullandığı Phison marka mikrodenetleyiciye sahip Patriot marka Xpress model USB bellek Türkiye’de olmadığı için Amazon‘dan sipariş ettim.
Sunum dosyasına bakacak olursanız araştırmacıların Phison’un PS2251-03 modeli üzerinde çalıştıklarını görebilirsiniz dolayısıyla geliştirmiş oldukları aracın çalışabilmesi için kullanılacak olan USB belleğin bu model mikrodenetçiye sahip olması gerekmektedir.
USB bellek geldikten sonra Phison’un modelini GetInfo aracı (veya Chip Easy aracını da kullanabilirsiniz) ile kontrol ettiğimde modelin farklı olması nedeniyle hüsrana uğradım ve bu defa Phison marka PS2251-03 model USB bellek avına çıktım.
Benim gibi dünyada birçok kullanıcının ava çıkması ve araştırmacılara geri bildirimde bulunmaları sayesinde araştırmacılar, BadUSB olma potansiyeline sahip USB bellekleri bir listede toplamaya karar vermişler. Bu listeyi ara ara kontrol ederken, tesadüfen Teknosa’da gezerken gördüğüm Sandisk Ultra 16 GB USB belleği (SDCZ48-016G-U46) satın almaya (24 TL) ve modeline bakmaya karar verdim. Büyük bir hevesle paketini açıp, GetInfo aracı ile baktığımda Phison’un modelinin desteklenen model yani PS2251-03 olduğunu gördükten sonra GitHub sayfasında yer alan BadUSB yaratma adımlarına geçtim.
Adımlardan birinde yaptığım dikkatsizlikten dolayı aldığım bu diski çöpe atmak zorunda kaldım :) Ardından bu defa biraz daha temkinli davranarak iki tane daha Sandisk Ultra aldım ve yine bir dikkatsizlik sonucunda disklerinden birini daha çöpe atmak zorunda kaldım. Allah’ın hakkı üçtür diyerek BadUSB oluşturma adımlarını dikkatlice devam etmeye karar verdim. Donanım yazılımını derledikten sonra sıra Ruby Ducky formatında bir komut kümesi oluşturmaya geldiğinde, Duckencoder aracı ile, çalıştır (run) -> notepad -> Mert SARICA yazan basit bir komut kümesi oluşturdum. (ReadMe dosyasında yer alan Running Demo 1 (HID Payload) başlığı altında yazılanları yaptım.)
Sonunda aşağıdaki tüm adımları başarıyla geçtikten sonra BadUSB oluşturmayı başardım :) Sandisk’in Ultra modelinde ne yazık ki donanım yazılımı bir defa güncelleme şansınız oluyor dolayısıyla şimdilik tek atışlık bir hakkınız var fakat bu konuda çalışmalar devam ediyor dolayısıyla elinizin altında sosyal mühendislik testlerinde kullanmak üzere bir tane bu marka model USB bulundurmanız faydalı olabilir.
Peki kurum olarak BadUSB’ye karşı hangi önlemleri alabiliriz diye soracak olursanız, kurum genelinde USB kullanımını yasaklayabilirsiniz. Bu mümkün değil ise de sadece IronKey gibi donanım yazılımı güncellemesine karşı imza kontrolü yapan ürünleri kurum genelinde kullanmayı tercih edebilirsiniz.
Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.
Not: BadUSB’ye dönüştürülmüş USB ile ilgili hazırlamış olduğum videoyu aşağıdan izleyebilirsiniz.
43 comments
5
2014 yeni fark ettim D
üstad raspberry pi pico daha mantıklı deyilmi ona 3 d baskı ile bi usb kılıf bassak olmazmı
Anladım hocam teşekkürler
Hocam Merhaba,
Bende sizin yaptığınız gibi bir bad usb yapmaya çalıştım fakat bazı hatalar ile karşılaştım.
Öncelikle aynı usb bellekten aldım. Sandisk’ in SDCZ48-016G-U46 modeli.
Usb belleğin mikrodenetleyicisinin modelini öğrenemedim. Sizin kullandığınız programlar başta olmak üzere hangi programı denediysem program usb belleğin mikrodenetleyicisinin modelini öğrenemedi. Chip modeli bilinmiyor diye hata veriyordu. Chip modelini öğrenmeden devam etmek istedim ama bu seferde SendExecutable bölümüne geldiğimde hata aldım.
Hata şu:
Action specified: SendExecutable
FATAL: System.InvalidOperationException: DeviceIoControl failed: 0006
konum: DriveCom.PhisonDevice._SendCommand(SafeFileHandle handle, Byte[] cmd, Byte[] data, Int32 bytesExpected) c:\Users\Abdulaziz\Documents\Visual Studio 2013\Projects\Psychson-master\DriveCom\DriveCom\PhisonDevice.cs içinde: satır 365
konum: DriveCom.PhisonDevice.SendCommand(Byte[] cmd, Byte[] data) c:\Users\Abdulaziz\Documents\Visual Studio 2013\Projects\Psychson-master\DriveCom\DriveCom\PhisonDevice.cs içinde: satır 314
konum: DriveCom.PhisonDevice.TransferFile(Byte[] data, Byte header, Byte body) c:\Users\Abdulaziz\Documents\Visual Studio 2013\Projects\Psychson-master\DriveCom\DriveCom\PhisonDevice.cs içinde: satır 246
konum: DriveCom.PhisonDevice.TransferFile(Byte[] data) c:\Users\Abdulaziz\Documents\Visual Studio 2013\Projects\Psychson-master\DriveCom\DriveCom\PhisonDevice.cs içinde: satır 238
konum: DriveCom.Startup._ExecuteImage(String fileName) c:\Users\Abdulaziz\Documents\Visual Studio 2013\Projects\Psychson-master\DriveCom\DriveCom\Startup.cs içinde: satır 403
konum: DriveCom.Startup.Main(String[] args) c:\Users\Abdulaziz\Documents\Visual Studio 2013\Projects\Psychson-master\DriveCom\DriveCom\Startup.cs içinde: satır 109
Muhtemelen bu tespitten sonra donanım yazılımını güncelledikleri ve elindeki USB aygıt da güncel olduğu için 8 yıl sonra işe yaramıyordur.
Sandiskler muhtemelen ikinci kez programlanamaz. Neden diye soracak olursanız, muhtemelen OTP memory’leri olduğundan, Yani One-time programmable memory. Tek bir kez programlanıyor. Aynı PADAUK’un MCU’ları gibi.
4.5
arkadaşkar ben bu işin üzerine mastır yaptım nerdeyse fakat usb bir türlü bulamadım. bnde aynısını arduino ile yaptım. tabi bu kadar kucuk değil(kibrit kutusundan az büyük.) fakat aynı işlevi görüyor. bu kadar programlada uğraşmıyorsunuz.
MAİL:[email protected]
Arduino ile nasıl yaptın buna dair bi vido yayınlasan hiç bir yerde bulamadım bende Arduino ile yapmayı düşünüyorum anlatırsan sevinirim :)
Maalesef bu konuya özel ayıracak zamanım yok.
hakkını helal et abi hep rahatsız ediyorum ama son bi soru daha usb yi 2.0 mı takayım yoksa 3.0 a mı
Farkedeceğini sanmıyorum.
abi en alttaki 3 resim var ya onları sırayla mı yapmalıyım
Evet.
Yazıda pek açıklayıcı olmadığı için sormuştum yinede teşekkürler.
Aradan 2 yıl geçtiği ve elimde artık o USB olmadığı için yazıda yazılanlar dışında yardımcı olamayacağım. Destek için BadUSB https://github.com/brandonlw/Psychson/issues sayfasını ziyaret edebilir, sorularını oradakilere iletebilirsin.
bir şey daha soracağım en sondaki resim deki kodlarımı uygulamalıyım
Yazıda yazılanları baştan sona adım adım yapmalısın.
baktım controllerı PS2251-03 doğru usb
Aradan 2 sene geçtiği için yazıda yazılanlar hala güncelliğini koruyor ise yazıda yazılanları harfiyen uygularsan çalışacaktır.
abi yazdığın sandisk usb yi aldım da sana zahmet kodlarını falan sırayla nasıl yapacağımıda yazarsan sevinirim.
Yazıda zaten açıkça hangi adımlardan geçmen gerektiği yazıyor.
Yeni almış olduğun USB’nin PS2251-03 olmayacağını tahmin ediyorum bu sebepe öncelikle onu kontrol etmeli ve emin olmalısın.
Eğer yazıdaki ile model aynı değil ise zaten işe yaramayacaktır.
adam rubber ducky ile yapmıyor ki
TOSHIBA TransMemory-MX USB 3.0 8gb
ile yapıyor ben bunu sormuştum
Bu usb ile oluyormu .
Bilemiyorum, ben yazıma konu olan USB disk üzerinde çalışmıştım. Yazıyı yazan arkadaşa danışmayı deneyebilirsin.
Bir şey daha sormak istiyorum
http://www.turkhackteam.org/elektronik-gadget/1377220-hackerin-alet-cantasi-1-usb_drive-p0-c.html bu link teki anlattılanlara göre yazılımı tekrar güncelleyebiliyor sizce doğrumu teşekkürler..
Mevzu bahis Rubber Ducky ise öyle olması gerekiyor.
Bunu başka herhangi bi usb ile yapabiliyormuyuz?
Phison’un PS2251-03 mikrodenetleyicisini kullanıyorsa evet.
Rica etsem bahsettiginiz usb nin fotorafini yada ozelliklerini yazabilirmisiniz. Soylediginiz urunu Phison’un resmi sistesinde aradim fakat bulamadim. Ayrica GetInfo ozelliginin tam olarak hangi ozelligine bakmam gerekiyor alirken ?
Yazıda hepsi yer alıyor, tekrar okumanızı öneririm.
Satin almak istedigim siteye ile gorustum. Ellerinde ‘HandyDrive Patriot 32GB Supersonic Boost 150MB/S USB 3.0″ bu urununde sinirli stocta bulundugunu belirtiler. Bununda yazilabilecegi bilgisi verildi fakat bir bilene danismadan, almak istemiyorum.
Yazıda belirttiğim GetInfo aracının çıktısını görmeden tam olarak emin olmak pek mümkün değil bu nedenle ben de net birşey söyleyemiyorum.
Patriot markasi ile her zaman yazilabilecegini yazmissiniz. Bunun ustune \”Patriot HandyDrive 16GB Slate USB 3.0\” siparisinde bulunacagim. Fakat bu urunun her zaman yazilip yazilip yazilamayacagi aklima takildi ve size danismak istedim. Yardimci olursaniz sevinirim.
Phison’un PS2251-03 modelini kullanıyorsa yazılabilir diye düşünüyorum.
Merhaba bu işlemleri yapınca mevcut usb diske depolama yapabiliyor muyuz?
Bildiğim kadarıyla hayır.
Bu gün USB Rubber Ducky sipariş ettim inşallah bir ara elime geçer sağolsunlar $66 aldılar taşıma için kendisi $40 :) bari çabuk getirseler.
Öncelikle bayadır bekliyordum yazıyı yazsanızda bizde yapsak diye :) güzel olmuş beğendim hatta bugün bir tane bahsettiğiniz usb den sipariş verdim yarın elime geçtiğinde adımları uygulayacağım. Fakat aklıma takılan bir soru var: yazılım bir kere güncelenebiliyor demişsiniz. Bunun anlamı şumu: şuan sizin oluşturmuş olduğunuz usb ile bir notepad açıp mert sarıca yazıyor ve bu yaptığı işlemi değiştiremiyorsunuz. Daha açık olursam :) siz şuan oluşturduğunuz BadUSB yi bir rubber ducky’deki gibi içindeki yazılımı Duckencoder ile istediğim zaman değiştirebiliyor muyum. Yoksa her yeni bir işlev için yeni bir usb mi gerekiyor. Teşekkürler :)
Mevcut yazılım ile Sandisk Ultra için tek bir defa değiştirme hakkınız var fakat eğer elinizde araştırmacılarda olduğu gibi Patriot marka USB olsaydı o zaman istediğiniz kadar yazabilirdiniz fakat onu da piyasada bulmak güç. Belki araştırmacılar yazılımlarını güncelleyerek bu tek seferlik yazma sorununu Sandisk için ortadan kaldırabilirler. Hem araştırmacıların hem de bu diğer marka USBler üzerinde çalışanların güncellemelerini beklememiz gerekecek gibi görünüyor.
Çok güzel :)
Teşekkürler güzel bir çalışma olmuş,
Rica ederim.