Publiczne Wi-Fi a bezpieczeństwo

Wczoraj ukazał się artykuł o tym, czy korzystanie z publicznego Wi-Fi jest bezpieczne. Uważam, że prezentowane tam podejście jest dość optymistyczne. Nie uważam obcych sieci za tak bezpiecznie, jak pisze autor. Wszystko zależy od tego, czego się obawiamy. I naszego poziomu paranoi.

Na pewno podłączanie do sieci Wi-Fi, jeśli zakładamy złe zamiary jej właściciela lub innych użytkowników jest bezpieczniejsze, niż podłączanie kablem ethernetowym. Ot, nikt nie poda wysokiego napięcia na kablu i nie spali nam urządzenia. No ale żarty na bok.

Publiczne Wi-Fi – zagrożenia

Podłączając się do cudzej lub publicznej sieci ujawniamy informacje o swoim urządzeniu i systemie. Np. syngatury urządzenia typu adres MAC czy hostname. W pewnych przypadkach dane te mogą zostać wykorzystane do… powiedzmy przypisania nam pewnych działań. Ale to bardziej naruszenie prywatności niż realny atak. Pójdźmy dalej.

Podłączając się do sieci eksponujemy nasze urządzenie na bezpośrednie połączenia. OK, jeśli ktoś ma firewall lub nie udostępnia żadnych usług innym komputerom w sieci lokalnej, to problemu nie ma. Ale już udostępnienie zasobu chronionego prostym hasłem z laptopa w sieci domowej, gdzie bezpośredni dostęp miały tylko nasze urządzenia może okazać się zgubne. W naszej sieci przed atakami z internetu mógł chronić router (NAT).

Nie taki HTTPS wspaniały

Wspomniany w artykule HSTS ma dwie wady. Po pierwsze, adopcja. Zwyczajnie nie wszystkie strony z niego korzystają. Żeby daleko nie szukać, tamten artykuł zamieszczony jest na stronie bez HSTS. I pewnie ktoś przytomnie zauważy, że przecież to tylko blog, a nie bank. To polecam samodzielne sprawdzenie, czy, ew. które polskie banki korzystają z HSTS na stronach. O HSTS z preload litościwie nie wspominam.

Po drugie, jest to mechanizm TOFU. Tzn. nie zapewnia bezpieczeństwa przy pierwszym połączeniu. Owszem, przeglądarka w kolejnych połączeniach do strony, przez zwykle długi okres ważności, będzie już korzystać z HTTPS. Ale jeśli jest to nowa strona lub otwierana w nowej przeglądarce to HSTS nic nie daje.

Dodatkowo autor wspomina o powszechnych przekierowaniach HTTP -> HTTPS. Tylko niestety taki mechanizm nie zapewnia bezpieczeństwa. OK, może je podnosić w szczególnym przypadku, jeśli jest stosowany łącznie z HSTS. Bez tego raczej zapewnia złudzenie bezpieczeństwa. Bowiem jeśli pierwszy request jest wykonywany po HTTP, to nadal DNS spoofing jest groźny. Atakujący może dowolnie rozwiązać nazwę domeny do której próbujemy się połączyć. Np. na swój serwer. I tam wykonać przekierowanie HTTP. Redirect (301) może być na cokolwiek. Także na domenę z poprawnym HTTPS. Tyle, że niekoniecznie tę, na którą chcieliśmy się połączyć. Tylko np. na domenę homograficzną, albo domenę o zbliżonej nazwie. Ot, choćby wchodząc na http://mojbank.pl możemy skończyć na https://mojbark.pl, o wyglądzie identycznym jak https://mojbank.pl. I z poprawnym certyfikatem HTTPS i „kłódeczką”.

No i ostatecznie nawet połączenie HTTPS z poprawnym hostem nie gwarantuje jeszcze, że jest w pełni bezpiecznie. W niektórych przypadkach, na które użytkownik nie ma wpływu, nadal możliwe mogą ataki na HTTPS. OK, w przeciwieństwie do DNS spoofingu są trudniejsze do wykonania.

Jak korzystać bezpieczniej z publicznych Wi-Fi?

Czy to znaczy, że zupełnie nie zgadzam się z autorem? Niekoniecznie. Zgadzam się, że jest o wiele bezpieczniej, niż kiedyś. Generalnie jeśli ktoś naprawdę musi skorzystać z Wi-Fi i miałbym dać tylko jedną radę to byłoby to: włącz DoH w przeglądarce i wpisuj adresy w pasku adresu przeglądarki „z palca”, korzystając z podpowiedzi. No wiem, to w zasadzie dwie rady. Ale przyjmijmy, że jedna, tylko złożona.

Czemu tak? DoH zapewni nam odporność na DNS spoofing, a dodatkowo da bonus w postaci podwyższenia prywatności. Potencjalny podsłuchujący nie dostanie adresów odwiedzanych stron „na tacy” w postaci nieszyfrowanych zapytań DNS. W części przypadków w ogóle nie będzie w stanie ustalić z jakim serwisem się łączymy.

Wpisywanie domen w pasku adresu, z wykorzystaniem podpowiedzi uchroni przed kliknięciem w podobną domenę i zwiększy szansę na wykorzystanie protokołu HTTPS już od pierwszego requestu.

Hashcat na M1

Jakiś czas temu pisałem o przesiadce na M1. Musiałem użyć hashcata i… przypomniało mi się, że nowe M1 ma poważną zaletę, w postaci szybkości. Żeby zobaczyć faktyczną różnicę, pozwoliłem sobie na nanobenchmark.

Nawiązując do starego wpisu o przyspieszaniu hashcata, sprawdziłem md5crypt:

* Hash-Mode 500 (md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)) [Iterations: 1000]
Speed.#1.........:  1902.0 kH/s (53.57ms) @ Accel:512 Loops:500 Thr:32 Vec:1

Drobne cztery razy szybciej w stosunku do starego laptopa. Nie powala, ale wzrost przyjemny. Sprawdźmy więc inne typy hashy:

METAL API (Metal 263.8)
=======================
* Device #1: Apple M1 Pro, 10880/21845 MB, 16MCU

OpenCL API (OpenCL 1.2 (Apr 19 2022 18:44:44)) - Platform #1 [Apple]
====================================================================
* Device #2: Apple M1 Pro, skipped

Benchmark relevant options:
===========================
* --optimized-kernel-enable

-------------------
* Hash-Mode 0 (MD5)
-------------------

Speed.#1.........:  5713.7 MH/s (92.80ms) @ Accel:1024 Loops:1024 Thr:32 Vec:1

----------------------
* Hash-Mode 100 (SHA1)
----------------------

Speed.#1.........:  2031.9 MH/s (64.99ms) @ Accel:256 Loops:1024 Thr:32 Vec:1

---------------------------
* Hash-Mode 1400 (SHA2-256)
---------------------------

Speed.#1.........:   598.6 MH/s (54.90ms) @ Accel:64 Loops:512 Thr:64 Vec:1

Jakieś dwanaście razy szybciej w przypadku MD5 w stosunku do poprzedniego laptopa. Albo połowa wydajności Tesla 4. Miło. Jako podręczna maszynka w zupełności wystarczające.

Wszystkie powyższe wyniki benchmarków robione dla M1 z 10 core CPU i hashcata w wersji v6.2.5-516-g372d3a127.

Tym, którzy nie mają dostępu do M1, zostają inne sposoby, np. poproszenie Google o użyczenie mocy obliczeniowej.

All your PESEL are belong to us!

Wpis na Sekuraku o łamaniu hasła do PDF za cztery zł odwoływał się do wpisu na Informatyku zakładowym w tym temacie. Oba opierały się o generator numerów PESEL. Rzuciłem okiem na program i stwierdziłem, że nie jest kompletny. Nie obsługuje bowiem wszystkich lat. Co gorsza C# wydał mi się średnim wyborem – uruchomienie pod Linuksem wymaga doinstalowania dodatkowych pakietów, trudniejsze w rozwijaniu.

Postanowiłem ulepszyć i napisałem własną wersję generatora numerów PESEL. Zasadnicza różnica to obsługa wszystkich lat objętych specyfikacją PESEL. Dodatkowo można generować numery PESEL dla dowolnych zakresów. Takie ficzery przydatne przy pentestach.

Program nie jest specjalnie szybki – każdy rok na moim sprzęcie to ok. 2 sekundy. Z drugiej strony nie jest tak źle z prędkością . Oryginał działał 80 sekund według autora, mój dla tych samych lat – 113 sekund[1]. Oczywiście nasze sprzęty mogą się różnić, niemniej różnica nie jest drastyczna. Poza tym, słownik generuje się raczej rzadko.

Generator numerów PESEL raczej nie będzie rozwijany. No chyba, że ktoś znajdzie błędy. Może komuś się przyda.

[1] Wszystkie czasy podaję dla uruchomienia przy pomocy PyPy.