что такое уязвимость в системе
Уязвимость (компьютерная безопасность)
В компьютерной безопасности, термин уязвимость (англ. vulnerability ) используется для обозначения недостатка в системе, используя который, можно нарушить её целостность и вызвать неправильную работу. Уязвимость может быть результатом ошибок программирования, недостатков, допущенных при проектировании системы, ненадежных паролей, вирусов и других вредоносных программ, скриптовых, а также SQL-инъекций. Некоторые уязвимости известны только теоретически, другие же активно используются и имеют известные эксплойты.
Обычно уязвимость позволяет атакующему «обмануть» приложение — заставить его совершить действие, на которое у того не должно быть прав. Это делается путем внедрения каким-либо образом в программу данных или кода в такие места, что программа воспримет их как «свои». Некоторые уязвимости появляются из-за недостаточной проверки данных, вводимых пользователем, и позволяют вставить в интерпретируемый код произвольные команды (SQL-инъекция, XSS). Другие уязвимости появляются из-за более сложных проблем, таких как запись данных в буфер без проверки его границ (переполнение буфера).
Метод информирования об уязвимостях является одним из пунктов спора в сообществе компьютерной безопасности. Некоторые специалисты отстаивают немедленное полное раскрытие информации об уязвимостях, как только они найдены. Другие советуют сообщать об уязвимостях только тем пользователям, которые подвергаются наибольшему риску, а полную информацию публиковать лишь после задержки или не публиковать совсем. Такие задержки могут позволить тем, кто был извещён, исправить ошибку при помощи разработки и применения патчей, но также могут и увеличивать риск для тех, кто не посвящён в детали.
Существуют инструментальные средства, которые могут помочь в обнаружении уязвимостей в системе. Хотя эти инструменты могут обеспечить аудитору хороший обзор возможных уязвимостей, существующих в системе, они не могут заменить участие человека в их оценке.
Для обеспечения защищённости и целостности системы необходимо постоянно следить за ней: устанавливать обновления, и использовать инструменты, которые помогают противодействовать возможным атакам. Уязвимости обнаруживались во всех основных операционных системах, включая Microsoft Windows, Mac OS, различные варианты UNIX (в том числе GNU/Linux) и OpenVMS. Так как новые уязвимости находят непрерывно, единственный путь уменьшить вероятность их использования против системы — постоянная бдительность.
Примеры уязвимостей
Распространённые типы уязвимостей включают в себя:
Уязвимости в системе и приложениях
Инфографика: Уязвимости и эксплойты в операционной системе и приложениях
Уязвимости в операционных системах (ОС) или приложениях имеют следующее происхождение:
Способы разрешенного приложениям доступа к системе, описанные в документации.
Если о существовании уязвимостей в операционной системе или приложении известно (будь то предусмотренные уязвимости или случайно обнаруженные), такое программное обеспечение открыто для атак вредоносных программ.
Устранение системных уязвимостей
Конечно, можно разработать такую ОС, которая не позволяет новым или неизвестным приложениям получить достаточно широкий или полный доступ к файлам на диске или другим приложениям, выполняющимся на данном устройстве.
В сущности, такого рода ограничения позволяют повысить безопасность, поскольку блокируют действия вредоносных программ.
Однако при таком подходе накладываются существенные ограничения и на легитимные приложения, что может быть крайне нежелательно.
Закрытые и частично закрытые системы
Приведем некоторые примеры закрытых и частично закрытых систем:
Платформа BREW — еще один пример среды, закрытой для вирусов. Мобильные телефоны, работающие на этой платформе, позволяют устанавливать только сертифицированные приложения с криптографическими подписями. Хотя опубликована подробная документация, чтобы помочь создателям стороннего программного обеспечения разрабатывать приложения, для установки разрешены только сертифицированные приложения от поставщиков услуг мобильной связи.
Так как каждое приложение должно быть сертифицировано, это может замедлить разработку программного обеспечения и отсрочить коммерческий выпуск новых приложений.
В результате платформа BREW не так широко используется, как некоторые другие платформы, которые предлагают пользователям для установки более широкий выбор приложений.
Насколько «закрытые» системы практичны для настольных компьютеров и ноутбуков?
Если бы операционные системы для настольных компьютеров, такие как Windows или MacOS, были основаны на принципе «закрытая система», независимым компаниям было бы намного сложнее (а в некоторых случаях вообще невозможно) разрабатывать самые разнообразные приложения для домашних и корпоративных пользователей. Кроме того, диапазон доступных веб-сервисов также был бы намного уже.
Интернет, и мир в целом, были бы совсем другими.
Защита от рисков
В некоторой степени опасность, исходящую от уязвимых систем и вредоносных программ, можно рассматривать как цену, которую приходится платить за жизнь в мире, в котором технологии помогают быстрее и удобнее добиваться нужного результата на работе и во время отдыха. Однако выбор надежного антивируса может помочь обеспечить безопасное использование преимуществ технологий.
Другие факторы, способствующие распространению вредоносных программ
Чтобы узнать о других факторах, способствующих распространению вредоносных программ, перейдите по ссылкам ниже:
Что такое XSS-уязвимость и как тестировщику не пропустить ее
По моему наблюдению довольно много тестировщиков когда-либо слышали такое понятие, как XSS-уязвимость. Но мало кто может просто и на пальцах рассказать на собеседовании про нее. Или эффективно проверить веб-сайт на наличие этой уязвимости. Давайте вместе разберемся со всем этим подробнее и попробуем сами найти несложную XSS-уязвимость на демо-странице, которую я специально подготовил к этой статье.
Если вы гуру тестирования безопасности и на раз-два участвуете в баунти-программах крупных IT-компаний, а количество найденных вами XSS исчисляется десятками или даже сотнями — можно смело проходить мимо этой статьи. Если же вы новичок в теме и только начинаете интересоваться поиском уязвимостей — добро пожаловать под кат.
Определение
XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») — довольно распространенная уязвимость, которую можно обнаружить на множестве веб-приложений. Ее суть довольно проста, злоумышленнику удается внедрить на страницу JavaScript-код, который не был предусмотрен разработчиками. Этот код будет выполняться каждый раз, когда жертвы (обычные пользователи) будут заходить на страницу приложения, куда этот код был добавлен. А дальше существует несколько сценариев развития.
Первый: злоумышленнику удастся заполучить авторизационные данные пользователя и войти в его аккаунт.
Второй: злоумышленник может незаметно для жертвы перенаправить его на другую страницу-клон. Эта страница может выглядеть совершенно идентично той, на которой пользователь рассчитывал оказаться. Но вот принадлежать она будет злоумышленнику. Если пользователь не заметит подмены и на этой странице введет какие-то sensitive data, то есть личные данные, они окажутся у злоумышленника.
Третий… да в общем-то много чего еще можно придумать. Почти все, что может JavaScript, становится доступным для злоумышленника. Чуть ниже мы рассмотрим подробнее один из таких примеров. А пока давайте попробуем чуть подробнее обсудить, как именно устроена уязвимость. И почему злоумышленнику удается внедрить свой код в чужое приложение без доступа к его исходникам.
Небольшое предупреждение. Вся информация далее представлена исключительно в информационных целях. Тестировщик должен уметь проверять свое веб-приложение на уязвимости. Однако, использование XSS-уязвимостей на чужих ресурсах является незаконным.
Если говорить про действующее российское законодательство, когда исследователь тестирует чужой продукт на предмет уязвимостей или проникает в чужую сеть без ведома и согласия владельца, его действия могут быть расценены как неправомерные.
Как устроена уязвимость?
Прежде всего, как именно удается внедрить на страницу JavaScript-код, которого там раньше не было? И как получается распространить этот код среди других пользователей?
Например, можно добавить JavaScript-код в поле ввода, текст из которого сохраняется и в дальнейшем отображается на странице для всех пользователей. Это может быть поле для ввода информации о себе на странице профиля социальной сети или комментарии на форуме.
Злоумышленник вводит текст (и за одно вредоносный код), который сохраняется на странице. Когда другие пользователи зайдут на эту же страницу, вместе с текстом они загрузят и JavaScript-код злоумышленника. Именно в момент загрузки этот код отработает. Конечно, уязвимость сработает, только если текст при сохранении не будет обезопасен. О том, как это сделать, и почему разработчики иногда забывают об этом, поговорим чуть позже.
Это лишь самый простой и очевидный пример того, где может быть спрятана уязвимость. Более интересный пример мы с вами чуть ниже рассмотрим на специально подготовленной демо-страничке.
А пока давайте двигаться дальше.
Почему такие ошибки часто встречаются на веб-проектах?
Суть в том, что браузер не может самостоятельно отличить обычный текст от текста, который является CSS, HTML или JavaScript-кодом. Он будет пытаться обрабатывать все, что находится между тегами
В случае, если страница является уязвимой, после ввода этого кода на странице появится вот такое окошко:
Оно и будет означать, что наш JavaScript-код исполнился и мы нашли XSS-уязвимость.
Итак, вводим код и видим следующее предупреждение:
Форма не позволяет нам осуществить поиск по такому значению, так как форма валидируется и хочет работать только с буквами и цифрами. На первый взгляд кажется, что разработчик все учел и защитил страницу от XSS, но это не совсем так.
Помните, чуть выше мы с вами заметили, что текст, который мы вводим в поле поиска, отображается в URL в так называемом GET-параметре? Имя этого параметра “q”, а значение — то, что мы вводим в поле поиска. Это сделано для того, чтобы можно было скопировать URL вместе с этой самой строкой поиска и в следующий раз открыть страницу сразу с нужными авторами.
Например, вот такой URL откроет страницу сразу только с книгами Рея Брэдбери: playground.learnqa.ru/demo/xss?q=Рей+Брэдбери
В отличие от формы, валидацию URL разработчик сделать не мог — любой пользователь в своем браузере может ввести любой URL, какой захочет, в том числе и с любым значением GET-параметра. Задача разработчика в этом случае — не забыть учесть все варианты и написать правильный обработчик значения этого GET-параметра.
Проверим, не забыл ли наш разработчик все учесть тут. Попробуем в GET-параметр “q” подставить тот самый JavaScript-код: https://playground.learnqa.ru/demo/xss?q=
Перейдя по этому URL мы видим, что на странице появилось окошко со значением 123. Но почему?
Все довольно просто. Помните, когда сайт не может найти нужные книги по заданному поисковому запросу, он текст этого поискового запроса выводит в тексте ошибке? Мол, не нашли ничего по запросу “бла-бла”. Вот вместо этого “бла-бла” у нас теперь JavaScript-код с алертом. Разработчик написал валидацию поля ввода и решил, что так он защитил сайт от того, чтобы JavaScript мог оказаться в поисковом запросе. И не стал экранировать текст ошибки. Нам же удалось обойти валидацию через URL, поменяв там значение поискового запроса.
Ради интереса теперь можем вывести значение нашей сессионной cookie, для этого вместо в URL надо подставить другой код:
С этим я уже предоставлю поиграться вам самостоятельно. 🙂
Найдя ошибку, стоит обратиться к разработчикам — они ее исправят.
Способов закрыть ошибку довольно много. Экранировать текст — не единственный из них. Еще можно запретить самому JavaScript видеть некоторые cookie. Для этого у cookie есть специальный параметр “http only”. Если он выставлен в TRUE, JavaScript никак не сможет узнать, что такая cookie вообще выставлена и не сможет ее прочитать и передать злоумышленнику даже в том случае, если ему удастся найти XSS на вашем проекте.
Все это — лишь малый, далеко не полный список манипуляций, предотвращающий XSS-уязвимости. Как писалось выше — при обнаружении XSS в ходе тестирования лучше всего пообщаться с программистами.
Если Вам интересно знать больше про тестирование безопасности, хочется лучше разобраться в устройстве клиент-серверной архитектуры, понять и отточить самые эффективные способы поиска уязвимостей на настоящем веб-приложении, приходите на мой курс “Тестирование безопасности”. Вся необходима информация есть в моем профиле.
Вас ждет только полезная и нужная теория без воды и большое количество практических примеров и заданий. Вы будете исследовать множество веб-страниц, напичканных самыми разными уязвимостями. Итоговой работой станет большое исследование либо вашего рабочего проекта, либо одного из веб-приложений таких гигантов как Google, Facebook, Twitter и так далее.
Что такое уязвимость в системе
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
УЯЗВИМОСТИ ИНФОРМАЦИОННЫХ СИСТЕМ
Классификация уязвимостей информационных систем
Information protection. Vulnerabilities in information systems. The classification of vulnerabilities in information systems
Дата введения 2016-04-01
Предисловие
1 РАЗРАБОТАН Обществом с ограниченной ответственностью «Центр безопасности информации» (ООО «ЦБИ»)
2 ВНЕСЕН Техническим комитетом по стандартизации ТК 362 «Защита информации»
5 ПЕРЕИЗДАНИЕ. Ноябрь 2018 г.
Введение
Настоящий стандарт входит в комплекс стандартов, устанавливающих классификацию уязвимостей, правила описания уязвимостей, содержание и порядок выполнения работ по выявлению и оценке уязвимостей информационных систем (ИС).
Настоящий стандарт распространяется на деятельность по защите информации, связанную с выявлением и устранением уязвимостей ИС, при создании и эксплуатации ИС.
В настоящем стандарте принята классификация уязвимостей ИС исходя из области происхождения уязвимостей, типов недостатков ИС и мест возникновения (проявления) уязвимостей ИС.
1 Область применения
Настоящий стандарт устанавливает классификацию уязвимостей информационных систем (ИС). Настоящий стандарт направлен на совершенствование методического обеспечения определения и описания угроз безопасности информации при проведении работ по защите информации в ИС.
Настоящий стандарт не распространяется на уязвимости ИС, связанные с утечкой информации по техническим каналам, в том числе уязвимости электронных компонентов технических (аппаратных и аппаратно-программных) средств ИС.
2 Нормативные ссылки
В настоящем стандарте использована нормативная ссылка на следующий стандарт:
ГОСТ Р 50922 Защита информации. Основные термины и определения
3 Термины и определения
В настоящем стандарте применены термины по ГОСТ Р 50922, а также следующие термины с соответствующими определениями:
3.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 Уязвимости ИС по типам недостатков ИС подразделяются на следующие:
— недостатки, связанные с неправильной настройкой параметров ПО.
— недостатки, связанные с неполнотой проверки вводимых (входных) данных.
— недостатки, связанные с возможностью прослеживания пути доступа к каталогам.
— недостатки, связанные с возможностью перехода по ссылкам.
— недостатки, связанные с возможностью внедрения команд ОС.
— недостатки, связанные с межсайтовым скриптингом (выполнением сценариев).
— недостатки, связанные с внедрением интерпретируемых операторов языков программирования или разметки.
— недостатки, связанные с внедрением произвольного кода.
— недостатки, связанные с переполнением буфера памяти.
— недостатки, связанные с неконтролируемой форматной строкой.
— недостатки, связанные с вычислениями.
Программные уязвимости
Термин «уязвимость» часто упоминается в связи с компьютерной безопасностью, во множестве самых различных контекстов.
В общем случае, уязвимость ассоциируется с нарушением политики безопасности, вызванным неправильно заданным набором правил или ошибкой в обеспечивающей безопасность компьютера программе. Стоит отметить, что теоретически все компьютерные системы имеют уязвимости. Но то, насколько велик потенциальный ущерб от вирусной атаки, использующей уязвимость, позволяет подразделять уязвимости на активно используемые и не используемые вовсе.
Предпринималось много попыток четко определить термин «уязвимость» и разделить два его значения. MITRE, исследовательская группа, финансируемая федеральным правительством США, занимающаяся анализом и разрешением критических проблем с безопасностью, разработала следующие определения:
Согласно терминологии MITRE CVE:
[…] Уязвимость — это состояние вычислительной системы (или нескольких систем), которое позволяет:
Предпринималось много попыток четко определить термин «уязвимость» и разделить два его значения.
В MITRE считают, что атака, производимая вследствие слабой или неверно настроенной политики безопасности, лучше описывается термином «открытость» (exposure).
Открытость — это состояние вычислительной системы (или нескольких систем), которое не является уязвимостью, но:
Когда хакер пытается получить неавторизованный доступ к системе, он производит сбор информации (расследование) о своем объекте, собирает любые доступные данные и затем использует слабость политики безопасности («открытость») или какую-либо уязвимость. Существующие уязвимости и открытости являются точками, требующими особенно внимательной проверки при настройке системы безопасности против неавторизованного вторжения.
Поиск
Продукты для дома
Наши передовые решения помогают защитить то, что для вас ценно. Узнайте больше о нашей удостоенной наград защите.
Бесплатные утилиты
Наши бесплатные утилиты помогают обеспечить защиту ваших устройств на базе Windows, Mac и Android.
О компании
Узнайте больше о том, кто мы, как мы работаем и почему наша главная цель – сделать цифровой мир безопасным для всех.
Пробные версии
Попробуйте наши решения. Всего за несколько кликов вы можете скачать бесплатные пробные версии нашего продукта и проверить их в действии.
Связаться с нами
Наша главная цель – обеспечить вашу безопасность. Мы всегда готовы ответить на ваши вопросы и оказать техническую поддержку.