Главная страница
Навигация по странице:

  • Программа PDG

  • Исходный код Бинарный код Статический анализ

  • Динамический анализ (online)

  • Динамический анализ (offline)

  • Статический анализ Динамический анализ

  • Защита от статического анализа

  • Защита от динамического анализа

  • Усложнение кода (оптимизации)

  • IDA Pro )− Декомпилятор (IDA Pro

  • отол. 1_лек. Анализ кода и его применение


    Скачать 2.61 Mb.
    НазваниеАнализ кода и его применение
    Дата29.10.2022
    Размер2.61 Mb.
    Формат файлаdocx
    Имя файла1_лек.docx
    ТипАнализ
    #760589




    Анализ кода и его применение


    Гетьман Александр

    thorin@ispras.ru

    Заинтересованные стороны


    Разработчики ПО

    Устранение ошибок и уязвимостей

    − Понимание работы старых модулей

    − Интеграция со сторонним ПО

    − Отладка и сопровождение ПО

    − Оптимизация производительности

    Антивирусные лаборатории

    − Анализ поведения вредоносного кода

    Службы безопасности

    − Расследование инцидентов

    Органы сертификации

    − Сертификация ПО для использования в госучреждениях

    Возникающие задачи


    • Поиск ошибок, их классификация, и определение условий их возникновения и способов устранения

    • Поиск недокументированных возможностей

    • Предотвращение нарушений конфиденциальности, целостности и доступности

    Извлечение и описание отдельных алгоритмов

    Анализ протоколов передачи данных

    Какой код анализируется?

    Оборудование:

    Персональные компьютеры, сервера

    Коммуникационное оборудование

    Микроконтроллеры

    Мобильные устройства

    Специализированные устройства

    Архитектуры: x86, ARM, MIPS, PowerPC, …

    Пример «нестандартнго случая»


    • Поведение определяется обрабатываемыми данными • Нестандартная операционная система

    − Наилучший случай: модифицированный Linux, BSD

    • Доступна только прошивка, часть аппаратуры неизвестна

    Что такое анализ кода?

    Получение модели программы, удобной для алгоритмов

    Автоматическое восстановление или проверка свойств модели

    Визуализация удобная для ручного анализа

    Статическое представление программы

    Программа PDG

    Объекты анализа





    Исходный код

    Бинарный код

    Статический анализ

    Файл с исходным

    кодом

    (текстовый документ)

    • Исполняемый файл (PE, ELF,...)

    • Снимок памяти во время выполнения (бинарные данные)

    Динамический анализ

    (online)

    Инструментированный исходный код

    Инструментированный бинарный код

    Динамический анализ

    (offline)

    Трасса исходного кода

    Трасса бинарного кода

    Сравнение статического и динамического анализа

    Статический анализ

    Динамический анализ

    • Анализируется весь код со всеми ветвями выполнения (+)

    • Нет конкретных значений переменных, параметров и адресов (-)

    • Сложность анализа многопоточных приложений (-)

    • Анализ только самой программы без окружения (-)

    • Анализируется только часть кода исполнившаяся на конкретных входных данных (-)

    • Проблема подбора условий для выполнения нужного кода (-)

    • Известны значения всех адресов переменных, параметров (+)

    • Анализ многопоточных приложений (+)

    • Анализ программы в окружении (+)

    Сложность анализа бинарного кода


    Сложность дизассемблирования

    − Принцип фон Неймана

    − Вычисляемые переходы

    Сложность получения трассы

    − Подбор параметров

    − Замедление выполнения Сложность восприятия

    − Отсутствие параметров, переменных

    (вместо них — регистры и ячейки памяти)

    − Отсутствие «привычных» функций

    − Отсутствие управляющих конструкций

    (if, then, else, switch, for, while,...)

    Что такое функция?

    Функция возвращает управление на инструкцию, следующую за вызовом функции

    Существуют

    исключения: exit(), fork() и т.д.

    Зачем анализировать бинарный код?

    Отсутствие исходного кода

    Проблема «What You See Is Not What

    You eXecute»



    Комплексный анализ программы вместе с окружением (ОС, библиотеки и т.д.)

    Схема анализа бинарного кода

    Статический анализ

    Динамический анализ

    • Дизассемблирование

    • Построение статического представления

    • Запуск алгоритмов анализа

    • Получение трассы

    • Построение частичного статического представления

    + динамическая информация

    • Запуск алгоритмов анализа

    Актуальные направления исследований


    Разработка средств получения исходных данных

    − Дизассемблеры

    − Средства получения трассы

    Разработка инфраструктуры для анализа и получения статического представления

    Разработка алгоритмов анализа

    Примеры алгоритмов анализа

    Статический и динамический слайсинг

    Восстановление множеств возможных значений переменных

    Восстановление типов данных

    Дизассемблирование


    Проблемы:

    • Код какой архитектуры?

    • Что дизассемблировать? Принцип фон

    Неймана

    • При каких условиях? Разные режимы работы процессора Алгоритмы:

    • Линейный

    • Рекурсивный

    Красивый пример: Трасса Наложение инструкций выполнения





    Адрес

    Машинная команда

    Ассемблерная инструкция

    00823FEF

    60

    PUSHAD

    00823FF0

    EB2B

    JMP 0082401Dh

    0082401D

    EBD2

    JMP 00823FF1h

    00823FF1

    2BD2

    SUB EDX, EDX

    00823FF3

    700E

    JO 00824003h

    00823FF5

    EB1D

    JMP 00824014h







    Получение трассы


    Проблемы:

    Замедление процесса выполнения

    Пользовательский код и код ядра ОС

    Взаимодействие по сети

    Методы:

    Статическое инструментирование (s-spider)

    Динамическое инструментирование (Valgrind, Pin)

    Виртуальные машины (TEMU, ...)

    Двухпроходная трассировка(VMVare ReTrace)

    Двухпроходная трассировка


    • Цель – получение детальной трассы, исключая возможность обнаружения процесса трассировки извне

    • Все взаимодействие с внешним окружением фиксируется на первом этапе в журнале событий

    − Крайне низкие накладные расходы на трассировку

    • Второй этап – детерминированное воспроизведение

    − Подключение интерактивного отладчика

    − Снятие детальной трассы для последующего анализа



    Зачем защищать код от анализа?

    Коммерческая тайна (коммерческое ПО)

    Увеличение времени анализа и понимания кода (вирусное ПО)

    Информационная безопасность

    Классификация методов защиты

    Защита от статического анализа:

    Проверка целостности

    Динамическая распаковка

    Самомодификация

    Вычисляемые переходы

    Защита от динамического анализа:

    Подсчёт времени выполнения

    Контроль отладочных прерываний и регистров

    Поиск систем отладки

    Усложнение кода (оптимизации):

    Сокрытие вызовов и возвратов функций

    «Деформирование» CFG

    Смешивание потоков данных и управления

    Пример: выход из нескольких функций

    Main: CALL FuncA Main

    MOV EAX, 0

    FuncA: JMP @FuncB

    FuncB: MOV EAX,

    1

    RET

    Trace:CALL FuncA JMP @FuncB

    MOV EAX, 1

    RET

    MOV EAX, 0

    Методы внедрения защиты от анализа


    • Навесная: упаковка/шифрование исполняемого файла

    − Последний этап защиты после компиляции из исходных кодов, с учетом дополнительной информации полученной при компиляции

    • Встраиваемая

    Запутывание программного кода во время компиляции

    − Встраивание различных приемов, защиты от тестирования отладчиками

    • Пример часто применяемой: виртуальная машина

    − Встраивание интерпретатора инструкций сторонней архитектуры и исполнение на нем частей программы

    Средства анализа


    • Статический анализ

    − Двоичный редактор

    − Дизассемблер (IDA Pro)

    − Декомпилятор (IDA Pro/HexRays)

    − Алгоритмы анализа (IDA Pro + дополнения)

    • Динамический анализ

    − Обычный отладчик, Отладчик ядра (SoftICE, OllyDbg, WinDbg)

    − Средства получения трассы (Valgrind)

    • Системы анализа

    − BitBlaze, CodeSurfer/x86, IDA Pro, BAP, Dyninst, ...




    Недостатки и достоинства IDA Pro


    • Статическое представление программы – естественное для человеческого мышления

    • Косвенная адресация и динамическое изменение кода

    − Восстановленное статическое представление не полное

    • IDA Pro анализирует отдельный модуль

    − Минимальные ухищрения – доступно все адресное пространство процесса

    • IDA Pro – инфраструктура

    − Анализ – IDC-скрипты и модулирасширения, иногда очень дорогие (Zynamics, поглощенный Google)


    написать администратору сайта