Что понимается под уязвимостью программного обеспечения ис

Обновлено: 19.05.2024

Анализ уязвимостей — это организованный процесс поиска уязвимых мест, угроз, потенциальных способов их осуществления и моделей работы злоумышленников, вовлеченных в эти процессы.

Уязвимость представляет собой слабый компонент в информационной системе (ИС) предприятия. Под угрозой понимают возможное событие, действие, явление или процесс, которые могут скомпрометировать информацию. Третье действующее лицо — злоумышленник, который использует найденные уязвимости для реализации угроз.

Наличие уязвимостей негативно влияет на бизнес: делает его менее защищенным перед конкурентами, упрощает нанесение материального вреда, раскрытие конфиденциальной информации (например, персональных данных клиентов или контрагентов). Источники угрозы бывают преднамеренными или случайными, а также вызванными природными или техногенными факторами. Для каждой угрозы существует перечень уязвимостей, которые позволяют ее реализовать.

Анализ уязвимостей в разрезе ИБ

Информационная безопасность (ИБ) определяет защищенность бизнес-среды и экономическую эффективность деятельности организации. Компании, которые заинтересованы в ИБ, ведут работу по предотвращению утечки конфиденциальной информации, ее несанкционированному изменению и защите от угроз, которые могут нарушить работу, повлиять на взаимоотношения с контрагентами, государственными контролирующими органами, потенциальными инвесторами, поставщиками.

Есть несколько источников угроз, потому необходимо их систематизировать и составить план анализа, чтобы охватить как можно больше потенциально уязвимых бизнес-процессов. В информационной безопасности важно придерживаться четырех основополагающих принципов: целостность, конфиденциальность, доступность и достоверность данных.

Виды угроз для анализа

Анализ уязвимостей информационной системы возможен только при понимании типов угроз, которые возникают в информационном поле предприятия. Существует несколько способов их классификации.

По состоянию источника угрозы:

  1. непосредственно в ИС;
  2. в пределах видимости ИС (например, подслушивающие устройства);
  3. вне зоны действия/видимости ИС (перехват данных во время прохождения каналами связи).

По степени воздействия:

  1. Несут активную угрозу (вирусы, троянские программы);
  2. Несут пассивную угрозу (кража информации копированием).

По способу доступа:

  1. Через нестандартные каналы связи (например, уязвимости ОС);
  2. Напрямую (через кражу паролей).

Главные цели атаки на IT-инфраструктуру предприятия — контроль над ценными информационными ресурсами, доступными в корпоративной сети, и ограничение деятельности организации. Второй способ выбирают недобросовестные конкуренты или политические оппоненты.

Информационной безопасности угрожают:

  1. Вредоносное программное обеспечение и хакеры/мошенники;
  2. Сотрудники-инсайдеры (злонамеренные или незлонамеренные);
  3. Стихийные бедствия (пожары, наводнения, аварии на энергосистемах).

Оценка вероятности угроз

Чтобы оценить вероятность наступления угроз, используют трехуровневую качественную шкалу:

Методы анализа уязвимостей

Есть несколько методик, которые позволяют выполнить анализ уязвимостей системы. Одна из них базируется на вероятностном подходе и учитывает факторы:

  1. Потенциал нарушителя: определяется на основе экспертных оценок;
  2. Источник угрозы: атака возможна в контролируемой зоне или за ее пределами;
  3. Способ воздействия: технический, сетевой или социальный канал;
  4. Объект угроз: конфиденциальная информация, средства ее доставки/обработки/хранения, или штатные сотрудники компании.

При анализе уязвимостей ИС важно учесть возможные места дислокации. Для этого выявляют и устраняют ошибки в ОС и прикладном программном обеспечении, а в будущем регулярно и оперативно устанавливать патчи от разработчиков ПО. Для тех уязвимостей, которые связаны с некорректной настройкой средств защиты, регулярно проверяют и выполняют ИТ-аудит систем защиты информации, а в идеале настраивают непрерывный мониторинг. Отдельно проводится работа с сотрудниками предприятия: раздают права доступа, используют ограничения на установку специального ПО, копирование данных, использование внешних носителей информации.

Под анализом уязвимостей понимаются процессы, направленные на поиск любых угроз, уязвимых точек и рисков потенциального несанкционированного проникновения злоумышленников в ИС (информационную систему).

Уязвимость — слабый компонент ИС какой-либо организации. Угроза — возможность негативного воздействия со стороны злоумышленников, которое может повлечь компрометацию коммерческой и другой конфиденциальной информации. Третье лицо в таком анализе — злоумышленник, который использует уязвимости для реализации угроз.

Если присутствуют уязвимости, это негативно сказывается на работе всего предприятия, так как оно становится менее защищенным перед недобросовестными конкурентами, это упрощает работу злоумышленников по нанесению вреда и позволяет третьим лицам получить доступ к конфиденциальным данным.

Источник угрозы может быть как случайным, так и преднамеренным. Третий вариант — техногенные и природные факторы, которые никогда не стоит исключать.

У каждой угрозы есть свой список уязвимостей, с помощью которых злоумышленник может реализовать свои планы.

Анализ уязвимостей в области информационной безопасности (ИБ)

Эффективная ИБ обеспечивает не только защиту от кражи каких-либо данных из сети предприятия, но и финансовую защиту бизнеса в целом. Предприятия, которые хотят отличаться качественной ИБ, постоянно работают над предотвращением:

  • утечек любых корпоративных данных
  • удаленного редактирования защищенной информации
  • изменения уровня защиты от угроз, которые могут спровоцировать потерю доверия инвесторов, поставщиков, контрагентов и т. д.

Угрозы могут иметь несколько источников, поэтому очень важно своевременно их классифицировать и создать схему их анализа. Это позволит получить наибольший охват потенциальных уязвимостей в бизнес-процессах предприятия.

В ИБ крайне важно следовать четырем принципам:

  1. конфиденциальность
  2. целостность
  3. достоверность
  4. доступность

Разновидности анализируемых угроз

Чтобы провести качественный анализ уязвимостей информационной структуры, необходимо различать виды угроз, которые могут возникнуть в системе конкретной организации. Такие угрозы разделяются на отдельные классы.

1 класс. Потенциальный источник угрозы, который может находиться:

  • непосредственно в информационной системе (ИС)
  • в пределах видимости ИС (например, устройства для несанкционированной звукозаписи)
  • вне зоны видимости ИС (перехват данных в процессе их отправки куда-либо)

2 класс. Воздействие на ИС, которое может нести:

  • активную угрозу (троян, вирус)
  • пассивную угрозу (копирование конфиденциальной информации злоумышленником)

3 класс. Метод обеспечения доступа, который может быть реализован:

  • напрямую (кража паролей)
  • посредством нестандартных каналов связи (например, уязвимости операционной системы)

Главные цели атаки на ИТ-инфраструктуру компании:

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

Второй метод чаще всего реализуется по заказу недобросовестных компаний-конкурентов или политическими деятелями.

Что конкретно может нести угрозу информационной безопасности любого предприятия:

  • вредоносное программное обеспечение
  • мошенники-хакеры
  • инсайдеры-работники, действующие со злыми намерениями или по неосторожности
  • природные явления

Оценка вероятности угроз

Для оценки вероятности наступления угрозы профессионалами применяется качественная шкала, состоящая из трех уровней. Рассмотрим их подробнее.

Отличается минимальной вероятностью появления. У такой угрозы нет никаких предпосылок (прошлых инцидентов, мотивов) для того, чтобы она была реализована. Угрозы уровня Н, как правило, возникают не чаще, чем 1 раз в 5 – 10 лет.

У такой угрозы вероятность возникновения чуть выше, чем у предыдущей, потому, что в прошлом, к примеру, уже были подобные инциденты или известно, что атакующая сторона имеет планы по реализации такой угрозы. Угрозы с уровнем С приводят к реальным инцидентам примерно раз в год.

Угроза имеет высокие шансы на реализацию. В подтверждение тому — статистическая информация, наличие подобных инцидентов в прошлом, серьезная мотивация со стороны злоумышленников. Вероятная частота возникновения угроз уровня В — раз на неделю или чаще.

Методики анализа уязвимостей

Существует несколько способов, при помощи которых можно провести анализ уязвимостей системы. Один из них основан на вероятностной методике, и при его применении нужно опираться на следующие факторы:

    • потенциал злоумышленника (выявляется путем оценок экспертов)
    • источник угрозы (где возможна атака — в зоне видимости или за ее пределами)
    • метод воздействия (сетевой, аппаратный или социальный)
    • объект угрозы (корпоративные данные, средства для шифрования, передачи, работы с ними или сотрудники компании)

    В процессе анализа уязвимостей в информационной системе крайне важно учитывать возможные места дислокации. Чтобы это реализовать, нужно оперативно обнаружить и устранить ошибки в операционной системе и программном обеспечении, а позже систематически устанавливать все патчи безопасности от разработчиков.

    Анализ уязвимостей, которые связаны с неправильной настройкой защитных средств, должен проводиться регулярно. Идеальное решение — настроить непрерывный мониторинг ИС на предмет возникновения уязвимостей. Отдельно от вышеописанного анализа в обязательном порядке необходимо проводить определенные мероприятия с рабочим персоналом компании: выдавать права доступа к данным и ресурсам, права на установку специализированного программного обеспечения, а также права на копирование информации и применение внешних носителей данных.

    Область и условия применения: Настоящий стандарт устанавливает классификацию уязвимостей информационных систем. Настоящий стандарт направлен на совершенствование методического обеспечения определения и описания угроз безопасности информации при проведении работ по защите информации в информационных системах. Настоящий стандарт не распространяется на уязвимости информационных систем, связанные с утечкой информации по техническим каналам, в том числе уязвимостями электронных компонентов технических (аппаратных и аппаратно-программных) средств информационных систем

    Опубликован: Официальное издание. М.: Стандартинформ, 2018 год

    Утверждён в: Федеральное агентство по техническому регулированию и метрологии

    Дата принятия: 19.08.2015


    ГОСТ Р 56546-2015

    НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ

    УЯЗВИМОСТИ ИНФОРМАЦИОННЫХ СИСТЕМ

    Классификация уязвимостей информационных систем

    Information protection. Vulnerabilities in information systems. The classification of vulnerabilities in information systems

    Дата введения 2016-04-01

    Предисловие

    1 РАЗРАБОТАН Обществом с ограниченной ответственностью "Центр безопасности информации" (ООО "ЦБИ")

    2 ВНЕСЕН Техническим комитетом по стандартизации ТК 362 "Защита информации"

    4 ВВЕДЕН ВПЕРВЫЕ

    5 ПЕРЕИЗДАНИЕ. Ноябрь 2018 г.

    Введение

    Настоящий стандарт входит в комплекс стандартов, устанавливающих классификацию уязвимостей, правила описания уязвимостей, содержание и порядок выполнения работ по выявлению и оценке уязвимостей информационных систем (ИС).

    Настоящий стандарт распространяется на деятельность по защите информации, связанную с выявлением и устранением уязвимостей ИС, при создании и эксплуатации ИС.

    В настоящем стандарте принята классификация уязвимостей ИС исходя из области происхождения уязвимостей, типов недостатков ИС и мест возникновения (проявления) уязвимостей ИС.

    1 Область применения

    Настоящий стандарт устанавливает классификацию уязвимостей информационных систем (ИС). Настоящий стандарт направлен на совершенствование методического обеспечения определения и описания угроз безопасности информации при проведении работ по защите информации в ИС.

    Настоящий стандарт не распространяется на уязвимости ИС, связанные с утечкой информации по техническим каналам, в том числе уязвимости электронных компонентов технических (аппаратных и аппаратно-программных) средств ИС.

    2 Нормативные ссылки

    В настоящем стандарте использована нормативная ссылка на следующий стандарт:

    ГОСТ Р 50922 Защита информации. Основные термины и определения

    Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте национального органа Российской Федерации по стандартизации в сети Интернет или по ежегодному информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя "Национальные стандарты" за текущий год. Если заменен ссылочный стандарт, на который дана недатированная ссылка, то рекомендуется использовать действующую версию этого документа с учетом всех внесенных в данную версию изменений. Если заменен ссылочный стандарт, на который дана датированная ссылка, то рекомендуется использовать версию этого документа с указанным выше годом утверждения (принятия). Если после утверждения настоящего стандарта в ссылочный стандарт, на который дана датированная ссылка, внесено изменение, затрагивающее положение, на которое дана ссылка, то это положение рекомендуется применять без учета данного изменения. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, рекомендуется применять в части, не затрагивающей эту ссылку.

    3 Термины и определения

    В настоящем стандарте применены термины по ГОСТ Р 50922, а также следующие термины с соответствующими определениями:

    3.1 информационная система: Совокупность содержащейся в базах данных информации и обеспечивающих ее обработку информационных технологий и технических средств.

    Примечание - Определение термина соответствует [1].

    3.2 компонент информационной системы: Часть информационной системы, включающая некоторую совокупность информации и обеспечивающих ее обработку отдельных информационных технологий и технических средств.

    3.3 признак классификации уязвимостей: Свойство или характеристика уязвимостей, по которым производится классификация.

    3.4 информационная технология [технология обработки (передачи) информации в информационной системе]: Процесс, метод поиска, сбора, хранения, обработки, предоставления, распространения информации и способ осуществления таких процессов и методов.

    3.5 конфигурация информационной системы: Взаимосвязанные структурно-функциональные характеристики информационной системы, включающие структуру и состав информационной системы, физические, логические, функциональные и технологические взаимосвязи между компонентами информационной системы, с иными информационными системами и информационно-телекоммуникационными сетями, а также с полномочиями субъектов доступа к объектам доступа информационной системы.

    3.6 угроза безопасности информации: Совокупность условий и факторов, создающих потенциальную или реально существующую опасность нарушения безопасности информации.

    3.7 уязвимость: Недостаток (слабость) программного (программно-технического) средства или информационной системы в целом, который(ая) может быть использован(а) для реализации угроз безопасности информации.

    3.8 уязвимость кода: Уязвимость, появившаяся в процессе разработки программного обеспечения.

    3.9 уязвимость конфигурации: Уязвимость, появившаяся в процессе задания конфигурации (применения параметров настройки) программного обеспечения и технических средств информационной системы.

    3.10 уязвимость архитектуры: Уязвимость, появившаяся в процессе проектирования информационной системы.

    3.11 организационная уязвимость: Уязвимость, появившаяся в связи с отсутствием (или недостатками) организационных мер защиты информации в информационной системе и (или) несоблюдением правил эксплуатации системы защиты информации информационной системы, требований организационно-распорядительных документов по защите информации и (или) несвоевременном выполнении соответствующих действий должностным лицом (работником) или подразделением, ответственным за защиту информации.

    3.12 многофакторная уязвимость: Уязвимость, появившаяся в результате наличия нескольких недостатков различных типов.

    3.13 язык программирования: Язык, предназначенный для разработки (представления) программного обеспечения.

    3.14 степень опасности уязвимости: Мера (сравнительная величина), характеризующая подверженность информационной системы уязвимости и ее влияние на нарушение свойств безопасности информации (конфиденциальность, целостность, доступность).

    4 Основные положения

    4.1 В основе классификации уязвимостей ИС используются следующие классификационные признаки:

    - область происхождения уязвимости;

    - типы недостатков ИС;

    - место возникновения (проявления) уязвимости ИС.

    Примечание - В качестве уязвимых компонентов ИС рассматриваются общесистемное (общее), прикладное, специальное программное обеспечение (ПО), технические средства, сетевое (коммуникационное, телекоммуникационное) оборудование, средства защиты информации.

    4.2 Помимо классификационных признаков уязвимостей ИС используются поисковые признаки (основные и дополнительные). Поисковые признаки предназначены для организации расширенного поиска в базах данных уязвимостей.

    4.3 К основным поисковым признакам уязвимостей ИС относятся следующие:

    - наименование операционной системы (ОС) и тип аппаратной платформы;

    - наименование ПО и его версия;

    - степень опасности уязвимости.

    4.4 К дополнительным поисковым признакам уязвимостей ИС относятся следующие:

    - служба (порт), которая(ый) используется для функционирования ПО.

    5 Классификация

    5.1 Уязвимости ИС по области происхождения подразделяются на следующие классы:

    Примечание - В целях выявления и оценки уязвимостей информационных систем могут выделяться подклассы уязвимостей.

    5.2 Уязвимости ИС по типам недостатков ИС подразделяются на следующие:

    - недостатки, связанные с неправильной настройкой параметров ПО.

    Примечание - Неправильная настройка параметров ПО заключается в отсутствии необходимого параметра, присвоении параметру неправильных значений, наличии избыточного числа параметров или неопределенных параметров ПО;

    - недостатки, связанные с неполнотой проверки вводимых (входных) данных.

    Примечание - Недостаточность проверки вводимых (входных) данных заключается в отсутствии проверки значений, избыточном количестве значений, неопределенности значений вводимых (входных) данных;

    - недостатки, связанные с возможностью прослеживания пути доступа к каталогам.

    Примечание - Прослеживание пути доступа к каталогам заключается в отслеживании пути доступа к каталогу (по адресной строке/составному имени) и получении доступа к предыдущему/корневому месту хранения данных;

    - недостатки, связанные с возможностью перехода по ссылкам.

    Примечание - Переход по ссылкам связан с возможностью внедрения нарушителем ссылки на сторонние ресурсы, которые могут содержать вредоносный код. Для файловых систем недостатками являются символьные ссылки и возможности прослеживания по ним нахождения ресурса, доступ к которому ограничен;

    - недостатки, связанные с возможностью внедрения команд ОС.

    Примечание - Внедрение команд ОС заключается в возможности выполнения пользователем команд ОС (например, просмотра структуры каталогов, копирование, удаление файлов и другие команды);

    - недостатки, связанные с межсайтовым скриптингом (выполнением сценариев).

    Примечание - Межсайтовый скриптинг обычно распространен в веб-приложениях и позволяет внедрять код в веб-страницы, которые могут просматривать нелегитимные пользователи. Примерами такого кода являются скрипты, выполняющиеся на стороне пользователя;

    - недостатки, связанные с внедрением интерпретируемых операторов языков программирования или разметки.

    Примечание - Недостатки связаны с внедрением интерпретируемых операторов языков программирования (например, операции выбора, добавления, удаления и другие) или разметки в исходный код веб-приложения;

    - недостатки, связанные с внедрением произвольного кода.

    Примечание - Недостатки связаны с внедрением произвольного кода и части кода, которые могут приводить к нарушению процесса выполнения операций;

    - недостатки, связанные с переполнением буфера памяти.

    Примечание - Переполнение буфера возникает в случае, когда ПО осуществляет запись данных за пределами выделенного в памяти буфера. Переполнение буфера обычно возникает из-за неправильной работы с данными, полученными извне, и памятью, при отсутствии защиты со стороны среды программирования и ОС. В результате переполнения буфера могут быть испорчены данные, расположенные следом за буфером или перед ним. Переполнение буфера может вызывать аварийное завершение или зависание ПО. Отдельные виды переполнений буфера (например, переполнение в стековом кадре) позволяют нарушителю выполнить произвольный код от имени ПО и с правами учетной записи, от которой она выполняется;

    - недостатки, связанные с неконтролируемой форматной строкой.

    Примечание - Форматная строка в языках C/C++ является специальным аргументом функции с динамически изменяемым числом параметров. Ее значение в момент вызова функции определяет фактическое количество и типы параметров функции. Ошибки форматной строки потенциально позволяют нарушителю динамически изменять путь исполнения программы, в ряде случаев - внедрять произвольный код;

    - недостатки, связанные с вычислениями.

    Примечание - К недостаткам, связанным с вычислениями, относятся следующие:

    - некорректный диапазон, когда ПО использует неверное максимальное или минимальное значение, которое отличается от верного на единицу в большую или меньшую сторону;

    - ошибка числа со знаком, когда нарушитель может вводить данные, содержащие отрицательное целое число, которые программа преобразует в положительное нецелое число;

    - ошибка усечения числа, когда часть числа отсекается (например, вследствие явного или неявного преобразования или иных переходов между типами чисел);

    - ошибка индикации порядка байтов в числах, когда в ПО смешивается порядок обработки битов (например, обратный и прямой порядок битов), что приводит к неверному числу в содержимом, имеющем критическое значение для безопасности;

    - недостатки, приводящие к утечке/раскрытию информации ограниченного доступа.

    - недостатки, связанные с управлением полномочиями (учетными данными).

    Примечание - К недостаткам, связанным с управлением полномочиями (учетными данными) относятся, например, нарушение политики разграничения доступа, отсутствие необходимых ролей пользователей, ошибки при удалении ненужных учетных данных и другие;

    - недостатки, связанные с управлением разрешениями, привилегиями и доступом.

    Примечание - К недостаткам, связанным с управлением разрешениями, привилегиями и доступом, относятся, например, превышение привилегий и полномочий, необоснованное наличие суперпользователей в системе, нарушение политики разграничения доступа и другие;

    - недостатки, связанные с аутентификацией.

    Примечание - К недостаткам, связанным с аутентификацией, относятся возможность обхода аутентификации, ошибки логики процесса аутентификации, отсутствие запрета множественных неудачных попыток аутентификации, отсутствие требования аутентификации для выполнения критичных функций;

    - недостатки, связанные с криптографическими преобразованиями (недостатки шифрования).

    Примечание - К недостаткам, связанным с криптографическими преобразованиями, относятся ошибки хранения информации в незашифрованном виде, ошибки при управлении ключами, использование несертифицированных средств криптографической защиты информации;

    - недостатки, связанные с подменой межсайтовых запросов.

    Примечание - Подмена межсайтового запроса заключается в том, что используемое ПО не осуществляет или не может осуществить проверку правильности формирования запроса;

    - недостатки, приводящие к "состоянию гонки".

    Примечание - "Состояние гонки" - ошибка проектирования многопоточной системы или приложения, при которой функционирование системы или приложения зависит от порядка выполнения части кода. "Состояние гонки" является специфической ошибкой, проявляющейся в случайные моменты времени;

    - недостатки, связанные с управлением ресурсами.

    Примечание - К недостаткам управления ресурсами относятся недостаточность мер освобождения выделенных участков памяти после использования, что приводит к сокращению свободных областей памяти, и отсутствие очистки ресурса и процессов от сведений ограниченного доступа перед повторным использованием и другие;

    - иные типы недостатков.

    Примечание - По результатам выявления уязвимостей ИС перечень типов недостатков может дополняться.

    5.3 Уязвимости ИС по месту возникновения (проявления) подразделяются на следующие:

    - уязвимости в общесистемном (общем) ПО.

    Примечание - К уязвимостям в общесистемном (общем) ПО относятся уязвимости ОС (уязвимости файловых систем, уязвимости режимов загрузки, уязвимости, связанные с наличием средств разработки и отладки ПО, уязвимости механизмов управления процессами и другие), уязвимости систем управления базами данных [уязвимости серверной и клиентской частей системы управления базами данных, уязвимости специального инструментария, уязвимости исполняемых объектов баз данных (хранимые процедуры, триггеры) и другие], уязвимости иных типов общесистемного (общего) ПО;

    - уязвимости в прикладном ПО.

    Примечание - К уязвимостям в прикладном ПО относятся уязвимости офисных пакетов программ и иных типов прикладного ПО (наличие средств разработки мобильного кода, недостатки механизмов контроля исполнения мобильного кода, ошибки программирования, наличие функциональных возможностей, способных оказать влияние на средства защиты информации, и другие уязвимости);

    - уязвимости в специальном ПО.

    Примечание - К уязвимостям в специальном ПО относятся уязвимости ПО, разработанного для решения специфических задач конкретной ИС (ошибки программирования, наличие функциональных возможностей, способных оказать влияние на средства защиты информации, недостатки механизмов разграничения доступа к объектам специального ПО и другие уязвимости);

    - уязвимости в технических средствах.

    Примечание - К уязвимостям в технических средствах относятся уязвимости ПО технических средств (уязвимости микропрограмм в постоянных запоминающих устройствах, уязвимости микропрограмм в программируемых логических интегральных схемах, уязвимости базовой системы ввода-вывода, уязвимости ПО контроллеров управления, интерфейсов управления и другие уязвимости), иные уязвимости технических средств;

    - уязвимости в портативных технических средствах.

    Примечание - К уязвимостям в портативных технических средствах относятся уязвимости ОС мобильных (портативных) устройств, уязвимости приложений для получения с мобильного устройства доступа к Интернет-сервисам, уязвимости интерфейсов беспроводного доступа, иные уязвимости портативных технических средств;

    - уязвимости в сетевом (коммуникационном, телекоммуникационном) оборудовании.

    Примечание - К уязвимостям в сетевом (коммуникационном, телекоммуникационном) оборудовании относятся уязвимости маршрутизаторов, коммутаторов, концентраторов, мультиплексоров, мостов и телекоммуникационного оборудования иных типов (уязвимости протоколов и сетевых сервисов, уязвимости средств и протоколов управления телекоммуникационным оборудованием, недостатки механизмов управления потоками информации, недостатки механизмов разграничения доступа к функциям управления телекоммуникационным оборудованием, другие уязвимости);

    - уязвимости в средствах защиты информации.

    Примечание - К уязвимостям в средствах защиты информации относятся уязвимости в средствах управления доступом, средствах идентификации и аутентификации, средствах контроля целостности, средствах доверенной загрузки, средствах антивирусной защиты, системах обнаружения вторжений, средствах межсетевого экранирования, средствах управления потоками информации, средствах ограничения программной среды, средствах стирания информации и контроля удаления информации, средствах защиты каналов передачи информации, уязвимости в иных средствах защиты информации (ошибки программирования, недостатки, связанные с возможностью обхода, отключения, преодоления функций безопасности, другие уязвимости).

    Каждый, кто начинает изучать уязвимости программного обеспечения и их эксплуатацию, рано или поздно начинает задаваться вопросами: откуда берутся методики написания эксплойтов? Почему современное ПО содержит уязвимости? Насколько операционные системы с точки зрения проведения атак на ПО отличаются друг от друга? В данной статье будет рассмотрен подход к исследованию уязвимого ПО на различных операционных системах: какие есть особенности, какую систему лучше выбрать в качестве тестовой и какие выводы можно сделать.

    Уязвимости ПО на различных ОС

    Почему существуют уязвимости и атаки

    Язык программирования C — это, по сути, набор команд, которые позволяют операционной системе взаимодействовать с устройствами и, таким образом, раскрывать их функциональность в полной мере. Для использования языка программирования в большом количестве систем необходимо, чтобы все его команды и результаты их выполнения всегда имели предсказуемые значения. Единственный способ добиться этого — создать стандарт, описывающий каждую конструкцию и команду языка программирования. За время существования языка программирования C было создано 6 версий стандарта (C89, C90, C95, C99, C11, C18).

    В стандартах мы находим концепцию неопределенного поведения, используемую в разделах, посвященных переносу программного обеспечения на различные архитектуры. Термин неопределенное поведение обозначает любую ошибку или непонятную ситуацию, результаты которой невозможно предсказать заранее.

    В контексте ПО, написанного на С, в большинстве случаев это проблемы с памятью, работой с системами ввода/вывода, синхронизацией доступа к ресурсам информационной системы. Неопределенное поведение может случится по причине следующих ошибок при написании софта:

    Здесь вы можете найти полный список наиболее частых проблем. Именно из-за них возможны атаки на программное обеспечение, поскольку каждая из них так или иначе может рассматриваться как уязвимость, подлежащая дальнейшей эксплуатации в своих целях.

    Противодействие атакам

    Количество и сложность механизмов защиты от программных атак в разных операционных системах различаются. Например, разработчики операционной системы Linux считают, что для операционной системы важнее функциональность, чем защита. Напротив, можно назвать операционную систему Windows, которая разрабатывает технологии защиты в виде стека на уровне операционной системы. Насколько эффективны механизмы? Это тема для отдельной статьи. В защиту операционной системы Linux можно сказать, что были предприняты попытки сделать ее более безопасной с точки зрения разработки программного обеспечения, но что-то пошло не так, и теперь исправления безопасности продаются как отдельный проект.

    Портирование атаки

    Представим себе сценарий — мы хотим изучить подход к эксплуатации уязвимостей Stack Buffer Overflow и UAF. С чего можно начать изучение? План изучения:

    Найти описание особенности уязвимости;

    Найти или создать уязвимое приложение;

    Попытаться создать эксплойт, если не получилось эксплуатировать уязвимость — выяснить, какие механизмы защиты применены в ОС и попытаться их обойти (ведь именно они могут защищать приложение от эксплуатации его погрешностей).

    В качестве тестовых будем использовать Windows 7 x86 и Kali Linux.

    Особенности уязвимости: UAF

    Описание уязвимости можно найти на ресурсе. Если вкратце, то данный тип уязвимостей связан с использованием объекта после его освобождения. Следовательно, атака должна создать на месте освобождаемого объекта тот, который позволит выполнить произвольный код. Графическое представление уязвимости ниже.

    Уязвимости ПО на различных ОС

    В качестве упражнения попробуйте найти пример уязвимого приложения для ОС Windows (любой версии), которое будет содержать UAF. Также подобных приложений много для ОС Linux. Попробуем адаптировать одно из таких приложений: чтобы оно было скомпилировано и для Windows, и для Linux, а также уязвимость воспроизводилась на обоих системах.

    Уязвимое приложение: UAF

    В качестве подопытного будем использовать следующее приложение:

    Скомпилируем код под Windows и Linux:

    Уязвимости ПО на различных ОС

    Запуск на Linux:

    Уязвимости ПО на различных ОС

    апуск на Windows:


    Поведение ОС: UAF

    Уязвимость UAF в операционной системе очень сложно отследить, и для каждого отдельного случая следует писать специальные меры противодействия. Сам класс уязвимостей работает на основе доступа к данным, поэтому реализация защиты обычно представляет собой проверку целостности структур, важных для процесса. В нашем случае приложение не имеет доступа к этим структурам, поэтому никакой механизм защиты Windows и Linux не приведет к аварийному завершению работы приложения: процесс продолжит работу, что является проблемой безопасности и может быть использовано. Исходный пример самодостаточен и показывает, что эти уязвимости чаще всего используются из-за функциональности приложения. Что касается различий в реализации операционных систем, как указано выше, операционная система больше не важна, если ошибка заключается в неосторожных действиях самого приложения с памятью.

    Особенности уязвимости: Stack Buffer Overflow

    Уязвимость, которая имеет наибольшую популярность на сегодняшний день. Механизм работы Stack Buffer Overflow заключается в следующем. Данные, помещенные на стек, перетираются другими данными, заполняемыми в объекте, в котором не верно проверяется их размер. Картинка взята отсюда.


    Уязвимое приложение: Stack Buffer Overflow

    В качестве тестового будем использовать следующее приложение:

    Скомпилируем приложение для Linux и для Windows:



    В полученные файлы для защиты от атак добавляются специальные данные о механизмах защиты.Они помогают операционной системе противодействовать атакам. В ОС Linux посмотреть эти данные можно через специальную утилиту checksec .


    Полный список технологий защит, которые были получены через вывод инструмента checksec , можно найти тут.

    Для операционной системы Windows такой список просто утилитой получить не удастся. Вместо этого необходимо запустить приложение в ОС. А потом просмотреть установленные механизмы защиты для работающего процесса. Сделать это можно например утилитой EMET. Полученный вывод для нашего приложения:


    Даже не разбираясь, какой механизм от какой атаки защищает, список достаточно внушительный.

    Эксплойт для уязвимого приложения: Stack Buffer Overflow

    Самый простой тип уязвимости с точки зрения написания эксплойта. Проанализировав все механизмы защиты, которые задействованы в Linux, становится ясно, что единственный механизм — “NX Bit”. По всем описаниям в сети обойти данный механизма можно с помощью ROP. Для написания эксплойта будем использовать автоматизацию — pwntools для Python. Тогда скрипт для атаки на операционной системе Linux может иметь такой вид:

    Эксплойт под Windows c применением ROP не дал результатов. Вывод его работы можно увидеть ниже.


    Необходимо проводить дальнейший ресерч обходов защит системы. Против эксплойта сработали следующие механизмы защиты: SimExecFlow, DEP, SEHOP.

    Вывод

    Как видите, подходы к обеспечению безопасной работы приложений в операционных системах Linux и Windows различны. В случае Linux можно было использовать присущую приложению уязвимость. А Windows вовремя остановила приложение. Исследователи системной безопасности должны помнить об этом. Так что новичку следует использовать Linux в качестве отправной точки для тестирования уязвимых приложений. И искать в Windows лучшие методы обхода защиты операционной системы.

    Каждый, кто начинает изучать уязвимости программного обеспечения и их эксплуатацию, рано или поздно начинает задаваться вопросами: откуда берутся методики написания эксплойтов? Почему современное ПО содержит уязвимости? Насколько операционные системы с точки зрения проведения атак на ПО отличаются друг от друга? В данной статье будет рассмотрен подход к исследованию уязвимого ПО на различных операционных системах: какие есть особенности, какую систему лучше выбрать в качестве тестовой и какие выводы можно сделать.

    Уязвимости ПО на различных ОС

    Почему существуют уязвимости и атаки

    Язык программирования C — это, по сути, набор команд, которые позволяют операционной системе взаимодействовать с устройствами и, таким образом, раскрывать их функциональность в полной мере. Для использования языка программирования в большом количестве систем необходимо, чтобы все его команды и результаты их выполнения всегда имели предсказуемые значения. Единственный способ добиться этого — создать стандарт, описывающий каждую конструкцию и команду языка программирования. За время существования языка программирования C было создано 6 версий стандарта (C89, C90, C95, C99, C11, C18).

    В стандартах мы находим концепцию неопределенного поведения, используемую в разделах, посвященных переносу программного обеспечения на различные архитектуры. Термин неопределенное поведение обозначает любую ошибку или непонятную ситуацию, результаты которой невозможно предсказать заранее.

    В контексте ПО, написанного на С, в большинстве случаев это проблемы с памятью, работой с системами ввода/вывода, синхронизацией доступа к ресурсам информационной системы. Неопределенное поведение может случится по причине следующих ошибок при написании софта:

    Здесь вы можете найти полный список наиболее частых проблем. Именно из-за них возможны атаки на программное обеспечение, поскольку каждая из них так или иначе может рассматриваться как уязвимость, подлежащая дальнейшей эксплуатации в своих целях.

    Противодействие атакам

    Количество и сложность механизмов защиты от программных атак в разных операционных системах различаются. Например, разработчики операционной системы Linux считают, что для операционной системы важнее функциональность, чем защита. Напротив, можно назвать операционную систему Windows, которая разрабатывает технологии защиты в виде стека на уровне операционной системы. Насколько эффективны механизмы? Это тема для отдельной статьи. В защиту операционной системы Linux можно сказать, что были предприняты попытки сделать ее более безопасной с точки зрения разработки программного обеспечения, но что-то пошло не так, и теперь исправления безопасности продаются как отдельный проект.

    Портирование атаки

    Представим себе сценарий — мы хотим изучить подход к эксплуатации уязвимостей Stack Buffer Overflow и UAF. С чего можно начать изучение? План изучения:

    Найти описание особенности уязвимости;

    Найти или создать уязвимое приложение;

    Попытаться создать эксплойт, если не получилось эксплуатировать уязвимость — выяснить, какие механизмы защиты применены в ОС и попытаться их обойти (ведь именно они могут защищать приложение от эксплуатации его погрешностей).

    В качестве тестовых будем использовать Windows 7 x86 и Kali Linux.

    Особенности уязвимости: UAF

    Описание уязвимости можно найти на ресурсе. Если вкратце, то данный тип уязвимостей связан с использованием объекта после его освобождения. Следовательно, атака должна создать на месте освобождаемого объекта тот, который позволит выполнить произвольный код. Графическое представление уязвимости ниже.

    Уязвимости ПО на различных ОС

    В качестве упражнения попробуйте найти пример уязвимого приложения для ОС Windows (любой версии), которое будет содержать UAF. Также подобных приложений много для ОС Linux. Попробуем адаптировать одно из таких приложений: чтобы оно было скомпилировано и для Windows, и для Linux, а также уязвимость воспроизводилась на обоих системах.

    Уязвимое приложение: UAF

    В качестве подопытного будем использовать следующее приложение:

    Скомпилируем код под Windows и Linux:

    Уязвимости ПО на различных ОС

    Запуск на Linux:

    Уязвимости ПО на различных ОС

    апуск на Windows:


    Поведение ОС: UAF

    Уязвимость UAF в операционной системе очень сложно отследить, и для каждого отдельного случая следует писать специальные меры противодействия. Сам класс уязвимостей работает на основе доступа к данным, поэтому реализация защиты обычно представляет собой проверку целостности структур, важных для процесса. В нашем случае приложение не имеет доступа к этим структурам, поэтому никакой механизм защиты Windows и Linux не приведет к аварийному завершению работы приложения: процесс продолжит работу, что является проблемой безопасности и может быть использовано. Исходный пример самодостаточен и показывает, что эти уязвимости чаще всего используются из-за функциональности приложения. Что касается различий в реализации операционных систем, как указано выше, операционная система больше не важна, если ошибка заключается в неосторожных действиях самого приложения с памятью.

    Особенности уязвимости: Stack Buffer Overflow

    Уязвимость, которая имеет наибольшую популярность на сегодняшний день. Механизм работы Stack Buffer Overflow заключается в следующем. Данные, помещенные на стек, перетираются другими данными, заполняемыми в объекте, в котором не верно проверяется их размер. Картинка взята отсюда.


    Уязвимое приложение: Stack Buffer Overflow

    В качестве тестового будем использовать следующее приложение:

    Скомпилируем приложение для Linux и для Windows:



    В полученные файлы для защиты от атак добавляются специальные данные о механизмах защиты.Они помогают операционной системе противодействовать атакам. В ОС Linux посмотреть эти данные можно через специальную утилиту checksec .


    Полный список технологий защит, которые были получены через вывод инструмента checksec , можно найти тут.

    Для операционной системы Windows такой список просто утилитой получить не удастся. Вместо этого необходимо запустить приложение в ОС. А потом просмотреть установленные механизмы защиты для работающего процесса. Сделать это можно например утилитой EMET. Полученный вывод для нашего приложения:


    Даже не разбираясь, какой механизм от какой атаки защищает, список достаточно внушительный.

    Эксплойт для уязвимого приложения: Stack Buffer Overflow

    Самый простой тип уязвимости с точки зрения написания эксплойта. Проанализировав все механизмы защиты, которые задействованы в Linux, становится ясно, что единственный механизм — “NX Bit”. По всем описаниям в сети обойти данный механизма можно с помощью ROP. Для написания эксплойта будем использовать автоматизацию — pwntools для Python. Тогда скрипт для атаки на операционной системе Linux может иметь такой вид:

    Эксплойт под Windows c применением ROP не дал результатов. Вывод его работы можно увидеть ниже.


    Необходимо проводить дальнейший ресерч обходов защит системы. Против эксплойта сработали следующие механизмы защиты: SimExecFlow, DEP, SEHOP.

    Вывод

    Как видите, подходы к обеспечению безопасной работы приложений в операционных системах Linux и Windows различны. В случае Linux можно было использовать присущую приложению уязвимость. А Windows вовремя остановила приложение. Исследователи системной безопасности должны помнить об этом. Так что новичку следует использовать Linux в качестве отправной точки для тестирования уязвимых приложений. И искать в Windows лучшие методы обхода защиты операционной системы.

    Читайте также: