Удаленная отладка вредоносных программ
Содержание
Чтобы начать наши эксперименты, необходимо установить саму виртуальную среду. Кто-то предпочитает VirtualBox, но мы будем использовать VMware Workstation, потому что VirtualBox с некоторыми инструментами удаленной отладки дружит несколько хуже и требует дополнительной настройки. С VMware таких проблем нет.
В качестве целевой операционной системы мы будем использовать Windows 10 x64 LTSB. Настоятельно рекомендуется сразу же создать общую папку для удобной переброски файлов с хостовой ОС на гостевую. Также следует выбрать тип микропрограммы BIOS, а не UEFI. Это делается для совместимости с некоторыми отладочными компонентами, которые мы будем использовать.
Во время отладки на компьютере зачастую запущено несколько требовательных к объему оперативной памяти приложений: сама виртуальная машина, компилятор, браузер. Для комфортной работы понадобится как минимум 8 Гбайт.
Ядро (Операционные Системы)
Ядро операционной системы (Kernel) — часть операционной системы: постоянно находящаяся в оперативной памяти, управляющая всей операционной системой, содержащая: драйверы устройств, подпрограммы управления памятью, планировщик заданий, реализующая системные вызовы и т.п.
Все операции, связанные с процессами, выполняются под управлением той части операционной системы, которая называется ядром. Ядро представляет собой лишь небольшую часть кода операционной системы в целом, однако оно относится к числу наиболее интенсивно используемых компонент системы. По этой причине ядро обычно резидентно размещается в основной памяти, в то время как другие части операционной системы перемещаются во внешнюю память и обратно по мере необходимости. Одной из самых важных функций, реализованных в ядре, является обработка прерываний. В больших многоабонентских системах в процессор поступает постоянный поток прерываний. Быстрая реакция на эти прерывания играет весьма важную роль с точки зрения полноты использования ресурсов системы и обеспечения приемлемых значений времени ответа для пользователей, работающих в диалоговом режиме.
Когда ядро обрабатывает текущее прерывание, оно запрещает другие прерывания и разрешает их снова только после завершения обработки текущего прерывания. При постоянном потоке прерываний может сложиться такая ситуация, что ядро будет блокировать прерывания в течение значительной части времени, т. е. не будет иметь возможности эффективно реагировать на прерывания. Поэтому ядро обычно разрабатывается таким образом, чтобы оно осуществляло лишь минимально возможную предварительную обработку каждого прерывания, а затем передавало это прерывание на дальнейшую обработку соответствующему системному процессу, после начала работы которого ядро могло бы разрешить последующие прерывания.
Требования к ОСРВ.
Современные ОС PB должны удовлетворять следующим требованиям:
● малое время отклика (получение результата);
● реализация многозадачного режима с гибким механизмом приоритетов;
● малый объем памяти (достаточный для размещения в резидентной памяти прикладной системы);
● наличие сервисных функций и средств поддержки для разработки прикладных программ и ряд других.
В настоящее время для разработки микроконтроллерных систем используется ОСРВ, имеющие различные характеристики и прошедшие апробацию в таких областях применения, как системы автоматизации производства, контрольно–измерительные системы, телекоммуникационная аппаратура, авиационно–космическая и военная техника, транспорт, системы обеспечения безопасности и др.
Настройка WinDbg/VirtualKD
Чтобы ускорить удаленную отладку с WinDbg, был создан специальный инструмент-надстройка — VirtualKD. Он значительно упрощает привязку WinDbg к виртуальной машине и автоматизирует некоторые настройки целевой операционой системы. Чтобы VirtualKD работал, в основной ОС уже должен стоять WinDbg и в нем должны быть прописаны пути для отладочных символов.
После распаковки архива с VirtualKD в его корневой папке появится папка под названием target. Ее необходимо скопировать на целевую ОС, после этого запустить файл vminstall.exe. Это основной установщик компонентов VirtualKD на целевую ОС, он копирует необходимые файлы и настраивает ОС для работы в режиме отладки. В нем необходимо включить чекбоксы Set VirtualKD boot entry as default и Replace kdcom.dll, после этого нажать кнопку Install.
Когда все компоненты будут настроены, необходимо открыть файл kdpatch.reg из папки target. Он внесет необходимые изменения в реестр целевой ОС, чтобы компоненты агента VirtualKD запускались при ее старте. После этих шагов необходимо перезагрузить виртуальную машину.
При загрузке гостевой ОС появится диалог, в котором следует выбрать Disable Signature Enforcement Manually и нажать F8. Теперь выбирайте пункт «Отключение обязательной проверки подписи драйверов».
На основной ОС осталось только запустить монитор виртуальной машины (vmmon64.exe) и нажать в нем кнопочку Run debugger, которая запустит уже подключенный к целевой ОС отладчик WinDbg. Обратите внимание на графу OS в списке подключенных виртуальных машин: здесь должно быть слово yes, если виртуальная машина настроена правильно и агент VirtualKD на ней запустился и работает. И желательно снять чекбоксы, чтобы VirtualKD не останавливал целевую ОС, когда не следует.
Комбинация разных подходов
Все подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например, сейчас ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляются монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.
Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйверы устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер. Примеры: Windows NT, DragonFlyBSD.
Требования к ОСРВ.
Современные ОС PB должны удовлетворять следующим требованиям:
● малое время отклика (получение результата);
● реализация многозадачного режима с гибким механизмом приоритетов;
● малый объем памяти (достаточный для размещения в резидентной памяти прикладной системы);
● наличие сервисных функций и средств поддержки для разработки прикладных программ и ряд других.
В настоящее время для разработки микроконтроллерных систем используется ОСРВ, имеющие различные характеристики и прошедшие апробацию в таких областях применения, как системы автоматизации производства, контрольно–измерительные системы, телекоммуникационная аппаратура, авиационно–космическая и военная техника, транспорт, системы обеспечения безопасности и др.
Удаленная отладка в Microsoft Visual Studio
Популярная IDE Microsoft Visual Studio также поддерживает средства удаленной отладки. Чтобы ими воспользоваться, тоже понадобится виртуальная машина, с сервером отладки Visual Studio Remote Tools. Обратите внимание: он должен подходить к той версии Visual Studio, из которой вы хотите подключаться.
Также я рекомендую отключить аутентификацию на сервере отладки, чтобы всякий раз не вводить учетные данные пользователя. Для этого зайдите в «Сервис → Параметры», выберите режим «Без аутентификации» и включите чекбокс «Разрешить отладку любому пользователю».
Сервер запущен, настроен и слушает порт 4022 на предмет подключения отладчика.
Теперь переходим в Visual Studio для настройки проекта под удаленную отладку. Для начала нам нужно открыть свойства проекта и перейти на вкладку «Отладка». В строке «Удаленная команда» нужно задать путь до отлаживаемого файла, в пунктах «Рабочий каталог» и «Каталог развертывания» указать каталог с отлаживаемым файлом. Также необходимо задать имя удаленного сервера (его можно взять в окне сервера отладки в виртуальной машине) и выбрать тип подключения «Без аутентификации». Теперь заходим в «Диспетчер конфигураций» и ставим чекбокс в столбце «Развертывание» напротив нашего проекта.
Теперь все готово к удаленной отладке, которую можно начать, выбрав в меню «Отладка» пункт «Начать отладку» либо нажав F5. Visual Studio, кстати, позволяет подсоединяться к удаленному процессу в виртуальной машине. Для этого нужно выбрать в меню «Отладка» «Присоединиться к процессу» и в появившемся окне — удаленный сервер и процесс.
Основные функция ядра:Ядро операционной системы, как правило, содержит программы для реализации следующих функций:
- обработка прерываний;
- создание и уничтожение процессов;
- переключение процессов из состояния в состояние;
- диспетчирование ;
- приостановка и активизация процессов ;
- синхронизация процессов ;
- организация взаимодействия между процессами;
- манипулирование блоками управления процессами;
- поддержка операций ввода-вывода;
- поддержка распределения и перераспределения памяти;
- поддержка работы файловой системы ;
- поддержка механизма вызова-возврата при обращении к проце¬дурам;
- поддержка определенных функций по ведению учета работы
- машины.
Типы ОСРВ
Можно выделить два типа ОСРВ:
● системы жесткого реального времени, которые занимают небольшой объем памяти и имеют минимальные время отклика, но обладают весьма ограниченными сервисными средствами. Они реализуются по модульному принципу, что позволяет использовать только те средства, которые необходимы в данном приложении. В результате для конкретного применения достигается существенное сокращение объема необходимой памяти и времени отклика;
● системы мягкого реального времени, которые требуют большего объема памяти, имеют более длительное время отклика, но зато удовлетворяют широкому спектру требований пользователя по режиму обслуживания задач, уровню предоставляемого сервиса. Средства интерфейса систем мягкого реального времени позволяют использовать высокоэффективные отладчики или интегрированные среды разработки.
Система мягкого реального времени.
Этот вид систем рассмотрим на примере системы OS–9 фирмы Microwave Systems . В качестве инструментального компьютера OS –9 использует IBM – PC , работающие в среде Windows , или рабочие станции Sun, HP, IBM RS /6000 с операционными системами типа UNIX . Характерные особенности OS –9:
● модульность, которая обеспечивает возможность конфигурации целевой ОСРВ в соответствии с классом решаемых задач. Исключая неиспользуемые модули, можно сократить объем памяти и снизить стоимость системы;
● гибкость структуры, обеспечивающая реконфигурацию системы и расширение ее функциональных возможностей. Функциональные компоненты OS–9:
● ядро реального времени ( OS –9 kernel );
● общие средства ввода/вывода ( I / O man );
● средства разработки программ.
Функциональные компоненты OS –9 выполнены в виде автономных модулей, которые могут удаляться или добавляться с помощью простых команд, не требующих повторной компиляции или перекомпоновки. Комбинируя модули, можно создавать целевые операционные системы с различными функциональными возможностями.
Рассмотрим Перечисленные выше функциональные компоненты.
Ядро реального времени
Система содержит два вида ядер:
● ядро Atomic , реализующее минимальное количество сервисных функций (дистанционную загрузку, связь с локальной сетью, управление ведомыми микроконтроллерами). Ядро применяется в системах, встраиваемых в различную аппаратуру, имеет малый объем (24 Кбайт) и обеспечивает минимальное время отклика (3 мкс при тактовой частоте 25 МГц);
● ядро Standard , обеспечивающее выполнение широкого набора функций сервиса и разработки прикладных программ, для реализации которых требуется больший объем памяти (до 512К байт ПЗУ и 38К байт ОЗУ). Путем изменения функциональных модулей ядра можно реализовать системы различной сложности и назначения: от встраиваемых в аппаратуру контроллеров с резидентным программным обеспечением и простейшими средствами ввода/вывода до сложно функциональных систем класса рабочих станций с развитой сетевой поддержкой и обеспечением разнообразных функций сервиса, включая мультимедиа.
Система OS –9 предоставляет пользователю возможность выбора ядра в зависимости от функционального назначения системы. Общие средства ввода/вывода. Физический интерфейс OS –9 с разнообразными внешними устройствами обеспечивается большим набором драйверов, созданных как фирмой Microwave Systems , так и многочисленными разработчиками аппаратуры, использующей эту операционную систему для конкретных приложений. Файловые менеджеры. К ним относятся модули, управляющие логическими потоками данных. Каждый из модулей имеет определенное функциональное назначение и спецификацию. Файловые менеджеры можно разделить на три группы:
● стандартные менеджеры, предназначенные для выполнения таких базовых функций обмена с внешними устройствами как организация очереди поступающих команд, управление байтовым и блочным последовательным обменом и обменом с прямым доступом к памяти;
● сетевые и коммуникационные менеджеры, обеспечивающие работу OS –9 с различными сетями и обмен данными по каналам связи с наиболее распространенными стандартами протоколов обмена;
● менеджеры графического интерфейса и работы с мультимедиа–приложениями. Средства разработки программ. В составе OS –9 имеется пакет программ (BSP) для поддержки плат развития, который обеспечивает совместную работу OS–9 с целым рядом SBC (Single Board Computer — одноплатный компьютер). Совместное использование BSP и OS–9 позволяет сконфигурировать целевую систему для конкретного приложения.
Система OS–9 содержит средства поддержки программирования: компиляторы Ultra C/C++, текстовый редактор ЕМ ACS , три вида (в том числе символьных) отладчиков, набор утилит для организации контроля и сборки программных продуктов. Помимо этого имеется большой набор (совместимых с OS –9) средств поддержки программирования, которые разработаны другими фирмами. Интегрированная среда разработки FasTra к. Среда FasTrak поставляется совместно с OS–9 и предоставляет пользователю наиболее полный комплект средств программирования и отладки. Часть программных средств FasTrak инсталлируется на инструментальном компьютере, а часть — на целевой системе пользователя. Среда FasTrak интегрирует все средства, необходимые для поддержки проектирования/отладки целевых систем. Версия среды FasTrak для работы на инструментальном компьютере IBM – PC содержит:
● текстовый редактор, располагающий средствами перекодировки клавиатуры, что позволяет вести редактирование в удобном для пользователя формате;
● компиляторы Ultra C/C++;
● отладчики, обеспечивающие два режима отладки: пользовательский — для создания прикладных программ, и системный — для обслуживания прерываний, системных вызовов и обращения к ядру реального времени;
● средства интерфейса с логическими анализаторами фирмы.
Среда FasTrak обладает широкими функциональными возможностями, что делает ее эффективным средством создания программного обеспечения для различных микроконтроллерных систем.
Фирма Microware Systems поставляет ряд системных пакетов, ориентированных на различные сферы приложения:
● Wireless OS –9 — для разработки устройств беспроводной связи: сотовых телефонов, пейджеров, портативных цифровых ассистентов ( PDA );
● Internet OS –9 — для разработки устройств с доступом к сети Internet ;
● Digital Audio / Video Interactive Decoder ( DAVID ) OS –9 — для разработки распределенных систем цифрового интерактивного телевидения.
Система жесткого реального времени
Особенности этого вида систем рассмотрим на примере системы VxWorks фирмы WindRiver Systems , предназначенной для работы с семействами микропроцессоров многих производителей. Система VxWorks инсталлируется на отлаживаемой целевой системе и работает совместно с интегрированной средой разработки Tornado , функционирующей на инструментальном компьютере. В качестве инструментального компьютера используются IBM – PC , работающие в среде Windows , или рабочие станции SUN, HP и др. Краткое описание системы VxWorks. Нижним уровнем иерархической организации системы служит микроядро реального времени, выполняющее базовые функции планирования задач и управления их связью и синхронизацией. Минимальный набор модулей ядра занимает 20–40К байт памяти. Все остальные функции — управление памятью, вводом/выводом, сетевым обменом и другие, реализуются дополнительными модулями. Для поддержки графических приложений VxWorks располагает графическим интерфейсом VX–Windows.
При ограниченном объеме памяти целевой системы можно воспользоваться графической библиотекой RTGL, которая содержит базовые графические примитивы, наборы шрифтов и цветов, драйверы типовых устройств ввода и графических контроллеров. В состав VxWorks входят также различные средства поддержки разнообразных сетевых протоколов. Трассировку заданных событий и их накопление в буферной памяти для последующего анализа выполняют в реальном времени специальные средства отладки, а трассировку системных событий — динамический анализатор WindView . Анализатор WindView работает аналогично логическому анализатору, отображая на экране временные диаграммы переключения задач, записи в очередь сообщений и другие процессы. Монитор данных Stethoscope позволяет анализировать динамическое изменение пользовательских и системных переменных, включая в себя также профилировщик процедур. В составе VxWorks имеется:
● пакет программ для поддержки плат развития;
● симулятор VxSim , позволяющий моделировать на инструментальном компьютере многозадачную среду VxWorks и интерфейс с целевой системой, а также разрабатывать и отлаживать программное обеспечение без подключения целевой системы.
Для комплексной отладки целевых систем VxWorks обеспечивает интерфейс со схемными эмуляторами и эмуляторами ПЗУ. Интегрированная среда разработки Tornado . В состав Tornado входит система VxWorks 5.3, включающая ядро реального времени и системные библиотеки, средства программирования, высокоуровневый отладчик и ряд других средств системы. Дополнительные средства среды Tornado обеспечивают управление процессом отладки, визуализацию состояния целевой системы, другие сервисные функции. Открытая архитектура среды Tomado позволяет пользователю подключать собственные специализированные инструментальные средства и расширять возможности стандартных средств.
Операционная система реального времени VxWorks вместе с интегрированной средой Tornado является мощным средством реализации целевых систем, работающих в условиях жестких ограничений на объем используемой памяти и время отклика на внешние события.