Kerberos Unconstrained Delegation เป็น feature นึงของ Windows มาตั้งแต่ Windows Server 2000 โดยมี scenario ประมาณว่า หากมีการใช้งานที่ authenticate ผ่าน web server ด้วย Kerberos แล้วต้องการไปบอกให้ database server ได้รับทราบด้วย ตัว Web Server จะทำการ update record ไปยัง Database Server โดยการแสดงตัวเป็นตัวแทนของ user นั้นๆได้ โดยวิธีนี้เรียกว่า “Delegation”

โดยการเป็นตัวแทนนั้น (Delegation) ทาง Microsoft ได้ออกแบบ level ไว้ ทาง Domain Admin สามารถ enable delegation level ได้โดยการกำหนดตามภาพ


โดยหากเป็น option ล่างสุด จะต้องกำหนดโดย Domain Admin บนเครื่อง AD ระบุว่า Kerberos services ไหนบนเครื่องบ้างที่สามารถทำ delegation ได้บ้าง ทีนี้เราสามารถตรวจสอบได้ว่าเครื่องไหนมี service ที่รองรับการ authentication แบบนี้ได้โดยการใช้คำสั่ง

ทีนี้เวลาจะทำงาน authentication ไปยัง Kerberos ปกติจะทำดังนี้

1. User ทำการใส่ username & password โดยระบบของเครื่องจะทำการเปลี่ยน password ให้เป็น NTLM Hash แล้วทำการเข้ารหัส hash ด้วย timestamp จากนั้นส่งไปยัง Domain Controller (KDC) ซึ่งเรียกว่า​ AS-REQ

2. KDC จะเช็ค user information แล้วสร้าง Ticket-Granting Ticket (TGT). โดย TGT จะถูก sign และเข้ารหัสแล้วส่งไปยัง USER ซึ่งเรียกว่า AS-REP ซึ่ง Kerberos service (KRBTGT) ที่อยู่ใน domain เท่านั้นถึงจะอ่าน TGT ได้

3. เมื่อ User ได้รับแล้วก็จะเก็บไว้ แล้ว User จะทำการแสดง TGT ต่อ Domain Controller เมื่อมีทำการร้องขอ Ticket Granting Service (TGS) หรือเรียกว่า TGS-REQ. เมื่อ DC เปิด TGT และตรวจสอบ PAC checksum – หาก DC เช็คแล้วพบว่า TGT นั้น OK. ตัว DC จะทำการ copy ข้อมูลจาก TGT นั้นแล้วทำการสร้าง TGS ticket

4. TGS จะถูกเข้ารหัสด้วย NTLM hash ของ user แล้วทำการส่งกลับไปยัง Client ซึ่งเรียกว่า TGS-REP

5. เมื่อ User ทำการเชื่อมต่อไปยัง server ใดๆ โดยการส่ง TGS Ticket ไปให้

เมื่อมีการ enable Kerberos Unconstrained Delegation บน server ใดๆตอนที่ทำการสร้าง TGS-REQ ที่ถูกระบุไว้ในขั้นตอนที่ 3 ตัว DC จะทำการใส่ข้อมูลของ service ของ server นั้นๆเข้าไปด้วย(ในกรณีกำหนดเป็น service) เมื่อ user ใช้ TGS ส่งไปยัง server เพื่อทำการ access service ตัว server จะเปิด TGS แล้วเอา TGT ของ user แล้วจำไว้ใน LSASS จากนั้น server ก็จะสามารถแสดงตัวเป็น user นั้นๆได้แบบไม่มีขีดจำกัด

ทีนี้จะเห็นว่า Application Server นั้นคือแหล่งขุมทรัพย์ดีๆนี่เอง หากพบเจอเครื่องใดๆเป็น Application Server ที่ support  Kerberos Unconstrained Delegation ไว้ มีความเป็นไปได้ว่า Attacker จะทำการโจมตีเพื่อยึด จากนั้นก็หลอกล่อให้ Domain Admin เข้าใช้งาน Application Server ดังกล่าวเพื่อจะเอาสิทธิ์ของ domain admin ไปใช้นั่นเอง

ซึ่งเมื่อ domain admin เข้าถึง service ใดๆของ Application Server ทาง domain admin จะส่ง TGS (ที่มี TGT) มาให้ service ของ Application Server โดยอัตโนมัติ

เราสามารถ extract TGT ticket ออกมาแล้วนำไปใช้งานอื่นๆได้เรื่อยๆจนกระทั่งหมดเวลา (ticket lifetime)

วิธีการป้องกัน

  1. อย่าใช้ Kerberos Unconstrained Delegation หรือต้องการจะให้ใช้จริงๆ ให้ระบุเป็น service เอาแทน
  2. กำหนดใน user แต่ละ account สำคัญว่า ““Account is sensitive and cannot be delegated” เพื่อป้องกันการ delegate
  3. ตั้งแต่ Windows Server 2012 เป็นต้นเราสามารถกำหนดให้ user ที่สำคัญอยู่ใน Protected Users” group เพื่อป้องกันการทำ delegate ได้

Source:: ADSecurity.org