ทำความรู้จักช่องโหว่ 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.exe” หรือไม่
2. ทำการตั้งค่า audit log สำหรับ File System ผ่าน Group Policy โดยไปที่
Computer Configuration\Windows Settings\Security Settings\Advanced Audit Policy Configuration\System Audit Policies จากนั้นกำหนดค่า Object Access: File System  เป็น Success

จากนั้นทำการเพิ่ม PowerShell script ที่ Computer Configuration\Policy\Windows Settings\Scripts (Startup/Shutdown) หรืออาจจะใช้เป็น scheduled task แทน โดย script ดังกล่าวจะทำการสร้าง log ขึ้นมาเมื่อพบว่ามีการสร้างไฟล์ที่ c:\windows\system32\tasks

PowerShell Script:

$computer = gc env:computername
$path = “C:\windows\system32\tasks”
$user = “everyone”
$path = $path.replace(“\”, “\\”)
$SD = ([WMIClass] “Win32_SecurityDescriptor”).CreateInstance()
$ace = ([WMIClass] “Win32_ace”).CreateInstance()
$Trustee = ([WMIClass] “Win32_Trustee”).CreateInstance()
$SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
[byte[]] $SIDArray = ,0 * $SID.BinaryLength
$SID.GetBinaryForm($SIDArray,0)
$Trustee.Name = $user
$Trustee.SID = $SIDArray
$ace.AccessMask = [System.Security.AccessControl.FileSystemRights]”Modify”
$ace.AceFlags = “0x67”
$ace.AceType = 2
$ace.Trustee = $trustee
$SD.SACL = $ace
$SD.ControlFlags=”0x10"
$wPrivilege = gwmi Win32_LogicalFileSecuritySetting -computername $computer -filter “path=’$path’”
$wPrivilege.psbase.Scope.Options.EnablePrivileges = $true
$wPrivilege.setsecuritydescriptor($SD)

เมื่อพบว่ามีการสร้าง Hardlink ใดๆ ที่ Path ดังกล่าว ระบบจะทำการสร้าง Security event log ที่ event id เป็น 4664

ทั้งนี้วิธีการตรวจจับทั้ง 2 วิธีเป็นเพียงการตรวจจับพฤติกรรมการโจมตีที่อ้างอิงจาก PoC ที่ได้มีการเผยแพร่ออกมาเท่านั้น ซึ่งในความเป็นจริงนั้นผู้โจมตีอาจจะทำการโจมตีช่องโหว่ดังกล่าวผ่านทางโปรเซสอื่นๆ ก็ได้

ข้อควรระวัง

ถึงแม้ว่า PoC code ของช่องโหว่ดังกล่าวจะเป็นการโจมตี Windows 64 bit แต่ได้มีผู้ทดลองแก้ไข code และพบว่าสามารถใช้โจมตี Windows 10 32-bit และ Windows 7 ได้เช่นกัน

วิธีการป้องกัน และลดผลกระทบจากการโจมตี

1. ทำการลง Antivirus ที่น่าเชื่อถือบนเครื่อง จากการตรวจสอบพบว่าไฟล์ที่ถูกเผยแพร่ออกมาเพื่อใช้ทดสอบการโจมตีนั้น สามารถถูกตรวจจับโดย Antivirus หลายรายการแล้วในขณะนี้ (VT1, VT2)
2. ไม่อนุญาตให้ผู้ใช้งานที่ไม่น่าเชื่อถือทำการรัน code ใดๆบนเครื่อง รวมถึงการแพตซ์ช่องโหว่อื่นๆทั้งที่เป็นระบบปฏิบัติการ และซอฟต์แวร์ที่ใช้งานบนเครื่องให้เป็นแพตซ์ล่าสุด เพื่อป้องกันการเข้าถึงเครื่องโดยผู้ไม่หวังดีผ่านทางช่องโหว่เหล่านั้น
3. ล่าสุดผู้ใช้ Twitter ที่ใช้ชื่อว่า “0patch” ได้มีการออกแพตซ์ชั่วคราวที่ถูกเรียกว่า “micropatch” สำหรับ Windows 10 1803 (64 bit) ที่ได้รับการแพตซ์เป็นเวอร์ชั่นล่าสุดแล้ว ออกมา โดยสามารถเข้าไปดาวน์โหลดได้จาก Link อย่างไรก็ตามยังไม่สามารถยืนยันได้ว่า หลังทำการแพตซ์ micropatch ดังกล่าวจะเกิดผลกระทบอื่นๆ ที่ไม่คาดไม่ถึงตามมาหรือไม่ ดังนั้นควรทำการทดสอบบนเครื่องทดลองก่อนจะดีที่สุด ทั้งนี้ Microsoft มีแผนที่จะทำการปล่อยแพตซ์สำหรับช่องโหว่นี้ใน September’s Tuesday Patch (September 11, 2018)

แหล่งอ้างอิง

  • https://github.com/SandboxEscaper/randomrepo/blob/master/PoC-LPE.rar
  • https://www.kb.cert.org/vuls/id/906424
  • https://doublepulsar.com/task-scheduler-alpc-exploit-high-level-analysis-ff08cda6ad4f
  • https://hunter2.gitbook.io/darthsidious/privilege-escalation/alpc-bug-0day
  • https://borncity.com/win/2018/08/28/windows-0-day-alpc-vulnerability-in-task-scheduler/
  • https://docs.microsoft.com/en-us/windows/desktop/secauthz/dacls-and-aces