Сообщение от
dev0id
Автор: dev0id
Дата публикации: 18.03.2004 г.
Название: Обнаружение работающей VMWare
Авторские права: UkR security team
Обнаружение работающей VMWare
Правильнее сказать, мы постараемся определить, запущено ли наше приложение из-под
виртуальной машины, а именно VMWare (www.vmware.com).
Для чего это нужно: достаточно часто системы ложной атаки устанавливаются именно на
виртуальные машины. Таким образом, достаточно сложно причинить реальный вред
машине – хосту, на которой размещена реальная система.
Системы, а зачастую и целые сети, ложных атак часто применяются, скорее, не для
защиты реальных стратегических объектов, а для «отвлечения» внимания противника и
ведения некой сенсорной работы: своевременного определения проникновения
атакующего в систему (сеть).
В качестве виртуальной машины обычно используется один из самых мощных
программных продуктов этого класса – система VMWare.
Целью данной статьи является показать системным администраторам, насколько системы
ложных атак, сенсорные системы и системы сигнализирования на основе данного
программного продукта незащищены.
Дело в том, что существует встроенный в vmware механизм общения c оригинальной
машиной, то есть машиной, на которой эта система установлена. Данный механизм
используется программными средствами VMware-Tools.
Описание данного механизма можно прочесть на этой странице:
http://chitchat.at.infoseek.co.jp/vmware/vmtools.html
коротко о нем ниже:
взгляните на приведенный код
MOV EAX, 564D5868h ; Магическое число
MOV EBX, Специфические_параметры_ко манды
MOV ECX, Номер_команды
MOV DX, 5658h ; Номер порта
IN EAX, DX
Данный метод основан на использовании специфического порта с номером 5658h. Данный
порт является своеобразным шлюзом между виртуальным миром Vmware и реальной
машиной. В этот порт посылается специфическое число (магическое число, если угодно),
на которое реагирует система виртуальной машины и выполняет номер команды,
переданный через регистр ecx с переданными параметрами через регистр ebx. Кстати
говоря, это магическое число равно следующей последовательности символов: “VMXh”.
После выполнения команды результат передается виртуальной машине также через
регистры. Анализируя эти регистры, мы можем не только определить, выполнилась ли
команда и получить результат, но и определить, выполняется ли наша программа в среде
VMware.
Среди действительно «опасных», с точки зрения безопасности обнаружения VMware,
функций следует отметить две: определение версии VMware и вывод POPUP сообщения о
том, что загрузочный диск недоступен.
Первая возвращает в регистрах eax и ecx версии программы. При этом в регистре ebx
возвращается магическое число. Таким образом, используя данную функцию, мы можем
определить, загружен ли VMware.
Вторая функция выводит на экран сообщение и замораживает работу всей виртуальной
машины до того времени, пока пользователь за рабочей машиной не нажмет на кнопку
ОК.
Тем самым мы можем заблокировать работу системы сигнализирования.
Данные знания можно использовать в реализации эксплуатирующих программ, а именно в
написании шеллкодов:
setuid(0) //shellcode
movl $0x564D5868,%eaex // magic number
xorl %ebx,%ebx
xorl %ecx,%ecx
//function number
movb $0xA,%cl
xorl %edx,%edx
//port number
movw $0x5658,%dx
in %dx,%eax
cmpl $0x564D5868,%ebx
jne $original_code
movl $0x564D5868,%eaex // magic number
xorl %ecx,%ecx
//function number
movb $0x12,%cl
xorl %edx,%edx
//port number
movw $0x5658,%dx
in %dx,%eax
//finish!
jmp $exit_or_destruction_code
original_code:
//put your original_box_code here
//goto exit
jmp $exit
exit_or_destruction_code:
//here we do something
//exit or destroy this box
exit:
//exit
Единственной проблемой данного метода является то, что мы не пожжем получить доступ
к портам ввода вывода без особых привилегий, именно по этому в первую очередь мы
должны повысить свои привилегии.