Bad Bad USB

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.

Bad USB
Bad USB

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.

Bad USB
Bad USB

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.)

Bad USB
Bad USB

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.

Bad USB

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.

image_pdfShow this post in PDF formatimage_printPrint this page
43 comments
  1. üstad raspberry pi pico daha mantıklı deyilmi ona 3 d baskı ile bi usb kılıf bassak olmazmı

  2. 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

    1. 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.

  3. 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. 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]

    1. 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 :)

    1. 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.

  5. abi yazdığın sandisk usb yi aldım da sana zahmet kodlarını falan sırayla nasıl yapacağımıda yazarsan sevinirim.

    1. 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.

  6. 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 .

    1. Bilemiyorum, ben yazıma konu olan USB disk üzerinde çalışmıştım. Yazıyı yazan arkadaşa danışmayı deneyebilirsin.

  7. 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 ?

  8. 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.

    1. 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.

  9. 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.

  10. 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.

  11. Ö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 :)

    1. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like
Read More

e-Devlet Hacklendi mi?

If you are looking for an English version of this article, please visit here. Öncelikle yazının sonunda söyleyeceğimi başta söyleyeyim, “Hayır, hack-len-me-di!” Peki bu durumda vatandaş olarak rahat bir nefes alabilir misiniz ? Maalesef hayır. Bunun sebebini de yazının devamında okuyabilirsiniz. Zaman zaman hortlayan “e-Devlet Hacklendi!”, “e-Devlet verileri çalındı!”, “85…
Read More
Read More

LinkedIn Dolandırıcıları

If you are looking for an English version of this article, please visit here. Uzun yıllardan beri sosyal ağları ve medyayı etkin kullanan bir siber güvenlik araştırmacısı olarak bağlantılarım arasında yer alanlarınız özellikle hafta içi LinkedIn ve Twitter üzerinden okuduğum ve beğendiğim siber güvenlik makalelerini, haberleri paylaştıklarımı farkediyorlardır. Twitter hesabımın…
Read More
Read More

WhatsApp Dolandırıcıları

If you are looking for an English version of this article, please visit here. Başlangıç Son günlerde hemen hemen WhatsApp uygulaması kullanan herkesi rahatsız eden yabancı cep telefonu numaralarından gelen çağrılardan, mesajlardan ben de yakın zamanda nasibimi aldım ve tabii ki diğer dolandırıcılıklarla ilgili yazılarımda (Kripto Para Dolandırıcıları, LinkedIn Dolandırıcıları,…
Read More
Read More

Profilime Kim Baktı?

If you are looking for an English version of this article, please visit here. 23 Eylül 2020 tarihinde Twitter’da siber güvenlik ile ilgili haberlere göz gezdirirken gündem olan başlıklarda #profilimekimbaktı etiketi dikkatimi çekti. Beni oldukça şüphelendiren bu etiketin gündem olmasının arkasında yatan sebebi bulmak için bu etiketi paylaşan hesaplara göz…
Read More