
Откуда растут баобабы. Хорошие места для автозагрузки трояна
Xakep, номер #035, стр. 035-050-2
Можно развить эту идею дальше: не заменять другой файл, а склеивать его вместе с трояном во время инсталляции шпиона. Естественно, при запуске такого двойника должны активизироваться обе программы.
Но это все - цветочки, так сказать. При разработке первых версий шпиона Donald Dick были найдены более интересные места, куда можно поселить паразитов.
VXD
А именно для Windows 95/98 было решено грузить шпиона через свой драйвер VXD. Список загружаемых драйверов находится в реестре в разделе «HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ VxD». Кроме загрузки основного модуля серверной части шпиона, этот драйвер предоставлял и некоторые другие функции, которые проще реализовывались в VXD.
В Windows NT/2000, как известно, другая система драйверов, и VXD там отсутствуют. Но тот способ загрузки, который удалось найти для этих операционок, превзошел все ожидания. В разделе реестра «HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager» в параметре «BootExecute» можно прописать программу, которая будет запускаться во время инициализации операционной системы (еще до загрузки графической оболочки и сервисов), однако полноценный PE-EXE файл работать тут не будет. Поэтому сюда при инсталляции шпиона прописывается маленький загрузчик. Все что он делает - это добавляет сервис Donald Dick в реестр. А сам сервис после запуска первым делом убирает себя из реестра. И так при каждой перезагрузке. Таким образом, при работе никаких подозрительных сервисов в реестре не обнаруживается. Пользователь, если и замечает посторонний работающий процесс, понять не может, откуда же он берется.
Как показал опыт, методы оказались действительно очень эффективными. Особенно для NT/2000.
DLL
Однако использование VXD для загрузки шпиона в Windows 95/98 нам показалось все-таки не самым лучшим способом. Поэтому при разработке Donald Dick 2 было решено исследовать другие малоизвестные или недокументированные места, куда можно приживить шпиона. Поиск увенчался успехом. В Microsoft Windows 95/98 была найдена скрытая возможность автозагрузки динамических библиотек при старте операционной системы.
Но сначала о том, как происходили поиски. Мы просмотрели список всех загруженных модулей и отметили для себя те, которые отсутствовали в стандартных местах автозагрузки. Среди них оказалась программа mprexe.exe. Эта информация конечно мало полезна. Ведь исполняемый модуль может быть запущен другим автозагружаемым модулем или драйвером. Но при изучении самого mprexe.exe мы обнаружили интересную ссылку на несуществующий раздел реестра «HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ MPRServices». А также упоминание весьма интересных параметров: «DLLName», «EntryPoint» и «StackSize». Мы проделали следующий эксперимент. Для начала создали этот раздел в реестре. Затем в нем создали подключ «TestService». Параметрам этого подключа присвоили нужные значения: в строковые «DLLName» и «EntryPoint» поместили название своего DLL файла и название экспортируемой из него процедуры, соответственно, а числовому параметру «StackSize» присвоили ноль.