Kategorie
Bezpieczeństwo Publicystyka

Jak odpalić lepszego Twittera i nie potknąć się o własne sznurówki

Od dwóch dni opinia publiczna przygląda się wzlotom i upadkom nowej sieci społecznościowej Albicla.com. Można powiedzieć, że w chwili debiutu zaliczyła ona pewne trudności. Można powiedzieć, że zmaganie z owymi trudnościami nieco się przedłuża. Można wreszcie powiedzieć, że od momentu produkcyjnego uruchomienia usługa balansuje bezustannie na krawędzi zaś jej autorzy kompletnie nie przygotowali się na okoliczności towarzyszące premierze serwisu opartego o treści dostarczane przez użytkowników.

Niniejszy artykuł nie pretenduje do miana kompletnego poradnika dla twórców lepszego Twittera albo Facebooka. Mam jedynie zamiar zniwelować efekt Dunninga-Krugera u tych redaktorów i wydawców, którym klon Twittera wydaje się prostszy w produkcji i obsłudze od rozwoju witryny opartej o WordPressa, Drupala czy OpenCarta.

Uwaga spoiler – klon Twittera może i będzie funkcjonalnie prostszy od WordPressa z OpenCartem, ale tylko od strony analitycznej, tzn. opis wszystkich scenariuszy i przypadków użycia pochłonie mniejszą liczbę słów. Nie znaczy to jednak, że przygotowanie serwisu do płynnego działania i późniejszego skalowania będzie szybkie lub proste.

Wielkie otwarcie kontra stopniowe uchylanie drzwi

Najpierw rozważmy, jak może wyglądać harmonogram uruchomienia sieci społecznościowej. Wydawcy Albicli (Albikli?) zdecydowali się na model znany jako „wielka, wspaniała premiera”, w której po nakręceniu zainteresowania następuje uroczyste otwarcie bram i zmasowany napływ wielkiej liczby użytkowników. Nie da się ukryć, że ma to swój urok, łechce ego i tak dalej.

Radość szybko może się jednak zamienić w panikę, gdy owa wielka liczba użytkowników trafi na błąd blokujący możliwość dokończenia rejestracji, zaś w serwisie szybko rośnie procent niepożądanej zawartości (obsceniczne zdjęcia, obraźliwe komentarze, wulgarne awatary, konta podszywające się pod znane osoby, itd.). Jest tylko jedna szansa na zrobienie pierwszego wrażenia a w modelu „wielka premiera” stosunkowo wiele rzeczy może wymknąć się spod kontroli.

Na tym polu Albicla poległa. Co można było zrobić lepiej?

Po pierwsze – w serii artykułów w zaprzyjaźnionych mediach opowiedzieć oraz zilustrować, czym będzie szykowany do startu serwis. To zmniejszy liczbę ciekawskich, którzy z założenia pojawią się tylko raz. Dodatkowa korzyść – jeśli zapowiemy minimalną, startową funkcjonalność a dowieziemy więcej, wizerunkowo wygrywamy. Albicla musiała w pośpiechu likwidować kolejne funkcje, aż do poziomu, w którym z sieci społecznościowej stała się zbiorem izolowanych profili.

Po drugie – podczas kolejnych etapów wdrożenia i uruchamiania serwisu, zapraszać kolejne transze użytkowników. Najlepiej zacząć od krewnych i znajomych, którzy ze znalezionym błędem nie popędzą na Wykop tylko dyskretnie zgłoszą go twórcom. Potem można wpuszczać kolejne osoby ze środowiska docelowego, najlepiej w taki sposób, aby zapraszani traktowali to jako wyróżnienie i wyraz zaufania.

Po trzecie – mieć zawczasu przygotowane kryteria porażki, po których spełnieniu następuje awaryjne przerwanie misji. Wydaje się, że w przypadku Albicli mógł to być trzykrotny – w ciągu 48 godzin – wyciek kodu i haseł do usług serwerowych. Gdy jednak wielkiej premierze towarzyszy równie wielki patos (“dokonaliśmy wyłomu w ścianie ideologicznego frontu”), czasowe wyłączenie serwisu może być zbyt wielkim wstydem. Nawet wtedy sytuację da się pogorszyć – np. zapewnieniami „Nam na razie nic nie wykradziono” gdy kod źródłowy serwisu krąży już w sieci.

Siły na zamiary

Oto cytat opisujący produkcję serwisu: „Portal Albicla.com został przygotowany przez tę samą grupę informatyków, którzy pracowali ostatnio nad nowymi odsłonami portali Niezalezna.pl i TVrepublika.pl. – Trudno w to uwierzyć, ale nikt z tych kilkudziesięciu ludzi jeszcze nie poprosił o pieniądze.

Z jednej strony faktycznie trudno uwierzyć, że można komuś nie płacić za wykonywaną pracę, z drugiej strony charakter błędów odnalezionych w serwisie każe sądzić, że być może podczas produkcji portalu skłonność do wolontariatu stawiana była ponad rzeczywistymi kompetencjami.

Obsługa formularzy

Co wiemy o jakości kodu portalu Albicla? Przede wszystkim nie użyto żadnego z popularnych frameworków, uzupełniających język programowania o gotowe komponenty konstrukcyjne gwarantowanej jakości. Przykład – jedną z podstawowych metod atakowania aplikacji webowych jest użycie formularzy, np. na stronie logowania, która z definicji musi być dostępna dla wszystkich użytkowników serwisu.

Jeśli programista zechce samodzielnie obsłużyć dane przesyłane do serwera, musi pamiętać o wszystkich dobrych praktykach – weryfikacji maksymalnego dozwolonego rozmiaru danych, kontroli zgodności typów, unieszkodliwieniu potencjalnie złośliwej zawartości (np. SQL Injection), limitowaniu maksymalnej liczby zapytań z tego samego adresu, logowaniu prób ataku i tak dalej. Co gorsza – taki sam poziom wiedzy muszą mieć wszyscy członkowie zespołu, którzy pracują nad tym (lub jakiegokolwiek innym) formularzem a żaden z nich nie może pomylić się ani razu.

Poprawne użycie frameworka sprawia, że ryzyko pomyłki znika – pożądane rozmiary i typy danych pochodzą z odpowiednich tabel bazodanowych, globalny dispatcher unieszkodliwia ataki siłowe, informacje o walidacji pól przekazywane są w adnotacjach i tak dalej. Albicla nie używa frameworków automatyzujących żmudne walidacje, przez co pozostaje podatna m.in. na wspomniany wcześniej SQL Injection.

Parametryzacja kodu

Z pierwszego wycieku dowiedzieliśmy się, że hasła do bazy danych i usługi SMTP udało się odczytać z pliku usytuowanego pod następującą ścieżką:
/var/www/vhosts/albicla.com/www/albicla.com/sites/settings_loc.inc.php

Istnieją lepsze metody przekazywania poufnych parametrów do serwera HTTP, na przykład poprzez zmienne środowiskowe. Hasło do SMTP nie powinno być zresztą w ogóle dostępne dla procesu serwującego zawartość stron WWW, dobre praktyki każą połączyć takie procesy asynchroniczną kolejką komunikatów. Dostawcy cloud computing pozwalają ograniczać ryzyko wycieku parametrów dzięki mechanizmowi ról i uprawnień – wówczas sekretna wartość będzie udostępniana tylko wskazanej aplikacji działającej w określonym środowisku.

Podatność na zakłócenia

Dopóki funkcja uploadu grafiki była aktywna, każdy wysłany obrazek był skalowany tuż po uploadzie a później – na życzenie. Jest to operacja wymagająca sporo mocy procesora, potencjalny adwersarz mógł więc przygotować atak polegający na masowym wysyłaniu żądań dostarczenia przeskalowanych obrazów. Może to w szybkim tempie wyczerpać moc obliczeniową i sprawić, że przestaną działać podstawowe funkcje serwisu.

Dodajmy, że w kodzie odpowiedzialnym za przetwarzanie obrazków (obecnie tylko awatarów oraz tła) zabrakło wycinania metadanych EXIF, np. miejsca albo daty zrobienia zdjęcia. Każdą fotkę można pobrać w takiej samej postaci, w jakiej trafiła na serwer Albicla.

Dodajmy, że wiele kategorii obiektów w serwisie Albicla jest numerowanych sekwencyjnie – wiemy stąd, że liczba awatarów dopiero w piątek w nocy przekroczyła dziesięć tysięcy. Wszystkie pliki z danej kategorii są składowane w jednym katalogu. Już przy kilkuset tysiącach plików rozpoczną się problemy z obsługą operacji korzystających z masek. Na razie się do nich nie zbliżyliśmy, bo w drugim dniu działania portalu wyłączono możliwość publikowania obrazów.

Sama funkcje wyróżniania hashtagów i linków też nie działa za dobrze – można to zobaczyć na przykładzie prostego URL-a o postaci https://host/#anchor

Debugowy kod na produkcji

Mechanizm śledzenia wykonania programu i wyświetlania informacji diagnostycznych powinien być dostępny tylko na środowiskach developerskich i testowych. Jeśli da się go aktywować na środowisku produkcyjnym – zdradzi informacje mające wpływ na bezpieczeństwo serwisu.

Przypadłości tej nie ustrzegła się Albicla, gdzie każdy mógł aktywować tryb diagnostyczny przesyłając wraz z żądaniem ciasteczko o nazwie debug i wartości 1.

Bezpieczeństwo haseł

Dobra wiadomość – Albicla przechowuje hasła użytkownika nie otwartym tekstem, lecz w postaci kryptograficznych skrótów (haszy). Na tym kończą się dobre wiadomości.

Oto cały zestaw złych wieści – twórcy portalu korzystają z funkcji MD5, której użycie jest niezalecane od ponad 20 lat. Wprawdzie funkcja była składana dwukrotnie, ale przekazywano do niej jedynie hasło, bez soli ani pieprzu. Oznacza to, że

  • na nowoczesnych kartach graficznych jesteśmy w stanie łamać hasze MD5(MD5($pass)) programem hashcat z prędkością ponad 15 miliardów haseł na sekundę
  • …czyli typowe 8-10 znakowe hasło podda się w ciągu minut, w najgorszym razie dni
  • …chyba, że mamy do czynienia z adwersarzem, który ma własny park maszyn lub którego stać na wynajęcie w chmurze wielu komputerów z GPU – wtedy padną także hasła 11-12 znakowe
  • cały czas mówimy o hasłach w pełni losowych, bo te słownikowe, nawet z różnymi wariantami wielkości liter i dostawionych cyferek, poddadzą się w mgnieniu oka
  • możemy chyba zakładać, że wszyscy zainteresowani adwersarze już te hasła łamią no a jeśli jakiś poseł lub urzędnik użył służbowego e-maila do rejestracji, to dokładnie wiadomo jak uszeregować konta wg ważności
  • bonus: użytkownicy z takimi samymi hasłami będą mieli takie same hasze
RTX 3080 czyli 15 miliardów haseł MD5(MD5($pass)) na sekundę

Jeśli utworzyłeś/aś konto w serwisie Albicla z hasłem, którego używasz też gdzie indziej – czym prędzej zmień je w tych wszystkich innych miejscach (wspominałem, że w sprzedaży mam Kurs Obsługi Menedżera Haseł, dzięki któremu nigdy nie znalazłbyś/znalazłabyś się w takiej sytuacji, bo każde hasło byłoby inne?). W Albicli hasła nie zmienisz, przynajmniej na razie.

Aha, istnieją serwisy przechowujące duże liczby haszy wygenerowanych różnymi algorytmami, w tym podwójnie złożonym MD5. Mając hasz, możemy odnaleźć w nich tekst bazowy. Przykład:
md5hashing.net/hash/md5x2, przykładowy hasz 3a4c27829ba465b08003047c73ec5ab3.

Skalowanie

Ten problem jest mocno oddalony w czasie, więc go tylko zasygnalizuję: architektura Albicli wyklucza skalowanie poziome. Jeśli portal zyska popularność, wąskim gardłem będzie pojedyncza instancja bazy danych.

E-maile są trudne

Spamerzy chcą zalać nasze skrzynki milionami maili, operatorzy skrzynek – np. Google, Microsoft, Yahoo czy rodzimy Onet albo O2 – starają im się to uniemożliwić. W jaki sposób? Spamerskie adresy IP trafiają na wspólne listy blokad, nowe domeny startują z niską reputacją, nagły skok liczby wysyłanych maili to punkty karne do klasyfikacji spamu i tak dalej.

Albicla, z domeną istniejącą od niespełna dwóch miesięcy, zaczęła w środę nagłą wysyłkę tysięcy e-maili aktywacyjnych przy użyciu własnego serwera SMTP u dostawcy, który nie specjalizuje się w masowej wysyłce wiadomości transakcyjnych. Efekt – równie nagła aktywacja dławików i blokad, przez co wysyłana poczta skumulowała się i zapchała kolejkę.

Wg moich szacunków przez pierwszą dobę działalności portalu konta aktywowało ok. 5-7 tysięcy użytkowników, przez kolejną ok. 3-5 tysięcy. Gdy piszę te słowa, Albicla nie doręcza poczty nawet do łapaczy spamu, którzy nie stosują żadnych blokad ani jakiegokolwiek filtrowania. Liczba komentarzy w innych mediach społecznościowych potwierdza, że wielu potencjalnych użytkowników wciąż czeka na możliwość aktywacji konta (konto da się skądinąd aktywować uniwersalnym tokenem za pomocą… SQL Injection).

Co można było zrobić lepiej? Firmy wyspecjalizowane w wysyłce e-maili (Sendgrid, Sendinblue, Mailersend) oferują tzw. wygrzewanie systemu, czyli rozsyłanie coraz większej liczby maili z nowej domeny i nowego numeru IP do dużych systemów pocztowych przez dwa-trzy tygodnie. Przykładową rozpiskę można znaleźć w dokumentacji serwisu Sendgrid – pierwszego dnia 50 maili, drugiego – 100, piątego – 5000 i tak aż do osiągnięcia zakładanej przepustowości.

Poradnik wygrzewania systemu pocztowego

Gdy procent prawidłowo adresowanych i otwieranych maili jest wysoki a procent przesyłek oznaczanych przez odbiorców jako spam – niski, reputacja nadawcy zacznie rosnąć, co zmniejszy późniejsze ryzyko trafienia na listę spamerów.

Treści wysyłane przez użytkowników

Wydaje się, że ta kategoria problemów była największym zaskoczeniem dla twórców i wydawcy portalu Albicla. Odpalony z wielkim szumem serwis społecznościowy przyciągnął społeczność nieco bardziej, hmmm, różnorodną, niż typowi goście TV Republika czy niezalezna.pl. Wielu postanowiło zignorować regulamin (bądźmy szczerzy, nikt nie czyta regulaminów), założyć konto pod pseudonimem lub udając kogo innego, a następnie trochę się… rozejrzeć.

Problemem nie się ci, którzy poklikają losowo, wrzucą kilka memów, dopiszą parę komentarzy i znikną na zawsze. Należy raczej szykować się na wizytę tych, którzy chcą patrzeć jak świat płonie i w imię tego świadomie podłożą ogień. Istnieje kilka metod radzenia sobie z taką sytuacją.

Po pierwsze – limity operacji na API, throttling, autobany i tak dalej. Po drugie – moderatorzy wyposażeni w ergonomiczny panel zarządzania treściami. Po trzecie – narzędzia scoringowe, służące zarówno do oceny „praworządności” użytkownika jak i regulujące jego przywileje. Po czwarte – ciche bany, ograniczające ekspozycję użytkownika i możliwości interakcji z otoczeniem. Po piąte – użycie automatycznych narzędzi moderacyjnych rozpoznających pornografię, obrazy przemocy lub inną niepożądaną zawartość.

Albicla nie jest wyposażona w żaden z opisanych mechanizmów.

Dodać trzeba, że ich przygotowanie i dostrojenie pochłonie więcej pracy, niż względnie prosty mechanizm wyświetlania profili, tekstów, obrazków i komentarzy. Póki co jedyną możliwą formą moderacji było… skasowanie w czwartek wszystkich obrazów i wyłączenie funkcji ich wysyłania.

Zarządzanie kryzysem

W dzisiejszym oświadczeniu Tomasza Sakiewicza, opublikowanym w serwisie tvrepublika.pl, czytamy m.in.: „Prawdziwym problemem stały się ataki trollingowe i hakerskie zorganizowanych grup przestępczych. Próbowano włamywać się do baz danych i blokować pracę portalu. Nie jest prawdą, że jakiekolwiek dane wyciekły”. Cóż, w sieci krąży paczka z plikami PHP składającymi się na Albiclę, czy to nie są dane? O zrzucie bazy danych na razie nic nie słychać, ale nie uprzedzajmy faktów.

Ja w czwartek ogłosiłem na Albicli prywatny mini-konkurs. Prywatny i dyskretny, miał formę następującego wpisu opublikowanego z widocznością „Tylko ja” na moim profilu.

Konkurs został zakończony w piątek wieczorem. Nie wiem i chyba się już nie dowiem, czy zwycięzca dostał się do bazy danych, czy też znalazł sposób na obejrzenie moich wpisów w serwisie WWW, ale ponad wszelką wątpliwość zacytowano mi te właśnie słowa.

Albiclę będę obserwował, powtarzając sobie jak mantrę pytanie: „co na to wszystko UODO?”. Jaki werdykt obstawiacie?


[Dodano 23.01.2021 12:22] czyli niespełna godzinę po wrzuceniu linków do artykułu na social media – wygląda na to, że moja przygoda w portalu Albicla już się zakończyła…

[Dodano 23.01.2021 15:57] Pół godziny temu wszystkie profile użytkowników Albicla zostały wyczyszczone z jakiejkolwiek zawartości. Serwis wyświetla teraz tylko kilka ogłoszeń, prawdopodobnie osadzonych na sztywno w kodzie. Jednocześnie w darknecie wystawiono ofertę sprzedaży zrzutu bazy.



O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.

11 odpowiedzi na “Jak odpalić lepszego Twittera i nie potknąć się o własne sznurówki”

Najwyraźniej pan Sakiewka zatrudnił studentów, którzy nauczyli się teorii z 30 letnich podręczników, a nie wiedzą, jak wygląda rzeczywistość, nie znają funkcji SHA3 czy b2sum, nie wpadli też na pomysł, żeby szyfrować adresy email w bazie albo w bazie trzymać aliansy user@albicia.com a prawdziwe maile w bazie lokalnego postfixa, do której PHP nie ma wjazdu w ogóle.

Ciekawe, czy szanowni autorzy portalu nie zaczną za chwilkę płakać na forach pt np ” Exim na ubuntu nie wysyła maili”.
xD

Pozdro

Nawet w tym tekście jest, że ich nie zatrudnił, tylko za darmo pracowali.
A na ubuntu domyślnie jest postfix 😛

Cała ideę alkibli (poczynając od absurdalnej nazwy), jest z założenia nakazowo/rozdzielcza – weźmiemy się i zrobimy i pokonamy twittera/fb/google’a/cokolwiek bo tak. Tymczasem to tak nie działa. Internet to marketingowa dżungla, i widać pomysłodawcy totalnie się nie orientują, jak to działa, a nazwy typu myspace, nk, altavista totalnie nic im nie mówią.

Jedyna ilustracja ich sposobu myślenia na poziomie planowania to chyba tylko https://www.youtube.com/watch?v=uJIlDWkmzNM

Nie wiadomo, czy śmiać się, czy płakać.

Jeżeli chodzi o Sendgrid, to na liście dyskusyjnej mailop (dla operatorów serwerów pocztowych) od dawna już pisze się o tym, że niestety Sendgrid stał sie również masowym rozsyłaczem spamu, w związku z tym filtry antyspamowe coraz częściej też już go blokują.

no ba, z sendgrida korzystają np. niektóre serwisy rządowe jak np. pacjent.gov.pl – do akcji szczepimysie.pacjent.gov.pl . Oczywiście mało kogo to obchodzi, ale jak się zerknie do nagłówków to można czasem porządnych 'herzklekotów’ dostać zanim się nie zorientuje że to „rządowa activity” i „trusted activity” i nie zweryfikuje tymsamym nadawcy 🙂

Pozdrawiam

Zapisałem się, ale zrezygnuję, bo na „niezależna” , która jest „matką” Albicli zamieśiłem wpis, który został zbanowany, a to samo może być w „dziecku” Zamieszczam zbanowany tekst, żeby można samemu ocenić co jest niedopuszczalne na Niezależna.: „Czy pan Artur Wdowczyk jest adwokatem? Jeśli tak, to dlaczego Ciamajda-PiS nie wynajął autora do przedstawienia swoich racji w UE w sprawie reformy sądownictwa??? Czy pan Artur Wdowczyk nie zastanawia się dlaczego tak rzeczowy i konkretny tekst ma stosunkowo mało komentarzy? Podpowiadam cenzura.”

nie żebym miał jakieś większe wątpliwości co do zarówno treści niniejszego artykułu jak również 'jakości’ serwisu zaczynającego się na dużą literkę „A”, tym niemniej …
myślę że warta czasem zweryfikować nawet informacje , te trzeciorzędowe jak np. cyt ” Albicla, z domeną istniejącą od niespełna dwóch miesięcy, zaczęła w środę nagłą wysyłkę tysięcy e-maili aktywacyjnych przy użyciu własnego serwera SMTP u dostawcy, […]” a przecież :
cyt :
[markooff@box ~]$ dig -t MX albicla.com

; <> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.8 <> -t MX albicla.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44250
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 8

;; QUESTION SECTION:
;albicla.com. IN MX

;; ANSWER SECTION:
albicla.com. 3568 IN MX 10 alt4.aspmx.l.google.com.
albicla.com. 3568 IN MX 1 aspmx.l.google.com.
albicla.com. 3568 IN MX 5 alt1.aspmx.l.google.com.
albicla.com. 3568 IN MX 10 alt3.aspmx.l.google.com.
albicla.com. 3568 IN MX 5 alt2.aspmx.l.google.com.

;; ADDITIONAL SECTION:
alt1.aspmx.l.google.com. 42 IN A 142.250.4.26
alt1.aspmx.l.google.com. 42 IN AAAA 2404:6800:4003:c06::1b
alt3.aspmx.l.google.com. 42 IN A 74.125.28.26
alt3.aspmx.l.google.com. 42 IN AAAA 2607:f8b0:400e:c04::1a
alt2.aspmx.l.google.com. 42 IN A 108.177.97.26
alt2.aspmx.l.google.com. 42 IN AAAA 2404:6800:4008:c00::1b
aspmx.l.google.com. 28 IN A 173.194.69.26
aspmx.l.google.com. 42 IN AAAA 2a00:1450:4013:c00::1a

;; Query time: 19 msec
;; SERVER: 194.204.152.34#53(194.204.152.34)
;; WHEN: Mon Jan 25 21:58:21 2021
;; MSG SIZE rcvd: 320

skoro zaś sam servis jest umiejscowiony i domena została zarejestrowana w stajni OVH (vide magical words – whois 146.59.22.30 )
to jednak tutaj jakieś "tajne konszachty" czuję 😛 😀

Pozdrawiam

To są adresy poczty przychodzącej, co nijak ma się do tego skąd wysyłane są maile transakcyjne generowane przez serwis. Jeśli znajdziesz sobie screen pliku konfiguracyjnego, to zobaczysz, że do wysyłki korzystali z serwerów pocztowych OVH (czyli raczej też nie do końca „własny serwer SMTP”).

No, jeśli tak jak pisze Kolega, to się zgodzę. Oczywiście wartałoby sprawdzić (na próbkach owej korespondencji masowej) jak się przedstawiały te serwery nadające „w imieniu” oraz czy miały w DNSie np. odpowiednie rekordy SPF itd …

Zresztą nie sądzę żeby się tutaj należało spodziewać jakichś rewelacji – po prostu zrobiono to, jak sadzę ,podobnie jak i cały serwis, czyli starą i znaną metodą „profesora Nachamowa” ….

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *