Reklama
Hosting współdzielony. To jest tania opcja, prawda? W przypadku ogromnej grupy ludności to wszystko, czego potrzebują do hostowania swojej witryny lub aplikacji internetowej. A jeśli dobrze to zrobisz, hosting współdzielony jest skalowalny, szybki i bezpieczny.
Ale co się stanie, gdy nie będzie dobrze zrobione?
Właśnie wtedy zaczynają wkradać się niebezpieczne problemy bezpieczeństwa. Właśnie wtedy istnieje ryzyko, że Twoja witryna zostanie uszkodzona lub wyciek prywatnych danych. Ale nie martw się. Zdecydowana większość hostów internetowych ma przyzwoite środki bezpieczeństwa. To tylko gospodarze z piwnicy na okazje, których trzeba się wystrzegać.
Polecamy Hosting współdzielony InMotion Hosting z pamięcią SSD.
Omówimy problemy bezpieczeństwa związane z udostępnianiem hostingu. Ale najpierw porozmawiajmy o tym, co zapewnia bezpieczeństwo wspólnej platformy hostingowej.
Co sprawia, że bezpieczny host internetowy
Istnieje kilka wyjątkowych kwestii bezpieczeństwa, które należy wziąć pod uwagę w odniesieniu do hostingu współdzielonego.
- Każdy użytkownik na serwerze powinien być odizolowany od innych użytkowników i nie powinien mieć dostępu do plików innych użytkowników ani ich modyfikować.
- Luka w zabezpieczeniach logiki witryny hostowanej na serwerze nie powinna mieć wpływu na innych użytkowników.
- Serwer jest regularnie aktualizowany, aktualizowany i monitorowany w celu rozwiązania problemów związanych z bezpieczeństwem architektury.
- Każdy użytkownik powinien mieć własny izolowany dostęp do bazy danych i nie powinien mieć możliwości wprowadzania zmian w przechowywanych rekordach ani uprawnień do tabeli innych użytkowników.
Ponownie, większość hostów internetowych spełnia te wymagania dotyczące udostępnianych ofert. Ale jeśli szukasz hostingu dla wielu witryn na jednym serwerze lub zastanawiasz się, jak układa się Twoja firma hostingowa, a nawet myślisz o założeniu własnej firmy hostingowej i chętnie pracujesz nad tym, jak zabezpieczyć swoich użytkowników, a następnie przeczytaj na.
Ale po pierwsze, zastrzeżenie
Zanim przejdziemy do sedna patrzenia na typowe ataki na hostingu współdzielonym, po prostu chcę oświadczenie, że ten post nie będzie (i nie powinien być odczytywany jako) wyczerpującą listą potencjalnych zabezpieczeń problemy.
Jednym słowem bezpieczeństwo jest duże. Istnieje wiele sposobów na skompromitowanie witryny. W przypadku współdzielonego hostingu jest to podwójnie. Pokrycie ich w jednym artykule nigdy nie było na kartach.
Jeśli jesteś paranoikiem w kwestii swojego bezpieczeństwa, zdobądź VPS lub serwer dedykowany. Są to środowiska, w których masz (w przeważającej części) absolutną kontrolę nad tym, co się dzieje. Jeśli nie masz pewności co do różnych rodzajów hostingu, sprawdź ten post Wyjaśnienie różnych form hostingu witryn internetowych [technologia wyjaśniona] Czytaj więcej od mojego kolegi, Jamesa Bruce'a.
Powinienem również podkreślić, że tego postu nie należy interpretować jako ataku na udostępnianie hostingu. Jest to raczej czysto akademickie spojrzenie na kwestie bezpieczeństwa związane z tą kategorią hostingu.
Directory Traversal
Zacznijmy od ataków na przechodzenie przez katalog (często nazywane „przechodzeniem przez ścieżkę”). Ten rodzaj ataku umożliwia dostęp do plików i katalogów przechowywanych poza katalogiem głównym.
W prostym angielskim? Wyobraźmy sobie, że Alice i Bob używają tego samego serwera do hostowania swoich stron internetowych. Pliki Alicji są przechowywane w / var / www / alice, natomiast dokumenty Boba można znaleźć w / var / www / bob. Ponadto udawajmy, że na serwerze jest inny folder (/ usr / crappyhosting / myfolder) przechowujący niezaszyfrowany plik tekstowy (nazwiemy go pwd.txt) zawierający nazwy użytkowników systemu i Hasła.
Jak dotąd ze mną? Dobrze. Teraz wyobraźmy sobie, że witryna Boba zawiera pliki PDF generowane lokalnie, a plik lokalny jest przywoływany w adresie URL. Coś jak:
http://example.com/file?=report.pdf
Co by się stało, gdybym zastąpił plik „report.pdf” niektórymi parametrami UNIX zmieniającymi katalog?
http://example.com/file?=../alice/
Jeśli serwer jest niepoprawnie skonfigurowany, pozwoli to zobaczyć katalog główny Alice. Ciekawe, ale o wiele bardziej interesuje nas ta soczysta teczka paszportowa. Hasła Accio!
http://example.com/file?=../../../usr/crappyhosting/myfolder/pwd.txt
To naprawdę takie proste. Ale jak sobie z tym poradzić? To łatwe.
Słyszałem kiedyś o mało znanym narzędziu Linux o nazwie chroot? Prawdopodobnie już zgadłeś, co to robi. Ustawia katalog główny Linux / UNIX na dowolny folder, uniemożliwiając użytkownikom wyjście z niego. Skutecznie zatrzymuje ataki przechodzenia przez katalog na ich ścieżkę.
Trudno powiedzieć, czy Twój gospodarz ma to miejsce bez łamania prawa. W końcu, aby to przetestować, będziesz uzyskiwać dostęp do systemów i plików, do których nie masz uprawnień. Mając to na uwadze, być może rozsądnie byłoby porozmawiać z usługodawcą internetowym i dowiedzieć się, w jaki sposób izolują użytkowników od siebie.
Czy prowadzisz własny udostępniony serwer hostingowy i nie używasz chroot do ochrony użytkowników? Wprawdzie chrootowanie środowiska może być trudne. Na szczęście istnieje wiele wtyczek, które to ułatwiają. W szczególności spójrz na mod_chroot.
Wstrzyknięcie polecenia
Wróćmy do Alice i Boba. Wiemy, że aplikacja internetowa Boba ma kilka… hmm… problemów z bezpieczeństwem. Jedną z nich jest podatność na wstrzykiwanie poleceń, która pozwala na uruchomienie dowolne polecenia systemowe Krótki przewodnik, jak zacząć korzystać z wiersza poleceń systemu LinuxW Linuksie możesz robić wiele niesamowitych rzeczy i naprawdę nie jest to trudne do nauczenia się. Czytaj więcej .
Witryna Boba umożliwia uruchomienie zapytania whois w innej witrynie, która jest następnie wyświetlana w przeglądarce. Istnieje standardowe pole wprowadzania HTML, które akceptuje nazwę domeny, a następnie uruchamia komendę systemową whois. Ta komenda jest wykonywana przez wywołanie komendy system () PHP.
Co by się stało, gdyby ktoś wprowadził następującą wartość?
example.com && cd ../alice/ && rm index.html
Rozbijmy to. Niektóre z nich mogą być Ci znane, jeśli czytasz nasz „Przewodnik wprowadzający do systemu Linux” Rozpoczęcie pracy z systemem Linux i UbuntuChcesz przejść na Linuksa... Ale gdzie zaczynasz? Czy twój komputer jest kompatybilny? Czy Twoje ulubione aplikacje będą działać? Oto wszystko, co musisz wiedzieć, aby rozpocząć pracę z Linuksem. Czytaj więcej e-book, który wcześniej opublikowaliśmy w 2010 roku lub przejrzał nasze Ściągawka w wierszu poleceń systemu Linux.
Po pierwsze, uruchomi zapytanie whois na example.com. Następnie zmieniłby bieżący katalog roboczy na katalog główny Alice. Następnie usunąłby plik o nazwie „index.html”, który jest stroną indeksu w jej witrynie internetowej. To nie jest dobrze. Nie proszę pana.
Zatem, jako administratorzy systemu, jak możemy temu zaradzić? Cóż, wracając do poprzedniego przykładu, zawsze możemy umieścić każdego użytkownika we własnym odizolowanym, odkażonym, chrootowanym środowisku.
Możemy również podejść do tego z poziomu języka. Możliwe jest (choć może to zepsuć) globalne usunięcie deklaracji funkcji z języków. Oznacza to, że można usunąć funkcje z języków, do których użytkownicy mają dostęp.
Patrząc w szczególności na PHP, możesz usunąć funkcjonalność za pomocą Runkit - oficjalnego zestawu narzędzi PHP do modyfikowania funkcjonalności języka. Istnieje bogactwo dokumentacji. Przeczytaj w to.
Możesz także zmodyfikować plik konfiguracyjny PHP (php.ini), aby wyłączyć funkcje często wykorzystywane przez hakerów. Aby to zrobić, otwórz terminal na serwerze i otwórz plik php.ini w edytorze tekstu. Lubię korzystać z VIM, ale NANO jest również do przyjęcia.
Znajdź linię rozpoczynającą się od disable_functions i dodaj definicje funkcji, które chcesz zablokować. W tym przypadku byłoby to exec, shell_exec i system, chociaż warto zauważyć, że istnieją inne wbudowane funkcje, które są wykorzystywane przez hakerów.
disable_functions = exec, shell_exec, system
Ataki oparte na języku i tłumaczach
Spójrzmy więc na PHP. Jest to język, który napędza zaskakującą liczbę stron internetowych. Ma też wiele osobliwości i dziwnych zachowań. Lubię to.
PHP jest zwykle używane w połączeniu z serwerem WWW Apache. W większości przypadków przy tej konfiguracji nie można załadować wielu wersji języka.
Dlaczego to jest problem? Wyobraźmy sobie, że aplikacja internetowa Boba została pierwotnie zbudowana w 2002 roku. To było dawno temu. Tak było, kiedy Michelle Branch wciąż znajdowała się na szczycie list przebojów, Michael Jordan wciąż grał w Washington Wizards, a PHP był zupełnie innym językiem.
Ale strona Boba nadal działa! Wykorzystuje całą masę wycofanych i przestarzałych funkcji PHP, ale działa! Korzystanie z nowoczesnej wersji PHP skutecznie zniszczyłoby witrynę Boba i dlaczego Bob powinien przepisać swoją stronę internetową, aby zaspokoić kaprysy swojego hosta?
To powinno dać ci wyobrażenie o dylemacie, z którym borykają się niektórzy gospodarze. Muszą zachować równowagę, utrzymując bezpieczną pod względem architektonicznym i bezpieczną usługę, jednocześnie utrzymując ją w harmonii z zapewnieniem zadowolenia płacącym klientom.
W rezultacie często zdarza się, że mniejsze, niezależne hosty używają starszych wersji interpretera PHP (lub dowolnego innego języka).
Często zdarza się, że mniejsze, niezależne hosty używają starszych wersji PHP, potencjalnie narażając użytkowników na zagrożenia bezpieczeństwa.
Dlaczego to jest złe? Po pierwsze, naraziłby użytkowników na szereg zagrożeń bezpieczeństwa. Podobnie jak większość głównych pakietów oprogramowania, PHP jest stale aktualizowany, aby zaradzić mnóstwu luk w zabezpieczeniach, które są ciągle wykrywane (i ujawniane).
Co więcej, oznacza to, że użytkownicy nie mogą korzystać z najnowszych (i najlepszych) funkcji językowych. Oznacza to również, że funkcje, które zostały przestarzałe z jakiegoś powodu, pozostają. W przypadku Język programowania PHP Naucz się budować za pomocą PHP: Crash CoursePHP jest językiem używanym przez Facebooka i Wikipedię do obsługi miliardów zapytań dziennie; de facto język używany do nauczania programowania stron internetowych. Jest pięknie prosty, ale genialnie potężny. Czytaj więcej , obejmuje to śmiesznie straszne (i ostatnio przestarzałe) funkcje mysql_, które są używane do interakcji z relacyjnym systemem baz danych MySQL i dl (), które pozwalają użytkownikom na importowanie własnego języka rozszerzenia.
Jako użytkownik powinieneś być w stanie zobaczyć, która wersja tłumacza działa w Twojej usłudze. Jeśli jest nieaktualny lub zawiera wiele luk w zabezpieczeniach, skontaktuj się z hostem.
Co z sysadminami? Masz tutaj kilka opcji. Pierwszym (i najbardziej obiecującym) jest użycie Dockera dla każdego z użytkowników. Docker umożliwia jednoczesne uruchamianie wielu izolowanych środowisk, podobnie jak maszyna wirtualna, aczkolwiek bez konieczności uruchamiania innego systemu operacyjnego. W rezultacie jest to szybkie. Naprawdę bardzo szybko.
W prostym angielskim? Możesz uruchomić najnowszy i największy najnowocześniejszy interpreter dla większości użytkowników, podczas gdy klienci którzy używają starych aplikacji, które używają starożytnych, przestarzałych tłumaczy, aby to zrobić bez narażania innych użytkownicy.
Ma to również tę zaletę, że jest niezależny od języka. PHP, Python, Ruby. Cokolwiek. To wszystko jest takie samo.
Nie miej koszmarów.
Ten post miał na celu zrobienie kilku rzeczy. Po pierwsze, miało to na celu zwrócenie uwagi na liczbę problemów bezpieczeństwa, z którymi muszą zmagać się firmy hostingowe, aby zapewnić bezpieczeństwo swoich klientów i ich danych.
Jego celem było również pokazanie, w jaki sposób witryny hostowane na tym samym serwerze mogą na siebie wpływać. Chcesz to zrobić? Zacznij przestrzegać dobrych, bezpiecznych standardów kodowania. W szczególności rozpocznij dezynfekcję danych wejściowych zarówno na interfejsie, jak i na zapleczu.
Dobry początek to nowa funkcja sprawdzania poprawności formularza HTML5. Mówiliśmy o tym wcześniej w naszym przewodniku po HTML5. Razem możemy sprawić, że strony internetowe będą bezpieczniejsze, będąc lepszymi, bardziej sumiennymi programistami.
Jak zawsze jestem gotowy usłyszeć twoje myśli. Dodaj mi komentarz poniżej.
Kredyt zdjęciowy: Wszyscy potrzebują hakera (Alexandre Dulaunoy), Naklejka na oknie taksówki (Cory Doctorow), Serwerownia (Torkild Retvedt), Linux Books And Magazines (library_mistress), PHP Elephant (Markus Tacker)
Matthew Hughes jest programistą i pisarzem z Liverpoolu w Anglii. Rzadko można go znaleźć bez filiżanki mocnej czarnej kawy w dłoni i absolutnie uwielbia swojego Macbooka Pro i aparat. Możesz przeczytać jego blog na http://www.matthewhughes.co.uk i śledź go na Twitterze na @matthewhughes.