Семинар ставит целью познакомить технических специалистов как с теоретическими, так и с прикладными вопросами оценки безопасности кода приложений (ПО).
Затрагиваются вопросы нормативной базы, классификации уязвимостей и дефектов ПО, а также стандартизации терминов и методик аудита, рассматриваются различные методы статического и динамического анализа, менеджмент процесса, существующие инструменты в этой области.
Проблемы безопасной разработки и поддержки импортных средств защиты информации
Аудит безопасности программного кода: Подходы, стандарты, технологии выявления дефектов безопасности программных систем.
1. Безопасность
программного обеспечения
Подходы, стандарты, технологии
выявления дефектов безопасности
программных систем.
Фадин Андрей, CISSP
Департамент программных разработок
ИУ-8, МГТУ им. Баумана,
ЗАО «НПО «Эшелон»
Москва, 2012 г.
2. Цель семинара
Изучить терминологию, стандарты в области
безопасности приложений
Изучить проблемы контроля безопасности
приложений и существующие подходы к её
решению, основанные на аудите кода
2
3. План занятия
Проблема обеспечения безопасности ПО
Актуальность проблемы
Технологии создания ПО
Основные понятия безопасности ПО
Угрозы безопасности ПО
Примеры
Стандартизация дефектов, угроз, уязвимостей
Аудит безопасности ПО
Материалы, методы, процедуры
3
5. Надежность программного обеспечения
Если бы строители строили здания также,
как программисты пишут программы,
первый залетевший дятел разрушил бы
цивилизацию.
Второй закон Вейнберга из книги Блох А.
Закон Мерфи //ЭКО. 1983. N1-3.
Программные системы:
высокая сложность структур
немного ограничений,
множество степеней свободы
слабая формализация и
стандартизация процессов
разработки и аудита ПО
6. Актуальность проблемы
Число уязвимостей зарегистрированных в NVD
7000
6000
5000
4000
3000
2000
1000
0
1996
2005
1988
1989
1990
1991
1992
1993
1994
1995
1997
1998
1999
2000
2001
2002
2003
2004
2006
2007
2008
2009
2010
2011
2012
Число уязвимостей зарегистрированных в NVD
National Vulnerability Database, 2012 6
8. Актуальность проблемы (3)
Факторы, обеспечивающие успешную реализацию
компьютерных преступлений
3%
6%
Человеческий фактор
19% Уязвимости программного
обеспечения
Нарушения логической
структуры
информационных систем
72% Другие факторы
IDC Consulting, 2008 8
9. Базовые понятия индустрии ПО
Виды распространения ПО
предустановленное
носители
сетевые каналы
ПО как услуга (SaaS)
Виды лицензирования ПО
Бесплатное
Freeware/Donationware
Условно-бесплатное
Shareware/Adware
Коммерческое
Commercial
С открытым кодом
Open Source (GPL, LGPL, MIT, BSD, MPL)
9
10. Производство программных продуктов
Исходные материалы
• Исходные тексты на языке программирования
• Файлы проектов, манифесты, конфигурация,
• Ресурсы, внешние зависимости (библиотеки, исполняемые модули)
Промежуточные материалы
• Машинный код/байт-код
• Конфигурация: начальные настройки
Релиз ПО
• Дистрибутив, пакет, установочный комплект
Инсталляция ПО
• Инсталлированная версия/удаленный сервис
• Конфигурация
10
11. Поколения языков программирования
Языки первого поколения (1GL)
• Машинный код (команды x86, ARM, MIPS, GPU)
Языки второго поколения (2GL)
• Языки ассемблера (fasm, gas, PTX)
Языки третьего поколения (3GL)
• ЯВУ (COBOL, Java, C/C++, BASIC, ADA, C#, Python, Perl,
PHP, Algol)
Языки четвертого поколения (4GL)
• ПОЯ, DSL (SQL, 1С, ABAP, XUL, CLIPPER, Oracle Reports, а
также LISP, Forth)
Языки пятого поколения (5GL)
• Логическое программирование, естественный язык,
визуальное программирование (Prolog, РЕФАЛ, OPS5,
11
Mercury, Yahoo! Pipes)
15. Жизненный цикл разработки систем
Концептуальное описание
• Conceptual Definition
Определение функциональных требований
• Functional requirements determination
Разработка спецификаций контролей
• Control Specifications Development
Рецензирование архитектуры
• Design review
Общий обзор программного кода
• Code review walk-through
Тестирование и приемка системы
• System test review
Поддержка и управление изменениями
• Maintenance and Change Management
16. Каскадная модель разработки
(Waterfall Development Model)
Оригинальная
Unmodified
Модифицированная
Modified
Модель «Сашими»
Sashimi Model
Верификация/валидация
16
18. Связанные концепции
Итеративная разработка (Iterative
development)
Прототипирование (Prototyping)
Подходы к разработке (Top-Down, Bottom-Up)
RAD
GUI builders, CASE, DBMS, code generators
Структурное программирование
Модули, слои
Стандарты SDLC
NIST SP 800-14
DOJ SDLC (10 шагов)
18
19. Гибкие модели (Agile Software
Development)
Scrum
Agile Unified Process (AUP)
Dynamic Systems Development Model (DSDM)
Extreme Programming (XP)
Crystal Clear
Feature driven development
Adaptive software development
Pragmatic Programming
19
21. Качество и надежность ПО
Качество (программного средства) – совокупность
свойств программного средства , которые
обусловливают его пригодность удовлетворять
заданные или подразумеваемые потребности в
соответствии с его назначением.
Надежность (программного средства) – совокупность
свойств, характеризующая способность программного
средства сохранять заданный уровень пригодности в
заданных условиях в течение заданного интервала
времени .
ГОСТ 28806-90 Качество программных средств. Термины и определения.
21
22. Качество и надежность ПО (2)
Качество программного обеспечения (software quality)
– весь объем признаков и характеристик программной
продукции, который относится к ее способности
удовлетворять установленным или предполагаемым
потребностям.
Характеристика качества. Надежность (Reliability) –
набор атрибутов, относящихся к способности
программного обеспечения сохранять свой уровень
качества функционирования при установленных
условиях за установленный период времени.
ГОСТ Р ИСО/МЭК 9126-93 Оценка программной продукции
22
23. Дефекты безопасности программного
обеспечения
Дефект – каждое отдельное несоответствие
продукции установленным требованиям
ГОСТ 27.002-89 Надежность в технике основные понятия. Термины и
определения.
Дефект безопасности ПО – ошибка в
программном продукте, вследствие которой
потенциально возможно нарушение
целостности, доступности или
конфиденциальности при функционировании
продукта.
23
24. Дефекты, изъяны и уязвимости
программного обеспечения
Дефект (Defect)
Функциональность (поведение)
Отказ работы
Масштабируемость
Сопровождение
Архитектура
Правила кодирования
Дефект безопасности
Изъян (Weakness по CWE)
Уязвимость (Vulnerability)
24
26. Недекларированные возможности
Недекларированные возможности – функциональные
возможности ПО, не описанные или не соответствующие
описанным в документации, при использовании которых
возможно нарушение конфиденциальности, доступности или
целостности обрабатываемой информации.
Руководящий документ Защита от несанкционированного доступа к
информации Часть 1. Программное обеспечение средств защиты
информации Классификация по уровню контроля отсутствия
недекларированных возможностей.
Недекларированные возможности (программного обеспечения) –
функциональные возможности программного обеспечения, не
описанные в документации.
ГОСТ Р 50.1.053—2005. Основные термины и определения в области
технической защиты информации.
26
27. Уязвимость информационной
системы
Уязвимость (информационной системы);
брешь - свойство информационной системы,
обусловливающее возможность реализации
угроз безопасности обрабатываемой в ней
информации.
ГОСТ Р 50922-2006. Защита информации. Основные
термины и определения Унифицированные
системы документации.
27
28. Взаимосвязь понятий
Информационная
Программное (компонент ИС) система
Компонент ИС
Внешний
Дефекты мир
ПО
Уязвимости
ИС
Недекларированные
возможности ПО
Компонент ИС
28
29. Безопасность ПО в жизненном
цикле программных систем
Анализ Дизайн Написание кода Развертывание
Тестирование ПО Эксплуатация ПО
требований к ПО архитектуры ПО ПО ПО
Угроза Инцидент с
Дефект ПО Уязвимость ПО безопасности безопасностью
ПО ИС
29
30. Методы обеспечения безопасности ПО в SDLC
Анализ требований и Варианты Требования по Анализ
вариантов использования злоупотреблений безопасности рисков
Внешний аудит
Анализ
Проектирование требований и
рисков
архитектуры
Разработка тестов на
Формирование
основе рисков по
тест-планов
безопасности
Статический Рецензии
Написание кода
анализ кода (инспекции) кода
Выполнение Динамический Анализ Рецензии
тестов анализ кода рисков (инспекции) кода
Внедрение Анализ Тестирование на Ограничение на
Патчи
продукта отзывов проникновение использование
30
32. Примеры, подходы к классификации и стандартизации
УГРОЗЫ БЕЗОПАСНОСТИ ПО
33. Основные тезисы раздела
Что присутствует в компонентах ИС?
Дефекты безопасности/НДВ
Программные закладки
Скрытые каналы
Вредоносное ПО
Чем грозит?
Угроза реализация той или иной уязвимости ИС
34. Программные закладки
Программная закладка: внесенные в программное обеспечение
функциональные объекты, которые при определенных условиях
(входных данных) инициируют выполнение не описанных в
документации функций программного обеспечения, позволяющих
осуществлять несанкционированные воздействия на информацию;.
ГОСТ Р 51275-99 Защита информации. Объект информатизации.
Факторы, воздействующие на информацию. Общие положения.
Программная закладка: преднамеренно внесенные в программное
обеспечение функциональные объекты, которые при
определенных условиях инициируют реализацию
недекларированных возможностей программного обеспечения.
ГОСТ Р 50.1.053—2005. Основные термины и определения в области
технической защиты информации.
34
35. Программные закладки (2)
Программные закладки – преднамеренно внесенные в ПО
функциональные объекты, которые при определенных
условиях (входных данных) инициируют выполнение не
описанных в документации функций ПО, приводящих к
нарушению конфиденциальности, доступности или
целостности обрабатываемой информации.
Руководящий документ Защита от несанкционированного
доступа к информации Часть 1. Программное обеспечение
средств защиты информации Классификация по уровню
контроля отсутствия недекларированных возможностей.
35
37. Скрытые каналы
Скрытый канал (covert channel) –
непредусмотренный разработчиком системы
информационных технологий и
автоматизированных систем
коммуникационный канал, который может
быть применен для нарушения политики
безопасности.
ГОСТ Р 53113.1-2008. Защита информационных технологий и
автоматизированных систем от угроз информационной
безопасности реализуемых с использованием скрытых
каналов. Часть 1. Общие положения.
37
38. Виды скрытых каналов
Скрытые каналы по памяти (storage channel)
Скрытые каналы по времени (timing channel)
Скрытые статистические каналы по ГОСТ Р 53113.1-2008
Примеры реализаций скрытых каналов :
сохранение информации в области между разделами
на жестком диске
нестандартного использование времени отклика в
сетевом протоколе ICMP
стеганографическая запись в графический файл
стандартного отчёта, генерируемого программой
38
39. Вредоносное ПО (malware)
Программный вирус: исполняемый программный
код или интерпретируемый набор инструкций,
обладающий свойством несанкционированного
распространения и самовоспроизведения
(репликации). В процессе распространения
вирусные субъекты могут себя модифицировать.
Некоторые программные вирусы могут изменять,
копировать или удалять программы или данные..
ГОСТ Р 51275-99 Защита информации. Объект информатизации.
Факторы, воздействующие на информацию. Общие положения.
39
41. Классификация вредоносного ПО (2)
По активации
Бомба (логическая/временная)
По действию
Порча данных (data diddling)
Воровство (Theft)
Обман (Hoax)
Шутки (Pranks)
Классификации
Kaspersky Lab http://goo.gl/Razkj
Symantec Corporation http://goo.gl/pBCLC
Mitre MAEC https://maec.mitre.org/
(на примере Conficker.B)
41
42. Реестры и классификации уязвимостей
Современные реестры
MITRE Common Vulnerabilities and Exposures (CVE)
NVD (National Vulnerability Database)
Национальная база уязвимостей США
OSVDB (Open Security Vulnerability Database)
База уязвимостей открытого доступа
US-CERT Vulnerability Notes Database
Бюллетени вендоров
Microsoft Bulletin ID
Secunia ID
VUPEN ID
Устаревшие классификации
Бишоп-Бэйли. Системные и сетевые уязвимости Unix-
систем
42
43. Классификации угроз и методов атак
Реестры актуальных угроз и дефектов
OWASP Top Ten
10 самых больших угроз для веб-приложений
2011 CWE/SANS Top 25 Most Dangerous Software
Errors
Классификации атак
MITRE Common Attack Pattern Enumeration and
Classification (CAPEC)
Описание атак
Microsoft STRIDE
43
44. Десятка OWASP (OWASP Top Ten)
A1 – Межсайтовый скриптинг (Cross Site Scripting, XSS)
A2 – Изъяны при внедрении (Injection Flaws)
A3 – Злонамеренный запуск файла (Malicious File Execution)
A4 – Небезопасная прямая ссылка на объект (Insecure Direct
Object Reference)
A5 – Подделка HTTP-запросов (Cross Site Request Forgery, CSRF)
A6 – Утечка информации и неправильная обработка ошибок
(Information Leakage and Improper Error Handling)
A7 – Нарушенная аутентификация и управление сессиями (Broken
Authentication and Session Management)
A8 – Небезопасное криптографическое хранилище (Insecure
Cryptographic Storage)
A9 – Небезопасные коммуникации (Insecure Communications)
A10 – Ошибка в запрете доступа к URL (Failure to Restrict URL
Access) 44
45. Стандартизация процессов
безопасности ПО
OWASP CLASP (Complex Lightweight Application
Security Process)
Microsoft Security Development Life Cycle
Guidance to Avoiding Vulnerabilities in
Programming Languages through Language
Selection and Use
45
46. Оценка критичности уязвимостей и дефектов и
качества работы средств анализа
CVSS (Common Vulnerability Scoring System)
CCSS (Common Configuration Scoring System)
NIST IR7517 The Common Misuse Scoring System
(CMSS): Metrics for Software Feature Misuse
Vulnerabilities
SAMATE (Software Assurance Metrics And Tool
Evaluation)
46
47. Классификации дефектов (defects),
изъянов (weaknesses)
Дефекты на этапе создания
Fortify Seven Pernicious Kingdoms
7 разрушительных "царств" компании Fortify
MITRE Common Weaknesses Enumeration (CWE)
Общая классификация изъянов ПО
DoD Software Fault Patterns
Дефекты на этапе эксплуатации
MITRE Common Configuration Enumeration (CCE)
DPE - Default Password Enumeration
Устаревшие
RISOS и PA
Таксономия Ландвера
Таксономия Аслама
Таксономия Макгоу
Таксономия Вебера
PLOVER 47
48. 7 разрушительных царств
(7 Pernicious Kingdoms)
1. Валидация ввода и представление
2. Эксплуатация API
3. Механизмы безопасности
4. Время и Состояние
5. Обработка ошибок
6. Качество кода
7. Инкапсуляция
*Окружение
48
49. Уязвимости и изъяны
CVE (Common Vulnerability
Enumeration)
CWE - Common Weakness Enumeration
49
51. Common Weakness Enumeration
http://cwe.mitre.org
метаязык для описания всех недостатков ПО,
схем защиты и атаки
Структура типа «дерево»
Категории
Составные элементы
Элементы
Сгруппировано по «отображениям»
Research View
Development View
C/C++ Developer View
Java Developer View
…
51
53. Сравнение ведущих классификаций уязвимостей и дефектов ПО
Название классификации Описание Достоинства Недостатки
Поддержка одного из
Нет разграничения по языкам
ведущих разработчиков
программирования.
Классификация средств для аудита кода.
Fortify Taxonomy семь Классификация чересчур
недостатков ПО на Простая для понимания
разрушительных царств. упрощена и не отвечает в
основе анализа структура.
полной мере требованиям
исходных текстов Существует достаточно
систематизации значительного
давно.
количества уязвимостей.
Десятка наиболее
Всего десять уязвимостей.
актуальных уязвимостей Актуальность, удобство
OWASP Top 10 Учитываются только уязвимости
веб-приложений за использования.
веб-приложений.
последний год.
Методы введения
безопасности в
Учитываются различные Рассматриваются только веб-
разработку приложений.
актуальные параметры приложения, в классификации
OWASP CLASP Проект содержит
уязвимостей кода веб- не учитываются ошибки
теоретическую базу, в
приложений. конфигурации.
частности, лексикон
уязвимостей.
Наиболее обширная
Система классификации
классификация, включает Уязвимости конфигурации,
изъянов ПО. Учитывает
в себя много других например, представлены всего
CWE более ранние
источников. Возможность одной записью, не дающей
аналогичные
различных видов ссылок на конкретные случаи.
разработки.
представления. 53
54. Разработка отечественного стандарта классификации
уязвимостей (в рамках ТК 362)
ГОСТ Р «Защита информации. Уязвимости
информационных систем. Классификация
уязвимостей информационных систем»
http://goo.gl/jgqf4
54
55. Текущее состояние разработки ГОСТа
Классы:
Уязвимости кода,
Группы:
Уязвимости в микропрограммах, ПЗУ,
Уязвимости ОС и ПО.
Уязвимости конфигурации.
Группы:
Технических средств ИС,
Общесистемного ПО ИС,
Специального и прикладного ПО ИС.
Типы уязвимостей определяются дефектами кода
или конфигурации и связаны с возможными
атаками
56. Фрагмент перечня уязвимостей в соответствии с их классификацией по стандарту
Класс Группа Вид Тип
Класс 1 – уязвимости кода
Группа 1.1 – уязвимости в микропрограммах, ПЗУ
Тип 1.1.1.1 – уязвимости, связанные с ошибками формата данных,
приводящие к переполнению буфера
Тип 1.1.1.2 – уязвимости, связанные с ошибками структуры и действий
Класс Группа Вид Тип
Тип 1.1.1.3 – уязвимости, связанные с ошибками специальных элементов
(символов или зарезервированных слов)
Тип 1.1.1.4 – уязвимости, связанные с ошибками путей перехода и
источников
Тип 1.1.1.5 – уязвимости, связанные с ошибками очищения и сравнения
Тип 1.1.1.6 – уязвимости, связанные с ошибками процессов и потоков
Тип 1.1.1.7 – уязвимости, связанные с ошибками обработчика
57. Класс 2 – уязвимости конфигурации
Группа 2.1 – уязвимости конфигурации технических средств ИС
Вид 2.1.1 – уязвимости в конфигурации микропрограмм, ПЗУ
Тип 2.1.1.1 – уязвимости, связанные с функциями, процедурами,
изменение параметров которых определенным образом позволяет
использовать их для несанкционированного доступа без обнаружения
таких изменений операционной системой
Тип 2.1.1.2 – уязвимости, связанные с наличием фрагментов кода
программ, введенных разработчиком, позволяющих обходить
процедуры идентификации, аутентификации, проверки целостности и
др.
Тип 2.1.1.3 – уязвимости, связанные с наличием ошибок в программах (в
объявлении переменных, функций и процедур, в кодах программ),
которые при определенных условиях приводят к сбоям, в том числе, к
сбоям функционирования средств и систем защиты информации
Вид 2.1.2 – уязвимости конфигурации интерфейсов управления
Тип 2.1.2.1 – уязвимости, связанные с функциями, процедурами,
изменение параметров которых определенным образом позволяет
использовать их для несанкционированного доступа без обнаружения
таких изменений операционной системой 57
58. Класс Группа Вид Тип
Вид 2.1.3 – уязвимости конфигурации контроллеров управления
Тип 2.1.3.1 – уязвимости, связанные с функциями, процедурами,
изменение параметров которых определенным образом позволяет
использовать их для несанкционированного доступа без обнаружения
таких изменений операционной системой
Тип 2.1.3.2 – уязвимости, связанные с наличием фрагментов кода
программ, введенных разработчиком, позволяющих обходить
процедуры идентификации, аутентификации, проверки целостности и
др.
Тип 2.1.3.3 – уязвимости, связанные с наличием ошибок в программах (в
объявлении переменных, функций и процедур, в кодах программ),
которые при определенных условиях приводят к сбоям, в том числе, к
сбоям функционирования средств и систем защиты информации
Вид 2.1.4 – уязвимости ПО организации взаимодействия с ОПО
Группа 2.2 – уязвимости конфигурации общесистемного ПО
Вид 2.2.1 – уязвимости конфигурации операционной системы
Тип 2.2.1.1 – уязвимости в средствах ОС, обеспечивающих выполнение
функций управления процессами
Тип 2.2.1.2 – уязвимости в средствах ОС, обеспечивающих выполнение
функций управления памятью 58
61. Предложение по стандарту классификации:
Класс 1 - Обработка и представление данных
Класс 2 - Внутренняя структура и зависимости
Класс 3 - Обработка событий и состояний
Тип 1 - Уязвимости вызванные дефектами кода и Класс 4 - Ресурсы и внутренние механизмы
проектирования системы системы
Класс 5 - Внедренные объекты (закладки)
Класс 6 - Качество проектирования, реализации,
документирования
Класс 7 - Конфигурация
Тип 2 - Уязвимости вызванные дефектами
конфигурирования и управления системой, а
также её окружением Класс 8 - Окружение
61
62. Обсуждение и развитие стандарта
Предварительная версия документа и
обсуждение:
http://s3r.ru/it-sec-std/
Рабочие материалы и результаты:
https://github.com/it-sec-std/
62
65. Уязвимость информационной
системы
Уязвимость (информационной системы);
брешь - свойство информационной системы,
обусловливающее возможность реализации
угроз безопасности обрабатываемой в ней
информации.
ГОСТ Р 50922-2006. Защита информации. Основные
термины и определения Унифицированные
системы документации.
65
66. Типовые уязвимости. Переполнение буфера
Переполнения буфера (buffer overrun) представляют собой
наиболее известный и распространённый класс
уязвимостей программного обеспечения. Первые попытки
применения переполнения буфера относятся к 60-м годам
прошлого века. Первая атака с применением данной
уязвимости использовалась в вирусе-черве Морриса в 1988
году. С тех пор их число увеличивается с каждым годом.
Подготовка кода, который будет
выполняться в контексте
привилегированной программы
Изменение последовательности
выполнения программы с передачей
управления подготовленному коду
66
68. Методы борьбы с переполнениями буфера
корректировка исходных текстов
использование неисполняемых
буферов
использование динамических систем
проверки выхода за границы
применение статических проверок
выхода за границы
68
72. Борьба с ошибками форматной строки
Валидация пользовательского ввода
Фильтрация пользователского ввода
72
73. Подходы к анализу безопасности ПО
Анализ архитектуры
системы (design review)
Рецензирование,
Статический анализ инспекция кода (code
(static analysis) review, code inspection)
Поиск потенциально
Структурное опасных конструкций с
тестирование помощью анализаторов
кода
(white-box testing)
Пример: РД НДВ
Taint-mode analysis
Аудит безопасности ПО Динамический анализ
(application security (dynamic analysis)
Контроль выполнения
audit) функциональных
Тестирование работы объектов (РД)
Функциональное механизмов
тестирование безопасности
(black-box testing)
Пример: РД НСД,
РДВ Фаззинг (fuzzing testing)
73
74. Требования проведения структурного тестирования
РД по НДВ Гостехкомиссии (1999)
3.3.3 Статический анализ исходных текстов программ
3.3.4 Динамический анализ исходных текстов программ
ГОСТ Р МЭК 61508-7-2007 (IEC 61508) Функциональная
безопасность (Safe Integrity Level)
B .6.4 Статический анализ
Анализ управления потоком, интерфейсов, потока данных
PCI DSS
Requirement 6.6 “Reviewing public-facing web applications via
manual or automated application vulnerability security assessment
tools or methods, at least annually and after any changes”
PA DSS
5.1.7 Review of payment application code prior to release ... -
NISTIR 4909: Software Quality Assurance
4.6.2.Source Code Documentation:
B.2.3.Source Code Review
75. Статический анализ
объекты исследования
исходные тексты ПО
исполняемый код ПО
материалы производства ПО (отладочная информация, логи
сборки, вывод внешних средств)
параметры программного проекта (проектные файлы,
манифесты)
особенности подхода
не требует запуска ПО
ограниченный набор проверяемых свойств ПО
(проблема «останова», теорема Райса)
сложность анализа нелинейно возрастает с ростом
объема анализируемого ПО
75
76. Области применения статического
анализа
компиляция, интерпретация
исследование архитектуры (CASE-средства) и
алгоритмов программы, автодокументирование
форматирование кода
вычисление программных метрик, общая оценка
качества
оптимизация, распараллеливание, профилировка
преобразования (трансформации) программ,
метапрограммирование
обфускация/деобфускация программ
обнаружение дефектов
76
77. Направления статического анализа
1.1 Декомпозиция и анализ структуры ПО
В рамках анализа архитектуры системы (design review)
В рамках рецензирования, инспекции кода (code review)
1.2 Проверка стиля программирования, подсчет
метрик
Рецензирование, инспекции кода
1.3 Проверка свойств (ограничений) программы на
моделях
Поиск потенциальных дефектов ПО с помощью
анализаторов кода
1.4 Поиск багов/дефектов по образцу (cигнатурный
анализ)
Поиск потенциальных дефектов ПО с помощью
анализаторов кода
77
78. РД. Защита от НСД к информации. ПО СЗИ. Классификация по уровню
контроля отсутствия недекларированных возможностей
(Гостехкомиссия России, 1999).
http://www.fstec.ru/_docs/doc_3_3_010.htm
Уровень контроля
Выполняемые проверки
4 3 2 1
1.Контроль состава и содержания документации + + + +
2.Контроль исходного состояния + = = =
3.1.Контроль отсутствия избыточности исходных текстов + + + =
3.2.Контроль соответствия исходных текстов загрузочному коду + = = +
3.3.Контроль связей функциональных объектов по управлению - + = =
3.4.Контроль связей функциональных объектов по информации - + = =
3.5.Контроль информационных объектов - + = +
3.6.Контроль наличия заданных конструкций - - + +
3.7.Формирование перечня маршрутов выполнения ФО - + + =
3.8.Анализ критических маршрутов выполнения ФО - - + =
3.9.Анализ алгоритма работы на основе блок-схем, построенных по - - + =
исходным текстам контролируемого ПО
4.1.Контроль выполнения функциональных объектов - + + =
4.2.Сопоставление фактических маршрутов и маршрутов, - + + =
построенных в процессе проведения статического анализа 78
82. Граф потока управления (CFG) и граф
зависимостей по данным (DFG)
1 int m(int x, int y) {
2 while (x > 10) {
3 x -= 10; // x = x - 10;
4 if (x == 10) {
5 break;
6 }
7 }
8 x = square(x);
9 if (y < 20 && x%2 == 0) {
10 y += 20; // y = y + 20;
11 }
12 else {
13 y -= 20; // y = y - 20; 14 }
15 return 2*x + y;
16 }
82
85. Сигнатурный анализ
Происхождение термина «сигнатурный анализ» (signature
analysis)
диагностика электронных схем путем сопоставления входного и
выходного сигнала
метод анализа подчерка в графологии
Сигнатурный анализ программного кода
Поиск программных дефектов в исходных
текстах или исполняемых модулях путем
сопоставления фрагментов кода или его
представления с образцами из базы шаблонов
(сигнатур)
85
86. Требования руководящего документа
Для второго уровня контроля необходимо
выполнять синтаксический контроль
наличия заданных конструкций в исходных
текстах ПО из списка (базы) потенциально
опасных конструкций.
Для первого уровня контроля необходимо
выполнять семантический контроль
наличия заданных конструкций в исходных
текстах ПО из списка (базы) потенциально
опасных конструкций.
86
87. Нормативная база применения метода сигнатурного анализа
РД. Защита от НСД к информации. ПО СЗИ. Классификация по уровню контроля отсутствия недекларированных
возможностей (Гостехкомиссия России, 1999).
Уровень контроля
Выполняемые проверки
4 3 2 1
1.Контроль состава и содержания документации + + + +
2.Контроль исходного состояния + = = =
3.1.Контроль отсутствия избыточности исходных текстов + + + =
3.2.Контроль соответствия исходных текстов загрузочному коду + = = +
3.3.Контроль связей функциональных объектов по управлению - + = =
3.4.Контроль связей функциональных объектов по информации - + = =
3.5.Контроль информационных объектов - + = +
3.6.Контроль наличия заданных конструкций - - + +
3.7.Формирование перечня маршрутов выполнения ФО - + + =
3.8.Анализ критических маршрутов выполнения ФО - - + =
3.9.Анализ алгоритма работы на основе блок-схем, построенных по - - + =
исходным текстам контролируемого ПО
4.1.Контроль выполнения функциональных объектов - + + =
4.2.Сопоставление фактических маршрутов и маршрутов, - + + =
построенных в процессе проведения статического анализа 87
88. Процесс работы статического анализатора кода
Предварительный
обзор материалов
проекта и Препроцессинг Лексический анализ
формирование
пакетов задач
Семантический Синтаксический
Сигнатурный анализ
анализ анализ
Построение отчетов и
последующие
преобразования
•Отчеты по структуре
•Отчеты по сигнатурному анализу
•Экспорт моделей (e.g. UML)
•Преобразование (e.g. XMLVM)
89. Динамический анализ ПО
Динамический анализ ПО (англ. Dynamic program analysis) — анализ
программного обеспечения, выполняемый при помощи выполнения
программ на реальном или виртуальном процессоре.
Dowson, M. (March 1997). "The Ariane 5 Software Failure". Software
Engineering Notes 22
Динамический анализ исходных текстов программ – совокупность
методов контроля (не)соответствия реализованных и декларированных в
документации функциональных возможностей ПО, основанных на
идентификации фактических маршрутов выполнения функциональных
объектов с последующим сопоставлением маршрутам, построенным в
процессе проведения статического анализа.
Руководящий документ Защита от несанкционированного доступа к
информации Часть 1. Программное обеспечение средств защиты
информации Классификация по уровню контроля отсутствия
недекларированных возможностей.
Методы проведения динамического анализа
Внедрение датчиков в исходные тексты
Внедрение датчиков в исполняемый код (до или после загрузки кода в ОЗУ)
Установка точек останова (breakpoints) или перехватчиков вызовов (hooks)
Степень покрытия, метрики структурные и функциональные критерии
Взаимодействие статического и динамического анализа (Tainted
mode) 89
90. Понятия CWE
Продукт (PRODUCT) Механизм защиты (PROTECTION
Функ. возможность (FEATURE) MECHANISM)
Ресурс (RESOURCE) Атака, Атакующий (ATTACK, ATTACKER)
Поведение (BEHAVIOR) Последствие (CONSEQUENCE)
Манипуляции (MANIPULATIONS) Изъян (WEAKNESS)
Свойства (PROPERTIES) Уязвимость (VULNERABILITY)
Деятели (ACTORS) Цепь (CHAIN)
Роли (ROLES) Композиция (COMPOSITE)
Директивы (DIRECTIVES) Слои (LAYERS)
Каналы (CHANNELS) Отказы защитного механизма, ОЗМ
Топология (TOPOLOGY) (Protection Mechanism Failures, PMF)
Сфера контроля (CONTROL SPHERE) Санация (SANITIZATION)
Политика безопасности (SECURITY
POLICY)
90
91. Понятия CWE(1)
Продукт (PRODUCT)
Функ. возможность (FEATURE)
Ресурс (RESOURCE)
Поведение (BEHAVIOR)
Манипуляции (MANIPULATIONS)
Изменение ресурса деятелем
Свойства (PROPERTIES)
Связанный с безопасностью атрибут данных, поведений, кода, который в
определенных случаях меняется во время работы продукта.
Деятели (ACTORS)
Типы деятелей: Пользователь, Сервис, Посторонний(Outsider), Информатор
(Consultant), Наблюдатель (Monitor/Observer)
91
92. Характеристики свойств
Корректность (VALIDITY)
GET index.html (no version)
non-existent username
"<SCRIPT" without closing tag
inconsistent length/payload
packet with length field inconsistent with actual length
"US3R" token when only A-Z characters are expected
Эквивалентность (EQUIVALENCE)
"../.." == "%2e%2e/%2e%2e" (in URIs)
"filename.txt" == "FileName.txt." (in Windows)
$_GET['x'] == $_REQUEST['x'] (in PHP)
step equivalence: (A->B->C) == (A->C)
"/tmp/abc" and a symlink to /tmp/abc
"localhost" and "localhost.example.com" (fully qualified domain name)
127.0.0.1 and "hostname.example.com" (IP address and its domain name)
Изменчивость (MUTABILITY)
Доступность (ACCESSIBILITY)
Доверенность(TRUSTABILITY)
Уникальность (UNIQUENESS)
Предсказуемость (PREDICTABILITY) 92
93. Измерения корректности (dimensions of validity)
Оригинал: GET index.html HTTP/1.1
Лексическая некорректность:
G#T index.html HTTP/1.a
Синтаксическая некорректность:
Доменная некорректность
GITCHY index.html ABCD/1.1
Относительная некорректность
POST запрос с полем Content-Length,
несовпадающим с реальным размером
запроса
93
94. Понятия CWE(2)
Роли (ROLES)
Жертва, атакующий, свидетель, сообщник, проводник
Директивы (DIRECTIVES)
запрос, команда, сигнал и др.
Каналы (CHANNELS)
Топология (TOPOLOGY)
SQL-инъекция: пользователь (роль: атакующий) отправляет сфабрикованный запрос к
веб-приложению (роль: проводник) по одному каналу (TCP порт 80), а веб-сервер
отправляет SQL-запрос по другому каналу к серверу БД (роль: жертва )
Сфера контроля (CONTROL SPHERE)
94
95. Понятия CWE(3)
Цепь (CHAIN)
Пример: целочисленное переполнение (CWE-190)
при вычислении объема выделяемой памяти, что
приводит к меньшему объему буфера и его
переполнению (CWE-120)
Композиция (COMPOSITE)
Атака «следование символическим ссылкам»
(CWE-61) требует одновременно:
предсказуемось имен файлов (CWE-340)
неправильные права доступа (CWE-275)
гонка условий (CWE-362)
95
96. Понятия CWE(4)
Политика безопасности (SECURITY POLICY)
Механизм защиты (PROTECTION
MECHANISM)
Атака, Атакующий (ATTACK, ATTACKER)
Последствие (CONSEQUENCE)
Изъян (WEAKNESS)
Уязвимость (VULNERABILITY)
96
97. Понятия CWE(5)
Слои (LAYERS)
Слой Системы (память, диски, файлы,
процессор; поведения: систем вызовы, запуск
процессов)
Слой Кода (переменные, структуры, сокеты,
дескрипторы, строки; поведения:
присваивания,вызовы функций, обработка
исключений)
Слой Приложения ( cookies, сообщения,
профили, базы данных; поведения: хранение
данных, аутентификация, отправка
сообщений).
97
98. Пример использования слоёв в анализе кода
/* ignore group ID for this example */
old_id = getuid();
setuid(0);
AttachToPrivilegedDevice();
/* CWE-252 [code layer], CWE-273
[application layer] */
setuid(old_id);
filename = GetUntrustedFilename();
WriteToFile(filename, "Hello world");
На уровне кода (CWE-252) отсутствие проверок
возвращаемых значений.
На уровне приложений (CWE-273) – недостаточная
проверка оставленных привилегий
98
99. Понятия CWE(5)
Отказы защитного механизма, ОЗМ (Protection
Mechanism Failures, PMF)
Отсутствие реализации
Некорректная реализация
Санация (SANITIZATION), виды:
Верификация (VERIFICATION)
Косвенный выбор (INDIRECT SELECTION)
Очистка (CLEANSING)
Приведение по конвертированию (ENFORCEMENT BY
CONVERSION)
Использование «песочницы» (sandboxing)
Пример: web-application firewall
99
113. Компонентный анализ ПО
особенности современного ПО
разделено на компоненты (подкомпоненты)
четко заданные интерфейсы
разные уровни доверия и требования к
безопасности компонентов
анализ архитектуры
сокращение расходов на рецензирование и
тестирование
парадигмы программирования. структуры.
113
114. Виды аудита безопасности программных систем
Этап жизненного цикла
Анализа архитектуры системы (design review)
Инспекции кода (code review)
Время проведения
Тематические инспекции
Регулярные инспекции
«Парное» программирование
Pre-commit review
Post-commit review
Стандарты и руководства
OWASP Code Review Guide
OWASP Application Security Verification Standard
(ASVS)
114
115. Метрики безопасности ПО.
Для обеспечения постоянного контроля качества
всех процессов во время жизненного цикла ПО
необходимы индикаторы, система
сбалансированных метрик, позволяющая оценить
текущую ситуацию и качество процесса в целом.
От верификации до системы контроля качества.
Метрическое пространство
Метрика - числовое значение, инструмент оценки
показателей системы или ее отдельных
компонентов
115
116. Повышение эффективности существующих
руководящих документов.
С момента введение в действие РД по НДВ прошло около
десяти лет, время не стоит на месте.
Каких проверок нам не хватает?
Антивирусная проверка
Проверка лицензионной чистоты
Контроль платформы
Контроль зависимостей
Проверка всех этапов эксплуатации и развертывания
ПО
Компоненты и структура связей ПО
Контроль исходного состояния. Проблемы
существующего ПО в этой области.
116
117. Литература: монографии
Методы оценки несоответствия средств защиты информации / Марков
А.С.,Цирлов В.Л.,Барабанов А. В. - Изд-во "Радио и связь", 2012. — 192 с.
CISSP Study Guide 6th Edition / J.M. Stewart, M. Chapple, D. Gibson, 2012.
Official (ISC)2 Guide to the CISSP CBK, 3rd Edition / (ISC)2 Press, 2012.
Основы информационной безопасности: Краткий курс / В.Л. Цирлов. – Изд-во
«Феникс», 2008. – 172 с.
117
118. Литература: публикации
Фадин А.А. Рекомендации по контролю наличия заданных конструкций. //
Методы оценки несоответствия средств защиты информации. /
под.ред.А.С.Маркова. М.: Радио и связь. 2012. C.180-185. ISBN 5-89776-0152.
Барабанов А.В., Марков А.С., Фадин А.А. Сертификация программ без исходных
текстов // Открытые системы. СУБД. 2011. № 4. С.38-41.
Марков А.С., Барабанов А.В., Фадин А.А. Выявление недекларированных
возможностей в декомпилированных текстах программного обеспечения.//
Известия Института инженерной физики. 2010. Т. 4. № 18. С. 24-26.
Марков А.С., Миронов С.В., Цирлов В.Л. Выявление уязвимостей в программном
коде. // Открытые системы. СУБД. 2005. № 12. С.64-69.
118
119. Литература: тезисы и выступления
конференций безопасности методом
Марков А.С., Фадин А.А. К вопросу о выявлении дефектов
статического сигнатурного анализа // Материалы XII Международной
конференции "Информационная безопасность" - Таганрог: Изд-во ТРТУ, 2012.
Веряев А.С., Фадин А.А., Цирлов В.Л. К вопросу об аудите безопасности WI-FI
сетей // Материалы XII Международной конференции "Информационная
безопасность" - Таганрог: Изд-во ТРТУ, 2012.
Обзор таксономий уязвимостей программного обеспечения / Марков А.С., Фадин
А.А. – II Международная конференция «ИТ-Стандарт 2011», 2011.
Подход к решению проблемы аудита информационной безопасности /
Барабанов А.В. - Конференция "Студенческая научная весна 2011», МГТУ
им.Н.Э.Баумана, 2011.
Средства и технологии анализа защищенности / А.С.Марков, А.А.Фадин,
В.Л.Цирлов // XХ Конференции "Информатизация и информационная
безопасность правоохранительных органов». – М.: Академия управления МВД
России, 2011.
Специальные технологии анализа защищенности / А.С.Марков, А.А.Фадин //
Межведомственная научная Юбилейная конференция «Современные тенденции
развития теории и практики управления в системах специального назначения»,
ФГУП «Концерн «Системпром», 2011
119