Active Directory 2012 Dịch vụ tích hợp LDAP Nhập tên chính là biến mất?


8

Tạo dịch vụ Python để truy vấn các thuộc tính AD

Tôi đang tích hợp AD của chúng tôi với các dịch vụ web chạy Python trên linux bằng Python-LDAP qua SASL (DIGEST-MD5) để truy vấn các thuộc tính người dùng AD 2012 (bộ phận, bộ phận, tiện ích mở rộng điện thoại, email, v.v.). Sau khi tìm ra các kink cụ thể cho dịch vụ của tôi so với AD 2003, tôi bắt đầu gặp phải lỗi SPN so với AD 2012 mới của chúng tôi, rằng digest-uri không khớp với bất kỳ SPN nào trên máy chủ. Tôi đã tham khảo chéo danh sách SPN cho cả hai máy chủ và chúng chứa các chất tương tự giống hệt nhau.

Lỗi: Digest-uri không khớp với bất kỳ LDAP SPN nào đã đăng ký cho máy chủ này

Cách khắc phục?

Điều này đã được sửa bằng cách chạy:

setspn -A ldap/<Domain_Name> <Computer_Name>

Lưu ý rằng việc tạo tài khoản dịch vụ không khắc phục lỗi SPN của tôi ngay cả khi lệnh sau được chạy:

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

Simple_bind_s () không cần SPN, sasl_interactive_bind_s () cần SPN

Chỉ thêm SPN vào danh sách SPN của máy cục bộ hoạt động cho dịch vụ Python-LDAP của tôi bằng sasl_interactive_bind_s (). Tôi cũng cần lưu ý rằng bước SPN có thể được bỏ qua nếu tôi sử dụng Simple_bind_s () nhưng phương thức này sẽ gửi thông tin đăng nhập trong phần văn bản rõ ràng không thể chấp nhận được.

Tuy nhiên tôi nhận thấy rằng bản ghi chỉ nằm trong danh sách SPN trong khoảng một phút trước khi biến mất? Không có lỗi khi tôi chạy lệnh setspn, nhật ký sự kiện hoàn toàn trống rỗng, không có bản sao ở bất cứ đâu, được kiểm tra với tìm kiếm toàn rừng -F trên cơ sở dn và không có gì. Tôi đã thêm và cố gắng thêm lại và xóa và di chuyển SPN từ đối tượng này sang đối tượng khác để xác minh rằng nó không ẩn ở bất cứ đâu, nhưng lần thứ hai tôi thêm đối tượng ở bất cứ đâu và sau đó cố gắng thêm lại thông báo cho tôi về một bản sao. Vì vậy, tôi rất tự tin rằng không có một bản sao ẩn ở đâu đó.

Hack

Hiện tại tôi đã có một tác vụ theo lịch trình chạy lại lệnh để giữ bản ghi trong danh sách để dịch vụ của tôi sẽ hoạt động một cách thông minh có tên là "SPN Hack"

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

cho đến khi tôi có thể tìm hiểu tại sao SPN lại bị xóa khỏi danh sách.

Tôi không phải là quản trị viên chính cho AD cụ thể này, quản trị viên có thể có một dịch vụ đang chạy đồng bộ hóa SPN từ một dịch vụ khác trên AD và không biết về nó không? Tiêu đề của tôi là Web Developer, không phải là một cái cớ mà là để giải thích sự thiếu hiểu biết của tôi về vấn đề Active Directory. Tôi đã được yêu cầu biến AD thành người dùng chính DB và tôi đã đọc rất nhiều nhưng tôi không thể tìm thấy bất cứ nơi nào mà mọi người gặp vấn đề với SPN bị 'ghi đè' hoặc 'làm sạch' theo định kỳ và không ai trong số quản trị viên rất quen thuộc với SPN bên ngoài các mục SQLServer.

Tại sao tôi cần hack?

Cho đến nay, bản hack của tôi dường như không gây ra bất kỳ sự cố nào cho bất kỳ người dùng hoặc dịch vụ nào và không tạo ra bất kỳ lỗi nào, vì vậy quản trị viên nói rằng anh ta sẽ để nó chạy và tôi sẽ tiếp tục tìm kiếm. Nhưng sau đó tôi thấy mình trong tình huống bấp bênh khi viết một dịch vụ mà việc triển khai được xây dựng, về cơ bản là hack / rùng mình ... Vì vậy, bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.


Cập nhật

Sau một cuộc trò chuyện với sysadmin, anh ấy đã đồng ý rằng xây dựng một dịch vụ trên hack không phải là một giải pháp, do đó anh ấy đã cho phép tôi tạo ra một dịch vụ địa phương với mã hóa điểm cuối mà tôi có thể sử dụng cho mục đích của mình, kết quả là như nhau . Tôi sẽ theo dõi những gì đang khiến SPN bị loại bỏ. Các liên kết cục bộ không phải là vấn đề khi sử dụng Python-LDAP và dịch vụ cục bộ đã sẵn sàng và chạy chỉ sau một giờ. Thật không may là về cơ bản tôi gói chức năng được tích hợp trong LDAP nhưng chúng tôi làm những gì chúng tôi phải làm.


Vâng, đó là một bí ẩn. SPN thường không tự biến mất. Tôi cá rằng một ứng dụng đang xóa nó. Python-Ldap có tự động đăng ký SPN của riêng mình không? Nếu vậy, nó làm nó chính xác? Ngoài ra, bạn có thể cần phải định cấu hình kiểm tra truy cập đối tượng trên bộ điều khiển miền để thử và bắt ai chịu trách nhiệm xóa SPN cứ sau vài phút.
Ryan Ries

1
Python-LDAP không đăng ký SPN của riêng nó. Tôi đã loại bỏ các dịch vụ thử nghiệm và mạng của mình một cách khôn ngoan, nó trông giống như một luồng đăng nhập tiêu chuẩn, bây giờ liệu yêu cầu ban đầu có đăng ký rằng về phía AD có vẻ như nó sẽ đánh bại mục đích của SPN không ở nơi đầu tiên? Tôi biết rằng liên kết Cleartext hoạt động mà không có spn, đó chỉ là yêu cầu sasl không thành công nếu không có bản ghi SPN trên AD ... Tôi đã bắt đầu tìm kiếm các dịch vụ có thể quản lý SPN bên ngoài, gần như cảm thấy như bị xóa sạch kịch bản thay thế đang chạy ở đâu đó ...
Melignus

Này bạn đã tìm thấy lý do tại sao SPN của bạn biến mất? Chúng tôi dường như có hành vi tương tự sau một vài giờ ...
David

Câu trả lời:


6

Đây là một hiện tượng thực sự thú vị (và gây phiền nhiễu) và tôi nhấn mạnh rằng chúng tôi tìm hiểu những gì đang xảy ra ở đây.

May mắn thay, Windows Server có một số chính sách kiểm toán chi tiết tốt kể từ năm 2008 và chúng tôi có thể sử dụng kiểm toán để theo dõi xem ai đã làm việc này. Để làm như vậy, chúng tôi sẽ cần:

  1. Tìm hiểu nơi sửa đổi SPN xảy ra
  2. Cho phép kiểm tra thay đổi đối tượng AD DS
  3. Đặt một kiểm toán ACE trên đối tượng
  4. Tái tạo lỗi
  5. Kiểm tra nhật ký bảo mật trên DC vi phạm

Tìm hiểu nơi sửa đổi SPN xảy ra:

Mở một dấu nhắc lệnh nâng cao trên bộ điều khiển miền và đưa ra lệnh này:

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

Đầu ra sẽ chứa tên của Bộ điều khiển miền, người ban đầu đã viết phiên bản hiện tại của giá trị thuộc tính servicePrincipalName: repadmin iz ông chủ

Cho phép kiểm tra thay đổi đối tượng AD DS:

Nếu chính sách kiểm toán toàn cầu chưa được xác định, bạn có thể thực hiện thay đổi này thành chính sách bảo mật cục bộ trên Bộ điều khiển miền được xác định trong bước trước đó

Mở Bảng điều khiển quản lý chính sách nhóm ( gpmc.msc) và xác định vị trí Default Domain Controllers Policyvà chỉnh sửa nó.

  1. Đi đến Computer Configuration -> Windows Settings -> Security Settings
  2. Chọn và mở rộng Local Policies -> Security Options
  3. Đảm bảo rằng Kiểm toán: Buộc cài đặt danh mục phụ chính sách kiểm toán ... được đặt thành Đã bật Buộc các danh mục con kiểm toán trong đó các danh mục cổ điển đang được áp dụng
  4. Chọn và mở rộng Advanced Audit Policy -> Audit Policies -> DS Access
  5. Đảm bảo rằng Thay đổi dịch vụ thư mục kiểm toán được đặt thành ít nhất là thành công Thay đổi dịch vụ thư mục kiểm toán

Đặt một kiểm toán ACE trên đối tượng:

Mở Active Directory Users and Computer ( dsa.msc) và kiểm tra cài đặt "Advanced Feature" trong menu "View".
Điều hướng đến đối tượng tài khoản máy tính, nhấp chuột phải vào nó và chọn Thuộc tính. Chọn tab Bảo mật và nhấn nút "Nâng cao".

Trong lời nhắc, chọn tab Kiểm toán và đảm bảo rằng "Viết tất cả các thuộc tính" đang được kiểm toán cho Mọi người . Nếu không, hoặc nếu bạn nghi ngờ, Thêm một mục mới:

  1. Nhấn Thêm .
  2. Nhập "Mọi người" làm hiệu trưởng mục tiêu
  3. Chọn "Thành công" làm loại
  4. Cuộn xuống dưới thuộc tính và kiểm tra "Viết dịch vụPrincipalName"
  5. Nhấn OK để thêm mục nhập và thoát ADUC

( Nếu bạn lười biếng, bạn chỉ cần chọn "Viết tất cả các thuộc tính" )

Tái tạo lỗi

Từ câu hỏi của bạn, có vẻ như SPN bị xóa mỗi phút hoặc lâu hơn, vì vậy đây có lẽ là bước dễ nhất. Làm một bài học âm nhạc 1 phút trong thời gian trung bình.

Kiểm tra nhật ký bảo mật trên DC vi phạm

Bây giờ đã một phút trôi qua, hãy kiểm tra nhật ký bảo mật trên Bộ điều khiển miền được xác định là người khởi tạo ở bước 1. Đây có thể là một vấn đề khó khăn trong các miền lớn, nhưng lọc có thể giúp với điều này:

  1. Mở Trình xem sự kiện và điều hướng đến Windows Logs -> Security
  2. Trong khung bên phải, chọn Lọc Nhật ký hiện tại
  3. Trong trường đầu vào có nội dung " <All Event IDs>", đầu vào 5136 (đây là id sự kiện để sửa đổi đối tượng thư mục)

Bây giờ bạn có thể tìm thấy một mục sự kiện cho mỗi thay đổi đối với servicePrincipalNamethuộc tính trên tài khoản máy tính.

Xác định "Chủ thể" chịu trách nhiệm cho sự thay đổi và xem nó đến từ đâu. Giết quá trình / máy / tài khoản đó với lửa!

Nếu đối tượng được xác định là SYSTEM, ANONYMOUS LOGONhoặc một mô tả chung chung tương tự, chúng tôi đang làm việc với xử lý nội bộ trên bộ điều khiển miền riêng của mình, và chúng tôi sẽ cần phải thoát ra khỏi một số Logging NTDS chẩn đoán để tìm hiểu những gì đang xảy ra. Vui lòng cập nhật câu hỏi nếu đây là trường hợp


Tôi đã thấy chính xác vấn đề tương tự trong nỗ lực khắc phục vấn đề LDAP SPN tương tự. Tôi đã làm theo đề xuất của bạn nhưng chỉ thấy các sửa đổi (thành công) của SPN và không có hồ sơ nào về việc loại bỏ chúng sau đó.
Grisha Levit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.