Сканируем оперативную память для поиска ip и паролей

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

Информация при размещении на жёстком диске и в оперативной памяти далеко не всегда одинакова:



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

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

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

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

 



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

 

Почему брать результаты напрямую из памяти?

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

Особенности

  • Возможность вводить список регулярных выражений
  • Ясные и читаемые результаты
  • Проверка, является ли диапазон памяти читаемым с текущими разрешениями
  • Вывод в XML и HTML вместе с выводом по умолчанию в терминал (имя процесса:результат)
  • Возможность массового сканирования каждого процесса или определённого PID
  • Возможность выбрать раздел памяти для сканирования
  • Возможность показать подробную информацию о процессе
  • Возможность сканировать файлы рабочей среды процесса
  • Дампы памяти автоматически удаляют символы Unicode, что позволяет обрабатывать их другими инструментами или вручную

Домашняя страница: //github.com/rek7/mXtract

Список команд:

        -v      Enable Verbose Output
        -s      Suppress Banner
        -h      Help
        -c      suppress colored output
        -r=     Regex DB
        -a      Scan all memory ranges not just heap/stack
        -w      Write raw memory to file Default directory is pid/
        -o      Write regex output to file
        -d=     Custom Ouput Directory
        -p=     Specify single pid to scan
        Either -r= or -w needed

Примеры запуска mXtract.

Сканирование с вербальным выводом (-v) процесса с PID равным 4 (-p=4), делая поиск по простому регулярному выражению для обнаружения IP адресов (-r=example_regexes.db), сканирование каждого сегмента данных (-a), отображение информации о процессе (-i) и сканирование файлов рабочего окружения (-e):

mxtract -p=4 -r=example_regexes.db -v -a -e -i

 

Сканирование с вербальным выводом (-v) процесса с PID равным 4 (-p=4), делая поиск по простому регулярному выражению для обнаружения IP адресов (-r=example_regexes.db), сканирование каждого сегмента данных (-a), отображение информации о процессе (-i):

mxtract -p=4 -r=example_regexes.db -v -a -i

Сканирование без вербального вывода процесса с PID равным 4 (-p=4), делая поиск по простому регулярному выражению для обнаружения IP адресов (-r=example_regexes.db), показ информации о процессе (-i) и сканирование файлов рабочего окружения (-e):

mxtract -p=4 -r=example_regexes.db -e -i

Установка mXtract.

Установка в Kali Linux.

git clone //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/

Установка в BlackArch.

Программа предустановлена в BlackArch.

sudo pacman -S mxtract

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

 

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

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

Вместо регулярных выражений можно указать буквальные строки для поиска. В качестве этих строк вы можете записать несколько паролей. Каждое регулярное выражение должно быть на отдельных строках. Например, можно создать файл passwords.db и записать туда:

1
2
3
пароль1
пароль2
пароль3

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

После этого можно запустить поиск по содержимому процессов в оперативной памяти:

1
sudo mxtract -wr -e -i -d=/tmp/output/ -r=passwords.db

К примеру, пароли в открытом текстовом файле, даже если он на зашифрованном разделе, прекрасно находятся таким методом.

Поиск программ, имеющих доступ к буферу обмена

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

Создадим файл clipboard.db и запишем в него любую уникальную строку, например:

1
fghfgjhgfhkgjlbnmnvbregfghdgfjgch

Скопируем её в буфер обмена и запустим сканирование процессов:

1
sudo mxtract -wm -wr -e -i -d=/tmp/output/ -r=clipboard.db

Вы сможете обнаружить программы, которые содержат эту строку (на скриншоте легитимная программа — я взял её просто в качестве примера):

 

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

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

1
[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=]{30,}

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

1
sudo mxtract -wr -e -i -d=/tmp/output/ -r=strings.db

А теперь с помощью DumpsterDiver ищем строки с нужной нам энтропией:

1
python3 DumpsterDiver.py -p /tmp/output/ --entropy 5.3

Это очень грубый концепт, в реальной ситуации нужна более тонкая настройка DumpsterDiver.

Как узнать, какая программа подключалась к конкретному хосту

А что если подозрительное соединение к определённому хосту найдено уже после его завершения (например, в файле с сохранёнными сетевыми пакетами)? В этом случае порт уже закрыт, но если процесс по-прежнему запущен, есть шанс его выловить. Для этого в качестве строки для поиска укажите интересующее имя хоста или IP адрес.

Поиск программы, содержащей определённые данные

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

Извлечение содержимого буфера обмена

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

Для детального анализа содержимого процесса пригодится опция -wm — при её указании будут сохранены сырые данные полного содержимого каждого процесса. Либо одного процесса, если указана опция -p=.

Как узнать идентификатор интересующего процесса

Кстати, если вы хотите сканировать определённый процесс, то его номер вы можете найти командами вида:

1
2
ps a | grep -E 'cli(p)board'
ps a | grep -E 'libre(o)ffice'

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

Чтобы получить только номер, можно запустить так:

1
ps a | grep -E 'cli(p)board' | awk '{print $1}'

 

 

Источник: https://kali.tools/?p=5147

RuCoreNET - лучшее для вас!


Поделись статьей с друзьями


72 просмотров


0 0 vote
Рейтинг статьи
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments


Do NOT follow this link or you will be banned from the site!
0
Would love your thoughts, please comment.x
()
x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: