10 kroků pro bezpečný web

Ať už si stavíte malý blog, eshop nebo dáváte agentuře vyrobit „mikrosajtu“, budete řešit zabezpečení svého webu před útoky z internetu. V následujících odstavcích se dozvíte, co si na webserveru pohlídat.

Fyzický nebo virtuální server

Pokud to s bezpečnostní myslíte vážně, nepoužívejte služby sdílených webhostingů. V této konfiguraci nemáte pod kontrolou aplikace a jejich nastavení. Sdílíte paměť procesu webserveru s ostatními a bezpečnostní díra jiného zákazníka je i vaše díra.

Pokud nemáte vlastní server, máte v podstatě dvě možnosti. Využijete pronájem fyzického serveru, který bude patřit jen vám, nebo si pronajmete virtuální server.

U virtuálního serveru sice sdílíte hardware, ale operační systém je virtualizovaný. Zjednodušeně řečeno je izolovaný od ostatních zákazníků. Vše má své mouchy, ale virtuální server nezrujnuje vaší peněženku.

Záloha a obnova

Pravidelná záloha je velmi efektivní způsob, jak dostat zpět svoje data, ať už klekl server, nepovedl se upgrade nebo vás napadl ransomware, který zašifroval disky.

Strategie zálohování jsou různé a dají se kombinovat. Zálohujte minimálně váš webový obsah, typicky s databází, a důležité konfigurační soubory. Jednu zálohu uložte na vzdálený síťový disk a druhou na lokální disk serveru.

Pozor, aby vám lokální záloha neužírala místo pro vaše produkční data. Ideálně zálohujte na nezávislý diskový oddíl a sledujte místo na disku, abyste mohli starší zálohy odmazat.

Zálohu čas od času zkontrolujte a ověřte, že jí lze použít k obnově. Nezapomeňte omezit přístup k zálohám, mohou obsahovat citlivé informace nebo odhalit další přístupy.

Silná hesla pro vaše účty

Váš server bude čelit neustálým útokům na vaše účty. Proto zabezpečte silnými hesly nebo klíči všechny účty, které lze využít pro vzdálené přihlášení, např. SSH, RDP a webové rozhraní pro administraci aplikace.

Hesla mezi účty nikdy nesdílejte, každý účet musí mít unikátní heslo. Hesla k účtům generujeme pomocí správce hesel, který zajistí jejich bezpečné uložení a přidává další příjemné funkce, například nastavení minimální síly hesla.

Nezapomínejte chránit pracovní stanice, které používáte ke vzdálené správě, včetně jejich záloh.

Bezpečnostní aktualizace

Pravidelné aktualizace operačního systému a dalšího softwaru tvoří hlavní pilíř vaší obrany. Aplikujte bezpečnostní aktualizace alespoň jednou měsíčně.

Udržení bezpečnosti u webových aplikací je už jiná káva. Tady platí pravidlo, čím jednoduší aplikace, tím jednoduší údržba. Díky závislostem, různým modulům a nekompatibilitě jejich verzí musíte nejdříve zkontrolovat, že můžete aktualizovat. Bez zálohy se do aktualizace nepouštějte a po aktualizaci otestujte základní funkce aplikace.

V tomto ohledu mají aplikace v cloudu výhodu, o jejich aktualizace se stará provozovatel.

Práce s riziky

Občas se dostanete do situace, kdy nemůžete aktualizovat. Budete muset prostudovat popisy bezpečnostních chyb, které aktualizace opravují. Zaměřte se na popis útočných podmínek a rozhodněte, zda je pro vás chybějící aktualizace akceptovatelné riziko.

V řadě útočných podmínek platí, že musí mít útočník vysoké oprávnění nebo musí být aplikace v nestandartní konfiguraci. Popis může obsahovat i doporučení na změnu konfigurace, která vyřadí nebezpečnou funkcionalitu.

Předpokládejme například, že v aplikaci existuje bezpečnostní díra v doplňkovém modulu, která pro zneužití vyžaduje přihlášení uživatele. Vy ale víte, že jediným administrátorem a uživatelem jste jen vy, protože neumožňujete registraci dalších uživatelů. V takovém případě nejsou splněny útočné podmínky pro zneužití chyby a můžete si dovolit takové riziko akceptovat.

Po omezenou dobu můžete přistoupit i na variantu včasné detekce útoku pro zmírněmní škody, dokud nebudete moci bezpečnostní aktualizaci nasadit.

Pokud je pro vás riziko stále nepřijatelné, budete se muset rozloučit s nebezpečnou funkcionalitou. Buď modul odinstalujte nebo změnte dodavatele softwaru.

Skenování TCP portů

Nyní se dostáváme k praktickému ověření bezpečnosti. Oskenujeme porty síťových služeb, abychom zjistili, jak server uvidí útočníci.

Upozornění: Skenování portů a jakékoliv další testování je dovoleno pouze na systémech, které přímo vlastníte nebo s písemným souhlasem jejich vlastníka, jinak by si vaši činnost mohl někdo špatně vyložit.

Pro demonstraci jsem v době psaní tohoto příspěvku nasadil na Azure čistý webserver s URL adresou  https://myubi.westeurope.cloudapp.azure.com (teď už je offline).

Nainstalujte si síťový skener nmap na vaši pracovní stanici, která je připojená do internetu. TCP sken spustíme následovně, poslední parametr je IP adresa nebo doménové jméno vašeho serveru, který chcete testovat.

Výsledky skenu potvrzují, že jsou pro web otevřené TCP porty 80 a 443. Zbývající TCP port 22 patří službě SSH. Názvy objevených služeb prozrazují verzi operačního systému a webserveru. Doporučíme linuxovému administrátorovi, aby „banery osekal“ a skryl alespoň verze služeb.

Ověříme UDP porty

Správně bychom měli teď sken portů zopakovat pro UDP porty (s volbou -sU), ale takový sken by běžel dost dlouho. Tento test si můžeme zjednodušit výpisem tabulky aktivních spojení na serveru pomocí příkazu netstat.

Z výpisu vidíme, že na UDP portech poslouchají pouze dvě služby. První služba poslouchá na UDP portu 53 na síťovém rozhraní “localhost” s IP adresou 127.0.0.1, která slouží pro lDNS překlady a není “zvenku vidět”. Druhá služba na UDP portu 68 patří DHCP protokolu, kterou nejspíš Azure potřebuje k rozdávání IP adres, jejichž adresy jsem předkonfiguroval na Azure portálu v nastavení sítě.

Firewall

Nejsme-li s výsledky skenování portů spokojení, můžeme nežádoucí služby odstranit nebo nasadit lokální/síťový firewall.

Standartní politika firewallu pro příchozí spojení by měla být – zahoď vše, co jde zvenku, kromě definovaných pravidel. V našem případě to jsou pravidla na povolená příchozí spojení na cílové TCP porty 22, 80 a 443.

Bezpečnostní sken webserveru

Bezpečnostních skener je nástroj, který testuje zabezpečení služby (webserver, databáze) nebo specifické webové aplkace. Zmíním pouze dva skenery, které nejčastěji využijete, Nikto a SSL tester od Qualysu, který je také zdarma.

Nemá zde prostor popisovat hlášení jednotlivých skenerů, jen krátce zmíním, že mezi výsledky najdete i řadu “nálezů”, které pouze upozorňují na možnost vylepšení konfigurace serveru.

Nikto

Bezpečnostním skenerem Nikto proklepneme nastavení webserveru a to na obou portech TCP 80 a TCP 443.

Nikto nás může upozornit na zajímavý obsah, který se válí na webserveru. V našem případě se jedná o objevený adresář /icons/ s README souborem.

Qualys SSL test

Nyní prověříme podporu šifrování, pokud jde uživatel na web přes HTTPS protokol. Využijeme online službu SSL test od společnosti Qualys, která je zdarma. Při definici skenu máte možnost zaškrtnout nastavení, že nechcete uložit výsledky skenu do historie.

Tento online projede několik testů, označí vám slabé šifry a další neshody, které byste měli na úrovni konfigurace webserveru odstranit.

GDPR

Poslední věc, kterou musíte udělat je posoudit, zda se na vás nevztahuje GDPR, tj. zda váš web nezpracovává osobní údaje. Zpracováním se zde myslí i pouhé uložení osobního údaje. Pokud ano, čekají vás další legislativní povinnosti.

Uvedu jen dva typické případy. Váš webík “sbírá” emaily (kontaktní formulář, newsletter apod.) nebo používáte analytiku návštěvnosti, která pracuje s IP adresami.

Závěr

Snažil jsem se identifikovat 10 základních kroků, které pomohou nastartovat bezpečný web. Zabezpečení webu/aplikace nikdy nekončí a měli byste jej pravidelně vyhodnocovat.

Jste-li administrátor, preferujte udržitelný software, který má větší uživatelskou základnu a pravidelnou podporu bezpečnostních aktualizací. Pokud produkt nemá stránku s popisem bezpečnostních chyb a posledními aktualizacemi, není to pro vás dobrý produkt.

Vedete-li softwarový projekt, budete muset hlídat bezpečný vývoj a nechat si aplikaci před vydáním pravidelně prověřit penetračním testem.

Pokud vás dál zajímá téma aplikační bezpečnosti a etický hacking, pošlete mi vaše komentáře, tradičně na facebook nebo napřímo.

Blog

Contacts

10 kroků pro bezpečný web

Ať už si stavíte malý blog, eshop nebo dáváte agentuře vyrobit „mikrosajtu“, budete řešit zabezpečení svého webu před útoky z internetu. V následujících odstavcích se dozvíte,…

Read more

OSCP – Cesta k certifikaci

V tomto příspěvku se bych se rád podělil o tipy, jak se připravit na OSCP certifikaci. Na úvod řeknu, že jsem začínal jako vývojář a…

Read more

WABANK – OWASP Top 10 testing

WABANK is deliberately vulnerable web application for security testing according OWASP Top 10 report. Application is free for non commercial usage only.      …

Read more

Kontakty

+420 739 639 132

Petr Juhaňák
V Poli 547
517 71 České Meziříčí
Czech Republic

IČO 01259041