Pravidla pro domovské stránky

Z Nagano.cz - OK0NAG

Nedávný hack serveru Nagano.cz potvrdil, že je potřeba věnovat větší péči zabezpečení uživatelských prezentací. Do teď mohl v podstatě kdokoli cokoli a byla jen otázka času, kdy toho nějaký útočník zneužije. Nejprve uvedu závazná pravidla pro autory stránek, pak se pokusím sepsat zásady zabezpečení tak, aby byly pochopitelné i pro ty, co neprogramují.

Pravidla

  1. V PHP skriptech striktně kontrolovat vstupy od uživatelů
  2. Není-li to pro běh skriptů bezpodmínečně nutné, nenastavovat právo zápisu pro ostatní uživatele
  3. Potřebujete-li zapisovat, je nejvhodnější, aby adresář s právy pro zápis ležel mimo oblast dostupnou WWW serveru, tj. nebyl podadresářem adresáře public_html.
  4. Druhá možnost je vyčlenit jeden adresář s právy zápisu a v něm souborem .htaccess zakázat provádění PHP skriptů. Do soubory .htaccess zapiště řádku: php_flag engine off.
  5. Používáte-li redakční systém, je nutné jej udržovat aktualizovaný na nejnovější stabilní verzi.
  6. Máte-li otázky či narazíte na problém, kontaktujte OK1ZIA.

Vysvětlení

Statické stránky

Že používáte statické stránky, poznáte tak, že veškeré soubory, které na Nagano nahráváte, mají příponu .HTML, .HTM, .TXT případně obrázky .JPG, .PNG, GIF. Tyto soubory nepředstavují pro server prakticky žádné riziko, nemusíte řešit nic dalšího.

Dynamické stránky v PHP pouze pro čtení

Využíváte-li programovací jazyk PHP, je na místě opatrnost. PHP skript se spouští s právy WWW serveru(to je program běžící na serveru, který poskytuje webový obsah uživatelům). Skript může využívat veškeré funkce opreračního systému, což může být nebezpečné. Samozřejmě předpokládáme, že naši uživatelé nechtějí hackovat Nagano. Ale člověk snadno udělá chybu.

Nejdůležitější zásada zní: "Nikdy nevěř datům od uživatele". Uživatel je potenciální útočník. Možná to zní tvrdě, ale je to tak a situace se bude pouze zhoršovat. Je NUTNÉ všechna data od uživatele (parametry skriptů, obsah formulářů) pečlivě kontrolovat, útočník se bude snažit vstupní údaje podvrhnout, aby tak docílil chování skriptu ve svůj prospěch. Představte si skript, který je volaný: index.php?stranka=anketa . A uvnitř skriptu je:

include $_GET["stranka"]; 

Co to znamená? Programátor chtel vložit do výstupu skriptu soubor anketa. Ale neošetřil vstupy a zavoláním index.php?stranka=/etc/passwd si může útočník přečíst seznam uživatelů serveru.

Dynamické stránky v PHP, které zapisují na disk

Je to jedna z nejnebezpečnějších věcí. Programátor například dovolí nahrát na disk serveru obrázek. Útočník místo obrázku podstrčí útočný PHP skript. Místo obrázku pak spustí tento skript. Tím má kontrolu nad celým Naganem. Zatím jen s právy uživatele, pod kterým běží WWW server. I tak už může zneužívat napadený počítač například pro rozesílání spamů.

Tato práva jsou relativně omezená, ale je to první krok k úspěšnému hacku. Druhý krok se nazývá local root exploit. Česky jde o program, který využívá nějaké chyby v operačním systému, aby získal práva správce systému. Díry se postupně objevují v každém i nejbezpečnějším operačním systémům, proto je nutné zabránit útočníkovi, aby to zkoušel spouštěním vlastního kódu.

Uspěje-li útočník, pak se stává správcem počítače a může si s ním doslova dělat, co chce.

Redakční systém

Je obvykle několik PHP skriptů, do kterých je možné přidávat obsah. Obvykle se jich týkají všechny předchozí body s tím, že uživatel je neprogramoval a netuší, zda je RS napsán bezpečně. Velké nebezpečí je v tom, že tyto systémy jsou profláklé a nalezení slabiny se věnuje mnohem více útočníků než vašim několika skriptům. Proto je tu jedna důležitá zásada - je potřeba udržovat tyto RS vždy aktualizované na poslední verzi.