Co to jest ShellShock?
Shellshock to medialna nazwa nowej dziury, którą wykryto w popularnej komendzie UNIX-owej – Bash (Bourne Again Shell) – służącej do komunikacji użytkownika z systemem. Dziura pozwala na zdalne wykonanie komand w systemie, co zazwyczaj jest najcięższym kalibrem w czasie ataku. Oficjalnie jest opisana w komunikatach MITRE o symbolach CVE-2014-6271 i CVE-2014-7169.
Lukę odkrył francuz Stephane Schazelas. Jak poinformował w biuletynie CVE-2014-6271, GNU Bash w wersjach do 4.3 włącznie błędnie przetwarza zmienne środowiskowe przekazane przez system lub program wywołujący skrypt powłoki. Jeśli bash jest domyślną powłoką systemu, może zostać wykorzystany przez zdalnego napastnika do uruchomienia własnego kodu poprzez wywołania HTTP, połączenia SSH, sesje telnetowe i inne programy, jak np. system wydruku CUPS czy klienty DHCP.
Z pozoru trudno programowi, który służy do uruchamiania poleceń użytkownika, zarzucić, że to właśnie robi. Natomiast problem polega na tym, że łatwo można spowodować, aby uruchomił polecenia w sytuacji, kiedy nie jest to oczekiwane lub kiedy się nie ma ku temu uprawnień. W wyniku manipulacji treścią zapytania (tj. tekstu) przesyłanego do usługi sieciowej korzystającej z Basha (np. podatnej strony WWW), atakujący może przejąć kontrolę nad sekwencją komend wykonywanych przez tę usługę. Dochodzi do czegoś, co można określić jako zdalne wykonanie kodu/komendy (ang. Remote Command Execution – RCE).
Na czym polega Shellshock?
Shellshock polega na błędnym sposobie interpretacji funkcji przypisanych do zmiennych. Zmienna może przybrać wartość, która w praktyce może okazać się komendą do wykonania. Bash zaś “zapomni” o tym, że przetwarza zmienną i jeśli okaże się ona komendą wykonywalną, to po prostu ją wykona.
Błąd jest szczególnie groźny, gdyż w Internecie i w sieciach wewnętrznych wykorzystywanych jest wiele usług używających Basha. Wektorów ataku jest zatem bardzo dużo. Już teraz w logach serwerów WWW administratory obserwują próby wykorzystania podatności poprzez wysyłanie przez atakujących zapytań HTTP zawierających szkodliwy kod.
Jak sprawdzić czy wykorzystywana wersja Basha jest podatna na zagrożenie?
Eksperci z firmy RedHat, producenta systemu RedHat Linux, zaproponowali prosty sposób na sprawdzenie, czy wykorzystywana wersja Basha jest podatna na zagrożenie. W tym celu wystarczy w systemie wykonać poniższy kod:
env x='() { :;}; echo vulnerable’ bash -c „echo this is a test”
Co robi przedstawiony kod? Przypisuje zmiennej środowiskowej o nazwie x wartość '() { :;}; echo vulnerable’. Wartość składa się z dwóch części:
() { :;}; – definicji funkcji, która niczego nie robi,
echo vulnerable – polecenia echo wyświetlającego słowo „vulnerable” (tj. podatny).
W dalszej części linii wykonywany jest program Bash także uruchamiającey komendę echo, wyświetlającą komunikat „this is a test” tzn. „to jest test”. Zanim jednak Bash go wyświetli, musi wczytać zmienne środowiskowe, w tym zmienną x. Błąd Basha polega na tym, że wartość zmiennej x interpretuje i… wykonuje komendę znajdującą się po definicji funkcji. Jeśli zatem w wyniku wykonania polecenia pojawi się słowo „vulnerable”, oznacza to – dosłownie – że Bash jest podany.
W Sieci znaleziono pierwsze gotowe exploity ShellShocka. Badacz Robert Graham przeprowadził skan pod kątem podatności na atak, pierwszy scan zdołał zidentyfikować tysiące podatnych hostów, tylko na samym porcie 80. Jest ich prawdopodobnie o wiele więcej, gdyż jego skaner w pewnym momencie się zawiesił. Graham poinformował też, że ktoś wykorzystuje obecnie szybki skaner portów masscan, by zidentyfikować podatne maszyny.
Niestety nie ma jeszcze pełnej łaty dla Basha. Z drugiej strony nie jest tak, że wszystkie systemy go używają i zawsze prowadzi to do problemu. Trzeba bacznie obserwować pojawiające się informacje, a w szczególności te o łatach, które po ich pojawieniu się trzeba jak najszybciej instalować.
.
Źródło: Symantec