2. Что есть?
Руководящий документ «Защита от НСД к
информации. Часть 1. Программное
обеспечение средств защиты
информации. Классификация по уровню
контроля отсутствия недекларированных
возможностей» (Гостехкомиссия, 1999 )
2
3. Что должны искать?
Недекларированные возможности -
функциональные возможности ПО, не
описанные или не соответствующие
описанным в документации, при
использовании которых возможно
нарушение конфиденциальности,
доступности или целостности
обрабатываемой информации.
3
4. Что должны искать?
Программные закладки –
преднамеренно внесенные в ПО
функциональные объекты, которые при
определенных условиях (входных данных)
инициируют выполнение не описанных в
документации функций ПО, приводящих к
нарушению конфиденциальности,
доступности или целостности
обрабатываемой информации.
4
6. Что ищут за пределами РФ
Уязвимость - дефект ПО, возникший на
этапе его проектирования, реализации
или эксплуатации и потенциально
способный привести к нарушению
конфиденциальности, целостности или
доступности обрабатываемой с его
помощью информации.
6
7. Классификация уязвимостей ПО
Позволяющие реализовать сбор или хищение данных.
Позволяющие реализовать перехват сетевой информации.
Позволяющие реализовать перехват потоков данных
(например, с консоли ввода пользователя).
Позволяющие превысить полномочия при доступе к
информации, хранящейся в базе данных.
Позволяющие реализовать сокрытие информации.
Обеспечивающие выполнение скрытых процессов.
Позволяющие реализовать сокрытие данных.
8. Классификация уязвимостей ПО (2)
Позволяющие реализовать скрытые каналы передачи
информации.
Позволяющие реализовать управляющее воздействие на
информационную систему.
Позволяющие реализовать удалённое управление
программной системой.
Позволяющие реализовать нарушение доступности
удалённой системы.
9. Подходы к выявлению уязвимостей ПО:
зарубежный опыт (IBM, Fortify, OWASP,
CWE)
OWASP Top Ten
10 самых больших угроз для веб-приложений
Fortify Seven Pernicious Kingdoms
7 разрушительных "царств" компании Fortify
MITRE Common Weaknesses Enumeration
всесторонняя классификация изъянов ПО
10. Десятка 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)
11. 7 разрушительных царств
(Fortify Seven Pernicious Kingdoms)
1. Валидация ввода и представление
2. Эксплуатация API
3. Механизмы безопасности
4. Время и Состояние
5. Обработка ошибок
6. Качество кода
7. Инкапсуляция
*Окружение
12. Common Weakness Enumeration
http://cwe.mitre.org
метаязык для описания всех недостатков ПО, схем
защиты и атаки
Структура типа «дерево»
Категории
Элементы
Составные элементы
Сгруппировано по «отображениям»
Research View
Development View
C/C++ Developer View
Java Developer View
…
13. Уязвимости и изъяны
CVE (Common Vulnerability
Enumeration)
CWE - Common Weakness Enumeration
16. АК-ВС поддерживает работу с языками
С, С++
С#
Java
Построение отчетов АК-ВС
Списка функциональных объектов
Списка информационных объектов
Списка висячих функциональных объектов
Связей ФО по управлению и по информации
Построение трасс вызовов (ф-ф, ф-в, в-в)
Построение графов вызовов
Построение блок-схем
Ведение протокола вставки датчиков
АК-ВС
17. Сигнатурный модуль базируется на CWE
База сигнатур для поиска программных закладок
и уязвимостей включает конструкции способные
привести к:
переполнению буфера;
обращениям к файловой системе;
манипулированию именами;
уязвимости для троянских атак;
вводу пароля;
возможному превышению полномочий;
уязвимости для DOS-атак;
низкоуровневой работе с дисками и файловой
системой;
скрытым каналам передачи информации.
АК-ВС
18. АК-ВС позволяет отслеживать:
ассемблерные вставки;
операции с датой/временем;
сетевое взаимодействие;
отладочную информацию;
работу с временными характеристиками;
параметры командной строки;
операции с параметрами безопасности среды;
скрытые сообщения;
точки ввода/вывода данных;
операции, связанные с обработкой прерываний;
обращение к криптографическим примитивам;
вызов внешних процедур;
обращение к файловым системам.
АК-ВС
19. Сигнатурный модуль АК-ВС
Ориентирован на выявление потенциально
опасных конструкций в коде, которые могут
привести к нарушению безопасности системы
Поддерживается международными
объединениями (ОWASP)
Поддерживает международный стандарт (MITRE
– CWE)
Все выявленные НДВ, программные закладки,
ошибки проектирования и некорректности
кодирования, влияющие на безопасность, были
выявлены с помощью сигнатурного метода
АК-ВС
20. АК-ВС может применяться:
Для сертификационных испытаний на отсутствие НДВ
При проведении аудита кода по требованиям
безопасности
При разработке программного обеспечения
АК-ВС
Валидация ввода и представление (Input Validation and Presentation)
переполнение буфера (Buffer Overflow)
внедрение комманд (Command Injection)
межсайтовый скриптинг (Cross-Site Scripting)
форматная строка (Format String)
разбиение ответа HTTP сервера (HTTP Response Splitting)
неверное значение указателя (Illegal Pointer Value)
целочисленное переполнение (Integer Overflow)
раскрытиелога (Log Forging)
Writing unvalidated user input into log files can allow an attacker to forge log entries or inject malicious content into logs.
Проход путей (Path Traversal)
Allowing user input to control paths used by the application may enable an attacker to access otherwise protected files.
Контроль над процессами (Process Control)
Executing commands or loading libraries from an untrusted source or in an untrusted environment can cause an application to execute malicious commands (and payloads) on behalf of an attacker.
Вставка ресурсов (Resource Injection)
Allowing user input to control resource identifiers may enable an attacker to access or modify otherwise protected system resources.
Манипуляции параметрами (Setting Manipulation)
Allowing external control of system settings can disrupt service or cause an application to behave in unexpected ways.
SQL инъекция (SQL Injection)
Constructing a dynamic SQL statement with user input may allow an attacker to modify the statement's meaning or to execute arbitrary SQL commands.
Ошибка при завершении строки (String Termination Error)
Relying on proper string termination may result in a buffer overflow.
9 уязвимостей Struts: Дублирующиеся Формы Валидации (Duplicate Validation Forms)
Опасное использование Java Native Interface (JNI)
Improper use of the Java Native Interface (JNI) can render Java applications vulnerable to security flaws in other languages. Language-based encapsulation is broken.
Опасное использование отражений (Reflection)
Валидация XML (XML Validation)
Failure to enable validation when parsing XML gives an attacker the opportunity to supply malicious input
Эксплуатация API
Опасная функция (Dangerous Function)
Functions that cannot be used safely should never be used.
Ограничения директорий (Directory Restriction)
Improper use of the chroot() system call may allow attackers to escape a chroot jail.
Анализ «Кучи» (Heap Inspection)
Do not use realloc() to resize buffers that store sensitive information.
Правила безопасности J2EE: getConnection()
The J2EE standard forbids the direct management of connections.
Правила безопасности J2EE: Sockets
Socket-based communication in Web applications is prone to error.
Неверное использование: Аутентификация(Often Misused: Authentication)
(See the complete entry on page 290 in this chapter.)
Неверное использование:: Обработка ошибок (Often Misused: Exception Handling)
A dangerous function can throw an exception, potentially causing the program to crash.
Неверное использование: Манипулирование путями(Often Misused: Path Manipulation)
Passing an inadequately sized output buffer to a path manipulation function can result in a buffer overflow.
Неверное использование: Управление привилегиями (Often Misused: Privilege Management)
Failure to adhere to the principle of least privilege amplifies the risk posed by other vulnerabilities.
Неверное использование: Манипуляции со строками (Often Misused: String Manipulation)
Functions that manipulate strings encourage buffer overflows.
Непроверяемое возвращаемое значение (Unchecked Return Value)
Ignoring a method's return value can cause the program to overlook unexpected states and conditions.
Механизмы безопасности
Незащищенные случайные данные (Insecure Randomness)
Standard pseudo-random number generators cannot withstand cryptographic attacks.
Нарушение принципа наименьших привилегий (Least Privilege Violation)
The elevated privilege level required to perform operations such as chroot() should be dropped immediately after the operation is performed.
Отсутствие контроля доступа (Missing Access Control)
The program does not perform access control checks in a consistent manner across all potential execution paths.
Управление паролями (Password Management)
Storing a password in plaintext may result in a system compromise.
Управление паролями: пустые пароли в файле конфигурации (Password Management: Empty Password in Configuration File)
Using an empty string as a password is insecure.
Управление паролями: Жестко закодированные пароли (Password Management: Hard-Coded Password)
Hard-coded passwords may compromise system security in a way that cannot be easily remedied.
Управление паролями: Пароль в файле конфигурации (Password Management: Password in Configuration File)
Storing a password in a configuration file may result in system compromise.
Управление паролями: Слабая криптография (Password Management: Weak Cryptography)
Obscuring a password with trivial encoding does not protect the password.
Нарушение приватности (Privacy Violation)
Mishandling private information, such as customer passwords or social security numbers, can compromise user privacy and is often illegal.
Время и Состояние (Time and State)
Дэдлок (Deadlock)
Inconsistent locking discipline can lead to deadlock.
Невозможность начать новую сессию по аутентификации (Failure to Begin a New Session upon Authentication)
Using the same session identifier across an authentication boundary allows an attacker to hijack authenticated sessions.
Гонки доступа к файлу: Время проверки-время использования (File Access Race Condition: TOCTOU)
The window of time between when a file property is checked and when the file is used can be exploited to launch a privilege escalation attack.
Небезопасный временный файл (Insecure Temporary File)
Creating and using insecure temporary files can leave application and system data vulnerable to attack.
Правила безопасности J2EE (J2EE Bad Practices:) System.exit()
A Web application should not attempt to shut down its container.
Правила безопасности J2EE: Потоки (J2EE Bad Practices: Threads)
Thread management in a Web application is forbidden in some circumstances and is always highly error prone.
Гонка при обработке сигналов (Signal Handling Race Conditions)
Signal handlers may change shared state relied on by other signal handlers or application code causing unexpected behavior.
Обработка ошибок (Error Handling)
Перехват NullPointerException (Catch NullPointerException)
Catching NullPointerException should not be used as an alternative to programmatic checks to prevent dereferencing a null pointer.
Пустой блок Catch (Empty Catch Block)
Ignoring exceptions and other error conditions may allow an attacker to induce unexpected behavior unnoticed.
Слишком обширный блок Catch (Overly Broad Catch Block)
Catching overly broad exceptions promotes complex error-handling code that is more likely to contain security vulnerabilities.
Слишком широкая декларация по выбрасыванию исключения (Overly Broad Throws Declaration)
Throwing overly broad exceptions promotes complex error-handling code that is more likely to contain security vulnerabilities.
Непроверяемое возвращаемой значение (Unchecked Return Value)
Ignoring a method's return value can cause the program to overlook unexpected states and conditions.
Качество кода (Code Quality)
Двойной вызов Free (Double Free)
Calling free() twice on the same memory address can lead to a buffer overflow.
Несовместимая имплементация (Inconsistent Implementations)
Functions with inconsistent implementations across operating systems and operating system versions cause portability problems.
Утечка памяти (Memory Leak)
Memory is allocated but never freed, leading to resource exhaustion.
Разыменование нуля (Null Dereference)
The program can potentially dereference a null pointer, thereby raising a NullPointerException.
Устаревшее (Obsolete)
The use of deprecated or obsolete functions may indicate neglected code.
Неопределенное поведение (Undefined Behavior)
The behavior of this function is undefined unless its control parameter is set to a specific value.
Неинициализированная переменная (Uninitialized Variable)
The program can potentially use a variable before it has been initialized.
Неосвобожденный ресурс (Unreleased Resource)
The program can potentially fail to release a system resource.
Использование после освобождения (Use After Free)
Referencing memory after it has been freed can cause a program to crash.
Инкапсуляция (Encapsulation)
Сравнение классов по имени (Comparing Classes by Name)
Comparing classes by name can lead a program to treat two classes as the same when they actually differ.
Утечка данных между пользователями (Data Leaking Between Users)
Data can "bleed" from one session to another through member variables of singleton objects, such as servlets, and objects from a shared pool.
Оставший отладочный код (Leftover Debug Code)
Debug code can create unintended entry points in an application.
Распределенный код: Захват объекта (Mobile Code: Object Hijack)
Attackers can use cloneable objects to create new instances of an object without calling its constructor.
Распределенный код: Использование вложенного класса(Mobile Code: Use of Inner Class)
Inner classes are translated into classes that are accessible at package scope and may expose code that the programmer intended to keep private to attackers.
Распределенный код: Публичное нефинальное поле (Mobile Code: Non-Final Public Field)
Non-final public variables can be manipulated by an attacker to inject malicious values.
Возвращение приватного поля-массива из публичного метода (Private Array-Typed Field Returned from a Public Method)
The contents of a private array may be altered unexpectedly through a reference returned from a public method.
Присвоение публичных данных приватному полю-массиву (Public Data Assigned to Private Array-Typed Field)
Assigning public data to a private array is equivalent to giving public access to the array.
Утечка системной информации (System Information Leak)
Revealing system data or debugging information helps an adversary learn about the system and form an attack plan.
Нарушения доверенных границ (Trust Boundary Violation)
Commingling trusted and untrusted data in the same data structure encourages programmers to mistakenly trust unvalidated data.
*Окружение
Ошибки конфигурирования ASP.NET: Создание отладочного бинарного кода(ASP .NET Misconfiguration: Creating Debug Binary)
Debugging messages help attackers learn about the system and plan a form of attack.
Ошибки конфигурирования ASP.NET: Отсутствие настроенного обработчика ошибок (ASP .NET Misconfiguration: Missing Custom Error Handling)
An ASP .NET application must enable custom error pages in order to prevent attackers from mining information from the framework's built-in responses.
Ошибки конфигурирования ASP.NET: Пароли в конфигурационном файле (ASP .NET Misconfiguration: Password in Configuration File)
Do not hardwire passwords into your software.
Небезопасные оптимизации компилятора (Insecure Compiler Optimization)
Improperly scrubbing sensitive data from memory can compromise security.
Ошибки конфигурирования J2EE: Небезопасный транспортный протокол(J2EE Misconfiguration: Insecure Transport)
The application configuration should ensure that SSL is used for all access-controlled pages.
Ошибки конфигурирования J2EE: Недостаточная длина индентификатора сессии(J2EE Misconfiguration: Insufficient Session-ID Length)
Session identifiers should be at least 128 bits long to prevent brute-force session guessing.
Ошибки конфигурирования J2EE: Отсутствие обработки ошибок (J2EE Misconfiguration: Missing Error Handling)
A Web application must define a default error page for 404 errors and 500 errors and to catch java. lang. Throwable exceptions to prevent attackers from mining information from the application container's built-in error response.
Ошибки конфигурирования J2EE: Небезопасное объявление Bean(J2EE Misconfiguration: Unsafe Bean Declaration)
Entity beans should not be declared remote.
Ошибки конфигурирования J2EE: Слабая настройка прав доступа(J2EE Misconfiguration: Weak Access Permissions)
Permission to invoke EJB methods should not be granted to the ANYONE role.
Достоинства классификации:
Поддержка одного из ведущих разработчиков средств для аудита кода;
Простая для понимания структура
Существует достаточно давно.
Недостатки классификации:
Нет разграничения по языкам программирования и наблюдается некоторый сумбур по сути мы имеем набор типовых ошибок при программировании на C,C++, Java,.Net и одновременно с ними уязвимости относящиеся только к веб-приложениям, и здесь же ряд языконезависимых абстрактных уязвимостей
Классификация чересчур упрощена и не отвечает в полной мере требованиям систематизации значительного количества уязвимостей.