ในการวิเคราะห์ติดตามผลชุดที่สามเกี่ยวกับการโจมตี SolarWinds เราจะตรวจสอบว่าผู้โจมตีควบคุมมัลแวร์ Sunburst อย่างไร
ขั้นตอนการควบคุมของ Sunburst แตกต่างกันไปขึ้นอยู่กับคำสั่งที่ได้รับจากผู้โจมตี อย่างไรก็ตาม สามารถสร้างโฟลว์การควบคุมทั่วไปขึ้นใหม่ได้ เพื่อให้เข้าใจว่าการสื่อสารจะมีความคืบหน้าอย่างไรบนเครื่องที่เป็นที่สนใจของผู้โจมตี
ที่อยู่ IP เป็นคำสั่ง
โดยปกติ เมื่อทำการสอบถาม DNS จะมีการกำหนดสตริงชื่อโฮสต์เพื่อแปลเป็นที่อยู่ IP ที่เป็นตัวเลข เช่น google.com อาจแปลเป็น 142.250.72.238 ที่อยู่ IP ถูกเก็บไว้ในบันทึก A ของการตอบกลับ Sunburst แยกวิเคราะห์ระเบียน A สำหรับที่อยู่ IP แต่จะไม่ใช้เป็นที่อยู่ IP เลย แต่จะทริกเกอร์พฤติกรรมมัลแวร์ต่างๆ แทน แทนที่จะให้ผู้โจมตีเลือกที่อยู่ IP แบบสุ่มเพื่อกระตุ้นพฤติกรรมที่แตกต่างกัน พวกเขาได้เลือกช่วงที่อยู่ IP ที่เป็นของ Google, Amazon และ Microsoft สิ่งเหล่านี้อาจถูกเลือกเพื่อลดโอกาสในการตรวจจับ อีกครั้ง IP เหล่านี้ไม่ได้ถูกใช้เป็นที่อยู่ IP แต่อย่างใด และระบบคอมพิวเตอร์จริงที่มีที่อยู่ IP เหล่านี้จะไม่ได้รับการติดต่อจากมัลแวร์
ค่าที่อยู่ IP ที่ได้รับในการตอบกลับ DNS แสดงถึงหนึ่งในห้าลักษณะการทำงานขึ้นอยู่กับสถานะปัจจุบัน:
- ส่งส่วนชื่อโดเมน Windows เพิ่มเติมต่อไป
- ส่งข้อมูลสถานะความปลอดภัยของผลิตภัณฑ์
- เปิดช่อง C&C สำรอง
- ทำความสะอาดและออก
- รีเซ็ตสถานะราวกับว่าดำเนินการเป็นครั้งแรก for
สำหรับการติดเชื้อทั่วไป Sunburst จะส่งอักขระ 14 ตัวแรกของชื่อโดเมน Windows ไปยังเซิร์ฟเวอร์ C&C สิ่งนี้จะดำเนินต่อไปสำหรับกลุ่มอักขระ 14 ตัว จนกว่าจะส่งชื่อโดเมน Windows ทั้งหมด
ขั้นต่อไป ผู้โจมตีจะสั่งให้ Sunburst ส่งสถานะผลิตภัณฑ์ความปลอดภัยปัจจุบันจากนั้นจึงส่งข้อมูลที่ทำให้ Sunburst เปิดใช้ C&C สำรองที่ใช้ HTTP ที่มีประสิทธิภาพยิ่งขึ้น
รูปที่ 1. ตัวอย่างการควบคุม C&C โฟลว์
ในการตอบกลับ DNS ผู้โจมตียังสามารถสั่งให้ Sunburst กู้คืนคีย์รีจิสทรีของบริการผลิตภัณฑ์รักษาความปลอดภัยซึ่งก่อนหน้านี้ถูกปิดใช้งานกลับไปเป็นการตั้งค่าเริ่มต้นที่เชื่อได้ และปิดหรือรีเซ็ตสถานะภายในเสมือนว่าเป็นการติดไวรัสใหม่
นอกจากนี้ เพื่ออำนวยความสะดวกให้กับสภาพแวดล้อมของห้องปฏิบัติการและการหลีกเลี่ยงแซนด์บ็อกซ์ หากคำขอ DNS ส่งผลให้มีที่อยู่ IP ช่วงส่วนตัว รวมถึง 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/4, fc00: :/7, fec0::/10, ff00::/8, Sunburst จะล้างและออกด้วย
ขั้นตอนที่สอง C&C Second
เหยื่อที่เป็นที่สนใจของผู้โจมตีจะไปถึงขั้นตอน C&C รองแล้ว ในกรณีนี้ การตอบกลับ DNS จะมีชื่อโฮสต์ในระเบียน CNAME เพื่อใช้เป็นช่องทาง HTTP C&C ค่า CNAME จะถูกตรวจสอบเพื่อดูว่าเริ่มต้นด้วย http:// หรือ https:// และเติม https:// ไว้ข้างหน้าหรือไม่
ถัดไป Sunburst จะทำการร้องขอ HTTP GET ซ้ำๆ เพื่อรับคำสั่ง โดยพักระยะเวลาที่แปรผันระหว่างคำขอ ส่วนพาธของ URL จะเริ่มต้นด้วย /swip/upd/ เสมอ ตามด้วยรูปแบบ URL ที่เลือกแบบสุ่ม ตามลำดับต่อไปนี้
ทางเลือก อย่างน้อยหนึ่งอย่างต่อไปนี้:
- SolarWinds
- .CortexPlugin
- .Orion
ทางเลือก ตามด้วยข้อใดข้อหนึ่งต่อไปนี้:
- .ไร้สาย
- .UI
- .วิดเจ็ต
- .NPM
- .อพอลโล
- .CloudMonitoring
หากไม่ได้เลือกสตริงก่อนหน้า อย่างใดอย่างหนึ่งต่อไปนี้หรือทางเลือก อย่างใดอย่างหนึ่งต่อไปนี้หากเลือกสตริงก่อนหน้า:
- .โหนด
- .Volumes
- .อินเทอร์เฟซ
- .ส่วนประกอบ
ตามด้วย:
- -<หมายเลข>.<จำนวน>.<ข้อผิดพลาดหรือรหัสสำเร็จของคำขอก่อนหน้า>
ติดตามโดย:
- .xml
นอกจากนี้ หากอักขระตัวแรกในเส้นทางคือจุด (.) จุดนั้นจะถูกลบออก ตัวอย่างเช่น ต่อไปนี้คือตัวอย่าง URL ที่สามารถใช้ได้:
- https[:]//infinitysoftwares.com/swip/upd/SolarWinds.CortexPlugin.Nodes-5.2.1.xml
- https[:]//infinitysoftwares.com/swip/upd/Orion.Wireless.UI-3.1.0.xml
- https[:]//infinitysoftwares.com/swip/upd/Nodes-1.2.0.xml
ตัวเลขสุดท้ายก่อนนามสกุล .xml ไม่ใช่อักขระสุ่ม แต่แสดงถึงโค้ดส่งคืนสำหรับคำขอคำสั่งก่อนหน้า โดยทั่วไป 0 หมายถึงสำเร็จ และ 1 หรือค่าอื่นหมายถึงข้อผิดพลาด สำหรับคำขอ 16 รายการแรก เส้นทางที่สร้างแบบสุ่มที่แตกต่างกันจะใช้ในแต่ละครั้ง แต่หลังจากนั้นอาจทำซ้ำรุ่นสุ่มที่ใช้ก่อนหน้านี้ หากข้อมูลถูกส่งไปยังผู้โจมตีอันเป็นผลมาจากคำสั่ง (เช่น การส่งข้อมูลระบบ) การสร้างเส้นทางจะแตกต่างออกไปและจะกล่าวถึงในบล็อกในอนาคต
Sunburst ยังเพิ่มส่วนหัวที่กำหนดเอง “If-None-Match:” ซึ่งตั้งค่าเป็นXOR ผู้ใช้ 8 ไบต์ที่อธิบายไว้ก่อนหน้านี้โดยลำดับ 8 ไบต์ที่สร้างแบบสุ่มซึ่งต่อท้ายแล้วแปลงเป็นเลขฐานสิบหก ASCII ตัวพิมพ์เล็ก
หลังจากส่งคำขอ HTTP GET แล้ว Sunburst จะตรวจสอบการตอบสนองที่ถูกต้องจากผู้โจมตี คำตอบใช้การสะกดรอยตามและเป็นหน้าข้อมูล XML ที่หลอกลวง แต่น่าเชื่อถือ ซึ่ง Sunburst ใช้เฉพาะบางฟิลด์เท่านั้น
ข้อมูล faux XML ถูกค้นหาตามลำดับของ:
- เลขฐานสิบหก 36 ตัวพร้อมขีดกลาง
- เลขฐานสิบหก 32 ตัว
- เลขฐานสิบหก 16 ตัว
ลำดับเหล่านี้ถูกต่อเข้าด้วยกันโดยนำอักขระที่ไม่ใช่เลขฐานสิบหกออก DWORD แรก (4 ไบต์) ของลำดับแสดงถึงขนาดของข้อมูลที่เหลือ ซึ่งได้รับการตรวจสอบแล้ว จากนั้นไบต์ถัดไปจะเป็นคีย์ XOR ข้อมูลที่เหลือจะถูกถอดรหัส XOR โดยคีย์ไบต์แล้วคลายการบีบอัด หลังจากคลายการบีบอัดแล้ว อักขระตัวแรกคือตัวเลขที่ระบุการดำเนินการที่จะดำเนินการตามด้วยจำนวนของอาร์กิวเมนต์ที่รวมอยู่ในข้อมูลต่อไปนี้สำหรับคำสั่ง:
หมายเลขคำสั่งสามารถสั่งให้ Sunburst ดำเนินการดังต่อไปนี้:
หากไม่จำเป็นต้องส่งข้อมูลไปยังผู้โจมตี ระบบจะส่งคำขอ GET ด้านบนพร้อมรหัสส่งคืนที่เข้ารหัสในชื่อไฟล์ URL
หากจำเป็นต้องส่งข้อมูลไปยังผู้โจมตีอันเป็นผลมาจากคำสั่งเหล่านี้ (เช่น การส่งข้อมูลระบบ) ข้อมูลจะถูกรวมไว้ในการสื่อสาร HTTP(S) ปกติในครั้งถัดไปเป็นคำขอ POST หรือคำขอ HEAD หากเกิดข้อผิดพลาดบางอย่างที่ ข้อมูลหายไป รายละเอียดเกี่ยวกับพฤติกรรมเหล่านี้แต่ละอย่างและวิธีอัปโหลดข้อมูลไปยังผู้โจมตีจะกล่าวถึงในบล็อกที่กำลังจะมีขึ้น