Z racji tego, że korzystam z komunikatora Signal, kolega – który też z niego korzysta – podesłał mi link do artykułu, w którym opisana jest pewna „podatność” w desktopowej (Windows i Mac) komunikatora, która pozwala na relatywnie łatwe odczytanie zaszyfrowanej bazy danych, w której znajdują się m.in. odebrane i wysłane wiadomości. Nie zdziwiło mnie to, gdyż… sam jakiś czas temu, szukając pewnej informacji postanowiłem dobrać się do pliku SQLite wykorzystywanego przez aplikację Signal, i nie było to trudne…

Signal Desktop i jawne hasło do zaszyfrowanej bazy danych

Na stronie Bleeping Computer pojawił się artykuł, w którym autor pokazuje, jak łatwo dostać się do danych zapisanych w bazie danych (plik SQLite) wykorzystywanej na potrzeby działania komunikatora Signal. Komunikatora, który z założenia ma gwarantować prywatność (poufność) prowadzonej komunikacji.

Baza danych programu Signal Desktop znajduje się w pliku SQLite:

%AppData%\Signal\db\db.sqlite

I jest ona – co wydaje się oczywiste – zaszyfrowana:

Skoro jest zaszyfrowana, to znaczy, że musi być do niej jakieś hasło, jakiś klucz. A skoro program nie chciał by taki klucz utworzyć przy pierwszym uruchomieniu, to znaczy, że musi być on gdzieś zapisany.

Mogą to być serwery producenta programu – ale w tym wypadku nie dość, że kolidowałoby to z zaufaniem do aplikacji, to zostałoby tez szybko zauważone (ruch sieciowy). Mogłoby być zapisane wewnątrz aplikacji, ale wtedy byłoby zapewne identyczne dla każdego użytkownika, czyli bez sensu w przypadku tego typu aplikacji. Mógłby je generować jakiś algorytm wewnątrz aplikacji na podstawie parametrów komputera i/lub systemu operacyjnego, ale to oznacza problem w przypadku, gdyby któryś z czynników branych pod uwagę przez algorytm uległ zmianie (np. model procesora, wersja systemu operacyjnego).

Stąd oczywiste się wydaje, że jeśli mamy indywidualny klucz, to musi być on gdzieś zapisany, i to zapewne w formie niezaszyfrowanej (gdyby był zaszyfrowany, to… wracamy do punktu wyjścia, czyli hasło, serwer zewnętrzny, algorytm…).

W przypadku aplikacji Signal Desktop dochodzenie nie jest zbyt skomplikowane, bo w katalogu z danymi aplikacji jest plik konfiguracyjny:

%AppData%\Signal\config.json

Plik ten zawiera tylko jedną wartość, nazwaną dla niepoznaki „key”:

To właśnie ten plik sprawił, że kiedyś postanowiłem poszukać zamka, do którego będzie pasował. Tym zamkiem był oczywiście wspomniany już plik „db.sqlite”.

Plik można otworzyć np. za pomocą aplikacji DB Browser for SQLite (polecam tak ogólnie, nie tylko do przeglądania bazy danych aplikacji Signal):

Gdy zostaniemy poproszeni o hasło, podajemy oczywiście ciąg znaków z pliku „config.json” (jako Raw key, czyli z „0x” na początku). W ten sposób uzyskujemy dostęp do bazy danych:

Czy się tym zmartwiłem? Nie. Nawet nie dlatego, że mam wszystkie dyski zaszyfrowane, bo gdyby na mój komputer trafił jakiś szkodnik, to wykradnie te 2 pliki z momencie, gdy dyski będą odszyfrowane, czyli podczas normalnej pracy na komputerze.

Co więcej – gdyby program nie trzymał tego klucza/hasła na dysku, tylko każdorazowo pytał mnie o nie podczas uruchamiania, to też wiele by to nie zmieniło. Skoro coś mogło wykraść dane z mojego komputera, to może też przechwycić znaki jakie wprowadzam na klawiaturze. No chyba, że by wprowadzić tutaj dodatkowo jeszcze uwierzytelnienie dwuskładnikowe…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk