20:33
13/4/2015

Błąd w protokole SMB umożliwiający kradzież hasła do Windowsa po raz pierwszy odkryto w 1997 roku. Dziura nie została wtedy w pełni załatana. Dzięki temu, po 18 latach dalej za jej pomocą można zaatakować nie tylko wszystkie wersje Windowsa (nawet Windows 10 preview), ale także produkty 31 innych producentów, m.in. Adobe, Apple i Symanteca…

Luka w SMB znana od 18 lat…

SMB jest kluczowym komponentem sieciowym włączonym domyślnie w każdej wersji Windowsa. W 1997 roku odkryto błąd w Internet Explorerze, który wykorzystując słabość w protokole SMB pozwalał na kradzież danych loginu i hasła do Windowsa (wtedy 95).

windows_95_logo_remade_my_own_way_by_icepony64-d6ek4z8

Atak, w uproszczeniu, polegał na zaproszeniu użytkownika na stronę internetową, która wymuszała logowanie po SMB (file://x.x.x.x lub \\x.x.x.x) wykorzystując fakt, że Windows stara się logować do zdalnych zasobów SMB automatycznie i “po cichu”. To prowadziło do ujawnienia danych logowania podstawionemu serwerowi (dane są zahashowane, ale należy wziąć pod uwagę, że obecnie wszystkie kombinacje 8 znakowych haseł mogą być “złamane” przy użyciu oclHashcata w ok. 10 godzin).

Microsoft udostępnił wtedy poprawkę poprzez ciężką do zaimplementowania politykę GPO, ale nigdy nie usunął faktycznej przyczyny problemu (głównie z tego powodu, że jest to problem projektowy, tzw. “design flaw”). Dzięki temu, po 18 latach, błąd powrócił w nowym wcieleniu i pod nazwą “Redirect to SMB“. Problem “na nowo” odkryli pracownicy firmy SPARE, a swoim znaleziskiem podzielili się w raporcie.

Redirect to SMB – na czym polega atak?

Nowa odsłona ataku wprowadza po prostu nowy wektor ataku, do którego wykorzystuje webserwer odpowiadający ma żądania HTTP kodem błędu 301 lub 302 i przekierowujący użytkownika na zasób SMB (file://x.x.x.x). Celem atakującego jest więc wymusić przekierowanie do SMB w programie, który korzysta z dziurawej biblioteki urlmon.dll i któregoś następujących wywołań API:

URLDownloadA
URLDownloadW
URLDownloadToCacheFileA
URLDownloadToCacheFileW
URLDownloadToFileA
URLDownloadToFileW
URLOpenStream
URLOpenBlockingStream

W przypadku Internet Explorera jest to bajecznie proste. IE “rozumie” i obsługuje SMB, wystarczy więc odpowiednio spreparowana strona internetowa. Ale nawet jeśli ofiara nie korzysta z Internet Explorera, można ją z sukcesem zaatakować, np. tak:

  • Stwórz HTML z linkiem do obrazka wskazującym na kontrolowany przez siebie zasób SMB
  • Zapisz HTML jako .doc
  • Prześlij .doc do pracownika.

Otworzenie pliku .doc przez Worda spowoduje, że edytor rozpozna iż jest to tak naprawdę nie dokument a strona HTML, więc zrenderuje go korzystając z — zgadliście — …Internet Explorera!

Sposobów jest oczywiście zdecydowanie więcej:

  • Ataki Man in the Middle to jeden z przykładów. W każdą odpowiedź HTTP można wstrzyknąć zasób SMB. Ataki te można realizować np. poprzez ARP Cache Poisoning.
  • XXE (XML External Entites), funkcja wspierana przez parsery XML może być nadużyta do przekierowań na SMB
  • Kontrolki odpowiedzialne za np. “podgląd obraków” w znanych programach typu chat/IM

cdn2_hubspot_net_hubfs_270968_SPEAR_RedirectToSMB_public_whitepaper_pdf_t_1428949342328

Wśród podatnych na “przekierowanie do SMB” aplikacji, SPARE wymienia Adobe Readera, Apple QuickTime, GitHub dla Windows, oraz Apple Software Update (iTunes) a nawet Microsoft Baseline Security Analyser czy antywirusy Symanteca (Norton) AVG, BitDefender i Comodo a także narzędzia związane z bezpieczeństwem (.NET Reflector i Maltego CE).

Poniżej demonstracja ataku na AVG:

Mam Windowsa — co robić, jak żyć?

No jakby Wam to powiedzieć… ;-) Sami za wiele nie zrobicie — przede wszystkim twórcy oprogramowania muszą przepisać swoje programy tak, aby nie korzystały z groźnych funkcji, które pozwalają na przekierowywanie żądań do SMB. To chwilę zajmie, dlatego do tego czasu najlepiej zablokować obsługę żądań SMB poza lokalną (zaufaną) podsieć, wydając na firewallu polecenie blokujące dostęp do portów TCP 139 i 445 w kierunku wychodzącym.

Warto też zapoznać się z wytycznymi Microsoftu z 2009 roku dot. tzw. Extended Protection for Authentication.

tumblr_ksarpvl58H1qzgiogo1_500

Dodatkowo warto wdrożyć zestaw dobrych praktyk od Rapid7.

Przeczytaj także:

56 komentarzy

Dodaj komentarz
  1. Czy odhaczenie w opcjach połączenia sieciowego “Klient sieci Microsoft Networks” coś daje w tym przypadku? :]

  2. Hot 18! :D

    • Karta w przeglądarce z tytułem “18-letnia dziura…” rzeczywiście może wyglądać trochę NSFW…

  3. Wyłączyłem bezpiecznie komputer.

    • “nie słyszałeś o printscreenie?”

  4. Czyli stąd się wzięło stare porzekadło, że IE to program służący do przeglądania internetu z komputera i na odwrót…

    • @Kenjiro: Microsoft nie przykładał się zbyt mocno do usunięcia problemu, bo razem z Active Directory wprowadził protokół Kerberos, który nie przekazuje haseł przez sieć.
      SMB w prostej formie domeny/workgroup jest przeznaczone dla “małych”. A jak chcesz mieć lepsze zabezpieczenia, to jesteś “duży” i masz kupić AD.

    • eee…. a gdzie można kupić AD ?
      Bo ja korzystam z wersji bezpłatnej czyli pewnie gorszej….
      Co więcej można kontroler AD postawić na Linuksie więc proszę o linka do wersji płatnej :)

      Tak naprawdę to nie duży a jeżeli masz więcej niż 3 komputery w organizacji to tej organizacji AD należy się jak psu micha…

    • @Rober

      Chcialem kliknac “lubie to” ale nie moge zadnego przycisku znalesć :-).

  5. czy da sie owe porty zablokowac w fabrycznym firewallu? pomozcie proszę

    • Nie wiem czy blokada standardowych portów jest coś warta, bo port można zmienić.
      Dodatkowo ISP często blokują porty od SMB.
      Najlepszym chyba wyjściem jest wyłączenie usług systemowych od SMB, czyli usługi “Stacja robocza” i “Serwer”.

    • Czyli, wylać dziecko z kąpielą i całkowicie zablokować możliwość korzystania z SMB/Samby, również w sieci lokalnej (np. z udziałów na innych maszynach lub NASach itp.)…? Z jednej strony paranoja i obłęd, a z drugiej faktycznie przecież w takim razie np. współpracownik również teoretycznie może przechwycić nasze dane logowania jeśli łączymy się z jakimś zasobem SMB na jego komputerze… swoją drogą, czy naprawdę tak niesłychanie trudne lub wręcz niewykonalne jest stworzenie poprawek umożliwiających zablokowanie prób automatycznego logowania do zdalnego zasobu SMB przy pomocy aktualnych lokalnych danych logowania, zamiast tego wymuszając każdorazowe wyświetlenie okna logowania? Czegoś takiego poszukiwał np. autor tego wątku: http://www.tomshardware.co.uk/forum/83619-45-disable-passing-local-credentials-servers , stwierdzając “I just dont want the machine to pass the local username and password when attempting to connect to \\server1\share.” – niestety odpowiedź która rozwiązywałaby problem nie padła…

    • Zgadza się, słusznym rozwiązaniem byłoby stworzenie opcji konfiguracyjnej, która by w krytycznym miejscu kodu powodowała:
      a) działanie jak dzisiaj,
      b) pytanie o credentiale przy każdym wywołaniu (z opcją zapisu w magazynie credentiali),
      c) blokadę w ciemno wszelkich wywołań dla hostów nie zapisanych w magazynie credentiali (menedżer poświadczeń).

      Zastanawiam się tylko, jak ma się do tego funkcjonalność HomeGroups, która niby przecież wyłącza uwierzytelnianie użytkownikiem i hasłem… ale czy na pewno?

    • “Czyli, wylać dziecko z kąpielą i całkowicie zablokować możliwość korzystania z SMB/Samby, również w sieci lokalnej (np. z udziałów na innych maszynach lub NASach itp.)…? ”

      SMB/udziały są i tak rozwiązaniami napisanymi na odpieprz. Lepiej w sieci postawić serwer FTP służący do wymiany danych między pracownikami. Nawet na windozie się da postawić FTP, a Eksplorator Windows może posłużyć jako prosty klient FTP (nie pamiętam szczegółów, bo ja na Linuksie od 10 lat jestem, ale wiem że się da, bo kiedyś sam tego używałem jak stawiałem w gimnazjum stronę na jakimś darmowym hostingu).

    • @SuperTux
      Tak, masz rację. W natwynym rozwiązaniu problemy to codzienność, a też nie jest to lekkie dla systemu. Tak więc jako serwer można użyć FileZilla dostępny wyłącznie z LAN – konfiguracja banalna i często prostsza niż natwne rozwiązanie. Jest też wiele lżejszy niż pokrewne usługi Windowsa. Na Windows 7 można też zmapować FTP jako udział sieciowy. Nie pamiętam czy na XP też, ale można sobie stworzyć skrót i działać z Eksploratora jako z przeglądarki FTP, tak jak mówisz. Większości szarych użytkowników to wystarczy. Odpadają wtedy zaawansowane uprawnienia, ale proste read/write jest. Sam od dawna namawiam klientów do zmiany udostępniania z natywnego na FTP zamkniętego dla sieci lokalnej. Ci, którzy korzystają, są zadowoleni. Teraz dużo ludzi ma w sieciach inne urządzenia. Gratulacje dla tego, kto chce konfigurować smartfony i tablety do sprawnej obsługi udziałów Windowsa (:

    • W szkole wtedy (tam gdzie stronę stawiałem) było Windows ME i przez eksploratora wbijałem, więc pewnie na ikspeku też się da.

  6. Możecie podpowiedzieć, jak skonfigurować dla wszystkich komputerów w sieci?
    https://onedrive.live.com/redir?resid=1b9ec8947ed5a279!38178&authkey=!AJ20ZhA51L2KpkY&v=3&ithint=photo%2cjpg

    • Najwyraźniej soft routera, pomimo iż opis twierdzi że pewne pola mogą pozostać puste, i tak domaga się w nich jakichś danych. Spróbuj ustawić zakresy pokrywające całość, np. 1-65535 dla portu źródłowego i/lub (zakładając że twoja sieć lokalna to 192.168.0.0/24) 192.168.0.1-254 dla IP źródłowego.

    • Patrząc ponownie na twojego screena wydaje mi się jednak, że komunikat “Brak danych w tabeli.” oznacza nie tyle odrzucenie próbu utworzenia wpisu (jak uznałem uprzednio), co raczej fakt, że po prostu żaden wpis nie został jeszcze dodany. Dodaj wpis z portem docelowym 139, i drugi z 445 (reszta pól pozostawiona pusta powinna oznaczać wszystkie adresy źródłowe/docelowe oraz wszystkie porty źródłowe), ustaw opcję “Uruchomić filtr LAN kontra WAN” na “Tak”, i kliknij “Zastosuj” na dole.

      Możesz zweryfikować działanie filtra np. puszczając z linuksa w sieci lokalnej komendę “traceroute -p 139 scanme.org” – jeśli filtr działa poprawnie, zobaczysz same gwiazdki zamiast pingów od pierwszego hopa (zakładając że router o którym mowa to pierwszy hop).

      Aczkolwiek należy pamiętać, że (jak już wspominali użytkownicy powyżej) jest to jedynie stosunkowo powierzchowne zabezpieczenie, ponieważ napastnik może po prostu uruchomić swoją zbójecką usługę na innym porcie, i na ten właśnie port kierować ofiary. W celu zwiększenia bezpieczeństwa konieczna byłaby głębsza inspekcja pakietów, tak aby firewall był w stanie rozpoznać wychodzący ruch SMB/CIFS niezależnie od portu docelowego na który jest kierowany, jednak niestety raczej nie jest to funkcjonalność standardowo dostępna w urządzeniach z segmentu konsumenckiego.

  7. Szałowe te screeny :D

  8. Udało mi się te porty jakoś zablokować.. zobaczymy czy jakoś to wpłynie na korzystanie z internetu.. jak tak to odblokuje

  9. A ja na Linuksie bezpieczny, od 10 lat.

    • Gratulacje!

  10. Link do dobrych praktyk nie bangla… Co robić?! JAK ŻYĆ?! :D

  11. 301 i 302 to kody przekierowan, nie bledow

  12. To prawda, wielu ISP blokuje publiczny dostęp do samby – jako przykład podam UPC. Co więcej – nawet nie ma możliwości wyłączenia tej blokady. Jedyna możliwość korzystania to skorzystanie z VPNa (np. PPTP, które niektórzy dostawcy tez fabrycznie blokują w routerach – np. Virgin media w UK).

    • “(…) jako przykład podam UPC” – czyżby, jakoś “traceroute -p 139 example.com” i “traceroute -p 445 example.com” przechodzą przez nich bez problemu…

    • Tyle że ta podatność nie polega na logowaniu z internetu do Ciebie, tylko wymuszeniu żeby Twój komputer się połączył z docelowym hostem.

    • Nie bardzo rozumiem twoje zastrzeżenia, biorąc pod uwagę że powyższe komendy symulują właśnie nawiązywanie wychodzących połączeń z domyślnymi portami docelowymi SMB/CIFS…

    • Bo to było wyjaśnienie do Oliver.

    • a ten traceroute, ktory dzialal to na pewno po tcp?

  13. Czy słowo “Symanteca” poprawnie nie powinno być napisane przez “k” (“Symanteka”)?

    • “If a user enables Extended Protection for Authentication, and attempts to connect to a server that does not support the feature, that authentication attempt will still succeed.” – no super, czyli możemy się zabezpieczyć pod warunkiem, że szanowny napastnik taką możliwość wpaniałomyślnie wspiera…

    • (ups, wpis nie miał być odpowiedzią na wpis użytkownika “cyna”, tylko ogólnym komentarzem.)

  14. “ATTACKER CONTROLLED SERVER” – czyli “napastnik kontrolował serwer”, ale już nie kontroluje…?

    • Raczej “serwer kontrolowany przez napastnika”. “Attacker-controlled server”.

    • @Bartek: rzeczywiście powinno jak najbardziej być właśnie tak jak napisałeś – powinno, ale nie jest.

      Jest to typowy przypadek bardzo “modnego” niestety ostatnimi czasy (i to w wielu różnych językach, m.in. w niemieckim, angielskim, również polskim), jednakże durnowatego w swej naturze opuszczania znaku dywizu/łącznika, zastępując go… spacją (w j. niemieckim przypadłośc ta dorobiła się własnej nazwy, tzw. “Deppenleerzeichen”, czyli “spacja durnia”). W ten sposób formalnie sens zdań jest najczęściej (niekiedy nawet w sposób dość komiczny) wypaczany, np. w tym przypadku zamiast przymiotnika “attacker-controlled” otrzymujemy rzeczownik “attacker” i czasownik “controlled”.

      U podłoża plagi tego zjawiska leży bardzo często niewiedza piszącego połączona z niewykrywalnością takich błędów przez tzw. “spellcheckery” (oba słowa napisane rozłącznie istnieją w słowniku, więc automatyczny korektor nie dostrzega błędu, ponieważ nie analizuje składni gramatycznej), nierzadko niechlujstwo/brak dbałości o szczegóły, a czasem niestety świadomy zamysł – specjaliści od sprzedaży rzekomo stwierdzili, jakoby frazy zawierające dywiz/łącznik z handlowo-marketingowego punktu widzenia prezentowały się gorzej od ich odpowiedników pisanych rozłącznie, i miewamy do czynienia z w pełni celowym łamaniem zasad gramatycznej logiki z przyczyn (wątpliwie) “estetycznych”.

  15. (głównie z tego powodu, że jest to problem projektowy, tzw. “design flaw”)

    Design flaw? czy chodziło o design flow ??

    Pozdrawiam ;)

    • – Design flaw?
      Tak

      – czy chodziło o design flow?
      Nie

  16. Może wróćmy do Windows 3.11 .Stary dobry system, na którym większość współczesnych wirusów i trojanów nie będzie działać z powodu braku obsługi zaawansowanych protokołów i funkcji… ;)))

    • Windows 8 do Win3.11 dużo nie brakuje – Menadżera Programów (Start Screen) i brak menu start już ma…

    • Niestety tzw. “UI design” aktualnie w zasadzie cofnął się do poziomu Win3.x, a nawet niżej (ogólnie wszystko wielkie, płaskie i maksymalnie cztery kolory na krzyż). Wtedy realia były podyktowane ograniczeniami technicznymi, dziś chyba raczej ograniczeniami mentalnymi w pewnych kręgach. Jedynie rozdzielczości są znacznie wyższe i wciąż niezmordowanie śrubowane do góry, np. ostatnio można usłyszeć że “1920×1080 to niska rozdzielczość”, a wpółczynnik DPI na ekranach smartfonów już jakiś czas temu przekroczył granicę sensowności (biorąc pod uwagę przeciętną fizyczną rozdzielczość ludzkiego oka).

    • Tak jak megapiksele w aparatach, na czym zresztą mocno traci jakość fotek, ale to magia liczb, marketingu i programowanej prze niego głupoty ludzkiej. Sorki ale nie mogłem się powstrzymać.

  17. Z tego co rozumiem, to podatność polega na tym, że można sobie wyciągnąć czyjś hash hasła z systemu, co umożliwia ataki offline na hash – czy wobec tego nie wystarczy ustawić bardzo mocnego hasła nawet do lokalnej maszyny? (Albo wcale nie ustawiać – wtedy nie ma czego ukraść ;) )

  18. Jakie hasło zostanie wykradnięte? Jeżeli do windowsa 8 loguję się swoim mailem i hasłem do maila, ale na ekranie logowania loguję się pinem to wykradnięte może zostać moje hasło i adres mailowy?

  19. Mam linuksa Elementary OS. Czy jestem bezpieczny?

    • Zdecydowanie nie w powietrzu pełno jest promenowania, wszędzie czai się ebola, samoloty, samochody, smutni panowie (w mundurach lub bez) i co gorsza w każdej chwili gotowa wy…lić supernowa i usmażyć wszystkie komputery wraz z ich użytkownikami.

    • Nie. Nikt nie jest bezpieczny.

  20. Chyba znalazłem “rozwiązanie problemu” i sposób na zabezpieczenie się.

    W Windows 7 Professional (Chyba działa też dla XP i Visty):
    1. Otwieramy Menedżer poświadczeń (w cmd: Control keymgr.dll)
    2. Klikamy Dodawanie poświadczenia systemu Windows
    3. Jako Adres internetowy lub sieciowy wpisujemy: *
    4. Jako Nazwa użytkownika wpisujemy losową nazwę np.: testuser
    5. Jako Hasło wpisujemy losowe hasło np.: testuser123
    6. Klikamy ok

    Nie testowałem tego zbyt dokładnie, ale to co przetestowałem pokazuje, że następuje próba logowania jako użytkownik testuser.

    • Wykorzystując Windows Serwer 2012 R2 (Widnows Azure), stworzyłem użytkownika o takich samych danych jak na lokalnym komputerze i spróbowałem odwiedzić udostępniony dla tego użytkownika zasób (obrazek) – nie udało się go wyświetlić w IE. Usunąłem na testowym serwerze to konto i stworzyłem konto takie jak podane w poświadczeniach, następnie udostępniłem plik – udało się go wyświetlić.

      Utworzyłem plik HTML .doc z obrazkiem o którym mówiłem wcześniej i odpaliłem w OpenOffice Writer. Dla użytkownika z poświadczeń się wyświetlał, dla użytkownika lokalnego nie. Po usunięciu poświadczeń też się nie wyświetlał.

      Niestety nie udało mi się przetestować przekierowania. Gdy podawałem adres po http do pliku (kod php):
      header(“HTTP/1.1 301 Moved Permanently”);
      header(“Location: file://x.x.x.x/test.png”);

      Po wejściu na stronę, która miała przekierowywać IE “ładowało stronę” w nieskończoność. A po adresie pliku (file://x.x.x.x/test.png) wyświetlał się obraz.

      Dla pewności powinien ktoś, to dokładniej sprawdzić, ale wydaje mi się że dodanie takiego poświadczenie “rozwiązuje problem”.

  21. To odkrycie uwypukla nieco większy problem – SSO. Wiadomo, że to co jest wygodnie często nie jest bezpieczne, tak jest i w tym wypadku.
    W środowiskach firmowych można z tym żyć, bo przecież słabości uwierzytelniania NTLM są znane już od dawna. I tak samo od dawna do dobrych praktyk zalicza się przejście w całości na Kerberosa i wycinanie SMB/CIFS na firmowym firewallu. Ponadto firmową infrastrukturą zajmują się (zazwyczaj) ogarnięci ludzie, którzy monitorują nowinki “security” i wdrażają odpowiednie polityki np. przez GPO. Gorzej z użytkownikami indywidualnymi. Przecież te ataki umożliwiające wyciągnięcie hasła przez SMB można było stosować (i pewnie stosowano) już od dawna – co to za problem w phishingowej wiadomości e-mail wysłać link UNC i nakłonić do jego kliknięcia (lub skopiowania i wklejenia w pasek adresu Eksploratora Windows). Albo umieścić taką “instrukcję” na jakimś fejsbuczku czy czymś podobnym – nieświadomy użytkownik i tak wpadnie.
    Odkrycie tych badaczy umożliwia po prostu ataki na masową skalę (i wyczuwam tu taki lekki FUD), ale poszkodowanymi będą w większości osoby indywidualne, których hasło do Windowsa zwykle nie będzie miało jakiegoś strategicznego znaczenia dla atakującego – co komuś po haśle, skoro nie ma go gdzie użyć (inną kwestią jest używanie wszędzie tego samego hasła…).
    Microsoft pewnie załata ten problem zmieniając zachowanie w/w wywołań API, ale nie rozwiąże to wielu innych problemów związanych z SSO, czających się gdzieś i czekających na odkrycie przez innych badaczy. Czy faktycznie SSO jest tak bardzo potrzebne na domowych komputerach “zwykłych” użytkowników?

    • Ale SSO to jest to na czym Gates robi kase.
      Taki model biznesowy.
      Oduczyć użyszkodnika myśleć , kreator “user frendly”, pochować opcje ważne pod trzema warstwmi jakiegoś Aero plus dodatkowa warstwa kafli by nie narobił sobie sam kuku .
      Jak sie weżmie za GPO to zablokuje sobie dostęp do systemu :-)
      A ta sztuczka jest już stara,zdązyłem się już zestarzeć jak pierwszy raz ją użyłem w starym NT.

      Ostatnio wdrażałem takie małe AD na server 2012 i miałem okazje pobawić się troche tą imitacją shella będącego wynikiem podglądania Linuksa zgodnie z jedną z ich strategii “jak nie możesz zwalczyć to przejmij koncept w ten czy inny sposób”.
      W końcu przez lata to okienka wyznaczały standard , a shell to przeżytek miał być jak okrojony zgodnie z tą doktryną DOS.Tego miało nie być.
      Wyobrażam sobie miny adminów starej daty wychowanych z dala w separacji od reliktu konsoli na okienkach, jak pierwszy raz ujrzeli serwer hard COre w wersji windows 2008.
      Przerost formy nad treścią IMO, ale miło widzieć jak winda goni standardy miast je wyznaczać.

  22. Drobna poprawka w tekscie zamiast obraków powinno być obrazków :)
    Ogólnie tak trzymać i podtrzymujecie że windows nadaje się tylko do grania (w kwestii bezpieczeństwa :D)

    • Windows nawet do tego przestaje się nadawać – na Linuksa coraz więcej gier komercyjnych wychodzi.

  23. a czy Windows z ustawionym domyślnym Firefoxem też będzie otwierać HTML z rozszerzeniem .doc w IE?

    a co z systemami z odinstalowanym IE?

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: