11:27
31/10/2018

Nie raz i nie dwa polecaliśmy wam Signala i dalej będziemy go polecać, ale nie ma produktów idealnych. Okazało się, że wiadomości zapisane na waszych komputerach mogą być dostępne łatwiej niż sądzono. Co jeszcze ciekawsze, nie tylko Signal ma taki problem. Po prostu z tym bezpieczeństwem komunikatorów nie do końca tak jak wszystkim się wydaje.

Jak rozumiesz pojęcie “szyfrowany komunikator”? Zapewne zakładasz, że takie narzędzie szyfruje wiadomości przesyłane oraz przechowywane na dysku? Niestety…

Podczas instalacji desktopowej wersji komunikatora Signal aplikacja tworzy zaszyfrowaną bazę danych SQLite o nazwie db.sqlite, w której przechowuje historię konwersacji użytkownika. Sam klucz wykorzystywany do zaszyfrowania bazy danych generowany jest automatycznie przez aplikację — brak tu jakiejkolwiek interakcji z użytkownikiem końcowym oprogramowania.

Signal Desktop będzie wykorzystywać ten klucz szyfrujący za każdym razem, kiedy zajdzie potrzeba otworzenia bazy danych. I tu robi się ciekawie. Klucz szyfrujący przechowywany jest w formie plain textu w lokalnie przechowywanym pliku config.json. W przypadku komputerów korzystających z systemu operacyjnego z rodziny Microsoft Windows znajdziemy go w ścieżce:

%AppData%\Signal\config.json

Natomiast w przypadku systemu Mac OS:

~/Library/Application Support/Signal/config.json

W ten oto prosty sposób, otworzenie pliku config.json staje się równoznaczne z uzyskaniem dostępu do klucza, za pomocą którego możemy odszyfrować bazę danych zawierającą historię konwersacji użytkownika Signal Desktop. Odkrywca tego problemu — Nathaniel Suchy — bardzo trafnie podsumował opisywaną sytuację za pomocą jednego, ale za to bardzo wymownego zdania —

“Szyfrowanie baz danych jest świetne, o ile umiejętnie zarządza się kluczami szyfrującymi”

Taka architektura, z jakiej korzysta Signal Desktop powoduje iż potencjalny atakujący — oczywiście po uzyskaniu dostępu do komputera ofiary — uzyska dostęp do historii konwersacji interesującego go użytkownika praktycznie bez żadnego wysiłku.

Należy jednak pamiętać i mocno podkreślić, że

w momencie, w którym atakujący uzyska fizyczny dostęp do komputera ofiary to nie jest to już jej komputer

I nie ma większego znaczenia jak ofiara wprowadzałaby klucz (hasło) do rozszyfrowania historii rozmów. Ta historia mogłaby być przechwycona na kilka sposobów przez osobę która “siedzi” na komputerze ofiary i ma możliwość wykonywania na nim swoich poleceń.

To prawda, że zabezpieczenia wprowadzane na poziomie aplikacji powinny z założenia utrudniać dalsze wykorzystanie dostępu i wydobycie potencjalnie bardzo wrażliwych informacji, ale warto też podkreślić, że pewnych rzeczy nie da się ochronić, jeśli ktoś ma dostęp do tego samego sprzętu i systemu na jakim pracujemy, a zwłaszcza wtedy kiedy na nim pracujemy.

“Zrób to sam”

O reprodukcję ataku w celach stricte edukacyjnych może pokusić się każdy zainteresowany. Oto krótka instrukcja, jak to zrobić.

  1. Pobierz i zainstaluj aplikację “Signal Desktop”
  2. Otwórz bazę danych db.sqlite za pomocą programu SQLite Database Browser. Bazę danych w systemach z rodziny Microsoft Windows znajdziesz w podanej poniżej ścieżce:
    %AppData%\Roaming\Signal\sql\db.sqlite
  3. Wprowadź klucz, znajdujący się w pliku config.json

W ten oto sposób — jeśli masz fizyczny dostęp do komputera i konta użytkownika ofiary — uzyskałeś pełen dostęp do bazy danych aplikacji Signal Desktop oraz jej zawartości.

Źródło obrazka: www.bleepingcomputer.com

Nie ulega wątpliwości, że szyfrowanie baz danych komunikatorów stanowi dobrą praktykę w kontekście zabezpieczania prywatnych wiadomości użytkowników aplikacji, jednak – tak jak wspomniał Nathaniel Suchy – mija się z celem w sytuacji, kiedy klucz umożliwiający jej odszyfrowanie staje się możliwy do odczytu przez każdego zainteresowanego, który ma dostęp do konta ofiary na komputerze na którym ta baza jest przechowywana.

Opisywanemu w artykule problemowi można (ale też tylko w części) zapobiec w prosty sposób — prosząc użytkownika aplikacji o podanie hasła, czy też “passphrase”, za pomocą którego zaszyfrowano by klucz umożliwiający dostęp do bazy danych. Praktyka ta powszechnie stosowana jest chociażby w przypadku usług takich jak portfele kryptowalut czy menadżerach haseł.

Jedynym zastrzeżeniem wspomnianej metody zabezpieczeń jest fakt, iż w momencie utraty hasła wykorzystanego do zaszyfrowania klucz, dane użytkownika zostaną utracone na zawsze. Ale większe bezpieczeństwo prawie zawsze wiążę się z większą odpowiedzialnością.

A to jeszcze nie wszystko…

W 2014 roku, czyli w momencie udostępnienia pierwszej stabilnej wersji aplikacji, Signal dostępny był wyłącznie na urządzeniach mobilnych korzystających z systemów Android oraz iOS. Z biegiem czasu, w celu umożliwienia korzystania z oprogramowania szerszemu gronu odbiorców, udostępnione zostało rozszerzenie Signal dla przeglądarki Chrome, którego funkcjonalność nie różniła się prawie niczym od oryginału znanego ze smartfonów.

Od końca października 2017 roku, nowy wariant aplikacji znany właśnie jako Signal Desktop, pozwala się “pozbyć” przeglądarkowego rozszerzenia, którego wsparcie kończy się za mniej niż miesiąc. Należy w tym celu wykonać migrację do wspomnianej wcześniej wersji desktopowej oprogramowania.

Użytkownicy którzy korzystali z rozszerzenia Signal dla Chrome mają możliwość zachowania historii swoich konwersacji wraz z załącznikami — jedyne co muszą zrobić, to wskazać folder, do którego dane zostaną wyodrębnione w celu ich późniejszego importu do Signal Desktop.

Matt Suische , badacz bezpieczeństwa i założyciel CloudVolumes, był jedną osób korzystających z rozszerzenia Signal dla Chrome, które zdecydowały się na skorzystanie z możliwości przejścia na desktopową wersję aplikacji. Tym, co wyróżniło Matta na tle innych, odrobinę mniej czujnych użytkowników było to, że zwrócił on uwagę na eksportowane przez aplikację dane. A konkretniej na fakt, iż zostają one zapisywane na twardym dysku w formie… niezaszyfrowanej.

Podczas eksportu danych do wybranej lokalizacji, w katalogu głównym utworzone zostają pojedyncze foldery – po jednym dla każdego z kontaktów w aplikacji. Nazwy katalogów składają się z nazwy kontaktu oraz odpowiadającemu mu numeru telefonu – tak więc sam wgląd do katalogu głównego daje zainteresowanemu dostęp do danych wrażliwych. Historia konwersacji z poszczególnymi kontaktami także przechowywana wewnątrz odpowiadających im folderów – w plikach w formacie JSON.

Źródło: Matt Suiche / Github

Pełny opis odkrycia Matta znajdziecie na GitHubie.

Gdyby ktoś twierdził, że Telegram jest lepszy…

…to niech zwróci uwagę na to, że komunikator Telegram ma podobny problem, o czym również doniósł Nathaniel Suchy. Okazuje się, że wiadomości przechowywane są w bazie SQLite, która jest… trudna do odczytania, ale nie zaszyfrowana.  Czyli jedyną ochroną jest obfuskacja, a to trochę mało w przypadku komunikatora, który obiecuje użytkownikom “secret chat”.

źródło obrazka: Nathaniel Suchy/Twitter

Problem z brakiem szyfrowania dotyczył także plików. Suchy był w stanie zobaczyć zdjęcia po dokonaniu trywialnie prostej operacji – zmianie rozszerzenia pliku.

Co robić, jak żyć?

Jeżeli korzystacie z Signala lub Telegrama tylko na smartfonach to nie macie powodów do zmartwień, dopóki ktoś nie przejmie odblokowanego przez Was smartfona. Wspominaliśmy o tym przy okazji artykułu prostującego bzdury na temat Signala oraz WhatsAppa opublikowane na łamach Rzeczypospolitej czy też informując o wynikach audytu bezpieczeństwa aplikacji.

Jeżeli natomiast korzystacie z rozszerzenia Signal dla Chrome bądź aplikacji Signal Desktop, bądź Telegrama na desktopie to macie ten sam problem co powyżej. Przejęcie “odblokowanego” (czyt. zalogowanego) komputera może się wiązać ujawnieniem informacji, które miały pozostać poufne. Dlatego warto korzystać z tzw. Full Disk Encryption i nie dzielić się sprzętem. Ani komputerem, ani smartfonem.

A jeśli treść Waszych rozmów jest “wrażliwa”, to ustawcie znikające wiadomości. Wtedy nie będzie ich ani w pamięci telefonu ani komputera po zdefiniowanym czasie (godzinie, dniu lub tygodniu). To zresztą dobry pomysł nie tylko na wrażliwe rozmowy. Z niewrażliwych wiele osób też sporo wyczyta jak już wpadną w ich ręce…

Przeczytaj także:

19 komentarzy

Dodaj komentarz
  1. Dobra dobra ale Telegram Desktop nie pozwala na Secret Chat na komputerach więc o ujawnienie ich nie ma co się martwić.

  2. I do tego błąd W10 pali UMP, które czytają co chcą….

  3. oprogramowanie albo ma czym rozszyfrowac pliki albo nie ma.

    czyli haslo bedzie albo podane przez uzytkownika, albo bedzie w pliku (albo gdzies indziej np. w tpm-ie, na zewnetrznym tokenie itp).

    inaczej sie nie da i tyle. nie ma tu szczegolnej sensacji

  4. “Jeżeli korzystacie z Signala lub Telegrama tylko na smartfonach to nie macie powodów do zmartwień.” – a to na smartfonach nie jest przechowywana historia komunikacji? Bo jeśli jednak jest, to: “w momencie, w którym atakujący uzyska fizyczny dostęp do komputera ofiary to nie jest to już jej komputer. I nie ma większego znaczenia jak ofiara wprowadzałaby klucz (hasło) do rozszyfrowania historii rozmów.” To samo dotyczy przecież smartfonów, jak mniemam…

    • ” “Jeżeli korzystacie z Signala lub Telegrama tylko na smartfonach to nie macie powodów do zmartwień.” – a to na smartfonach nie jest przechowywana historia komunikacji?”

      Może być przechowywana ale być szyfrowana za pomocą api udostępnianego przez systemowy keyring – dane będą rozszyfrowywane np. po odblokowaniu telefonu kodem/hasłem/biometrią. Na pewno jest to lepsze rozwiązanie od zwyczajnego pliku konfiguracyjnego.

  5. Co z wersją webową Telegrama? Są jakieś znaczące różnice w zależności od systemu operacyjnego i przeglądarki? Czy jest bardziej bezpieczna niż wersja desktopowa?

  6. Idiotyczne to odkrycie.

    Jak ktoś ma fizyczny dostęp do kompa, to ma zawsze dostęp do każdych danych.
    Chyba, że właściciel kompa zaszyfruje dysk twardy (albo folder z plikami użytkownika)
    przy pomocy klucza, zapisanego w pendraku czy np yubikeyu, który nosi na szyi na sznurku.

    Pozdro

    • “Idiotyczne to odkrycie”

      Nie do końca.

      Zamiast szyfrować bazę zapisanym na dysku komputera kluczem, można było przy instalacji zaproponować użytkownikowi:
      a) zaszyfrowanie bazy używając hasła, które będzie za każdym razem będzie podawał, lub
      b) całkowitą rezygnację z zapisywania na dysku treści odebranych wiadomości (pozostają tylko w pamięci operacyjnej do czasu zamknięcia aplikacji), lub
      c) bezpieczne wymazywanie z dysku wiadomości starszych niż N dni/tygodni, lub
      d) bezpieczne wymazywanie całego pliku z bazą przy każdym wyłączeniu programu.

      Oczywiście pozostaje jeszcze problem pliku/partycji wymiany oraz problem bezpiecznego usunięcia pojedynczego pliku w niektórych zaawansowanych systemach plików czy z dysków SSD.

    • Ernest: “Oczywiście pozostaje jeszcze problem pliku/partycji wymiany”

      Ja tu problemu nie widzę – są proste rozwiązania na tą “bolączkę”.

      Nie wiem jak jest z “wiodącymi rozwiązaniami” (w stylu zewnętrznych managerów haseł itd.), ale na przykład taki gnome-keyring jest w stanie zapobiegać swapowaniu wrażliwych danych. “mlock()” i do przodu. http://man7.org/linux/man-pages/man2/mlock.2.html

      Pod Windowsem odpowiednikiem mlocka jest “VirtualLock”.

  7. Mam pytanie: jak Signal na Androidzie szyfruje bazę danych?

    A na desktopie mogliby zrobić po prostu pytanie o hasło przy otwieraniu programu, i szyfrować klucz główny tym hasłem (master key setup).

  8. No dobra a to nie jest czasem tak, że ta baza jest szyfrowana po prostu po to aby jej zawartość nie była indeksowana przez system? A poza tym co ma sobie Signal z tym kluczem zrobić? Zaszyfrować go innym kluczem i co dalej? A może go wysłać na serwery? Użytkownik ma hasło do bazy wpisywać z klawiatury? Też można je przechwycić. Wydumany problem.

  9. Ręce opadają. Taki niby świetny, a tu taki kwiatek. “Perfect forward secrecy” (patrz wikipedia) to właściwość, którą KAŻDY bezpieczny komunikator musi posiadać, czyli brak możliwości odtworzenia treści konwersacji po kradzieży sprzętu i ew. wszelkich kluczy. A jeśli użytkownik chce mieć dostęp do historii, to powinien mieć prawo wyboru do różnych opcji przechowywania/szyfrowania/itp. historii.

  10. Po aktualizacji Signal do wersji 1.17.3 na PC już nie da się w ten sposób odszyfrować bazy.

    • A jednak nie, pomyłka.

  11. A mi odpowiada fakt, że nie muszę podawać kolejnego hasła do kolejnej aplikacji przy starcie systemu.
    Przecież hasło z głowy użytkownika jest jeszcze łatwiej wydobyć niż z jakiegoś pliku na laptopie: wystarczy poprosić go osobiście trzymając w ręku obcęgi lub pałkę.
    Jeśli ktoś ma fizyczny dostęp do laptopa, to prawdopodobnie ma też fizyczny dostęp do właściciela laptopa.
    A jeśli ktoś może zdalnie czytać pliki na komputerze, to pewnie moze też na tym komputerze zainstalować keylogger i żadne szyfrowanie nie pomoże.

    • Oczywiście, że czasami łatwiej nie podawać hasła, ale użytkownika trzeba o tym co najmniej wyraźnie poinformować i dać możliwość skutecznego zaszyfrowania. Poza tym komputer/itp. może wpaść w ręce złodzieja/itd., o czym użytkownik się dowie i w tym wypadku szyfrowanie i/lub usuwanie historii może mieć duże znaczenie.

  12. Kiedy będzie artykuł o zagrożeniu, jakie powoduje używanie otwartego ognia w lesie?

    Przecież to są powszechnie znane i nieukrywane fakty (przynajmniej jeśli chodzi o Signala) – chcesz mieć szyfrowanie, używaj FDE. Nie masz FDE, nie będziesz miał bezpiecznie przechowywanych danych na dysku. To są oficjalne odpowiedzi na tickety.

  13. Kiedy jakiś artykuł o Usecrypt Messenger? Bo w sumie poza artykułami sponsorowanymi na niebranżowych stronach to nic o nim nie wiadomo. Jakieś porównanie do Signala?

  14. Oficjalna odpowiedz deweloperów Telegram:

    |”Telegram Desktop
    ‏ @telegramdesktop
    1 lis

    You’re misleading your readers. The app named Telegram Desktop (Windows, macOS, Linux) does not use sqlite, does not store messages on your drive and encrypts everything with your local passcode. You write about a native app for macOS called just Telegram.
    |”

Odpowiadasz na komentarz Ilia

Kliknij tu, aby anulować

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.