ข้อควรพิจารณาด้านความปลอดภัยของ JEA
JEA ช่วยคุณปรับปรุงมาตรการรักษาความปลอดภัยโดยการลดจำนวนผู้ดูแลระบบถาวรในเครื่องของคุณ JEA ใช้การกำหนดค่าเซสชัน PowerShell เพื่อสร้างจุดเริ่มต้นใหม่สำหรับผู้ใช้ในการจัดการระบบ ผู้ใช้ที่ต้องการการเข้าถึงเครื่องแบบยกระดับแต่ไม่จำกัดเพื่อทำงานด้านการดูแลระบบ สามารถรับสิทธิ์ในการเข้าถึงตำแหน่งข้อมูล JEA ได้ เนื่องจาก JEA อนุญาตให้ผู้ใช้เหล่านี้เรียกใช้คำสั่งการดูแลระบบโดยไม่ต้องมีสิทธิ์การเข้าถึงของผู้ดูแลระบบเต็มรูปแบบ คุณจึงสามารถลบผู้ใช้เหล่านั้นออกจากกลุ่มความปลอดภัยที่มีสิทธิพิเศษสูงได้
บัญชี Run-As
ตำแหน่งข้อมูล JEA แต่ละรายการมีบัญชี ทำงานตาม ที่กำหนดไว้ซึ่งจะดำเนินการดำเนินการของผู้ใช้ที่เชื่อมต่อ บัญชีนี้สามารถกำหนดค่าได้ในไฟล์การกำหนดค่าเซสชัน และบัญชีที่คุณเลือกมีความสำคัญต่อความปลอดภัยของอุปกรณ์ปลายทางของคุณ
บัญชีเสมือนเป็นวิธีที่แนะนำในการกำหนดค่าบัญชี ทำงานตาม บัญชีเสมือนเป็นบัญชีภายในชั่วคราวที่เกิดขึ้นเพียงครั้งเดียวซึ่งสร้างขึ้นเพื่อให้ผู้ใช้ที่เชื่อมต่อใช้ในช่วงระยะเวลาของเซสชัน JEA ทันทีที่เซสชั่นสิ้นสุดลง บัญชีเสมือนจะถูกทำลายและไม่สามารถใช้งานได้อีกต่อไป ผู้ใช้ที่เชื่อมต่อไม่ทราบข้อมูลประจำตัวสำหรับบัญชีเสมือน ไม่สามารถใช้บัญชีเสมือนเพื่อเข้าถึงระบบผ่านวิธีอื่น เช่น Remote Desktop หรือปลายทาง PowerShell ที่ไม่จำกัด
ตามค่าเริ่มต้น บัญชีเสมือนเป็นสมาชิกของกลุ่ม ผู้ดูแลระบบ ภายในเครื่อง การเป็นสมาชิกนี้ให้สิทธิ์เต็มรูปแบบในการจัดการทุกสิ่งบนระบบ แต่ไม่มีสิทธิ์ในการจัดการทรัพยากรบนเครือข่าย เมื่อผู้ใช้เชื่อมต่อกับเครื่องอื่นจากเซสชัน JEA บริบทผู้ใช้จะเป็นของบัญชีคอมพิวเตอร์ในระบบ ไม่ใช่บัญชีเสมือน
ตัวควบคุมโดเมนเป็นกรณีพิเศษเนื่องจากไม่มีกลุ่ม ผู้ดูแลระบบ ในเครื่อง แต่บัญชีเสมือนจะเป็นของ ผู้ดูแลระบบโดเมน และสามารถจัดการบริการไดเรกทอรีบนตัวควบคุมโดเมนได้ ข้อมูลประจำตัวของโดเมนยังคงถูกจำกัดสำหรับการใช้งานบนตัวควบคุมโดเมนซึ่งมีการสร้างอินสแตนซ์ของเซสชัน JEA การเข้าถึงเครือข่ายใด ๆ ดูเหมือนจะมาจากวัตถุคอมพิวเตอร์ตัวควบคุมโดเมนแทน
ในทั้งสองกรณี คุณสามารถกำหนดบัญชีเสมือนให้กับกลุ่มความปลอดภัยเฉพาะได้ โดยเฉพาะอย่างยิ่งเมื่องานนี้สามารถทำได้โดยไม่ต้องใช้สิทธิ์ของผู้ดูแลระบบภายในหรือโดเมน หากคุณมีกลุ่มความปลอดภัยที่กำหนดไว้สำหรับผู้ดูแลระบบของคุณอยู่แล้ว ให้มอบความเป็นสมาชิกบัญชีเสมือนให้กับกลุ่มนั้น การเป็นสมาชิกกลุ่มสำหรับบัญชีเสมือนนั้นจำกัดเฉพาะกลุ่มความปลอดภัยภายในเครื่องบนเวิร์กสเตชันและเซิร์ฟเวอร์สมาชิก บนตัวควบคุมโดเมน บัญชีเสมือนต้องเป็นสมาชิกของกลุ่มความปลอดภัยของโดเมน เมื่อบัญชีเสมือนถูกเพิ่มในกลุ่มความปลอดภัยตั้งแต่หนึ่งกลุ่มขึ้นไป บัญชีนั้นจะไม่อยู่ในกลุ่มเริ่มต้นอีกต่อไป (ผู้ดูแลระบบภายในหรือโดเมน)
ตารางต่อไปนี้สรุปตัวเลือกการกำหนดค่าที่เป็นไปได้และการอนุญาตผลลัพธ์สำหรับบัญชีเสมือน:
| Computer type | Virtual account group configuration | Local user context | Network user context |
|---|---|---|---|
| Domain controller | Default | Domain user, member of <DOMAIN>\Domain Admins |
Computer account |
| Domain controller | Domain groups A and B | Domain user, member of <DOMAIN>\A, <DOMAIN>\B |
Computer account |
| Member server or workstation | Default | Local user, member of BUILTIN\Administrators |
Computer account |
| Member server or workstation | Local groups C and D | Local user, member of <COMPUTER>\C and <COMPUTER>\D |
Computer account |
เมื่อคุณดูการตรวจสอบความปลอดภัยและบันทึกเหตุการณ์ของแอปพลิเคชัน คุณจะเห็นว่าเซสชันผู้ใช้ JEA แต่ละเซสชันมีบัญชีเสมือนที่ไม่ซ้ำกัน บัญชีที่ไม่ซ้ำใครนี้ช่วยให้คุณติดตามการกระทำของผู้ใช้ในตำแหน่งข้อมูล JEA กลับไปยังผู้ใช้เดิมที่รันคำสั่ง ชื่อบัญชีเสมือนเป็นไปตามรูปแบบ WinRM Virtual Users\WinRM_VA_ เริ่มบริการใหม่ในตำแหน่งข้อมูล JEA ชื่อผู้ใช้ที่เชื่อมโยงกับเหตุการณ์ตัวจัดการการควบคุมบริการใด ๆ จะเป็น WinRM Virtual Users\WinRM_VA_1_contoso_alice
บัญชีบริการที่จัดการกลุ่ม (gMSA) มีประโยชน์เมื่อเซิร์ฟเวอร์สมาชิกจำเป็นต้องมีสิทธิ์เข้าถึงทรัพยากรเครือข่ายในเซสชัน JEA ตัวอย่างเช่น เมื่อใช้ตำแหน่งข้อมูล JEA เพื่อควบคุมการเข้าถึงบริการ REST API ที่โฮสต์บนเครื่องอื่น การเขียนฟังก์ชันเพื่อเรียกใช้ REST API เป็นเรื่องง่าย แต่คุณต้องมีข้อมูลประจำตัวเครือข่ายเพื่อตรวจสอบสิทธิ์กับ API การใช้บัญชีบริการที่จัดการกลุ่มทำให้การกระโดดครั้งที่สองเป็นไปได้ ในขณะเดียวกันก็รักษาการควบคุมว่าคอมพิวเตอร์เครื่องใดที่สามารถใช้บัญชีได้ สมาชิกกลุ่มความปลอดภัย (ท้องถิ่นหรือโดเมน) ของ gMSA ได้กำหนดสิทธิ์ที่มีผลบังคับใช้สำหรับบัญชี gMSA
เมื่อมีการกำหนดค่าตำแหน่งข้อมูล JEA ให้ใช้ gMSA การกระทำของผู้ใช้ JEA ทั้งหมดดูเหมือนจะมาจาก gMSA เดียวกัน วิธีเดียวที่จะติดตามการดำเนินการกลับไปยังผู้ใช้เฉพาะคือการระบุชุดคำสั่งที่ทำงานในการถอดเสียงเซสชัน PowerShell
ข้อมูลรับรองการส่งผ่านจะถูกใช้เมื่อคุณไม่ได้ระบุบัญชี ทำงานเป็น PowerShell ใช้ข้อมูลประจำตัวของผู้ใช้ที่เชื่อมต่อเพื่อเรียกใช้คำสั่งบนเซิร์ฟเวอร์ระยะไกล หากต้องการใช้ข้อมูลรับรองแบบพาสทรู คุณต้องให้สิทธิ์ผู้ใช้ที่เชื่อมต่อเข้าถึงกลุ่มการจัดการที่มีสิทธิ์โดยตรง การกำหนดค่านี้ ไม่ แนะนำสำหรับ JEA หากผู้ใช้ที่เชื่อมต่อมีสิทธิ์ของผู้ดูแลระบบอยู่แล้ว พวกเขาสามารถข้าม JEA และจัดการระบบโดยใช้วิธีการเข้าถึงอื่น ๆ ได้
บัญชีที่ทำงานเป็นมาตรฐาน ช่วยให้คุณสามารถระบุบัญชีผู้ใช้ใดๆ ที่จะเรียกใช้เซสชัน PowerShell ทั้งหมดได้ การกำหนดค่าเซสชันที่ใช้บัญชี run-as แบบคงที่ (พร้อมพารามิเตอร์ -RunAsCredential) จะไม่รับรู้จาก JEA คำจำกัดความของบทบาทไม่ทำงานตามที่คาดไว้อีกต่อไป ผู้ใช้ทุกคนที่ได้รับอนุญาตให้เข้าถึงตำแหน่งข้อมูลจะได้รับมอบหมายบทบาทเดียวกัน
คุณไม่ควรใช้ RunAsCredential บนปลายทาง JEA เนื่องจากเป็นการยากที่จะติดตามการดำเนินการกลับไปยังผู้ใช้บางราย และขาดการสนับสนุนในการแมปผู้ใช้กับบทบาท
ACL ปลายทาง WinRM
เช่นเดียวกับตำแหน่งข้อมูลระยะไกลของ PowerShell ปกติ ตำแหน่งข้อมูล JEA แต่ละจุดมีรายการควบคุมการเข้าถึง (ACL) แยกต่างหากที่ควบคุมว่าใครสามารถตรวจสอบสิทธิ์การรับรองความถูกต้องกับตำแหน่งข้อมูล JEA ได้ หากกำหนดค่าไม่ถูกต้อง ผู้ใช้ที่เชื่อถือได้อาจไม่สามารถเข้าถึงตำแหน่งข้อมูล JEA ได้ และผู้ใช้ที่ไม่น่าเชื่อถืออาจสามารถเข้าถึงได้ WinRM ACL ไม่ส่งผลต่อการแมปผู้ใช้กับบทบาท JEA การแมปถูกควบคุมโดยฟิลด์ RoleDefinitions ในไฟล์การกำหนดค่าเซสชันที่ใช้ในการลงทะเบียนตำแหน่งข้อมูล
ตามค่าเริ่มต้น เมื่อตำแหน่งข้อมูล JEA มีความสามารถหลายบทบาท WinRM ACL จะได้รับการกำหนดค่าให้อนุญาตการเข้าถึงผู้ใช้ที่แมปทั้งหมด ตัวอย่างเช่น เซสชัน JEA ที่กำหนดค่าโดยใช้คำสั่งต่อไปนี้ให้สิทธิ์การเข้าถึงแบบเต็มแก่ CONTOSO\JEA_Lev1 และ CONTOSO\JEA_Lev2
$roles = @{ 'CONTOSO\JEA_Lev1' = 'Lev1Role'; 'CONTOSO\JEA_Lev2' = 'Lev2Role' }
New-PSSessionConfigurationFile -Path '.\jea.pssc' -SessionType RestrictedRemoteServer -RoleDefinitions $roles -RunAsVirtualAccount
Register-PSSessionConfiguration -Path '.\jea.pssc' -Name 'MyJEAEndpoint'
คุณสามารถตรวจสอบสิทธิ์ของผู้ใช้ได้ด้วย Get-PSSessionConfiguration cmdlet
Get-PSSessionConfiguration -Name 'MyJEAEndpoint' | Select-Object Permission
Permission
----------
CONTOSO\JEA_Lev1 AccessAllowed
CONTOSO\JEA_Lev2 AccessAllowed
หากต้องการเปลี่ยนผู้ใช้ที่มีสิทธิ์เข้าถึง ให้เรียกใช้ Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -ShowSecurityDescriptorUI สำหรับพร้อมท์แบบโต้ตอบหรือ Set-PSSessionConfiguration -Name 'MyJEAEndpoint' -SecurityDescriptorSddl เพื่ออัปเดตการอนุญาต ผู้ใช้ต้องมีสิทธิ์ เรียกใช้ เป็นอย่างน้อยเพื่อเข้าถึงตำแหน่งข้อมูล JEA
คุณสามารถสร้างตำแหน่งข้อมูล JEA ที่ไม่แมปบทบาทที่กำหนดกับผู้ใช้ทุกคนที่มีสิทธิ์เข้าถึงได้ ผู้ใช้เหล่านี้สามารถเริ่มเซสชัน JEA ได้ แต่มีสิทธิ์เข้าถึงเฉพาะ cmdlets เริ่มต้นเท่านั้น คุณสามารถตรวจสอบสิทธิ์ของผู้ใช้ในตำแหน่งข้อมูล JEA ได้โดยการเรียกใช้ Get-PSSessionCapability สำหรับข้อมูลเพิ่มเติม โปรดดูที่การตรวจสอบและการรายงานเกี่ยวกับ JEA
บทบาทสิทธิพิเศษน้อยที่สุด
เมื่อออกแบบบทบาทของ JEA สิ่งสำคัญคือต้องจำไว้ว่าบัญชีบริการแบบเสมือนและแบบกลุ่มที่ทำงานอยู่เบื้องหลังสามารถเข้าถึงเครื่องภายในเครื่องได้อย่างไม่จำกัด ความสามารถของบทบาท JEA ช่วยจำกัดคำสั่งและแอปพลิเคชันที่สามารถรันในบริบทที่ได้รับสิทธิ์นั้น บทบาทที่ได้รับการออกแบบอย่างไม่เหมาะสมสามารถยอมให้ออกคำสั่งที่เป็นอันตรายซึ่งอาจอนุญาตให้ผู้ใช้แยกตัวออกจากขอบเขต JEA หรือเข้าถึงข้อมูลที่ละเอียดอ่อนได้
ตัวอย่างเช่น พิจารณารายการความสามารถตามบทบาทต่อไปนี้:
@{
VisibleCmdlets = 'Microsoft.PowerShell.Management\*-Process'
}
ความสามารถของบทบาทนี้ทำให้ผู้ใช้สามารถเรียกใช้ PowerShell cmdlet ใดๆ ด้วยคำนาม กระบวนการ จากโมดูล Microsoft.PowerShell.Management ผู้ใช้อาจต้องเข้าถึง cmdlets เช่น Get-Process เพื่อดูว่าแอปพลิเคชันใดกำลังทำงานอยู่บนระบบ และ Stop-Process เพื่อปิดแอปพลิเคชันที่ไม่ตอบสนอง อย่างไรก็ตาม รายการนี้ยังอนุญาต Start-Process ซึ่งสามารถใช้เพื่อเริ่มต้นโปรแกรมที่ต้องการด้วยสิทธิ์ผู้ดูแลระบบเต็มรูปแบบ ไม่จำเป็นต้องติดตั้งโปรแกรมภายในระบบ ผู้ใช้ที่เชื่อมต่อสามารถเริ่มโปรแกรมจากการแชร์ไฟล์ที่ให้สิทธิ์ผู้ดูแลระบบภายในแก่ผู้ใช้ เรียกใช้มัลแวร์ และอื่นๆ
เวอร์ชันที่ปลอดภัยยิ่งขึ้นของความสามารถในบทบาทเดียวกันนี้จะมีลักษณะดังนี้:
@{
VisibleCmdlets = 'Microsoft.PowerShell.Management\Get-Process',
'Microsoft.PowerShell.Management\Stop-Process'
}
หลีกเลี่ยงการใช้ไวด์การ์ดในความสามารถของบทบาท อย่าลืมตรวจสอบสิทธิ์ผู้ใช้ที่มีประสิทธิภาพเป็นประจำเพื่อดูว่าผู้ใช้สามารถเข้าถึงคำสั่งใดได้ สำหรับข้อมูลเพิ่มเติม โปรดดูส่วน ตรวจสอบสิทธิ์ที่มีประสิทธิผล ของบทความการตรวจสอบและการรายงานใน JEA
คำแนะนำแนวทางปฏิบัติที่ดีที่สุด
ต่อไปนี้เป็นคำแนะนำแนวทางปฏิบัติที่ดีที่สุดเพื่อให้มั่นใจถึงความปลอดภัยของตำแหน่งข้อมูล JEA ของคุณ:
จำกัดการใช้งานและความสามารถของผู้ให้บริการ PowerShell
ตรวจสอบวิธีการใช้ผู้ให้บริการที่ได้รับอนุญาตเพื่อให้แน่ใจว่าคุณไม่สร้างช่องโหว่ในเซสชันที่กำหนดค่าไว้
คำเตือน
ไม่อนุญาตผู้ให้บริการ FileSystem หากผู้ใช้สามารถเขียนไปยังส่วนใดส่วนหนึ่งของระบบไฟล์ได้ ก็เป็นไปได้ที่จะข้ามการรักษาความปลอดภัยโดยสิ้นเชิง
ไม่อนุญาตผู้ให้บริการ ใบรับรอง เมื่อเปิดใช้งานผู้ให้บริการ ผู้ใช้จะสามารถเข้าถึงคีย์ส่วนตัวที่เก็บไว้ได้
ไม่อนุญาตให้ใช้คำสั่งที่สามารถสร้าง runspaces ใหม่ได้
คำเตือน
*-Job cmdlet สามารถสร้าง runspaces ใหม่ได้โดยไม่มีข้อจำกัด
ไม่อนุญาตให้ Trace-Command cmdlet
คำเตือน
การใช้ Trace-Command จะนำคำสั่งที่ติดตามทั้งหมดมาสู่เซสชัน
อย่าสร้างการใช้งานพร็อกซีของคุณเองสำหรับคำสั่งที่ถูกจำกัด
PowerShell มีชุดคำสั่งพร็อกซีสำหรับสถานการณ์คำสั่งแบบจำกัด คำสั่งพร็อกซีเหล่านี้ช่วยให้แน่ใจว่าพารามิเตอร์อินพุตไม่สามารถกระทบต่อความปลอดภัยของเซสชันได้ คำสั่งต่อไปนี้มีพรอกซีแบบจำกัด:
Exit-PSSessionGet-CommandGet-FormatDataGet-HelpMeasure-ObjectOut-DefaultSelect-Objectหากคุณสร้างการใช้งานคำสั่งเหล่านี้ด้วยตนเอง คุณอาจอนุญาตให้ผู้ใช้รันโค้ดที่คำสั่งพร็อกซี JEA ห้ามโดยไม่ได้ตั้งใจ
JEA ไม่ได้ป้องกันผู้ดูแลระบบ
หลักการสำคัญประการหนึ่งของ JEA คืออนุญาตให้ผู้ที่ไม่ใช่ผู้ดูแลระบบทำงานด้านการดูแลระบบบางอย่างได้ JEA ไม่ได้ป้องกันผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบอยู่แล้ว ผู้ใช้ที่เป็น ผู้ดูแลระบบโดเมน ผู้ดูแลระบบ ในพื้นที่ หรือกลุ่มที่ได้รับสิทธิพิเศษสูงอื่นๆ สามารถหลบเลี่ยงการป้องกันของ JEA ด้วยวิธีอื่นได้ ตัวอย่างเช่น พวกเขาสามารถลงชื่อเข้าใช้ด้วย RDP ใช้คอนโซล MMC ระยะไกล หรือเชื่อมต่อกับตำแหน่งข้อมูล PowerShell ที่ไม่จำกัด นอกจากนี้ ผู้ดูแลระบบภายในระบบยังสามารถแก้ไขการกำหนดค่า JEA เพื่อเพิ่มผู้ใช้เพิ่มเติม หรือเปลี่ยนความสามารถของบทบาทเพื่อขยายขอบเขตของสิ่งที่ผู้ใช้สามารถทำได้ในเซสชัน JEA ของตน สิ่งสำคัญคือต้องประเมินสิทธิ์เพิ่มเติมของผู้ใช้ JEA เพื่อดูว่ามีวิธีอื่นในการรับสิทธิ์เข้าถึงระบบแบบพิเศษหรือไม่
นอกเหนือจากการใช้ JEA สำหรับการบำรุงรักษาในแต่ละวันตามปกติแล้ว การมีระบบจัดการการเข้าถึงสิทธิพิเศษแบบทันเวลาก็เป็นเรื่องปกติ ระบบเหล่านี้อนุญาตให้ผู้ใช้ที่ได้รับมอบหมายเป็นผู้ดูแลระบบภายในได้ชั่วคราวหลังจากที่ดำเนินการเวิร์กโฟลว์ที่บันทึกการใช้สิทธิ์เหล่านั้นแล้วเท่านั้น