• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Уроки форензики. Расследуем заражение машины с Windows шпионским трояном

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
В этой статье я покажу, как извлекать основные артефакты из образов оперативной памяти Windows. Мы восстановим процесс атаки, чтобы расследовать инцидент. В этом нам поможет лабораторная работа TeamSpy с ресурса CyberDefenders.

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

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

ИСПОЛЬЗУЕМЫЕ УТИЛИТЫ​

  1. Volatility Framework 2.6.1 — инструмент, реализованный на Python 2. Предназначен для извлечения артефактов из образцов энергозависимой памяти.
  2. Bulk extractor — инструмент для извлечения структурированной информации, к примеру адресов электронной почты, URL, доменов.
  3. YARA Editor — программа для тестирования и создания правил YARA.
  4. OST Extractor — инструмент для восстановления OST-контейнеров в EML.
  5. Scdbg — программа для анализа shell-кода.

ИСПОЛЬЗУЕМЫЕ ДЛЯ ИЗВЛЕЧЕНИЯ ДАННЫХ ПЛАГИНЫ VOLATILITY 2​

  1. Imageinfo — плагин для определения операционной системы, пакета обновлений и аппаратной архитектуры исследуемого образа.
  2. Pstree — просмотр списка процессов в виде дерева.
  3. Handles — просмотр открытых дескрипторов к файлам, разделам реестра, мьютексам, именованным каналам, событиям в процессах. Также можно отобразить дескрипторы для конкретного процесса, задав фильтр по типу объекта.
  4. Consoles — плагин для поиска команд, которые злоумышленники ввели через cmd.exe. Основное преимущество этого плагина в том, что он не только печатает команды, введенные злоумышленниками, но и собирает весь экранный буфер (ввод и вывод).
  5. Memdump — извлечение всех резидентных страниц памяти в процессе.
  6. Filescan — плагин для поиска объектов FILE_OBJECT в памяти с помощью сканирования тегов пула. Этот плагин найдет все открытые файлы.
  7. Dumpfiles — извлечение кешированных файлов из образа памяти.
  8. Netscan — поиск сетевых артефактов в 32- и 64-разрядных дампах памяти. Этот плагин находит конечные точки TCP и UDP, а также ищет локальные и удаленные IP-адреса.
  9. Printkey — поиск значений в указанном разделе реестра Windows.
  10. Userassist — получение информации из ключа реестра UserAssist.
  11. Mftparser — сканирует записи главной таблицы файлов (MFT) в памяти и выводит информацию о временных метках файлов.
  12. Autoruns — подключаемый плагин для поиска точек сохранения исполняемых файлов в системе. Для подключения плагина нужно добавить его в каталог plugins инструмента Volatility.
  13. Malfind — плагин для поиска скрытого или внедренного в память процессов кода.
  14. Editbox — плагин для извлечения текста из элементов управления Windows Edit.

ИССЛЕДОВАНИЕ ХОСТА ECORPOFFICE​

Прежде чем искать вирусную активность, давай получим первичную информацию о системе, имя компьютера, сетевой адрес и версию операционной системы.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" imgeinfo
Версия ОС — Win7SP1x64. Мы будем ее указывать при поиске других артефактов в качестве профиля в Volatility.

Получим имя компьютера, для этого проверим следующий ключ реестра:
Код:
SYSTEM\ControlSet001\Control\ComputerName\ComputerName
python2 vol.py -f ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem \
--profile=Win7SP1x64 printkey -K  "ControlSet001\Control\ComputerName\ComputerName"
Имя компьютера исследуемого образа

Выясним сетевой адрес. Для этого проверим ключ, в котором содержатся идентификаторы сетевых адаптеров. Здесь же можно найти и информацию о сети.
Код:
python2 vol.py -f  ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem \
--profile=Win7SP1x86_23418 printkey \
-K "ControlSet002\Services\Tcpip\Parameters\Interfaces\{360E0CDC-9C78-4D3B-A0Af-69CC45DE6D70}"
Сетевая информация о хосте

IP-адрес исследуемой машины — 10.1.1.122.

Проанализируем запущенные процессы в системе, их список выгрузим в файл pstree.txt.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 pstree > ecorpoffice/pstree.txt

Список процессов

Мы обнаружили процесс OUTLOOK.EXE, идентификатор процесса — 2692. По сценарию нам известно, что инцидент произошел после того, как пользователь запустил вложение в письме. Восстановим все сообщения пользователя и найдем вредоносное. Для этого ищем в процессе все объекты FILE.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 handles -p 2692 -t FILE > ecorpoffice/FILE_OUTLOOK
В результате анализа объектов FILE обнаружено имя почтового ящика пользователя:
Код:
\Device\HarddiskVolume1\Users\phillip.price\AppData\Local\Microsoft\Outlook\phillip.price@e-corp.biz.pst
Попробуем выгрузить этот контейнер из памяти процесса. Найдем физический адрес файла, используя плагин filescan.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 filescan > ecorpoffice/filescan`
Адрес почтового ящика пользователя в системе

Выгружаем найденный файл, даем ему расширение .ost и загружаем в утилиту OST Extractor.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 dumpfiles -Q 0x000000007d4d9450 -u -D ecorpoffice/
Не забываем про аргумент -u, который позволяет выгрузить большее количество данных.

Получаем файл file.None.0xfffffa80042dcf10.dat. Тоже меняем ему разрешение на .ost и загружаем в OST Extractor.

Конвертирование почтового контейнера

После конвертирования OST в указанной папке появится сообщение пользователя в формате EML. Переходим в папку сообщений и смотрим его.

Заголовок письма


Содержимое сообщения

Письмо отправлено с почтового ящика karenmiles@t-online.de. В аттаче — документ bank_statement_088452.doc. IP-адрес почтового сервера — 31.6.35.122. Письмо поступило 4 октября 2016 года в 12:02:04 (UTC).

Чтобы извлечь вложение, можно воспользоваться блокнотом, для этого декодируем аттач из Base64 и сохраняем файл с расширением .doc. Либо можешь открыть EML с помощью почтового клиента (того же Outlook).

Исследовать вредоносные файлы необходимо в изолированной среде. Итак, берем файл bank_statement_088452.doc и начинаем изучать. Его MD5:
c2dbf24a0dc7276a71dd0824647535c9
Проверим наличие макроса в полученном вложении с помощью утилиты olevba.

olevba bank_statement_088452.doc
Результат работы утилиты olevba

Макрос сильно обфусцирован, и по‑быстрому его проанализировать не получится, поэтому откроем документ в Microsoft Word и начнем отлаживать скрипт на Visual Basic.

Содержимое вредоносного документа

Перейдем в «Вид → Макросы» и нажмем кнопку «Отладить». Находим следующий участок кода.

Содержимое макроса

В функции xvkBjM выполняется запуск содержимого в переменной UsoJar. Найдем место в коде, где формируется эта переменная, поставим точку останова и запустим скрипт.

Отладка скрипта

После выполнения этого участка кода в переменной UsoJar появится команда на PowerShell, которая декодирует данные и исполняет их.

Преобразуем данные из Base64 и посмотрим содержимое.

Преобразованные данные

Как видим, скрипт на PowerShell находит и запускает исполняемые файлы вот из этой папки:

Код:
C:\Users\<user>\AppData\Local\Temp
Перед тем как запускать вредоносный документ, начнем записывать сетевой трафик, для этого запустим в виртуальной машине Wireshark.

Сетевая активность вредоносного документа

Как видим, до запуска скрипта на PowerShell происходит загрузка полезной нагрузки с IP-адреса 54.174.131.235.

Заголовок сетевого пакета

Вредоносный скрипт на VBA загружает полезную нагрузку со следующего адреса:
Код:
http://54.174.131.235/files/tv_x64.exe
Нагрузка будет сохранена в файл
Код:
C:\Users\<user>\AppData\Local\Temp\SkypeC2AutoUpdate.exe
Затем этот файл запускается.

Процесс SkypeC2AutoUpdate.exe — это средство удаленного управления TeamViewer.

Найдем системный идентификатор этого процесса в файле pstree. Это 1364.

Идентификатор вредоносного процесса

Теперь изучим сетевую активность процесса. Для этого извлечем из образа все взаимодействия с сетью и сохраним в файлик netscan.txt.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 netscan > ecorpoffice/netscan.txt
Сетевая активность вредоносного процесса

Процесс с идентификатором 1364 взаимодействует с управляющим сервером 54.174.131.235.

Получим дамп адресного пространства процесса.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 memdump -p 1364 -D ecorpoffice/
Выгруженный файл называется 1364.dmp.

Теперь при помощи регулярного выражения найдем все взаимодействия с управляющим сервером 54.174.131.235.
Код:
strings 1364.dmp | grep '54.174.131.235'

Взаимодействия с управляющим сервером

Вредоносный файл обращается вот на этот адрес:
Код:
http://54.174.131.235/getinfo[.]php
Установив соединение, он отправляет собранную информацию. Версия программного обеспечения TeamViewer (параметр tvrv=) — 0.2.2.2.

Попробуем вытащить данные из полей TeamViewer, нам интересен его пароль и идентификатор. Для этого воспользуемся плагином editbox.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 editbox
Идентификатор хоста

Идентификатор системы — 528 812 561.

Пароль для доступа к удаленному хосту

Пароль для доступа к хосту — P59fS93m.

Попробуем вытащить из процесса интересную информацию, связанную с работой TeamViewer.
Код:
strings 1364.dmp | grep 'teamviewer' -B 3 -A 3

Обнаруженный сетевой адрес

В памяти процесса обнаружен сетевой адрес 31.6.13.155, с которого произошел удаленный вход в систему.

Использовав плагин procdump, получим этот процесс, чтобы проверить через VirusTotal.
Код:
python2.7 vol.py -f "ecorpoffice/win7ecorpoffice2010-36b02ed3.vmem" \
--profile=Win7SP1x64 procdump -p 1364 -D ecorpoffice/
Получим его хеш и найдем его описание на VirusTotal. MD5-сумма — 6ecd2ed83b0bc2eea7c7a75d06a610b6.

Также проанализируем все письма в папке после работы утилиты ost-extractor.exe.

Письмо с информацией о выкупе

Давай теперь зафиксируем картину произошедшего.

04.10.2016 в 12:02 (UTC) на адрес philip.price@e-corp.biz с адреса armadac0ll3ct1ve@gmail.com поступило письмо, в котором сообщается номер цифрового кошелька, куда необходимо перевести выкуп. Адрес кошелька Bitcoin:

25UMDkGKBe484WSj5Qd8DhK6xkMUzQFydY
04.10.2016 в 12:02:04 (UTC) на адрес philip.price@e-corp.biz от karenmiles@t-online.de пришло фишинговое сообщение, содержащее вредоносный документ bank_statement_088452.doc. Пользователь открыл этот документ, что и привело к компрометации компьютера. С адреса http://54.174.131.235/files/tv_x64.exe на его машину загружается исполняемый файл TeamViewer, содержащий идентификатор и пароль для доступа к скомпрометированному хосту.

В 12:02 04.10.2016 на адрес philip.price@e-corp.biz от armadac0ll3ct1ve@gmail.com пришло сообщение с адресом кошелька Bitcoin. Если компания не переведет на него определенную сумму, злоумышленники начнут атаковать инфраструктуру организации.

ИССЛЕДОВАНИЕ ОБРАЗА ECORPWIN7​

Получим первичную информацию о системе.
Код:
python2 vol.py -f ecorpwin7/ecorpwin7-e73257c4.vmem --profile=Win7SP1x64 imageinfo

python2 vol.py -f ecorpwin7/ecorpwin7-e73257c4.vmem --profile=Win7SP1x64 printkey \
-K  "ControlSet001\Control\ComputerName\ComputerName"`

python2 vol.py -f ecorpwin7/ecorpwin7-e73257c4.vmem --profile=Win7SP1x64 printkey \
-K  "ControlSet002\Services\Tcpip\Parameters\Interfaces\{3AE5A5FF-4A27-4327-9C26-1493676FB9E5}"
Имя компьютера — WIN-KMUKM7JPN9D, сетевой адрес — 10.1.1.141, профиль операционной системы — Win7SP1x64.

Далее получим список процессов в виде дерева, а также сетевую активность. Результат сохраним в файл.
Код:
python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 pstree > ecorpwin7/pstree

python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 netscan > ecorpwin7/netscan
Находим почтовый процесс OUTLOOK.EXE, идентификатор 2496.

Получим дамп адресного пространства этого процесса.

python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 memdump -p 2496 -D ecorpwin7/
Получим список объектов FILE в адресном пространстве процесса.
Код:
python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 handles -t FILE -p 2496 > ecorpwin7/handles_file_2496
Получаем файл handles_file_2496, а в нем название другого файла:
Код:
Outlscott.knowles@e-corp.biz-00000004.pst
Это почтовый контейнер. Найдем его физический адрес и выгрузим его из образа. Для этого получим список файлов:
Код:
python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 filescan > ecorpwin7/filescan
Физический адрес почтового контейнера

Восстановим почтовый контейнер.
Код:
python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 dumpfiles -Q 0x000000007de17f20 -u -D ecorpwin7/
Теперь конвертируем файл с помощью OST Extractor и находим сообщение с вложением.

Содержимое вредоносного письма



Заголовок письма

04.10.2016 в 13:35:13 (UTC) от lloydchung@allsafecybersec.com поступило письмо, содержащее вредоносное вложение. IP-адрес почтового сервера отправителя — 31.6.35.122. Выгрузим вложения с помощью Outlook.

Получаем файл RTF:
Код:
Important_ECORP_Lawsuit_Washington_Leak.rtf
Но эта версия файла битая. Поэтому попробуем восстановить его не из сообщения, а из памяти. Находим его по названию в выгруженном списке файлов.

Физический адрес вредоносного файла

Восстановим его.
Код:
python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" \
--profile=Win7SP1x64 dumpfiles -Q 0x000000007d6b3850 -u -D ecorpwin7/
Открываем восстановленный файл в Hex-редакторе и удаляем в конце незначащие нули. MD5-сумма этого файла:
Код:
00e4136876bf4c1069ab9c4fe40ed56f
Это реализация эксплоита в документе RTF (CVE-2010-3333). Подробнее о нем можешь прочесть в исследовании Sophos (PDF).

Начнем анализ вредоносного документа. Получим список потоков:
Код:
py rtfdump.py file.None.0xfffffa80040b3260.dat.rtf
Список потоков документа RTF

Согласно исследованию Sophos, полезная нагрузка находится за фрагментом \sv.

Содержимое документа RTF

Полезная нагрузка начинается после 0xacc8. Выгрузим нагрузку и сохраним в файл shell.
Код:
py rtfdump.py  file.None.0xfffffa80040b3260.dat.rtf -s 5 -H -d > shell
Далее с помощью утилиты scdbg найдем точку входа шелл‑кода.
Код:
scdbg /f shell /findsc
Поиск точки входа

Полезная нагрузка загружается с ресурса по следующему адресу:
Код:
http://files.allsafecybersec.com
Проанализируем процессы.

Процесс svchost.exe с запущенными дочерними процессами rundll32.exe

Мы обнаружили процесс svchost.exe с идентификатором 288, запустивший дочерние процессы rundll32.exe. Получим информацию об их запуске при помощи плагина cmdline.
Код:
python2.7 vol.py -f ecorpwin7/ecorpwin7-e73257c4.vmem \
--profile=Win7SP1x64 cmdline >  ecorpwin7/cmdline
Запуск rundll32.exe

Как видим, rundll32.exe запускает динамическую библиотеку C:\ProgramData\test.DLL, функция экспорта GnrkQr.

Выгрузим test.DLL и проверим его на VirusTotal. Для этого найдем физический адрес файла.
Физический адрес файла test.DLL


Код:
python2.7 vol.py -f ecorpwin7/ecorpwin7-e73257c4.vmem \
--profile=Win7SP1x64 dumpfiles -Q 0x000000007e8b03c0 -D c74-TeamSpy/ecorpwin7/
Его MD5 — 2769761a23f793d93bbad3ded28e8ebd.

Файлик оказался вредоносным и относится к семейству PlugX.

Найдем управляющий сервер процесса с идентификатором 288.
Адрес управляющего сервера


Вредоносный модуль взаимодействует с управляющим сервером 52.90.110.169.

Далее получим дамп адресного пространства процесса.
Код:
python2.7 vol.py -f ecorpwin7/ecorpwin7-e73257c4.vmem \
--profile=Win7SP1x64 memdump -p 288 -D ecorpwin7/
Найдем все URI, через которые шло взаимодействие с files.allsafecybersec.com:
Код:
strings  288.dmp | grep files.allsafecybersec.com
Загрузка линукс-пакета


Для бокового перемещения по сети и заражения машин с Linux злоумышленник загрузил модуль linuxav.deb.

Продолжаем анализировать процессы и находим запущенный исполняемый файл conhost.exe, который обрабатывает консольные окна в последних версиях Windows.
Обнаруженный процесс conhost.exe


Получим дамп его адресного пространства.
Код:
python2.7 vol.py -f "ecorpwin7/ecorpwin7-e73257c4.vmem" --profile=Win7SP1x64 memdump -p 3056 -D ecorpwin7/
Теперь проанализируем строки в дампе процесса.

Обычно, попав в систему, злоумышленники начинают искать в ней интересные файлы, чтобы их выгрузить. Посмотрим, как злоумышленник выгружал файлы со скомпрометированной системы. Найдем все файлы с расширениями .zip и .rar. При поиске архивов RAR находим файл report.rar.
Код:
strings -el 3056.dmp | grep reports.rar  -B 3 -A 3
Результат поиска файла report.rar

Пароль выгружаемых данных — password1234.

Подводим итоги.

04.06.2016 в 13:35:13 (UTC) на почтовый адрес scot.knowles@e-corp.biz от lloydchung@allsafecybersec.com поступило фишинговое сообщение, в которое вложен документ. Этот документ содержит эксплоит CVE-2010-3333, в результате запуска которого произошла компрометация компьютера. Далее на скомпрометированный компьютер установлен вредоносный образец семейства PlugX с управляющим сервером 52.90.110.169. После получения доступа злоумышленники начали выгружать документы в запароленном архиве и для дальнейшего закрепления на серверах организации попытались загрузить модуль linuxav.deb.

ВЫВОДЫ​

Итак, мы восстановили действия злоумышленника. Компрометация сети произошла 04.10.2016 в 12:02 (UTC). С почтового сервера 31.6.35.122 на электронные почтовые адреса пользователей philip.price@e-corp.biz и scot.knowles@e-corp.biz поступили вредоносные сообщения. В качестве вложения использовался документ с расширением .doc, содержащий макрос на Visual Basic, и документ RTF с внедренным эксплоитом. Рассылка шла с почтового сервера 31.6.35.122.

Когда пользователь открыл зараженный документ, на скомпрометированный компьютер WIN-191HVE3KTLO загрузилось средство удаленного администрирования TeamViewer, а на хост WIN-KMUKM7JPN9D — вредоносный образец семейства PlugX. После получения контроля над сетью организации злоумышленники потребовали выкуп в размере пяти биткоинов.

Автор @rayhunt454
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх