Lạm dụng VSCode Remote Tunnels để thực hiện Remote Code Execution trên máy nạn nhân


Remote Tunnels là gì?
Khái niệm Remote Tunnels
Remote Tunnels là một tính năng được tích hợp trong Microsoft VSCode. Tính năng này cho phép người dùng kết nối với máy từ xa, như máy tính để bàn hoặc máy ảo (VM), thông qua tunnel. Người dùng có thể kết nối với máy đó từ VS Code client ở bất kỳ đâu mà không cần SSH.
Cách hoạt động của Remote Tunnels
Ví dụ khi người dùng muốn truy cập vào môi trường code trên máy tính của công ty, họ chỉ cần bật Remote Tunnels trong VSCode. Sau đó, công cụ này sẽ cung cấp cho người dùng một URL. Người dùng chỉ cần dán URL đó vào trình duyệt web, xác thực bằng tài khoản Microsoft hoặc GitHub và họ sẽ có quyền truy cập vào môi trường code trên local máy đó (nếu họ đã được cấp quyền). Người dùng cũng có thể cấp quyền truy cập vào tunnel cho đồng nghiệp, cho phép họ kết nối với môi trường code.
Remote Tunnels bị lạm dụng như thế nào?
Trong thời gian gần đây, việc lạm dụng VSCode Remote Tunnel có xu hướng tăng lên, bằng chứng là nhiều nhóm tấn công đang sử dụng công cụ này trong các chiến dịch của họ.
Đầu tiên, một script độc hại hoặc tệp LNK được gửi đến nạn nhân nhằm mục đích kiểm tra xem hệ thống của họ có cài đặt VSCode hay không. Nếu không có VSCode, tin tặc sẽ tự động cài đặt phiên bản CLI của VSCode. Sau khi hoàn tất, chúng thiết lập một đường hầm từ xa, tạo một kênh truy cập ẩn từ máy tính nạn nhân tới hệ thống của tin tặc.
Phân tích kỹ thuật
Chúng ta sẽ sử dụng một chiến dịch do Mustang Panda (hay còn gọi là Stately Taurus) thực hiện để lấy ví dụ cho việc phân tích.
Phân tích chuỗi tấn công
Attack chain của chiến dịch trải qua các bước sau:
Gửi tệp LNK độc hại, ví dụ như: update.py
Tệp LNK chứa lệnh PowerShell để tải xuống và chạy một script Python từ một địa chỉ IP từ xa
Script Python tải xuống và chạy phiên bản CLI của VSCode, được gọi là
code-insiders.exe
Script Python tạo và xác thực một đường hầm VSCode (VSCode tunnel), sử dụng CLI và kết nối với Github
Remote tunnel của VSCode được thiết lập.
Kẻ tấn công thực hiện lệnh từ xa thông qua payload Python, sử dụng đường hầm đã thiết lập từ trình duyệt web.
Thực thi tập tin LNK
File LNK sẽ chứa một dòng lệnh PowerShell đơn giản có nhiệm vụ tải xuống một tập lệnh Python từ máy chủ web và thực thi script.
Thực hiện script Python
Script Python tải xuống tệp binary CLI cho phiên bản Code Insiders của VSCode. Sau đó, nó tạo một tunnel và tạo liên kết xác thực.
Kết nối với tunnel
Kẻ tấn công cần lấy device code GitHub mà script python gửi về để xác thực và nhập vào URL https://github.com/login/device
. Điều này dễ dàng thực hiện được vì kẻ tấn công đang xác thực với GitHub bằng tài khoản của họ.
Kẻ tấn công sau đó cần phải cho phép cho tunnel kết nối với tài khoản của họ.
Sau khi xác thực tài khoản, kẻ tấn công sẽ thấy danh sách các máy chủ từ xa đang sử dụng tunnel mà có thể kết nối tới.
Kkẻ tấn công bây giờ có thể truy cập đến các thư mục trên máy chủ từ xa của nạn nhân.
Và cuối cùng, chúng có thể tạo các tập tin, script mới và thực thi chúng từ xa.
Kết luận
Tóm lại phần này, tính năng Remote Tunnel trên VSCode cực kỳ mạnh mẽ và cung cấp khả năng thực hiện toàn bộ lệnh thực thi mã từ xa. Điều đáng sợ nhất là kẻ tấn công có thể thực hiện tất cả những điều này với chỉ một tệp LNK đơn giản được gửi đến người dùng.
Cách phát hiện VSCode Remote Tunnel
Thực thi PowerShell
Việc phát hiện lạm dụng VSCode Remote Tunnel có thể được thực hiện bằng cách theo dõi hành vi thực thi tệp LNK để tải xuống và chạy python script.
Chúng ta có thể lọc thêm bằng cách tìm kiếm một số tham số PowerShell nhất định, ví dụ như Invoke-WebRequest
, OutFile
và python
.
{
"query": {
"bool": {
"must": [
{ "term": { "host.os.type": "windows" } },
{ "term": { "event.type": "start" } },
{ "term": { "process.name": "powershell.exe" } },
{ "wildcard": { "process.parent.executable": "*explorer.exe" } },
{
"regexp": {
"process.args": ".*(Invoke-WebRequest.*OutFile.*python|Invoke-WebRequest.*python.*OutFile|OutFile.*Invoke-WebRequest.*python|OutFile.*python.*Invoke-WebRequest|python.*Invoke-WebRequest.*OutFile|python.*OutFile.*Invoke-WebRequest).*"
}
}
]
}
}
}
Thiết lập VSCode Tunnel
Kẻ tấn công sẽ thường đổi tên file code.exe
hoặc code-insiders.exe
trên hệ thống nên viêc tìm kiếm hành vi độc hại theo tên file là khá vô nghĩa.
Do đó, chúng ta phải tập trung vào các hành vi mà kẻ tấn công không thể thay đổi, ví dụ như việc truyền tham số --accept-server-license-terms
vào quá trình thực thi. Tham số này cho phép khởi động máy chủ từ xa mà không cần sự xác nhận thêm của người dùng.
Thực thi script
Người quản trị hệ thống cần giám sát các tiến trình liên quan đến PowerShell, đặc biệt là khi nó khởi chạy các công cụ như Python.
Đồng thời theo dõi các tham số lệnh (command_line
) có thể giúp phát hiện các hành vi bất thường, như sử dụng các tham số lạ hoặc script không rõ nguồn gốc.
Các kết nối mạng
Tên miền chính được sử dụng bởi VSCode tunnel là:
global.rel.tunnels.api.visualstudio.com
Chặn tên miền này trong tổ chứ sẽ chặn việc sử dụng tunnel. Các tên miền khác được sử dụng như một phần của VSCode tunnel bao gồm:
URL/Domain | Mô tả |
https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64 | VSCode CLI Download Domain |
https://code.visualstudio.com/sha/download?build=insider&os=cli-win32-x64 | Code Insiders CLI Download |
vscode.dev | Domain cho VSCode browser session |
insiders.vscode.dev | Domain cho Code Insiders browser session |
Khuyến nghị
Phía FPT Threat Intelligence khuyến nghị tổ chức và cá nhân một số cách để phòng chống chiến dịch này:
Vô hiệu hóa quyền truy cập tunnel ẩn danh: Không cho phép truy cập đường hầm ẩn danh.
Vô hiệu hóa Dev Tunnels: Hầu hết tất cả các command, với một số ít ngoại lệ, đều phải bị từ chối quyền truy cập (Ngoại lệ: unset, echo, ping và user).
Chỉ cho phép ID Microsoft Entra tenant ID trong danh sách: Người dùng phải được xác thực trong danh sách đối tượng cho phép để truy cập Dev Tunnels.
Tham khảo
Subscribe to my newsletter
Read articles from Tran Hoang Phong directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Tran Hoang Phong
Tran Hoang Phong
Just a SOC Analysis ^^