СПОСОБ ВЫПОЛНЕНИЯ ОБРАЩЕНИЯ К ПРОЦЕДУРАМ ЗАГРУЗОЧНОГО ДРАЙВЕРА
METHOD OF ACCESSING PROCEDURES OF LOADING DRIVER

Область техники
Изобретение относится к области обеспечения безопасности программного обеспечения, а именно к способам выполнения обращения к процедурам загрузочного драйвера.
Уровень техники
В настоящее время все большую опасность представляют вредоносные программы класса руткит, реализованные в виде драйверов режима ядра операционной системы (ОС). Руткит - вредоносная программа, предназначенная для сокрытия своего функционирования в системе путем перехвата системных функций, подмены системных библиотек или перехвата процедур-обработчиков системных драйверов, например: драйвера диска, сетевого драйвера и пр.
Для решения задачи обнаружения руткитов режима ядра в патенте US 8479292 B1 описывается технология обнаружения и лечения зараженных загрузочных драйверов. Способ заключается в сравнении точек входа загрузочного драйвера, считанных на этапе загрузки ОС (актуальная точка входа) и после загрузки ОС (оригинальная точка входа). При обнаружении отличия между ними в процессе загрузки ОС актуальная точка входа загрузочного драйвера изменяется на оригинальную точку входа. После загрузки системы обнаруженные руткиты могут быть обезврежены антивирусом.
Стоит отметить, что модификация руткитами точек входа загрузочных драйверов обычно происходит динамически при каждой перезагрузке системы. В этом случае описанная выше технология не позволит выявить зараженный драйвер, т.к. актуальная точка входа еще не будет модифицирована.
Анализ предшествующего уровня техники позволяет сделать вывод о неэффективности и в некоторых случаях о невозможности применения предшествующих технологий, недостатки которых решаются настоящим изобретением, а именно системой и способом выполнения обращения к процедурам загрузочного драйвера.
Раскрытие изобретения
Настоящее изобретение относится к способам выполнения обращения к процедурам загрузочного драйвера.
Технический результат заключается в обеспечении доступа к исходным процедурам загрузочных драйверов в случае перехвата процедур руткитами путем выполнения обращения к процедурам по крайней мере одного загрузочного драйвера по ранее сохраненным адресам.
Согласно варианту реализации используется способ выполнения обращения к процедурам загрузочного драйвера, в котором: в процессе загрузки операционной системы с помощью драйвера-перехватчика считывают список неинициализированных загрузочных драйверов; с помощью драйвера-перехватчика устанавливают обработчик для перехвата вызова процедуры инициализации по крайней мере одного загрузочного драйвера из списка неинициализированных загрузочных драйверов; с помощью установленного обработчика перехватывают вызов процедуры инициализации по крайней мере одного загрузочного драйвера из списка неинициализированных загрузочных драйверов; с помощью обработчика сохраняют информацию по крайней мере об одном загрузочном драйвере, заполненную по крайней мере одним упомянутым загрузочным драйвером в процессе инициализации, при этом упомянутая информация об упомянутом загрузочном драйвере содержит по крайней мере адрес точки входа по крайней мере одной процедуры загрузочного драйвера; с помощью по крайней мере одного из: драйвера-перехватчика, драйвера антируткит выполняют обращение к процедурам по крайней мере одного загрузочного драйвера по ранее сохраненным адресам.
Согласно одному из частных вариантов реализации при установке обработчиком перехвата процедуры инициализации загрузочного драйвера, с помощью упомянутого обработчика заменяют ранее считанный адрес точки входа загрузочного драйвера адресом точки входа упомянутого обработчика.
Согласно другому частному варианту реализации с помощью драйвера-перехватчика считывают список загрузочных драйверов в системном реестре.
Согласно еще одному частному варианту реализации с помощью драйвера-перехватчика считывают список неинициализированных загрузочных драйверов с использованием загрузчика.
Согласно одному из частных вариантов реализации информация о загрузочном драйвере дополнительно содержит по крайней мере одно из: имя; адрес загрузки загрузочного драйвера в памяти; адрес точки входа; параметры, передаваемые загрузочному драйверу загрузчиком в процессе инициализации; путь к драйверу в реестре; объект драйвера.
Краткое описание чертежей
Дополнительные цели, признаки и преимущества настоящего изобретения будут очевидными из прочтения последующего описания осуществления изобретения со ссылкой на прилагаемые чертежи, на которых:
на Фиг. 1 представлен процесс загрузки операционной системы;
на Фиг. 2 изображен способ перехвата вызова процедуры инициализации загрузочного драйвера;
Фиг. 3 представляет пример компьютерной системы общего назначения.
Описание вариантов осуществления изобретения
Объекты и признаки настоящего изобретения, способы для достижения этих объектов и признаков станут очевидными посредством отсылки к примерным вариантам осуществления. Однако настоящее изобретение не ограничивается примерными вариантами осуществления, раскрытыми ниже, оно может воплощаться в различных видах. Сущность, приведенная в описании, является ничем иным, как конкретными деталями, обеспеченными для помощи специалисту в области техники в исчерпывающем понимании изобретения, и настоящее изобретение определяется в объеме приложенной формулы.
На Фиг. 1 представлен процесс загрузки операционной системы (ОС), включающий этап инициализации драйвера-перехватчика согласно настоящему изобретению. Подобный процесс загрузки ОС характерен для большинства ОС, например: Windows, Unix, OS X, Android и пр. После включения питания компьютера, на шаге 101 загружается BIOS (англ. basic input/output system - «базовая система ввода-вывода»), и с помощью программно-аппаратных средств, записанных в BIOS, производится инициализация оборудования компьютера и запуск самотестирования аппаратного обеспечения компьютера - POST (power-on self-test). Процесс самотестирования заканчивается, когда BIOS находит системный раздел жесткого диска, считывает MBR (англ. master boot record - главная загрузочная запись) и запускает менеджер загрузки (например, в ОС Windows, Bootmgr.exe). Менеджер загрузки находит на системном разделе жесткого диска загрузчик ОС (например, в ОС Windows, Winload.exe) и запускает его на этапе 102. Стоит отметить, что во многих современных компьютерах BIOS заменен на UEFI (англ. Unified Extensible Firmware Interface - объединенный расширяемый интерфейс прошивки), a MBR - на GPT (англ. GUID Partition Table - стандарт формата размещения таблиц разделов на физическом жестком диске) соответственно, которые могут быть использованы в настоящем изобретении.
На шаге 103 загрузчик ОС инициализирует основные системные драйверы, необходимые для считывания данных с диска и инициализации ядра ОС. На шаге 104 загрузчик ОС загружает куст системного реестра и системные драйверы, необходимые для инициализации ОС, после чего передает считанные данные ядру ОС. На шаге 105 происходит инициализация драйвера-перехватчика, установленного антивирусным приложением. В частном варианте реализации в ОС Windows загрузка драйвера-перехватчика раньше остальных драйверов может быть обеспечена путем установления группы раннего запуска в реестре. Например, в ОС Windows в реестр будет записано значение SERVICE_BOOT_START элемента Start Type, считанное из INF-файла драйвера. Кроме этого антивирусное приложение может изменить список групп запуска.
Далее, на шаге 106, происходит инициализация остальных загрузочных драйверов и на шаге 107 инициализируются обычные драйверы и программное обеспечение (ПО). Загрузка ОС завершается на шаге 108. В частном варианте реализации, если на компьютере был установлен руткит, его драйвер может быть инициализирован также на шаге 107.
На Фиг. 2 изображен способ перехвата вызова процедуры инициализации загрузочного драйвера. При инициализации загрузочных драйверов на этапе 106 загрузчик ОС 210 посредством PnP-менеджера (англ. Plug and Play Manager - менеджер быстрого определения и конфигурирования устройств, являющийся частью ядра ОС) по очереди передает управление на точку входа 221 каждого загрузочного драйвера 220 (далее для иллюстративности будет упоминаться как драйвер). В частном варианте реализации загрузчик ОС 210 передает загрузочному драйверу 220 в качестве аргументов указатель на объект драйвера (структура, содержащая указатели на процедуры драйвера, например в ОС Windows - структура DRIVER_OBJECT) и путь к ключу драйвера в реестре. В качестве примера в ОС Windows за инициализацию 222 драйвера отвечает процедура DriverEntry, точкой входа которой является DriverInit - элемент структуры DRIVER_OBJECT.
В процессе инициализации 222 загрузочного драйвера 220 выполняются следующие действия.
1. В объекте драйвера сохраняются точки входа для процедур драйвера 223. Процедуры драйвера включают как стандартные процедуры (в ОС Windows, например, - AddDevice, StartIo, Unload и пр.), так и собственные процедуры драйвера.
2. Создаются и инициализируются различные объекты, используемые драйвером, и устанавливаются различные системные ресурсы драйвера.
3. Освобождается неиспользуемая выделенная память.
4. Загрузчику ОС возвращается статус о завершении инициализации драйвера 224 и возможности принимать и выполнять запросы от PnP-менеджера для конфигурации, добавления и запуска устройств.
Т.к. драйвер-перехватчик 230 был инициализирован одним из первых среди загрузочных драйверов на шаге 105, после инициализации он находит и считывает список загрузочных драйверов, которые были загружены в память, но еще не инициализированы. В частном варианте реализации такой список может быть считан в системном реестре или с использованием загрузчика ОС 210 (например, в ОС Windows список может содержаться в структуре KeLoaderBlock, сформированной и переданной на точку входа ядра ОС загрузчиком ОС).
В частном варианте реализации список неинициализированных загрузочных драйверов может содержать следующую информацию:
- имя;
- адрес загрузки загрузочного драйвера в памяти;
- путь к драйверу в реестре;
- объект драйвера;
- адрес точки входа.
После получения списка загрузочных драйверов драйвер-перехватчик 230 устанавливает обработчик перехватов 231, необходимый для перехвата вызовов процедур инициализации загрузочных драйверов. В частном варианте реализации, при установке обработчиком перехватов 231 процедур инициализации загрузочных драйверов, обработчик перехватов 231 заменяет адрес точки входа загрузочного драйвера 220, указатель на который содержится в списке загрузочных драйверов, на адрес точки входа обработчика перехватов 231. При этом оригинальная точка входа драйвера 221 будет сохранена обработчиком перехватов 231. Таким образом, при передаче загрузчиком ОС 210 управления на точку входа 221 управление будет перехвачено обработчиком перехватов 231. Далее обработчик перехватов 231 передаст управление на ранее сохраненную оригинальную точку входа драйвера 221.
После завершения процедуры инициализации 224 управление будет передано обратно обработчику перехватов 231, который вызвал инициализацию драйвера 220. Обработчик перехватов 231 сохраняет информацию о загрузочном драйвере 220, заполненную им в процессе своей инициализации. В частном варианте реализации сохраненная информация может содержать:
- имя загрузочного драйвера 220;
- адреса точек входа части или всех процедур загрузочного драйвера 220;
- параметры, передаваемые загрузочному драйверу 220 загрузчиком ОС 210 в процессе инициализации;
- путь к драйверу в реестре;
- адрес точки входа;
- сам объект драйвера.
В еще одном частном варианте реализации информация о загрузочном драйвере 220, а также его оригинальная точка входа могут быть сохранены в области памяти, выделенной для драйвера-перехватчика.
После загрузки ОС на шаге 108 различные приложения уровня пользователя получают возможность вызова процедур доступа. Посредством обращения к процедурам драйвера может быть обеспечен доступ к аппаратному обеспечению различных устройств посредством драйверов этих устройств. Для сокрытия своего присутствия и присутствия других вредоносных компонент в системе руткит может перехватывать вызовы приложениями процедур драйверов в памяти с последующей фильтрацией обращений к соответствующим устройствам.
Для предотвращения вредоносной активности на последнем шаге настоящего изобретения драйвер-перехватчик 230 выполняет обращения к оригинальным процедурам загрузочных драйверов. В ОС Windows за работу с диском отвечает драйвер SCSI Port Driver. Доступ к процедурам драйвера, которые отвечают за работу с дисковыми запросами (например, IRP_MJ_INTERNAL_DEVICE_CONTROL, IRP_MJ_SCSI), также будет осуществляться по оригинальным адресам (т.е не модифицированным руткитом) с помощью драйвера-перехватчика 230. Таким образом, если в системе функционирует руткит, то он будет доступен антивирусу несмотря на попытки сокрытия своего функционирования (расположение файла на диске, потоков управления и пр.). Как следствие, в процессе обычной антивирусной проверки руткит будет проанализирован и обнаружен. В частном варианте реализации антивирусная проверка может включать сигнатурный, эвристический анализы, эмуляцию, проверку с использованием репутационного сервиса и пр.
После обнаружения антивирус произведет удаление руткита: будет удален файл на диске, загруженный в память вредоносный код и прочие следы активности руткита. Для проверки, успешно ли прошло удаление, компьютер может быть перезагружен. В некоторых случаях для полного удаления загруженного в память вредоносного кода также потребуется перезагрузка компьютера.
В частном варианте реализации, если удаление руткита или его части невозможно, антивирус может сформировать сценарий лечения, который будет осуществлен на ранней стадии загрузки ОС. После чего потребуется перезагрузка компьютера. Сценарий лечения может содержать, например, адрес расположения файлов руткита на диске и команду на их удаление. В процессе загрузки ОС руткит будет удален одним из антируткит драйверов антивируса, отвечающим за выполнение сценариев лечения.
В частном варианте реализации обращения к оригинальным процедурам загрузочных драйверов может выполнять любой другой драйвер антивируса (например, драйвер антируткит).
Фиг. 3 представляет пример компьютерной системы общего назначения, персональный компьютер или сервер 20, содержащий центральный процессор 21, системную память 22 и системную шину 23, которая содержит разные системные компоненты, в том числе память, связанную с центральным процессором 21. Системная шина 23 реализована как любая известная из уровня техники шинная структура, содержащая, в свою очередь, память шины или контроллер памяти шины, периферийную шину и локальную шину, которая способна взаимодействовать с любой другой шинной архитектурой. Системная память содержит постоянное запоминающее устройство (ПЗУ) 24, память с произвольным доступом (ОЗУ) 25. Основная система ввода/вывода (BIOS) 26 содержит основные процедуры, которые обеспечивают передачу информации между элементами персонального компьютера 20, например, в момент загрузки операционной системы с использованием ПЗУ 24.
Персональный компьютер 20, в свою очередь, содержит жесткий диск 27 для чтения и записи данных, привод магнитных дисков 28 для чтения и записи на сменные магнитные диски 29 и оптический привод 30 для чтения и записи на сменные оптические диски 31, такие как CD-ROM, DVD-ROM и иные оптические носители информации. Жесткий диск 27, привод магнитных дисков 28, оптический привод 30 соединены с системной шиной 23 через интерфейс жесткого диска 32, интерфейс магнитных дисков 33 и интерфейс оптического привода 34 соответственно. Приводы и соответствующие компьютерные носители информации представляют собой энергонезависимые средства хранения компьютерных инструкций, структур данных, программных модулей и прочих данных персонального компьютера 20.
Настоящее описание раскрывает реализацию системы, которая использует жесткий диск 27, сменный магнитный диск 29 и сменный оптический диск 31, но следует понимать, что возможно применение иных типов компьютерных носителей информации 56, которые способны хранить данные в доступной для чтения компьютером форме (твердотельные накопители, флеш карты памяти, цифровые диски, память с произвольным доступом (ОЗУ) и т.п.), которые подключены к системной шине 23 через контроллер 55.
Компьютер 20 имеет файловую систему 36, где хранится записанная операционная система 35, а также дополнительные программные приложения 37, другие программные модули 38 и данные программ 39.
Пользователь имеет возможность вводить команды и информацию в персональный компьютер 20 посредством устройств ввода (клавиатуры 40, манипулятора «мышь» 42). Могут использоваться другие устройства ввода (не отображены): микрофон, джойстик, игровая консоль, сканер и т.п. Подобные устройства ввода по своему обычаю подключают к компьютерной системе 20 через последовательный порт 46, который, в свою очередь, подсоединен к системной шине, но могут быть подключены иным способом, например при помощи параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 47 или иной тип устройства отображения также подсоединен к системной шине 23 через интерфейс, такой как видеоадаптер 48. В дополнение к монитору 47, персональный компьютер может быть оснащен другими периферийными устройствами вывода (не отображены), например колонками, принтером и т.п.
Персональный компьютер 20 способен работать в сетевом окружении, при этом используется сетевое соединение с другим или несколькими удаленными компьютерами 49. Удаленный компьютер (или компьютеры) 49 являются такими же персональными компьютерами или серверами, которые имеют большинство или все упомянутые элементы, отмеченные ранее при описании существа персонального компьютера 20, представленного на Фиг. 3. В вычислительной сети могут присутствовать также и другие устройства, например маршрутизаторы, сетевые станции, пиринговые устройства или иные сетевые узлы.
Сетевые соединения могут образовывать локальную вычислительную сеть (LAN) 50 и глобальную вычислительную сеть (WAN). Такие сети применяются в корпоративных компьютерных сетях, внутренних сетях компаний и, как правило, имеют доступ к сети Интернет. В LAN- или WAN-сетях персональный компьютер 20 подключен к локальной сети 50 через сетевой адаптер или сетевой интерфейс 51. При использовании сетей персональный компьютер 20 может использовать модем 54 или иные средства обеспечения связи с глобальной вычислительной сетью, такой как Интернет. Модем 54, который является внутренним или внешним устройством, подключен к системной шине 23 посредством последовательного порта 46. Следует уточнить, что сетевые соединения являются лишь примерными и не обязаны отображать точную конфигурацию сети, т.е. в действительности существуют иные способы установления соединения техническими средствами связи одного компьютера с другим.
В соответствии с описанием, компоненты, этапы исполнения, структура данных, описанные выше, могут быть выполнены, используя различные типы операционных систем, компьютерных платформ, программ.
В заключение следует отметить, что приведенные в описании сведения являются примерами, которые не ограничивают объем настоящего изобретения, определенного формулой.