อธิบายการโจมตี Kerberoasting: วิธีป้องกัน
เนื่องจากพาดหัวข่าวเกี่ยวกับภัยคุกคามทางไซเบอร์ที่มุ่งเป้าไปที่องค์กรต่างๆ อยู่ตลอดเวลาในปัจจุบัน จึงเป็นเรื่องยากที่จะตามทัน บล็อกนี้กล่าวถึงการโจมตี Kerberoasting ซึ่งเป็นเทคนิคการโจมตีทั่วไปที่ฝ่ายตรงข้ามพยายามถอดรหัสรหัสผ่านของบัญชีบริการภายใน Active Directory
การโจมตีเหล่านี้เกิดขึ้นได้อย่างไร? อาชญากรไซเบอร์พยายามทำอะไรให้สำเร็จ? และคุณจะต่อสู้กับพวกมันได้อย่างไร?
เราจะเจาะลึกรายละเอียดทั้งหมดเหล่านั้นและอีกมากมายในโพสต์นี้
การเคอร์เบอโรสต์คืออะไร?
Kerberoasting คือการโจมตีด้วยรหัสผ่านแบบเดรัจฉานบน Kerberos ซึ่งเป็นระบบการตรวจสอบสิทธิ์และการอนุญาตที่เป็นส่วนหนึ่งของ Active Directory การโจมตีด้วยรหัสผ่านแบบ brute-force คือการโจมตีที่ผู้โจมตีพยายามใช้รหัสผ่านที่แตกต่างกันจำนวนมากกับบัญชีหนึ่งๆ อย่างรวดเร็วโดยหวังว่าจะพบรหัสผ่านที่ตรงกัน การโจมตีแบบ Brute Force สามารถลองใช้รหัสผ่านแบบสุ่มโดยสิ้นเชิง หรืออาจใช้การคาดเดาที่มีการศึกษามากขึ้น (เช่นเดียวกับการพ่นรหัสผ่านและการบรรจุข้อมูลประจำตัว)
เทคนิคการบังคับเดรัจฉานมักจะบรรเทาลงโดยระบบการตรวจสอบสิทธิ์เพื่อทำให้เป็นเทคนิคที่น่าสนใจน้อยลงสำหรับผู้โจมตี Active Directory สามารถล็อกบัญชีที่ได้รับการป้อนรหัสผ่านไม่ถูกต้องหลายครั้งเกินไปชั่วคราวได้
สิ่งที่ทำให้ Kerberoasting เป็นเทคนิคที่มีประโยชน์สำหรับผู้โจมตีก็คือเป็นการโจมตีแบบ "ออฟไลน์" ในการโจมตีแบบออฟไลน์ การเดารหัสผ่านสามารถทำได้จากระบบการตรวจสอบสิทธิ์ และอาจอยู่นอกเครือข่ายของผู้ปกป้อง ซึ่งหมายความว่าระบบการตรวจสอบสิทธิ์ไม่สามารถลดการโจมตีได้ และการโจมตีอาจตรวจพบได้ยากมากโดยใช้ซอฟต์แวร์ตรวจสอบ
ทำความเข้าใจเกี่ยวกับ Kerberos
เพื่อให้เข้าใจ Kerberoasting อย่างถ่องแท้ อันดับแรกควรทำความเข้าใจบางสิ่งเกี่ยวกับ Kerberos ก่อน นี่แทบจะไม่ใช่คำอธิบายที่ละเอียดถี่ถ้วน Kerberos อาจเป็นหัวข้อที่ซับซ้อนมาก มีเรื่องตลกที่ @SwiftOnSecurity ได้ยินเกี่ยวกับ Kerberos: “ครั้งหนึ่งฉันพยายามอธิบาย Kerberos ให้ใครบางคนฟัง แล้วเราทั้งคู่ก็ไม่เข้าใจ ”
Kerberos ถูกใช้โดยระบบการรับรองความถูกต้องและการอนุญาตอื่นที่ไม่ใช่ Active Directory แต่เพื่อความเรียบง่าย เราจะดูตัวอย่างที่ตรงไปตรงมาโดยเฉพาะสำหรับ Active Directory
เมื่อผู้ใช้ตรวจสอบสิทธิ์ตัวควบคุมโดเมน Active Directory แพ็คเกจ จะถูกเข้ารหัสบนคอมพิวเตอร์ไคลเอนต์ผ่าน "ผู้ให้บริการข้อมูลประจำตัว" ซึ่งมีรหัสผ่านของผู้ใช้ตามที่ป้อน ตัวควบคุมโดเมนจะถอดรหัสลับแพ็คเกจและเปรียบเทียบรหัสผ่านของผู้ใช้กับรหัสผ่านที่จัดเก็บไว้ใน Active Directory
หากตรงกัน ตัวควบคุมโดเมนก็พร้อมที่จะรับรองว่าผู้ใช้ที่เข้าสู่ระบบคือสิ่งที่พวกเขาบอกว่าเป็น ตัวควบคุมโดเมนจะส่งสองสิ่งกลับไปยังคอมพิวเตอร์ไคลเอนต์: ตั๋วและคีย์เซสชัน ตั๋วเป็นวิธีการพิสูจน์ว่าตัวควบคุมโดเมนได้รับรองตัวตนของผู้ใช้แล้ว และคีย์เซสชันมีการสื่อสารที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ คีย์เซสชันถูกเข้ารหัสโดยใช้รหัสผ่าน (โปรดจำไว้ว่า!)
ป้อนตั๋วการออกตั๋ว
ตั๋วแรกที่ตัวควบคุมโดเมนสร้างขึ้นสำหรับไคลเอนต์เรียกว่า Ticket Granting Ticket (TGT) ดังที่คุณอาจเดาได้จากชื่อ TGT ใช้สำหรับรับตั๋วไปยังบริการอื่น ๆ
หลังจากการแลกเปลี่ยนครั้งแรก ก็ถึงเวลาใช้ Kerberos เพื่อเข้าถึงบางสิ่ง “บางสิ่ง” นี้เรียกว่าบริการ สิ่งสำคัญคืออย่าสับสนกับคำศัพท์ "บริการ" ในที่นี้ - "บริการ" ในบริบทนี้เป็นนามธรรมและแตกต่างจากบริการ "Windows" แม้ว่าบริการ Windows มักจะเรียกใช้โปรแกรมปฏิบัติการที่ให้บริการ
ตัวอย่างของบริการอาจเป็นไดเรกทอรีที่ใช้ LDAP เช่น Active Directory เว็บไซต์ที่ใช้การรับรองความถูกต้องแบบรวมของ Windows หรือการแชร์ไฟล์ที่ให้บริการโดยอุปกรณ์จัดเก็บข้อมูลที่เชื่อมต่อกับเครือข่าย บริการเหล่านี้มีชื่อซึ่งเรียกตามจินตนาการว่า "ชื่อหลักของบริการ" (บางครั้งเรียกโดยอักษรย่อ SPN) ตัวอย่างของ SPN สำหรับบริการ GPOAdmin ของ Quest คือ GPOADmin/GPOADminService/example.local
เมื่อผู้ใช้ต้องการเข้าถึงบริการ Ticket Granting Ticket จะถูกส่งไปยัง Ticket Granting Server (ซึ่งสำหรับ Active Directory คือตัวควบคุมโดเมน) เพื่อรับตั๋วเซสชันที่จะให้สิทธิ์ในการเข้าถึงบริการ
หากทั้งหมดนี้ทำให้คุณลืมตาขึ้นมาเล็กน้อย นี่คือสิ่งสำคัญที่ควรจำไว้: แต่ละส่วนประกอบเหล่านี้ได้รับการเข้ารหัสด้วยรหัสผ่านบัญชีเฉพาะ TGT ได้รับการเข้ารหัสโดยใช้รหัสผ่านบัญชี krbtgt ข้อความระหว่างผู้ใช้และเซิร์ฟเวอร์การอนุญาตตั๋วจะถูกเข้ารหัสโดยใช้รหัสผ่านของผู้ใช้ และที่สำคัญที่สุด เพื่อวัตถุประสงค์ของ Kerberoasting ตั๋วบริการจะได้รับการเข้ารหัสโดยใช้รหัสผ่านของบริการหลัก
แล้วบัญชี Active Directory ใดที่สามารถเชื่อมโยงกับบริการหลักได้ บัญชีคอมพิวเตอร์ บัญชีบริการที่ได้รับการจัดการ และบัญชีผู้ใช้ทั่วไปผ่านชื่อหลักของบริการ
เข้าสู่ Kerberoasting: วิธีการทำงานของการโจมตีเหล่านี้
ใน Kerberoasting บัญชีผู้ใช้ที่ควบคุมโดยผู้โจมตีจะขอตั๋วบริการโดยใช้ชื่อหลักของบริการ ตั๋วบริการนั้นได้รับการเข้ารหัสโดยใช้รหัสผ่านของบัญชี Active Directory ที่เกี่ยวข้อง จากนั้น ตั๋วบริการจะถูกเทออกจากหน่วยความจำและออฟไลน์ (ซอฟต์แวร์หลายบิต เช่น Mimikatz ที่ทำงานโดยไม่มีสิทธิ์ของระบบสามารถทำได้) ซอฟต์แวร์ (เช่น hashcat) ใช้เพื่อลองใช้รหัสผ่านที่แตกต่างกันหลายล้านรหัส และซอฟต์แวร์จะรู้เมื่อมีรหัสผ่านที่ตรงกัน เนื่องจากตั๋วบริการสามารถถอดรหัสและอ่านได้ ผู้โจมตีจะรู้รหัสผ่านสำหรับบัญชีที่เกี่ยวข้องกับบริการหลัก
Kerberoasting ต้องการสองสิ่งต่อไปนี้จึงจะประสบความสำเร็จ:
- รหัสผ่านที่บัญชีที่มีบริการหลักใช้ควรมีความยาวน้อยกว่า 25 อักขระ ซึ่งจะตัดบัญชีคอมพิวเตอร์และบัญชีบริการที่ได้รับการจัดการออก เนื่องจากแต่ละบัญชีมีรหัสผ่านที่ยาวมากซึ่งหมุนเวียนบ่อยๆ เป็นไปไม่ได้เลยที่จะคาดเดาขนาดนั้นก่อนที่รหัสผ่านจะหมุนเวียนใน Active Directory เหลือเพียงบัญชีผู้ใช้เท่านั้น
- ผู้โจมตีจะต้องสามารถขอตั๋วบริการโดยใช้ประเภทการเข้ารหัส RC4_HMAC_MD5 ประเภทการเข้ารหัสนี้ใช้ประโยชน์จากรหัสผ่านบัญชีในลักษณะที่ไม่ปลอดภัยเมื่อเปรียบเทียบกับประเภทการเข้ารหัสที่รัดกุมตาม AES
เหตุใดผู้โจมตีจึงชอบ kerberoasting
แต่ถึงแม้จะมีข้อจำกัดเหล่านี้ ผู้โจมตีก็ยังชอบ Kerberoasting ด้วยเหตุผลต่อไปนี้:
- การโจมตีไม่ได้ใช้สิทธิ์เฉพาะเจาะจงใด ๆ ที่มีอยู่ - ผู้ใช้ที่ได้รับการรับรองความถูกต้องทุกคนสามารถทำการโจมตี Kerberoasting ได้ บัญชีของนักศึกษาฝึกงานในห้องไปรษณีย์นั้นอันตรายพอๆ กับบัญชีของ CTO!
- ผู้ใช้ที่ผ่านการรับรองความถูกต้องแล้วสามารถระบุบัญชีที่อาจเสี่ยงต่อ Kerberoasting ได้ ผู้ใช้ทุกคนสามารถดูบัญชีผู้ใช้ที่มีชื่อบริการหลักเชื่อมโยงอยู่ ผู้ใช้ทุกคนสามารถดูอายุรหัสผ่านของบัญชีได้
- สภาพแวดล้อม Active Directory ส่วนใหญ่มีมานานแล้ว และองค์กรส่วนใหญ่ไม่เต็มใจที่จะแก้ไข Active Directory ในลักษณะที่อาจส่งผลกระทบต่อองค์กร เป็นเรื่องปกติที่จะพบผู้ใช้ที่กำลังใช้บริการที่มีประสิทธิภาพซึ่งรหัสผ่านไม่ได้เปลี่ยนมาเป็นเวลานาน
- แม้แต่ในสภาพแวดล้อม Active Directory ที่ปิดใช้งาน RC4 ผู้โจมตียังสามารถขอตั๋วบริการโดยใช้ RC4_HMAC_MD5!
- Kerberoasting ทิ้งร่องรอยไว้เล็กน้อยในสภาพแวดล้อม - ผู้โจมตีไม่จำเป็นต้องพยายามเข้าถึงบริการจริงๆ เพียงแค่ต้องขอตั๋วบริการจาก Ticket Granting Server (โปรดจำไว้ว่าตัวควบคุมโดเมน) ซึ่งไม่ติดตามผลกับ บริการจริงเพื่อดูว่าเคยใช้หรือไม่!
- การโจมตีแบบ Brute Force ต่อตั๋วบริการสามารถใช้ประโยชน์จากฮาร์ดแวร์ GPU ระดับผู้บริโภค โดยมีประสิทธิภาพเพิ่มขึ้นอย่างมากเมื่อเทียบเป็นรายปี ซึ่งหมายความว่ารหัสผ่านที่ซับซ้อนมากขึ้นสามารถถอดรหัสได้ในเวลาน้อยลง รหัสผ่านเจ็ดอักขระแบบสุ่มโดยสมบูรณ์ที่มีความซับซ้อนของอักขระเต็มสามารถถอดรหัสได้ในเวลาไม่กี่นาที และรหัสผ่านเจ็ดอักขระเป็นค่าเริ่มต้นในสภาพแวดล้อม Active Directory
- รหัสผ่านที่ยาวกว่าและสุ่มอย่างแท้จริงจะใช้เวลาในการถอดรหัสนานกว่าแบบทวีคูณ ตัวอย่างเช่น รหัสผ่านแบบสุ่ม อย่างแท้จริง 10 ตัวอักษรที่มีความซับซ้อนเต็มรูปแบบอาจต้องใช้เวลาหลายปี อย่างไรก็ตาม ผู้โจมตีสามารถใช้ประโยชน์จากความจริงที่ว่ารหัสผ่านจำนวนมากที่เราคิดว่าเป็นการสุ่มนั้น แท้จริงแล้วไม่ใช่การสุ่มเช่นนั้น พวกเขาสามารถใช้ "มาสก์ " และ "ตารางสีรุ้ง" เพื่อละเมิดวิธีที่มนุษย์จริงๆ แล้วสร้างรหัสผ่านเพื่อลดเวลาดังกล่าวลงอย่างมาก
การสกัดกั้น Kerberoast: ขั้นตอนในการป้องกันการโจมตี Kerberoasting
จากทั้งหมดนี้ ในฐานะผู้พิทักษ์ Active Directory คุณสามารถทำอะไรได้บ้างเพื่อป้องกันไม่ให้ผู้โจมตีใช้ประโยชน์จาก Kerberoasting เพื่อรับรหัสผ่านของบัญชีบริการที่มีประสิทธิภาพ
ต่อไปนี้เป็นแนวทางปฏิบัติที่ดีที่สุดสามประการ:
- ดูสภาพแวดล้อม Active Directory ของคุณในแบบที่ผู้โจมตีทำ ค้นหาบัญชีที่เสี่ยงต่อ Kerberoasting โดยค้นหาจุดตัดระหว่างผู้ใช้ที่มีชื่อหลักของบริการ รหัสผ่านเก่า และสิทธิพิเศษมากมาย
- คุณสามารถค้นหาบัญชีที่มีช่องโหว่โดยเฉพาะเหล่านี้ได้โดยใช้การสืบค้น PowerShell ระบบการรายงานหรือการวิเคราะห์ช่องโหว่ หรือแม้แต่ซอฟต์แวร์การจัดการเส้นทางการโจมตีที่มีประสิทธิภาพ เช่น Bloodhound Enterprise
- เมื่อคุณพบบัญชีที่มีช่องโหว่เหล่านี้ คุณอาจเลือกแนวทางที่แตกต่างกันสองสามวิธี หากทำได้ ให้แปลงบริการไปใช้บัญชีคอมพิวเตอร์หรือบัญชีบริการที่มีการจัดการ หากบริการไม่รองรับทั้งสองตัวเลือกดังกล่าว ให้พิจารณาใช้ประโยชน์จากตัวจัดการข้อมูลสิทธิพิเศษ (PIM) ระบบประเภทนี้จะหมุนเวียนรหัสผ่านบริการเป็นประจำโดยอัตโนมัติโดยใช้รหัสผ่านที่ยาวและสุ่มอย่างแท้จริง และหากคุณไม่สามารถใช้งานได้ ให้หมุนเวียนรหัสผ่านเหล่านี้ด้วยตนเองเป็นประจำโดยใช้รหัสผ่านที่ยาว ซับซ้อน และสุ่มอย่างแท้จริง โดยเริ่มจากรหัสผ่านที่เก่าที่สุดและมีสิทธิ์มากที่สุด
- สุดท้าย ให้มองหาและแจ้งเตือนเกี่ยวกับตั๋วบริการที่สร้างด้วยประเภทการเข้ารหัส RC4-HMAC นี่อาจหมายความว่าคุณกำลังถูก kerberoasted! ตัวควบคุมโดเมนจะรวมข้อมูลนี้ไว้ในเหตุการณ์ 4796 ใต้ฟิลด์ “ประเภทการเข้ารหัสลับตั๋ว” รหัส Hex สำหรับ RC4 จะเป็น 0x17 คุณสามารถเปิดใช้งานเหตุการณ์เหล่านี้ได้โดยเปิดใช้งาน การดำเนินการตรวจสอบตั๋วบริการ Kerberos ใน การกำหนดค่าการตรวจสอบขั้นสูง สำหรับตัวควบคุมโดเมนของคุณ แต่ขอเตือนไว้ว่าการดำเนินการนี้จะทำให้เกิดเหตุการณ์การตรวจสอบจำนวนมาก วางแผนที่จะใช้ SIEM หรือระบบวิเคราะห์บันทึกเหตุการณ์อื่นๆ เพื่อส่งคืนเฉพาะเหตุการณ์สำหรับตั๋วบริการ RC4
- หรือพิจารณาใช้ประโยชน์จากซอฟต์แวร์ตรวจสอบการเปลี่ยนแปลงที่รวมความสามารถในการตรวจสอบประเภทการเข้ารหัส RC4 บัญชีที่อนุญาตพิเศษ และการแจ้งเตือนแบบเรียลไทม์โดยไม่จำเป็นต้องตรวจสอบตั๋วบริการและการดำเนินการทั้งหมด
บทสรุป
ฉันหวังว่าคุณจะออกจากโพสต์บนบล็อกนี้ด้วยความเข้าใจที่ชัดเจนเกี่ยวกับ Kerberoasting มากกว่าที่คุณเคยทำ และฉันหวังว่าสิ่งนี้จะทำให้คุณมีเครื่องมือที่จำเป็นในการขจัดเทคนิคง่ายๆ เหล่านี้ออกจากผลงานของผู้โจมตี
