• XSS.stack #1 – первый литературный журнал от юзеров форума

Хак виртуальной машины RarVM внутри WinRAR

incode

floppy-диск
Пользователь
Регистрация
15.09.2012
Сообщения
6
Реакции
0
Специалист по безопасности Тэвис Орманди покопался в коде архиватора WinRAR и разработал инструментарий для встроенной в архиватор виртуальной машины RarVM.

Мало кто знает, что внутри WinRAR есть примитивная x86-совместимая виртуальная машина. В ней всего около 50 инструкций, а вся виртуальная машина со стандартными фильтрами занимает чуть больше 1000 строк. Она реализована внутри архиватора с одной целью: улучшить сжатие x86-кода. Например, представим программу вроде такой.

Код:
 mov foo, bar
 cmp bar, baz
 push foo
 call write
 push bar
 call write
Повторяющиеся вызовы можно транслировать в абсолютные адреса и более эффективно заархивировать. Поэтому в RAR есть фильтры для десятка стандартных вызовов. Более того, в нём есть возможность создания новых фильтров в процессе архивации! То есть в архив RAR можно включать байткод, который будет исполняться встроенной виртуальной машиной RarVM.

До сих пор не существовало программ, которые бы использовали эту необычную функциональность, поэтому Тэвис Орманди разработал компоновщик и ассемблер, опубликовал документацию для работы с RarVM, в скором будущем планирует выпустить ещё дизассемблер и, может быть, портировать компилятор на основе llvm.

Пример программы, которая выводит классическое “Hello, World!” за счёт CRC-компенсации в проверке CRC.

Код:
 $ cat sample.rs
 #include
 #include
 #include
 #include
; vim: syntax=fasm

; Test RAR assembly file that just demonstrates the syntax.

 _start:
; Install our message in the output buffer
 mov r3, #0x1000; Output buffer.
 mov [r3+#0], #0x41414141; Padding for compensation
 mov [r3+#4], #0x0a414141; Padding for compensation
 mov [r3+#8], #0x6c6c6548; 'lleH'
 mov [r3+#12], #0x57202c6f; 'W ,o'
 mov [r3+#16], #0x646c726f; 'dlro'
 mov [r3+#20], #0x00000a21; '!\n'
 mov [VMADDR_NEWBLOCKPOS], #0x00001000
 mov [VMADDR_NEWBLOCKSIZE], #22

; Compensate to required CRC
 push RAR_FILECRC
 push [VMADDR_NEWBLOCKSIZE]
 push [VMADDR_NEWBLOCKPOS]
 call $_compensate_crc
 test r0, r0
 jz $finished
 call $_error

 finished:
 call $_success
 $ make sample.rar
 cpp -Istdlib < sample.rs > sample.ri
 ./raras -o sample.ro sample.ri
 ./rarld sample.ro > sample.rar
 rm sample.ri sample.ro
 $ unrar p -idq sample.rar
 AAc��!A
 Hello, World!
d0358a288a27.jpg


Источник: https://xakepy.cc/content.php?r=4396-%D5%E0...F2%F0%E8-WinRAR&copy; Copyright
Таки думаю скоро появится реализация...
 
эм... по сути это может перерости в уязвимость... ведь возможность выполняться коду в контексте вин рара может повлечь за собой заранее спланированный код, в простейшем даулоадер-дропер который запустит уже сформированный ехе...
 
ну даже пусть так... можно создать благоприятные условия чтобы захотелось запустить прям из среды вин рара.. вообщем это обдумываемо
 
Пожалуйста, обратите внимание, что пользователь заблокирован
оно срабатывает именно при распаковке файла вин-раром.
Простейшая идея - несем в себе ядовитый рар, и отдаем его на лету на распаковку.

Не тригерит uac, не требует админа и пр. И пока что прозрачно для аверов.
Минус - нужен вин-рар на машине.
Плюс - покажите мне пк без винрара)

Так же, при запуске из архива файлов ехе (и еще нескольких расширений, не помню каких) по-умолчанию распаковывается все содержимое архива, вместе с ядовитым файлом.
 
А как ты его "на лету" отдашь на распаковку? Хотя как шеллкод через связку, которая грузит рар-архив и потом ShellExecute. А так если из дропнутого ехе будешь делать подобное, то детект на создание процесса будет.

з.ы.: комп без винрара :P
 
Тут тема даже круче чем кажется на первый взгляд.
Подумайте только про то, что аверы не могут раскрутить запароленные архивы это раз, второе можно действовать узконаправленно т.е. например спам мыл етц.
Далее шеллкод можно написать чтобы качал и инжектил что то в память сразу, к тому же винрару:)

Теперь думаю появятся ядовитые запароленные sfx... ну хотя пока кто-то годный шеллкод не выложит в публик, этими уязвимостями масса не сможет воспользоваться.
 
там видать что то уже завязанно на этой вм, не просто так же её внедряли. Да и как показывает практика винрару обновление не нужно особо, т.е. те у кого уже есть он врядли будут качать хотфиксы.
а значит ниша свободна:) винраршеллкодесэксплоиты в бой;)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ну там описывается раровский асм в сравнении с x86
тоже 8 регистров r0-r8, в качестве esp выступает r7
также можно обращатся к памяти, причом возможна запись из памяти в память.
црц при создании нужно учитывать иначе получим сообщение что файл поврежден.
вопрос тут лишь о выходе за пределы вм, если удастся найти подобную багу то можно
писать сплоеты срабатывающие при открытии архива
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ragnar, вопрос возможно глупый, но все же.
Если наш код может отвечать за распаковку, можем ли мы вернуть симлинк вместо папки, уже после всех проверок? (и после этого распаковать свой файл в системную диру)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх