Цель данной статьи – показать небезопасность формата chm, а также прочих сходных (its, mht). Речь идёт о том, что подобные файлы могут носить в себе вредоносное ПО. К статье будут приложены доказывающие данное утверждение рабочие примеры. Статья рассчитана на широкую аудиторию, однако значительная часть материала будет требовать специфических знаний (программирование на Delphi, далеко не поверхностное знание ОС Windows). Терминология: HTMLHelp (Microsoft Compressed HTML Help, .CHM) — формат файлов контекстной справки, разработанный компанией «Майкрософт» и выпущенный в 1997 году в качестве замены формата WinHelp. Содержит в себе набор HTML-страниц, может также включать в себя содержание со ссылками на страницы, предметный указатель, а также базу для полнотекстового поиска по содержимому страниц. Все входящие в .CHM файлы сжаты алгоритмом LZX. Для просмотра .CHM-файлов используется стандартное средство просмотра, встроенное во все версии Windows, начиная с Windows 98 [1]. ITS - файл internet document set, открываемый Internet Explorer. MHT – веб-архив, подобен its, открывается Internet Explorer. ActiveX - технология Microsoft, предназначенная для написания сетевых приложений [2]. Введение. Всем нам известно, какие расширения файлов могут нести угрозу. Типичные приложения-вирусы могут скрываться в *.exe, *.scr, *.pif, *.com, *.bat, *.cmd. Обычно, опытный пользователь избегает запускать файлы с данными расширениями, пришедшие из ненадёжных источников. Да и вообще любой новый исполняемый файл на своём компьютере проверит антивирусом. Пользователь знает, что вирус может находиться там. Только начинающие могут вот так вот запросто запустить экзешник (если антивирус позволит, а позволит он, если вирус будет, к примеру, закриптован). Но даже самый опытный пользователь никак не ожидает, что опасность может храниться в обычном, скажем так, текстовом файле. Он спокойно его запускает. Конечно, есть мысль: ассоциировать текстовый файл, как исполняемый. Но для этого необходим доступ к реестру компьютера пользователя и внесение там изменений. Ясно, что это не годится. Вот пользователь зашёл в Internet и грузит оттуда странички. И знает, что если появилось в Internet Explorer сообщение о загрузке ActiveX, то нужно отклонить. Сохраняет странички на диск. Но html-ки с хакерского портала просто так не сохранит, а проверит – он ведь знает о JS (JavaScript)-вирусах. А вот возьмёт читать мануал по Windows, а он – в формате chm. Но запустит этот мануал.chm без колебаний, зная о том, что chm – всего лишь справка, компилированная html-страничка. И не додумывается о том, что в chm работает и тот же JavaScript и ActiveX. Я проводил опрос (Табл.2), в ходе которого, увы, выяснилось, что файл chm не рассматривается, как опасный большинством опрошенных (с умением работы на компьютере). Такая позиция опрошенных не верна. Сейчас я расскажу, почему и укажу опасность ActiveX для chm и подобных ему форматов. Суть. Исходя из того, что chm может содержать в себе целый сайт со всеми скриптами и прочими элементами, такими как ActiveX, делаем вывод – запуск chm-файла не менее опасен, чем загрузка странички из Internet. Продолжая рассуждения дальше, вспомним, что происходит при попытке загрузки ActiveX из Internet? Появляется запрос подтверждения действия запуска неподписанного ActiveX. Теперь обратим внимание на встроенное средство просмотра chm. Оно при запуске файла распаковывает его и открывает документ в окне, являющимся универсальным системным окном Internet Explorer. В Internet Explorer имеются ограничения, такие, как выдача запроса или даже блокирование ActiveX из ненадёжных узлов. Это справедливо, когда файлы открываются им из Internet. Однако в нашем случае Internet Explorer открывает локальные документы. И окно подтверждения при загрузке ActiveX (на большинстве версий, во всяком случае, Windows XP) по умолчанию, как правило (Табл. 1), не появляется. А запуск ActiveX фактически даёт такие же возможности, как и при запуске любого приложения. Получается, что chm=exe в (0,5875*(1-0,386))*100%=36,1% случаев? (Согласно Табл. 1 и Табл.2). Это применимо не только к chm, а и к схожим форматам – its и mht. Для защиты пользователю необходимо в свойствах Internet Explorer поставить для всех зон обязательный вывод подтверждения при загрузке любых ActiveX. Теперь рассмотрим создание примерного chm-файла с ActiveX – начинкой, извлекающей и запускающей обычное exe-приложение. То есть запустил chm, а получил запуск exe. Для создания chm-файла из веб-страницы нам понадобится программа htm2chm [3]. Для создания ActiveX нужен Delphi. Редактировать ресурсы будем ресторатором. Для остального хватит и блокнота. Программирование ActiveX. Запускаем Дельфи. Далее выбираем File/New/Other/ActiveX/Active Form, задаём название проекту и форме в диалоге. И появляется обычная форма. Но она практически нам не нужна. Скрываем её (делаем размеры формы минимальные). Затем ставим на форму таймер и на onTimer ставим процедуру извлечения ресурса в файл и запуск файла. Компилируем и выбираем View/Type Library/ - там GUID нашего ActiveX. Он понадобится дальше. Вот и всё. Берём скомпилированный ActiveX и с помощью ресторатора вставляем в него ресурс (как задано в функции извлечения). После создаём html-страничку с любым содержимым и обязательной строкой: Code: <object classid="clsid:899A34EE-438E-42A9-8F59-5E2983233E0F" codebase="gotovo.snd"> </object> где 899A34EE-438E-42A9-8F59-5E2983233E0F – наш GUID, а gotovo.snd – имя файла с ActiveX. Всё сохраняем в одной папке и компилируем в chm-файл с помощью программы htm2chm. К вышесказанному прилагается пример описанного ActiveX с исходными кодами и готовая демонстрационная chm такого рода с описанием. Заключение. В общем, хочу сказать, что не встречал применения такого метода с chm. Всё это было изложено с целью упреждения использования такого метода против пользователей. Ведь может быть не только применение chm, как хранителя и извлекателя вредоносного файла, но использование для непосредственной модификации структуры прочих имеющихся файлов chm таким образом, что и они станут вредоносными – появление нового класса самораспространяющихся вирусов. Написал статью, приготовил примеры и провёл небольшое исследование со статистической обработкой begin end, 15.03.2007. Ссылки: 1. http://ru.wikipedia.org/wiki/HTMLHelp 2. http://www.emanual.ru/show/55/ 3. http://htm2chm.by.ru/ Таблицы: Табл. 1 - успешность запуска на компьютерах Табл. 2 - доверие опрошенных к *.chm Примеры к части статьи "Программирование ActiveX": "Примерный сборочный комплект". Демонстрационный продукт. __________________ Добавлено: Поскольку появились вопросы такого плана в ходе создания Active X: "Я создал ActiveX, гружу из паги его и всё работает. Но когда изменяю его заменяю старый новым и снова гружу изменений нету. Почему?" То немного дополню вышеизложенную статью следующими рекомендациями: 1. При первом запуске Active X, он кэшируется операционной системой в папке вида: C:\WINDOWS\Downloaded Program Files\ под тем именем, под которым был запущен. Потому, при изменении его в источнике зарузки, но прежнем GUID, он грузится из кэша. Устранением проблемы может быть: удаление файла из кэша, удаление записи из реестра или смена GUID. 2. Active X должен производить какие-либо действия только по таймеру. 3. Уменьшить размер поможет упаковка с помощью любых пакеров. К тому же можно создавать Active X и на том же С++, VB.
вообще то, ниче нового тут не описано, года 3-4 назад такя уязвимость публиковалась.. появились еще тогда и сплоиты (и до сих пор их нередко юзают), например, семейства Exploit.CHM (котороых уже, наверно, десятки разновидностей), служащие как раз для распространения малвар этим способом..
Или вообще отключить. Это помогает, но, как выяснилось, далеко не всегда. Если its и mht открывает непосредственно Internet Explorer, то в chm он загружается в саму оболочку chm, как ActiveX и отключнение в нём ActiveX не всегда происходит. Варианты защиты: 1. Экстренный, но верный и простой. Создать в директории Windows файл "Downloaded Program Files", предварительно удалив одноименную папку. Это не позволит загружаться в Internet Explorer любым ActiveX и легковыполнимо даже малоопытными пользователями. 2. Альтернативный. Использовать иное средство просмотра chm, не основанное на Internet Explorer. 3. Оптимальный. Установить все обновления Windows, полностью активизировать защитные свойства данной ОС. Если будут дополнения или критика, просьба отписаться.
Формат chm это фактически архивный формат. В одном chm-файле есть и файлы, и папки. Открыв его блокнотом мы, естественно, получим набор нечитаемого кода. Просмотреть структуру chm-а позволяют некоторые плагины к файловым менеджерам. Извлечь оттуда файлы можно также с помощью этих плагинов либо специальными распаковщиками chm. chm, its и частично mht это не текстовые документы. Попытка редактирования их (кроме mht) в блокноте приведёт к порче файла.
Получается что, если .chm файл содержит в себе .snd файл значит он потенциально опасен? Или как узнать что .chm заражён?