Несколько недель назад я устанавливал на
одной из моих систем обновление для
популярного медиа-проигрывателя, ActiveX-контрола для Internet Explorer. По предыдущему
опыту я знал, что обновление плагина всегда
конфигурирует его на автоматический запуск,
что не служит каким бы то не было полезным
целям. Как и в предыдущие разы, я запустил Autoruns
от Sysinternals, установил Verify Code Signatures и Hide
Signed Microsoft Entries в опциях меню, нажал Refresh,
нашел автозапуск и удалил его. И уже хотел
закрыть окно программы, как другая запись в
автозагрузке привлекла мое внимание и
практически заставила сердце остановиться:
Программа IECheck имела все признаки malware:
у нее не было иконки, описания или названия
компании, и она находилась в директории Windows.
Более того, онлайновый поиск Autoruns не
выдал никакой информации по
подозрительному экзешнику.
Мне требовалось дальнейшее расследование
для определения - след ли это заражения
вредоносной программой, так что обратился в
утилите Strings
нашей же Sysinternals. Файл образа обычно
содержит plain-text-строку, которая может
связать его приложением. Например, если
программа читает конфигурационную
информацию из реестра, путь в реестре
указывается в исполняемом файле и обычно
содержит имя вендора или приложения. Strings
сканиурет файл на такие строки (как Unicode, так
и Ascii) и выводит их на печать, так что
дальнейшим моим шагом было как раз
сканирование IECheck.exe. В некоторых случая
вывод строк занимает столько места, что
проще перенаправить его в текстовый файл и
изучать результаты уже в каком-либо
редакторе, однако на этот раз я успел
заметить интересный текст в момент вывода:
Исполняемый файл содержал ссылку на
другой, вероятно они были частью одного
приложения - в данном случае мы поймали имя IconEdit2
и название вендора WinAppsPlanet.
Я вспомнил, что скачивал IconEdit несколько
дней назад для редактирования Vista-подобных
иконок высокого разрешения. Так что данный
случай я смогу классифицировать как ложную
тревогу и закрыть дело. Мое сердце
вернулось к нормальному ритму.
Этот пример хорошо показывает правила,
которые следует применять разработчикам
программ для надежности и предотвращения
такой путаницы, с которой я столкнулся. Во-первых ,
использовать переменные среды и пути
оболочки вместо зашитых в программу строк. IECheck
ссылался на директорию в Program Files по имени,
что катит только для английской версии Windows,
так что если бы я установил программу на
иностранную систему, IECheck не нашел бы
исполняемых файлов. Вместо этого следовало
использовать переменную %PROGRAMFILES% или
вызвать ShGetFolderPath с CSILD_PROGRAM_FILES для
параметров папки.
Во-вторых, для успокоения пользователей,
озабоченных безопасностью, все исполняемые
файлы должны иметь ресурсы с названием
компании и описанием, однозначно
определяющим назначение файла. Более того,
вендоры должны использовать сертификаты
для подписи кода. Windows все больше и больше
полагается на подписи для помощи
пользователям в принятии решений о доверии,
и юзеры могут использовать такие
инструменты как Process
Explorer, Autoruns и Sigcheck
для удостоверения того, что файл есть то,
что он декларирует, а не вредоносная
программа. Я связался с автором IconEdit2 и
он переделал свою программу в соответствии
с правилами.
Еще статьи Марка Руссиновича:
История пропавшей DLL
http://www.xakep.ru/post/36637/default.asp
Windows Defender: история одного торможения
http://www.xakep.ru/post/33974/default.asp
Руткит от Sony: история в деталях
http://www.xakep.ru/post/28597/default.asp