როგორც სათაურიდან ჩანს, ამ სტატიაში ვისაუბრებთ Name Resolution-ზე Windows სისტემებში. თუ რატომაა მნიშვნელოვანი ეს ყველაფერი და როგორ აგვარიდებს სტატიიდან მიღებული ცოდნა წარმატებულ შეტევებს ჩვენს Active Directory-ინფრასტრუქტურის წინააღმდეგ, გავიგებთ შემდგომი ტექსტიდან...
დავიწყოთ საფუძვლებიდან. Windows ოპერაციულ სისტემებში Name Resolution რექვესტები მუშავდება შემდეგი პრიორიტეტიზაციით:
- hosts ფაილი (%SYSTEMROOT%\System32\drivers\etc\hosts)
- DNS სერვერი
- LLMNR - იშიფრება როგორც Link-Local Multicast Name Resolution
- NBNS/WINS - NetBIOS Name Service ასევე ცნობილია როგორც Windows Internet Name Service
მაშ ასე, LLMNR ეს არის Name Resolution პროტოკოლი IPv4 და IPv6-ისთვის, რომელიც გაჩნდა Windows Vista და Windows Server 2008-ში და ამ პროტოკოლის თანახმად ჰოსტები აკეთებენ multicast-მიკითხვებს (queries) და პასუხობენ (responses) unicast-ით UDP 5355 პორტზე. თვალსაჩინოებისთვის Command Prompt-ში შეგიძლიათ აკრიფოთ შემდეგი ბრძანება:
netstat -ano | findstr :5355
და რადგან LLMNR პროტოკოლი დეფოლტად ჩართულია Windows-სისტემებში, ხოლო თქვენ ის არ გაგითიშავთ, დაინახავთ, რომ dns client-ის სერვისი უსმენს UDP 5355 პორტს ყველა IPv4 და IPv6 მისამართიდან (IPv6-იც გათიშეთ რა! უბრალოდ გათიშეთ, დამიჯერეთ! 😇).
რაც შეეხება NBNS/WINS პროტოკოლს, ის საკმაოდ ძველი პროტოკოლია და მუშაობს მხოლოდ ipv4-ით, Destination IP მისამართი არის ქსელის IPv4 Broadcast მისამართი, იყენებს UDP 137 პორტს.
LLMNR და NBNS/WINS პროტოკოლები ორივე დეფოლტად ჩართულია Windows-სისტემებში და თამაშში შემოდიან მაშინ, როცა სტანდარტული DNS სერვისი მიუწვდომელია. ამ შემთხვევაში გვაქვს შემდეგი პროცესი:
- LLMNR და NBNS/WINS პროტოკოლების მეშვეობით კლიენტი უგზავნის multicast (LMNR) ან broadcast (NBNS/WINS) მესიჯებს და ეკითხება მთლიან ქსელს იმ რესურსის შესახებ, რომელიც აინტერესებს. პროტოკოლები თავშივე ითვალისწინებენ, რომ კლიენტი ენდობა მთლიან შიდა ქსელს და ღებულობს პასუხს ნებისმიერი შიდა ქსელში მოპასუხე რესურსიდან, როგორც სანდოს.
- რომელიღაც ჰოსტი შიდა ქსელიდან (მაგალითად, შემტევის ჰოსტი) პასუხობს ჩვენს რექვესტს და გვეუბნება ჩვენს მიერ მოთხოვნილი ჰოსტის Destinatin IP-მისამართს
- მსხვერპლი უკავშირდება File Share სისტემას სახელად fileserver, რომლის სახელის დაწერისას შეცდომა დაუშვა და დაწერა fileservwr.
- DNS-სერვერმა ვერ იპოვა თავისთან fileservwr ჩანაწერი, რის შესახებაც ამცნობა მომთხოვნ კომპიუტერს (სურათზე Victim).
- კომპიუტერმა რადგან ვერ მიიღო პასუხი, აგზავნის LLMNR, NetBIOS-NS query-ის.
- შემტევი უსმენს ქსელის ტრაფიკს (სურათზე Attacker) და პასუხობს მსხვერპლის კომპიუტერს, რომ ის არის fileservwr-ი.
შემტევი თავის კომპიუტერზე უშვებს Responder-ს შემდეგი ბრძანებით:
responder -I eth0
(eth0 ამ შემთხვევაში არის ინტერფეისი, რომელიც უსმენს Broadcast-ში LLMNR, NetBIOS-NS query-ებს):
მსხვერპლის კომპიუტერზე მივაკითხოთ file share-ს fileserwr:
მსხვერპლის ოპერაციულ სისტემაზე ამოხტება Windows Security Prompt-ი:
ჰეშის მნიშვნელობის მაგივრად, რომ ღია ტექსტად ნახოს მსხვერპლის მიერ შეყვანილი superadmin-ის პაროლი, შემტევი გამოიყენებს მაგალითად, HashCat-ს.
ძვირფასო ადმინებო, თუ გინდათ, რომ მორიგ შეღწევადობის ტესტზე არ გახდეთ Pentester-ების დასაცინები, ორივე პროტოკოლი უნდა გათიშოთ.
LLMNR პროტოკოლის გათიშვა
LLMNR-ის გათიშვა შესაძლებელია ჯგუფური პოლიტიკებიდან:
- ვხსნით GPMC.msc ჯგუფური პოლიტიკების კონსოლს;
- გადავდივართ Computer Configuration -> Administrative Templates -> Network -> DNS Client ჩანართზე;
- Turn Off Multicast Name Resolution პარამეტრს ვაყენებთ Enabled მდგომარეობაში
NBNS/WINS პროტოკოლის გათიშვა
- ncpa.cpl -ით ვხვდებით Control Panel\All Control Panel Items\Network Connections -ში
- ვირჩევთ ქსელის ადაპტერის TCP/IPv4 Properties
- ვაჭერთ ღილაკს Advanced, ვირჩევთ ჩანართ WINS-ს და ვირჩევთ Disable NetBIOS over TCP ოპციას და OK
საქმეს ართულებს ის გარემოება, რომ NBNS/WINS პროტოკოლი ცალ-ცალკე უნდა გათიშოთ ყველა ინტერფეისისთვის.
საბედნიეროდ, შესაძლებელია Powershell-ის მეშვეობით, გავაკეთოთ აღნიშნული ოპერაცია ყველა ინტერფეისისთვის ერთდროულად:
$regkey = "HKLM:SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces" Get-ChildItem $regkey |foreach { Set-ItemProperty -Path "$regkey\$($_.pschildname)" ' -Name NetbiosOptions -Value 2 -Verbose}
შევინახოთ აღნიშნული სკრიპტი disableNetbios.ps1 სახელით, ხოლო ჯგუფურ პოლიტიკებში ეს სკრიპტი Startup Script-ებში ჩავსვათ:
Computer Configuration -> Policies -> Windows Settings ->Scripts ->Startup->PowerShell Scripts
... და IPv6 გათიშეთ. დიდი ბიჭები ხართ უკვე 😋
No comments
Post a Comment