Уязвимости в машинном коде

advertisement
Уязвимости в машинном коде
Докладчик: Израилов К.Е.
Проекты с исходным кодом
Параметры
Средний
Крупный
Исходный коды
100 MB (язык C)
1.4 GB (язык C, Perl, Jam)
Машинный код
60 MB
4x150 MB
Число функций
75000
250000
Используемые
ресурсы
2 ПК: CPU-2 GHz, Mem-4 Gb,
HDD-200 Gb
4 ПК: CPU-3 GHz, Mem-16 Gb,
HDD-1 TB
2 Сервера: X и Y
Длительность
1 год
4 года
Созданные
средства
Отладчик и эмулятор
платформы, СА и ДА
5 СА, 10 скриптовых программ
Использованные Windows, Linux, IDA Pro, C,
средства
C++, CygWin, C#, Dynamips,
GNS
Сложности
Windows, Linux, OS-X, OS-Y, IDA
Pro, C, C++, Ruby, Perl, C#,
VMware, внешние СА
Динамический анализ –
Статический анализ – обработка
отработка средней функции 1/7 части кодов составляет 2 дня
составляет 10 минут
и создает 200 Mb данных отчета
Поиск уязвимостей в коде
Уязвимости
Исходный код
Машинный код
Отечественные. комм. орг.
Иностранные комм. орг. и
спецслужбы,
киберпреступные орг.
Производители кода
Средняя
Высокая
Сложность поиска
Сертификация ФСТЭК,
иные
Отдельные НИР
Методы поиска
ФСТЭК, лаборатории, НИИ
Антивирусные компании,
энтузиасты
Организации по
поиску
Уязвимости в машинном коде
Аппаратное средство
(Cisco Router)
Машинный код
Уязвимости в машинном коде
Аппаратное средство
(Cisco Router)
Машинный код
Уязвимость
Уязвимости в машинном коде
Аппаратное средство
(Cisco Router)
Машинный код
Входные данные
Уязвимость
Уязвимости в машинном коде
Аппаратное средство
(Cisco Router)
Машинный код
Уязвимость
Скомпрометированные данные
Выходные данные
Уязвимости в машинном коде
Аппаратное средство
(Cisco Router)
Машинный код
Уязвимости
#
Тип
Структурный Описание
уровень
Вычислительный
Низкий (НУ)
Ошибки в реализации вычислений, типах
и структурах данных, работе с ними
Алгоритмический Средний (СУ) Ошибки в логике работы алгоритмов
Архитектурный
Высокий (ВУ)
Ошибки в архитектуре
Сложность поиска уязвимостей:
НУ ? СУ ? ВУ
Уязвимости
#
Тип
Структурный Описание
уровень
Вычислительный
Низкий (НУ)
Ошибки в реализации вычислений, типах
и структурах данных, работе с ними
Алгоритмический Средний (СУ) Ошибки в логике работы алгоритмов
Архитектурный
Высокий (ВУ)
Ошибки в архитектуре
Сложность поиска уязвимостей:
НУ < СУ < ВУ
Методы поиска уязвимостей
Тип метода
Достоинства
Недостатки
Тип
уязвимостей
Статический
Высокая скорость
автоматизиров работы
анный
Малое количество
обнаруживаемых
уязвимостей
НУ
Статический
ручной
Низкая скорость работы
НУ, СУ
Крайне высокая
трудоемкость
НУ, СУ
Большое количество
обнаруживаемых
уязвимостей
Динамический Возможность полного
управления процессом
“Хаотическое
тестирование”
(fuzzing и др.)
Простая автоматизация Слишком грубый и
и огромный объем
применимый в
тестирования
основном для оценки
качества
НУ
Метод восстановления
алгоритмов машинного кода
Особенности:
– применим для поиска СУ и ВУ уязвимостей
– использует Утилиту для восстановления
алгоритмов
– вид алгоритмов хорошо понятен эксперту
– является итерационным
Метод использует собственную Модель
Классическая модель машинного
кода
Элемент кода
Элемент кода
Блок действий алгоритма
Остаточные метаданные
Элемент кода
Элемент кода
Блок инструкций машинного кода
Низкоуровневые уязвимости
13
Предлагаемая структурная Модель
машинного кода
Машинный код
Алгоритм функции N
Архитектура кода
Инструкции машинного кода
Схема алгоритма
Метаданные алгоритма
Среднеуровневые уязвимости
Использование методами
Данные
Интерфейс
Схема архитектуры
Метаданные
архитектуры
Высокоуровневые
уязвимости
Сравнение моделей
Предмет
сравнения
Классическая модель
Структурная модель
Специализация
(назначение)
Общая
Алгоритмизация кода и поиск
уязвимостей
Доступные для
поиска уязвимости
Низкоуровневые
Среднеуровневые и
высокоуровневые
Структуризация
элементов
Низкая
Высокая (заложена в саму систему)
Удобство
моделирования
Низкое
Высокое (для специализированных
методов)
Форма vs. Содержание
Потерянные
метаданные
Ассемблер
Компиляция
Метаданные
Человек
Метаданные
Алгоритмический
язык
•Эвристические методы
•Особенности перцепции
Алгоритмы
Метаданные
Предсказанные
метаданные
Алгоритмы
Ассемблер
Восстановление,
Декомпиляция
Алгоритмы
Метаданные
Вычислительная машина
Высокоуровневый
язык
Алгоритмы
Метаданные и их восстановление
Название
Наличие в МК Восстановления возможно?
Имена
Нет – информация теряется на этапе ассемблирования
Типы
Частично – на основании анализа доступа к памяти и
диапазонов значений переменных
Способы
доступа
Нет – информация теряется на начальном этапе
компиляции
Аргументы
функции
Да – на основании анализа используемых без
инициализации регистров
Возвраты
функции
Да – на основании анализа не используемых после
инициализации регистров
Объекты
алгоритма
Ветвления,
циклы
Да – на основании анализа графов:
• потока управления (FlowGraph)
• потока данных (DataGraph)
• времени жизни переменных (LifeGraph)
Значения
переменных
Да – на основании анализа графа потока данных
(DataGraph)
Языковая
специфика
Нет – информация теряется на этапе генерации
ассемблера
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Укрупненная схема Метода
Метод
Программное
обеспечение
Уязвимости
Машинный
код
Ассемблер
Алгоритмы
работы кода
Фаза 1.
Применение
внешних утилит:
IDA Pro + скрипты
Фаза 2.
Применение
средства
автоматизации Утилиты
Фаза 3.
Анализ
полученного
представления
экспертом
Фаза 4.
Корректировка
Ограничения Метода
Тип
Описание
Назначение
Анализ алгоритмов кода с целью поиска уязвимостей
без точного восстановления исходного кода
Парадигма
программирования
исследуемого кода
Структурное/процедурное/частично объектноориентированное
(Пример: C, C++, Pascal)
Оптимизация/обфускац В случае оптимизации/обфускации эффективность
ия исследуемого кода
применения снижается
Виды уязвимостей
Подходит только для поиска СУ и ВУ уязвимостей
Автоматизированный
поиск уязвимостей
Нарушение низкоуровневой структуры алгоритмов,
подозрительные архитектурные связи (расширяемо)
Пример работы Утилиты
Машинный код (PowerPC)
0x0000:
0x0004:
0x0008:
0x000C:
2C
41
38
4E
03
80
63
80
00
00
00
00
00
08
01
20
Внутреннее представление
(CallGraph)
Begin
Yes
label:
No
r3=r3+1
funct(){
0x0000:
0x0004:
0x0008:
0x000C:
0x000C:
}
cmpwi r4, 0
blt label
addi r3, r3, 1
label:
blr
Выходной алгоритм
cr.0=(r4<0)
cr.0?true
Входной ассемблер
End
funct(w1_, w2_) {
if (w2_ >= 0)?true {
++w1_;
}
return (w1_);
}
Internet-ресурс http://demono.ru
Вопросы?
Download