Главная

Thursday, 1 July 2021

Проводим пентест, часть 7 - ищем сокровища и заметаем следы.

Всем привет.

Сегодня 7-я заключительная часть из серии публикаций Андрея Бирюкова, посвященных проведению аудита и теста на проникновение (пентест). Оригинал статьи был опубликован в журнале "Системный администратор" №12(169), декабрь 2016. 

Часть 7. Ищем сокровища и заметаем следы.


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

Этой статьей я завершаю цикл, посвященный проведению тестов на проникновение. В предыдущих шести [1-6] мы достаточно подробно рассмотрели различные способы, которыми может воспользоваться злоумышленник для проникновения в корпоративную сеть. Были  представлены методы, связанные с использованием беспроводных сетей, поиском и эксплуатацией уязвимостей в приложениях, разработкой эксплоитов. Темой этой статьи будет обсуждение действий хакера, который уже проник в сеть, получил шелл на различные серверы, и теперь ему необходимо найти в сети ценную информацию, а также скрыть следы своего присутствия. Как известно, в среднем после взлома сети и до его обнаружения проходит порядка 200 дней (рекорд – восемь лет!). За это время злоумышленник успевает получить доступ практически ко всей интересующей его информации. Рассмотрим, какие действия может предпринять взломщик, проникнув в сеть, и что можно сделать, чтобы их обнаружить.

Вот основные действия хакера, о которых мы будем говорить:

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


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


Паролей не бывает много.

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

Начнем с того, где хранят пароли различные операционные системы. Начнем с семейства ОС Windows.


Получаем хеши.

За хранение паролей здесь отвечает Security Accounts Manager (SAM) – файл реестра в Windows. В SAM хранятся хешированные пароли пользователей (в формате LM-хеш или NTLM-хеш). Благодаря тому, что хеш-функция однонаправленная, пароли находятся в относительной безопасности. Единственным способом узнать пароль является подбор хеша. Существует множество способов получения SAM-файла. По «условиям учений» будем считать, что наш злоумышленник не имеет физического доступа к атакуемым машинам и не может их перезагружать. В случае если это не так (например, хакеру доступна консоль гипервизора, на котором работает виртуальный  аудит сервер), он вполне может воспользоваться загружаемым дистрибутивом, таким как наш Kali Linux. При отсутствии доступа SAM-файл необходимо экспортировать из реестра с помощью консольных команд, представленных на рис.

В случае если по каким-либо причинам выполнить экспорт хешей паролей не представляется возможным, можно попробовать применить утилиту Gsecdump [7]. При ее использовании есть небольшая вероятность, что система «упадет» в BSOD, но зато эта утилита работает со всеми серверными ОС Windows (см. рис.).


Для того чтобы получить парольные хеши в ОС Linux, необходимо иметь доступ на чтение к файлам /etc/passwd и /etc/shadow. Переписав эти файлы к себе, злоумышленник может приступать к взлому.

Взлом паролей и его особенности.

Классическим средством взлома паролей для ОС Windows и Linux является утилита John the Ripper [8]. В рамках данной статьи я не буду описывать все возможности этой достаточно мощной утилиты. Желающие ознакомиться с ней подробнее могут воспользоваться статьей [9].

На рис. приведен пример запуска перебора паролей с помощью John the Ripper. Первой  командой unshadow мы объединяем два полученных ранее файла, а затем запускаем перебор. Утилита сначала будет пытаться подобрать пароль по собственным словарям, а затем начнет перебор всех значений.


Однако более быстрым способом поиска паролей является использование аппаратных графических ускорителей (GPU). Это умеет утилита oclHashcat из пакета HashCat [10] (есть в Kali Linux), используемого для аудита паролей. На сайте проекта приведены требования к GPU, с которыми работает oclHashcat. Помимо скорости, это также расширенные возможности по созданию правил перебора паролей. Перед запуском oclHashcat необходимо узнать алгоритм хеширования, с помощью которого создавался хеш. В этом нам поможет таблица [11] с сайта Hashcat, в которой, помимо прочего, приведены примеры хешей для различных алгоритмов.

Так, в приведенном ниже примере (см. рис.) осуществляется перебор восьмизначного пароля с помощью трех графических ускорителей. Параметр -m указывает на используемый алгоритм хеширования (NTLM), далее идет маска, по которой осуществляется перебор хеша. Сам файл с хешами и результаты перебора располагаются в специальном каталоге, путь к которому указывается в настройках утилиты. Из своего опыта могу сказать, что для одного и того же алгоритма хеширования перебор с помощью Hashcat и одного, не самого мощного, GPU занял в десять раз меньше времени, чем использование John the Ripper.


«Соленые» радужные таблицы.

Однако перебор паролей можно ускорить еще во много раз, если использовать радужные таблицы (rainbow tables), предназначенные для обращения криптографических хеш-функций, использующих механизм разумного компромисса между временем поиска по таблице и занимаемой памятью. Данные таблицы можно генерировать самостоятельно с помощью пакета Rainbowcrack, входящего в состав Kali Linux (Password Attack ? Rainbowcrack, далее rtgen). Однако лучше воспользоваться уже готовыми таблицами, которые можно скачать как на официальном сайте проекта [12], так и на просторах интернета. Запуск перебора с помощью радужных таблиц (файлы с расширением rt) для файла с хешами passwords будет выглядеть следующим образом. 

# rcrack *.rt -l passwords

Все вышеизложенное хорошо до тех пор, пока в хеш пароля не добавляется «соль» (хеш = f (пароль + соль). В таком случае стандартные Rainbow tables нам не помогут, так как для восстановления такого пароля взломщику необходимы таблицы для всех возможных значений «соли». При этом «соль» должна быть достаточно длинной (шесть – восемь символов), иначе злоумышленник может вычислить таблицы для каждого значения «соли», случайной и различной для каждого пароля. Таким образом, два одинаковых пароля будут иметь разные значения хешей, если только не будет использоваться одинаковая «соль». На сегодняшний день практически все *nix используют хеши с «солью» для хранения системных паролей. ОС Windows используют хеши LM-хеш и NTLM, которые не используют «соль». Таким образом, радужные таблицы являются наиболее действенным средством при аудите парольных файлов от данных ОС. Также многие приложения используют «несоленые» хеши. Это упрощает задачу взломщику. Также дополню, что пароли от старых ОС Windows XP/Vista хорошо ломает утилита 0phtcrack,  входящая в состав Kali Linux.


Ищем сокровища.

Запустив перебор файлов с паролями, самое время провести «инвентаризацию» взломанной сети. На этот момент многие администраторы не обращают внимание, а ведь благодаря именно активности хакера взлом можно обнаружить. Для поиска интересного в сети злоумышленник использует различные инструменты, и многие из них мы уже рассматривали: сканер сети Nmap, сканеры уязвимостей Nessus и Ovasp. Также могут использоваться самописные скрипты, которые позволяют автоматизировать процесс поиска нужной информации, например поиска инстансов СУБД.

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

Существует множество различных приложений для поиска SMB-ресурсов. Мы воспользуемся утилитой enum4linux, входящей в состав Kali Linux. В качестве подопытного в примерах используется наш старый знакомый – уязвимый дистрибутив Metasploitable. Первым делом попробуем выяснить, какие учетные записи есть на данной машине.

# enum4linux -U 192.168.60.130

Результат для Metasploitable будет примерно следующий (см. рис.).

Красным на рисунке подчеркнуты наиболее интересные для нас аккаунты. Теперь попробуем найти общие сетевые ресурсы на данной машине (см. рис.).

Как видно, не все папки доступны. Но злоумышленник может попытаться расшифровать пароли доменных пользователей теми средствами, которые я описывал выше. В случае если у нас нет хеша пароля или мы его еще не расшифровали, можно попробовать подобрать пароль онлайн. Для подбора пароля воспользуемся утилитой acccheck. Обратите внимание на словарь, указанный в примере. Данный каталог со словарями по умолчанию входит в состав Kali (см. рис.).


Так злоумышленник может быстро узнать пароль от учетной записи и затем подключиться к найденным ресурсам. 

Выносим добычу незаметно.

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

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

В качестве примера спрячем содержимое текстового файла в картинках JPEG с помощью утилиты steghide [14]. Данная программа распространяется в виде исходников на С и может работать как под Windows, так и под Linux, так что злоумышленник вполне сможет ее незаметно развернуть на одной из машин в сети жертвы. Все, что нужно для работы, – это JPEG-файл с большим разрешением, файл со скрываемой информацией и пароль для шифрования и сокрытия.

# steghide ebed -cf picture.jpg -ef secret.txt

А извлечь данные в файл test.txt можно следующим образом:

# steghide extract -sf picture.jpg

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


Скрываем следы преступления.

Одной из основных задач, которую должен решить злоумышленник как после проникновения в сеть, так и в процессе своего нахождения в ней, – это сокрытие следов своей деятельности. Здесь его главным врагом являются журналы событий операционных систем и приложений. Операционные системы семейства Windows 2000, XP, 2003 хранят журналы событий в файлах формата EVT в каталоге c:\Windows\System32\config. ОС Windows Vista – 2012 в формате EVTX в каталоге c:\Windows\System32\winevt\Logs.

Я не буду подробно рассматривать форматы EVT и EVTX. Желающие могут самостоятельно найти необходимую информацию в MSDN. Нас больше интересует то, что в EVT целостность ничего не гарантирует, необходимо лишь, чтобы длина записей совпадала. Для проверки достаточно открыть evt-файл в любом шестнадцатеричном редакторе и заменить, к примеру, несколько байт в имени пользователя. С EVTX все немного сложнее. Здесь разработчики озадачились вопросами защиты информации и добавили контроль целостности журналов событий, так что простая замена байтов приведет лишь к ошибке при открытии файла журнала. Для контроля целостности используется алгоритм CRC32, поэтому при изменении журнала необходимо заново пересчитывать контрольную сумму. Но злоумышленник может скрыть информацию о своих действиях, не нарушая целостности файлов журналов.

Для подмены журналов событий нам необходимо выполнить два основных действия: создание копии файла журналов, не содержащего «интересных» событий и подмену легального файла на нашу копию. Необходимость второго действия обусловлена тем, что *.evtx-файлы нельзя просто заменить, так как система постоянно использует их в работе.

Рассмотрим создание копии evtx-файла. Будем считать, что нам доступна только командная строка, соответственно, мы можем использовать только консольные команды. Допустим, нам нужно удалить все записи, связанные с удачным входом в систему (событие 4624). Для этого из текущего evtx-файла экспортируем все записи, кроме 4624.

c:\Windows\system32>wevutil epl Security Security.evtx /ow /q:"*[System[(EventID!=4624)]]"

Команда wevtutil отвечает за работу с журналом событий. Ключ epl – это экспорт из файла Security d в файл Security.evtx с перезаписью. Далее мы запрашиваем все события, кроме 4624.

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

Теперь вторая часть. Здесь нам потребуется утилита Handle из состава Sysinternals [15]. Для того чтобы перезаписать файл, необходимо сначала остановить все те процессы, которые с ним работают. Узнаем с помощью handle ID процессы, которые с ней работают. Далее по ID процесса узнаем те службы, которые его используют с помощью tasklist. И, наконец, самое простое – остановим эти службы. Пример всех этих действий для 64-битной Windows 7 приведен на рис.


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

Более подробно узнать о подмене журналов событий можно из вебинара преподавателя УЦ «Специалист» Сергея Клевогина [16].


Делаем выводы.

Если злоумышленник уже проник в сеть и скомпрометировал один или несколько узлов, он предпримет максимальные усилия для того, чтобы скрыть свою активность. Однако правильно настроенные средства защиты могут помочь обнаружить аномалии. Основным инструментом для обнаружения подозрительной активности является Система управления событиями безопасности (SIEM). Именно в эту системы должны стекаться события со всех источников (ОС, межсетевые экраны, IDS, антивирусы, DLP и т.д.). Все описанные манипуляции с журналами событий будут бесполезны, если все события будут пересылаться в базу SIEM. Как SIEM может узнать о действиях злоумышленника, описанных в этой статье? Попытка получить доступ к реестру отразится в журналах событий ОС, и соответствующее событие будет передано в SIEM. Для этого необходимо лишь настроить аудит обращений к реестру и файлам с паролями.

Еще одним нашим помощником может стать система DLP, точнее, ее агенты, развернутые на узлах. Вполне возможно, что хакеру придется переписать файл с паролями с одной машины в атакуемой сети на другую, где развернуты средства стеганографии. В этот момент хостовая DLP может обнаружить попытку копирования конфиденциальной информации и переслать уведомление в SIEM. Ну и классика работы SIEM: обнаружение входов с систему в нерабочее время, не с тех узлов и не к тем узлам, что обычно, вход при отсутствии в офисе и т.д. Злоумышленник, расшифровав пароль, наверняка попытается войти в систему под ним. Если он это будет делать в нерабочее время и/или не с машины данного пользователя при его отсутствии в офисе (в СКУД не зафиксирован вход в здание), то должен быть создан соответствующий инцидент. Инвентаризация, так или иначе, связана с обходом большого числа ресурсов (узлы, папки, файлы и т.д.). Эти активности могут быть зафиксированы как журналами событий ОС на узлах, так и средствами обнаружения вторжений в сети. Поэтому здесь достаточно просто настроить сбор событий от источников и соответствующие правила. Но здесь важно помнить, что включение аудита для всех файлов и обращений ко всем объектам в Windows приведет к лавинообразному росту числа событий, так что тут главное не перестараться. Следующим шагом является выгрузка собранной информации. Злоумышленник может прибегнуть к стеганографии или другим механизмам сокрытия своих действий. Следовательно, рассчитывать на функционал DLP здесь не приходится. Поэтому лучше анализировать подозрительную активность. Например, в случае если доступ в интернет осуществляется через прокси, полезно будет собирать статистику, кто, какой трафик и в каком объеме передает в сеть. Загрузка большого числа картинок или видео в высоком качестве может быть признаком использования стеганографии. 

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

В целом грамотно настроенная SIEM-система способна существенно осложнить жизнь  злоумышленнику. На этом завершаю цикл статей. Конечно, мы рассмотрели далеко не все аспекты тестирования на проникновение. За кадром остались такие интересные темы, как уязвимости веб-сервисов, баз данных и многое другое. Целью моих статей было дать читателю представление об общих принципах проведения тестов на проникновение. Для получения более глубоких знаний в области аудита по безопасности я рекомендовал ознакомиться с материалами по этичному хакингу [17, 18, 19]. Надеюсь, что данные статьи помогут усилить защищенность вашей сети.

[1] Бирюков А. Проводим пентест. Часть 6. Пишем эксплоит. // «Системный администратор», №11-12, 2016 г. – С. 42-46 (http://samag.ru/archive/article/3315).

[2] Бирюков А. Проводим пентест. Часть 5. Поиск уязвимостей в «самописных» приложениях. // «Системный администратор», №10, 2016 г. – С. 38-43 (http://samag.ru/archive/article/3292).

[3] Бирюков А. Проводим пентест. Часть 4. Используем уязвимости. // «Системный администратор», №7-8, 2016 г. – С. 47-51 (http://samag.ru/archive/article/3237).

[4] Бирюков А. Проводим пентест. Часть 3. Ищем уязвимости. // «Системный администратор», №6, 2016 г. – С. 24-29 (http://samag.ru/archive/article/3211).

[5] Бирюков А. Проводим пентест. Часть 2. Сбор необходимой информации. // «Системный администратор», №5, 2016 г. – С. 27-31 (http://samag.ru/archive/article/3190).

[6] Бирюков А. Проводим пентест. Часть 1. Проникаем в беспроводную сеть. // «Системный администратор», №4, 2016 г. – С. 40-44 (http://samag.ru/archive/article/3171).

[7] Утилита gsecdump – http://www.truesec.se/sakerhet/verktyg/saakerhet/gsecdump_v2.0b5.

[8] Описание утилиты John the Ripper – https://kali.tools/?p=747.

[9] Утилита Hashcat – http://hashcat.net/hashcat.

[10] Примеры хешей для различных алгоритмов – https://hashcat.net/wiki/doku.php?id=example_hashes.

[11] Радужные таблицы – http://project-rainbowcrack.com/table.htm.

[12] Утилита Steghide – http://steghide.sourceforge.net.

[13] Бирюков А. Стеганография: реализация и предотвращение. // «Системный администратор», №4, 2015 г. – С. 40-44 (http://samag.ru/archive/article/2924).

[14] Вебинар по подмене логов – http://www.specialist.ru/center/video/161/ustrojstvo-logov-i-sposobi-podmeni-zapisej-zhurnalov.

[15] Утилита Handle – https://technet.microsoft.com/ru-ru/sysinternals/handle.aspx.

[16] Сайт Сергея Клевогина – http://klevogin.ru.

[17] Видеокурс по этичному хакингу – https://www.cybrary.it/course/ethical-hacking.

[18] Материалы Offensive Security – https://www.offensive-security.com/information-security-certifications/oscp-offensive-security-certified-professional/.

[19] Экзамен Certified Ethical Hacking – https://www.eccouncil.org/programs/certified-ethical-hacker-ceh.

Спасибо Андрею за очень интересную серию про пентенстинг.

No comments:

Post a Comment

А что вы думаете по этому поводу?