Цели и задачи изучения работы ПО
Задача анализа программного обеспечения возникает в различных ситуациях. Предположим, например, что компьютерную сеть организации поразил неизвестный компьютерный вирус. Для того чтобы создать способный с ним бороться антивирус, необходимо вначале понять принципы функционирования этого вируса. А для этого следует проанализировать машинный код вируса.
Работа по анализу программы состоит из трех основных этапов.
1. Подготовительный этап. На этом этапе аналитик знакомится с анализируемой программой, изучает доступную документацию, планирует дальнейшие исследования, подбирает коллектив и организует его работу.
2. Восстановление алгоритмов функционирования программы. Именно на этом этапе производится изучение программы.
3. Проверка полученных результатов. На этом этапе аналитик проверяет результаты проведенных исследований.
Способы изучения программ:
1) метод экспериментов;
2) статический метод;
3) динамический метод.
1) метод экспериментов;
2) статический метод;
3) динамический метод.
Дизассемблер — транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.
По режиму работы с пользователем делятся на
- Автоматические
- Интерактивные
Примером автоматических дизассемблеров может служить Sourcer. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе. Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования и является весьма удобным инструментом для исследования программ.
Дизассемблеры бывают однопроходные и многопроходные. Основная трудность при работе дизассемблера — отличить данные от машинного кода, поэтому на первых проходах автоматически или интерактивно собирается информация о границах процедур и функций, а на последнем проходе формируется итоговый листинг. Интерактивность позволяет улучшить этот процесс, так как просматривая дамп дизассемблируемой области памяти, программист может сразу выделить строковые константы, дать содержательные имена известным точкам входа, прокомментировать разобранные им фрагменты программы.
Чаще всего дизассемблер используют для анализа программы (или ее части), исходный текст которой неизвестен — с целью модификации, копирования или взлома. Реже — для поиска ошибок (багов) в программах и компиляторах, а также для анализа оптимизации создаваемого компилятором машинного кода.
Обычно однопроходный дизассемблер (как и построчный ассемблер) является составной частью отладчика.
Дизассемблеры условно можно разделить на "глупые" ассемблеровский текст весьма отдаленно (dumb) и "умные" (smart) точный машинный код.
27. Задачи защиты от изучения и способы их решения. Защита от отладки. Динамическое преобразование кода. Принцип ловушек и избыточного кода.
Атака на алгоритм СЗИ может быть пассивной (изучение) - без изменения алгоритма СЗИ и активной - с изменением алгоритма в соответствии с целью злоумышленника. Задача защиты от изучения (исследования) сводится к решению двух взаимосвязанных задач:
• выявлению отладчика;
• направлению работы защищенной программы или отладчика по "неверному пути".
Стандартным методом, использующимся для обнаружения средств защиты от копирования, является дизассемблирование программы установки программного пакета или выполнение его под управлением пошагового отладчика. Листинг, получаемый в процессе дизассемблирования, оказывает большую услугу при использовании отладчика, поэтому эти два средства - дизассемблирование и использование отладчика - обычно используются вместе.
Соответственно, требуются отдельные средства для борьбы с дизассемблером и для защиты от отладчиков.
Для затруднения дизассемблирования лучше всего подходит шифрование отдельных участков программ или всей программы целиком.
Способ динамического преобразования заключается в следующем: первоначально в оперативную память загружается фрагмент кода, содержание части команд которого не соответствует тем командам, которые данный фрагмент в действительности выполняет; затем этот фрагмент по некоторому закону преобразуется, превращаясь в исполняемые команды, которые затем и выполняются.
Преобразование кода программы во время ее выполнения может преследовать три основные цели:
• противодействие файловому дизассемблированию программы;
• противодействие работе отладчику;
• противодействие считыванию кода программы в файл из оперативной памяти. При расшифровывании можно копировать участки программы в другое место оперативной памяти. Пусть, например, программа состоит из нескольких частей. После загрузки ее в оперативную память управление передается первой части программы. Эта часть предназначена для расшифровки второй части, располагающейся в памяти вслед за первой.
Задача второй части - перемещение третьей части программы на место уже использованной первой части и расшифровка ее там.
Третья часть, получив управление, может проверить свое расположение относительно префикса программного сегмента и, в случае правильного расположения (сразу вслед за PSP), начать загрузку сегментных регистров такими значениями, которые необходимы для выполнения четвертой - инсталляционной - части программы.
Если попытаться дизассемблировать программу, составленную подобным образом, то из этого ничего не получится.
Защита программ от отладки и трассировки по прерываниям
Способы защиты от отладки можно разделить на четыре класса.
1. Влияние на работу отладочного средства через общие программные или аппаратные ресурсы. 2. Влияние на работу отладочного средства путем использования особенностей его аппаратной или программной среды.
3. Влияние на работу отладчика через органы управления или/и устройства отображения инф-ции.
4. Использование принципиальных особенностей работы управляемого человеком отладчика.
28. Защита от дизассемблирования. Принцип внешней загрузки файлов. Динамическая модификация программы. Защита от трассировки по прерываниям.
Существует несколько методов противодействия дизассемблированию:
• шифрование;
• архивация:
• использование самогенерирующих кодов;
• «обман» дизассемблера.
Архивацию можно рассматривать как простейшее шифрование. Причем
архивация может быть объединена с шифрованием. Зашифрованную программу невозможно дизассемблировать без
расшифрования. Зашифрование (расшифрование) программ может
осуществляться аппаратными средствами или отдельными программами. Другой подход к защите от дизассемблирования связан с совмещением
процесса расшифрования с процессом выполнения программ. Если
расшифрование всей программы осуществляется блоком, получающим
управление первым, то такую программу расшифровать довольно просто.
Гораздо сложнее расшифровать и дизассемблировать программу, которая
поэтапно расшифровывает информацию, и этапы разнесены по ходу
выполнения программы. Задача становится еще более сложной, если процесс
расшифрования разнесен по тексту программы. Под «обманом» дизассемблера понимают такой стиль программирования,
который вызывает нарушение правильной работы стандартного дизассемблера
за счет нестандартных приемов использования отдельных команд, нарушения
общепринятых соглашений. «Обман» дизассемблера осуществляется
несколькими способами:
• нестандартная структура программы;
• скрытые переходы, вызовы процедур, возвраты из них и из
прерываний;
• переходы и вызовы подпрограмм по динамически изменяемым
адресам;
• модификация исполняемых кодов.
29. Аспекты проблемы защиты от исследования. Способы ассоциирования защиты и программного обеспечения. Оценка надежности защиты от отладки.
Задачу изучения программы в общем случае можно сформулировать следующим образом. Имеется бинарный код программы (например, ехе-файл) и минимальная информация о том, что эта программа делает. Нужно получить более детальную информацию о функционировании этой программы. Другими словами, известно, что делает программа, и необходимо узнать, как она это делает.
Работа по анализу программы состоит из трех основных этапов.
1. Подготовительный этап. На этом этапе аналитик знакомится с анализируемой программой, изучает доступную документацию, планирует дальнейшие исследования, подбирает коллектив и организует его работу. Если аналитик сумел получить исходный текст анализируемой программы, задача анализа программы в большинстве случаев решается тривиально. Наличие у аналитика отладочной информации об анализируемой программе также существенно упрощает дальнейшую работу.
2. Восстановление алгоритмов функционирования программы. Именно на этом этапе производится изучение программы.
3. Проверка полученных результатов. На этом этапе аналитик проверяет результаты проведенных исследований. Обычно эта проверка заключается в написании тестовой программы, которая реализует восстановленные алгоритмы анализируемой программы.
Способы изучения программ:
1) метод экспериментов;
2) статический метод;
3) динамический метод.
Программные отладочные средства (отладчики) используются динамическим методом восстановления алгоритмов защиты. Отладчик - это программа, которая загружает в память другую программу и предоставляет пользователю возможность наблюдать за ходом выполнения этой программы. Существует достаточно много отладчиков. Среди наиболеераспространенных можно назвать Turbo Debugger, Softice, WinDbg. Большинство современных компиляторов имеют встроенные отладчики. Выбор отладчика зависит от цели его применения.
Отладчики реализуют следующие функции:
• пошаговый проход программы (трассировка);
• пошаговый проход программы, при котором вызов функции обрабатывается как одна команда;
• пошаговый проход программы с "провалом" в прерывания;
• установка/снятие точки останова с заданной команды;
• установка/удаление аппаратной точки останова, установка/удаление точки останова с порта/портов;
• выполнение участка программы до ближайшей точки останова;
• выполнение участка программы до команды, подсвеченной курсором, или до ближайшей точки останова;
• перезагрузка программы;
• просмотр кода/памяти/регистров/флагов/стека;
• поиск строки в памяти;
• поиск машинной команды в памяти;
• изменение содержимого регистров/флагов/памяти/кода;
• чтение порта или запись в порт.
30. Перечень и краткая характеристика сертифицированных программно-аппаратных СЗИ для ПЭВМ.
СЗИ от НСД Secret Net 6 Вариант К (автономная версия)
Сертифицированное средство защиты информации от несанкционированного доступа, предназначенное для защиты информации, содержащей сведения, составляющие персональные данные. Представляет собой программно-аппаратный комплекс с PCI-платой.
Dallas Lock 7.7
Система предназначена для защиты компьютера, подключенного к локальной вычислительной сети, от несанкционированного доступа. СЗИ «Dallas Lock 7.7» может быть установлена на компьютеры, работающие под управлением следующих ОС: Windows ХР (Service Pack не ниже 3), Windows Server 2003 (SP не ниже 2), Windows Vista (SP не ниже 2), Windows Server 2008 (SP не ниже 2), Windows 7. «Dallas Lock 7.7» поддерживает только 32-х битные версии операционных систем.
Система «Dallas Lock 7.7» представляет собой программное средство защиты от несанкционированного доступа к информационным ресурсам компьютеров с возможностью подключения аппаратных идентификаторов.
СЗИ НСД «Dallas Lock 7.7» обеспечивает:
Защиту информации от несанкционированного доступа на ПЭВМ в ЛВС через локальный, сетевой и терминальный входы.
Разграничение полномочий и аудит действий пользователей по доступу к файловой системе и другим ресурсам компьютера. Разграничения касаются всех пользователей – локальных, сетевых, доменных, терминальных.