Извличане и анализ на съдържанието на паметта в ОС Linux
В тази статия ще разгледаме метода за дистанционно получаване на изображение в паметта с помощта на LiME на система, базирана на CentOS 6.5 x64.
От Дан Кабан
Преди това изображение на паметта на Linux системи можеше да бъде получено директно (с помощта на помощната програма dd) от файлове на псевдоустройства като/dev/mem и/dev/kmem. В най-новите версии на ядрото достъпът до тези устройства е ограничен и/или напълно изключен. За да се даде възможност на изследователите и системните администратори да получат неограничен достъп, са разработени зареждащи модули, които например са налични в проектите fmem и LiME (Linux Memory Extractor).
В тази статия ще разгледаме метода за дистанционно получаване на изображение в паметта с помощта на LiME на система, базирана на CentOS 6.5 x64.
LiME е зареждаем модул на ядрото (LKM). Модулите за зареждане обикновено се разработват за разширяване на функционалността на ядрото. Модулът може да бъде добавен с помощта на акаунт с права на суперпотребител. Трябва да внимавате, когато инсталирате модул, тъй като неправилната инсталация крие потенциални рискове за целевата система. От друга страна, LiME има редица неоспорими предимства:
- Компилираният модул е доста малък.
- Процедурата за инсталиране не изисква рестартиране.
- Модулът може лесно да бъде добавен или премахнат.
- Полученият дъмп на памет може да се изтегли отдалечено, без да се записва на локалния диск на целевата система.
- Дъмпинг на паметта, съвместим с Volatility framework.
Подготовка за работа
Тъй като LiME се разпространява като източник, първо трябва да го компилирате. Цялата налична информация може лесно да бъде намерена в Интернет, но преди това препоръчвам да потърсите компилирани версии на модула или да го компилирате и тествате във виртуална машина.
Във всеки случай първо трябва да разберете версията на ядрото на целевата машина.
] $ uname -a
Linux localhost.localdomain 2.6.32-431.5.1.el6.x86_64 # 1 SMP
Сряда, 12 февруари 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Компилираните версии на LiME могат да бъдат получени от хранилището на Forensics Tools на Linux на Cert.org (надежден ресурс). Той съдържа RPM хранилища на аналитични помощни програми за Red Hat Enterprise Linux, CentOS и Fedora.
За да намерите компилиран модул за конкретно ядро и версия на операционната система, отидете на Cert и потърсете „repoview“ за целевата операционна система
Фигура 1: Раздел с хранилища за CentOS
След това отидете в раздела "приложения/криминалистични инструменти" и отворете документацията за "lime-kernel-objects".
По време на това писане хранилището съдържа компилирани версии за следните ядра (под CentOS 6/RHEL 6):
2.6.32-71
2.6.32-71.14.1
2.6.32-71.18.1
2.6.32-71.24.1
2.6.32-71.29.1
2.6.32-71.7.1
2.6.32-131.0.15
2.6.32-220
2.6.32-279
2.6.32-358.0.1
2.6.32-358.11.1
2.6.32-358.14.1
2.6.32-358.18.1
2.6.32-358.2.1
2.6.32-358.23.2
2.6.32-358.6.1
2.6.32-431
2.6.32-431.1.2.0.1
2.6.32-431.3.1
Оказа се, че все още няма компилирани модули за моята версия на ядрото. Ще трябва да направим малко повече движения на тялото.
Инсталирах на CentOS 6.5 x64 VM с последната версия на ядрото (2.6.32-431.5.1.el6.x86_64).
] $ yum актуализация
[корен @ vmtest
След актуализиране на ядрото рестартирайте виртуалната машина.
Сега се нуждаем от подходящи заглавки и източници за ядрото, както и помощни програми за компилация.
] $ yum инсталиране на gcc gcc-c ++ заглавки на ядрото kernel-source
Вече сме готови да изтеглим и компилираме модула LiME!
] # mkdir вар; cd вар
[root @ vmtest lime] # wget https://lime-forensics.googlecode.com/files/lime-forensics-1.1-r17.tar.gz
[root @ vmtest lime] # tar -xzvf lime-forensics-1.1-r17.tar.gz
[root @ vmtest lime] # cd src
[root @ vmtest src] # make
....
make -C /lib/modules/2.6.32-431.5.1.el6.x86_64/build M =/root/lime/src модули
...
[root @ vmtest src] # ls lime * .ko
вар-2.6.32-431.5.1.el6.x86_64.ko
След компилирането на модула го заредете във виртуална машина и изхвърлете паметта в локален файл. Настройките на модула са както следва:
] # insmod lime-2.6.32-431.5.1.el6.x86_64.ko "path =/root/mem.img format = lime"
Изображението в паметта ще бъде качено във файла /root/mem.img, а форматът "lime" е съвместим с рамката за променливост.
Проверих параметрите на създаденото изображение (за съответствие с размера и обема памет, разпределена за виртуалната машина, както и за коректността на съдържанието на изображението).