ค้นหาเว็บไซต์

ตรวจสอบการเป็นสมาชิกกลุ่ม Active Directory ด้วย PowerShell


การเปลี่ยนแปลง Active Directory เกิดขึ้นบ่อยครั้ง โดยเฉพาะเมื่อองค์กรใหญ่ขึ้น Active Directory เป็นองค์ประกอบที่สำคัญสำหรับทุกองค์กร การตรวจสอบให้แน่ใจว่าผู้ใช้ที่เหมาะสมเป็นสมาชิกของกลุ่มที่ถูกต้องเป็นสิ่งสำคัญ โชคดีที่คุณมาถูกที่แล้วเพื่อตรวจสอบการเปลี่ยนแปลงการเป็นสมาชิกกลุ่มไดเรกทอรีที่ใช้งานอยู่

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีตรวจสอบการเปลี่ยนแปลงการเป็นสมาชิกกลุ่ม Active Directory คุณจะทำได้โดยการตั้งค่านโยบายการตรวจสอบและใช้ PowerShell เพื่อค้นหาเหตุการณ์ในบันทึกเหตุการณ์ของ Windows

มาเริ่มกันเลย!

ข้อกำหนดเบื้องต้น

บทความนี้จะเป็นบทช่วยสอนแบบลงมือปฏิบัติจริง หากคุณต้องการติดตาม โปรดแน่ใจว่าคุณมีสิ่งต่อไปนี้:

  • โดเมน Active Directory - บทช่วยสอนนี้จะใช้ Windows Server 2019 แต่ตัวควบคุมโดเมน (DC) ที่ใช้ Windows 2008 R2 หรือใหม่กว่าควรใช้งานได้ บทช่วยสอนจะใช้โดเมนชื่อ test.local กับ DC สองตัว ได้แก่ DC01 และ DC02
  • พีซี Windows ที่เข้าร่วมโดเมนที่ติดตั้ง PowerShell บทช่วยสอนนี้จะใช้ Windows 10 ร่วมกับ Windows PowerShell v5.1
  • บัญชีผู้ใช้ Active Directory ที่จะเปลี่ยนกลุ่ม บทช่วยสอนนี้จะใช้บัญชีผู้ใช้ชื่อ User1
  • บัญชีผู้ใช้ในฐานะสมาชิกของกลุ่มผู้ดูแลระบบโดเมนในโดเมน

การสร้างและการกำหนดนโยบายการตรวจสอบ

เมื่อต้องการตรวจสอบการเปลี่ยนแปลงการเป็นสมาชิกกลุ่ม Active Directory คุณต้องตรวจสอบให้แน่ใจก่อนว่าการเปลี่ยนแปลงเหล่านั้นได้รับการบันทึกไว้ที่ใดที่หนึ่ง ตามค่าเริ่มต้น เหตุการณ์สำคัญหลายๆ เหตุการณ์จะไม่ถูกบันทึกไว้ในบันทึกเหตุการณ์ หากต้องการบอกให้ Windows เก็บการเปลี่ยนแปลงการเป็นสมาชิกกลุ่ม Active Directory ที่สำคัญ คุณต้องกำหนดนโยบายการตรวจสอบ

นโยบายการตรวจสอบจะสร้างชุดกฎที่บอกให้ Windows และบริการอื่นๆ บันทึกเหตุการณ์บางอย่างลงในบันทึกเหตุการณ์ของ Windows โดยค่าเริ่มต้นจะไม่เป็นเช่นนั้น เมื่อสร้างแล้ว คุณต้องกำหนดนโยบายการตรวจสอบผ่านนโยบายกลุ่มให้กับเครื่องเป้าหมาย (ตัวควบคุมโดเมนในกรณีนี้)

มาเริ่มบทช่วยสอนนี้ด้วยการสร้างนโยบายการตรวจสอบเพื่อบังคับให้ Windows บันทึกการเปลี่ยนแปลงการเป็นสมาชิกกลุ่ม Active Directory ที่สำคัญในบันทึกเหตุการณ์ของ Windows

หากต้องการสร้างนโยบายการตรวจสอบใหม่ คุณต้องสร้าง Group Policy Object (GPO) และกำหนดนโยบายการตรวจสอบด้วย GPO

บนตัวควบคุมโดเมนหรือเครื่องที่เข้าร่วมโดเมนที่ติดตั้ง Windows Remote Administration Tools (RSAT):

1. เปิดคอนโซลการจัดการนโยบายกลุ่ม (GPMC) และสร้าง GPO ใหม่โดยแนบไปกับหน่วยองค์กร (OU) ตัวควบคุมโดเมน โดยตั้งชื่อให้มีความหมาย เช่น Audit Active Directory Group Memberships การเปลี่ยนแปลง

2. เปิด GPO และขยาย การกำหนดค่าคอมพิวเตอร์ —> การตั้งค่า Windows —> การกำหนดค่านโยบายการตรวจสอบขั้นสูง —> นโยบายการตรวจสอบ

การคลิกแต่ละหมวดหมู่ เช่น การเข้าสู่ระบบบัญชี, การเข้าถึง DS และ ระบบ จะทำให้หมวดหมู่มีรายละเอียดมากขึ้นในบานหน้าต่างด้านขวามือดังที่คุณเห็น ด้านล่าง.

3. ตอนนี้ คลิกที่ การจัดการบัญชี ในหน้าต่างด้านซ้าย และเปิดหมวดหมู่ย่อย การจัดการกลุ่มความปลอดภัยการตรวจสอบ ในหน้าต่างด้านขวา

4. เปิดใช้งานช่อง กำหนดค่าเหตุการณ์การตรวจสอบต่อไปนี้: ที่มี ความสำเร็จ และ ความล้มเหลว เมื่อนำนโยบายการตรวจสอบนี้ไปใช้กับเครื่องแล้ว ระบบจะบันทึกความพยายามทั้งหมดในการแก้ไขกลุ่ม นอกจากนี้ ระบบจะบันทึกความพยายามที่สำเร็จและไม่สำเร็จทั้งหมด เช่น เมื่อผู้ใช้พยายามทำการเปลี่ยนแปลงแต่ไม่ได้รับอนุญาต

5. คลิก ตกลง ในช่อง คุณสมบัติการจัดการกลุ่มความปลอดภัยการตรวจสอบ และปิด GPO ตอนนี้คุณได้ตั้งค่า GPO พร้อมนโยบายการตรวจสอบที่กำหนดไว้แล้วพร้อมที่จะเริ่มทำงาน!

GPO ควรเชื่อมโยงกับ OU ตัวควบคุมโดเมน Active Directory ด้วยเหตุนี้ เมื่อใดก็ตามที่คุณแก้ไข GPO แต่ละ DC ใน OU นั้นควรใช้นโยบายในระหว่างกระบวนการรีเฟรชนโยบายกลุ่มโดยทั่วไป

การตรวจสอบเหตุการณ์การเปลี่ยนแปลงสมาชิกกลุ่มด้วย Windows Event Viewer

ตอนนี้คุณได้สร้างนโยบายการตรวจสอบและเชื่อมโยงกับ Domain Controller OU แล้ว เรามาทำการเปลี่ยนแปลงและทดสอบกัน

บนตัวควบคุมโดเมนหรือเครื่องที่เข้าร่วมโดเมนที่ติดตั้ง Windows Remote Administration Tools (RSAT):

1. เปิดผู้ใช้ Active Directory และคอมพิวเตอร์ (ADUC) และเปิดบัญชีผู้ใช้ใดๆ ที่คุณสามารถทดสอบได้ บทช่วยสอนนี้จะใช้บัญชีชื่อ User1

2. คลิกที่แท็บ MemberOf ที่นี่คุณจะเห็นแต่ละกลุ่มที่ผู้ใช้เป็นสมาชิกอยู่ คลิก เพิ่ม และพิมพ์ ผู้ดูแลระบบองค์กร และคลิก ตกลง เพื่อเพิ่มผู้ใช้ลงในกลุ่มผู้ดูแลระบบองค์กร

3. ตอนนี้ ให้เปิด Windows Event Viewer ขยาย บันทึกของ Windows และคลิกที่บันทึกเหตุการณ์ ความปลอดภัย

ในบานหน้าต่างเหตุการณ์ คุณจะเห็นว่า Windows ได้บันทึกเหตุการณ์ด้วย ID 4756

เมื่อแก้ไขกลุ่ม Active Directory คุณจะเห็นหนึ่งในสามเหตุการณ์ที่แตกต่างกันบันทึกไว้ในบันทึกเหตุการณ์ความปลอดภัย ขึ้นอยู่กับประเภทของกลุ่มที่แก้ไข 4728 สำหรับกลุ่มส่วนกลาง 4732 สำหรับกลุ่มโดเมนภายใน และ 4756 สำหรับกลุ่มสากล

4. เปิดกิจกรรมด้วย ID 4756 และคุณจะเห็นข้อมูลทั้งหมดที่ Windows บันทึกเกี่ยวกับกิจกรรมการเปลี่ยนแปลงสมาชิกกลุ่มนี้

  • เรื่อง - ผู้ใช้ที่ทำการเปลี่ยนแปลง นี่จะแสดงชื่อบัญชีผู้ใช้ที่คุณเข้าสู่ระบบ
  • สมาชิก - ผู้ใช้ที่ได้รับผลกระทบจากการเปลี่ยนแปลงนี้ นี่คือผู้ใช้1
  • กลุ่ม - กลุ่มที่สมาชิกเพิ่ม นี่คือกลุ่มผู้ดูแลระบบองค์กร

เหตุการณ์การเปลี่ยนแปลงสมาชิกกลุ่มการตรวจสอบด้วย PowerShell

ขณะนี้ตัวควบคุมโดเมนของคุณกำลังบันทึก สมาชิกกลุ่มจะเปลี่ยนเหตุการณ์เป็นบันทึกเหตุการณ์ของ Windows คุณไม่เพียงแค่ต้องใช้ Windows Event Viewer เท่านั้น คุณสามารถใช้ PowerShell ได้เช่นกัน!

คุณใหม่กับการทำงานกับบันทึกเหตุการณ์ของ Windows และ PowerShell หรือไม่ รับขั้นตอนแรกเกี่ยวกับข้อมูลพื้นฐาน PowerShell และ Windows Event Log ที่ PowerShellcenter.com

สมมติว่าคุณยังอยู่บนเดสก์ท็อปของ DC:

1. เปิด Windows PowerShell

2. เรียกใช้ Get-WinEvent cmdlet เพื่อค้นหาบันทึกเหตุการณ์ Security เพื่อค้นหาเหตุการณ์ทั้งหมดที่มี ID เป็น 4756 ดังที่แสดงด้านล่าง คำสั่งนี้จะส่งคืนเหตุการณ์การเปลี่ยนแปลงความเป็นสมาชิกกลุ่มทั้งหมดสำหรับกลุ่มสากล

เปลี่ยนค่า ID เป็น 4728 สำหรับกลุ่มส่วนกลางหรือ 4732 สำหรับกลุ่มภายในโดเมน

Get-WinEvent -FilterHashtable @{ Logname='Security'; ID='4756'}

พารามิเตอร์ FilterHashtable เป็นแฮชเทเบิลและยอมรับค่าเป็นคู่คีย์-ค่า เช่น <รหัส>@{Key1='Value1' ; Key2='Value2'}.

3. หากคุณไม่ต้องการเห็นการเปลี่ยนแปลงในกลุ่ม Active Directory ทั้งหมด ให้จำกัดเอาต์พุตโดยใช้ Where-Object cmdlet โดยดูใน ข้อความ คุณสมบัติสำหรับสตริง Enterprise Admins ดังที่แสดงด้านล่าง

Get-WinEvent -FilterHashtable @{ Logname='Security'; ID='4756'}  | Where-Object {$_.Message -like "Enterprise Admins"} | Format-Table -AutoSize -Wrap

PowerShell จะส่งคืนเหตุการณ์ทั้งหมดที่มีการเปลี่ยนแปลงการเป็นสมาชิกกลุ่มผู้ดูแลระบบองค์กร

การตรวจสอบกลุ่มผู้ดูแลระบบ Active Directory

ในส่วนก่อนหน้านี้ คุณได้เรียนรู้วิธีตรวจสอบการเปลี่ยนแปลงความเป็นสมาชิกกลุ่มใน Active Directory สำหรับกลุ่มเดียว เนื่องจากเป็นไปด้วยดี ทำไมไม่ตรวจสอบกลุ่มบิวท์อินทั้งหมดใน Active Directory ล่ะ

การระบุกลุ่ม Active Directory เริ่มต้น (ระดับผู้ดูแลระบบ)

Active Directory มาพร้อมกับชุดกลุ่มผู้ดูแลระบบ กลุ่มเหล่านี้สามารถกำหนดสิทธิ์พิเศษสำหรับผู้ใช้ภายในได้ ก่อนอื่นเรามาดูวิธีค้นหากลุ่มผู้ดูแลระบบเหล่านี้ทั้งหมดกันก่อน

เมื่อต้องการค้นหากลุ่มผู้ดูแลระบบเหล่านี้ คุณต้องเข้าใจถึงความเหมือนกันระหว่างกลุ่มเหล่านี้ก่อน ความเหมือนกันนั้นเป็นรูปแบบในตัวระบุความปลอดภัย (SID) แต่ละออบเจ็กต์ใน Active Directory มีตัวระบุความปลอดภัย (SID) ที่ไม่ซ้ำกัน Windows ใช้ SID แทนชื่อกลุ่มทุกครั้งที่อ้างอิงวัตถุ

กลุ่มความปลอดภัยการดูแลระบบ Active Directory ทั้งหมดมี SID ที่ลงท้ายด้วยน้อยกว่า 1,000 เสมอเรียกว่า Relevant Identifier (RID) เมื่อทราบสิ่งนี้แล้ว คุณจะสร้างโค้ด PowerShell เพื่อค้นหาโค้ดเหล่านั้น

สมมติว่าคุณยังคงเปิด PowerShell บนตัวควบคุมโดเมน:

1. เรียกใช้คำสั่ง Get-ADGroup และส่งคืนเฉพาะ SID ของกลุ่มดังที่แสดงด้านล่าง

(Get-ADGroup 'Enterprise Admins').SID

คุณจะเห็นจากภาพหน้าจอด้านล่าง SID แบ่งออกเป็นสองส่วน โดเมน SID และ RID

โดเมน SID เหมือนกันสำหรับออบเจ็กต์ทั้งหมดในโดเมนเดียวกัน เฉพาะ RID เท่านั้นที่เปลี่ยนแปลง

2. ตอนนี้ใช้คำสั่งเดียวกันนั้น แต่คราวนี้ ทำการค้นหากลุ่มทั้งหมดที่มี RID 1,000 หรือน้อยกว่า เพื่อรับรายการกลุ่มผู้ดูแลระบบ Active Directory ทั้งหมด

## Find the domain SID to use in the filter
 $LocalDomain=(Get-ADDomain).DomainSID
## Search for all AD groups ensuring the objectSID property is returned.
## Then filter the results based on the SID ending in a dash and three numbers.
 Get-ADGroup -Properties objectSid -Filter * |where {($_.ObjectSid.Value -match ("-\d{3}$")) -and ($_.Objectsid.value.length -gt $LocalDomain.Value.length)} | select name,Objectsid,GroupScope

การสร้างสคริปต์ PowerShell เพื่อตรวจสอบการเปลี่ยนแปลงกลุ่มผู้ดูแลระบบทั้งหมด

ขณะนี้คุณมีรหัสที่จำเป็นในการค้นหากลุ่มผู้ดูแลระบบทั้งหมด และจากส่วนก่อนหน้านี้ รหัส PowerShell ที่จำเป็นในการสืบค้นบันทึกเหตุการณ์ ตอนนี้มารวมสิ่งเหล่านี้เพื่อสร้างเครื่องมือ PowerShell ที่มีประโยชน์

เปิดตัวแก้ไขโค้ดที่คุณชื่นชอบ คัดลอก/วางสคริปต์ต่อไปนี้แล้วบันทึก คำอธิบายของโค้ดทั้งหมดเป็นแบบอินไลน์

## Create an array to save all events
$EventsResult=@()

## Find the Domain SID to filter administrative groups
$LocalDomain=(Get-addomain).domainsid

## Define the earliest event date to search from
$dateFrom=(Get-Date).AddDays(-1)

## Find all of the AD administrative groups
$ADAdminGroups=(Get-ADGroup -Properties objectSid -Filter * |where {($_.ObjectSid.Value -match ("-\d{3}$")) -and ($_.Objectsid.value.length -gt $LocalDomain.Value.length)}).Name

## Query the Security event log for all events with IDs 4728, 4732 or 4756
## that start from $dateFrom and end right now.
$PossibleEvents= Get-WinEvent -FilterHashtable @{id=(4728,4732,4756)
                                                logname="Security"
                                                StartTime=$dateFrom
                                                EndTime=(get-date)}

## Begin processing each Windows event found
Foreach ($Events in $PossibleEvents) {
	## Check if the event was for a membership change for an administrative group
	if ($ADAdminGroups | where {$Events.message -match $_}){
		## If so, add an object with the time of event and the details to the $EventResult array
		$Result=[pscustomObject]@{
			Date=($foreach.current).TimeCreated
			Message=($foreach.current).message
		}
    
    $EventsResult+=$Result           
	}
}
## If any events found, send an email with the event as the body
if ($EventsResult){
	Send-MailMessage -From "[email " -To "[email " -Body ($EventsResult |Out-String) -SmtpServer Out.YourSMTPServer.com
}

แทนที่อาร์กิวเมนต์ SMTPServer ด้วยเซิร์ฟเวอร์ SMTP ที่ถูกต้อง นอกจากนี้ หากคุณใช้ Office365 คุณอาจต้องตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ SMTP ก่อน

การใช้สคริปต์นี้ให้รายละเอียดว่าใครเป็นผู้เปลี่ยนแปลงอะไร และเป็นวิธีการมาตรฐานในโซลูชันด้านความปลอดภัยต่างๆ

บทสรุป

ขณะนี้คุณมีความรู้ในการตรวจสอบการเปลี่ยนแปลงความเป็นสมาชิกกลุ่มใน Active Directory โดยใช้ PowerShell แล้ว คุณจะใช้สคริปต์ดังกล่าวอย่างไร? คุณจะปรับปรุงได้อย่างไรเพื่อช่วยให้องค์กรของคุณเปลี่ยนแปลงความเป็นสมาชิกกลุ่มตรวจสอบใน Active Directory

บทความที่เกี่ยวข้อง