Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Wykradanie haseł z pamięci systemów Linux

17 marca 2013, 21:04 | Narzędzia, Teksty | komentarzy 14

Czytelnicy Sekuraka wiedzą już, że systemy Windows przechowują hasła w pamięci operacyjnej w postaci jawnej, a ich wydobycie jest banalnie proste. Dziś, dla porównania, przedstawiamy podobne zagadnienie na przykładzie Linuksa.

Podobnie, jak w przypadku Windowsów, spróbujemy przeprowadzić mały praktyczny eksperyment. Zrzucimy do pliku zawartość pamięci operacyjnej komputera pracującego pod kontrolą systemu operacyjnego Kali Linux, a następnie w wynikowym zbiorze poszukamy haseł użytkowników.

Kali Linux to dystrybucja pochodna Debiana (oficjalnie zaakceptowana jako Debian Derivative), stanowiąca zintegrowaną platformę do przeprowadzania testów penetracyjnych oraz audytów bezpieczeństwa. Do poniższych testów każdy może jednak wybrać dowolną inną dystrybucję.

 

Akwizycja pamięci fizycznej pod Linuksem

Przez akwizycję pamięci fizycznej rozumiemy wykonanie obrazu zawartości pamięci RAM w dowolnie wybranym momencie działania systemu operacyjnego oraz zachowanie tak przygotowanego zrzutu do dalszej analizy. Jak się okazuje, we współczesnych Linuksach nie jest to wcale takie proste, nawet jeśli dysponujemy kontem roota.

Dawniej wykonanie zrzutu całej pamięci fizycznej pod Linuksem było możliwe np. z wykorzystaniem programu dd i urządzenia /dev/mem. Jednak w wersji jądra 2.6 ze względów bezpieczeństwa zaczęto wprowadzać ograniczenia na bezpośredni dostęp do całej pamięci fizycznej. My jednak w tym celu skorzystamy ze specjalnego narzędzia, jakim jest Linux Memory Extractor (LiME).

LiME pozwala na zrzucenie zawartości całej pamięci fizycznej dzięki wykorzystaniu mechanizmu Loadable Kernel Module (LKM). Spójrzmy, w jaki sposób możemy przygotować to narzędzie do działania.

root@kali:~# cd /usr/local/src/
root@kali:~# wget http://lime-forensics.googlecode.com/files/lime-forensics-1.1-r14.tar.gz
root@kali:~# tar zxfv lime-forensics-1.1-r14.tar.gz
root@kali:~# cd src
root@kali:~# make
...
root@kali:~#

Natomiast samo zainstalowanie modułu oraz zrzucenie zawartości pamięci fizycznej do pliku (/root/memdump) w przypadku naszego testowego systemu jest możliwe w następujący sposób:

insmod lime-3.7-trunk-686-pae.ko "path=/root/memdump format=lime"

 

Pamięć absolutna

Świetnie, udało się dokonać akwizycji pamięci naszego Linuksa. Poszukajmy więc, czy w pamięci operacyjnej nie znajduje się przypadkiem hasło jednego z zalogowanych obecnie użytkowników…

Zrzut pamięci zawiera moje hasło

Zrzut pamięci zawiera moje hasło

Jak widać, zrzut pamięci zawiera hasło w postaci jawnej. Dalsza analiza pozwala na odnalezienie haseł użytkowników, którzy korzystali z systemu lokalnie oraz tych korzystających z SSH. Hasła pozostają w pamięci nawet, gdy użytkownik wylogował się już z systemu. Co ważne, często zdarza się tak, że zawartość pamięci poprzedzająca hasło (np. komendy typu ssh, nazwy użytkowników itp.) sugeruje, że mamy do czynienia właśnie z poświadczeniami. Spójrzmy.

Hasła użytkowników zawarte w zrzucie pamięci

Hasła użytkowników zawarte w zrzucie pamięci

 

Jak pokazaliśmy, w pamięci fizycznej zarządzanej przez systemy operacyjne Linux również znajdziemy hasła użytkowników w jawnej postaci, a pomimo dodatkowych mechanizmów ochronnych obecnych w aktualnych wersjach jądra, administrator bez większego problemu poradzi sobie z wykonaniem zrzutu pamięci operacyjnej.

Podsumowując, zachęcamy wszystkich do przetestowania pod podobnym kątem własnych systemów operacyjnych oraz rozmaitych aplikacji, którym na co dzień powierzamy nasze poświadczenia!

Wojciech Smol, (wojciech.smol<at>sekurak.pl)

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. gluth

    Czyli dobre hasło nie powinno opierać się na słowniku, nie powinno być znajdowalne w zrzucie pamięci operacyjnej przy pomocy słowników. Nikt przy zdrowych zmysłach nie przeczyta czterech gigabajtów danych w poszukiwaniu wzorca wytworzonego przez ludzki umysł.

    To nie problem znaleźć, gdy się wie, czego szukać.

    Odpowiedz
    • @gluth,
      Zaznaczyłem w tekście, że „Co ważne, często zdarza się tak, że zawartość pamięci poprzedzająca hasło (np. komendy typu ssh, nazwy użytkowników, itp.) sugeruje, że mamy do czynienia właśnie z poświadczeniami.”

      Jeśli spojrzysz na drugą ilustrację, to wyraźnie widać, że hasło „ToJestMojeHaslo” zostało znalezione m.in. bezpośrednio po odpowiadającej mu nazwie użytkownika „testowy”. Reasumując, w wielu przypadkach „okoliczne dane” sugerują, gdzie mamy w pamięci właśnie hasła.

      Odpowiedz
    • @gluth,
      Oczywiście pomysł z atakiem słownikowym w poszukiwaniu ciągów będących hasłami w pamięci, też jest całkiem ciekawy :).

      Odpowiedz
  2. Greg

    Może nazwy użytkowników tworzyć na podobnych zasadach co hasła?
    login: 2Nb^%3Kaa);”
    Password: 2*%sOd!,KK/0$
    :)

    Odpowiedz
  3. kiedyś próbowałem używać łamania hasła na swoim komputerze, chciałem sprawdzić czy to wogóle możliwe. Przy określeniu żeby program szukał haseł tylko wśród liter dużych, małych i cyfr pokazał mi że to zajmie ok 11dni tylko wtedy pokazało to w godzinach tak więc może i to działa ale strasznie jest czasochłonne

    Odpowiedz
  4. halorty

    Warto wspomnieć także o „fmem” który jest modułem jądra, który tworzy urządzenie /dev/fmem, podobny do /dev/mem, ale bez ograniczeń. Wówczas urządzenie (w tym wypadku fizyczny RAM) mogą być kopiowane przy użyciu „dd” lub innego narzędzia. Działa na 2.6 na jądrze Linux. Na licencji GNU GPL.

    Odpowiedz
  5. Damian

    nice post ;] warto takze zapoznac sie z technika Evil Maid ktora polega na przechwyceniu hasla sluzacego do rozszyfrowania dysku

    Odpowiedz
  6. Czytelnik

    Mam prośbę, o sprawdzenie tej sytuacji pod systemem FreeBSD

    Odpowiedz
  7. imię

    ciekawe czy tak samo można wydobyć hasła na stuningowanym linuchu robił ktos juz testy np z grsec?

    Odpowiedz
  8. NIeKrzyczciePoczątkujący

    make -C /lib/modules/3.7-trunk-amd64/build M=/usr/local/src/src modulesmake: *** /lib/modules/3.7-trunk-amd64/build: Nie ma takiego pliku ani katalogu. Stop.make: *** [default] Błąd 2

    Nie stety nie działa na moim kali linux wyżej podana instrukcja…

    LiME kŧóry pobrałem (z linku wyżej) jest z dopiskiem r17.

    Odpowiedz
  9. NIeKrzyczciePoczątkujący

    Ps: przy wpisaniu make to się ukazuje

    Odpowiedz
  10. Jakub Staśkiewicz

    A zwrócił ktoś uwagę, że w dzisiejszych czasach, gdy większość systemów to maszyny wirtualne nie trzeba się nawet bawić w dumpowanie RAM-u? Właśnie zrobiłem test w środowisku VMware i wygrepowałem hasło roota z RAM-u maszyny wirtualnej, do której się nawet nie musiałem logować.

    Odpowiedz
  11. robert

    Bardzo proszę o pomoc.
    Po make dostaje taki komunikat:

    make[1]: Wejście do katalogu `/usr/src/linux-headers-3.2.0-36-generic’ make[1]: *** Brak reguł do wykonania obiektu `_Extractor_DUMPER/src’. Stop. make[1]: Opuszczenie katalogu `/usr/src/linux-headers-3.2.0-36-generic’ make: *** [default] Błąd 2

    Co mam dalej zrobić?

    Odpowiedz
  12. Linusk

    A ja się spodziewałem że mitycznym Linuxie to będą jakieś krzaczki potraktowane 3desem łącznie z SHA-256 + base64 ;>
    a tu takie rzeczy ! :P

    Odpowiedz

Odpowiedz