20 вистов и пуля ДРОЗДОВ АНДРЕЙ AKA SULVERUS Спецвыпуск: Хакер, номер #072, стр. 072-038-1 OFFBIT SECURITY TEAM(SULVERUS@MAIL.RU) ОБЗОР БЕЗОПАСНОСТИ СЛУЖБ WINDOWS VISTA НА ПРИМЕРЕ АНТИШПИОНСКОГО ПО КАК И В ПРЕДЫДУЩИХ ВЕРСИЯХ WINDOWS, В WINDOWS VISTA РЕАЛИЗОВАНА СИСТЕМА СЛУЖБ. ГЛАВНЫМ ОТЛИЧИЕМ СЛУЖБ ОТ ДРУГИХ ПРИЛОЖЕНИЙ ЯВЛЯЕТСЯ ТО, ЧТО ОНИ АВТОМАТИЧЕСКИ ЗАПУСКАЮТСЯ БЕЗ ПОМОЩИ ПОЛЬЗОВАТЕЛЯ. В WINDOWS VISTA РАБОТА СО СЛУЖБАМИ НЕСКОЛЬКО ИЗМЕНИЛАСЬ, ПОСКОЛЬКУ ВСЕМ КОДОМ ТЕПЕРЬ УПРАВЛЯЕТ .NET FRAMEWORK Поскольку большинство современных вирусов для получения управления системой атакуют именно службы и сами маскируются в системе как службы, нужно быть в курсе принципов работы и основ безопасности Windows-служб, об этом и пойдет речь в данной статье. [принципы программирования Windows-служб.] Создание цельной службы порождает ошибки с автозагрузкой, а реализация ее настройки становится сложнее. В .NET процесс программирования служб (если говорить о нормальном программировании, а не о вирусах) разбивается на 3 составляющих: 1 РАЗРАБОТКА СЛУЖБЫ. 2 РАЗРАБОТКА ПРИЛОЖЕНИЯ КОНФИГУРИРОВАНИЯ СЛУЖБЫ И ИНСТАЛЛЕРА. 3 РАЗРАБОТКА СИСТЕМЫ ИНСТАЛЛЯЦИИ СЛУЖБЫ. Хорошая система настройки и конфигурирования службы - один из самых важных аспектов безопасности, поскольку 90% хакерских атак происходят именно по причине халатности пользователей и некачественной настройки служб (будь то на сервере или на домашнем компьютере). Программа инсталляции службы довольно тривиальна: она отправляет команды остановить, поднять, продолжить и приостановить службу. Система конфигурации службы настраивает все возможные параметры, ключи реестра, конфиги для запуска и работы службы, пример таких параметров и конфигов - файлы настройки сервера Apache или MS SQL Server'a. В первом случае в системе конфигурирования реализован скриптовый язык, который читает содержимое многочисленных конфигурационных файлов, а во втором случае реализован интерфейс для полной настройки MS SQL Server'a. Ну и, наконец, сама служба - я думаю, тут все понятно: реализуется набор классов для выполнения тех или иных задач. [работаем со службами Windows Vista.] Для примера напишем тестовую службу-антивирус, которая будет висеть в памяти и охранять системные файлы в папке system32/drivers/etc/ от хакерских вторжений, отслеживая работу с файлами в этой директории. После этого мы реализуем программу-конфигуратор, которая будет настраивать время проверки системных файлов, и инсталлятор, работающий со службой. Сама служба состоит из трех блоков кода: 1 ОБРАБОТЧИК ДАННЫХ. 2 ГЛАВНАЯ ФУНКЦИЯ СЛУЖБЫ. 3 ОБЫЧНАЯ ГЛАВНАЯ ФУНКЦИЯ. Возможно, в голове возник вопрос: чем отличается главная функция службы от обычной главной функции? У служб, как и у обычных приложений, точка входа - функция main() (WinMain и т.д.). Исполняемая программа может содержать более одной службы (и их точек входа – «служебных функций»). Каждая из них должна быть зарегистрирована. В функции main() определяется запускаемая служба, ее точка входа – главная служебная функция. Для создания Windows-службы нужно работать с проектом типа Windows Service. В коде есть строка: |