Co to jest Stack Clash i co mogę z tym zrobić?


27

Słyszałem o nowej usterce o nazwie Stack Clash, która najwyraźniej wpływa na wiele systemów uniksowych (nie tylko Linux, ale także BSD, Solaris).

  • Co to jest? Jak doszło do błędu w wielu systemach operacyjnych?
  • Jak chronić moje systemy?

Odpowiedzi:


29

Stack Clash to exploit oparty na dość starej technice. Pamięć używana przez proces jest podzielona na dwa regiony - stos i stertę . Ogólnie można sobie wyobrazić, że stos rośnie w dół, a sterta rośnie w górę. Co się stanie, gdy jedno z nich dorasta do starcia z drugim? Mówiąc bardziej ogólnie, co dzieje się, gdy stos rośnie wystarczająco, aby wkroczyć w niezwiązane obszary pamięci? Oryginalna luka ma 12 lat, a programiści jądra Linuksa naprawili ją tymczasowo, używając strony ochronnej . Jednak naukowcom z Qualys udało się to wykorzystać, pomimo strony straży.

Raporty Ars Technica :

Luki w stosach Clash powoli zyskały powszechną świadomość, najpierw w 2005 r. Dzięki odkryciom badacza bezpieczeństwa Gaëla Delalleau, a pięć lat później w związku z wydaniem luki w zabezpieczeniach Linuksa przez badacza Rafała Wojtczuka. Programiści systemu Linux wprowadzili ochronę, która miała zapobiegać kolizjom stosów, ale dzisiejsze badania pokazują, że napastnicy stosunkowo łatwo omijają ten środek.

Główny atak typu proof-of-concept opracowany przez Qualys wykorzystuje lukę zindeksowaną jako CVE-2017-1000364. Badacze Qualys opracowali również ataki wykorzystujące Stack Clash do wykorzystania oddzielnych luk w zabezpieczeniach, w tym CVE-2017-1000365 i CVE-2017-1000367. Na przykład, w połączeniu z CVE-2017-1000367, niedawno naprawioną wadą Sudo, również odkrytą przez Qualys, lokalni użytkownicy mogą wykorzystać Sudo do uzyskania pełnych uprawnień roota w znacznie szerszym zakresie systemów operacyjnych. Qualys do tej pory nie był w stanie dokonać exploitów w celu zdalnego wykonania kodu. Jedyną zdalną aplikacją, którą zbadali, był serwer pocztowy Exim, który przypadkowo okazał się niewykonalny. Qualys powiedziała, że ​​nie można wykluczyć istnienia takich exploitów do zdalnego wykonywania kodu. Qualys powiedział, że wyda exploity oparte na koncepcji w późniejszym terminie,

[...] O wiele więcej informacji można znaleźć w tym szczegółowym poradniku technicznym Qualys oraz w analizie technicznej opracowanej przez Grsecurity .

Cytując artykuł LWN o oryginalnej poprawce z 2010 roku:

Ponieważ Linux nie rozdziela stron stosu i stosu procesów, możliwe jest przekroczenie strony stosu na sąsiedniej stronie stosu. Oznacza to, że odpowiednio głęboki stos (na przykład z wywołania rekurencyjnego) może skończyć się użyciem pamięci na stercie. Program, który może pisać na tej stronie sterty (np. Klient X), może następnie manipulować adresem zwrotnym jednego z wywołań, aby przejść do wybranego przez siebie miejsca. Oznacza to, że klient może spowodować, że serwer uruchomi wybrany przez siebie kod - wykonanie dowolnego kodu - który można wykorzystać do uzyskania uprawnień roota.

Powyższy opis dotyczy różnych jąder uniksopodobnych.

Ars Technica, podczas gdy robi pamiętać tymczasowe obejście wymienionych w sprawozdaniu Qualys ( „ustawić  dysk rlimit stosu i RLIMIT_AS  z  użytkowników lokalnych  i  zdalnych usług  do niskiej wartości”), należy zauważyć, że nie musi to zabezpieczenie przed tego wykorzystać . Jedynym bezpiecznym wyjściem jest obecnie aktualizacja. Według analizy Grsecurity:

Powinno być jasne, że próby rozwiązania tego problemu tylko przez jądro zawsze będą zawsze niekompletne, ponieważ prawdziwym problemem jest brak sondowania stosu. Ponieważ alternatywne rozwiązanie rzeczywiste zależy od przebudowy całego obszaru użytkownika, jest to prawdopodobnie jedyne możliwe rozwiązanie w dającej się przewidzieć przyszłości.

Najlepsze, co możemy teraz zrobić, to zaktualizować jądro do łatanej wersji.

W exploicie z 2010 r. Użyto serwera X, w tym sudo, następnym może być dowolny z wielu programów użytkownika, które w pewnym momencie działają z podwyższonymi uprawnieniami.

Qualys nie opublikował jeszcze żadnego kodu sprawdzającego koncepcję exploitów (planują to zrobić w późniejszym terminie).


Istnieje wiele powiadomień bezpieczeństwa Ubuntu związanych z CVE-2017-1000364:

Zauważ również, że moduł CVE wyświetla kilka kombinacji wersji / jądra jako oczekujących poprawek.

Zasadniczo najprostszą poprawką jest jak najszybsza aktualizacja systemów do najnowszego pakietu jądra.

Odpowiednie wersje jądra z numerów USN (wycofane za pomocą for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24- lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image- lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image- powerpc -smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56- lowlatency 4.8.0-56.61
linux-image-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image- lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp- lts - utopic 4.4.0.81.87
linux-image-generic- lts - wily 4.4.0.81.87
linux-image-generic- lts - utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb- lts -vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts- utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
Linux-image-powerpc-e500mc-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts- wily 4.4.0.81.87
linux-image-virtual- lts -vivid 4.4.0.81.87
linux-image-virtual- lts - utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb- lts - wily 4.4.0.81.87
linux-image- lowlatency - lts -vivid 4.4.0.81.87
Linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp- lts -vivid 4.4.0.81.87
linux-image- lowlatency - lts - wily 4.4.0.81.87
linux-image-4.4.0-81- lowlatency 4.4.0-81.104
Linux-image-generic 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb- lts - utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic- lts -vivid 4.4.0.81.87
Linux-image-powerpc-e500mc-lts- utopic 4.4.0.81.87
linux-image- powerpc -smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp- lts - wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp- lts - wily 4.4.0.81.87
linux-image-virtual- lts - wily 4.4.0.81.87
linux-image-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp- lts - utopic 4.4.0.81.87
linux-image-powerpc-smp- lts -vivid 4.4.0.81.87
linux-image- lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image- lowlatency - lts - utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image-snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56- lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
Linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81- lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
Linux-image-4.4.0-81-generyczny 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic-lts-quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
linux-image-powerpc-e500 3.13.0.121.131
linux-image-generic- lts -trusty 3.13.0.121.131
linux-image-3.13.0-121-generic 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generic 3.13.0.121.131
linux-image-highbank 3.13.0.121.131
linux-image-generic- lts -saucy 3.13.0.121.131
linux-image- powerpc -smp 3.13.0.121.131
linux-image-3.13.0-121- lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts-saucy 3.13.0.121.131
linux-image-generic- lts - raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts-trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image- lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image- powerpc -smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
linux-image-generic 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128-highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
Linux-image-3.13.0-121-ogólny 3.13.0-121.170 ~ precyzyjny1
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic- lts -trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ precyzyjny1

Sudo

Wyżej wymieniony błąd sudo jest objęty USN-3304-1 , od 30 maja 2017 r .:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4

Podsumowując, powinno to zostać naprawione w większości obsługiwanych wersji Ubuntu, wystarczy zaktualizować?
CJCombrink,

@ TheBadger nie, jak zauważył tracker CVE, niektóre kombinacje są nadal wymienione jako oczekujące na wydanie. Podejrzewam, że więcej numerów USN zostanie opublikowanych wraz z wydaniem poprawek.
muru

4
Ale tak, aktualizacja powinna wystarczyć, dodatkowa konfiguracja nie jest potrzebna.
muru

Jeśli to wpływa, jak to sprawdzić?
stokrotka

1
@immibis zgodnie z następującym artykułem są, ale istniejąca implementacja nie działa poprawnie: Wyjaśnienie błędu Stackguard przez Qualys Research Labs
Igor B

1

Jak doszło do błędu w wielu systemach operacyjnych?

Aby konkretnie odpowiedzieć na tę część pytania:

Ten problem powstaje z powodu użycia wspólnej przestrzeni adresowej dla sterty (która rośnie w górę) i stosu (która rośnie w dół).

Taka konstrukcja jest powszechna w wielu systemach, dlatego wiele systemów jest podatnych na tę samą klasę podatności.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.