SQL injection na Microsoft UK Events

O tym jak bardzo należy uważać i dlaczego przed ostatecznym wypuszczeniem produktu do klienta trzeba wszystko sprawdzić 10 razy, przekonał się niecały miesiąc temu brytyjski oddział Microsoft.

Ich strona nie dość, że wyświetlała bardzo szczegółowe błędy serwera, łącznie z błędną składnią SQL, to w dodatku nie miała żadnej filtracji na parametrach przekazywanych w URL.

Na efekt nie trzeba było długo czekać. Haker o pseudonimie “rEmOtEr” zamienił stronę eventów brytyjskiego Microsoftu na taką, jaką uważał za stosowną. Prawdopodobnie nowa strona nie przypadła do gustu właścicielom serwisu, bo nie wisiała długo.

Szczegółowa lektura dostępna jest pod tym adresem.

Błędy, błędy i jeszcze raz błędy zaniechania, niedoszacowania i niedocenienia użytkowników Internetu powodują takie a nie inne efekty. SQL injection jest jedną z najpopularniejszych metod podmian stron (tzw. deface) i kradzieży danych. Jeśli w swoim procesie analizy zagrożeń serwisu www, który właśnie produkujesz, nie masz badania podatności na SQL injection, odwlecz premierę o tydzień albo dwa i przejrzyj dokładnie kod. Jeśli nie masz w ogóle podobnej analizy, zastanów się jeszcze raz nad sensem istnienia czegoś, co zostanie szybko zniszczone.

W procesie testowania serwisu ITCore.pl przypadło mi napisać scenariusz testowania dla wyszukiwarki jaka będzie zainstalowana na serwisie. Dość duży nacisk położyłem na wykorzystanie różnych potencjalnie niebezpiecznych z punktu widzenia serwisu akcji użytkownika, które mogłyby spowodować ciąg zdarzeń podobnych do tych, jakich doświadczył Microsoft UK.

Przykładowy scenariusz zakłada sprawdzenie wyników wyświetlania takiego zapytania:

‘ UNION SELECT name, type, id FROM sysobjects;–

Testy mam nadzieję zaczną się niedługo, będę miał okazję przekonać się samemu.

Mała niespodzianka: osoba, która jako pierwsza napisze w komentarzu do tego posta, jakiego wyniku nie chcielibyśmy zobaczyć po wykonaniu powyższego wyszukiwania na serwisie ITCore.pl oraz poda prosty kawałek kodu (VB, C#, SQL) pozwalający ustrzec się przed podobnymi sztuczkami użytkowników otrzyma ode mnie w prezencie nieużywaną, nieodpakowaną, świeżą i pachnącą grę na XBOX 360 pt. Forza Motorsport 2. Chętni?
Oczywiście liczą się tylko poprawne odpowiedzi.

Disclaimer: Konkurs organizowany jest przeze mnie, prywatną osobę i nie ma związku z Microsoft Polska sp. z o.o., Microsoft Ireland, Microsoft UK, XBOX czy serwisem ITCore.pl.

10 Responses to “SQL injection na Microsoft UK Events”


  1. Gravatar Icon 1 Wampir

    Z SQL injection spotkałem się nie raz w swojej pracy i zwykle wynikało ono z:
    1. Braku walidacji danych wejściowych,
    2. Braku kodowania znaków o specjalnym znaczeniu dla SQL (w tym przypadku znaku ‘ )
    3. Dynamicznym tworzeniem zapytań SQL

    W związku z tym Twoje pytanie wydaje mi się nieco tendencyjne. Prosty kawałek skryptu może na przykład zamieniać ‘ na ”, ale nie tędy droga (moim zdaniem). Zamiast tego, należy (trochę utopia):
    1. Dla każdego parametru określić typ, zakres i format danych akceptowanych,
    2. Stworzyć stosowne walidatory (a tu ASP.NET jest na prawdę dobrze przygotowane),
    3. Kodować dane przed przekazaniem do interpretatora (w tym przypadku do SQL),
    4. Nie używać dynamicznego SQL, lecz zamiast tego korzystać ze “stored procedures” i “bind variables”,

    …mniej więcej tyle :) A, nie biorę udziału w konkursie :)

  2. Gravatar Icon 2 Michał Osmenda

    @wampir: moje pytanie tendencyjne? No co Ty :)

  3. Gravatar Icon 3 Crash

    Disclaimer mi się najbardziej podoba ;D Ty z racji pracy w MS musisz tak za każdym razem pisac?

  4. Gravatar Icon 4 Wampir

    No wiesz, widziałem ludzi, którzy “zabezpieczali się” przed XSS wycinając słówko “script”. Ale, choćby, przez onmouseover już śliczne XSS dało się zrobić. Aplikacje, które ochronę przed XSS na validateRequest (ASP.NET) opierały, też już “odwiedzałem”. Dlatego jakoś nie wierzę w “proste kawałki kodu” :)

  5. Gravatar Icon 5 Tomek

    Proste kawalki kodu sa tutaj:
    http://msdn2.microsoft.com/en-us/library/ms161953.aspx
    http://msdn2.microsoft.com/en-us/library/ms998271.aspx

    Co do samego sprawdzenia znakow i kodowania to jest mala biblioteka do uzycia w ASP .NET z Microsoft, ale dosyc prosta wiec raczej polecalbym stworzenie wlasnego rozwiazania.

    @Wampir
    Ja widzialem takich ktorzy wycinali w lancuchu wejsciowym slowo SELECT.

  6. Gravatar Icon 6 Michał Osmenda

    @Crash: to latwiej niz pozniejsze tlumaczenia

  7. Gravatar Icon 7 Pawel Pabich

    Uzywajac .NETa wystaczy uzywac paramtryzowanych zapytan. Proste jak budowa cepa, no ale przeciez zawsze mozna uzywac “Select” cos tam. Tym sie rozni zabawa od profesjonalizmu.

  8. Gravatar Icon 8 Sakowicz

    Jej, niby wszyscy trąbią o SQL Injection a jednak cały czas jest ktoś kto o tym nie słyszał. Drugą rzeczą która mnie dziwi to ilu ludzi z it siada do rozwiązywania problemów, bez znajomości narzędzi których używają.

  9. Gravatar Icon 9 Pawel Pabich

    @Michal S. : To raczej nie chodzi o narzedzia, a o wiedze. Narzedzia cie nie uchronia, jak jestes buc :)

  10. Gravatar Icon 10 Sakowicz

    @Pawel P.: Wszystko jest ze sobą powiazane, jak znasz narzędzie to wiesz do czego służą poszczególne składniki i gdzie je zastosować aby ustrzec się problemów.
    Ale jasne nawet najlepsze narzędzie nie uchroni nikogo przed błędami jeśli niebardzo wie co robi.

Leave a Reply




Disclaimer

All postings are provided "AS IS" with no warranties, and confer no rights. This weblog does not represent the thoughts, intentions, plans or strategies of Microsoft or any other company or organization. Because a weblog is intended to provide a semi-permanent point-in-time snapshot, you should not consider out of date posts to reflect current thoughts and opinions.
All rights reserved. Quotations from this blog require author's written approval.
PL: Wszelkie prawa zastrzeżone. Cytaty z tego bloga wymagają pisemnego zezwolenia autora.

Add to Technorati Favorites