Entri Nama Prinsipal Layanan Integrasi Direktori Aktif 2012 LDAP Menghilang?

8

Membuat Layanan Python ke Atribut AD Query

Saya mengintegrasikan AD kami dengan layanan web yang menjalankan Python di linux menggunakan Python-LDAP melalui SASL (DIGEST-MD5) untuk meminta atribut pengguna AD 2012 (divisi, departemen, ekstensi telepon, email, dll). Setelah mengerjakan kinks khusus untuk layanan saya terhadap AD 2003 saya mulai mengalami kesalahan SPN terhadap AD 2012 baru kami, bahwa digest-uri tidak cocok dengan SPNs apa pun di server. Saya telah mereferensikan daftar SPN untuk kedua server dan mereka berisi analog yang identik satu sama lain.

Kesalahan: Intisari-uri tidak cocok dengan LDAP SPN mana pun yang terdaftar untuk server ini

Memperbaiki?

Ini diperbaiki dengan menjalankan:

setspn -A ldap/<Domain_Name> <Computer_Name>

Perhatikan bahwa membuat akun layanan tidak memperbaiki kesalahan SPN saya bahkan ketika perintah berikut dijalankan:

setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>

simple_bind_s () tidak perlu SPN, sasl_interactive_bind_s () membutuhkan SPN

Hanya menambahkan SPN ke daftar lokal mesin SPN bekerja untuk layanan Python-LDAP saya menggunakan sasl_interactive_bind_s (). Saya juga harus mencatat bahwa langkah SPN dapat dilewati jika saya menggunakan simple_bind_s () tetapi metode ini mengirimkan kredensial dalam cleartext yang tidak dapat diterima.

Namun saya perhatikan bahwa catatan tersebut hanya berada pada daftar SPN selama sekitar satu menit sebelum menghilang? Tidak ada kesalahan ketika saya menjalankan perintah setspn, log peristiwa benar-benar kosong, tidak ada duplikat di mana pun, diperiksa dengan pencarian hutan -F di pangkalan dn dan tidak ada. Saya telah menambahkan dan mencoba menambahkan kembali dan menghapus dan memindahkan SPN dari objek ke objek untuk memverifikasi bahwa itu tidak bersembunyi di mana pun, tetapi yang kedua saya menambahkan objek di mana saja dan kemudian mencoba untuk menambahkannya kembali memberitahukan saya tentang duplikat. Jadi saya sangat yakin bahwa tidak ada duplikat yang tersembunyi di suatu tempat.

Peretasan

Untuk sekarang saya punya tugas terjadwal menjalankan kembali perintah untuk menyimpan catatan pada daftar sehingga layanan saya akan bekerja dengan tepat bernama "Hack SPN"

cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"

sampai saya bisa mengetahui mengapa SPN sedang dibersihkan dari daftar.

Saya bukan administrator utama untuk AD khusus ini, dapatkah admin menjalankan layanan yang menyinkronkan SPN dari layanan lain pada AD dan tidak menyadarinya? Judul saya adalah Pengembang Web, bukan sebagai alasan tetapi untuk menjelaskan ketidaktahuan saya untuk masalah Active Directory. Saya telah diberitahu untuk menjadikan AD sebagai pengguna utama DB dan saya telah membaca banyak tetapi saya tidak dapat menemukan tempat di mana orang-orang mengalami masalah dengan SPN yang 'ditimpa' atau 'dibersihkan' secara berkala dan tidak ada admin sangat akrab dengan SPN di luar entri SQLServer.

Mengapa saya perlu retas?

Sejauh ini peretasan saya tampaknya tidak menimbulkan masalah bagi pengguna atau layanan apa pun dan belum menghasilkan kesalahan, jadi admin mengatakan ia akan membiarkannya berjalan dan saya akan terus mencari. Tapi kemudian saya menemukan diri saya dalam situasi genting menulis layanan yang implementasinya dibangun, pada dasarnya cron hack / shiver ... Jadi, bantuan apa pun akan dihargai.


Memperbarui

Setelah percakapan dengan sysadmin, dia setuju bahwa membangun layanan di atas peretasan bukanlah solusi, karena itu dia memberi saya izin untuk memutar layanan lokal dengan enkripsi titik akhir yang dapat saya gunakan untuk tujuan saya, hasilnya sama . Saya akan mengawasi apa yang menyebabkan SPN hilang. Binding lokal bukan masalah menggunakan Python-LDAP dan layanan lokal sudah berjalan setelah sekitar satu jam. Sangat disayangkan bahwa saya pada dasarnya membungkus fungsionalitas yang dibangun ke dalam LDAP tetapi kami melakukan apa yang harus kami lakukan.

Melignus
sumber
Nah itu sebuah misteri. SPN biasanya tidak hilang begitu saja. Saya bertaruh bahwa aplikasi menghapusnya. Apakah Python-Ldap secara otomatis mendaftarkan SPNnya sendiri? Jika demikian, apakah itu melakukannya dengan benar? Di luar itu, Anda mungkin perlu mengonfigurasi audit akses objek pada pengontrol domain untuk mencoba dan mengetahui siapa yang bertanggung jawab menghapus SPN setiap beberapa menit.
Ryan Ries
1
Python-LDAP tidak mendaftarkan SPN itu sendiri. Saya sudah memeriksa heck out dari layanan pengujian dan jaringan saya, itu hanya terlihat seperti aliran login standar, sekarang apakah permintaan awal akan mendaftar atau tidak pada sisi AD yang sepertinya akan mengalahkan tujuan SPN di tempat pertama? Saya tahu bahwa binding cleartext berfungsi tanpa spn, hanya permintaan sasl yang gagal tanpa catatan SPN pada AD ... Saya mulai mencari layanan yang mungkin mengelola SPN di luar, hampir terasa seperti lap dan ganti skrip sedang berjalan di suatu tempat ...
Melignus
Hei, apakah Anda menemukan mengapa SPN Anda menghilang? Kami tampaknya memiliki perilaku yang sama setelah beberapa jam ...
David

Jawaban:

6

Ini adalah fenomena yang sangat menarik (dan menjengkelkan) dan saya bersikeras bahwa kita mencari tahu apa yang terjadi di sini.

Untungnya, Windows Server memiliki beberapa kebijakan audit berbutir halus sejak 2008, dan kami dapat menggunakan audit untuk melacak siapa yang melakukan ini. Untuk melakukannya, kita harus:

  1. Cari tahu di mana modifikasi SPN terjadi
  2. Aktifkan audit perubahan objek AD DS
  3. Tetapkan ACE audit pada objek
  4. Reproduksi kesalahannya
  5. Periksa log keamanan pada DC yang menyinggung

Cari tahu di mana modifikasi SPN terjadi:

Buka prompt perintah yang ditinggikan pada pengontrol domain dan buat perintah ini:

repadmin /showobjmeta . "CN=computerAccount,DC=domain,DC=local"|findstr servicePricipalName

Output akan berisi nama Pengontrol Domain yang awalnya menulis versi nilai atribut servicePrincipalName saat ini: bos repadmin iz

Aktifkan audit perubahan objek AD DS:

Jika kebijakan audit global belum ditentukan, Anda dapat membuat perubahan ini ke kebijakan keamanan lokal di Kontroler Domain yang diidentifikasi pada langkah sebelumnya

Buka Konsol Manajemen Kebijakan Grup ( gpmc.msc) dan cari Default Domain Controllers Policydan edit.

  1. Pergi ke Computer Configuration -> Windows Settings -> Security Settings
  2. Pilih dan Bentangkan Local Policies -> Security Options
  3. Pastikan Audit: Paksakan pengaturan subkategori kebijakan audit ... diatur ke Diaktifkan Paksa subkategori audit di mana kategori klasik sudah diterapkan
  4. Pilih dan Bentangkan Advanced Audit Policy -> Audit Policies -> DS Access
  5. Pastikan bahwa Perubahan Layanan Direktori Audit ditetapkan setidaknya untuk Sukses Perubahan Layanan Direktori Audit

Tetapkan ACE audit pada objek:

Buka Pengguna dan Komputer Direktori Aktif ( dsa.msc) dan Periksa pengaturan "Fitur Lanjutan" di menu "Tampilan".
Arahkan ke objek akun komputer, klik kanan dan pilih Properties. Pilih tab Security , dan tekan tombol "Advanced".

Di prompt, pilih tab Audit dan pastikan bahwa "Tulis semua properti" sedang diaudit untuk Semua Orang . Jika tidak, atau jika Anda ragu, Tambahkan entri baru:

  1. Tekan Tambah .
  2. Masukkan "Semua Orang" sebagai kepala sekolah sasaran
  3. Pilih "Sukses" sebagai jenisnya
  4. Gulir ke bawah di bawah properti dan centang "Tulis servicePrincipalName"
  5. Tekan OK untuk menambahkan entri dan keluar dari ADUC

( Jika Anda malas, Anda dapat memilih "Tulis semua properti" )

Reproduksi kesalahannya

Dari pertanyaan Anda, sepertinya SPN dihapus setiap menit, jadi ini mungkin langkah termudah. Ikuti pelajaran musik 1 menit untuk sementara waktu.

Periksa log keamanan pada DC yang menyinggung

Sekarang setelah satu menit berlalu, mari kita periksa log keamanan pada Kontroler Domain yang diidentifikasi sebagai pencetusnya pada langkah 1. Ini bisa menjadi masalah di domain besar, tetapi penyaringan dapat membantu dengan ini:

  1. Buka Event Viewer dan navigasikan ke Windows Logs -> Security
  2. Di panel kanan, pilih Filter Log Saat Ini
  3. Di bidang input yang bertuliskan " <All Event IDs>", input 5136 (ini adalah id acara untuk modifikasi objek direktori)

Anda sekarang seharusnya dapat menemukan entri acara untuk setiap perubahan pada servicePrincipalName atribut pada akun komputer.

Identifikasi "Subjek" yang bertanggung jawab atas perubahan dan lihat dari mana asalnya. Bunuh proses / mesin / akun itu dengan api!

Jika subjek diidentifikasi sebagai SYSTEM, ANONYMOUS LOGONatau deskripsi umum yang serupa, kita sedang berhadapan dengan pemrosesan internal pada pengontrol domain itu sendiri, dan kita perlu memecahkan beberapa Logging NTDS Diagnostik untuk mengetahui apa yang terjadi. Harap perbarui pertanyaan jika ini masalahnya

Mathias R. Jessen
sumber
Saya melihat masalah yang sama persis dalam upaya saya untuk memperbaiki masalah LDAP SPN yang sama. Saya mengikuti saran Anda tetapi hanya melihat modifikasi SPN (berhasil) saya dan tidak ada catatan tentang penghapusan berikutnya.
Grisha Levit