rekall
Check out the rekall framework, they have a linpmem application for this purpose: http://www.rekall-forensic.com/docs/Tools/index.html
The SANS rekall memory forensic cheatsheet has an example of how to dump memory under linux too:
# ./linpmem_2.0.1 -o linux.aff4
Источник
Core dump (Русский)
Состояние перевода: На этой странице представлен перевод статьи Core dump. Дата последней синхронизации: 15 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Дамп памяти (core dump) — это файл, в который записывается адресное пространство (память) процесса при его нештатном завершении. Дампы ядра могут создаваться по требованию (например, отладчиком) или автоматически при завершении процесса. Дампы памяти создаются ядром при сбое программы и могут быть переданы вспомогательной программе (например, systemd-coredump(8) ) для дальнейшей обработки. Дамп памяти обычно не используется обычным пользователем, но может быть передан разработчикам по их запросу, которым будет очень полезно иметь снимок состояния программы на момент сбоя, особенно если сбой трудно воспроизвести.
Отключение автоматических дампов памяти
Пользователи могут захотеть отключить автоматические дампы памяти по нескольким причинам:
- Производительность: создание дампа для процессов, занимающих много памяти, может привести к трате системных ресурсов и задержке очистки памяти.
- Дисковое пространство: дампы процессов, занимающих много памяти, могут занимать место на диске, равное, а то и большее, чем объём памяти процесса, если их не сжимать.
- Безопасность: хотя дампы обычно может читать только root, они могут содержать конфиденциальные данные (например, пароли или криптографические ключи), которые записываются на диск после сбоя.
Используя sysctl
Можно использовать sysctl, чтобы изменить kernel.core_pattern для отключения дампов. Создайте файл:
kernel.core_pattern=/dev/null
Для немедленного применения изменений используйте команду sysctl :
# sysctl -p /etc/sysctl.d/50-coredump.conf
Используя systemd
Поведение systemd по умолчанию определено в файле /usr/lib/sysctl.d/50-coredump.conf , который прописывает kernel.core_pattern для вызова systemd-coredump . Он сохраняет дампы ядра для всех процессов в /var/lib/systemd/coredump . Поведение systemd-coredump можно переопределить, создав в /etc/systemd/coredump.conf.d/ файл ( coredump.conf(5) § DESCRIPTION ,, [1]):
/etc/systemd/coredump.conf.d/custom.conf
Примечание: Не забудьте прописать имя секции [Coredump] , иначе опция будет проигнорирована.
Одного этого метода обычно достаточно для отключения записи дампов, если в системе нет других программ, включающих автоматические дампы, но дамп памяти всё равно генерируется в памяти и systemd-coredump всё равно запускается.
Используя PAM limits
Максимальный размер дампа памяти для пользователей, вошедших в систему через PAM, задаётся в файле limits.conf. Установка нулевого значения полностью отключает дампы памяти. [2]
Используя ulimit
Командные оболочки вроде bash и zsh имеют встроенную команду ulimit, которую можно использовать для просмотра или изменения ограничений на ресурсы оболочки и запускаемых ею процессов. Подробнее смотрите bash(1) § SHELL BUILTIN COMMANDS или zshbuiltins(1) .
Отключение дампов памяти в текущей командной оболочке:
Создание дампа памяти
Чтобы сгенерировать дамп памяти произвольного процесса, сначала установите пакет gdb . Затем найдите PID запущенного процесса, например, с помощью pgrep:
Подключитесь отладчиком к этому процессу:
И затем в отладчике выполните:
(gdb) generate-core-file Saved corefile core.2071 (gdb) quit
Теперь у вас есть дамп памяти в файле core.2071 .
Куда они попадают?
sysctl kernel.core_pattern определяет, куда отправляются автоматические дампы памяти. По умолчанию их принимает systemd-coredump, который настраивается через файл /etc/systemd/coredump.conf . По умолчанию он записывает дампы в /var/lib/systemd/coredump (опция Storage=external ), сжимая их с помощью zstd (опция Compress=yes ). Кроме того, можно настроить различные ограничения на размер хранилища.
Примечание: Значение по умолчанию для kernel.core_pattern задаётся в файле /usr/lib/sysctl.d/50-coredump.conf . Этот файл может быть замаскирован или переопределён для использования другого значения в соответствии с обычными правилами sysctl.d(5) .
Чтобы получить дамп памяти из журнала, смотрите coredumpctl(1) .
Изучение дампа памяти
Команда coredumpctl покажет список сохранённых дампов, среди которых можно найти нужный:
Для поиска нужного дампа можно использовать PID, имя исполняемого файла, путь к исполняемому файлу или предикат journalctl (подробнее: coredumpctl(1) и journalctl(1) ). Просмотр подробностей о дампах ядра:
# coredumpctl info соответствие
Обратите внимание на строку "Signal", она поможет определить причину сбоя. Для более глубокого анализа вы можете изучить backtrace с помощью gdb:
# coredumpctl gdb соответствие
После запуска gdb можно использовать команду bt для получения backtrace:
Если отладочные символы нужны, но не найдены, можно попробовать получить их, как описано в статье Отладка/Трассировка.
Удаление дампов памяти
Файлы дампов памяти, хранящиеся в /var/lib/systemd/coredump/ , будут автоматически очищаться командой systemd-tmpfiles --clean , которая запускается ежедневно с помощью systemd-tmpfiles-clean.timer . Дампы памяти настроены на хранение не менее 3 дней, смотрите systemd-tmpfiles --cat-config .
Смотрите также
- american fuzzy lop - Инструмент для автоматизированного тестирования ядра и программ
- Filesystem fuzzing - Статья LWN о тестировании файловых систем на наличие ошибок
Источник
Linux how to dump memory
NAME
SYNOPSIS
memdump [-kv] [-b buffer_size] [-d dump_size] [-m map_file] [-p page_size]
DESCRIPTION
This program dumps system memory to the standard output stream, skipping over holes in memory maps. By default, the program dumps the contents of physical memory (/dev/mem). Output is in the form of a raw dump; if necessary, use the -m option to capture memory layout information. Output should be sent off-host over the network, to avoid changing all the memory in the file system cache. Use netcat, stunnel, or openssl, depending on your requirements. The size arguments below understand the k (kilo) m (mega) and g (giga) suffixes. Suffixes are case insensitive. Options -k Attempt to dump kernel memory (/dev/kmem) rather than physical memory. Warning: this can lock up the system to the point that you have to use the power switch (for example, Solaris 8 on 64-bit SPARC). Warning: this produces bogus results on Linux 2.2 kernels. Warning: this is very slow on 64-bit machines because the entire memory address range has to be searched. Warning: kernel virtual memory mappings change frequently. Depending on the operating system, mappings smaller than page_size or buffer_size may be missed or may be reported incorrectly. -b buffer_size (default: 0) Number of bytes per memory read operation. By default, the program uses the page_size value. Warning: a too large read buffer size causes memory to be missed on FreeBSD or Solaris. -d dump-size (default: 0) Number of memory bytes to dump. By default, the program runs until the memory device reports an end-of-file (Linux), or until it has dumped from /dev/mem as much memory as reported present by the kernel (FreeBSD, Solaris), or until pointer wrap- around happens. Warning: a too large value causes the program to spend a lot of time skipping over non-existent memory on Solaris systems. Warning: a too large value causes the program to copy non-existent data on FreeBSD systems. -m map_file Write the memory map to map_file, one entry per line. Specify -m- to write to the standard error stream. Each map entry consists of a region start address and the first address beyond that region. Addresses are separated by space, and are printed as hexadecimal numbers (0xhhhh). -p page_size (default: 0) Use page_size as the memory page size. By default the program uses the system page size. Warning: a too large page size causes memory to be missed while skipping over holes in memory. -v Enable verbose logging for debugging purposes. Multiple -v options make the program more verbose.
BUGS
On many hardware platforms the firmware (boot PROM, BIOS, etc.) takes away some memory. This memory is not accessible through /dev/mem. This program should produce output in a format that supports structure information such as ELF.
LICENSE
This software is distributed under the IBM Public License.
Источник