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.
sumber
Jawaban:
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:
Cari tahu di mana modifikasi SPN terjadi:
Buka prompt perintah yang ditinggikan pada pengontrol domain dan buat perintah ini:
Output akan berisi nama Pengontrol Domain yang awalnya menulis versi nilai atribut servicePrincipalName saat ini:
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 cariDefault Domain Controllers Policy
dan edit.Computer Configuration -> Windows Settings -> Security Settings
Local Policies -> Security Options
Advanced Audit Policy -> Audit Policies -> DS Access
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:
( 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:
Windows Logs -> Security
<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 LOGON
atau 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 masalahnyasumber