Глава 21. Инструментарий исследователя.
При исследовании программ специалисту приходится пользоваться различными инструментами, позволяющими более эффективно выполнять поставленные задачи. Эти инструменты способны поднять производительность труда аналитика в несколько раз. О существующих инструментах и их возможностях полезно знать и разработчикам средств безопасности, чтобы более эффективно создавать трудности аналитикам, которые будут пытаться найти дыры в защите.
21.1. Классификация инструментов
Инструменты можно классифицировать по-разному. Например, на пассивные и активные.
Пассивные инструменты не оказывают никакого воздействия ни на саму исследуемую программу, ни на ее окружение. Активные инструменты, наоборот, взаимодействуют с программой во время ее выполнения. Из этого следует два важных замечания:
- активный инструментарий может дать гораздо больше информации, чем пассивный, т. к. позволяет оценивать состояние программы в динамике;
- присутствие активных инструментов может быть обнаружено защитой и может привести к ответным действиям. Обнаружить или предотвратить применение пассивных средств программа не в состоянии.
Активные инструменты, в свою очередь, могут использоваться только для протоколирования (мониторинга) хода выполнения программы или для явного воздействия на ход выполнения программы: подмены данных, исправления результатов проверки условий и т. д.
Также активный инструментарий может производить виртуализацию среды выполнения программы. То есть программа находится в полной уверенности, что выполняется в самых обычных условиях, а на самом деле каждый ее шаг, включая действия по поиску активных средств анализа, находится под полным контролем исследователя.
Еще один способ классификации инструментов — по области применения, т. е. что именно подвергается исследованию:
- исполняемый код;
- ресурсы приложения;
- дисковые файлы;
- записи в реестре;
- информация в оперативной памяти;
- информация, получаемая от устройств ввода;
- информация, посылаемая на устройства ввода;
- сообщения и данные, пересылаемые между процессами и внутри процесса;
- данные, передаваемые по сети;
- вызовы библиотечных функций.
Рассмотрим несколько наиболее мощных инструментов исследования.