Serangan antara trust di antara domain



Cepat atau lambat, selama pentest, tugas muncul untuk mengkompromikan seluruh hutan - asalkan ada hak di salah satu domain. Pada saat-saat seperti itu, banyak pertanyaan muncul tentang kepercayaan, sifat mereka dan serangan itu sendiri. Mari kita coba mencari tahu semuanya.

Kepercayaan antar domain digunakan untuk mengautentikasi pengguna dari satu domain pada pengontrol domain lain. Dengan kata lain, agar pengguna dari domain A dapat memiliki akses ke sumber daya domain B. Struktur domain dapat terdiri dari dua jenis:

  • Pohon domain
  • hutan domain.



Saat membuat pohon domain antar domain, secara default trust transitif dibuat. Semua komputer memiliki kesamaan:

  • katalog global
  • namespace
  • skema

Pohon domain dapat digabungkan menjadi hutan. Saat membuat hutan domain, trust transitif didirikan, dan semua komputer di hutan berbagi yang berikut:

  • katalog global
  • skema

Tabel di bawah ini menunjukkan jenis kepercayaan antara domain dan propertinya.

Tidak.Jenis kepercayaanTransitivitasArahanMekanisme OtentikasiDeskripsi
1EksternalNon-transitifSatu arah atau dua arahHanya NTLMMereka diinstal antara domain milik hutan yang berbeda, atau dengan domain Windows NT 4.0.
2RanahTransitif atau non-transitifSatu arah atau dua arahHanya KerberosDiinstal antara Windows dan domain non-Windows menggunakan protokol Kerberos. Jenis kepercayaan ini dapat digunakan untuk menyediakan otentikasi ujung ke ujung pada sistem Windows dan UNIX.
3HutanTransitifSatu arah atau dua arahKerberos atau NTLMDiatur di antara hutan. Pada saat yang sama, administrator memutuskan sendiri apakah hubungan itu bilateral atau unilateral.
4Jalan pintasTransitifSatu arah atau dua arahKerberos atau NTLMTetapkan di antara domain berbagai pohon milik hutan yang sama. Digunakan untuk mengurangi jalur kepercayaan, sehingga meningkatkan efisiensi interaksi antara kedua domain.
5Orangtua-anakTransitifDua arahKerberos atau NTLMMereka diinstal secara otomatis ketika domain baru dibuat di pohon. Di dalam pohon domain, hubungan dijelaskan oleh skema Orangtua-Anak.
6Kepercayaan pohon-rootTransitifDua arahKerberos atau NTLMSecara otomatis diinstal ketika pohon domain baru dibuat di hutan yang ada. Bahkan, kepercayaan dibangun antara domain akar hutan dan domain yang dibuat, yang akan menjadi root untuk pohon baru.

Lebih jelasnya, jenis perwalian antar domain diilustrasikan dalam gambar di bawah ini.



Transitivitas


Transitivitas diperlukan untuk mendefinisikan kepercayaan di luar dua domain di mana ia dibentuk, dan digunakan untuk memperluas hubungan kepercayaan dengan domain lain. Jika kami menambahkan domain anak ke domain, hubungan kepercayaan dua arah dibuat antara domain induk dan anak. Hubungan ini bersifat transitif, mis. jika domain A mempercayai domain D dan domain D mempercayai domain E, maka domain A juga mempercayai domain E.



Kepercayaan nontransitif dapat digunakan untuk menolak kepercayaan dengan domain lain.

Arahan


Jalur hubungan trust adalah serangkaian hubungan trust antara domain tempat permintaan otentikasi harus diterima. Dengan kata lain, sebelum mengautentikasi pengguna, kepercayaan antar domain ditentukan. Bagi pengguna domain A untuk mengakses sumber daya domain D, domain D harus mempercayai domain A.

Arah kepercayaan ada dua jenis:

  • satu sisi;
  • bilateral.

Kepercayaan satu arah adalah jalur otentikasi satu arah yang dibuat antara dua domain. Dalam kepercayaan searah antara domain A dan domain B, pengguna di domain B memiliki akses ke sumber daya di domain A. Namun, pengguna di domain A tidak memiliki akses ke sumber daya di domain B. Jenis kepercayaan ini tidak transitif.

Kepercayaan bilateral adalah kombinasi dari dua hubungan kepercayaan searah. Dalam kepercayaan dua arah antara domain A dan B, pengguna mereka memiliki akses ke sumber daya dari kedua domain. Jenis kepercayaan ini transitif.

Arah kepercayaan selalu berlawanan dengan arah akses. Diagram perwakilan Microsoft di bawah ini:

Tautan untuk jenis kepercayaan yang lebih mendalam:


Kerberos antara domain tepercaya


Pertimbangkan sebuah contoh. Klien sedang mencoba mengakses Server.

Dari poin 1 hingga 3, tindakan standar terjadi saat menggunakan protokol Kerberos.
  • 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.
  • Tiket TGT dienkripsi, ditandatangani, dan dikirim ke pengguna (AS-REP). Hanya layanan Kerberos (KRBTGT) yang dapat membuka dan membaca data dari tiket TGT.
  • Seorang pengguna mengirimkan tiket TGT ke pengontrol domain saat meminta tiket TGS (TGS-REQ). Pengontrol domain membuka tiket TGT dan memeriksa checksum PAC.


Perubahan dimulai dari poin 4: tiket TGT antar-wilayah muncul, yang disebut tiket rujukan, yang dienkripsi / ditandatangani dengan kunci antar-wilayah yang dibuat dari kata sandi tepercaya. Kata sandi tepercaya ditetapkan saat kepercayaan dibangun dan diketahui oleh kedua pengontrol domain. Menggunakan tiket TGT antar-wilayah, pengguna domain 1 dapat meminta tiket TGS untuk mengakses sumber daya domain 2.



NTLM antara domain tepercaya




  1. Klien mengirim permintaan untuk otentikasi langsung ke sumber daya itu sendiri, yang terletak di domain lain, yang ingin diakses.
  2. Server menerima permintaan dari klien dan mengirimkannya respons CHALLENGE_MESSAGE, yang berisi urutan acak 8 byte. Ini disebut Tantangan Server.
  3. Klien, setelah menerima urutan Server Challenge dari server, mengenkripsi urutan ini dengan kata sandinya, dan kemudian mengirim respons ke server yang berisi 24 byte.
  4. Server mengirimkan permintaan dan respons ke pengontrol domain B.
  5. Dalam kasus otentikasi antar trust, logika berikut dilakukan:

    • Memeriksa Hubungan Trust Arah.
      • Kredensial klien dikirim ke domain A untuk mengautentikasi.
      • Jika tidak ada hubungan kepercayaan, maka Transitivitas diperiksa dengan domain A.

    • Verifikasi Transitivitas antar Domain
      • Jika ada transitivitas antar domain, permintaan otentikasi dikirim ke domain berikutnya di jalur kepercayaan. Pengontrol domain ini mengulangi prosesnya, memeriksa kredensial pengguna terhadap database akun keamanannya.
      • Jika tidak ada transitivitas, pesan akses ditolak dikembalikan ke klien.


    6-8. Jawaban dengan keputusan untuk mengotentikasi klien.

    Serangan antara trust di antara domain


    Jadi, untuk melakukan serangan, kami membutuhkan informasi tentang mempercayai hubungan di domain kami.

    Daftar Trust


    Ada 3 metode utama untuk daftar kepercayaan di domain:

    1. melalui API Win32;
    2. melalui metode .NET;
    3. melalui LDAP.

    Win32 API

    Enumerasi dilakukan dengan memanggil fungsi DsEnumerateDomainTrusts , yang mengembalikan struktur DS_DOMAIN_TRUSTSA . Dengan menggunakan metode ini, SID dan GUID dari domain target, tanda dan atribut yang menandai kepercayaan saat ini di domain dikembalikan.

    Bendera
    DS_DOMAIN_DIRECT_INBOUNDMenghitung domain yang secara langsung mempercayai domain yang memiliki ServerName sebagai anggota.
    DS_DOMAIN_DIRECT_OUTBOUNDMenghitung domain yang dipercaya langsung oleh domain yang memiliki ServerName sebagai anggota.
    DS_DOMAIN_IN_FORESTMenghitung domain yang merupakan anggota dari hutan yang sama yang memiliki ServerName sebagai anggota.
    DS_DOMAIN_NATIVE_MODEMenghitung domain tempat domain utama berjalan dalam mode asli Windows 2000.
    DS_DOMAIN_PRIMARYMenghitung domain yang merupakan domain utama dari domain yang memiliki ServerName sebagai anggota.
    DS_DOMAIN_TREE_ROOTMenghitung domain yang berada di akar hutan yang memiliki ServerName sebagai anggota.


    Atribut


    TRUST_ATTRIBUTE_NON_TRANSITIVELarang transitivitas.
    TRUST_ATTRIBUTE_UPLEVEL_ONLYTautan trust tidak valid untuk sistem operasi klien lebih awal dari Windows 2000.
    TRUST_ATTRIBUTE_FILTER_SIDSDomain karantina.
    TRUST_ATTRIBUTE_FOREST_TRANSITIVETautan trust dapat berisi informasi kepercayaan hutan.
    TRUST_ATTRIBUTE_CROSS_ORGANISATIONKepercayaan ini adalah untuk domain / hutan yang bukan bagian dari perusahaan ini.
    TRUST_ATTRIBUTE_TREAT_AS_EXTERNALKepercayaan diperlakukan sebagai eksternal untuk tujuan batas kepercayaan.
    TRUST_ATTRIBUTE_WITHIN_FORESTKepercayaan adalah internal dari hutan ini.


    BloodHound mengumpulkan informasi menggunakan metode Win32 API.



    .Net

    Metode GetCurrentDomain dari namespace [System.DirectoryServices.ActiveDirectory.Domain] digunakan, yang mengembalikan sebuah instance dari kelas System.DirectoryServices.ActiveDirectory.Domain . Kelas ini mengimplementasikan metode GetAllTrustRelationships , yang mengembalikan semua trust untuk domain saat ini.

    ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships() 

    Menggunakan metode ini diimplementasikan dalam modul Get-DomainTrust di PowerView .



    Salah satu kelebihan dari metode ini adalah kesederhanaannya. Informasi mudah dibaca dan dipahami, tetapi volumenya jauh lebih kecil daripada saat melakukan penghitungan dengan metode lain.

    LDAP

    Informasi kepercayaan domain disimpan di Active Directory sebagai objectClass dari kelas Domain tepercaya .

    Contoh penggunaan:

     dsquery * -filter "(objectClass=trustedDomain)" -attr * 



    PowerView menggunakan metode ini secara default.



    Dengan informasi tentang domain dan jenis kepercayaan, Anda dapat langsung menuju ke serangan itu sendiri. Pertimbangkan 2 opsi:

    1. Kami berhasil mengompromikan domain, dan kami memiliki hak administrator domain.
    2. Kami tidak memiliki hak administrator domain.

    Dengan hak administrator ke salah satu domain


    Bergantung pada domain yang disusupi, beberapa vektor serangan dapat dibedakan:


    Tidak.Mulai Domain Posisi penyerangDomain yang diserangTeknik seranganHubungan saling percaya
    1RootingAnakTiket Emas + Grup Admin PerusahaanInter-ranah (2 arah)
    2AnakAnakOperasi Riwayat SIDAnak-Orangtua Antar-Kerajaan (2 arah)
    3AnakRootingOperasi Riwayat SID
    Operasi Tiket Percaya
    Inter-ranah Tree-Root (2 arah)
    4Hutan 1Hutan 2Bug printerHutan Antar Dunia atau Kepercayaan Eksternal (2 arah)

    Perlu dicatat bahwa untuk keberhasilan implementasi semua vektor, diperlukan kepercayaan bilateral antar domain.

    1. Riwayat Operasi SID


    SID History diperkenalkan untuk memfasilitasi migrasi pengguna dari satu domain ke domain lain. Atribut berisi objek SID sebelumnya. Setiap kali suatu objek bergerak dari satu domain ke domain lain, SID baru dibuat, yang menjadi objectSID. SID sebelumnya ditambahkan ke properti sIDHistory.

    Setiap hutan memiliki grup pengguna Admin Perusahaan yang hanya ada di domain root dan memiliki hak administrator lokal pada pengontrol domain semua domain anak di hutan. Serangan ini pertama kali ditunjukkan oleh Sean Metcalf di BlackHat USA 2015 . Inti dari serangan itu adalah kami mengeluarkan tiket Emas dengan tambahan SID tambahan dari grup Admin Perusahaan. Ini dilakukan dengan menambahkan ExtraSids dalam struktur KERB_SID_AND_ATTRIBUTES , yang dikirim dalam struktur KERB_VALIDATION_INFO .



    Demo Serangan:



    Impacket memiliki skrip yang mengotomatiskan semua ini.

    2. Tiket Emas + Grup Admin Perusahaan


    Memiliki hak administrator dalam domain Root, kami dapat membuat Tiket Emas dengan tambahan pengguna ke grup Admin Perusahaan (519).

     Kerberos::golden /domain:<domain> /sid:<domain_SID> /krbtgt:<ntlm_hash_krbtgt_user> /user:<user> /groups:500,501,513,512,520,518,519 /ptt 

    Seperti dijelaskan di atas, Admin Perusahaan memiliki hak administrator lokal untuk domain DC Child. Dengan demikian, kami akan dapat mengkompromikan semua domain Anak di hutan.

    3. Pengoperasian tiket trust


    Untuk mengakses sumber daya menggunakan protokol Kerberos, Anda memerlukan tiket TGS, yang dienkripsi dengan hash NTLM dari kata sandi akun layanan. Pengontrol domain hanya menyimpan hash kata sandi pengguna untuk domainnya, jadi ketika pengguna dari domain A membutuhkan akses ke sumber daya di domain B, kunci antar-dunia digunakan. Kunci ini dibuat berdasarkan kata sandi tepercaya, yang ditetapkan saat membuat hubungan saling percaya antara domain di hutan yang sama. Di basis data kata sandi (NTDS.dit) pada pengontrol domain, Anda dapat menemukan pengguna dengan tanda $ di bagian akhir. Kata sandi mereka juga digunakan untuk membuat kunci antar-dunia. Untuk membuat tiket TGT antar-wilayah, kita memerlukan kata sandi akun ini.

     Kerberos::golden /user:<user> /domain:<domain> /sid:<sid_domain> /sids:<extra_sid_entrprice_admin_group_from _another_domain> /aes256:<aes256_trust_user_password> /service:krbtgt /target:<target_domain> /ptt 

    Demo Serangan:



    Serangan itu sangat relevan ketika layanan IS memperhatikan ancaman dan mengubah kata sandi krbtgt 2 kali. Dalam hal ini, kami akan dapat membuat tiket emas menggunakan kata sandi tepercaya antar domain.

    4. Bug Printer


    Protokol Remote Sistem Cetak Windows (MS-RPRN) memiliki metode RpcRemoteFindFirstPrinterChangeNotification (Ex) diaktifkan secara default, yang memungkinkan Anda untuk memaksa otentikasi pada komputer mana pun yang menjalankan layanan Pengumpul Informasi di host yang ditentukan menggunakan host Kerberos atau protokol NTLM. Dalam kasus c NTLM, kita dapat menjalankan NTLM-relay, atau mulai memecahkan kata sandi komputer (tidak pernah dihapus). Dalam kasus Kerberos, diperlukan mesin kompromi dengan delegasi tanpa batas. Lalu kita bisa mengambil tiket TGT dan mengembangkan serangan.

    Demo Serangan:



    Gambar di bawah ini menunjukkan langkah-langkah yang ditunjukkan dalam video.



    Kami tidak memiliki hak administrator domain


    Sedikit teori. Carlos Garsia dalam laporannya memberikan tabel yang sangat bagus yang menggambarkan sifat-sifat berbagai jenis kelompok.



    Dari fitur-fiturnya, perlu dipertimbangkan bahwa AD Domain Lokal dan Grup AD Global direplikasi tanpa anggota grup ke katalog global, dan grup AD Universal direplikasi dengan pengguna.
    Karena cara kelompok-kelompok tersebut disebutkan oleh Katalog Global, hasil dari tautan balik [yaitu pencarian dapat bervariasi, tergantung pada apakah Anda mencari Katalog Global (port 3268) atau domain (port 389), jenis dari grup milik pengguna (grup global vs. grup lokal domain).
    Jika kami tidak memiliki hak administrator domain, kami menghitung objek. Kami tertarik pada:
    1. Pengguna domain lain yang memiliki hak administrator lokal pada mesin di domain kami.
    2. Pengguna dari domain lain yang merupakan anggota grup domain pengguna. Grup yang berisi pengguna dari domain lain.
    3. Kepala Sekolah ACL Asing.

    1. Pengguna domain lain yang memiliki hak administrator lokal pada mesin di domain kami


    Cari pengguna dari domain lain yang merupakan administrator lokal di host di domain kami di BloodHound:

     MATCH (c:Computer) OPTIONAL MATCH p1 = (u1)-[:AdminTo]->(c) WHERE NOT u1.domain = c.domain WITH p1,c OPTIONAL MATCH p2 = (u2)-[:MemberOf*1..]->(:Group)-[:AdminTo]->(c) WHERE NOT u2.domain = c.domain RETURN p1,p2 



    Perintah di PowerView :

     Get-NetLocalGroupMember <server> 

    2. Pengguna dari domain lain, terdiri dari grup domain pengguna. Grup yang berisi pengguna dari domain lain


    Seperti disebutkan di atas, pengguna yang hanya anggota grup Universal direplikasi ke katalog global. Untuk mendemonstrasikan fitur ini, kami akan meminta grup dalam katalog global yang berisi setidaknya satu pengguna dan permintaan ldap langsung ke pengontrol domain.

     Get-DomainGroup -Properties name, grouptype, member, DistinguishedName -LDAPFilter '(member=*)' -SearchBase "GC://jet.lab" 



    Saat menjalankan kueri ke katalog global, kami hanya melihat satu grup Grup Universal dengan tipe AD Universal dari domain one.jet.lab.

    Jika kami menjalankan kueri LDAP langsung ke one.jet.lab, kami akan melihat grup lain dengan tipe AD Domain lokal dan AD Global.



    Ini penting untuk dipertimbangkan saat menghitung pengguna dan grup.

    Perintah di PowerView :

     Get-DomainForeignUser -Domain <Domain> Get-DomainForeignGroupMember -Domain <Domain> 





    3. Prinsipal ACL Asing


    Deskriptor keamanan ntSecurityDescriptor (https://docs.microsoft.com/en-us/windows/win32/adschema/a-ntsecuritydescriptor) dapat diakses oleh semua pengguna dari domain tepercaya dan direplikasi ke katalog global. Dengan demikian, kami dapat meminta semua DACL untuk semua objek dalam mempercayai domain dan memfilter pengguna dari domain lain.

     Get-DomainObjectAcl -Domain jet.lab -ResolveGuids | ?{$_.SecurityIdentifier -like 'SID_Domain*'} 



    Jadi, kami berhasil mengidentifikasi pengguna Mike dari domain forestc.lab, yang memiliki hak untuk Grup Global di domain jet.lab.

    Penyaringan PS SID dan Otentikasi Selektif digunakan untuk perlindungan antar hutan. Serangan antara hutan dengan SID Filtering mengaktifkan dirkjan di blog - nya . Juga pada 9 Juli, Microsoft merilis pembaruan yang menonaktifkan delegasi TGT antar hutan secara default. Sekarang semuanya, cerita dengan delegasi tanpa batas dan kompromi satu hutan dari yang lain menggunakan protokol Kerberos tidak lagi berfungsi.

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


All Articles