ทำความรู้จักช่องโหว่ zero-day ใหม่ ใน Task Scheduler บน Windows

สรุปย่อ
เมื่อเช้าวันอังคารที่ 28 สิงหาคม ตามเวลาในประเทศไทย ผู้ใช้งาน Twitter ที่มีชื่อว่า “SandboxEscaper” ได้เปิดเผยช่องโหว่ใหม่บนระบบปฏิบัติการ Windows ที่ยังไม่ได้มีการออกแพตซ์ใดๆ จาก Microsoft (zero-day) พร้อมทั้งได้มีการเผยแพร่ PoC code และไฟล์ที่สามารถใช้ในการทดสอบโจมตีช่องโหว่ดังกล่าวบน GitHub ซึ่งไฟล์ดังกล่าวถูกเขียนเพื่อโจมตี Windows 10 64-bit หลังจากนั้นไม่กี่ชั่วโมง Will Dormann นักวิจัยช่องโหว่จาก CERT Coordination Center ก็ได้ยืนยันความสำเร็จในการทดสอบโจมตีช่องโหว่ดังกล่าวบน Windows 10 64-bit ที่ได้ทำการแพตซ์ให้เป็นล่าสุดแล้ว และได้แจ้งเตือนช่องโหว่ดังกล่าวอย่างเป็นทางการ (Link) ช่องโหว่นี้เกิดขึ้นบน Advance Local Procedure Call (ALPC) Interface ที่ถูกใช้งานใน Task Scheduler ส่งผลให้สามารถเพิ่มสิทธิ์ของโปรเซสจาก local เป็น system ได้ (local privilege escalation)

รายละเอียดของช่องโหว่
ช่องโหว่ดังกล่าวเกิดจากความบกพร่องในการตรวจสอบ Permission ของ function ใน API ที่มีชื่อว่า “SchRpcSetSecurity” ซึ่งเป็นส่วนหนึ่งที่ถูกใช้บน ALPC interface (ใช้ในการคุยกันระหว่างโปรเซสภายในระบบปฏิบัติการ) ของ Task Scheduler ส่งผลให้ผู้โจมตีที่เป็น local user (รวมถึง Guest user) สามารถเรียกใช้ และนำไปกำหนด DACL (Discretionary Access Control List : เป็นตัวบ่งบอกว่าใครมีสิทธิ์ทำอะไรกับ Object ใดๆ บน Windows) ให้กับไฟล์ใดๆ บนเครื่อง ดังนั้นช่องโหว่จึงถูกใช้ในการแก้ไขสิทธิ์ให้กับ Hardlink ที่ตนเองได้สร้างไว้ใน c:\windows\tasks เพื่อให้ได้สิทธิ์ที่สูงขึ้น

วิธีการตรวจจับเบื้องต้น
จาก PoC ที่ได้รับการเผยแพร่ออกมานั้น เบื้องต้นสามารถเฝ้าระวัง และตรวจจับความผิดปกติได้จาก 2 วิธีการ ดังต่อไปนี้
1. ตรวจสอบว่ามีโปรเซสใดๆ ที่ผิดปกติทำงานอยู่ภายใต้โปรเซสที่มีชื่อ “spoolsv.