Niebezpieczny świat.

Ostatnie wydarzenia coraz bardziej skłaniają mnie do – paranoicznego, przyznaję – wniosku, że żadne dane, niezależnie od tego jak zabezpieczane, nie są bezpieczne i prędzej czy później nastąpi ich ujawnienie. O ile tylko komuś będzie zależało.

Na początek – hasła. Niektóre portale, jak Allegro, trzymają hasła otwartym tekstem. Niezależnie od podjętych środków bezpieczeństwa, przy takim podejściu wyciek tych haseł jest IMHO kwestią czasu.

Wiele nie zmienia trzymanie skrótów (hashy) haseł. Ostatnio – poza małymi wyciekami polskimi typu JPwyciekły hashe haseł z Gawkera i niesolone hashe haseł z FSF. To drugie jest wielką porażką, bo mówimy o środowisku z – teoretycznie – wysoką świadomością dotyczącą bezpieczeństwa i spraw technicznych, a tymczasem korzystano z najsłabszej funkcji skrótu i w najgorszym wydaniu. Powinno być najlepiej, było najgorzej. Klasyczne szewc bez butów chodzi.

Zresztą, pomału można zacząć stawiać znak równości między wyciekiem hashy haseł (zwł. niesolonych), a wyciekiem samych haseł – crackery MD5 są coraz szybsze. Co prawda to tylko benchmark, ale najnowsza wersja crackera whitepixel, który podobno jest chyba obecnie najszybszy, sprawdza 33 miliardy (nie miliony, miliardy) kombinacji na sekundę (dla pojedynczego hasha). Na potężnym, co prawda (4 dwurdzeniowe GPU; 1,2 kW poboru prądu przy obciążeniu, 2700 USD w tej chwili), ale pojedynczym komputerze PC.

Inne funkcje skrótu też nie są wiele lepsze. SHA1 to wg tego benchmarku w tym momencie 390 milionów kombinacji na sekundę, oczywiście na pojedynczej maszynie. A przecież bez problemu można mieć tych maszyn więcej, i to za niewielkie pieniądze.

Ale nie tylko haseł się to tyczy. Dane, które nie powinny ujrzeć światła dziennego wyciekły z „wewnętrznego”, rządowego systemu. Oczywiście mowa o wikileaksowym Cablegate. Swoją drogą ciekawe, jak długo w tych okolicznościach w stanie nieujawnionym pozostanie polisa Wikileaks (dead link)?

Głośno też było o rzekomym backdoorze w OpenBSD, a konkretniej IPSEC, który miało zamieścić FBI 10 lat temu (celowo nie linkuję, AFAIK rozeszło się po kościach i backdoora nie było, ale nie śledziłem). Co nie jest takie niemożliwe, bo korzystając z różnych „dziwnych” właściwości matematyki, da się zmusić algorytm szyfrujący, by „wyciekał” klucze. W mało zauważalny sposób – na przykład 128 bajt zaszyfrowanej wiadomości, przexorowany przez arbitralny klucz, będzie ujawniał klucz, którym była szyfrowana cała wiadomość. Albo coś na podobnej zasadzie – sky – i wiedza matematyczna – is the limit.

I raczej nie wierzę w to, żeby programista – czy użytkownik, który zwykle nie ma wielkiej wiedzy matematycznej/kryptograficznej, był w stanie coś takiego zauważyć. Przykład tego widać było przy dziurze w OpenSSL w Debianie. Efekt był dość spektakularny – do każdego konta umożliwiającego logowanie SSH po kluczach można się było dostać przy – IIRC – maksimum 65 tys. prób (bo tylko tyle różnych kluczy było generowanych). Na dowolnym systemie. O ile tylko klucz publiczny użytkownika był generowany na podatnym Debianie.

Niedowiarkom przykład ciekawych właściwości matematycznych można łatwo i zrozumiale zaprezentować na przykładzie listy 18 ulubionych filmów. Oto test (przetłumaczyłem na polski, z wyjtkiem tytułów, polecam IMDB):

Zrób test i dowiedz się, jaki film jest twoim ulubionym. Ten prosty matematyczny quiz przewiduje, który z 18 filmów spodoba ci się najbardziej. Nie pytaj w jaki sposób, ale to działa!

  • Wybierz cyfrę z zakresu 1-9.
  • Pomnóż ją przez 3.
  • Do wyniku dodaj 3.
  • Otrzymany wynik ponownie pomnóż przez 3.
  • Zsumuj obie cyfry otrzymanej liczby. Wynik to numer twojego przewidzianego ulubionego film na poniższej liście:

Lista filmów:

  1. Gone With The Wind
  2. E.T.
  3. Blazing Saddles
  4. Star Wars
  5. Forrest Gump
  6. The Good, The Bad, and the Ugly
  7. Jaws
  8. Grease
  9. The Joy of Anal Sex With A sheep
  10. Casablanca
  11. Jurassic Park
  12. Shrek
  13. Pirates of the Caribbean
  14. Titanic
  15. Raiders Of The Lost Ark
  16. Home Alone
  17. Mrs. Doubtfire
  18. Toy Story

W zasadzie koniec mijającego roku widzę trochę na zasadzie do kogóż to włamano się dzisiaj? I to tylko patrząc na najgłośniejsze i ujawnione sprawy i dziury (taki wariant minimum dla administratora – trochę wypada się w security orientować)…

Korzystając z okazji – bo to ostatni wpis, życzę wszystkim użytkownikom komputerów (ze specjalnym uwzględnieniem adminów) w nadchodzącym Nowym Roku mniej dziur bezpieczeństwa i awarii.

UPDATE: Paranoje dotyczące postępującej szybkości łamania hashy studzi ten wpis o przechowywaniu haseł. Polecam.

Ile cyfr potrzeba, by numer konta był unikatowy?

Temat (nie)unikatowych numerów kont pojawił się w tej dyskusji nt. tokenów (dead link, domena przejęta), a szerzej opisany jest w tym wpisie, ile cyfr potrzeba, by numer rachunku bankowego był unikatowy. Przyznam, że nie miałem zielonego pojęcia nt. algorytmu weryfikacji numeru IBAN, ale na chłopski rozum kolizje zdarzą się wszędzie. Stwierdziłem, że najlepsza metoda nauki to napisać skrypt do sprawdzania. Oczywiście w Perlu. Przy okazji wyszło mi, że Perl średnio sobie radzi z dużymi liczbami, a Python dobrze, ale dzięki temu znalazłem pięknego gotowca w postaci modułu do sprawdzania poprawności numeru IBAN.

Pierwsze, co rzuca się w oczy, to fakt, że tak naprawdę numer IBAN jest zamieniany na liczbę, a czy jest poprawny określane jest tylko na podstawie jednego testu – jeśli reszta z dzielenia tej dużej cyfry przez 97 wynosi 1, to numer jest poprawny.

Chwila zabawy programem i okazuje się, że dla 3 brakujących cyfr w dowolnym miejscu rachunku można wygenerować ok. 10 kolizji. Pewnie ma to coś wspólnego z faktem, że 97 jest liczbą pierwszą, a samo 97 mieści się w każdym tysiącu właśnie 10-11 razy, ale tutaj już by się matematyk przydał i zasady podzielności przez 97 (hasło do Google cechy podzielności przez 97 nic sensownego nie znalazło niestety).

Inna szansa, że nasze PL na początku numeru (które wraz z następującymi po nim dwiema cyframi jest przesuwane na koniec i zamieniane na liczby patrz algorytm weryfikacji numeru IBAN) jest na tyle pechowe, że powoduje taką przykrą przypadłość. Ale to łatwo sprawdzić – dzięki użyciu ogólnej biblioteki skrypcik do bruteforce’owania numerów IBAN powinien działać dla wszystkich krajów.

Póki co konkluzja jest taka, że aby numer był unikatowy, to trzeba podać wszystkie cyfry. Przy dobrym wietrze może się zdarzyć, że 1 można opuścić.

PS. Nie cierpię słowa unikalny. Dla mnie oznacza ono możliwy do uniknięcia. Zamiast niego możnaby używać słowa unikatowy. Niestety SJP traktuje je jako synonimy.

Szybki test Freenetu.

Jakoś tak się złożyło, że wpis Zala przypomniał, że zarzuciłem zabawę z Gnunetem (którego po prostu nie udało mi się w 5 minut na czuja uruchomić). Postanowiłem przyjrzeć się Freenetowi, który powinien być prostszy i popularniejszy. I którego do tej pory skreślałem ze względu na Javę.

Z prototą bym nie przesadzał – nie wiadomo, który plik wybrać (a w Debianie nie ma tego pakietu). Na stronie projektu plików do pobrania jest wiele, nie wiadomo, która wersja jest stabilna. Ostatecznie podążam dosłownie za wytycznymi z przykładu, tym bardziej, że liczba pobrań też jest największa.

Instalator brzydki, ale instaluje bez problemu. Z niefajnych rzeczy – bez pytania dodaje usługę Freenet do uruchomienia po reboocie.

@reboot   "/home/rozie/programs/Freenet/run.sh" start 2>&1 >/dev/null #FREENET AUTOSTART - 8888

Irytujące, szczególnie, że może warto wyrzucić na osobnego usera. Oczywiście, przeniesienie nie jest problemem, ale IMHO powinien zapytać, czy może dodać wpis. Na zakończenie drobny fail – pisze An uninstaller program has been created in: (tak, potem pustka). Brak informacji o tym, czy demon zostaje automatycznie włączony (tak, zostaje). Niezły wizard.

Prywatność. Widać, że twórcy dbają o prywatność w sieci – użytkownik proszony jest o korzystanie z oddzielnej przeglądarki do łączenia z demonem Freenetu. Jak najbardziej zasadne, bo w przypadku wspólnej przeglądarki nie będzie żadnego problemu z wywołaniem zwykłego URLa ze strony freenetowej, co w połączeniu z dostępem do ciasteczek itd. jest oczywistą metodą pozbawienia anonimowości. Tylko zwiedzam, więc olewam i poprzestaję na wywaleniu ciasteczek (w tym flashowych), ale jak najbardziej zasadne.

Następnie określa, na ile zależy mu na ochronie przed rządem, ISP oraz (wybieram opennet i normal)… osobami określonymi jako przyjaciele. Domyślnie mają oni (lub malware na ich komputerach) sporą możliwość naruszenia prywatności (wybieram high). Kolejne pytanie jest o pliki tymczasowe i pobrane. Do wyboru 4 poziomy zabezpieczenia, w tym takie, które wyglądają na bezpieczne (oczywiście jeśli nie ma błędów w implementacji/backdoorów) nawet bez szyfrowanego systemu plików/katalogu. Najbardziej paranoidalny tryb oznacza trzymanie klucza tylko w pamięci (do testu wystarczy normal), czyli dane tracone są bezpowrotnie chwilę po wyłączeniu maszyny (modulo wejście na swap, modulo bruteforce). Na koniec testu wybieram 5GB przestrzeni dyskowej do wykorzystania.

No i tu zaczyna się jazda. Zużycie procesora (PIII 1 GHz) utrzymuje się od tego momentu na ok. 40-50%, a pamięci RAM na 8,7% (z 1GB) i rośnie (maksymalnie widziałem 20%). Program pozwala ustawić limit RAM – domyślny limit RAM to u mnie 192 MB. W praktyce oznacza to, że procesor nie ma wytchnienia i będzie się włączał wiatrak. Do not like. Wychodzi, że łącze 32 KB powinienem wybrać, co czynię.

Szybkość działania jest tragiczna. Nawet prostą wiki otwierał długo. Kolejna rzecz, którą sprawdzam (i która otwiera się nieco szybciej, ale skojarzenia z modemem i wczesnym dzwonieniem na 0202122 silnie wskazane) to Freenet TEXTlink Index. Tu zdziwienie. Nawet sporo linków jest po polsku. Nie wiem na ile to zbieg okoliczności, a na ile odwzorowanie stanu faktycznego. Tematycznie dominuje metatematyka (tu: wolność, libertarianizm, linki freenetowe) oraz polityka i… chrześcijaństwo (zwł. polskie strony), które często pod politykę podpada. Bliższe przyjrzenie się treści i okazuje się, że śmierdzi trupem – większość stron aktualizowana w 2008, 2010 to święto. Do testowania pobierania plików nie dotarłem – skoro wolniejsze, niż wbudowane strony, to nie chcę nawet sobie tego wyobrażać.

W sumie nie wypada to za ciekawie. Bawiłem się około godziny – możliwe, że potem zużycie procesora spadnie (pobierał do lokalnego cache dane cały czas i szyfrował je), a prędkość wzrośnie, ale IMHO cały projekt dla hobbystów. W zwykłym użytkowaniu Tor znacznie szybszy, bardziej użyteczny (dostęp do wszystkich treści, nie tylko wydzielonego, osobnego skrawka Internetu), choć mniej bezpieczny i trochę inne zastosowanie, jednak.

Deinstalacja: katalog Uninstaller w głównym katalogu programu Freenet i java -jar uninstaller.jar Działa ładnie, usuwa wpis z crona i cały katalog. I w sumie to jedyny element programu, do którego nie mam zastrzeżeń.