Как найти уязвимость в операционной системе

Продолжаем цикл материалов о вредоносных техниках, применяемых злоумышленниками. Встречайте еще одну полезную статью от экспертного центра безопасности Positive Technologies. В прошлый раз мы говорили о том, как киберпреступники повышают привилегии, чтобы получить полный контроль над системой, и как  их работу можно обнаружить. Сегодня рассмотрим тактики, которые используют хакеры для злонамеренных действий с ядром ОС. Расскажем о новом плагине exploitmon, разработанном PT Expert Security Center для системы динамического анализа вредоносных файлов DRAKVUF, и разберем, как в PT Sandbox с его помощью обнаруживать попытки эксплуатации уязвимостей в ядре Windows.

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

Какие уязвимости атакующие обычно эксплуатируют в ядре?

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

HalDispatchTable

HalDispatchTable по праву можно считать самой любимой хакерами структурой, которую используют чуть ли не с появлением ОС Windows XP. Находящаяся в секции ядра с правами на запись структура представляет собой массив указателей на функцию. Ее можно сравнить с Import Address Table пользовательского процесса, однако здесь HalDispatchTable применяется для абстрагирования системы от железа, на котором она работает.

Интересно! Один из указателей на функцию легко может быть вызван из пользовательского процесса. Если посмотреть дизассемблирование функции KeQueryIntervalProfile, то можно заметить, что восьмая инструкция этой функции как раз вызывает HalQuerySystemInformation — в нашем случае смещение 4 байта, так как ОС 32-битная.

Как происходит переход на ядерный код? KeQueryIntervalProfile имеет приставку Ke, означающую, что функция ядерная, а значит, не экспортируется пользовательскими программами. Хорошо, что, есть еще одна одноименная функция с приставкой Nt, которую как раз можно вызывать из пользовательского процесса.

Таким образом, техника эксплуатации уязвимости выглядит следующим образом:

  1. Злоумышленник с помощью какой-либо уязвимости перезаписывает указатель в HalDispatchTable на адрес своего шелл-кода.

  2. Вызывает NtQueryIntervalProfile, а она в свою очередь — ядерную функцию KeQueryIntervalProfile, тем самым передавая управление на шелл-код.

Получается, что шелл-код выполняется в ядерном потоке и имеет полный доступ к OC.

Модификация токена безопасности

Токен — это объект, обеспечивающий разделение прав пользователей в системе. Он находится в EPROCESS — структуре в ядре ОС Windows, которая есть у любого процесса, а токен — всего лишь один из его полей. (Токену безопасности была посвящена наша предыдущая статья.) Итак, зачем атакующему токен?

Если перезаписать токен безопасности непривилегированного процесса пользователя на токен системного, то этот процесс получит системные права. Ниже приведен код кражи токена безопасности от группировки APT28, который заключается в нахождении системного процесса с идентификатором 4 и последующей перезаписи токена существующего процесса на токен системного. Стоит отметить, что этот код полностью проанализирован неким исследователем, восстановлен из оригинального образца и  доступен в открытом исходном коде на github.

Интересно! У перечисленных выше техник есть две общие черты, а именно:

·       выполнение пользовательского кода в ядре;

·       чтение и перезапись полей в динамических структурах ядра.

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

Чтобы показать, как мы детектируем эти и другие эксплойты, перейдем к рассказу о фреймворке DRAKVUF.

Что такое DRAKVUF

DRAKVUF — безагентная песочница динамического анализа файлов с открытым исходным кодом. Она позволяет перехватывать различные события, такие как доступ к памяти (r/w/x) или изменение регистров управления, моделезависимых регистров.

МSR-регистры — это тоже управляющие регистры, однако их отличает от других регистров то, что для записи и чтения используются специальные инструкции — RDMSR и WRMSR.

Преимуществ использования DRAKVUF несколько:

  1. Фреймворк создавался специально для скрытного динамического анализа, то есть запущенный процесс не понимает, что он под пристальным вниманием запускается в виртуальной машине, которая инструментируется гипервизором.

  2. API DRAKVUF не зависит от гостевой операционной системы и может работать с виртуальными машинами Linux и Windows.

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

  4. Использует LibVMI для мониторинга и изменения состояния виртуальной системы.

LibVMI (Virtual Machine Introspection) — это библиотека для мониторинга и модификации виртуальной машины, предоставляющая обширный API на все случаи жизни. Помимо всего прочего, она может перехватывать различные события, в том числе касающиеся модификации памяти. Это очень большой проект: LibVMI поддерживает огромное число гипервизоров, включая Xen, VirtualBox, VMware. Сейчас DRAKVUF работает с гипервизором Xen, под который в наибольшей степени подстроена LibVMI.

Как DRAKVUF и LibVMI перехватывают доступы к памяти

… а также ставят точки останова в коде, и при этом делают все это незаметно для гостевой операционной системы.

Такая возможность есть благодаря дополнительной таблице трансляции страниц, или extended page table (EPT) — аппаратной поддержке виртуализации, добавленной Intel. Она увеличивает производительность непосредственно виртуализации. При трансляции виртуальной памяти гостевой ОС в физическую память основной операционной системы гостевая ОС сначала достает адрес таблицы EPT PML4 из регистра управления 3. Затем виртуальный адрес разделяется на несколько частей, где каждая часть используется как смещение в этих таблицах. Таким образом, как только ОС пройдет три таблицы и дойдет до четвертой EPT, в работу включится наш гипервизор.

Что именно он делает?  Меняет права доступа к физической странице памяти в EPT так, что при доступе к ней происходит исключение Page Fault (EPT violation). Гипервизор перехватывает #PF, обнаруживает и обрабатывает событие, восстанавливая оригинальные права доступа страницы.

Давайте разберем на примере, как работает любой гипервизор с поддержкой EPT. У каждой записи в EPT есть флаги доступа к страницам. Если некая страница доступна на запись, и мы хотим ее перехватить, то следует поменять флаг доступа, к примеру, только на чтение. Соответственно, когда операционная система что-то запишет на нашу страницу, произойдет ошибка, которая и называется Page Fault. Гипервизор, в свою очередь, ее поймает — то есть узнает, что она произошла именно на той странице, которую он мониторит, обработает и восстановит оригинальные права. Таким образом LibVMI перехватывает доступы к памяти. Возьмем простую программу, которая что-то записывает в файл (см. рисунок ниже), запустим ее в DRAKVUF, и среди огромного числа событий, которые она успела перехватить и залогировать, увидим следующее:

Здесь сработал плагин filetracer, логирующий все доступы к файлам, — он поймал доступ к suspicious_file на системном вызове NtCreateFile и NtWriteFile. В данном случае перехваты происходят не на странице, а на определенные адреса: гипервизор по адресу заменяет инструкцию, которую мы хотим перехватить, на INT3, иным словами — Break Point. Кроме того, он обрабатывает ошибку, которую операционная система генерирует при выполнении этого адреса.

Ниже представлен ряд плагинов из репозитория с их функциями.

Exploitmon: что это и зачем он нужен

Exploitmon — это новый плагин для системы DRAKVUF, разработанный PT Expert Security Center c целью обнаружения попыток эксплуатации ядра ОС. Exploitmon отличает от любых других плагинов то, что он обнаруживает только конечный результат, а какую именно уязвимость в ядре использует злоумышленник, для него роли не играет.

Как обнаружить модификацию HalDispatchTable

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

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

Обнаружение модификации токена безопасности

Здесь следующий алгоритм:

  1. Сохраняем уже имеющиеся токены процессов на моменте запуска ВМ.

  2. Сохраняем токен на этапе создания нового процесса.

  3. Сверяем токены при завершении либо процесса, либо анализа ВМ. Есть шанс, что процесс не завершится до окончания анализа — тогда сверку токена можно делать при завершении ВМ.

Ей подается callback — наша функция, которая будет вызвана при каждом найденном процессе. Дело в том, что структуры EPROCESS соединены между собой двусвязным списком, и нумерация процессов в системе превращается в обход этого списка. Функция, которой передается управление при обходе такого списка, показана ниже.

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

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

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

Если токены не совпадут, мы получим следующее сообщение:

Как обнаружить ядерный поток в пользовательской памяти

Легитимно ли исполнение ядерного потока в пользовательской памяти? Правильный ответ — нет. Пользовательская память отличается от ядерной специальным флагом в PTE-структуре. Если он выставлен — память ядерная, если нет — пользовательская. Состояние потока можно узнать с помощью специального API. Так, если два этих значения не совпадут, значит, у нас исполнение ядерного потока в пользовательской памяти.

ExGetPreviousMode — это ядерная функция, недоступная в пользовательском пространстве.

Пару слов о виртуальной памяти Windows:

  • процессы требуют память по необходимости;

  • страница памяти 4 КБ;

  • выделение памяти всегда кратно 64 КБ: если процессу потребовалась страница памяти, ОС выделит 64 КБ (только 60 КБ будет недоступно);

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

Виртуальная память процесса описывается специальной структурой под названием «VAD-дерево». Каждый узел в этом дереве представляет собой область виртуальной памяти и ее различные метаданные — права, размер и прочее. Если в отладчике открыть карту памяти процесса, то это как раз и будет дерево VAD, которое находится в ядре, тогда как отладчик получает информацию о памяти с помощью специального API. Указатель на корневой каталог хранится в EPROCESS-структуре процесса, а тип узла может быть либо Mapped VAD node (сюда относят подгруженные библиотеки, файлы шрифтов, языков и в целом память, которую можно разделить между процессами), либо Private VAD node (входит Private Heap, стек, память, которая выделяется под свои собственные нужды с помощью VirtualAlloc, различные распаковщики исполняемых файлов и так далее).

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

Выделим ключевые моменты обнаружения:

  1. Перехват MmAccessFault на выходе из функции, где как раз вступает в дело наш гипервизор.

  2. Перехват физической памяти на исполнение.

  3. Сверка последнего режима потока и типа памяти в обработчике перехватов физической страницы.

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

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

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

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

Когда ресурса не хватает, этот функционал можно отключить специальным флагом при создании DRAKVUF.

Подробнее о PT Sandbox

PT Sandbox — песочница для защиты от целевых и массовых атак с применением неизвестного вредоносного ПО и угроз нулевого дня. Возможности продукта позволяют проводить статический анализ кода полученных объектов с помощью IAR-движка с собственными правилами для обнаружения вредоносного ПО. Кроме того, для обеспечения эффективного покрытия используется SDK сторонних вендоров. В PT Sandbox можно проводить динамический анализ: образцы запускаются в виртуальном окружении, для анализа поведения снимается трасса событий в системе (в том числе с помощью системы для динамического анализа вредоносных файлов DRAKVUF). Также можно записывать сетевой трафик, который сканируется сетевыми сигнатурами, анализировать дампы памяти процессов и извлекать созданные файлы из системы. Узнать больше о PT Sandbox можно здесь.

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


Авторы:

Алексей Вишняков

Руководитель отдела обнаружения вредоносного ПО PT ESC

Павел Максютин

Специалист отдела обнаружения вредоносного ПО PT ESC

Pwn iNt All! Находим уязвимости в скриптовых движках и вскрываем usermode-механизмы защиты Windows. Часть 1

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

Сделаем это на примере задания № 11 из прошедшего NeoQUEST-2018 . Задачка реалистичная — рассмотрим “живой” сценарий удаленного выполнения кода, похожий на тот, что возникает в процессе эксплуатации Javascript-движков в браузерах. Будем искать уязвимости в некотором интерпретаторе, реализовывать их с получением ARW-примитива, а в результате — обойдем защиту ОС Windows пользовательского режима. Задание оказалось крайне

сложнопроходимым

интересным, поэтому посвятим ему целый цикл статей с подробным описанием пути к успеху.

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

Итак, приступим!

«Ключевой» поиск

Рассмотрим исходные данные. Целевая программа представляет собой некий интерпретатор команд для работы с тремя типами данных: числами, векторами и матрицами. Воспользуемся командой help — это даст нам представление о наборе поддерживаемых команд. Интерпретатор позволяет:

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

Программа реализована в виде бесконечного цикла обработки команд:

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

Итак, в поисках “ключевой” функции проверим бинарник на предмет характерных строк, связанных со словом “ключ” на всех языках мира. Быстро находим нужный фрагмент:

Похоже, что в бинарнике ключ отсутствует (что логично, черт побери!). Судя по всему, на сервере крутится тот же бинарник, и в строке аргумента aFirstKeyIs2c7f там находится верный ключ! Но как получить содержимое измененной строки с удаленного сервера?

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

  • В коде отсутствуют прямые вызовы (direct calls) этой функции и функции-заглушки sub_40E120.
  • Вызов sub_40E120 лежит в списке разрешенных с точки зрения механизма Control Flow Guard , что характерно для виртуальных методов – эти методы вызываются через косвенные вызовы (indirect calls).

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

  1. Попробовать найти легитимную возможность вызвать нужный метод. Теоретически это может быть недокументированная возможность программы.
  2. Поискать уязвимости. Если найти то, что позволит нам овладеть магией выполнения произвольного кода, то можно с легкостью вызвать нужный метод и получить ключ.

С чего же начать?

Закладки сладки

Для начала проанализируем код на предмет недокументированных возможностей. Судя по всему, функция обработки входной строки их не содержит: используемые здесь регулярные выражения относятся лишь к вышеперечисленным командам. Да и прямых вызовов данной функции в коде нет. Может быть, среди документированных команд имеются скрытые возможности по косвенному вызову нужной нам “ключевой” функции?

Ан нет. Некоторые команды (find, what) содержат в себе косвенные вызовы виртуальных методов, но повлиять на выбор вызываемого метода невозможно — смещения в таблице vtable везде фиксированы.

Увы, неудача! Теперь самое время заняться поиском

оправданий

уязвимостей, которые позволят нам вызвать “ключевую” функцию.

Кто ищет, тот всегда найдет, что искать

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

  1. Сначала создается некоторое количество переменных различных типов и размеров. Имена и типы переменных сохраняются для последующего использования.
  2. Далее каждая команда генерируется случайным образом в соответствии со списком имеющихся переменных:
    • Выбирается произвольная команда (без учета параметров) из списка: команда создания новой переменной, арифметическая операция, команда присвоения, команды find, print.
    • В зависимости от вида команды, к ней добавляются произвольные аргументы. К примеру, для команды find выбирается произвольное имя из списка доступных переменных + произвольное число, являющееся вторым аргументом. Для команды арифметической операции число параметров велико (знак операции, переменные, индексы векторов и матриц), и каждый из них также выбирается произвольно.
    • Сформированная команда добавляется в текущую последовательность. Поскольку некоторые команды могут создавать новые переменные и менять тип уже существующих, то списки с переменными в этих случаях обновляются. Это позволит задействовать новые/измененные переменные в процессе генерации последующих команд.
  3. Интерпретатор запускается под отладчиком. Сформированная последовательность передается на вход интерпретатору. Ведется регистрация возможных падений при обработке переданных команд.

Иии… Победа! После запуска фаззера достаточно быстро удалось найти уязвимые последовательности команд, на которых интерпретатор “упал”. Результат более чем удовлетворительный — целых две различные уязвимости!

Уязвимость №1 (UaF)

Получив первую последовательность и очистив её от лишних команд (которые не влияют на падение интерпретатора), получаем следующий Proof-Of-Concept:

Посмотрим повнимательнее. Узнаете? Перед нами классическая уязвимость типа Use-After-Free ! Вот что происходит в данной последовательности команд:

  1. Создается большой вектор vec и целочисленная переменная intval.
  2. Создается копия вектора vec — переменная vec2.
  3. Переменной vec2 присваивается переменная другого типа (целочисленного).
  4. Попытка работать с исходным вектором vec приводит к записи в освобожденную память и, соответственно, к падению программы.

Похоже, что в интерпретаторе реализована концепция Copy-On-Write, вследствие чего переменные vec и vec2 содержали ссылку на один и тот же буфер в памяти. При переназначении одной из переменных буфер освобождался без учета того факта, что на него имелась ссылка и в другой переменной. После этого переменная vec содержала указатель на освобожденную память, и имела к ней доступ на чтение и запись. Как итог, данная уязвимость позволяет получить произвольный доступ к участку памяти, в которой могут находиться другие объекты программы.

Уязвимость №2 (Integer Overflow)

Вторая проблема связана с конструктором объекта матрицы. При выделении памяти под численный массив некорректно реализована проверка ширины W и высоты H матрицы.

В конструкторе предварительно выделяется память под W*H целочисленных ячеек. Если произведение W *H было больше, чем 232-1, то это приводит к выделению очень маленького буфера вследствие целочисленного переполнения. Это можно заметить и непосредственно в бинарнике, в конструкторе класса.

Однако возможность последующего доступа к ячейкам этого массива определяется большими границами W и H, а не переполненным значением W *H:

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

Каждая из найденных уязвимостей позволяет достичь нужного результата – стать RCE-богом и исполнить произвольный код. Рассмотрим эту процедуру в обоих случаях.

Я тебя контролирую!

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

При создании объекта вызывается конструктор базового класса, затем поля объекта заполняются в соответствии с его типом. Можно увидеть назначение и порядок полей: адрес таблицы виртуальных функций, размер вектора, адрес буфера, тип объекта в виде численного идентификатора.
Как добиться того, чтобы в освобожденном участке памяти, доступном с помощью поврежденного объекта vec, оказалась переменная victim? Будем создавать новые объекты в куче процесса сразу после приведения объекта vec в поврежденное состояние. А для поиска объекта, который таки попадет в освобожденную память, воспользуемся командой интерпретатора find. Поместим в одно из полей у создаваемых объектов какое-либо редкое значение — своеобразный magic number. Очевидно, лучше всего для этого подходит размер буфера, т.к. он задается непосредственно пользователем при создании нового объекта. Если поиск этого значения в буфере поврежденного объекта vec увенчается успехом, значит, мы нашли нужный объект!
Продемонстрируем нахождение объекта victim для обеих уязвимостей. Действия на данном этапе будут несколько отличаться друг от друга.

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

Отлично, мы успешно нашли объект-жертву victim (он же v1 в данном случае)!

При выполнении того же сценария с использованием второй уязвимости все будет несколько сложнее. В этом случае поиск будет потенциально вестись во всей памяти, поскольку ширина W либо высота H матрицы будут велики. Однако если нужного числа в непосредственной близости от буфера не будет, то цикл поиска будет выходить за границы отображенной в адресное пространство памяти. Это приведет к падению процесса интерпретатора до нахождения заветного magic number. Эта проблема решается выделением большого количества объектов в памяти — хотя бы один из них попадет в память непосредственно вблизи буфера.

Бинго! И в данном случае мы также нашли объект victim!

А теперь самое интересное — необходимо понять, как именно изменить объект victim и как запустить с его помощью выполнение нужного нам кода. Итак, мы успешно поместили в освобожденную память объект класса “вектор”. Схематично это выглядит как-то так:

Объект victim находится в доступном нам с помощью объекта vec участке кучи, и мы можем как читать поля объекта victim, так и изменять их. Также нам известно смещение числа bufsize в буфере объекта vec. Теперь модифицируем объект victim следующим образом:

  1. Прочитаем адрес таблицы vtable, тем самым раскрывая исполняемый адрес в памяти (и побеждая защиту ASLR).
  2. Изучив бинарник интерпретатора, найдем константную разницу между адресом таблицы vtable для объекта вектора и адресом “ключевой” функции. Это позволит вычислить адрес “ключевой” функции на стороне сервера:

  3. Сформируем ложную таблицу vtable прямо в буфере объекта victim, куда запишем только что вычисленный адрес “ключевой” функции.
  4. Заменим адрес истинной таблицы vtable у объекта victim на адрес ложной.
  5. Вызовем команду what у объекта victim. Благодаря манипуляции с таблицей vtable вместо подлинного виртуального метода вызовется наша, “ключевая” функция. Поскольку мы вызываем целую функцию, а не отдельные ROP-гаджеты, защита Contol Flow Guard вызову функции никак не препятствует.

Данная схема вызова нужной нам функции является идентичной для обеих уязвимостей.

Мы в шаге от успеха, осталось собрать все воедино и получить ключ! Ниже рассмотрим оба примера.
Так выглядит код работающего эксплойта для уязвимости типа Use-After-Free:

Код эксплойта для уязвимости типа Use-After-Free

var vec[4096] var m2:=vec var va=3 m2:=va va=find(vec,256) var v1[256] va=find(vec,256) var vtb=0 vtb=va-1 var buf=0 buf=va+1 var func=0 func=vec[vtb]-1547208 func=func+57632 v1[0]=func vec[vtb]=vec[buf] what v1

А так — для уязвимости типа Integer Overflow:

Код эксплойта для уязвимости типа Integer Overflow

var m[65537][65536] var v1[256] var v2[256] var v3[256] var v4[256] var v6[256] var v5[256] var v7[256] var v8[256] var v9[256] var v10[256] var v11[256] var v12[256] var v13[256] var v14[256] var v16[256] var v15[256] var v17[256] var v18[256] var v19[256] var v20[256] var v21[256] var v22[256] var v23[256] var v24[256] var v25[256] var v26[256] var v27[256] var v28[256] var v29[256] var v30[256] var v31[256] var v32[256] var v33[256] var v34[256] var v35[256] var v36[256] var v37[256] var v38[256] var v39[256] var v40[256] var varr=0 var varc=0 varr=find(m,256).row varc=find(m,256).col var vtb=0 vtb=varc-1 var buf=0 buf=varc+1 var func=0 func=m[varr][vtb]-1547208 func=func+57632 v1[0]=func v2[0]=func v3[0]=func v4[0]=func v5[0]=func v6[0]=func v7[0]=func v8[0]=func v9[0]=func v10[0]=func v11[0]=func v12[0]=func v13[0]=func v14[0]=func v15[0]=func v16[0]=func v17[0]=func v18[0]=func v19[0]=func v20[0]=func v21[0]=func v22[0]=func v23[0]=func v24[0]=func v25[0]=func v26[0]=func v27[0]=func v28[0]=func v29[0]=func v30[0]=func v31[0]=func v32[0]=func v33[0]=func v34[0]=func v35[0]=func v36[0]=func v37[0]=func v38[0]=func v39[0]=func v40[0]=func m[varr][vtb]=m[varr][buf] what v1 what v2 what v3 what v4 what v5 what v5 what v6 what v7 what v8 what v9 what v10 what v11 what v12 what v13 what v14 what v15 what v16 what v17 what v18 what v19 what v20 what v21 what v22 what v23 what v24 what v25 what v26 what v27 what v28 what v29 what v30 what v31 what v32 what v33 what v34 what v35 what v36 what v37 what v38 what v39 what v40 

Ура! Получен ключ, а бонусом к нему — важная информация. Оказывается, имеется и второй ключ, но он лежит в файле рядом с бинарником на стороне сервера. Для решения данной задачи требуется строить ROP-цепь, а значит, придется обходить CFG. Но об этом — в следующей статье!

А мы напоминаем, что всем, кто прошел полностью хотя бы одно задание на NeoQUEST-2018 , полагается приз! Проверяйте почту на наличие письма, а если вдруг оно вам не пришло — пишите на support@neoquest.ru!

Цифровой мир полон опасностей – подписывайтесь на наш канал и научитесь как их преодолеть!

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

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

Хакеры активно ищут эти лазейки, чтобы использовать их в своих интересах.

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

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

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

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

В этой статье мы рассмотрим 10 лучших инструментов сканирования уязвимостей, доступных на рынке.

Содержание

  1. 10 лучших инструментов сканирования уязвимостей
  2. 1. сканер уязвимостей OpenVAS
  3. 2.Tripwire IP360
  4. 3. Сканер уязвимостей Nessus
  5. 4.Comodo HackerProof
  6. 5.Nexpose community
  7. 6.Vulnerability Manager Plus
  8. 7.Nikto
  9. 8.Wireshark
  10. 9. Aircrack-ng
  11. 10. Сетевой сканер безопасности Retina

10 лучших инструментов сканирования уязвимостей

1. сканер уязвимостей OpenVAS

Сканер уязвимостей OpenVAS – это инструмент анализа уязвимостей, который позволит  сканировать серверы и сетевые устройства благодаря своей комплексной природе.

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

После завершения сканирования, генерируется автоматический отчет и отправляется по электронной почте для дальнейшего изучения и исправления.

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

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

Статьи по теме:

  • ? Установите OpenVAS 9 с PostgreSQL в Ubuntu 18.04
  • ? Узнайте, как установить средство аудита безопасности с открытым исходным кодом OpenVAS на платформу Ubuntu Server.
  • Настройка, прокачка, запуск и автоматизация OpenVAS на Kali Linux
  • Как сбросить пароль admin в OpenVAS
  • OpenVAS на Ubuntu 16.04
  • Как установить OpenVas на Kali Linux

2.Tripwire IP360

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

Tripwire позволит получать доступ к своим ресурсам, используя меньшее количество операций сканирования агентов.

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

3. Сканер уязвимостей Nessus

Nessus Professional от Tenable – это разботка для специалистов по безопасности, занимающаяся исправлениями, проблемами с программным обеспечением, средствами удаления вредоносных программ и рекламного ПО, а также неправильной настройкой в широком спектре операционных систем и приложений.

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

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

Tenable также упоминается как Gartner Peer Insights Choice для оценки уязвимости к марту 2019 года.

См. также:

  • Как сканировать удаленный хост с помощью сканера уязвимостей Nessus
  • Обновление плагинов вручную на сканере Nessus (Linux)
  • Как установить сканер Nessus на Ubuntu 18.04 / Debian 9
  • Краткое введение в сканер уязвимостей Nessus
  • Установка сканера уязвимости Nessus Astra Linux 1.5 SE

4.Comodo HackerProof

Comodo HackerProof – еще один ведущий сканер уязвимостей с надежными функциями, которые позволяют ежедневно сканировать на поиск своиз уязвимостей.

Варианты сканирования PCI, предотвращение атак и технология site inspector, которая помогает в сканировании веб-сайтов следующего поколения.

Помимо этих льгот, Comodo также предоставляет пользователям индикатор безопасности.

Это уменьшит количество брошенных корзин, улучшит конверсии и увеличит доход в большом соотношении.

Не забывайте об их уникальной технологии site inspector, которая действует как лучший счетчик для атак.

Nexpose  – это инструмент сканирования уязвимостей, разработанный Rapid7, это решение с открытым исходным кодом, которое покрывает большинство ваших проверок сети.

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

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

Кроме того, сканер уязвимостей также оценивает риск угроз, варьируя его в диапазоне от 1 до 1000, что дает специалистам по безопасности возможность исправить уязвимость до ее использования.

В настоящее время Nexpose предлагает бесплатную пробную версию на один год.

6.Vulnerability Manager Plus

Vulnerability Manager Plus – это новое решение для этого рынка, разработанное ManageEngine.

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

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

Кроме того, Vulnerability Manager Plus – это автоматическое сканирование, оценка воздействия, оценка рисков программного обеспечения, неправильная настройка безопасности, исправление, сканер устранения уязвимостей нулевого дня и тестирование и усиление проникновения веб-сервера.

Поставляется совершенно бесплатно для 25 устройств.

7.Nikto

Nikto – еще один бесплатный онлайн-сканер уязвимостей.

Nikto помогает понять функции сервера, проверить их версии, выполнить тестирование веб-серверов, чтобы выявить угрозы и присутствие вредоносных программ, а также сканировать различные протоколы, такие как https, httpd, HTTP и другие.

Также помогает в сканировании нескольких портов сервера в короткие сроки.

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

8.Wireshark

Wireshark считается одним из самых мощных анализаторов сетевых протоколов на рынке.

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

Как только Wireshark идентифицирует угрозу, он отключает ее для проверки.

Wireshark успешно работает на устройствах Linux, macOS и Windows.

Среди других особенностей Wireshark – стандартный трехпанельный браузер пакетов, сетевые данные можно просматривать с помощью графического интерфейса, мощные фильтры отображения, анализ VoIP, поддержка дешифрования для таких протоколов, как Kerberos, WEP, SSL / TLS и другие.

Вы можете пройти полное обучение по Wireshark, чтобы улучшить свои навыки сканирования сети.

см. также

  • Руководство для начинающих, как начать работу с фильтрами в WireShark
  • ? Установка последней версии Wireshark на Ubuntu 18.04
  • ?️ Расшифровка трафика SSL / TLS с помощью Wireshark
  • ? Шпаргалка по Wireshark
  • Как запустить Wireshark от пользователя root на Kali Linux
  • Установка Wireshark Ubuntu

9. Aircrack-ng

Aircrack-ng поможет позаботиться о безопасности сети WiFi.

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

Заботится о потерянных ключах, захватывая пакеты данных. Поддержка ОС включает в себя NetBSD, Windows, OS X, Linux и Solaris.

10. Сетевой сканер безопасности Retina

Сканер уязвимостей Retina – это веб-приложение с открытым исходным кодом, которое заботится об управлении уязвимостями из центрального расположения.

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

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

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

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

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

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

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

Что такое уязвимость операционной системы и каковы риски?

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

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

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

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

Список основных уязвимостей современных операционных систем

Как мы уже упоминали, уязвимости есть в любой системе или программное обеспечение.

Если вы до сих пор не знаете, какие из них влияют на вашу систему, то мы назовем основные уязвимости, в разных ОС:

Окна

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

Основные из них следующие:

  • Серверы и услуги Интернет
  • Обслуживание рабочих станций Службы удаленного доступа Windows Microsoft SQL Server (MSSQL)
  • Аутентификация Окна
  • Браузеры (Край)
  • Приложения обмен один на один (P2P)
  • LSAS (Служба подсистемы локального органа безопасности)
  • клиенты электронной почты (Перспективы)
  • Программы обмена мгновенными сообщениями (Скайп)

контрмеры для контроля этих уязвимостейпока ждем обновления системы, может быть; отключить все превью и панель сведений в проводнике Windows, как и служба веб-клиент, и переименовать или отключить «Atmfd.dll»

С Android

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

Его основные недостатки или уязвимости заключаются в следующем:

  • Ошибки Qualcomm: Это драйвер по умолчанию, который позволяет управлять беспроводными сетями, в частности сетевыми якорями. Любой хакер может создать червоточину и получить доступ к нашему мобильному через эти сбои.
  • Версии Android 4.0.3 — 4-4-4 полностью уязвимы кибератак, что делает их целью многих злоумышленников.
  • Заражение приложения Google Play. Они известны как рекламное ПО, и они очень опасны, поскольку могут полностью поставить под угрозу здоровье нашего устройства.

Из macOS

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

Давайте посмотрим ниже:

  • Кража учетных данных: всегда операционная система MacOS выделил в качестве одной из своих основных уязвимостей недостатки идентификации, позволяющие хакерам извлекать данные пользователей, включая их учетные данные.
  • Неисправности защитного механизма: Филиппо Кавалларин в своих последних исследованиях обнаружил слабые места в защитном механизме MacOS, гарантируя, что эту систему можно обойти.
  • Устаревшая ЭФИС: ЭФИС они не всегда полностью обновляются, и, как мы должны понимать, устаревшая система или программное обеспечение — это брешь для атаки.

Из iOS

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

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

Эти уязвимости имеют следующие названия:

  • За пределами записи (Внеплановая запись)
  • Удаленное переполнение кучи

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

линукс

Операционная система с открытым исходным кодом, у него также есть некоторые недостатки в его конструкциикак окна, Есть обновления, которые их устраняют, но есть и те, которые сохраняются.

Наиболее распространенными уязвимостями в большинстве версий Linux являются следующие:

  • ПРИВЯЗАТЬ DNS (Система доменных имен)
  • веб сервер
  • Аутентификация
  • Системы контроля над версии
  • Служба почтового транспорта
  • SNMP (Простой протокол управления сетью)
  • OpenSSL (Уровень защищенных гнезд)
  • Неправильная конфигурация по НИС/НФС
  • База данных
  • ядро

Как исправить уязвимости операционной системы? Всегда держите его в курсе!

защити нас от уязвимостей

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

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

Исследование уязвимостей операционных систем с использованием программных средств Microsoft Basline Sequrity Analyzer

Федеральное государственное бюджетное образовательное
учреждение

высшего
профессионального образования

“Оренбургский
государственный университет”

Факультет
информационных технологий

Кафедра
вычислительной техники и защиты информации

КУрсовая работа

По
дисциплине “Защита информационных процессов в компьютерных системах”

Исследование
уязвимостей ОС с использованием программных средств Microsoft
Basline Sequrity
Analyzer

Оренбург
2014

Содержание

Введение

Постановка задачи

.
Исследовательская часть

.1 Безопасность
операционной системы

.2 Обзор
уязвимостей ОС

.3 Обзор приложения
MBSA

.
Практическая часть

.1 Работа с
программами

.2 Положительные и
отрицательные стороны MBSA
2.3

Заключение

Список
использованных источников

операционный
программный microsoft sequrity

Введение

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

Текущее состояние защищенности
системы может иметь одно из двух состояний: полностью защищена, либо полностью
незащищена. Переход системы из одного состояние в другое осуществляется при
обнаружении хотя бы одной уязвимости защиты, возвращение в исходное состояние –
при устранении известной уязвимости. Другими словами, рассуждения о степени
защищенности ОС неуместны – любая обнаруженная в системе уязвимость делает ее
полностью незащищенной (рисунок 1).

Рисунок 1 – Уровень защищенности ОС

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

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

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

Ρ=1-λ/μ
(1)

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

Таблица 1 -Вероятность
защищенности системы.

Интенсивность
отказов

1
в год

2
в год

5
в год

10
в год

Восстановление

1
нед.

0,98

0,96

0.93

0,81

2
нед.

0,96

0,92

0,81

0,62

1
мес.

0.92

0,85

0,62

0,23

2
мес.

0,85

0,69

0,24

3
мес.

0,77

0,54

4
мес.

0,69

0,39

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

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

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

Постановка задачи

Целью данной курсовой работы
является выявление уязвимостей ОС Microsoft
Windows 7 с помощью
программного продукта Microsoft
Baseline
Security
Analyzer. Данная цель
достигается путем выполнения следующих задач:

Выбор версии и последующая
установка Microsoft
Baseline
Security
Analyzer;

Проведение аудита нашей ОС с
помощью данной программы;

Сравнение нашего
“Сканера” с другим программными продуктами обладающими такими же
заявленными возможностями.

Возможное устранение найденных
уязвимостей.

1. Исследовательская часть

.1 Безопасность операционной
системы

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

Термин “информационная
безопасность” появился сравнительно недавно, с развитием вычислительной
техники и ЭВМ. Информационная безопасность включает в себя кроме безопасности
используемого программного обеспечения, также безопасность аппаратных средств,
безопасность каналов связи и многое другое.

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

Если есть запрет, появится и
человек, который попытается его нарушить! С развитием информационных технологий
и внедрением компьютера практически во все сферы деятельности появились люди,
так называемые “крякеры” (от англ. cracker – “взломщик
компьютерных сетей и программ”), которые различными ухищрениями и
нестандартными методами пытаются с целью собственной выгоды получить
несанкционированный доступ к информации, которая для них не предназначена.
Порой это приводит к плачевным последствиям для владельца этой информации.
Тогда и возникла потребность в борьбе с “информационными
вредителями”. Были разработаны целые комплексы программ для усиления
информационной безопасности и борьбы с крякерами. А поскольку любым электронно-вычислительным
комплексом управляет определенная ОС, то, соответственно, для обеспечения
безопасности системы в целом необходимо позаботиться о безопасности самой ОС.

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

Изучая безопасность ОС, нельзя
не коснуться теории компьютерной безопасности. Теория компьютерной безопасности
оперирует тремя основными понятиями: угроза, уязвимость и атака.

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

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

К уязвимостям можно отнести
следующие состояния информационных систем:

Несовершенство используемого
программного обеспечения

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

Еще существует такое понятие,
как “люк”. Люком называют специальные комбинации действий над
программой, которые позволяют обойти некоторые этапы выполнения. Обычно люки
используются программистами при разработке и тестировании программ с целью
обхода уже проверенных блоков и в конце должны “закрываться”, то есть
программный код, отвечающий за люк, должен быть удален из готовой программы. Но
то, что должно, делается не всегда. Программист попросту может забыть про люк,
в результате люк остается в готовой программе и может представлять угрозу для
правильного выполнения;

– Неправильная
настройка программного обеспечения

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

.2
Обзор уязвимостей ОС

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

получение имени и пароля ОС или
БД.

В эту группу входят уязвимости
позволяющие узнать из файлов и реестра имена и пароли пользователей системы,
включая имя и пароль администратора;

получение имени и пароля других
служб и приложений.

Такие уязвимости позволяют
сделать тоже, что и в первой группе, но с учетом того, что несистемные имена и
пароли могут совпадать с системными;

крах системы.

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

использование некорректных
настроек безопасности реестра.

Позволяет беспрепятственно
читать и записывать информацию из/в реестр ОС. Поскольку реестр – это системная
БД ОС, которой также пользуются и другие приложения, получив к нему полный
доступ можно получить полный доступ и к ОС;

использование некорректных
настроек файловой системы.

Для ОС Windows применяются
файловые системы FAT и NTFS. Есть различные версии этих файловых систем. Одни
абсолютно не защищены (FAT), другие развиваются и включают все большее
количество возможностей по защите (NTFS). Разрешения на чтение и запись в
файловой системе позволяет узнавать конфиденциальную информацию и менять
конфигурации ОС и приложений;

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

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

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

использование ошибки каталога
“..” (две точки).

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

перехват информации
пользователя.

Позволяет получить имена и
пароли, вводимые пользователем с клавиатуры или прочитать конфиденциальную
информацию так же вводимую пользователем;

определение имени пользователя
( information leak).

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

дезинформация пользователя.

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

поиск и подбор пароля.

Стандартная функция для
пользователя становится уязвимостью при получении доступа к компьютеру
злоумышленником. Одним из основных действий, совершаемых с использованием
возможности запуска произвольной программы, является поиск и подбор паролей
пользователей. В эту группу не включаем запуск программ-тестов безопасности
(exploit), которые необходимы для реализации уязвимостей. Эту группу также
можно назвать “запуск вспомогательных программ”. Ниже рассматриваются
уязвимости требующие возможности запуска программ-тестов (exploit) без которых
нельзя получить доступ к интерфейсам, недоступным через графический интерфейс и
командную строку – например, подключение к именованным каналам, генерация
нестандартных сетевых пакетов для служб различных протоколов. Все ручные
операции и часть программ-тестов должны быть выполнены локально остальные с
использованием сети локально или удаленно. Место запуска в нашей классификации
характеризует необходимые или начальные условия для совершения атаки;

удаление и перезапись.

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

– отождествление
прав
с
правами
системы
(priveledge escalation/elevation, protection bypass, buffer overflow).

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

.3 Обзор приложения MBSA

Baseline Security
Analyzer (MBSA) – свободно
распространяемое
средство
анализа
защищенности
операционных
системWindows
и
ряда
программных
продуктов
компании
Microsoft (Internet Information Services, SQL Server, Internet Explorer и
др.).
Термин
” Baseline ” в названии MBSA следует понимать как некоторый эталонный
уровень, при котором безопасность ОС можно считать удовлетворительной. MBSA
позволяет сканировать компьютеры под управлением операционных систем Windows на
предмет обнаружения основных уязвимостей и наличия рекомендованных к установке
обновлений системы безопасности. Критически важно знать, какие обновления
установлены, а какие еще следует установить на вашей ОС. MBSA обеспечивает
подобную проверку, обращаясь к постоянно пополняемой Microsoft базе данных в
формате XML, которая содержит информацию об обновлениях, выпущенных для каждого
из программных продуктов Microsoft . Работать с программой MBSA можно через
графический интерфейс и командную строку.

Интерфейс MBSA выполнен на
основе браузера Internet Explorer. Главное окно программы разбито на две
области . Так как сеанс работы с MBSA настраивается с помощью мастера, то в
левой области представлены шаги мастера, а в правой – основное окно с описанием
действий каждого шага(рисунок 2).

Рисунок 2 – Интерфейс MBSA

на таблице ниже(таблица 2)
приведены параметры которые можно включать в аудит в данном приложении:

Таблица 2 – Параметры аудита.

Проверка

Описание

Administrators

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

Auditing

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

Autologon

Проверяет,
включена ли функция Autologon

Domain
Controller Test

Проверяет,
не запущена ли служба IIS на контроллере домена (DC)

Проверяет
пропущенные исправления для системы безопасности Exchange Server

File
System

Проверяет
тип файловой системы (например, NTFS)

Guest
Account

Проверяет,
не активирована ли учетная запись Guest

IE
Zones

Выводит
зоны безопасности IE для каждого пользователя

IIS
Admin Virtual Directory

Просматривает
виртуальный каталог IISADMPWD

IIS
Lockdown Tool

Проверяет,
проведена ли процедура защиты IIS Lockdown

IIS
Logging Enabled

Выдает
рекомендации по журналированию сайтов HTTP и FTP

IIS
Security Updates

Проверяет
пропущенные исправления для системы безопасности IIS

Local
Account Password Test

Проверяет
наличие пустых или слабых паролей для локальных учетных записей

Macro
Security

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

Msadc and Scripts Virtual
Directories

Просматривает
виртуальный каталог MSADC и Scripts

Outlook
Zones

Выводит
зоны безопасности Outlook для каждого пользователя

Parent
Paths

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

Password
Expiration

Выводит
учетные записи с неограниченным сроком действия паролей, не перечисленные в
NoExpireOk.txt

Restrict
Anonymous

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

Sample
Applications

Выводит
установленные примеры приложений для IIS (например, Default Web Site,
IISHelp)

Services

Выводит
список несущественных служб (например, FTP, SMTP, Telnet, WWW), которые могут
ослабить безопасность

Shares

Проверяет
и выводит список общих ресурсов, а также их списки ACL

SQL
Server Security Updates

Проверяет
пропущенные исправления для системы безопасности SQL Server

SQL:
CmdExec role

Проверяет
ограничение на запуск CmdExec только для SysAdmin

SQL:
Domain Controller Test

Проверяет,
не запущен ли SQL Server на DC

SQL:
Exposed SQL Password

Проверяет,
не присутсвует ли пароль администратора (SA) в текством файле (например,
setup.issили sqlstp.log)

SQL:
Folder Permissions

Проверяет
разрешения файлов в каталоге установки SQL Server

SQL:
Guest Account

Выводит
базы данных с активной учетной записью гостя

SQL:
Registry Permissions

Проверяет
разрешения реестра на разделы SQL Server

SQL:
Service Accounts

Проверяет
членство в группах учетных записей SQL Server и SQL Server agent

SQL: SQL Account Password Test

Проверяет
на пустые или слабые пароли локальных учетных записей SQL

SQL: SQL Server Security Mode

Проверяет,
запущен
SQL Server в режиме
Windows Only или
Mixed

SQL:
SysAdmin Role Members

Выводит
членов роли SysAdmin

SQL:
SysAdmins

Выводит
количество SysAdmins

Windows Media Player Security
Updates

Проверяет
пропущенные исправления для системы безопасности WMP

2. Практическая часть

2.1 Работа с программами

Так как программный продукт
будет тестироваться на Windows
7, то с официального сайта
(#”784708.files/image003.gif”>

Рисунок
3 – установка
Microsoft Baseline Security Analyzer 2.3

После настройки программы
(рисунок 4) был произведен аудит ОС который выдал следующий результат (рисунок
5).

Рисунок 4 – настройка
параметров аудита

Рисунок 5 – Результат аудита
системы

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

Рисунок
6 – Интерфейс
программы
Кaspersky
internet security

Рисунок 7 – Результат проверки
ОС

Следующим программным продуктом
был “Windows
Vulnerability
Scanner”(рисунок 8).

Рисунок 8 – Результат проверки
системы программой

Как видно из рисунка ,
сканирование выдало ID
найденных уязвимостей в нашей системе, такие же уязвимости показала нам и MBSA,
по каждой строчке есть инструкция решения уязвимости и её полное
описание(рисунок 9).

Рисунок 9 – Уязвимость
MS13-099 critical

2.2 Положительные и
отрицательные стороны MBSA
2.3

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

Таблица 3 – Сравнение MBSA
c программами
выполняющие аналогичные функции.

Критерий

MBSA 2.3

Kaspersky IS

Winvulscan

Руссификация

+

Проверка
нескольких компьютеров

+

Настройка
параметров аудита

+

Скорость
проверки ОС

+

+

Бесплатность

+

+

Положительный
результат проверки

+

+

Сохранение
результата проверки(log)

+

+

+

Заключение

В ходе данной курсовой работы
были выполнены все поставленные задачи:

Был произведен выбор
программного продукта и его установка;

Была произведена настройка
параметров аудита;

Была устранена найденная
уязвимость;

Была проведена проверка
результата с другими программными продуктами.

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

Список использованных
источников

. Осовецкий Л.,
Шевченко В. Оценка защищенности сетей и систем // Экспресс электроника. 2002. №
2 – 3. С. 20 – 24.

. Карпычев В. Ю.,
Минаев В. А. Цена информационной безопасности // Системы безопасности. 2003, №
5. С. 128 – 130.

. Девянин П. Н. и
др. Теоретические основы компьютерной безопасности. – М.: “Радио и
Связь” – 2000.

4. Карасик И. Программные и
аппаратные средства защиты информации для персональных компьютеров /
/КомпьютерПресс №3, 1995

. Мафтик С. Механизмы защиты в сетях
ЭВМ. /пер. с англ. М.: МИР, 1993.

. Петров В.А., Пискарев С.А., Шеин
А.В. Информационная безопасность. Защита информации от несанкционированного
доступа в автоматизированных системах. – М., 1998.

. Проскурин, В.Г. Защита в
операционных системах / В.Г. Проскурин, С.В. Крутов, И.В. Мацкевич. – М. :
Радио и связь, 2000.

. Безбогов, А.А. Безопасность
операционных систем : учебное пособие / А.А. Безбогов, А.В. Яковлев, Ю.Ф.
Мартемьянов. – М. : “Издательство Машиностроение-1”, 2007. – 220 с.

Добавить комментарий