CIV:Granty/Zvýšení bezpečnosti webhostingu/popis řešení

Z HelpDesk

Popis řešení projektu FR 475/2013

Vzhledem k požadavku provozovat na jediném fyzickém stroji vyšší počet webů, tak byla zvolena metoda forkování aplikace Apache. Podstatou je vytváření kopií aplikace Apache, kde každá jednotlivá instance bude hostovat samostatný web. Každý web má vlastní proces, vlastní uživatelský účet, pod kterým aplikace přistupuje k systémovým prostředkům. Tyto instance aplikace Apache, případně jiné alternativní aplikace webového serveru, běží pouze na localhostu na vybraném portu. Přístup z veřejné sítě internet je zajištěno pomocí hlavní instance aplikace Apache, která zajišťuje funkci reverzního proxy serveru. Zjednodušené schéma řešení je zobrazeno na Obr. 1. Červeným obdelníkem je označen fyzický stroj s operačním systémem Debian, jednotlivé boxy uvnitř červeného obdelníku pak značí samostatné procesy aplikace Apache (případně jiné aplikace webového serveru). Reverzní proxy zajišťuje aplikace Apache s nakonfigurovanými pouze základními moduly pro SSL, autentizaci WebAuth, Proxy apod. Celý seznam povolených modulů je uveden v Příloze A.

Pro omezení přístupu na distribuovaný souborový systém AFS je potřeba využít vlastní identity v autentizačním systému Kerberos. Tato identita má práva pro čtení příp. zápis pouze ve složce patřící jedinému webu a je součástí skupiny, která má v nadřazených složkách pouze právo k procházení bez práva čtení. Kerberos identita má tedy práva pouze nad jedinou složkou. Nicméně touto identitou se musí prokázat samotná instance Apache, není již možné autentizaci provádět na úrovni stroje. K autentizaci na úrovni aplikace je využito modulu mod_waklog, který umožňuje nastavení přístupu k AFS pomocí Kerberos identity.

Schéma webhostingu s reverzní proxy

V rámci ochrany webů jsme také zavedli v novém prostředí vynucování politiky zabezpečeného přenosu pomocí SSL. Toto je řešeno v konfiguraci aplikace reverzního proxy serveru pomocí následujícího konfiguračního příkazu:

Redirect permanent / https://osiris.zcu.cz

V návaznosti na nedávné zprávy o zranitelnosti v protokolu SSLv3, napadnutelné pomocí Poodle útoku, jsme na všech našich webových serverech také začali vynucovat primárního využítí TLSv1 odebráním SSLv3 v konfiguračním souboru /etc/apache2/mods-enabled/ssl.conf pomocí direktivy:

SSLProtocol all -SSLv2 -SSLv3

Pro potřeby autentizace a autorizace uživatelů je využíváno v prostředí ZČU autentizačního systému WebAuth. Pro aplikaci Apache je dostupný modul libapache2-mod-webauth, který zajišťuje autentizaci uživatelů. Nicméně k autentizaci k aplikacím za proxy serverem je nutné nakonfigurovat způsob, kterým bude možné autentizovat uživatele i v následné aplikaci. Toto se provede konfigurací modulu headers k předávání vhodného parametru obsahující uživatelské jméno. Na základě předaného parametru je možné autorizovat přístup na úrovni dané aplikace. Toho je dosaženo pomocí konfiguračního příkazu:

RequestHeader set "REMOTE-USER" "%{WEBAUTH_USER}e"

Následně v aplikaci za proxy serverem je možné určit uživatelské jméno z proměnné “REMOTE-USER”, která je dostupná jako globální proměnná webové serveru. Tímto způsobem je možné přihlásit i v aplikacích, které nepodporují WebAuth autentizaci. To znamená, že za proxy server lze zavěsit i jiné typy webových serverů, jako je např. Nginx, WEBrick, Node.js apod.

Dalším bodem ke zvýšením bezpečnosti jsme zvolili automatické aktualizace operačního systému. Automatické aktualizace v systému Debian lze řešit pomocí balíku unattended-upgrades. Balík je nutné nainstalovat z repozitáře a následně nakonfigurovat v konfiguračním souboru /etc/apt/apt.conf.d/50unattended-upgrades. V našem případě jsme zvolili automatický upgrade balíků ve větvi security. Toho jsme dosáhli odkomentováním následujícího řádku v konfiguraci:

Unattended-Upgrade::Origins-Pattern {
       "origin=Debian,archive=stable,label=Debian-Security";
};
Unattended-Upgrade::Mail "root";

Samotné spouštění automatického upgradu se nastavuje v /etc/apt/apt.conf.d/02periodic pomocí:

APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";,

kde “1” značí četnost spouštění upgradu ve dnech, v tomto případě je tedy nastaveno, aby kontrola a případná instalace bezpečnostních balíčků se prováděla každý den.

Pomocí balíku apticron dále sledujeme aktualizace balíků mimo větev security a v případě potřeby provádíme aktualizaci těchto balíků. Balík je možné nainstalovat z repozitáře a konfigurace se jednoduše provede nastavením proměnné EMAIL v konfiguračním souboru /etc/apticron/apticron.conf.

Pro sledování aktualních bezpečnostních incidentů v OS Debian je možné sledovat následujcí mailing listy:

security debian anounce list - https://lists.debian.org/debian-security-announce/ apache security anounce list - https://lists.debian.org/debian-apache/ debian security (optional) - https://lists.debian.org/debian-security/

První z uvedených je nejvhodnější pro účely sledování bezpečnostních problémů systému Debian, kam chodí pouze oznámení o nalezených bezpečnostních chybách s informacemi o jejich odstranění. Další dva jsou spíše diskuzní vlákna, kde se člověk může dočíst o různých dalších chybách v aplikacích.

Nedávný bezpečnostní incident, kdy na kompromitovaném webu s povoleným zápisem do všech podadresářů utočník dokázal nahrát vlastní kód a ten pak spustit skriptovacím jazykem PHP. To vedlo k dalšímu kroku zpřísnění politiky jednotlivých webů. V adresářích s právy zápisu je zakázáno spouštět skripty PHP. Toho je docíleno tím, že v adresářích s právy zápisu je nastaveno v konfiguračním souboru .htaccess direktiva:

php_flag engine off

Toto nastavení hlídáme pomocí skriptu připraveného pro tyto účely, viz Příloha.