Поиск информации в оперативной памяти
При поиске информации на компьютере нужно помнить, что она размещена не только в постоянных хранилищах (твердотельные накопители, жёсткие диски, сменные носители и т. д.), но и в оперативной памяти, в процессах, которые её обрабатывают.
Информация при размещении на жёстком диске и в оперативной памяти далеко не всегда одинакова:
- на жёстком диске она может быть зашифрована, а в оперативной памяти — нет (пример: на зашифрованном диске VeraCrypt хранится текстовый файл с паролями, который открыт в текстовом редакторе — в этом случае в оперативной памяти пароли из этого файла будут находится в виде простого текста)
- информация может создаваться в процессе вычислений, либо получения данных из сети (в этом случае исходная информация отсутствует в постоянных хранилищах)
Анализ содержимого (дампа) запущенного процесса часто используется в обратной инженерии когда исходный файл зашифрован: для выполнения файл всё равно должен находится в оперативной памяти в расшифрованном виде, поэтому анализ запущенного процесса облегчает обратный инженеринг.
Можно придумать и другие способы навыка анализа и поиска по оперативной памяти:
- выявление приложений, которые следят за буфером обмена
- оценка качества программ, предназначенных для хранения паролей — если в запущенном виде такие программы содержат пароли в оперативной памяти в виде простого текста, то такими программами пользоваться категорически не рекомендуется
- поиск приложения, содержащего определённые строки или подключающегося к определённому хосту
В этой статье я расскажу о программе mXtract — это наступательный инструмент для тестирования на проникновение, его главная цель — это сканировать оперативную память в поисках приватных ключей, IP адресов и паролей используя регулярные выражения.
То есть эту программу можно использовать как в качестве инструмента последующей эксплуатации для поиска чувствительных данных в оперативной памяти на взломанных системах, так и для целей анализа, оценки приложений на своём собственном компьютере.
Эта программа:
- ищет в запущенных процессах строки по регулярным выражениям. Можно указать сразу несколько регулярных выражений
- можно выполнять поиск по одному процессу или сразу по всем запущенным процессам
- показывает найденные результаты в понятном виде
Для установки mXtract в Kali Linux выполните команды:
git clone https://github.com/rek7/mXtract cd mXtract && sh compile.sh sudo mv bin/mxtract /usr/bin/ sudo mkdir -p /usr/share/doc/mxtract/ mv example_regexes.db /usr/share/doc/mxtract/
Для установки mXtract в BlackArch выполните команду:
sudo pacman -S mxtract
У программы mXtract довольно много опций, обязательной является одна из двух: -r= или -wm. Если вы хотите выполнить поиск в оперативной памяти определённых строк, то нужно использовать опцию -r=, после которой нужно указать путь до файла, содержащего одно или несколько регулярных выражений. Если вы хотите записать всю информацию, которую процесс имеет в оперативной памяти, то используйте опцию -wm. Эти опции можно использовать и одновременно, тогда будет выполнен поиск, а также будут сохранены дампы всех процессов (даже не совпавшими с условиями поиска).
Итак, начнём с поиска строк в процессах. Вместе с программой поставляется файл example_regexes.db, который содержит следующее регулярное выражение:
(\d{1,3}(\.\d{1,3}){3})
Оно примерно соответствует IPv4 адресам.
Запустим поиск:
sudo mxtract -wr -e -i -d=/tmp/output/ -r=/usr/share/doc/mxtract/example_regexes.db
В этой команды значение опций следующее:
- -r=/usr/share/doc/mxtract/example_regexes.db — путь до файла с регулярными выражениями
- -e означает просканировать файлы рабочего окружения процесса
- -i нужна для показа подробной информации о Процессе/Пользователе
- -d=/tmp/output/ — пользовательская директория вывода. При использовании опции -wm, в неё сохраняются дампы процессов. Также в неё сохраняется файл с результатами, если используется опция -wr.
- -wr — нужна для записи найденных совпадений в файл (появится в Директории вывода)
Пример вывода при работе программы:
Эти IP адреса, которые содержит процесс NetworkManager:
Эти IP из процесса Writer офисного пакета LibreOffice (хотя это не означает, что программа соединена хотя бы с одним из них):
В результате запуска предыдущей команды будет создан файл /tmp/output/regex_results.txt с найденными совпадениями строк.
Поскольку сам автор программы говорит, что «ваши результаты настолько хороши, насколько хороши ваши регулярные выражения», то настоятельно рекомендуется изучить статью «Регулярные выражения и команда grep».
Рассмотрим несколько сценариев, которые я смог придумать для использования поиска по оперативной памяти. Если у вас есть свои идеи, то делитесь ими в комментариях.
Оценка качества программ, предназначенных для хранения паролей
Программы могут хранить пароли в качестве своей основной функции (разные менеджеры паролей), либо хранить пароли для удобства пользователя (FTP клиенты, веб-браузеры и т. д.). Также вы можете тестировать различные способы хранения паролей (например, в простом текстовом файле, но на зашифрованном диске).
Вместо регулярных выражений можно указать буквальные строки для поиска. В качестве этих строк вы можете записать несколько паролей. Каждое регулярное выражение должно быть на отдельных строках. Например, можно создать файл passwords.db и записать туда:
пароль1 пароль2 пароль3
Кстати, что касается букв национальных алфавитов (всё, кроме английских букв), скорее всего, они обрабатываются компьютером в той или иной кодировке, поэтому вряд ли удастся найти буквальное совпадение строк — сначала нужно записать строки в виде последовательности символов в нужной кодировке).
После этого можно запустить поиск по содержимому процессов в оперативной памяти:
sudo mxtract -wr -e -i -d=/tmp/output/ -r=passwords.db
К примеру, пароли в открытом текстовом файле, даже если он на зашифрованном разделе, прекрасно находятся таким методом.
Поиск программ, имеющих доступ к буферу обмена
Во-первых, нужно помнить, что данные, которые скопированы в буфер обмена, довольно часто доступны в виде простого текста (хотя зависит от программ). Во-вторых, таким образом можно найти программу, которая без вашего ведома следит за буфером обмена.
Создадим файл clipboard.db и запишем в него любую уникальную строку, например:
fghfgjhgfhkgjlbnmnvbregfghdgfjgch
Скопируем её в буфер обмена и запустим сканирование процессов:
sudo mxtract -wm -wr -e -i -d=/tmp/output/ -r=clipboard.db
Вы сможете обнаружить программы, которые содержат эту строку (на скриншоте легитимная программа — я взял её просто в качестве примера):
Поиск паролей и ключей в запущенных процессах (редакторы кода, веб-сервер)
В недавно рассмотренной статье «Как найти все пароли и ключи в большом количестве файлов» с помощью программы DumpsterDiver мы среди огромного количества строк искали те из них, у которых высокая энтропия и которые, следовательно, могут оказаться паролями, ключами и другими секретами.
Можно совместить работу этих двух программ. Сделаем так, чтобы mXtract извлекала практически все строки, для этого создадим файл strings.db и скопируем в него примерно следующее:
[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=]{30,}
То, что в квадратных скобках — это символы, которые могут встречаться в строке (отредактируйте под ваши условия), а в фигурных скобках минимальный размер строки (также отредактируйте при необходимости). Запускаем:
sudo mxtract -wr -e -i -d=/tmp/output/ -r=strings.db
А теперь с помощью DumpsterDiver ищем строки с нужной нам энтропией:
python3 DumpsterDiver.py -p /tmp/output/ --entropy 5.3
Это очень грубый концепт, в реальной ситуации нужна более тонкая настройка DumpsterDiver.
Как узнать, какая программа подключалась к конкретному хосту
В статье «Как проверить открытые порты на своём компьютере» рассказывается, как проверить, какие порты прослушиваются, какие программы прослушивают эти порты. С помощью упомянутых там инструментов, можно посмотреть и другие сетевые соединения.
А что если подозрительное соединение к определённому хосту найдено уже после его завершения (например, в файле с сохранёнными сетевыми пакетами)? В этом случае порт уже закрыт, но если процесс по-прежнему запущен, есть шанс его выловить. Для этого в качестве строки для поиска укажите интересующее имя хоста или IP адрес.
Поиск программы, содержащей определённые данные
Описанный выше приём можно использовать не только для сетевых адресов, но и для любых строк. Таким образом можно найти программу, которая сохраняет определённые файлы, показывает окна с определёнными строками и пр.
Извлечение содержимого буфера обмена
В зависимости от используемого программного обеспечения, вы можете найти программу, которая хранит буфер обмена (скопированный текст) в виде обычного текста. Используя опцию -p= можно указывать идентификатор (PID) одного процесса для сканирования. Если правильно настроить регулярные выражения, то можно извлекать содержимое буфера обмена.
Для детального анализа содержимого процесса пригодится опция -wm — при её указании будут сохранены сырые данные полного содержимого каждого процесса. Либо одного процесса, если указана опция -p=.
Как узнать идентификатор интересующего процесса
Кстати, если вы хотите сканировать определённый процесс, то его номер вы можете найти командами вида:
ps a | grep -E 'cli(p)board' ps a | grep -E 'libre(o)ffice'
Обратите внимание на скобки — они ничего не меняют по сути, но благодаря им процесс с grep не попадает в выводимый список.
Чтобы получить только номер, можно запустить так:
ps a | grep -E 'cli(p)board' | awk '{print $1}'
Заключение
Все опции программы mXtract перечислены на странице https://kali.tools/?p=5147
При запуске сканирования процессов, иногда mXtract зависает и перестаёт нормально работать до следующего перезагрузки системы.
При составлении регулярных выражений при использовании подстановочных символов (точка и звёздочка) у меня возникает «ошибка сегментирования».
Связанные статьи:
- Базовое использование BeEF (52%)
- Инструкция по использованию RouterSploit (52%)
- Инструкция по использованию Router Scan by Stas’M. Часть первая: Опции и анонимность сканирования (52%)
- Кража паролей и обход двухфакторной аутентификации с evilginx2 (52%)
- Атака Pass-the-hash (как использовать NTLM без взлома пароля) (52%)
- Базовое и продвинутое использование oclHashcat (Hashcat) для взлома WPA/WPA2 паролей из хендшейков (RANDOM - 2%)