NFsec Logo

Podstawy skryptów shell #4

30/08/2017 w Bezpieczeństwo Brak komentarzy.

W

kolejnej części naszej serii [ 1 ] [ 2 ] [ 3 ] zajmiemy się atakami związanymi z uwierzytelnianiem. Zaczniemy od tezy, że nie należy polegać na skryptach, aby ustalać, czy użytkownik ma lub nie ma uprawnień do danej czynności. Jest to możliwe, jednak istnieją dobre i złe strony takiego rozwiązania. Za przykład posłuży nam skrypt:

#!/bin/bash

if [ $UID = 0 -a $USER = "root" ] ; then
    echo "Jesteś administratorem zapraszam do domu."
    echo $HOME
fi

Kod ten zawiera trzy błędy bezpieczeństwa i wszystkie są spowodowane używaniem zmiennych. Mimo, że bash chroni przed modyfikacją zmienną $UID to już $USER jest niezabezpieczona. No i kto powiedział, że inne powłoki chronią zmienną $UID?

root@darkstar:/home/agresor# ./test.sh
Jesteś administratorem zapraszam do domu.
/root
root@darkstar:~#

Skrypt działa poprawnie dla konta administratora. Przeprowadźmy teraz atak za pomocą zwykłego użytkownika:

agresor@darkstar:~$ ./test.sh
agresor@darkstar:~$ # Niestety nic z tego, ale...
agresor@darkstar:~$ tcsh
darkstar:~> setenv UID 0
darkstar:~> setenv USER root
darkstar:~> setenv HOME /tmp
darkstar:/home/agresor> /bin/bash test.sh
Jesteś administratorem zapraszam do domu.
/tmp

Jeśli ewentualnie chcemy pozyskać informacje o użytkowniku powinniśmy wykorzystać polecenie id:

# Prawdziwy UID
USRUID="$(/usr/bin/id -u -r)"
# Efektywny UID
USEUID="$(/usr/bin/id -u)"
# Nazwa użytkownika
USNUID="$(/usr/bin/id -u -n)"

Na szczęście powyższy skrypt operował tylko wyświetlaniem komunikatów za pomocą echo. W połączeniu z innym możliwym atakiem (wstrzykiwania) można te błędy wykorzystać w bardziej zły sposób.

Więcej informacji: TCSH / CSH Shell Set PATH Variable, Shell Script Security

Podstawy skryptów shell #3

29/07/2017 w Bezpieczeństwo Brak komentarzy.

T

rzecia część [ 1 ] [ 2 ] będzie poruszać ataki wstrzykiwania do skryptów powłoki. Te typy ataków występują, gdy użytkownik dostarcza jako argumenty przechowywane w zmiennych skryptu spreparowane polecenia lub wartości zamiast oczekiwanych danych wejściowych. W dodatku użyte zmienne są pozbawione znaków cytowania, które służą do usuwania interpretacji znaków specjalnych przez powłokę. Na przykład:

#!/bin/bash

read LOGIN
read COMMAND
if [ x$LOGIN = xroot ]; then
    echo $LOGIN
    eval $COMMAND
fi

[ czytaj całość… ]

Podstawy skryptów shell #2

11/06/2017 w Bezpieczeństwo Brak komentarzy.

W

drugiej części naszej serii zajmiemy się atakami na katalogi, które są dostępne do zapisu dla wszystkich użytkowników. Pliki znajdujące się w tych katalogach podatne są na atak polegający na możliwości zastąpienia ich innym, „złośliwym” plikiem, który skrypt zamierza odczytać lub zapisać.
[ czytaj całość… ]

Podstawy skryptów shell #1

25/05/2017 w Bezpieczeństwo Brak komentarzy.

B

ezpieczeństwo, jeśli chodzi o pisanie skryptów shell bywa różne. Większość użytkowników skupia się zazwyczaj na rozwiązaniu napotkanego problemu programistycznego lub automatyzacji żmudnego zadania. Nie doprowadzanie w kodzie do luk umożliwiających późniejszą ich eksploatację schodzi na drugi plan. Dlatego w tej serii zostanie opisanych kilka typowych błędów popełnianych w skryptach shell oraz sposoby, w jaki można je wykorzystać i nim zapobiec.
[ czytaj całość… ]

Niektóre znaki zachęty mogą być podatne na wykonanie kodu

19/03/2017 w Bezpieczeństwo Brak komentarzy.

C

iekawe demo oraz słuszność swojego pomysłu przedstawił N.J. Hartwell. Pokazuje on, że niektóre znaki zachęty szczególnie te, którym dołożono wyświetlanie nazwy brancha git mogą być podatne na wykonanie dowolnego kodu. Można oszukać naszą, lokalną powłokę, aby wykonała polecenie lub skrypt, jeśli nazwiemy nasz branch na przykład tak: $(./skrypt.sh). Jak sprawdzić czy nasz prompt jest podatny? Wystarczy, że ściągniemy to repozytorium i wejdziemy do niego za pomocą polecenia cd. Jeśli prompt naszej powłoki niepoprawnie przeprowadzi interpretację zestawu znaków $(..) to wykona skrypt ./pw3n i wyświetli (na szczęście) tylko odpowiedni komunikat.

#Kochanki.Adminów – where there’s a shell, there’s a way

10/03/2017 w Ataki Internetowe, Bezpieczeństwo Brak komentarzy.

I

nternet przyzwyczaja nas do wielu nowych rzeczy. To, co jest w nim opublikowane przyjmujemy czasem za pewnik, a porady za sprawdzone i uzasadnione. Niestety nie zawsze tak jest. Jeśli spojrzymy na niektóre, zalecane metody instalacji lub konfiguracji oprogramowania to aż trudno uwierzyć, że nikt nie pomyślał na ile różnych sposobów można je wykorzystać. Sprawdźmy dokąd może zaprowadzić nas na przykład polecenie:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

[ czytaj całość… ]

LUNAR – Lockdown UNix Auditing and Reporting

08/02/2017 w Bezpieczeństwo Brak komentarzy.

L

UNAR jest narzędziem do audytu systemów z rodziny *nix opartym na kilku benchmarkach oraz innych frameworkach. W skryptach źródłowych można znaleźć nawet adnotacje odnoszące się do konkretnych punktów z zaleceń benchmarków. Obsługuje m.in systemy: RHEL 5, 6, 7 (w tym CentOS oraz Scientific Linux); SLES 10, 11, 12; Debian / Ubuntu; Amazon Linux; Solaris 6, 7, 8, 9, 10 oraz 11 oraz Mac OS X. Jak sam autor zaleca, aby mieć największą pewność, że żadne niepowołane zmiany zostaną dokonane w naszym systemie – najlepiej uruchamiać narzędzie w trybie audytu (-a). W ten sposób do wykrytych nieprawidłowości można odnieść się poprzez czytanie konkretnych instrukcji kodu (całość napisana jest w języku powłoki bash) lub wspomnianych wcześniej komentarzy. Gdyby doszło to jakieś pomyłki istnieje możliwość wycofania zmian, ponieważ pliki są backupowane za pomocą cpio.
[ czytaj całość… ]

Ukrywanie szkodliwego kodu w skryptach bash

09/01/2017 w Ataki Internetowe, Bezpieczeństwo Brak komentarzy.

Przez przypadek trafiłem na wpis na wykopie. Idąc tym tropem dotarłem do źródła, w którym możemy znaleźć prosty przepis na stworzenie szkodliwego skryptu w powłoce bash, który z pozoru będzie wyglądał normalnie:

$ printf '#!/bin/bash\necho szkodliwy kod!\nexit\n\033[2Aecho cos tam! ...\n' > backdoor.sh
$ chmod +x backdoor.sh
$ cat backdoor.sh
#!/bin/bash
echo cos tam! cos tam!
$ ./backdoor.sh
szkodliwy kod!

Jak to działa? Istnieją specjalne sekwencje znaków, które interpretuje terminal nie wyświetlając ich, ale podejmując daną akcję. Dlaczego takie polecenia, jak: cat, head, tail, more i inne zostają oszukane? Ponieważ sekwencja \033[XA powoduje przesunięcie kursora do góry o X linii nadpisując to, co jest w tej X linii. Przez, co użytkownik widzi zupełnie inny kod niż w rzeczywistości zostanie wykonany. W połączeniu z innymi atakami mogą stanowić kompletny wektor na oszukanie użytkownika sytemu z rodziny *nix.

Więcej informacji: JournalCTL Terminal Escape Injection && Log Injection, Terminal Emulator Security Issues

CURL i skrypty instalacyjne w powłoce

20/04/2016 w Ataki Internetowe, Bezpieczeństwo Brak komentarzy.

K

ażda instalacja pakietów z nieznanego źródła, czy ślepe kopiowanie i wklejanie poleceń do terminala jest ewidentnie złym pomysłem. Ostatnio bardzo modne stało się instalowanie różnego rodzaju pluginów, aplikacji, rozwiązań wirtualizacji i innych tworów startapowych poprzez polecenie typu curl http://startup.io/install.sh | bash, co w założeniu ma znacznie upraszczać proces instalacji i konfiguracji dla użytkownika. Wykrywany jest system, instalowane zależności, ściągane dodatkowe instalatory itd. – wszystko szybko i automatycznie, ale czy bezpiecznie?
[ czytaj całość… ]

CVE-2016-3672 – Zniesienie limitu dla stosu już nie wyłącza ASLR

06/04/2016 w Bezpieczeństwo Brak komentarzy.

P

anowie z osławionego błędu związanego z GRUB2 ujawniają bardzo proste obejście mechanizmu ASLR. Każdy użytkownik, który mógł uruchomić aplikacje 32-bitowe na maszynie x86 – mógł za pomocą prostego polecenia wydanego z poziomu powłoki bash (ulimit -s unlimited) wyłączyć mechanizm Address Space Layout Randomization. Nie jest to luka sama w sobie, ale prosty i bardzo stary trik, jak obejść mechanizm dodatkowego zabezpieczenia, aby ułatwić sobie eksplorację innego błędu.

Więcej informacji: CVE-2016-3672 – Unlimiting the stack not longer disables ASLR

Strona 1 z 41234