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

Infection chain for remote tunnels

Attack chain của chiến dịch trải qua các bước sau:

  1. Gửi tệp LNK độc hại, ví dụ như: update.py

  2. 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

  3. Script Python tải xuống và chạy phiên bản CLI của VSCode, được gọi là code-insiders.exe

  4. 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

  5. Remote tunnel của VSCode được thiết lập.

  6. 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.

PowerShell command to download and run python

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.

VSCode remote tunnel setup script

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ọ.

Github authentication for VSCode remote tunnels

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ọ.

GitHub device authentication for VScode remote tunnels

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.

Remote tunnel host

Remote tunnel host

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.

Directory traversal VSCode remote tunnel

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, OutFilepython.

{
  "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/DomainMô tả
https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64VSCode CLI Download Domain
https://code.visualstudio.com/sha/download?build=insider&os=cli-win32-x64Code Insiders CLI Download
vscode.devDomain cho VSCode browser session
insiders.vscode.devDomain 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

0
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 ^^