Správa linuxového serveru: Pár slov o bezpečnosti
Tento díl seriálu vás uvede do problematiky bezpečnosti linuxového serveru a pohledů na ni. Jedná se čistě a pouze o obecný pohled na problematiku, nikoliv o přehled konkrétních opatření.
Každý správce serveru by určitě rád zajistil, aby jeho server zůstal co nejlépe zabezpečený, aby nad ním nezískal vládu nějaký útočník, ale také aby server korektně fungoval, byl dostupný a v případě nějaké havárie nebyl velký problém činnost serveru rychle obnovit. Já osobně řadím do oblasti bezpečnosti vše výše uvedené, nikoliv pouze bezpečnost ve smyslu ochrany či prevence proti průniku nějakým útočníkem. Je samozřejmě důležité mít server v bezpečí před nenechavci nebo dokonce před cíleným útokem, ale bezpečnostní strategie by zde neměla končit. Je důležité zabezpečit i samotný běh serveru a připravit se na případné havárie serveru nebo jeho komponenty či chyby softwaru nebo samotného správce.
Na bezpečnost lze nahlížet z mnoha hledisek. Já se omezím na dvě, která považuji za klíčová. Především, bezpečnost je vždy kompromisem mezi náklady a úrovní zabezpečení. Čím vyšší úroveň zabezpečení, tím více prostředků, času, práce a peněz je třeba vynaložit. Přitom nikdy není možné dosáhnout stoprocentní bezpečnosti. Té je nanejvýš možné se hodně přiblížit, avšak za cenu astronomických nákladů (a také vedlejších účinků – snížení produktivity firmy kvůli bezpečnostní administrativě, odmítnutí přístupu uživatelům ke službám serveru kvůli příliš agresivním bezpečnostním opatřením atd). Jako správci vlastních serverů si budete požadovanou úroveň zabezpečení volit sami, s tím, že u každého opatření budete zvažovat jeho přínos v porovnání k nákladům na jeho implementaci a údržbu.
Druhý náhled na bezpečnost je jako na proces se čtyřmi fázemi – analýza, implementace, monitorování, změna (či krize). Na počátku probíhá analýza, jejímž výstupem je bezpečnostní strategie, resp. sada konkrétních opatření, politik, úkolů, procesů, odpovědností atd.; uvedení této strategie do provozu představuje druhá fáze, tedy implementace. Následuje patrně ta nejdůležitější fáze vůbec, a sice fáze monitorování a kontroly. V této fázi se prověřuje samotná implementace, zdali byla úspěšná, zdali bylo všechno nastaveno správně, ale také to, zdali jednotlivá pravidla a opatření skutečně fungují a jsou účinná (např. agresivní politika práce s hesly může snížit bezpečnost, pokud si uživatelé budou hesla psát na papírky a lepit na monitor). Druhou věcí, která probíhá v této fázi, je sledování serveru, tzn. sledování logů, sledování vytížení zdrojů serveru, zálohování, kontrola záloh, atd.
Poslední fází je změna nebo také krize, kdy dojde k něčemu, co vás dostane zpět k první fázi – analýze – a celý proces se opakuje. Možná zjistíte, že nějaké opatření bylo příliš agresivní a ve finále odradilo uživatele či zákazníky, nebo je donutilo k něčemu, co bezpečnost ve finále snížilo, takže musíte dané opatření změnit. Nebo vám na server úspěšně pronikne útočník, a na vás je zjistit, jak se mu to povedlo, obnovit činnost serveru a zajistit, aby se útočník na váš server už neproboural.
Bezpečnost je tedy něčím, nad čím je nutno neustále bdít. To je asi to nejdůležitější, co byste si z tohoto článku měli odnést. Představa, že si postavíte a nakonfigurujete server, a poté na něj zapomenete a nebudete se mu již nadále věnovat, je z pohledu bezpečnosti časovaná bomba. A to i v případě, že se jedná o váš soukromý server. I kdyby vám nezáleželo na datech, která na něm máte uložená, stále je tu možnost úspěšného průniku útočníkem, který pak může váš server využít k rozesílání spamu nebo k útoku na jiné počítače v Internetu (nebo ještě hůř – váš server pak může začít sloužit jako skladiště a distribuční uzel pro různé vysoce nelegální materiály).
Dovolte mi projít jednotlivé fáze procesu zabezpečení a trošku je rozvést. V tomto dílu seriálu nebudu zatím příliš konkrétní, jednotlivé techniky a opatření proberu v některém z dalších dílů. V souvislosti s tím si dovolím upozornit na předchozí díly seriálu, kde se již probíralo něco málo z toho, co může tvořit část vaší bezpečnosti (jmenovitě: diskové šifrování, zabezpečení SSH a základy iptables).
Východiskem pro analýzu by měla být požadovaná úroveň zabezpečení, tzn. zvolený bod na křivce tvořící poměr mezi úrovní zabezpečení a vynaloženými náklady. Asi jinak budete postupovat, bude-li se jednat o váš soukromý server, kde budete mít třeba svůj osobní blog, a jinak v situaci, bude-li se jednat o kritický server pro fungování vaší firmy. S tím bude souviset i to, jaké prostředky máte k dispozici a co jste ochotni do zabezpečení investovat.
Z hlediska opatření proti škodám způsobeným útočníky je třeba uvažovat o dvojím typu útočníka – vnějšího a vnitřního. Vnější útočník je ten, který má přístup pouze k veřejným službám serveru (webové stránky apod.). Vnitřní útočník je ten, který má přístup k některému z uživatelských účtů (nemusí to být nutně zrovna daný uživatel, ale třeba někdo, kdo získal jeho přihlašovací údaje). Zabezpečení vůči vnitřnímu útočníkovi bývá obtížnější (zejména, pokud má daný uživatel přístup k shellu – takový útočník má podstatně více možností, jak škodit nebo jak proniknout hlouběji). Existuje samozřejmě řada zranitelností, které mají za následek „privilege escalation“, tedy povýšení oprávnění. Ty pak mohou z vnějšího útočníka učinit útočníka vnitřního. Může to být třeba díra ve webovém serveru, která umožní útočníkovi přístup k shellu pod uživatelem, pod kterým webový server běží. Uvážit je třeba také to, že škodu nepůsobí pouze lidé s úmyslem škodit (útočníci), ale i chybující uživatelé či samotný správce (aneb i mistr tesař se někdy utne). Stačí pouhý překlep při použití známého nástroje rm
.
Uvážit je samozřejmě třeba i ostatní oblasti bezpečnosti jako zajištění fungování serveru (redundance, vysoká dostupnost atd.), bezpečnost dat (tzn. jednak strategii pro zálohování a jednak strategii vůči fyzickým útokům na server), aktualizace softwaru, bezpečnostní aktualizace atd. Pokud se na správě serveru podílí více osob, je třeba zajistit jejich koordinaci, popřípadě pravidla bezpečnosti práce atd.
Výstupem této fáze nejsou tedy pouze opatření týkající se daného serveru, ale i příslušných osob, ať již uživatelů, tak správců. V případě firem a produkčních serverů bude analýza podstatně podrobnější a bude obsahovat mj. i scénáře a postupy pro řešení krizových situací.
Tuto fázi asi není třeba příliš rozebírat. Snad jen pokud se jedná o produkční server, který právě běží, vyplatí se maximální opatrnost při konfiguraci služeb (otestovat syntaxi konfiguračních souborů pomocí nějakého nástroje, je-li to možné) či firewallu (aby správce neodstřihl sebe a případné zákazníky). U produkčních serverů nebývá na škodu vyzkoušet si změny nejprve někde nanečisto (virtuální server, testovací server atd.).
Pokud byste si měli z tohoto dílu něco odnést, pak je to důležitost této fáze. Zde je nejprve třeba otestovat, zdali implementace proběhla správně a zdali všechna bezpečnostní opatření fungují tak, jak mají. To znamená, že byste měli použít příslušné nástroje a přesvědčit se, ať už pokusem o průnik zvenčí nebo zevnitř. Pro firmy je určitě vhodné doporučit bezpečnostní audit nějakým vnějším subjektem. Stejně tak je třeba otestovat systém zálohování, zdali je možné provést obnovu dat (není nic horšího než zjištění, že díky nějaké chybě došlo ke znehodnocení záloh třeba za poslední půlrok, nejlépe v situaci, kdy došlo ke krizi a vy zálohu akutně potřebujete). Funkčnost zálohování, ale i jednotlivých bezpečnostních opatření, je třeba prověřovat pravidelně. Prověřit to jednou rozhodně nestačí.
Součástí této fáze je i běžné sledování serveru, čtení logů a zpráv, zaznamenávání vytížení jednotlivých systémových zdrojů serveru (paměť, disk apod.), sledování výkonu serveru (zdali stíhá v přijatelném čase reagovat na požadavky klientů) atd.
Pokud dojde k pouhé změně, resp. nedojde k žádné krizi, pak není příliš o čem hovořit. Zkrátka se vrátíte zpět k analýze, provedete patřičné změny, implementujete je, zkontrolujete a dostanete se zpět do fáze monitorování. Pokud dojde k nějaké krizi, asi tím nejdůležitějším je nepanikařit. Panika má tendenci působit řadu dodatečných škod a problém spíše prohloubit než optimálně vyřešit či alespoň minimalizovat škody. Zachovejte tedy chladnou hlavu a jednejte s rozvahou. Nikde není řečeno, že po zjištění problému musíte problém začít řešit ještě tu danou minutu. Mnohdy se vyplatí chvilku počkat, uklidnit se, popřemýšlet o možných způsobech řešení, popřípadě se podívat do firemní či bezpečnostní dokumentace, jak postupovat v dané situaci.
V případě průniku se může vyplatit věnovat nějaký čas analýze útoku nebo i chování útočníka ještě před samotným odstavením serveru a obnovou ze zálohy – pokud nepřijdete na to, kudy se vám útočník na server dostal, obnova ze zálohy a opětovné rozběhnutí serveru bude mít nejspíše za následek opětovné napadení. Pokud je útočník z České republiky, může se vyplatit sesbírat všechny možné informace kvůli případné žalobě či podání trestního oznámení. V souvislosti s tím nemusí být od věci udělat si kopii napadeného systému a analyzovat ji po vyčištění a obnovení činnosti serveru.