Cyble เปิดเผยการโจมตีที่ซับซ้อนที่ใช้ VS Code เพื่อการเข้าถึงโดยไม่ได้รับอนุญาต

Cyble Research and Intelligence Lab (CRIL) ได้เปิดเผยแคมเปญที่ใช้ไฟล์ .LNK ที่น่าสงสัยเป็น attack vector ในการโจมตีเบื้องต้น โดยไฟล์นี้อาจถูกส่งผ่านอีเมล spam และดาวน์โหลดแพ็คเกจ Python ซึ่งจากนั้นจะใช้เพื่อรันสคริปต์ Python ที่ถูก obfuscated ซึ่งถูกดึงมาจากเว็บไซต์ paste.ee โดยในขณะเผยแพร่รายงานนี้ สคริปต์ดังกล่าวไม่ถูกระบุว่าเป็นอันตรายใน VirusTotal (VT) ทำให้ยากต่อการตรวจสอบจากมาตรการด้านความปลอดภัยทั่วไป

เมื่อทำการรันสคริปต์ Python จะสร้างการแฝงตัวบนระบบโดยการสร้าง scheduled task ด้วยสิทธิ์ system และมีลำดับความสำคัญสูง สคริปต์จะตรวจสอบว่า Visual Studio Code (VSCode) ถูกติดตั้งอยู่บนเครื่องของเหยื่อหรือไม่ หากไม่พบ สคริปต์จะดาวน์โหลด VSCode CLI แบบสแตนด์อโลนจากแหล่งที่เชื่อถือได้ ด้วยการใช้ VSCode สคริปต์จะสร้าง remote tunnel โดยแชร์รหัสการเปิดใช้งานกับกลุ่มผู้ไม่หวังดี ซึ่งช่วยให้สามารถเข้าถึงเครื่องของเหยื่อได้โดยไม่ได้รับอนุญาต

VSCode Remote – Tunnels extension ส่วนใหญ่ถูกใช้เพื่อเชื่อมต่อกับเครื่องระยะไกล เช่น พีซีเดสก์ท็อป หรือ virtual machine (VM) ผ่านช่องทางที่ปลอดภัย ซึ่งช่วยให้ผู้ใช้สามารถเข้าถึงเครื่องนั้นได้จาก VSCode client ใดก็ได้โดยไม่จำเป็นต้องใช้ SSH อย่างไรก็ตาม ในแคมเปญนี้กลุ่มผู้ไม่หวังดีได้ใช้ประโยชน์จากฟีเจอร์นี้ในการสร้างการเชื่อมต่อระยะไกลกับระบบของเหยื่อเพื่อวัตถุประสงค์ที่เป็นอันตราย

วิธีการโจมตีนี้สะท้อนถึงกลยุทธ์ที่เคยถูกพบในแคมเปญของกลุ่ม Stately Taurus ที่เป็นกลุ่ม APT ของจีน ซึ่งถูกบันทึกไว้โดยนักวิจัย Unit42 โดยในรายงานนี้จะตรวจสอบว่ากลุ่มผู้ไม่หวังดีใช้เครื่องมือที่ถูกลิขสิทธิ์ เช่น VSCode และ GitHub เพื่อปกปิดกิจกรรมของตน และสร้างการเชื่อมต่อระยะไกลโดยไม่ได้รับอนุญาตได้อย่างไร

การวิเคราะห์ทางเทคนิค

CRIL ได้ระบุแคมเปญที่เกี่ยวข้องกับไฟล์ .LNK ที่น่าสงสัยซึ่งปลอมเป็นโปรแกรมติดตั้ง เมื่อทำการรัน มันจะแสดงข้อความปลอมว่า “ติดตั้งสำเร็จ” เป็นภาษาจีน (“安裝成功”) อย่างไรก็ตาม ในเบื้องหลัง มันจะดาวน์โหลดส่วนประกอบเพิ่มเติมอย่างเงียบ ๆ โดยใช้เครื่องมือ curl รวมถึงแพ็กเกจ Python distribution ที่ชื่อว่า “python-3.12.5-embed-amd64.zip”

จากนั้นไฟล์ .LNK จะสร้างไดเรกทอรีที่ “%LOCALAPPDATA%\Microsoft\Python” และทำการแตกไฟล์เนื้อหาจาก zip archive โดยใช้ tar.exe ลงในไดเรกทอรีนี้ จากนั้นจะดาวน์โหลดสคริปต์ที่เป็นอันตรายจากเว็บไซต์ paste.ee ผ่าน URL “hxxps[:]//paste[.]ee/r/DQjrd/0” และบันทึกเป็น “update.py” ในไดเรกทอรีเดียวกัน เมื่อดาวน์โหลดเสร็จ สคริปต์ “update.py” จะถูกรันโดยใช้ “pythonw.exe” โดยไม่แสดงหน้าต่างคอนโซล

Update.py

สคริปต์จะเริ่มต้นโดยการตรวจสอบว่า Visual Studio Code (VSCode) ถูกติดตั้งอยู่ในระบบแล้วหรือไม่ โดยทำการตรวจสอบการมีอยู่ของไดเรกทอรีที่ตั้งอยู่ที่ “%LOCALAPPDATA%\microsoft\VScode” หากไม่พบไดเรกทอรีนี้ แสดงว่า VSCode ยังไม่ถูกติดตั้ง สคริปต์จะดำเนินการดาวน์โหลด VSCode Command Line Interface (CLI) จาก Microsoft “hxxps://az764295.vo.msecnd.net/stable/97dec172d3256f8ca4bfb2143f3f76b503ca0534/vscode_cli_win32_x64_cli[.]zip” เมื่อดาวน์โหลดเสร็จแล้ว ไฟล์ zip จะถูกแตกออกมา และไฟล์ปฏิบัติการ “code.exe” จะถูกวางไว้ในไดเรกทอรี “%LOCALAPPDATA%\microsoft\VScode”

การสร้างการแฝงตัวบนระบบ (Persistence)

จากนั้นสคริปต์จะดำเนินการสร้าง scheduled task ชื่อว่า “MicrosoftHealthcareMonitorNode” เพื่อให้แน่ใจว่าการดำเนินการที่เป็นอันตรายของมันจะดำเนินการต่อได้ โดย task นี้ถูกออกแบบมาเพื่อรันสคริปต์ “update.py” โดยใช้ “pythonw.exe” ซึ่งจะทำงานโดยไม่แสดงหน้าต่างคอนโซล ทำให้การดำเนินการที่เป็นอันตรายนี้ถูกซ่อนไว้ ก่อนที่จะสร้างรายการใน Task Scheduler สคริปต์จะตรวจสอบว่ามีอยู่แล้วหรือไม่โดยการรันคำสั่ง “schtasks /query /tn MicrosoftHealthcareMonitorNode” เพื่อหลีกเลี่ยงการสร้าง task ซ้ำ

การตั้งค่าของ task นี้จะแตกต่างกันไปตามระดับสิทธิ์ของผู้ใช้ สำหรับผู้ใช้ที่ไม่มีสิทธิ์ผู้ดูแลระบบ task จะถูกตั้งค่าให้รันทุกสี่ชั่วโมง โดยเริ่มตั้งแต่เวลา 8:00 น. เพื่อให้แน่ใจว่าสคริปต์ที่เป็นอันตรายจะถูกรันในช่วงเวลาปกติ ในระบบที่ผู้ใช้มีสิทธิ์ระดับผู้ดูแลระบบ task จะถูกตั้งค่าให้ทำงานเมื่อมีการเข้าสู่ระบบ โดยทำงานด้วยสิทธิ์ระบบที่สูงขึ้น และมีความสำคัญสูง ซึ่งทำให้สามารถควบคุมได้มากขึ้น และลดโอกาสที่จะถูกตรวจพบ

การสร้าง Remote Tunnel

จากนั้นสคริปต์จะตรวจสอบว่า “code.exe” กำลังทำงานอยู่ในเบื้องหลังหรือไม่ โดยตรวจสอบเอาต์พุตของคำสั่ง “tasklist” หากพบว่า “code.exe” ไม่ทำงานอยู่ สคริปต์จะดำเนินการรัน “code.exe” เพื่อออกจากระบบเซสชันระยะไกลที่ทำงานอยู่ ซึ่งทำได้โดยใช้คำสั่ง “code.exe tunnel user logout” ซึ่งจะทำให้การเชื่อมต่อระยะไกลที่เชื่อมต่อกับระบบของเหยื่ออยู่ปิดลง ขั้นตอนนี้มีความสำคัญกับกลุ่มผู้ไม่หวังดี เนื่องจากช่วยให้สามารถสร้าง Remote Tunnel ใหม่สำหรับการติดต่อในอนาคตกับระบบของเหยื่อได้

หลังจากตรวจสอบให้แน่ใจว่า tunnel ที่มีอยู่ถูกปิดแล้ว สคริปต์จะเริ่มกระบวนการใหม่โดยใช้คำสั่ง

  • code.exe –locale en-US tunnel –accept-server-license-terms –name <COMPUTERNAME>

คำสั่งนี้จะเริ่มต้น remote tunnel และสคริปต์จะเชื่อมโยงกับบัญชี GitHub โดยอัตโนมัติเพื่อการตรวจสอบสิทธิ์ ขณะนี้ผลลัพธ์ของคำสั่ง “code.exe” จะถูกบันทึกในไฟล์ที่ชื่อว่า “output.txt” ภายในไดเรกทอรี “%localappdata%\microsoft\VSCode” นอกจากนี้เนื้อหาของ “output.txt” จะถูกคัดลอกไปยังไฟล์อีกไฟล์หนึ่งที่ชื่อว่า “output2.txt” ในไดเรกทอรีเดียวกัน เพื่อดึงรหัสการเปิดใช้งานที่เป็นตัวอักษร และตัวเลข 8 ตัวสำหรับบัญชี GitHub

จากนั้นสคริปต์จะอ่านไฟล์ “output2.txt” และระบุรหัสการเปิดใช้งานบัญชี GitHub โดยใช้รูปแบบทั่วไป “และใช้โค้ด (\w{4}-\w{4})” โค้ดที่ถูกดึงออกมาจะถูกบันทึกลงในตัวแปรเพื่อใช้ในขั้นตอนถัดไปของการโจมตี ทำให้สามารถดำเนินกิจกรรมที่เป็นอันตรายต่อไปได้

การส่งข้อมูลออก (Exfiltration)

จากนั้นกลุ่มผู้ไม่หวังดีจะรวบรวมข้อมูลระบบของเหยื่อโดยการเก็บชื่อโฟลเดอร์จากไดเรกทอรีต่าง ๆ รวมถึง “C:\Program Files”, “C:\Program Files (x86)”, “C:\ProgramData”, และ “C:\Users” นอกจากนี้ กลุ่มผู้ไม่หวังดียังรวบรวมรายชื่อ process ที่กำลังทำงานอยู่บนเครื่องของเหยื่อ และส่งข้อมูลนี้ไปยัง C2 Server ของกลุ่มโดยตรงที่ “hxxp://requestrepo.com/r/2yxp98b3“ ซึ่ง RequestRepo.com เป็นเครื่องมือสำหรับวิเคราะห์ HTTP request และ DNS ที่เข้ามา แต่กลุ่มผู้ไม่หวังดีใช้มันเพื่อรวบรวมข้อมูลที่ถูกขโมยมาจากเครื่องของเหยื่อ

นอกจากนี้กลุ่มผู้ไม่หวังดียังรวบรวมข้อมูลที่สำคัญมากขึ้น เช่น การตั้งค่าภาษาของระบบ, ตำแหน่งทางภูมิศาสตร์, ชื่อคอมพิวเตอร์, ชื่อผู้ใช้, โดเมนผู้ใช้, รหัสการเปิดใช้งาน remote tunnel และรายละเอียดเกี่ยวกับสิทธิ์ของผู้ใช้ ข้อมูลทั้งหมดนี้จะถูกเข้ารหัสเป็น base64 เพื่อปกปิดก่อนที่จะถูกส่งไปยัง C2 Server ผ่าน POST request

ผลกระทบ

หลังจากที่กลุ่มผู้ไม่หวังดีได้รับข้อมูลที่ถูกขโมยมา พวกเขาสามารถเข้าสู่ระบบด้วยบัญชี GitHub ที่ URL “hxxps://github.com/login/device” ซึ่งกลุ่มผู้ไม่หวังดีสามารถใส่รหัสเปิดใช้งานข้อมูลที่ถูกขโมยมาเพื่อเข้าถึงเครื่องของเหยื่อโดยไม่ได้รับอนุญาต

การเข้าถึงเครื่องของเหยื่อโดยไม่ได้รับอนุญาต ทำให้กลุ่มผู้ไม่หวังดีสามารถดู และจัดการไฟล์ และไดเรกทอรีที่เก็บอยู่ในระบบของเหยื่อได้

การเข้าถึงนี้ไม่เพียงแต่ช่วยให้กลุ่มผู้ไม่หวังดีสามารถเรียกดูไฟล์ของเหยื่อได้ แต่ยังช่วยให้พวกเขาสามารถดำเนินการคำสั่งผ่านเทอร์มินัลได้ ด้วยการควบคุมนี้ กลุ่มผู้ไม่หวังดีสามารถดำเนินการต่าง ๆ เช่น การติดตั้งมัลแวร์, การดึงข้อมูลที่สำคัญ หรือการเปลี่ยนแปลงการตั้งค่าของระบบ ซึ่งอาจนำไปสู่การใช้ประโยชน์จากระบบ และข้อมูลของเหยื่อเพิ่มเติม

นักวิจัยของ Unit42 อธิบายว่า กลุ่มผู้ไม่หวังดีสามารถเรียกใช้เครื่องมือหลายอย่าง รวมถึง mimikatz, LaZagne, In-Swor และ Tscan เพื่อดำเนินกิจกรรมที่เป็นอันตรายหลายอย่างในระบบของเหยื่อ

คำแนะนำ

  • ใช้โซลูชันการป้องกันระดับ endpoint ขั้นสูงที่รวมการวิเคราะห์พฤติกรรม และความสามารถในการเรียนรู้ของเครื่อง เพื่อระบุ และบล็อกกิจกรรมที่น่าสงสัย รวมถึงกิจกรรมที่เกี่ยวข้องกับแอปพลิเคชันที่ถูกลิขสิทธิ์ เช่น VSCode
  • ตรวจสอบ scheduled tasks ทุกระบบเป็นประจำเพื่อตรวจหารายการที่ไม่ได้รับอนุญาต หรือผิดปกติ ซึ่งสามารถช่วยตรวจจับกลไกการแฝงตัวที่สร้างขึ้นโดยกลุ่มผู้ไม่หวังดี
  • ให้ความรู้แก่ผู้ใช้งานเกี่ยวกับความเสี่ยงในการเปิดไฟล์ หรือลิงก์ที่น่าสงสัย โดยเฉพาะที่เกี่ยวข้องกับไฟล์ .LNK และแหล่งที่ไม่รู้จัก
  • จำกัดสิทธิ์ของผู้ใช้งานในการติดตั้งซอฟต์แวร์ โดยเฉพาะเครื่องมือที่สามารถถูกใช้ประโยชน์ได้ เช่น VSCode นอกจากนี้ ควรใช้การอนุญาตให้ติดตั้งแอปพลิเคชันเพื่อควบคุมว่าแอปพลิเคชันใดสามารถติดตั้ง และทำงานบนระบบได้
  • ติดตั้งเครื่องมือการตรวจสอบขั้นสูงที่สามารถตรวจจับ traffic ในเครือข่ายที่ผิดปกติ, การพยายามในการเข้าถึงที่ไม่ได้รับอนุญาต และพฤติกรรมที่ผิดปกติในระบบ, ตรวจสอบ log ของระบบ และแอปพลิเคชันเป็นประจำ

MITRE ATT&CK® Techniques

Tactic Technique Procedure
Execution (TA0002) Command and Scripting Interpreter: Python (T1059.006) Update.py is downloaded and executed by the shortcut file
Persistence (TA0003) Scheduled Task/Job: Scheduled Task (T1053.005) MicrosoftHealthcareMonitorNode” scheduled task is created for non-admin users
Privilege Escalation (TA0004) Scheduled Task/Job: Scheduled Task (T1053.005) MicrosoftHealthcareMonitorNode” scheduled task is created for admin users with SYSTEM privilege
Defense Evasion (TA0005) Masquerading: Match Legitimate Name or Location (T1036.005) Creates a folder “%localappdata%/Microsoft/Python” directory
Discovery (TA0007) System Information Discovery (T1082) Collects system’s language settings, geographical location, computername, username, and userdomain
Discovery (TA0007) File and Directory Discovery (T1420) Collects folder names present in program files and program data directory
Discovery (TA0007) Process Discovery (T1057) tasklist” command is used to gather a list of currently running processes.
Command and Control (TA0011) Application Layer Protocol: Web Protocols (T1071.001) The VSCode tunnel feature is used to access the victim’s system.

Indicators Of Compromise

Indicators Indicator Type Description
281766109f2375a01bad80478fd18841eccaefc1ee9277179cc7ff075d1beae2 SHA-256 Shortcut file
c7f07bdfb91653f53782885a3685436e2e965e1c5f4863c03f5a9825c0364489 SHA-256 update.py
hxxp://requestrepo.com/r/2yxp98b3 C&C POST request sent to this URL
hxxps://paste[.]ee/r/DQjrd/0 URL Downloads update.py

ที่มา : cyble.com