Jak sprawdzić, czy Twój system WordPress jest zabezpieczony przed atakami XSS
Na całym świecie prawie 48 procent wszystkich witryn internetowych jest podatnych na ataki cross-site scripting (XSS). Na całym świecie prawie dokładnie 25 procent wszystkich stron internetowych korzysta z platformy WordPress.
Wynika z tego, że na diagramie Venna stron podatnych na XSS i stron działających na platformie WordPress nakładanie się musi być dość duże.
To nie jest stukanie w samą platformę. Zespół WordPress uczynił z bezpieczeństwa integralną część swojej misji i agresywnie łata luki w zabezpieczeniach, gdy tylko zostaną one ujawnione. Jednak to nie powstrzymuje ludzi przed kodowaniem niezabezpieczonych motywów lub instalowaniem niezabezpieczonych wtyczek. Te problemy to dwa główne wejścia do ataków XSS na witryny WordPress, a w tym artykule omówimy, jak je powstrzymać.
Wprowadzenie do skryptów międzywitrynowych
Najpierw omówmy, jak przeprowadzane są ataki XSS. Istnieje więcej niż jeden rodzaj ataku XSS, więc zacznę od uproszczonej definicji. Ogólnie rzecz biorąc, ataki XSS rozpoczynają się od nieoczyszczonych danych wejściowych — formularzy komentarzy, pól komentarzy, pasków wyszukiwania itp. Ataki te różnią się znacznie pod względem wyrafinowania. W rzeczywistości najprostsza forma ataku XSS jest codziennie widziana przez użytkowników WordPress: komentarz spamowy. Wiesz, o czym mówię: „Dzięki za wspaniały artykuł. Nawiasem mówiąc, oto moja strona, na której zarabiam 5000 $ tygodniowo pracując z domu: www.only-an-idiot-would-click-this-link.co.uk.”
W pewnym sensie komentarze spamowe są doskonałym przykładem ataku XSS. Złośliwy podmiot podważa infrastrukturę Twojej witryny (pole komentarza), aby umieścić swoją zawartość (złośliwy link) w Twojej witrynie. Chociaż jest to dobry przykład ilustracyjny, bardziej realistyczny atak XSS będzie znacznie subtelniejszy. Utworzenie komentarza będącego spamem zajmuje około pięciu sekund. Atak XSS to coś, na co porządny haker poświęci nieco więcej czasu.
Prawdziwy czarny kapelusz spróbuje wykorzystać wszystkie aspekty Twojej witryny, które przesyłają dane na serwer, zasadniczo używając ich jako miniaturowego edytora tekstu. Jeśli twoje dane wejściowe nie są chronione, oznacza to, że mogą dosłownie wziąć swój kod i zmusić twoją aplikację do uruchomienia go i renderowania w przeglądarce użytkownika (i to może obejmować twoją przeglądarkę). W przeciwieństwie do komentarzy będących spamem, tylko szczegółowa analiza zmodyfikowanego kodu Twojej witryny lub przeglądanie interakcji w witrynie może ujawnić naruszenie. Jak można sobie wyobrazić, liczba niesmacznych rzeczy, które mogą wyniknąć z takiego naruszenia, nie ma końca.
Prosty wandalizm jest stosunkowo częstym skutkiem ataków XSS, w wyniku których Twoim użytkownikom zamiast treści wyświetlane są groteskowe obrazy lub propaganda polityczna. Marketerzy, którzy nie mają długoterminowych planów ani problemów etycznych, wykorzystają je do reklamowania się użytkownikom wbrew ich woli. Bardziej dopracowany i subtelny atak może ukraść dane logowania użytkowników. Jeśli jeden z nich ma uprawnienia administratora, wszelkie dane osobowe, które przechowujesz w swojej witrynie, mogą być do wzięcia. Alternatywnie, mogą wykorzystać początkowy atak XSS jako dźwignię, aby otworzyć Twoją witrynę i zainstalować jeszcze bardziej zaawansowane złośliwe oprogramowanie.
Powstrzymywanie ataków
Jeśli jesteś osobą znającą się na kodzie i jesteś jedynym właścicielem stosunkowo małej witryny WordPress, to bezpieczne praktyki kodowania będą prawdopodobnie najlepszym sposobem na zablokowanie witryny przed atakami typu cross-site scripting. Załączam to zastrzeżenie, ponieważ jeśli jesteś częścią większej organizacji korzystającej z bardziej złożonej aplikacji, znalezienie każdego obszaru, w którym złośliwa osoba atakująca może wstrzyknąć kod, może nie być po ludzku możliwe. Nowoczesne strony internetowe mogą mieć ogromną skalę i być może warto zatrudnić doświadczonego profesjonalistę i poświęcić czas na inne zajęcia, aby Twoja witryna była jeszcze lepsza dla czytelników.
Kolejnym ostrzeżeniem jest to, że jeśli nie jesteś szczególnie obeznany z kodem i chcesz, aby ktoś inny zbudował Twoją witrynę, nie zakładaj, że zastosował bezpieczne praktyki kodowania. Wiadomo, że nawet najbardziej doświadczeni programiści zostawiają zabezpieczenia na boku lub popełniają drobne błędy bez sprawdzania ich pracy przez kogoś innego. Inni programiści mogą po prostu nie wiedzieć, co robią w zakresie bezpieczeństwa, a inni wciąż pomijają zabezpieczenia, aby zaoszczędzić czasu dla siebie (mimo braku profesjonalizmu w tym zakresie). Podsumowując, upewnij się, że zatrudniasz uznanego profesjonalistę, który nie idzie na skróty, jeśli chodzi o rozwój i ochronę Twojej witryny.
Wyrażając tę obawę, jedną z pierwszych i najłatwiejszych rzeczy, które możesz zrobić, aby zapobiec skryptom między witrynami, jest sprawdzenie poprawności danych użytkownika.
Załóżmy, że masz w witrynie formularz rejestracyjny, który prosi użytkownika o wpisanie swojego imienia i nazwiska. Złośliwy użytkownik może zamiast tego wpisać coś takiego:
Może to na przykład spowodować, że następna osoba odwiedzająca tę stronę wyśle kopię swoich plików cookie do osoby atakującej.
Możesz zobaczyć, że w tym przykładzie powyższy ciąg kodu w niczym nie przypomina czyjegoś imienia. Twój serwer tego nie wie, ale używając kilku ustawionych parametrów możesz go tego nauczyć. Na przykład możesz nakazać temu polu odrzucanie znaków specjalnych, takich jak ,() i ; (nie są szczególnie potrzebne w sekcji komentarzy). Możesz powiedzieć temu polu, że imię osoby prawdopodobnie nie zawiera cyfr. Jeśli chcesz być trochę drakoński, możesz powiedzieć temu polu, aby odrzucał dane wejściowe dłuższe niż piętnaście znaków (lub możesz zmienić wartości, jak chcesz). Podjęcie tych kroków drastycznie ograniczy ilość szkód, jakie atakujący może wyrządzić na określonym polu.
Nawet przy sprawdzaniu poprawności danych mogą istnieć formularze lub pola, w których nie można realistycznie ograniczyć typu używanych znaków, na przykład w formularzu kontaktowym lub polu komentarza. To, co możesz zrobić, to oczyścić dane. Proces ten uniemożliwia wykonanie kodu HTML w danym polu, konwertując wszystko, co można rozpoznać jako fragment wykonywalnego kodu, na znaki niekodujące. Na przykład hiperłącze nie pojawi się tam, gdzie inaczej mogłoby się pojawić.
Wreszcie, istnieją przypadki, w których Twoja witryna może wyświetlać dane, które są niebezpieczne dla użytkowników. Załóżmy, że ktoś pisze złośliwy komentarz na jednej z Twoich stron, który jest następnie indeksowany przez funkcję wyszukiwania w Twojej witrynie. Za każdym razem, gdy jeden z użytkowników przeprowadza wyszukiwanie, ten szkodliwy kod jest wykonywany, gdy jego przeglądarka ładuje wyniki wyszukiwania. Zapobiega temu unikanie danych, co zapewnia, że gdy witryna dostarcza dane użytkownikowi, jedynym uruchamianym kodem jest kod, który chcesz uruchomić.
Aby uzyskać więcej informacji na temat sprawdzania poprawności danych, oczyszczania danych i ucieczki danych, WordPress Codex zawiera doskonałe zasoby. Wyjaśni szczegółowo powyższe pojęcia, a także poda więcej przykładów, które można zastosować uniwersalnie.
Inne metody
Duże firmy mają większe strony internetowe; to jest fakt. Być może tysiące osób korzysta z Twojej witryny dziennie. Może zamiast standardowych formularzy i pól są też animacje, różne portale, części napisane w Javie i tak dalej. Nawet jeśli śledzisz to wszystko, być może w jednej z Twoich aplikacji jest dzień zerowy i nie masz możliwości obrony.
W takiej sytuacji, jeśli masz na to wpływ i budżet, zalecam zainwestowanie w zaporę sieciową (WAF). Dobry WAF będzie miał reguły korelacji, które automatycznie identyfikują i blokują ciągi HTML, które są najczęściej kojarzone z atakami polegającymi na wstrzykiwaniu kodu. Mogą również powiadamiać Cię, gdy aplikacje rozpoczynają eksfiltrację danych, gdy nie powinny tego robić lub robią to w nietypowych ilościach, pomagając w ten sposób w obronie przed atakami typu zero-day i innymi zaawansowanymi zagrożeniami. WAF nie jest srebrną kulą, ale jest nieocenionym narzędziem dla specjalistów ds. bezpieczeństwa i właścicieli witryn internetowych, którzy chcą chronić złożone aplikacje.
Istnieje również wiele wtyczek, które rzekomo chronią przed atakami XSS. Właściwie nie polecam tych. Zamiast zmniejszać ryzyko, wiele z tych wtyczek stanowi po prostu kolejną powierzchnię ataku, którą haker może wykorzystać. Nawet jedna z najbardziej znanych i najczęściej używanych wtyczek bezpieczeństwa, Akismet, okazała się w zeszłym roku podatna na ataki XSS . Jeśli chodzi o odpieranie ataków XSS, nie polegaj na półśrodkach. Rozwijaj niezbędne umiejętności i korzystaj z odpowiedniego zestawu narzędzi, aby Twoja witryna była bezpieczna.
Inne praktyczne zastosowania
Te informacje mogą być nieco skomplikowane dla niewtajemniczonych, ale nie chciałbym, aby ludzie byli zniechęceni potencjalną złożonością tych informacji. W przypadku ataku XSS możesz być pewien, że sprzątanie po takim zdarzeniu będzie o wiele bardziej skomplikowane niż wprowadzanie zmian na Twojej stronie. Sprzątanie kosztów reputacji Twojej witryny (zwykli czytelnicy dość łatwo uciekną z Twojej witryny) będzie dodatkowym problemem, o który nie chcesz się martwić.
Nawet jeśli zatrudniasz kogoś innego, aby zajął się tworzeniem i bezpieczeństwem Twojej witryny, zrób wszystko, co w Twojej mocy, aby przynajmniej móc zareagować na sytuację awaryjną i wiedzieć, gdzie są Twoje słabe punkty. Wiedza o tym, jak sprawdzić swój system, będzie na dłuższą metę kluczową umiejętnością i będzie podstawą innych tematów związanych z bezpieczeństwem i projektów tworzenia stron internetowych. Wszystko jest ze sobą połączone online i chociaż ataki XSS mogą być już przeszłością (choć jest to mało prawdopodobne), wiedza o tajnikach Twojej witryny nigdy nie będzie przestarzała.
Końcowe przemyślenia
Krajobraz bezpieczeństwa w Internecie stale się zmienia. Nigdy nie możesz być całkowicie pewien, jak może wyglądać atak XSS lub jak może zostać wykorzystany przeciwko tobie, ale jesteś winien to sobie i swoim czytelnikom, aby upewnić się, że robisz wszystko, co w twojej mocy, aby ich powstrzymać. Informuj się na bieżąco o tym zagrożeniu i sprawdzaj regularnie (polecam co najmniej raz w miesiącu) wszelkie istotne zmiany w świecie cyberbezpieczeństwa.
Nie oznacza to również, że można ignorować inne zagrożenia. Dostęp do sieci publicznej nadal wymaga korzystania z VPN, aby był bezpieczny. Nie możesz zaniedbywać bezpieczeństwa żadnego komputera, z którego korzystasz, aby uzyskać dostęp do swojej witryny. Dane logowania nadal muszą być często zmieniane i chronione przed atakami siłowymi. Ataki XSS są brutalne, ale nie są jedynym zagrożeniem, na które należy uważać.
Może być również konieczne udostępnienie tych informacji (lub nawet tego artykułu) swoim współpracownikom i zainteresowanym stronom w celu szerzenia oporu przed tego typu atakami. Chociaż możesz nie być w stanie zrobić zbyt wiele samodzielnie, jeśli wystarczająca liczba osób odpowiednio się chroni, możemy zaobserwować ogólny spadek tego typu ataków, ponieważ hakerzy próbują znaleźć inny sposób czerpania korzyści z biednych użytkowników Internetu.
Czy sam zastanawiasz się, jak sprawdzić ataki XSS, a także bronić się przed nimi w przyszłości? Czy są jakieś inne strategie wykrywania i usuwania, których używasz do walki z tym zagrożeniem? Czy są jakieś narzędzia, które poleciłbyś innym czytelnikom? Jeśli tak, zostaw komentarz poniżej i kontynuuj tę ważną rozmowę z innymi czytelnikami.