Identyfikacja i exploitacja Redisa
Pierwsze ćwiczenie z bezpieczeństwa polegać będzie na wykryciu, że w sieci dostępny jest serwer z zainstalowaną usługą Redis. Efekt ćwiczenia to dostęp do usługi i możliwość odczytania wszystkich znajdujących się tam danych.
Założenia
- Przeskanowanie sieci i wyszukania aktywnych hostów
- Przeskanowanie portów i identyfikacji działających usług
- Namierzenie usługi Redis i złamapnie loginu oraz hasła
- Odczytanie danych znajdujących się w Redisie
Instalacja Redis Server
Na Ubuntu Server zainstalowałem Redis Server z repozytoriów systemowych:
sudo apt install redis-server -y
sudo systemctl status redis-server
Redis domyślnie powinien nasłuchiwać lokalnie, zwykle na adresie:
127.0.0.1:6379
Do ćwiczeń potrzebowałem jednak, aby Redis był widoczny również z drugiej maszyny wirtualnej w tej samej sieci labowej.
Konfiguracja usługi Redis Server
Plik konfiguracyjny Redis znajduje się w:
/etc/redis/redis.conf
W konfiguracji ustawiłem dyrektywę bind tak, aby Redis nasłuchiwał lokalnie oraz na adresie IP maszyny:
bind 127.0.0.1 192.168.202.131
Dodatkowo zostawiłem włączony tryb ochronny:
protected-mode yes
Po zmianach zrestartowałem usługę:
sudo systemctl restart redis-server
Następnie sprawdziłem, czy Redis nasłuchuje na porcie 6379:
sudo ss -lntp | grep 6379
Oczekiwany efekt to nasłuchiwanie na localhost oraz adresie interfejsu sieciowego:

Ustawienie loginu i hasła w Redis Server
Redis w nowszych wersjach obsługuje mechanizm ACL (Access Control List), który pozwala tworzyć użytkowników z osobnym loginem, hasłem i zestawem uprawnień. To lepsze rozwiązanie niż samo requirepass, ponieważ umożliwia bardziej precyzyjną kontrolę dostępu.
W moim labie użyłem Redis Server w wersji 8, więc mogłem skonfigurować dostęp w formie:
login: admin
hasło: admin
Najpierw edytowałem plik konfiguracyjny Redis-a:
sudo nano /etc/redis/redis.conf
Następnie dodałem konfigurację użytkownika ACL:
user default off <- wyłączenie domyślnego użytkownika Redis-a - nie można się zalogować bez podania danych uwierzytelanijących
user admin on >admin ~* +@all <- utworzenie użytkownika admin z dostępem do wszystkich kluczy
Poprawne logowanie z użyciem użytkownika i hasła wygląda tak:
redis-cli --user admin -a 'admin' PING
Identyfikacja aktywnych hostów w sieci
Z pomocą narzędzia nmap wyszukałem wszystkie aktywne hosty w sieci
nmap -sn 192.168.202.131/24
Parametr -sn skanuje aktywne hosty bez skanowania portów.
Narzędzie wykrywa kilka aktywnych hostów

Następnie przeskanowałem aktywne hosty:
nmap -Pn -sV -p- 192.168.202.131
Parametr -Pn pomija sprawdzanie, czy host jest aktywny
Parametr -sV wykrywa wersję usługi dostępną na skanowanych portach
Parametr -p- skanuje wszystkie porty od 1 do 65535

Do prostego testu połączenia można użyć klienta Redis:
redis-cli -h 192.168.202.131 -p 6379 PING
Jednak w tym przypadku serwer Redis-a jest zabezpieczony i nie można się do niego zalogować bez autoryzacji.
(error) NOAUTH Authentication required.
Eksploitacja hasła Redis Server
Kali Linux posiada wiele narzędzie do łamania haseł, jednym z popularnych narzędzi jest hydra. Niestety, w przypadku gdy Redis Server zabezpieczony jest loginem i hasłem (a nie samym hasłem) - hydra nie wystarczy.
W celu wykrycia hasła napisałem prosty skrypt w Python, który z użyciem redis cli sprawdza możliwe kombinacje haseł z dostarczonej word-listy.
python3 exploit-redis.py -H 192.168.202.131 -p 6379 -u admin -w /usr/share/wordlists/fasttrack.txt
Wynik polecenia po kilku chwilach to

Jak widać, słabe hasło możliwe jest do złamania bardzo szybko.