NFsec Logo

Podstawy skryptów shell #4

30/08/2017 w Bezpieczeństwo Możliwość komentowania Podstawy skryptów shell #4 została wyłączona

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

Zablokowanie połączeń wychodzących użytkownikom

12/07/2009 w Administracja Możliwość komentowania Zablokowanie połączeń wychodzących użytkownikom została wyłączona

J

eśli w systemie posiadamy użytkownika / grupę użytkowników (np. programistów), któremu / którym nie potrzebny jest “Internet”, ponieważ nasza maszyna pełni dla nich rolę produkcyjnej pod innym względem niż wykorzystanie jej łącza (np. kompilatory, oprogramowanie do obliczeń), to nie stoi nic na przeszkodzie, abyśmy zablokowali mu / im możliwość wykorzystania połączeń wychodzących.
[ czytaj całość… ]