ˇ ESKE ˇ ENI´ TECHNICKE ´ VYSOKE ´ UC ´ V PRAZE C ˇ INZ ˇ ENY ´ A FYZIKA ´ LNE ´ RSKA ´ FAKULTA JADERNA Obor: Inzˇeny´rska´ informatika Zameˇrˇenı´: Tvorba softwaru
GNU/Linux a bezpec ˇnost v akademicky ´ ch sı´tı´ch
ˇ ERS ˇ NI´ PRA ´ CE RES
Autor: BC. JOSEF KADLEC Vedoucı´ resˇersˇnı´ pra´ce: Mgr. JIRˇ I´ FISˇER, Ph.D.
Rok 2005
Prohla´s ˇenı´ Prohlasˇuji, zˇe jsem tuto resˇersˇnı´ pra´ci vypracoval samostatneˇ a uvedl jsem vesˇkerou pouzˇitou literaturu. Nema´m za´vazˇny´ du˚vod proti uzˇitı´ tohoto sˇkolnı´ho dı´la ve smyslu § 60 za´kona 121/2000 Sb., o pra´vu autorske´m a o pra´vech souvisejı´cı´ch s pra´vem autorsky´m. Je dovoleno kopı´rovat, sˇ´ırˇit a/nebo modifikovat tento dokument za podmı´nek licence GNU FDL, verze 1.2 nebo vysˇsˇ´ıch publikovany´ch nadacı´ Free Software Foundation. Toto dovolenı´ je platne´ pouze pro sta´ty, kde obsah dı´la dany´ jeho na´zvem nenı´ v rozporu se za´konem. Copyright © 2005 Josef Kadlec
V Praze dne 25. dubna 2005
Josef Kadlec
Pode ˇ kova´nı´ Tı´mto bych chteˇl podeˇkovat Mgr. Jirˇ´ımu Fisˇerovi, Ph.D. za jeho rady a veˇcne´ prˇipomı´nky k me´ pra´ci.
Anotace Resˇersˇnı´ pra´ce analyzuje hrozby a mozˇnosti operacˇnı´ho syste´mu GNU/Linux k jejich eliminaci s prˇihle´dnutı´m na sı´teˇ v akademicke´m prostrˇedı´. Pra´ce je rozdeˇlena´ do cˇtyrˇ za´kladnı´ch te´maticky´ch cˇa´stı´, kde se postupneˇ seznamujeme s problematikou bezpecˇnosti na u ´ rovni operacˇnı´ho syste´mu, prˇes bezpecˇnostnı´ proble´my spojene´ se sı´tı´ azˇ k fyzicke´ bezpecˇnosti. V poslednı´ cˇa´sti je strucˇneˇ popsa´n a graficky zna´zorneˇn prˇ´ıklad sı´teˇ, ktera´ by se mohla v akademicke´m prostrˇedı´ vyskytnout. Na problematiku je pohlı´zˇeno ze strany administra´tora, takzˇe je analy´za bezpecˇnostnı´ch rizik popisova´na s jistou mı´rou teoreticˇnosti a prˇesne´ metody zneuzˇitı´ jsou skryty. Pouzˇite´ programove´ vybavenı´ je veˇtsˇinou na ba´zi Open Source, cozˇ obna´sˇ´ı vy´hody i nevy´hody, ktere´ jsou zmı´neˇny v u ´ vodnı´ kapitole. Tato pra´ce je take´ jaka´si prˇ´ırucˇka administra´tora, pomocı´ ktere´ lze krok za krokem vyrˇesˇit bezpecˇnost nejen akademicke´ sı´teˇ. Autor za´roven ˇ usiluje o to, aby prˇi vytva´rˇenı´ informacˇnı´ch rˇesˇenı´ byl na problematiku bezpecˇnosti bra´n stejny´ ohled, ktery´ je bra´n naprˇ´ıklad na funkcˇnost. Pro spra´vne´ pochopenı´ problematiky, kterou se zaby´va´ tato pra´ce, je nutna´ dobra´ znalost administrace neˇktere´ho syste´mu z rodiny Unixu˚ – nejle´pe vsˇak GNU/Linuxu.
Annotation This research thesis analyzes threats of the operating system GNU/Linux and its abilities of their elimination in relation to the network in an academic environment. The work is divided into four basic logical parts, where we in sequence get acquainted with the issue of security at an operating system level, from problems of network security to physical security. In the final part an example of network is described and graphically demonstrated, which could appear in an academic environment. The issue is watched from an administrator´s side so that the analysis of security risks is described theoretically up to the point and exact exploiting methods are hidden. The software that is used is mostly Open Source-based, which has pros and cons, that are mentioned in the opening chapter. This work is an administrator guide which helps to find a solution of security not only of an academic network step by step. The author strives for taking the same regard for an issue of security which is taken for funcionality in the course of creating information solution. For right understanding of the issue solved in this work it is necessary to have good knowledge of administration of a system from the Unix family – preferably GNU/Linux.
Obsah ´ vod 1 U 1.1 Obor informacˇnı´ bezpecˇnosti . . . 1.2 Proti cˇemu se bra´nı´me . . . . . . 1.3 Proti komu se bra´nı´me . . . . . . 1.4 Bezpecˇnostnı´ vrstvy . . . . . . . . 1.4.1 Bezpecˇnost na u ´ rovni OS . 1.4.2 Bezpecˇnost na u ´ rovni sı´teˇ . 1.4.3 Fyzicka´ bezpecˇnost . . . . 1.5 Procˇ GNU/Linux . . . . . . . . . . 1.5.1 Open Source a bezpecˇnost 1.6 Prostrˇedı´ akademicky´ch sı´tı´ . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
1 1 2 3 4 4 5 5 5 6 7
2 Za´kladnı´ hardening GNU/Linuxu 2.1 Spra´vne´ nastavenı´ prˇ´ıstupovy´ch pra´v . . . . . . . . . . 2.1.1 /etc/passwd . . . . . . . . . . . . . . . . . . . . 2.1.2 Jak fungujı´ prˇ´ıstupova´ pra´va souboru˚ . . . . . 2.1.3 Atributy souboru˚ . . . . . . . . . . . . . . . . . . 2.2 Zapnutı´ zastı´neˇny´ch hesel . . . . . . . . . . . . . . . . 2.3 Proble´m setuid a setgid programu˚ . . . . . . . . . . . . ˇ patneˇ nastavena´ PATH . . . . . . . . . . . . . . . . . 2.4 S 2.5 Omezenı´ uzˇivatelu˚ pomocı´ kvo´t a limitu˚ . . . . . . . . 2.6 Omezenı´ pra´v superuzˇivatele . . . . . . . . . . . . . . . 2.6.1 /etc/securetty . . . . . . . . . . . . . . . . . . . 2.7 Vypnutı´ a odstraneˇnı´ nepotrˇebny´ch sluzˇeb a softwaru 2.7.1 Exploitova´nı´ smazane´ho programu . . . . . . . 2.8 Udrzˇova´nı´ aktua´lnı´ch verzı´ softwaru . . . . . . . . . . 2.9 Editace banneru˚ . . . . . . . . . . . . . . . . . . . . . . 2.10 Proble´m adresa´rˇe /lost+found . . . . . . . . . . . . . . 2.11 Volba bezpecˇny´ch hesel . . . . . . . . . . . . . . . . . . 2.11.1Kontrola hesel uzˇivatelu˚ . . . . . . . . . . . . . . 2.12 Prˇ´ıznaky prˇipojova´nı´ . . . . . . . . . . . . . . . . . . . . 2.12.1Prˇipojova´nı´ /boot s prˇ´ıznakem ro . . . . . . . . 2.13 Odstraneˇnı´ stary´ch u ´ cˇtu˚ . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
8 8 10 12 16 17 18 19 19 21 21 21 24 24 25 26 26 26 27 28 28
i
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
OBSAH
2.14 /etc/aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.15 /etc/mailcap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16 Bezpecˇne´ odstran ˇ ova´nı´ souboru˚ . . . . . . . . . . . . . . . . . . . . .
28 28 29
3 Pokroc ˇily ´ hardening GNU/Linuxu 3.1 PAM . . . . . . . . . . . . . . . 3.2 chroot . . . . . . . . . . . . . . 3.3 Openwall patch . . . . . . . . . 3.4 Bastille . . . . . . . . . . . . . 3.5 libsafe . . . . . . . . . . . . . . ˇ ifrovane´ souborove´ syste´my . 3.6 S 3.6.1 Linux CryptoAPI . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
30 30 32 33 34 35 36 37
4 Bezpec ˇnost na u ´ rovni sı´te ˇ 4.1 TCP wrappers . . . . . . 4.2 Firewall . . . . . . . . . 4.2.1 NAT . . . . . . . 4.2.2 iptables . . . . . 4.2.3 Adaptivnı´ firewall 4.2.4 DMZ . . . . . . . 4.3 Aplikacˇnı´ proxy . . . . . 4.3.1 SQUID . . . . . . 4.4 VPN . . . . . . . . . . . 4.4.1 IPSec . . . . . . . 4.4.2 OpenSSH, SSH . 4.4.3 OpenSSL . . . . 4.4.4 stunnel . . . . . 4.5 GnuPG . . . . . . . . . . 4.6 Sı´t’ove´ hrozby . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
41 44 45 47 48 57 59 60 62 63 65 67 71 74 75 79
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
5 Fyzicka´ bezpec ˇnost
85
6 Uka´zkovy ´ prˇ´ıklad akademicke´ sı´te ˇ
88
7 Za´ve ˇr
92
ii
Prˇedmluva Cı´lem pra´ce je analyzovat soucˇasne´ mozˇnosti zabezpecˇenı´ operacˇnı´ho syste´mu GNU/Linux s prˇihle´dnutı´m na prostrˇedı´ akademicky´ch sı´tı´. Na proble´m ma´ by´t nahlı´zˇeno z pohledu administra´tora – pra´ce se nema´ zaby´vat nı´zkou ´ rovn ˇ ovou bezpecˇnostı´. Popisovana´ problematika ma´ postihovat jak obecne´ proble´my, tak soucˇasnou situaci v oblasti informacˇnı´ bezpecˇnosti. Pra´ce ma´ popsat prostrˇedky zabezpecˇenı´ od teˇch nejjednodusˇsˇ´ıch azˇ po komplexnı´ softwarova´ rˇesˇenı´. Pokud to bude mozˇne´, meˇly by by´t k rˇesˇenı´ bezpecˇnostnı´ch proble´mu˚ pouzˇ´ıva´ny Open Source projekty. Struktura a zpu˚sob zpracova´nı´ pra´ce ma´ by´t uzpu˚soben k pouzˇitı´ coby uzˇivelske´ prˇ´ırucˇky administra´tora.
Kapitola 1
´ vod U V soucˇasne´ dobeˇ, kdy pocˇ´ıtacˇe zasahujı´ prakticky do kazˇde´ sfe´ry nasˇeho zˇivota, jsme se na nich stali za´vislı´. Asi si teˇzˇko prˇedstavı´me zˇivot bez jejich asistence – at’ uzˇ jde o sfe´ru veˇdeckou, komercˇnı´ nebo jen o na´sˇ doma´cı´ osobnı´ pocˇ´ıtacˇ. Pocˇ´ıtacˇ na´m zprostrˇedkova´va´ mnoho forem komunikace, prova´dı´ vy´pocˇty vsˇeho druhu nebo prosteˇ jen slouzˇ´ı k za´baveˇ. Na samotne´m zacˇa´tku vzniku pocˇ´ıtacˇu˚ a jejich na´sledne´ho spojova´nı´ do veˇtsˇ´ıch sı´tı´ (naprˇ´ıklad Arpanet 1 , pozdeˇji pak Internet2 , nebo prosteˇ jen mı´stnı´ datove´ sı´teˇ) nikdo netusˇil, jaky´m fenome´nem se informacˇnı´ technologie stanou a jak obrovske´ho uplatneˇnı´ dosa´hnou. Ovsˇem tyto, na prvnı´ pohled dokonale´, stroje stvorˇil cˇloveˇk, ktery´ deˇla´ chyby a proto ani tyto stroje nejsou dokonale´ a obsahujı´ chyby, ktere´ jsou v tomto nedokonale´m sveˇteˇ zneuzˇ´ıva´ny z mnoha du˚vodu˚. Jedna z prˇ´ıcˇin, ktera´ sta´la za vznikem oboru informacˇnı´ bezpecˇnosti, byl jisteˇ vznik sı´teˇ Internet, ktery´ najednou vza´jemneˇ spojoval ne pouze du˚veˇryhodne´ subjekty, jako tomu bylo na pocˇa´tku vzniku sı´tı´, kdy spolu meˇla mozˇnost komunikovat jen hrstka pocˇ´ıtacˇu˚, ktere´ byly navı´c dostupne´ pouze male´ skupineˇ uzˇivatelu˚.
1.1 Obor informac ˇnı´ bezpec ˇnosti Pokud bychom to chteˇli hodneˇ zjednodusˇit, tak obor informacˇnı´ nebo take´ pocˇ´ıtacˇove´ bezpecˇnosti, v poslednı´ dobeˇ diskutovany´ v mnoha pa´dech, se zaby´va´ ochranou dat nebo jiny´ch hodnot prˇed neopra´vneˇny´m prˇ´ıstupem. Co myslı´me teˇmi jiny´mi hodnotami? Mu˚zˇe to by´t naprˇ´ıklad vy´pocˇetnı´ vy´kon pocˇ´ıtacˇe, diskovy´ prostor nebo pa´smo internetove´ho prˇipojenı´. Tento obor je velmi mlady´ a samotna´ informacˇnı´ bezpecˇnost jesˇteˇ nevesˇla zcela do poveˇdomı´ lidı´. Touto pracı´ bych se chteˇl take´ zaslouzˇit o to, aby byla pocˇ´ıtacˇova´ bezpecˇnost bra´na skutecˇneˇ va´zˇneˇ. Aby byla prˇi vytva´rˇenı´ nejen softwarovy´ch rˇesˇenı´ bra´na v potaz stejneˇ jako naprˇ´ıklad funkcˇnost. 1 2
http://www.dei.isep.ipp.pt/docs/arpa.html http://www.isoc.org/internet/history/
1
´ vod 1. U
Jesˇteˇ bych meˇl zmı´nit jeden aspekt, ktery´ vy´znamneˇ ovlivnil a sta´le ovlivn ˇ uje pocˇ´ıtacˇovou bezpecˇnost a to je fakt, zˇe v dnesˇnı´ dobeˇ sta´le pouzˇ´ıva´me naprˇ´ıklad protokoly, ktere´ byly vytvorˇeny v dobeˇ, kdy se na bezpecˇnost nebral ohled a vsˇe bylo vytva´rˇeno do jiste´ mı´ry otevrˇeneˇ. Prˇ´ıkladem z dnesˇnı´ doby mu˚zˇe by´t naprˇ´ıklad protokol POP, ktery´ slouzˇ´ı k manipulaci s elektronickou posˇtou. Hesla jsou zde prˇena´sˇena v textove´ podobeˇ, nijak nechra´neˇna proti zachycenı´ jinou osobou. Kdo by to drˇ´ıve tusˇil, zˇe naprˇ´ıklad tento protokol, usnadn ˇ ujı´cı´ lidem zˇivot, bude takhle zneuzˇ´ıva´n.
1.2 Proti c ˇemu se bra´nı´me Syste´m je nejvy´sˇe tak bezpecˇny´, nakolik bezpecˇne´ je jeho nejslabsˇ´ı mı´sto. Toto je velmi du˚lezˇite´ pravidlo, ktere´ musı´me mı´t na pameˇti. Prˇedstavme si zlodeˇje, ktery´ se snazˇ´ı vla´mat do domu. Urcˇiteˇ si nevybere cestu prˇes zabezpecˇene´ dverˇe, kdyzˇ je pootevrˇene´ prˇ´ızemnı´ okno. Naprosto stejneˇ to funguje u operacˇnı´ch a jiny´ch syste´mu˚. Ovsˇem musı´me mı´t take´ na pameˇti druhe´ pravidlo a to princip nejsnazsˇ´ıho pru˚niku, ktery´ rˇ´ıka´, zˇe o narusˇiteli musı´me prˇedpokla´dat, zˇe vyuzˇije kazˇdy´ mozˇny´ zpu˚sob pru˚niku, prˇicˇemzˇ to nemusı´ by´t ten nejsnazsˇ´ı ani ten, proti ktere´mu byla prˇijata nejdokonalejsˇ´ı ochranna´ opatrˇenı´. ´ toky, proti ktery´m se budeme bra´nit rozdeˇlı´me do neˇkolika skupin. Prvnı´m U typem u ´ toku je, zˇe narusˇitel cˇte nasˇe data. To znamena´, zˇe se vetrˇelec dostal k vı´ce, cˇi me´neˇ du˚veˇrny´m datu˚m a mu˚zˇe s nimi nalozˇit jak se mu zlı´bı´. V prˇ´ıpadeˇ, zˇe se jedna´ naprˇ´ıklad o hesla, cˇ´ısla kreditnı´ch karet nebo slozˇenı´ nove´ho farmaceuticke´ho vy´robku, je situace jisteˇ zcela va´zˇna´. Samotna´ data nemusı´ by´t zı´ska´na pouze cˇtenı´m z pevny´ch disku˚, ale i z jiny´ch nosicˇu˚ informacı´ jako je naprˇ´ıklad ethernetovy´ kabel nebo pouze vzduch, ktery´m se sˇ´ırˇ´ı bezdra´tovy´ prˇenos. Z teˇchto me´diı´, ktery´mi se data prˇena´sˇejı´, mohou by´t informace zachyceny – tento zpu˚sob se nazy´va´ sniffing. Dalsˇ´ım, na prvnı´ pohled jisteˇ zvla´sˇtnı´m, ovsˇem ne zcela ojedineˇly´m (zvla´sˇteˇ v USA), zpu˚sobem zı´ska´nı´ informacı´ je tzv. trashdiving (nebo jen trashing), kdy jsou prohleda´va´ny odpadky veˇtsˇinou vy´znamneˇjsˇ´ıch institucı´ a hleda´ny naprˇ´ıklad za´znamy o uzˇivatelsky´ch kontech, manua´ly k u ´ strˇedna´m nebo jine´ zajı´mave´ informace. Samozrˇejmeˇ tyto dva u ´ toky nelze staveˇt do stejne´ roviny. Druhy´m typem u ´ toku je, zˇe narusˇitel modifikuje data. O tomto u ´ toku se mluvı´ ´ tocˇnı´k mu˚zˇe zmeˇnit konstrukcˇnı´ a vy´robnı´ jako o jednom z nejza´kerˇneˇjsˇ´ıch. U pla´ny letadel nebo le´ku˚ nebo zdravotnı´ stav pacienta, cozˇ mu˚zˇe ve´st v nejhorsˇ´ım prˇ´ıpadeˇ i ke ztra´teˇ na zˇivotech. Modifikovat lze take´ samozrˇejmeˇ prˇena´sˇena´ data. Proti tomuto u ´ toku se lze u ´ cˇinneˇ bra´nit kontrolou integrity dat. 2
´ vod 1. U
Dalsˇ´ım typem u ´ toku je maza´nı´ dat u ´ tocˇnı´kem, cozˇ bez zvla´dnute´ za´lohovacı´ politiky, mu˚zˇe ve´st k financˇnı´m ztra´ta´m. Mezi dalsˇ´ı typy u ´ toku˚ patrˇ´ı zneuzˇitı´ jiny´ch hodnot, nezˇ dat. Patrˇ´ı sem naprˇ´ıklad vyuzˇitı´ pocˇetnı´ho vy´konu k la´ma´nı´ prˇ´ıstupovy´ch hesel nebo vyuzˇitı´ cele´ho syste´mu a jeho sı´t’ove´ho prˇipojenı´ k napada´nı´ jiny´ch syste´mu˚. Specificky´m prˇ´ıkladem napadenı´ syste´mu je tzv. DoS (Denial of Services nebo cˇesky odeprˇenı´ sluzˇby). Jedna´ se o u ´ tok, kdy je urcˇita´ sluzˇba zahlcena velky´m mnozˇstvı´m pozˇadavku˚, ktere´ nenı´ schopna zvla´dnout. Cı´lem je zpomalenı´ sluzˇby nebo jejı´ u ´ plne´ odpojenı´. Jsou zna´my i prˇ´ıpady, kdy DoS mu˚zˇe slouzˇit ke zvy´sˇenı´ privilegiı´ u ´ tocˇnı´ka. Sofistikovaneˇjsˇ´ı formou u ´ toku˚ odeprˇenı´ sluzˇby je DDoS (Distributed Denial of Services), kde je do u ´ toku na cı´l zapojeno paralelneˇ vı´ce u ´ tocˇnı´ku˚, cozˇ cely´ proces zefektivn ˇ uje. Trochu zde opomı´jı´m fyzickou bezpecˇnost. Samozrˇejmeˇ u ´ tocˇnı´k mu˚zˇe zı´skat vasˇe data tak, zˇe va´m odcizı´ notebook nebo sejme za´rˇenı´ monitoru. Ovsˇem my se v te´to pra´ci zameˇrˇ´ıme prˇedevsˇ´ım na bezpecˇnost na u ´ rovni OS (operacˇnı´ syste´m) a sı´teˇ.
1.3 Proti komu se bra´nı´me Vyhnu se ne prˇ´ılisˇ duchaplne´mu rozdeˇlenı´ u ´ tocˇnı´ku˚ na sˇpio´ny, extre´misty nebo nespokojene´ zameˇstnance. Vetrˇelce si mu˚zˇeme rozdeˇlit na ty, co u ´ tocˇ´ı z ”vlastnı´ch rˇad” – naprˇ´ıklad u ´ tok na firewall ze sı´teˇ, kterou oddeˇluje od okolnı´ho sveˇta a na u ´ tocˇnı´ky, kterˇ´ı na´s napadajı´ z okolnı´ho sveˇta – naprˇ´ıklad z Internetu. Paradoxem vsˇak je, zˇe veˇtsˇina u ´ toku˚ pocha´zı´ pra´veˇ z ”vlastnı´ch rˇad”. Tito vetrˇelci jsou vsˇeobecneˇ oznacˇova´ni jako crackerˇi nebo hackerˇi. Jednı´m ze za´sadnı´ch proble´mu˚ je, zˇe lide´ si cˇasto pletou vy´znamy slov ”hacker” a ”cracker”. Zatı´mco hackery se oznacˇovali programa´torˇi (nazy´vanı´ take´ ”Opravdovy´mi programa´tory”) ze slavne´ e´ry laboratorˇ´ı MIT 3 , tzv. ”Zlate´ e´ry hackingu”, crackery byli a jsou oznacˇova´ny osoby, ktere´ u ´ myslneˇ sˇkodı´ pro vlastnı´ prospeˇch nebo jen tak pro za´bavu. Bohuzˇel vy´znam slova ”hacker” postupem doby zmutoval a dnes si pod nı´m veˇtsˇina lidı´ prˇedstavı´ pra´veˇ toho, kdo napada´ syste´my pro vlastnı´ prospeˇch. Vı´ce se o skutecˇne´m hackerstvı´ docˇtete v dokumentu The Jargon File 4 , ktery´ je sta´le aktualizovany´ Ericem S. Raymondem 5 . 3
Massachusetts Institute of Technology http://www.catb.org/jargon/ 5 Autor stati Cathedral and market, jejı´zˇ cˇesky´ prˇeklad lze nale´zt na te´to URL – http://www.zvon.org/translations/cathedral-bazaar/Output/index cs.html 4
3
´ vod 1. U
Za zmı´nku stojı´ jesˇteˇ termı´n ”script kiddies”, jinak take´ ”wannabies”, ktery´m jsou oznacˇova´ny osoby, ktere´ se snazˇ´ı bez jake´koliv znalostı´ napadat syste´my cˇasto pouze pomocı´ programu˚, ktere´ vytvorˇili lide´ se znalostı´ dane´ problematiky. Poslednı´ termı´n, se ktery´m se mu˚zˇete setkat prˇi studova´nı´ materia´lu˚ o informacˇnı´ bezpecˇnosti, je termı´n ”phreacker”, cozˇ je cˇloveˇk, ktery´ vyuzˇ´ıva´ telefonnı´ch linek k dosahova´nı´ ru˚zny´ch cı´lu˚. Mu˚zˇeme se setkat i s neˇktery´mi dalsˇ´ımi oznacˇenı´mi.
1.4 Bezpec ˇnostnı´ vrstvy Pro zjednodusˇenı´ cele´ho popisu zava´dı´m trˇi bezpecˇnostnı´ vrstvy.
1.4.1 Bezpec ˇnost na u ´ rovni OS Prvnı´ vrstvou je bezpecˇnost na u ´ rovni OS. Tu da´le mu˚zˇeme rozdeˇlit na dalsˇ´ı trˇi za´kladnı´ vrstvy. S popisem zacˇneme od te´ nejnizˇsˇ´ı u ´ rovneˇ. Nejnizˇsˇ´ı vrstvou, ktera´ komunikuje azˇ s hardwarem, je bezpecˇnost na u ´ rovni ja´dra. Sem patrˇ´ı samotne´ ja´dro operacˇnı´ho syste´mu, ktere´ zajisˇt’uje prˇedevsˇ´ım spra´vu pameˇti, pla´nova´nı´ procesu˚, atd. a da´le ovladacˇe, ktere´ zajisˇt’ujı´ komunikaci s hardwarem. Tato vrstva je teˇsneˇ spjata s celou stabilitou syste´mu a dojde-li naprˇ´ıklad k sˇpatne´mu prˇideˇlenı´ nebo ochraneˇ pameˇt’ove´ho prostoru pro uzˇivatelsky´ proces, mu˚zˇe dojı´t k zhroucenı´ cele´ho syste´mu. Druhou vrstvou je bezpecˇnost na aplikacˇnı´ u ´ rovni. Aplikace by se meˇla chovat prˇesneˇ tak, k cˇemu byla pu˚vodneˇ vytvorˇena bez vedlejsˇ´ıch nechteˇny´ch funkcı´. Da´le je velmi du˚lezˇita´ spra´vna´ implementace programove´ho ko´du, aby nedocha´zelo k za´pisu˚m mimo prˇideˇlenou pameˇt’a z toho plynoucı´ch na´sledku˚ (at’uzˇ se jedna´ o pa´d programu nebo spusˇteˇnı´ jine´ aplikace), cˇehozˇ mu˚zˇe za´sˇkodnı´k prˇ´ımo vyuzˇ´ıt. ˇ astou chybou je take´ neosˇetrˇenı´ vstupu od uzˇivatele. Bezpecˇne´ programova´nı´ C je kapitola sama o sobeˇ a za´jemce o tuto problematiku odkazuji na dokument Secure Programming for Linux and Unix HOWTO 6 , ktery´ se zaby´va´ bezpecˇny´m vytva´rˇenı´m aplikacı´ v OS GNU/Linux a v syste´mech z rodiny Unixu˚. Tı´mto te´matem se v te´to pra´ci prˇ´ımo nezaby´va´m, protozˇe se k problematice bezpecˇnosti stavı´m spı´sˇe z pohledu administra´tora nezˇ programa´tora. Poslednı´ nejvysˇsˇ´ı vrstvou je bezpecˇnost na uzˇivatelske´ u ´ rovni. Zde se jedna´ prˇedevsˇ´ım o chova´nı´ administra´tora syste´mu a samotny´ch uzˇivatelu˚ syste´mu. Administra´tor by meˇl zajistit uzˇivatelu˚m spra´vne´ chova´nı´ syste´mu a uzˇivatel by se meˇl chovat podle stanoveny´ch pravidel. Du˚lezˇitou roli zde hraje lidsky´ faktor.
6
http://www.dwheeler.com/secure-programs/
4
´ vod 1. U
1.4.2 Bezpec ˇnost na u ´ rovni sı´te ˇ Do te´to skupiny patrˇ´ı prˇedevsˇ´ım ohrozˇenı´, ktere´ je du˚sledkem sˇpatne´ topologie sı´teˇ, sˇpatneˇ nakonfigurovany´m firewallem 7 nebo jiny´mi nedostatky. Patrˇ´ı jsem hrozby jako IP spoofing, ARP cache poisoning, odposlech prˇenosu, u ´ nos relace, 8 ale rˇadı´m sem i problematiku viru˚ .
1.4.3 Fyzicka´ bezpec ˇnost Do te´to sekce patrˇ´ı ohrozˇenı´, prˇi ktere´m u ´ tocˇnı´k prˇekona´va´ nedostatky, ke ktery´m je nutny´ fyzicky´ prˇ´ıstup. Zahrnuji sem naprˇ´ıklad zabezpecˇenı´ boot managera 9 nebo du˚veˇrneˇ zna´my´ proble´m ”horky´ch” kla´ves Ctrl+Alt+Del, ktery´mi mu˚zˇe jaky´koliv uzˇivatel kdykoliv vyvolat nezˇa´doucı´ restart syste´mu. Samozrˇejmeˇ sem patrˇ´ı i ne prˇ´ılisˇ sofistikovane´ u ´ toky, kdy va´m u ´ tocˇnı´k odcizı´ notebook (mimochodem opravdu cˇasta´ metoda zı´ska´va´nı´ informacı´, v roce 2001 bylo v USA zcizeno asi 591 000 notebooku˚10 ) nebo pouzˇije pozˇa´rnı´ sekeru k prˇerusˇenı´ provozu vasˇeho serveru – teˇmito metodami se samozrˇejmeˇ zaby´vat nebudu.
1.5 Proc ˇ GNU/Linux Syste´my na ba´zi GNU/Linuxu vyuzˇ´ıvajı´cı´ ja´dra Linuxu se zvla´sˇteˇ v poslednı´ dobeˇ sta´vajı´ velmi popula´rnı´ a v mnoha sfe´ra´ch (komercˇnı´, sta´tnı´, akademicka´, apod.) na neˇj prˇecha´zejı´. Jedna´ se o operacˇnı´ syste´m s volneˇ sˇirˇitelny´m otevrˇeny´m zdrojovy´m ko´dem, cozˇ ho za´sadneˇ odlisˇuje od proprieta´rnı´ch syste´mu˚. Vyznacˇuje se prˇedevsˇ´ım svojı´ stabilitou a podporou sˇiroke´ palety hardwaru. I kdyzˇ se pu˚vodneˇ zacˇal pouzˇ´ıvat prˇedevsˇ´ım na serverech, dnes ho cˇasto potka´te i na pracovnı´ch stanicı´ch – pro tuto platformu je jizˇ k dispozici nescˇetne´ mnozˇstvı´ aplikacı´ jako naprˇ´ıklad kancela´rˇske´ balı´ky (OpenOffice.org, KOffice), na´stroje pro prˇehra´va´nı´ multime´diı´ (Mplayer, Xine, XMMS), pra´ce s grafikou (Gimp, Blender) atd. Jesˇteˇ zmı´nı´m jme´no pu˚vodnı´ho autora kernelu Linuxu a tı´m je Linus Torvalds. V dnesˇnı´ dobeˇ se spra´veˇ a dalsˇ´ımu rozsˇirˇova´nı´ zdrojove´ho ko´du kernelu Linuxu podı´lı´ neˇkolik vy´voja´rˇu˚ z cele´ho sveˇta. Zakladatelem GNU je Richard Matthew Stallman11 . 7
Vı´ce o firewallech v kapitole ”4 Bezpecˇnost na u ´ rovni sı´teˇ”. Vı´ce o sı´t’ovy´ch hrozba´ch v kapitole ”4 Bezpecˇnost na u ´ rovni sı´teˇ”. 9 Zavadeˇcˇ syste´mu 10 http://www.pcguardiananti-theft.com/Additional Resources/ Computer Security Threat 11 02.pdf 11 http://www.gnu.cz/rms.html 8
5
´ vod 1. U
1.5.1 Open Source a bezpec ˇnost Open Sourcem12 oznacˇujeme neˇco, co je volneˇ sˇirˇitelne´ a k cˇemuzˇ ma´me k dispozici zdrojovy´ ko´d13 . Kdokoliv mu˚zˇe v tomto ko´du prova´deˇt zmeˇny. Do rodiny Open Source nepatrˇ´ı pouze Linux, ale i dalsˇ´ı projekty jako naprˇ´ıklad webovy´ server Apache14 nebo program pro spra´vu elektronicke´ posˇty Sendmail 15 a mnoho dalsˇ´ıch. Ale podı´vejme se na Open Source z pohledu bezpecˇnosti. Je samozrˇejme´, zˇe pokud ma´me prˇ´ıstup ke zdrojove´mu ko´du, mu˚zˇeme prove´st mnohem hlubsˇ´ı analy´zu aplikace. Zasta´nci Open Source tvrdı´, zˇe otevrˇenost ko´du deˇla´ aplikace bezpecˇneˇjsˇ´ı. Mnoho vy´voja´rˇu˚ z cele´ho sveˇta se mu˚zˇe podı´let na odhalova´nı´ a opravova´nı´ chyb. A skutecˇneˇ to tak funguje. Je faktem, zˇe doba od nalezenı´ chyby a vyda´nı´m opravy je mnohem kratsˇ´ı nezˇ u uzavrˇene´ho softwaru, kde ma´ ke zdrojove´mu ko´du prˇ´ıstup jen omezene´ mnozˇstvı´ lidı´. Hlavnı´m argumentem odpu˚rcu˚ otevrˇene´ho softwaru je fakt, zˇe tvu˚rci a spra´vci tohoto softwaru se mu veˇnujı´ pouze ve sve´m volne´m cˇase a pokud se jim nebude chtı´t, tak otevrˇeny´ software nebude vznikat, vyvı´jet se, nebudou vznikat bezpecˇnostnı´ za´platy apod. V dnesˇnı´ dobeˇ uzˇ to nelze takto u ´ plneˇ pausˇalizovat. Nasˇteˇstı´ tomu tak nenı´ a vu˚le ze strany vy´voja´rˇu˚ tu je a rozhodneˇ to nevypada´, zˇe Open Source v nejblizˇsˇ´ı dobeˇ zanikne. Tohle bych nepovazˇoval azˇ zas tak za velkou hrozbu, rozhodneˇ ne z hlediska bezpecˇnosti. Podle meˇ mnohem hroziveˇjsˇ´ım faktem je to, zˇe kazˇdy´ mu˚zˇe prˇispeˇt svojı´ cˇa´stı´ ko´du, kterou maintainerˇi16 zaintegrujı´ do sve´ho projektu (samozrˇejmeˇ nemusı´). Ovsˇem co kdyzˇ cˇloveˇk, ktery´ prˇispı´va´ svojı´ cˇa´stı´ ko´du (mu˚zˇe jı´t naprˇ´ıklad o novou featuru17 ) nema´ tak u ´ plneˇ dobre´ u ´ mysly. Co kdyzˇ se v ko´du nacha´zı´ na prvnı´ pohled neviditelna´ chyba – mu˚zˇe se jednat o chyby prˇetecˇenı´ za´sobnı´ku nebo mnohem sna´ze objevitelne´ logicke´ a race condition chyby. Co kdyzˇ se u ´ tocˇnı´kovi podarˇ´ı takovou cˇa´st ko´du propasˇovat naprˇ´ıklad do projektu Apache, cozˇ je nejrozsˇ´ırˇeneˇjsˇ´ı webovy´ server tvorˇ´ıcı´ asi dveˇ trˇetiny vsˇech webovy´ch serveru˚ a nebo do samotne´ho kernelu Linuxu. Za´sˇkodnı´k si tak vytvorˇ´ı velmi sofistikovany´ backdoor18 , ktery´m mu˚zˇe dosa´hnout azˇ pra´v roota 19 . Samozrˇejmeˇ maintainerˇi svy´ch projektu˚ ko´d kontrolujı´, ale zde uzˇ za´lezˇ´ı jen na jejich pecˇlivosti a znalostech takove´ chyby rozpoznat. 12
http://www.opensource.org/ Nezameˇn ˇ ovat se svobodny´m softwarem (tzv. free software). 14 http://www.apache.org/ 15 http://www.sendmail.org/ 16 Vedoucı´ projektu 17 Rys 18 Zadnı´ vra´tka 19 Superuzˇivatel v syste´mech na ba´zi Unixu 13
6
´ vod 1. U
1.6 Prostrˇedı´ akademicky ´ ch sı´tı´ Jedna´ se o velmi ru˚znorode´ prostrˇedı´, kde se samozrˇejmeˇ nemusı´ nacha´zet pouze operacˇnı´ syste´my GNU/Linux. Sı´t’ mu˚zˇe tvorˇit vı´ce, cˇi me´neˇ pocˇ´ıtacˇu˚ (omezenı´ mu˚zˇe tvorˇit pocˇet prˇideˇleny´ch IP adres nebo adresnı´ rozsah priva´tnı´ch IP adres), ktere´ mohou by´t pospojovane´ ru˚zny´mi fyzicky´mi zarˇ´ızenı´mi do LAN 20 , WAN21 , nebo i jiny´ch struktur. Ma´lokdy v tomto prostrˇedı´ narazı´me na vyta´cˇene´ spojenı´. Uzˇivatele teˇchto sı´tı´ musı´me povazˇovat za nedu˚veˇryhodne´ a je nutne´ zave´st spra´vnou bezpecˇnostnı´ politiku a eliminovat jake´koliv hrozby jak ze strany uzˇivatelu˚, tak z vneˇjsˇ´ıho prostrˇedı´ – Internetu. Na rozdı´l od beˇzˇny´ch sı´tı´, kde bud’ nejsou zˇa´dnı´ nebo male´ mnozˇstvı´ nemeˇnı´cı´ch se uzˇivatelu˚, sta´ly´ prˇ´ıliv novy´ch studentu˚ v prostrˇedı´ akademicky´ch sı´tı´ zvysˇuje riziko ohrozˇenı´ bezpecˇnosti pocˇ´ıtacˇu˚ v teˇchto sı´tı´ch. Nutno take´ upozornit, zˇe v tomto prostrˇedı´ se, vedle fluktuace studentu˚, vyskytuje fluktuace zameˇstnancu˚, ktera´ je oproti jiny´m sı´tı´m relativneˇ vysˇsˇ´ı. Na toto by meˇl by´t bra´n ohled prˇi vytva´rˇenı´ pevne´ bezpecˇnostnı´ politiky – naprˇ´ıklad pokud odejde zameˇstnanec, ktery´ znal superuzˇivatelske´ heslo stroje v akademicke´ sı´ti, toto heslo by meˇlo by´t samozrˇejmeˇ s prˇ´ıchodem nove´ho zameˇstnance zmeˇneˇno. Akademicke´ sı´teˇ patrˇ´ı obecneˇ mezi sı´teˇ s velky´m pocˇtem pocˇ´ıtacˇu˚. Veˇtsˇ´ı mnozˇstvı´ pocˇ´ıtacˇu˚ na sı´tı´ je nutne´ rozdeˇlit na mensˇ´ı segmenty za u ´ cˇelem zvy´sˇenı´ bezpecˇnosti a zjednodusˇenı´ spra´vy. Mezi segmenty by meˇla by´t nakonfigurova´na pecˇliva´ kontrola prˇ´ıstupu, ale v kazˇde´m segmentu mu˚zˇe by´t jina´ politika zabezpecˇenı´. Segmentem mu˚zˇeme oznacˇovat naprˇ´ıklad pocˇ´ıtacˇovou laboratorˇ, veˇdecke´ pracovisˇteˇ nebo webovy´ server. Samozrˇejmeˇ jina´ konfigurace ty´kajı´cı´ se bezpecˇnosti bude aplikova´na na pracovnı´ stanice a jina´ na servery nebo routery 22 . Tyto sı´teˇ take´ disponujı´ vysokorychlostnı´m prˇipojenı´m, ktere´ tvorˇ´ı potenciona´lnı´ riziko pro ostatnı´ pocˇ´ıtacˇe vneˇ akademicke´ sı´teˇ (pocˇ´ıtacˇe v Internetu). Samozrˇejmeˇ kazˇdy´ uzˇivatel za beˇzˇny´ch podmı´nek by meˇl mı´t k dispozici pouze cˇa´st pa´sma internetove´ho prˇipojenı´, cozˇ by meˇlo riziko snı´zˇit. Riziko spocˇ´ıva´ v tom, zˇe pokud by si neˇkdo zvy´sˇil privilegia a mohl uzˇ´ıvat veˇtsˇ´ı nebo celou cˇa´st tohoto pa´sma, mohl by s velkou u ´ speˇsˇnostı´ realizovat u ´ toky DoS na sı´teˇ se slabsˇ´ım prˇipojenı´m, ktere´ by na´por paketu˚ doslova odstrˇihl od Internetu.
20
Local Area Network Wide Area Network 22 Smeˇrovacˇe
21
7
Kapitola 2
Za´kladnı´ hardening GNU/Linuxu Bezpecˇnost samotne´ho operacˇnı´ho syste´mu ma´ v akademicky´ch sı´tı´ch, kde se nacha´zı´ mnoho uzˇivatelu˚, velky´ vy´znam. At’ uzˇ jsou uzˇivatele´ k narusˇova´nı´ bezpecˇnosti jakkoliv motivova´ni, meˇli bychom jaky´mkoliv zvysˇova´nı´m privilegiı´ ze strany uzˇivatelu˚ na vsˇech pocˇ´ıtacˇ´ıch striktneˇ zabra´nit. Syste´m GNU/Linux nabı´zı´ jake´si za´kladnı´ (nebo nativnı´) mechanismy loka´lnı´ho zabezpecˇenı´ a da´le jsou k dispozici na´stroje, ktere´ poskytujı´ nadstandardnı´ mozˇnosti hardeningu operacˇnı´ho syste´mu. V te´to kapitole si probereme pra´veˇ zmı´neˇne´ nativnı´ mechanismy a take´ hrube´ chyby, ktery´ch se mu˚zˇeme dopustit prˇi administraci linuxovy´ch syste´mu˚ a jak se teˇmto chyba´m vyvarovat.
2.1 Spra´vne´ nastavenı´ prˇ´ıstupovy ´ ch pra´v Dalo by se rˇ´ıci, zˇe problematika souborovy´ch pra´v a uzˇivatelu˚ je za´kladnı´m kamenem bezpecˇnosti v OS GNU/Linux. Prˇi zaby´va´nı´ se problematikou bezpecˇnosti se bez znalosti te´to problematiky neobejdeme. GNU/Linux je vı´ceuzˇivatelsky´ operacˇnı´ syste´m. Tzn. zˇe se do syste´mu mu˚zˇe prˇihla´sit vı´ce uzˇivatelu˚ – a to i ve stejny´ moment. V ra´mci zabezpecˇenı´ uzˇivatelu˚ a nakonec i cele´ho syste´mu je proto nutne´ souborova´ pra´va zave´st. To jak fungujı´ prˇ´ıstupova´ pra´va v Linuxu vysveˇtluji v dalsˇ´ı cˇa´sti te´to podkapitoly. Ovsˇem je take´ potrˇeba tyto znalosti pouzˇ´ıt k vytvorˇenı´ spra´vne´ politiky prˇ´ıstupovy´ch pra´v. Situaci na´m usnadn ˇ ujı´ vy´voja´rˇi distribucı´, kterˇ´ı v distribuci urcˇitou bezpecˇnostı´ politiku zavedou, takzˇe na´m stacˇ´ı veˇtsˇinou pouze modifikovat soucˇasna´ prˇ´ıstupova´ pra´va. U veˇtsˇ´ıch distribucı´ jako Mandrake, Slackware, Fedora, Debian, atd. by se na´m nemeˇlo sta´t, zˇe po nainstalova´nı´ budou prˇ´ıstupova´ pra´va neˇjak katastrofa´lneˇ nastavena. Ovsˇem je potrˇeba se vyvarovat nebezpecˇny´m za´sahu˚m do tohoto nastavenı´ jako naprˇ´ıklad byt’jen nechteˇne´ nas-
8
2. Za´kladnı´ hardening GNU/Linuxu
tavenı´ pra´va za´pisu pro vlastnı´ka, skupinu i ostatnı´ na soubor /etc/passwd, cˇ´ımzˇ bychom vlastneˇ u ´ plneˇ odstranily syste´m zastı´neˇny´ch hesel 1 . Toto byl vsˇak prˇ´ıpad, ktery´ spı´sˇe vypada´ na sabota´zˇ ze strany superuzˇivatele, nezˇ nechteˇny´ krok, ale va´zˇne´ proble´my cˇasteˇji plynou z mnohem prostsˇ´ıch situacı´ jako naprˇ´ıklad sˇpatne´ nastavenı´ pra´v na domovsky´ch adresa´rˇ´ıch, ktere´ se mu˚zˇe lehce vyskytnout, pokud prˇida´va´me dalsˇ´ı uzˇivatele. Da´le se naprˇ´ıklad doporucˇuje nastavovat pra´va pro adresa´rˇ /boot jen pro cˇtenı´. V tomto adresa´rˇi by se meˇl nacha´zet zkompilovany´ kernel a pa´r dalsˇ´ıch souboru˚ jako naprˇ´ıklad System.map. S teˇmito soubory je veˇtsˇinou manipulova´no pouze v prˇ´ıpadeˇ, kdy se meˇnı´ samotny´ kernel. Posˇkozenı´, za´meˇna nebo modifikace teˇchto souboru˚ mu˚zˇe znamenat pohromu pro syste´m nebo pro bezpecˇnost syste´mu. Dalsˇ´ım proble´mem mu˚zˇe by´t nastavenı´ prˇ´ıstupovy´ch pra´v souboru /dev/tty, ktery´ by meˇl mı´t nastaven mo´d 666, aby se zamezilo cˇtenı´ cizı´ch termina´lu˚. Nemeˇli bychom take´ zapomenout na vhodne´ nastavenı´ vy´chozı´ch pra´v prˇ´ıkazem umask. Akademicka´ sı´t’ je vı´ceuzˇivatelske´ prostrˇedı´, kde mu˚zˇe dosahovat pocˇet uzˇivatelsky´ch kont relativneˇ vysoke´ho cˇ´ısla. Tato konta (tzn. domovske´ adresa´rˇe a za´znamy o uzˇivatelı´ch) jsou ulozˇena na serveru a pracovnı´ stanice je vyuzˇ´ıvajı´ pomocı´ sluzˇby NIS (Network Information Service), ktera´ doka´zˇe sdı´let soubory po sı´ti. At’ si sednete k jake´mukoliv pocˇ´ıtacˇi, mu˚zˇete se z neˇj prˇihla´sit a pracovat se svy´mi soubory. Ovsˇem implicitneˇ je teˇmto uzˇivatelu˚m dovoleno se na tento server vzda´leneˇ prˇihla´sit a pokousˇet tak zabezpecˇenı´ tohoto stroje. Proto je nutne´ drzˇet tato pra´va co mozˇna´ nejstriktneˇji. Pomocı´ ACL 2 lze navı´c docı´lit mnohem jemneˇjsˇ´ıho rozdeˇlenı´ ru˚zny´ch prˇ´ıstupovy´ch pra´v pro ru˚zne´ uzˇivatele. Zvla´sˇtnı´m prˇ´ıpadem je adresa´rˇ /tmp, do ktere´ho majı´ implicitneˇ plna´ pra´va (drwxrwxrwt) vsˇichni uzˇivatele´. Vsˇimneˇme si, zˇe na tomto adresa´rˇi je aplikova´n sticky bit 3 . Proto take´ by´va´ tento adresa´rˇ vyuzˇ´ıva´n k ru˚zny´m nekaly´m cˇinnostem – od u ´ lozˇisˇteˇ velke´ho mnozˇstvı´ dat, cozˇ mu˚zˇe zpu˚sobit zaplneˇnı´ diskove´ho oddı´lu azˇ po mı´sto, odkud lze lehce spousˇteˇt soubory jako naprˇ´ıklad shelly, cˇehozˇ se hojneˇ vyuzˇ´ıva´ v ru˚zny´ch exploitovacı´ch technika´ch. Podobna´ omezenı´ platı´ samozrˇejmeˇ i pro pracovnı´ stanice. Je fakt, zˇe pokud se narusˇ´ı provoz pracovnı´ stanice, nic to neznamena´ ve srovna´nı´ s narusˇenı´m provozu serveru. Spra´vny´m nastavenı´m prˇ´ıstupovy´ch pra´v se samozrˇejmeˇ nechra´nı´me jen proti ”nasˇim” uzˇivatelu˚m, ale i proti jiny´m nebezpecˇ´ım.
1
Vı´ce o zastı´neˇny´ch heslech da´le v te´to podkapitole. Vı´ce o ACL da´le v te´to podkapitole. 3 Vı´ce o sticky bitu da´le v te´to podkapitole.
2
9
2. Za´kladnı´ hardening GNU/Linuxu
2.1.1 /etc/passwd V souboru /etc/passwd jsou uchova´ny informace o vsˇech uzˇivatelı´ch dane´ho linuxove´ho syste´mu. Zde je na´zorna´ uka´zka toho, jak mu˚zˇe vypadat tento soubor:
root:x:0:0::/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/log: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/: news:x:9:13:news:/usr/lib/news: uucp:x:10:14:uucp:/var/spool/uucppublic: operator:x:11:0:operator:/root:/bin/bash games:x:12:100:games:/usr/games: ftp:x:14:50::/home/ftp: smmsp:x:25:25:smmsp:/var/spool/clientmqueue: mysql:x:27:27:MySQL:/var/lib/mysql:/bin/bash rpc:x:32:32:RPC portmap user:/:/bin/false gdm:x:42:42:GDM:/var/state/gdm:/bin/bash pop:x:90:90:POP:/: nobody:x:99:99:nobody:/: sshd:x:33:33:sshd:/: pepa:x:1000:100:Josef Kadlec,413,098 876,435 876:/home/user:/bin/bash
Kazˇdy´ rˇa´dek souboru je za´znamem o jednom uzˇivateli. Superuzˇivatel root mu˚zˇe tento soubor libovolneˇ editovat – bud’ textovy´m editorem nebo le´pe utilitou vipw, ktera´ snı´zˇ´ı riziko prˇi necˇekane´ uda´losti beˇhem prova´deˇnı´ dany´ch zmeˇn v tomto adresa´rˇi. K prˇida´nı´ dalsˇ´ıch uzˇivatelu˚ mu˚zˇe superuzˇivatel pouzˇ´ıt utilit adduser nebo useradd. K odstraneˇnı´ pak prˇ´ıkaz userdel a k editaci nastavenı´ uzˇivatele prˇ´ıkaz usermod. Jednotlive´ informace o kazˇde´m uzˇivateli jsou oddeˇleny znakem dvojtecˇky. Prvnı´ u ´ daj je uzˇivatelske´ jme´no unika´tnı´ pro kazˇdy´ linuxovy´ stroj. Prvnı´m typem uzˇivatele je superuzˇivatel, ktery´ ma´ prˇ´ıstup ke vsˇem souboru˚m a mu˚zˇe spousˇteˇt vsˇechny programy. Jeho UID se rovna´ hodnoteˇ 0. Na jednom syste´mu by se meˇl vyskytovat pouze jeden superuzˇivatel a zpravidla to by´va´ root. Dalsˇ´ı skupinou jsou syste´movı´ uzˇivatele´, kterˇ´ı nereprezentujı´ zˇa´dnou fyzickou osobu – neprˇihlasˇujı´ se do syste´mu, veˇtsˇinou nemajı´ svu˚j domovsky´ adresa´rˇ. Jejich UID je 10
2. Za´kladnı´ hardening GNU/Linuxu
mensˇ´ı nezˇ 1000. Slouzˇ´ı prˇedevsˇ´ım ke spousˇteˇnı´ sluzˇeb (angl. daemon) – naprˇ´ıklad web serveru nebo ftp serveru. Poslednı´ skupinou jsou beˇzˇny´ uzˇivatele´, kterˇ´ı se vyznacˇujı´ hodnotou UID 1000 a vı´ce 4 a v souboru /etc/passwd jsou rˇazeni za syste´move´ uzˇivatele. Druhy´ u ´ daj prˇedstavuje heslo uzˇivatele. Ovsˇem u me´ho uka´zkove´ho souboru /etc/passwd jsou pouzˇita zastı´neˇna´ hesla, cozˇ znamena´, zˇe zasˇifrovana´ hesla uzˇivatelu˚ jsou ulozˇena v souboru /etc/shadow, ke ktere´mu ma´ prˇ´ıstup pouze root. Uzˇivatel si mu˚zˇe zmeˇnit heslo prˇ´ıkazem passwd. Trˇetı´ cˇa´stı´ je UID (User Identification Number) – uzˇivatelske´ identifikacˇnı´ cˇ´ıslo. Opeˇt je na kazˇde´m stroji jedinecˇne´ a syste´m pomocı´ neˇj rozlisˇuje prˇ´ıstupova´ pra´va k souboru˚m u jednotlivy´ch uzˇivatelu˚. ˇ tvrtou cˇa´stı´ je GID (Group Identification Number) – identifikacˇnı´ cˇ´ıslo skupiny. C Skupinou mu˚zˇeme definovat urcˇity´ pocˇet uzˇivatelu˚, kterˇ´ı budou mı´t stejne´ vlastnosti – prˇedevsˇ´ım stejna´ prˇ´ıstupova´ pra´va k souboru˚m. Skupiny a k nim patrˇ´ıcı´ uzˇivatele´ jsou definova´ny v souboru /etc/group. K prˇida´nı´ dalsˇ´ıho uzˇivatele do skupiny slouzˇ´ı prˇ´ıkaz gpasswd. K vytvorˇenı´, odstraneˇnı´ a modifikaci nastavenı´ skupiny slouzˇ´ı prˇ´ıkazy groupadd, groupdel a groupmod. Opeˇt lze pouzˇ´ıt utilitu podobnou vipw a to vigw. Pa´tou cˇa´stı´ souboru /etc/passwd, tentokra´te nepovinnou, jsou informace o uzˇivateli, ktere´ si kazˇdy´ uzˇivatel mu˚zˇe editovat prˇ´ıkazem chfn. Beˇzˇneˇ je tato polozˇka obsazena pouze skutecˇny´m jme´nem uzˇivatele, ale zmı´neˇny´ prˇ´ıkaz se pta´ jesˇteˇ na dalsˇ´ı informace, ktere´ pote´ oddeˇlı´ cˇa´rkou. Tato polozˇka je take´ oznacˇova´na jako tzv. za´znam GECOS. ˇ estou polozˇkou je uzˇivatelu˚v domovsky´ adresa´rˇ. Zde se nacha´zejı´ soubory S uzˇivatele a neˇktere´ konfiguracˇnı´ soubory, ty´kajı´cı´ se jeho profilu. Poslednı´ polozˇkou je shell, ktery´ se uzˇivateli spustı´ po prˇihla´sˇenı´. Prˇ´ıkazem chsh se mu˚zˇeme prˇepı´nat mezi shelly. Toto ovsˇem platı´ prˇedevsˇ´ım pro superuzˇivatele a beˇzˇne´ uzˇivatele. Pokud budete chtı´t neˇkomu zamezit prˇ´ıstup k shellu, vypln ˇ te poslednı´ polozˇku hodnotou /dev/null – tohoto lze take´ docı´lit umı´steˇnı´m znaku ”*” nebo znaku˚ ”!!” do pole, kde je heslo nebo znak x, ktery´ znacˇ´ı zastı´neˇnna´ hesla. Integritu tohoto souboru lze zkontrolovat prˇ´ıkazem pwck, ktery´ zkontroluje jedinecˇnost UID a GID, existenci domovske´ho adresa´rˇe, atd. 4
Toto neplatı´ pro vsˇechny distribuce.
11
2. Za´kladnı´ hardening GNU/Linuxu
Zastı´ne ˇ na´ hesla Protozˇe soubor /etc/passwd mohou cˇ´ıst beˇzˇnı´ uzˇivatele´, da´va´ jim to, v prˇ´ıpadeˇ nezapnuty´ch zastı´neˇny´ch hesel, mozˇnost cˇ´ıst digita´lnı´ otisky (angl. hash) hesel ostatnı´ch uzˇivatelu˚ a na´sledne´ho podrobenı´ teˇchto otisku˚ slovnı´kovy´m u ´ toku˚m nebo u ´ toku˚m hrubou silou, kde jsou postupneˇ zkousˇeny kombinace znaku˚. V prˇ´ıpadeˇ zapnutı´ zastı´neˇny´ch hesel jsou otisky hesel uchova´va´ny v souboru /etc/shadow, ktery´ ma´ pra´vo cˇ´ıst pouze superuzˇivatel (prˇesneˇji vsˇichni s hodnotou UID 0). Soubor /etc/shadow mu˚zˇe obsahovat dalsˇ´ı informace jako datum poslednı´ zmeˇny hesla, pocˇet dnı´, ktere´ zby´vajı´ do dalsˇ´ı mozˇne´ zmeˇny hesla, pocˇet dnı´, ktere´ zby´vajı´ do dalsˇ´ı nutne´ zmeˇny hesla, doba, se kterou bude uzˇivatel v prˇedstihu upozorneˇn na zmeˇnu hesla nebo pocˇet dnı´, ktere´ zby´vajı´ do nutne´ zmeˇny hesla, jejı´zˇ neprovedenı´ bude mı´t za na´sledek zablokova´nı´ u ´ cˇtu. Tyto u ´ daje lze meˇnit prˇ´ıkazem chage.
2.1.2 Jak fungujı´ prˇ´ıstupova´ pra´va souboru ˚ Prˇ´ıstupova´ pra´va souboru˚ umozˇn ˇ ujı´ uzˇivateli omezenı´ prˇ´ıstupu k souboru˚m a adresa´rˇu˚m5 . Zde vidı´me uka´zku zobrazenı´ souborovy´ch pra´v:
pepa@workstation$ ls -la | grep .tuxracer drwxr-xr-x 2 pepa users 4096 lis 19 14:03 .tuxracer Na´s bude prˇedevsˇ´ım zajı´mat prvnı´ cˇa´st vy´pisu drwxr-xr-x. Du˚lezˇite´ je take´ si vsˇimnout, zˇe vlastnı´kem souboru je uzˇivatel pepa a k souboru se va´zˇe skupina users. Ostatnı´ polozˇky na´s zatı´m nezajı´majı´ – samozrˇejmeˇ kromeˇ poslednı´ polozˇky, cozˇ je jme´no souboru cˇi adresa´rˇe. Rozezna´va´me trˇi druhy pra´v. Prvnı´ je pra´vo na cˇtenı´ (znak r) – u adresa´rˇe znamena´ prohlı´zˇenı´ jmen souboru˚. Druhe´ je pra´vo za´pisu (znak w) – u adresa´rˇe znamena´ prˇida´va´nı´ a odstran ˇ ova´nı´ souboru˚. Trˇetı´ pra´vo je pra´vo ke spousˇteˇnı´ (x) – v prˇ´ıpadeˇ adresa´rˇe znamena´ toto pra´vo vstup do adresa´rˇe – prˇ´ıstup k souboru˚m. Pokud chci smazat soubor, musı´m mı´t v dane´m adresa´rˇi pra´vo w. Pokud chci smazat adresa´rˇ, musı´m mı´t pra´vo w na vsˇechny jeho podadresa´rˇe. Sekvenci znaku˚ drwxr-xr-x mu˚zˇeme rozdeˇlit na cˇtyrˇi cˇa´sti. Prvnı´ cˇa´st oznacˇuje typ souboru a naby´va´ za´kladnı´ch hodnot d pokud se jedna´ o adresa´rˇ (jako v nasˇem prˇ´ıpadeˇ), ”-” pokud se jedna´ o norma´lnı´ soubor, l pokud se jedna´ o symbolicky´ odkaz a s pokud se jedna´ o schra´nku. 5 Cozˇ jsou v podstateˇ take´ soubory, ktere´ odkazujı´ na dalsˇ´ı soubory, proto to neˇkdy nebudu rozlisˇovat.
12
2. Za´kladnı´ hardening GNU/Linuxu
Za typem souboru na´sledujı´ trˇi trojice znaku˚, ktere´ reprezentujı´ prˇ´ıstupova´ pra´va pro vlastnı´ka souboru, skupinu, ktera´ se va´zˇe k souboru a ostatnı´ uzˇivatele. Pokud pozice obsahuje znak ”-” je pra´vo odeprˇeno. Z nasˇeho prˇ´ıkladu mu˚zˇeme vyvodit, zˇe vlastnı´k souboru, ktere´mu patrˇ´ı prvnı´ trojice rwx ma´ pra´vo na prohlı´zˇenı´ jmen souboru˚ v adresa´rˇi, vytva´rˇenı´ a maza´nı´ souboru˚ a pra´vo vstupu do adresa´rˇe. Na´sledujı´cı´ trojice znaku˚ r-x na´m rˇ´ıka´, zˇe skupina va´zana´ k souboru ma´ pra´vo na prohlı´zˇenı´ jmen v adresa´rˇi a pra´vo vstupu do adresa´rˇe. Pra´vo na vytva´rˇenı´ a maza´nı´ souboru˚ jı´ je odeprˇeno. Zbytek sveˇta neboli ostatnı´, reprezentova´ni trˇetı´ trojicı´ r-x majı´ v nasˇem prˇ´ıpadeˇ stejna´ pra´va jako skupina. Prˇ´ıstupova´ pra´va mu˚zˇe meˇnit vlastnı´k souboru nebo superuzˇivatel (prˇ´ıkaz chmod). Vlastnı´ka souboru mu˚zˇe meˇnit pouze superuzˇivatel (prˇ´ıkaz chown). Skupinu, ktera´ se va´zˇe k souboru mu˚zˇe meˇnit bud’ superuzˇivatel nebo vlastnı´k souboru, pokud patrˇ´ı do pu˚vodnı´ i cı´love´ skupiny (prˇ´ıkaz chgrp). Du˚lezˇite´ je popsat algoritmus, jaky´m se rozhodne, zda ma´ uzˇivatel to urcˇite´ pra´vo (r, w nebo x). Funguje to takto: nejdrˇ´ıve oveˇrˇ´ıme, zda ten, kdo chce dane´ho pra´va vyuzˇ´ıt je superuzˇivatel. Pokud ano, ma´ povolen prˇ´ıstup. Pokud ne, oveˇrˇ´ıme, zda-li je vlastnı´kem souboru. Pokud ano, tak oveˇrˇ´ıme, jestli ma´ povolene´ dane´ pra´vo a podle toho povolı´me prˇ´ıstup. Pokud ne, oveˇrˇ´ıme, jestli patrˇ´ı do skupiny, na kterou se va´zˇe soubor. Pokud ano, tak oveˇrˇ´ıme pra´vo skupiny na danou akci a podle toho povolı´me prˇ´ıstup. Pokud ne, tak oveˇrˇ´ıme, jestli ma´ zbytek sveˇta (ostatnı´) pra´vo na akci a povolı´me nebo zamı´tneme prˇ´ıstup. Pra´va souboru˚ mohou by´t reprezentova´na i cˇ´ıselny´mi soustavami – konkre´tneˇ se pouzˇ´ıva´ trˇech cˇ´ısel v osmicˇkove´ soustaveˇ. Vsˇimneˇme si, zˇe pra´vo je zadane´ tak, zˇe je bud’ povolene´ nebo zaka´zane´. Z toho vyply´va´, zˇe nasˇ´ı sekvenci rwxr-xr-x mu˚zˇeme prˇepsat na 111101101 a po prˇevedenı´ vsˇech trˇech trojic 111, 101 a 101 do osmicˇkove´ soustavy dostaneme 755. Tuto hodnotu mu˚zˇeme pouzˇ´ıvat k meˇneˇnı´ prˇ´ıstupovy´ch pra´v prˇ´ıkazem chmod. Jak jizˇ bylo rˇecˇeno, zmeˇna pra´v se prova´dı´ prˇ´ıkazem chmod. V prˇ´ıpadeˇ pouzˇitı´ reprezentace pra´v v osmicˇkove´ soustaveˇ je situace jednoducha´:
chmod 751 file.txt Tento prˇ´ıkaz zmeˇnı´ prˇ´ıstupova´ pra´va souboru file.txt na rwxr-xx. Pokud chceme naprˇ´ıklad prˇidat pra´vo na spusˇteˇnı´ pro vlastnı´ka, skupinu i ostatnı´ u souboru file.sh provedeme to prˇ´ıkazem:
chmod +x file.sh
13
2. Za´kladnı´ hardening GNU/Linuxu
Pokud bychom naprˇ´ıklad chteˇli prˇidat pra´vo za´pisu jen pro skupinu u souboru file.sh, provedli bychom to takto:
chmod g+w file.sh Pokud bychom toto pra´vo chteˇli odebrat, vypadalo by to na´sledovneˇ:
chmod g-w file.sh Vidı´me, zˇe prˇida´nı´ prˇ´ıstupove´ho pra´va se realizuje pomoci symbolu ”+” a odebı´ra´nı´ probı´ha´ pomocı´ symbolu ”-”. Vlastnı´k souboru je reprezentova´n symbolem u, skupina symbolem g a zbytek sveˇta symbolem o. Specia´lnı´m prˇ´ıpadem je sticky bit, ktery´ se aplikuje na adresa´rˇe. Pokud je na adresa´rˇi nastaven sticky bit, mu˚zˇe uzˇivatel mazat pouze ty soubory, ktere´ v tomto adresa´rˇi vlastnı´. Toto je vy´hodne´ pouzˇ´ıt naprˇ´ıklad na adresa´rˇ /tmp nebo /var/tmp, kam majı´ vetsˇinou mozˇnost za´pisu vsˇichni uzˇivatele´. Sticky bit mu˚zˇeme prˇidat prˇ´ıkazem chmod takto:
chmod +t /tmp Adresa´rˇ vybaveny´ tı´mto bitem pozna´me podle znaku t v mı´steˇ nastavenı´ pra´va prova´deˇnı´ (x) pro ostatnı´. Je nutne´ jesˇteˇ zmı´nit, podle cˇeho se urcˇuje vy´chozı´ nastavenı´ pra´v souboru˚ – tzn. pokud vytvorˇ´ı uzˇivatel novy´ soubor, jaka´ bude mı´t tento soubor prˇ´ıstupova´ pra´va. Toto se urcˇuje prˇ´ıkazem umask, ke ktere´mu prˇida´me parametr, ktery´ prˇedstavuje prˇ´ıstupova´ pra´va v osmicˇkove´ soustaveˇ. Dalsˇ´ı informace lze nale´zt v manua´lovy´ch stra´nka´ch prˇ´ıkazu chmod (man chmod).
ACL ACL (Access Control List) je komplexneˇjsˇ´ı rˇesˇenı´ prˇ´ıstupovy´ch pra´v v Linuxu (samozrˇejmeˇ i na jiny´ch operacˇnı´ch syste´mech). Umozˇn ˇ uje na´m nastavit takova´ pra´va, ktera´ bychom s beˇzˇny´mi pra´vy v Linuxu teˇzˇko realizovali nebo bychom to realizovali velmi slozˇiteˇ. Naprˇ. pokud budeme chtı´t prˇideˇlit souboru pra´vo za´pisu pro uzˇivatele lukas, karel a jachym a ostatnı´m uzˇivatelu˚m ze skupiny studenti prˇ´ıstup zaka´zat. Superuzˇivatel by to zrˇejmeˇ rˇesˇil tak, zˇe by vytvorˇil dalsˇ´ı skupinu, kam by tyto trˇi uzˇivatele umı´stil. Ale pokud nema´te pra´va superuzˇivatele, tak nemu˚zˇete prˇida´vat dalsˇ´ı skupiny, takzˇe pro beˇzˇne´ho uzˇivatele je zvolenı´ politiky prˇ´ıstupovy´ch pra´v neuskutecˇnitelne´. ACL nezava´dı´ zˇa´dne´ prˇevratne´ zmeˇny v modelu prˇ´ıstupovy´ch pra´v, ale spı´sˇe rozsˇirˇuje model za´kladnı´.
14
2. Za´kladnı´ hardening GNU/Linuxu
Model ACL podle specifikace POSIX 1003.1E, ktera´ je pro unixove´ syste´my typicka´, podobneˇ jako u beˇzˇny´ch linuxovy´ch pra´v, umozˇn ˇ uje definovat pro kazˇde´ho uzˇivatele cˇi skupinu trˇi druhy pra´v a to pra´vo cˇtenı´, za´pisu a spousˇteˇnı´ – adekva´tneˇ u adresa´rˇu˚. Dalsˇ´ım atributem je maska, ktera´ symbolizuje u ´ daj nejvysˇsˇ´ıch pra´v, ktera´ lze nastavit pomocı´ ACL a vztahuje se pouze na skupinu. Tato maska se transformuje na masku v klasicke´m modelu a je vyuzˇ´ıva´na aplikacemi, ktere´ ACL nepodporujı´, prˇicˇemzˇ toto nemu˚zˇe dany´ soubor zbavit pra´v, ktera´ mu byla prˇideˇlena. Da´le jsou specifikova´na tzv. standardnı´ ACL (angl. default ACL) pra´va, ktera´ se uplatn ˇ ujı´ prˇi vytva´rˇenı´ nove´ho souboru nebo adresa´rˇe uvnitrˇ adresa´rˇe, kde jsou tato pra´va definova´na. Samotna´ ACL pra´va podadresa´rˇu˚ a podsouboru˚ jsou zdeˇdeˇna po rodicˇovske´m adresa´rˇi. Podadresa´rˇe deˇdı´ i standardnı´ ACL pra´va. Podpora ACL pro souborove´ syste´my Ext2fs a Ext3fs prˇisˇla s linuxovy´m kernelem 2.5.46, cozˇ je samozrˇejmeˇ vy´vojove´ ja´dro. Stabilnı´ ja´dra rˇady 2.6 podporu pro tyto souborove´ syste´my ACL obsahujı´. Na ja´dra rˇady 2.4 je nutno pouzˇ´ıt patch, ktery´ lze sehnat na domovsky´ch stra´nka´ch projektu ACL 6 . Co se ty´cˇe ostatnı´ch souborovy´ch syste´mu˚, tak ReiserFS a XFS je na linuxovy´ch ja´drech rˇady 2.4 podporova´no a na JFS je nutne´ pouzˇ´ıt patch 7 . Neˇktere´ distribuce, ktere´ nepouzˇ´ıvajı´ Vanilla ja´dra8 , mohou obsahovat podporu ACL i v rˇadeˇ 2.4 – naprˇ´ıklad SuSE cˇi Mandrake. K zobrazenı´ ACL pra´v se pouzˇ´ıva´ utilita getfacl. Pouzˇitı´ mu˚zˇe by´t naprˇ´ıklad takove´to:
getfacl /etc/file Nebo pokud bychom chteˇli vypsat standardnı´ ACL pra´va adresa´rˇe, tak by za´pis vypadal takto:
getfacl -d /etc/directory Samotne´ nastavenı´ a modifikace ACL pra´v se realizuje pomocı´ utility setfacl. Volba, kterou budeme zrˇejmeˇ nejvı´ce pouzˇ´ıvat je volba -m, ktera´ slouzˇ´ı k modifikaci ACL pra´v. Alternativou k te´to volbeˇ je volba set, ktera´ smazˇe soucˇasna´ ACL pra´va a vytvorˇ´ı nova´. Nesmı´me zapomenout, zˇe tato volba vyzˇaduje zada´nı´ pra´v pro vlastnı´ka, skupinu i ostatnı´. Volbou -x lze ACL pra´va odstranit. Pouzˇitı´ setfacl mu˚zˇe vypadat naprˇ´ıklad takto:
setfacl -m u:pepa:rw /etc/file 6
http://acl.bestbits.at http://oss.software.ibm.com/developerworks/patch/download.php?id=409 8 Ja´dro hlavnı´ vy´vojove´ veˇtve dostupne´ z http://www.kernel.org/. 7
15
2. Za´kladnı´ hardening GNU/Linuxu
Vidı´me, zˇe v nasˇem prˇ´ıpadeˇ ma´ hodnota volby -m trˇi cˇa´sti. Prvnı´ cˇa´st specifikuje, zdali se jedna´ o uzˇivatele (u nebo user), skupinu (g nebo group), masku (m nebo mask) nebo ostatnı´ (o nebo others). Druha´ hodnota prˇedstavuje UID v prˇ´ıpadeˇ uzˇivatele nebo GID v prˇ´ıpadeˇ skupiny. V ostatnı´ch prˇ´ıpadech je pole pra´zdne´. A poslednı´ cˇa´st charakterizuje samotna´ prˇ´ıstupova´ pra´va, jejichzˇ symbolika je jizˇ vı´ce nezˇ jasna´. Druhy´m parametrem utility setfacl je na´zev souboru cˇi adresa´rˇe. Jednı´m z proble´mu˚ je implementace ACL v NFS 9 klientech. Prˇedevsˇ´ım u NFS klientu˚ verze 2, kdy je rozhodova´no u cachovany´ch souboru˚ podle klasicky´ch unixovy´ch pra´v. Na´sledky si kazˇdy´ doka´zˇe prˇedstavit. U NFS verze 3 je situace lepsˇ´ı. Kontrola pra´v probı´ha´ na straneˇ serveru pomocı´ tzv. ACCESS RPC vola´nı´, ktere´ ovsˇem nemusejı´ podporovat vsˇechny implementace NFSv3. NFSv4 uzˇ s ACL umı´ pracovat, ale podpora pro Linux nenı´ u ´ plna´. Jak se dozvı´me da´le, je mnoho du˚vodu˚, procˇ NFS nepouzˇ´ıvat a toto je jisteˇ jeden z nich. Situace u projektu Samba10 je u ´ plneˇ opacˇna´. ACL bylo v Sambeˇ zabudova´no da´vno prˇedtı´m, nezˇ se objevila implementace ACL v Linuxu. Proto lze Sambu bez jaky´chkoliv potı´zˇ´ı nasadit. Dalsˇ´ı informace lze opeˇt nale´zt v prˇ´ıslusˇny´ch manua´lovy´ch stra´nka´ch.
2.1.3 Atributy souboru ˚ Atributy souboru˚ jsou u ´ zce spjaty se samotny´mi pra´vy souboru˚ a rozsˇirˇujı´ za´kladnı´ ra´mec bezpecˇnosti souboru˚. Atributy souboru˚ mu˚zˇeme zobrazit prˇ´ıkazem lsattr. Kazˇdy´ atribut reprezentuje znak, podobneˇ jako tomu bylo u samotny´ch pra´v v Linuxu. V tabulce 2.1 jsou vypsa´ny atributy, ktere´ mohou by´t zmeˇneˇny prˇi pouzˇitı´ souborove´ho syste´mu Ext2 cˇi Ext3. Zmeˇnu teˇchto atributu˚ mu˚zˇeme prove´st pomocı´ prˇ´ıkazu chattr naprˇ´ıklad takto:
chattr +i /etc/passwd Nebo vra´tit do pu˚vodnı´ho stavu takto:
chattr -i /etc/passwd Je zrˇejme´, zˇe prˇida´nı´ atributu se prova´dı´ znakem ”+” a sunda´nı´ atributu znakem ”-”. 9 10
http://nfs.sourceforge.net/ http://www.samba.org/
16
2. Za´kladnı´ hardening GNU/Linuxu
Znak
Vy ´ znam
A
Neaktualizuje atime souboru.
a
Otevı´ra´ soubor pouze v prˇida´vacı´m mo´du.
c
Soubor je na disku automaticky komprimova´n.
i
Soubor nenı´ mozˇno nijak pozmeˇnit, vymazat nebo prˇejmenovat.
d
Ochra´nı´ soubor proti vymaza´nı´ cˇistı´cı´m programem.
s
Soubor je odstraneˇn bez mozˇnosti navra´cenı´ obsahu.
S
V okamzˇiku modifikace souboru je soubor zapsa´n na disk.
u
Pokud je soubor odstraneˇn, jeho obsah je zachova´n. Tabulka 2.1: Atributy souboru˚ a jejich vy´znam Dalsˇ´ı informace lze nale´zt v manua´lovy´ch stra´nka´ch pouzˇity´ch prˇ´ıkazu˚.
EA EA (Extended Attributes) rozsˇirˇujı´ klasicky´ model atributu˚ v Linuxu. Umozˇn ˇ ujı´ libovolneˇ nadefinovat dalsˇ´ı atributy souboru – na´zev atributu a hodnota atributu. Zobrazenı´ teˇchto atributu˚ se prova´dı´ prˇ´ıkazem getfattr. K vytvorˇenı´ nove´ho atributu mu˚zˇeme pouzˇ´ıt prˇ´ıkaz setfattr naprˇ´ıklad takto:
setfattr -n autor -v Josef /home/pepa/bak.tex Podporu EA pro ru˚zne´ souborove´ syste´my zajisˇt’ujı´ patche, ktere´ lze nale´zt naprˇ´ıklad na URL:
http://acl.bestbits.at/download.html
2.2 Zapnutı´ zastı´ne ˇ ny ´ ch hesel Du˚vody pouzˇitı´ zastı´neˇny´ch hesel a to jak fungujı´ jsem popsal v sekci ”2.1.1 /etc/passwd”. Rozhodneˇ bychom meˇli podporu zastı´neˇny´ch hesel zapnout – resp. ji nevypı´nat. Ve veˇtsˇineˇ distribucı´ se tak jizˇ deˇje implicitneˇ prˇi instalaci – v me´ oblı´bene´ distribuci Slackware Linux jizˇ od verze 3.4. Urcˇiteˇ jako administra´torˇi v prostrˇedı´ akademicky´ch sı´tı´ nechceme, aby uzˇivatele´ (prˇeva´zˇneˇ studenti) pokousˇeli sı´lu nasˇich hesel nebo hesel jiny´ch uzˇivatelu˚, prˇes ktere´ by pote´ mohli takrˇka anonymneˇ prova´deˇt nekalou cˇinnost.
17
2. Za´kladnı´ hardening GNU/Linuxu
2.3 Proble´m setuid a setgid programu ˚ Setuid11 jsou programy, ktere´ po spusˇteˇnı´ uzˇivatelem beˇzˇ´ı s pra´vy vlastnı´ka (v prˇ´ıpadeˇ setgid s pra´vy skupiny, ktera´ se k souboru vztahuje). Takove´to programy mohou by´t zvla´sˇteˇ nebezpecˇne´ pokud je jejich vlastnı´k superuzˇivatel root (tzv. root-setuid nebo root-setgid programy) a navı´c mohou by´t spousˇteˇny ky´mkoliv. Jedna´ se naprˇ´ıklad o programy /usr/bin/at, /usr/bin/passwd, /bin/ping, /bin/mount, /bin/umount, /usr/bin/chfn, atd. Root-setuid programy (cˇili ty nejnebezpecˇneˇjsˇ´ı) mu˚zˇeme najı´t prˇ´ıkazem find naprˇ´ıklad takto:
find / -perm -4000 -uid 0 Jak vidı´me, mezi tyto programy patrˇ´ı soubory, ktere´ pouzˇ´ıva´me velmi cˇasto. V teˇchto programech se v minulosti objevilo spoustu chyb, ktere´ cˇasto, i kdyzˇ v neˇktery´ch prˇ´ıpadech neprˇ´ımo, vedly k zı´ska´nı´ nejvysˇsˇ´ıch pravomocı´. Prˇ´ıkladem mu˚zˇe by´t chyba v programu /usr/bin/man, ktera´ vedla k zı´ska´nı´ pra´v skupiny man. Tyto soubory bychom meˇli omezit tak, aby je mohla spousˇteˇt jen omezena´ cˇa´st uzˇivatelu˚. Toto mu˚zˇeme realizovat dveˇma zpu˚soby. Prvnı´ je ten, zˇe vytvorˇ´ıme skupinu, ktera´ bude mı´t jedina´ prˇ´ıstup k dane´mu setuid programu. Druhu˚m zpu˚sobem je pouzˇitı´ programu sudo 12 , cozˇ je komplexneˇjsˇ´ı rˇesˇenı´ nezˇ prvnı´ zpu˚sob. Konfigurace suda mu˚zˇe by´t zprostrˇedkova´na pomocı´ souboru /etc/sudoers, ktery´ mu˚zˇe vypadat naprˇ´ıklad takto:
Host_Alias LOCAL = localhost Cmnd_Alias MOUNT = /bin/mount /dev/hda1 /mnt/hda1 pepa LOCAL=NOPASSWD:MOUNT Tato konfigurace umozˇnı´ uzˇivateli pepa, ktery´ je prˇihla´sˇen z localhostu prˇipojenı´ diskove´ho oddı´lu /mnt/hda1 prˇ´ıkazem:
/bin/mount /dev/hda1 /mnt/hda1 a sudo nebude vyzˇadovat heslo. Pokud dany´ setuid (setgid) program nepotrˇebujeme, meˇli bychom ho odstranit. Pokud mu˚zˇeme sejmout setuid bit, opeˇt bychom tak meˇli ucˇinit v ra´mci odstraneˇnı´ bezpecˇnostnı´ch rizik. Ale bohuzˇel ve veˇtsˇineˇ prˇ´ıpadu˚ znamena´ tato akce nespra´vnou funkcˇnost nebo u ´ plnou nefunkcˇnost dane´ho programu. 11 12
Tyto programy majı´ v masce pra´v nastaven tzv. efektvnı´ bit s. http://www.courtesan.com/sudo/
18
2. Za´kladnı´ hardening GNU/Linuxu
ˇ patne 2.4 S ˇ nastavena´ PATH Neˇkterˇ´ı uzˇivatele´, v horsˇ´ım prˇ´ıpadeˇ i superuzˇivatele´ si zjednodusˇujı´ pra´ci tı´m, zˇe si prˇida´vajı´ adresa´rˇ ”.” do promeˇnne´ syste´move´ho prostrˇedı´ $PATH. Vy´hody to ma´ takove´, zˇe jim potom stacˇ´ı psa´t pouze mujprogram mı´sto ./mujprogram cˇi sh mujprogram. Co kdyzˇ neˇkdo vytvorˇ´ı za´kerˇny´ program s na´zvem beˇzˇneˇ uzˇ´ıvane´ho prˇ´ıkazu jako naprˇ´ıklad ls, who nebo ps. Pokud je adresa´rˇ ”.” v promeˇnne´ $PATH prˇed adresa´rˇem, ve ktere´m se nacha´zı´ program, jehozˇ na´zvu chceme zneuzˇ´ıt a uzˇivatel napı´sˇe prˇ´ıkaz, jehozˇ na´zvu zneuzˇ´ıva´me - naprˇ´ıklad ls, znamena´ to, zˇe se spustı´ na´sˇ za´kerˇny´ program, ktery´ v prˇ´ıpadeˇ spusˇteˇnı´ uzˇivatelem nebo superuzˇivatelem mu˚zˇe ve´st k prˇ´ıme´ kompromitaci syste´mu s nejvysˇsˇ´ımi pra´vy a za´lezˇ´ı jen na u ´ tocˇnı´koveˇ fantazii, jak bude vypadat ko´d za´kerˇne´ho programu mu˚zˇe posı´lat obsah souboru /etc/passwd na urcˇitou e-mailovou adresu nebo mu˚zˇe naprˇ´ıklad vytvorˇit setuid shell v adresa´rˇi /tmp a umozˇnit sobeˇ a ostatnı´m uzˇivatelu˚m pouzˇ´ıvanı´ shellu s pra´vy superuzˇivatele. Za´kerˇny´ ko´d mu˚zˇe obsahovat pasa´zˇ, kde se vykona´ pu˚vodnı´ za´meˇr uzˇivatele a ten nemusı´ vu˚bec nic poznat. Je mozˇno zneuzˇ´ıt i situaci, kdy se ”.” nacha´zı´ na konci promeˇnne´ $PATH a to naprˇ´ıklad vyuzˇitı´m na´zvu programu, ktery´ nenı´ v syste´mu nainstalova´n a uzˇivatel se ho pokousˇ´ı spustit nebo vyuzˇitı´m toho, zˇe se uzˇivatel neˇkdy prˇeklepne a napı´sˇe naprˇ´ıklad mı´sto prˇ´ıkazu nice prˇ´ıkaz ncie. Obrana je jasna´, nepouzˇ´ıvat adresa´rˇ ”.” v promeˇnne´ $PATH! Superuzˇivatel by meˇl take´ zajistit odstraneˇnı´ vsˇech vy´skytu˚ prˇida´nı´ tohoto adresa´rˇe do cesty prˇedevsˇ´ım v souborech /etc/profile, /etc/bashrc a v domovsky´ch adresa´rˇ´ıch v souborech .bashrc a .bash_profile. Bezradny´ bude v hleda´nı´ a odstran ˇ ova´nı´ tohoto zavedenı´ promeˇnne´ $PATH v bina´rnı´ch aplikacı´ch.
2.5 Omezenı´ uz ˇivatelu ˚ pomocı´ kvo ´ t a limitu ˚ Neˇkterˇ´ı uzˇivatele´ se domnı´vajı´, zˇe jsou v syste´mu sami a mu˚zˇe dojı´t naprˇ´ıklad k tomu, zˇe uzˇivatel vyuzˇije cely´ procesorovy´ cˇas stroje a tı´m znemozˇnı´ pra´ci ostatnı´m uzˇivatelu˚m. Samozrˇejmeˇ k tomu mu˚zˇe dojı´t i nechteˇneˇ, jako se stalo naprˇ´ıklad mneˇ. Zaplnil jsem cely´ diskovy´ prostor v oddı´lu /home v du˚sledku nespra´vne´ho beˇhu me´ho programu. Tak nebo tak je potrˇeba teˇmto situacı´m prˇedcha´zet a uvalit na uzˇivatele limity a kvo´ty. Pokud chceme zamezit pra´veˇ tomu, aby neˇkdo zabral velkou cˇa´st diskove´ho prostoru vyuzˇijeme kvo´t. Abychom mohli kvo´ty pouzˇ´ıvat musı´me v souboru /etc/fstab prˇidat parametr usrquota cˇi grpquota k oddı´lu, na ktere´m chceme kvo´ty pouzˇ´ıvat. Da´le na dane´m oddı´le vytvorˇ´ıme soubory quota.user a quota.group nejle´pe s pra´vy 600. To jestli je vsˇe spra´vneˇ nastaveno si mu˚zˇeme oveˇrˇit prˇ´ıkazem:
quotacheck -avug 19
2. Za´kladnı´ hardening GNU/Linuxu
Samotne´ zapnutı´ kvo´t se prova´dı´ prˇ´ıkazem quotation bez parametru˚. Prˇida´nı´ kvo´ty naprˇ´ıklad pro uzˇivatele pepa mu˚zˇe vypadat takto:
edquota -u pepa Tento prˇ´ıkaz spustı´ textovy´ editor, ktery´ ma´te urcˇeny´ syste´movou promeˇnnou $EDITOR (v me´m prˇ´ıpadeˇ je to du˚veˇrneˇ zna´my´ editor vim), ve ktere´m vidı´te informace se soucˇasny´mi kvo´tami, ktere´ mu˚zˇete editovat. Nastavit mu˚zˇete prˇekrocˇitelny´ (soft) limit, prˇi ktere´m bude uzˇivatel jen upozorneˇn a neprˇekrocˇitelny´ (hard) limit, ktery´ prˇekrocˇen by´t nemu˚zˇe. Hodnota nula znamena´, zˇe uzˇivatel nema´ nastavenou kvo´tu. Pokud bychom chteˇli nastavit stejne´ kvo´ty jako ma´ uzˇivatel pepa naprˇ´ıklad pro uzˇivatele karel, provedli bychom to takto:
edquota -p pepa karel Da´le si prˇedstavı´me prˇ´ıkaz ulimit, ktery´ na´m umozˇn ˇ uje omezit kromeˇ velikosti datove´ho segmentu naprˇ´ıklad mnozˇstvı´ procesorove´ho cˇasu, pocˇet otevrˇeny´ch souboru˚, velikost souboru˚ core, pocˇet spusˇteˇny´ch procesu˚, atd. Omezenı´ lze prove´st za´znamem do souboru /etc/profile a tı´m omezit vsˇechny uzˇivatele prˇihlasˇujı´cı´ se do syste´mu. Dalsˇ´ı mozˇnostı´ editova´nı´ limitu˚ je editace souboru /etc/security/limits.conf, kde jsou informace serˇazene´ ve forma´tu:
domain type item value Domain je uzˇivatelske´ jme´no nebo na´zev skupiny, ktery´ po znaku ”@” nebo znaku ”*” znamena´ vsˇechny uzˇivatele uvedene´ skupiny. Type mu˚zˇe naby´vat hodnot soft nebo hard, ktere´ jsou totozˇne´ s vy´znamem u kvo´t. Item oznacˇuje zdroj, ktery´ chcete omezit – naprˇ´ıklad cpu, nproc, maxlogins, atd. Value je pak hodnota prˇ´ıslusˇne´ho omezenı´. Jak jsem jizˇ zmı´nil, omezenı´ pro uzˇivatele by meˇlo by´t co mozˇna´ nejstriktneˇjsˇ´ı. Abychom zbytecˇneˇ neomezovali du˚veˇryhodne´ uzˇivatele, je mozˇne´ vytvorˇit vı´ce skupin s ru˚zny´mi omezenı´mi. Skupina, ktera´ by se mohla prˇ´ıznacˇneˇ jmenovat studenti, by meˇla mı´t nejveˇtsˇ´ı omezenı´, ale samozrˇejmeˇ ne na u ´ kor pouzˇivatelnosti. Jako syste´movı´ spra´vci tı´m prˇedejdeme mnoha proble´mu˚m.
20
2. Za´kladnı´ hardening GNU/Linuxu
2.6 Omezenı´ pra´v superuz ˇivatele S pra´vy superuzˇivatele bychom meˇli spousˇteˇt opravdu jen procesy, ktere´ to vyzˇadujı´. Co byste meˇli prˇ´ımo zaka´zat, je pouzˇ´ıva´nı´ programu telnet a FTP klienta, aby neˇkdo nemohl odchytit nezasˇifrovane´ heslo superuzˇivatele. Tento za´kaz lze realizovat naprˇ´ıklad prˇes TCP wrappers 13 . Nasˇli bychom i dalsˇ´ı prˇ´ıklady restrikce pra´v superuzˇivatele. Neˇktere´ na´m nabı´zı´ projekt Bastille 14 .
2.6.1 /etc/securetty Tento soubor umozˇn ˇ uje definovat, ze ktery´ch TTY a VC (virtua´lnı´ konsole) zarˇ´ızenı´ se mu˚zˇe superuzˇivatel prˇihla´sit. Pokud nechcete, aby dane´ zarˇ´ızenı´ bylo funkcˇnı´, zakomentujte prˇ´ıslusˇny´ rˇa´dek v tomto souboru. Program /bin/login bude akceptovat pouze nezakomentovane´ rˇa´dky a k neˇmu prˇ´ıslusˇna´ zarˇ´ızenı´.
2.7 Vypnutı´ a odstrane ˇ nı´ nepotrˇebny ´ ch sluz ˇeb a softwaru Kazˇda´ sluzˇba prˇedstavuje jake´si pomyslne´ dverˇe do syste´mu, ktere´ mu˚zˇe vetrˇelec vyuzˇ´ıt k pru˚niku. Je velmi pravdeˇpodobne´, zˇe po instalaci vasˇ´ı distribuce najdete sluzˇby, ktere´ potrˇebovat nebudete. Mu˚zˇe se jednat naprˇ´ıklad o web server, FTP server cˇi drobne´ sluzˇby jako ECHO a chargen. Vidı´me, zˇe se jedna´ prˇedevsˇ´ım o sı´t’ove´ sluzˇby. Pokud danou sluzˇbu nepotrˇebujete, meˇli byste ji vypnout. Pokud vı´te, zˇe sluzˇbu nikdy potrˇebovat nebudete, mu˚zˇete jı´ vymazat a tı´m znemozˇnit spusˇteˇnı´ neprˇ´ıtelem, ktery´ by si trˇeba chteˇl takto zajistit prˇ´ıstup do syste´mu. Seznam naslouchajı´cı´ch procesu˚ mu˚zˇeme vypsat prˇ´ıkazem netstat nejle´pe takto:
netstat -atuvp Dalsˇ´ı mozˇnostı´ je pouzˇitı´ prˇ´ıkazu ps, ktery´ mu˚zˇe vypsat vsˇechny beˇzˇ´ıcı´ procesy a na´sledne´ du˚kladne´ prozkouma´nı´ kazˇde´ z nich, zdali je potrˇebna´, cˇi nikoli. To jestli dana´ sluzˇba bude spusˇteˇna, cˇi nikoli mu˚zˇete ovla´dat pomocı´ spousˇteˇcı´ch skriptu˚ (spousˇteˇcı´ skripty unixove´ho typu System V se nacha´zejı´ v adresa´rˇi /etc/rc.d/) a dalsˇ´ı prˇedevsˇ´ım nativneˇjsˇ´ı sluzˇby se ovla´dajı´ pomocı´ /etc/inetd.conf (nebo /etc/xinetd.d/*). Vysˇsˇ´ı bezpecˇnosti docı´lı´me spusˇteˇnı´m minima sluzˇeb. Nı´zˇe uvedene´ sluzˇby jsou sluzˇby, ktere´ znamenajı´ vysokou mı´ru rizika, nedajı´ se nijak u ´ cˇinneˇ zabezpecˇit a na syste´mu, ktery´ je oznacˇen jako bezpecˇny´, by se rozhodneˇ objevit nemeˇly. Tyto programy jizˇ nejsou v soucˇasne´ dobeˇ nutne´ a nebo nasˇly sve´ bezpecˇneˇjsˇ´ı alternativy. 13 14
Vı´ce o TCP wrappers v kapitole ”4 Bezpecˇnost na u ´ rovni sı´teˇ”. Vı´ce o projektu Bastille v sekci ”3.4 Bastille.”
21
2. Za´kladnı´ hardening GNU/Linuxu
finger Proble´m sluzˇby finger (resp. jeho stejnojmenne´ho prˇ´ıkazu) je ten, zˇe o uzˇivateli prozrazuje prˇ´ılisˇ mnoho informacı´. Pomocı´ prˇ´ıkazu finger mu˚zˇe cizı´ uzˇivatel zjistit mnoho informacı´ o uzˇivatelı´ch vzda´lene´ho, cizı´ho syste´mu – vsˇechny termina´ly z nichzˇ je momenta´lneˇ prˇihla´sˇen, neˇktere´ informace o elektronicke´ posˇteˇ, obsah za´znamu GECOS v souboru /etc/passwd, prˇihlasˇovacı´ cestu k adresa´rˇi, jaky´ shell tento uzˇivatel pouzˇ´ıva´ a specializovane´ soubory .plan a .project. Vy´znam tohoto programu je jizˇ da´vno prycˇ a proto bychom meˇli zajistit vypnutı´ (poprˇ. u ´ plne´ odstraneˇnı´) tohoto programu, cozˇ se provede editacı´ prˇ´ıslusˇne´ho za´znamu v /etc/inetd.conf (poprˇ. editacı´ skriptu de´monu xinetd patrˇ´ıcı´ sluzˇbeˇ finger).
telnet Telnet slouzˇ´ı k vzda´lene´mu prˇihlasˇova´nı´ do syste´mu. Proble´m je v tom, zˇe heslo je prˇena´sˇeno v textove´ podobeˇ, nijak nechra´neˇno zraku˚m teˇch, co mohou sledovat provoz kudy tato data procha´zejı´. Dalsˇ´ı nevy´hodou je to, zˇe je zranitelny´ vu˚cˇi u ´ toku s ”cˇloveˇkem uprostrˇed”15 , cozˇ znamena´ zˇe trˇetı´ osoba narusˇ´ı integritu odeslany´ch a prˇijaty´ch dat, mezi stroji, u ktery´ch probı´ha´ spojenı´. Tento program ma´ vsˇak svojı´ na´hradu a tou je protokol ssh 16 , ktery´ komunikaci sˇifruje, takzˇe zde nenı´ zˇa´dny´ du˚vod, procˇ telnet pouzˇ´ıvat a ohrozˇovat tı´m vlastnı´ bezpecˇnost.
R* sluz ˇ by Mezi tzv. R* sluzˇby patrˇ´ı rlogin, rsh, rcp a rexec. Rlogin ma´ stejny´ vy´znam jako telnet, ale obsahuje jesˇteˇ jednu vlastnost, ktera´ jesˇteˇ vı´ce ohrozˇuje bezpecˇnost ˇ esˇenı´ je stejne´ jako v prˇ´ıpadeˇ sluzˇby a tou je, zˇe umozˇn ˇ uje cˇinnost bez hesla. R telnet a tı´m je pouzˇitı´ bezpecˇne´ho shellu ssh. Sluzˇby rsh, rcp a rexec slouzˇ´ı k vzda´lene´mu vykona´va´nı´ procesu˚. Zde je mozˇnostı´ pru˚niku neˇkolik – naprˇ´ıklad nainstalova´nı´ podvrzˇene´ho souboru .rhost), ale nebudu je zde podrobne´ probı´rat, protozˇe tyto programy by v soucˇasne´ dobeˇ meˇly by´t nahrazeny jejich bezpecˇneˇjsˇ´ımi alternativami.
echo, chargen Tyto sluzˇby slouzˇ´ı pro testova´nı´ sı´teˇ a syste´mu. Sluzˇba echo testuje propojenı´ sı´teˇ tak, zˇe opakuje zpeˇt odeslana´ data. Chargen (character generation) vypisuje posloupnost znaku˚ a slouzˇ´ı tedy pro testova´nı´ termina´lovy´ch zarˇ´ızenı´ tty. Tyto ´ tocˇnı´k navı´c mu˚zˇe prˇi zfalsˇova´nı´ jeho sluzˇby jsou na´chylne´ vu˚cˇi u ´ toku˚m DoS. U zdrojove´ adresy (IP spoofing) paketovou smrsˇtı´ zahltit trˇetı´ syste´m. 15 16
Vı´ce o u ´ toku MITM v sekci ”4.12 Sı´t’ove´ hrozby”. Secure Shell – vı´ce o ssh v sekci ”4.7.2 OpenSSH, SSH”.
22
2. Za´kladnı´ hardening GNU/Linuxu
talk, ntalk, ytalk Tyto de´moni umozˇn ˇ ujı´ vza´jemnou komunikaci dvou i vı´ce uzˇivatelu˚ na jednom stroji. Tyto sluzˇby jsou opeˇt loka´lneˇ na´chylne´ vu˚cˇi u ´ toku˚m DoS a vzhledem k existenci modernı´ch komunikacˇnı´ch protokolu˚ jako ICQ, ICR, Jabber, apod. je zbytecˇne´ tyto sluzˇby povolovat.
rwhod De´mon rwhod umozˇn ˇ uje vzda´lene´mu uzˇivateli zjistit, kdo je v syste´mu prˇihla´sˇen. I kdyzˇ lze sluzˇbu rwhod (k neˇmu prˇ´ıslusˇny´ prˇ´ıkaz rwho) pouzˇ´ıvat jen na mı´stnı´ sı´ti, nemeˇli bychom tohoto de´mona pousˇteˇt. Lze ho zneuzˇ´ıt naprˇ´ıklad k zjisˇt’ova´nı´ jmen uzˇivatelu˚.
rwalld Tento de´mon umozˇn ˇ uje vzda´lene´mu uzˇivateli posı´lat zpra´vy, ktere´ budou vypisova´ny na obrazovka´ch vsˇech uzˇivatelu˚. Riziko je zrˇejme´ a je tı´m je opeˇt neodolnost vu˚cˇi u ´ toku odeprˇenı´ sluzˇby.
TFTP TFTP (Trivial FTP) je protokol navrzˇeny´ prˇed mnoha lety, kdy byla snaha vytvorˇit protokol podobny´ FTP pro zava´deˇnı´ syste´mu prˇes sı´t’ u pocˇ´ıtacˇu˚ bez loka´lnı´ho disku. To jizˇ dnes ztra´cı´ vy´znam, takzˇe je zbytecˇne´ tento nebezpecˇny´ protokol protokol pouzˇ´ıvat. Na´hradou mu˚zˇe by´t protokol FTP, ktery´ ovsˇem nenı´ v dnesˇnı´ dobeˇ take´ bezpecˇny´. Proto se doporucˇuje pouzˇ´ıvat program sftp, ktery´ je soucˇa´stı´ balı´ku SSH2.
X window Pouzˇ´ıvanı´ X Window znamena´ opravdu obrovske´ bezpecˇnostnı´ riziko. Kdyzˇ rˇeknu, zˇe X Window majı´ prˇ´ıstup ke kazˇde´mu stisknutı´ kla´ves od vsˇech uzˇivatelu˚ a k vesˇkere´mu vy´stupu na obrazovku a beˇzˇ´ı jako root-setuid, tak je ohrozˇenı´ zcela zrˇejme´. Na pocˇ´ıtacˇi, ktery´ slouzˇ´ı jako server, router cˇi firewall by X Window rozhodneˇ beˇzˇet nemeˇla. Na pracovnı´ch stanicı´ch jsou vsˇak veˇtsˇinou nutne´. Abychom zamezili tomu, zˇe se na na´s vetrˇelec skrze X Window prˇipojı´, musı´me omezit prˇ´ıstup na firewallu nebo spousˇteˇt X Window prˇes ssh.
Emula´tory Do te´to skupiny programu˚ rˇadı´m prˇedevsˇ´ım software VMware, Win4Lin, Wine, Winex, DOSemu, atd. Tyto programy umozˇn ˇ ujı´ provozovat cizı´ operacˇnı´ syste´m (nebo jen cizı´ program) na syste´mu, kde emula´tor beˇzˇ´ı (v nasˇem prˇ´ıpadeˇ tedy 23
2. Za´kladnı´ hardening GNU/Linuxu
GNU/Linux). K tomu, aby toto mohlo fungovat je potrˇeba, aby tyto programy emulovaly hardware, k cˇemuzˇ potrˇebujı´ by´t spusˇteˇny pod superuzˇivatelem. Cozˇ znamena´, zˇe na´sˇ syste´m nemu˚zˇe by´t bezpecˇneˇjsˇ´ı, nezˇ je spousˇteˇny´ cizı´ operacˇnı´ syste´m, nemluveˇ o chyba´ch v samotny´ch emulovacı´ch programech. Zna´m prˇ´ıpady, kdy bylo potrˇeba tyto programy na GNU/Linuxu pouzˇ´ıvat i na serverove´ straneˇ. Jednalo se prˇedevsˇ´ım o nutnost pouzˇitı´ proprieta´rnı´ch programu˚, pro ktere´ neexistovala na´hrada nebo portace pro GNU/Linux. Ale s na´ru˚stem programu˚ vytva´rˇeny´ch pro OS GNU/Linux se bez teˇchto programu˚ veˇtsˇinou obejdeme.
2.7.1 Exploitova´nı´ smazane´ho programu Na tento proble´m jsem narazil v cˇla´nku 17 , kde je popisova´n proble´m, ktery´ rˇesˇila skupinka administra´toru˚. Zacˇalo to tı´m, zˇe jim neˇkdo kompromitoval syste´m na pra´va superuzˇivatele, na cˇemzˇ nenı´ jesˇteˇ nic divne´ho. Podivneˇjsˇ´ı vsˇak je uzˇ to, zˇe u ´ tocˇnı´k celou akci zopakoval po tom, co byl program aktualizova´n na nejnoveˇjsˇ´ı verzi a byla u neˇj nastavena´ prˇ´ıstupova´ pra´va pouze pro vlastnı´ka a pro ostatnı´ uzˇivatele byla sejmuta. Co je vsˇak nejpodivneˇjsˇ´ı, kdyzˇ spra´vce syste´mu pouzˇil program /bin/rm k odstraneˇnı´ programu a u ´ tocˇnı´k opeˇt syste´m u ´ speˇsˇneˇ napadl skrze tento program. Jak je to mozˇne´? Proble´m je v prˇ´ıkazu rm, ktery´ neodstranı´ celkovy´ obsah souboru na disku, ale pouze zrusˇ´ı odkaz a soubor pak nenı´ viditelny´. Ke vsˇemu u ´ tocˇnı´k da´vno prˇedtı´m, nezˇ spra´vce zjistil, zˇe ma´ aplikace bezpecˇnostı´ chybu, vytvorˇil pevny´ odkaz (angl. hard link), takzˇe prˇi upgradu kernel neuvolnil mı´sto a link vedl opeˇt k stare´mu ko´du aplikace. Celou reakci autora cˇla´nku na tento proble´m naleznete naprˇ´ıklad na stra´nce:
http://cert.uni-stuttgart.de/archive/isn/2003/12/msg00056.html Prevencı´ je pouzˇ´ıva´nı´ programu˚ pro kontrolu integrity, ktere´ doka´zˇ´ı kontrolovat odkazy nebo umist’ovat pro uzˇivatele zapisovatelne´ adresa´rˇe na jiny´ oddı´l a tı´m zabra´nit vytva´rˇenı´ odkazu˚.
2.8 Udrz ˇova´nı´ aktua´lnı´ch verzı´ softwaru Samozrˇejmeˇ i v GNU/Linuxu se nacha´zejı´ chyby – jinak by tato pra´ce snad ani nemohla vzniknout. Kazˇdou chvı´li jsou nacha´zeny chyby v softwaru nebo samotny´ch ja´drech operacˇnı´ch syste´mu˚. Mu˚zˇe se jednat o ru˚zneˇ za´vazˇne´ chyby. Neˇktere´ chyby mohou ve´st rovnou k zı´ska´nı´ nejvysˇsˇ´ıch opra´vneˇnı´, neˇktere´ naprˇ´ıklad k zı´ska´nı´ pra´v skupiny man. Da´le bychom mohli rozdeˇlit chyby na loka´lneˇ a vzda´leneˇ zneuzˇitelne´. Loka´lneˇ zneuzˇitelne´ chyby jsou chyby, ktery´ch lze zneuzˇ´ıt 17
http://www.hackinglinuxexposed.com/articles/20031214.html
24
2. Za´kladnı´ hardening GNU/Linuxu
pouze v prˇ´ıpadeˇ, pokud ma´me na dane´m syste´mu uzˇivatelske´ konto. Vzda´leneˇ zneuzˇitelne´ chyby pak mu˚zˇe zneuzˇ´ıt prakticky kdokoliv vzda´leneˇ. Minimem, ktere´ by kazˇdy´ linuxovy´ administra´tor meˇl splnit, je pravidelna´ instalace bezpecˇnostnı´ch za´plat (angl. patches). V prˇ´ıpadeˇ veˇtsˇ´ıch distribucı´ jsou tyto za´platy veˇtsˇinou pravidelneˇ umist’ova´ny na jejich stra´nka´ch. Pokud ma´te neˇjaky´ software, ktery´ prˇ´ımo neposkytuje vasˇe distribuce, je potrˇeba sledovat domovske´ stra´nky dane´ho softwaru. Spoustu informacı´ o aktua´lnı´ch proble´mech lze take´ nale´zt ve specializovany´ch konferencı´ch a posˇtovnı´ch konferencı´ch (mailing listech). Jednou z nejzna´meˇjsˇ´ıch konferencı´, kde je probı´ra´na problematika bezpecˇnosti, je konference Bugtraq 18 . Po aplikova´nı´ za´platy nenı´ veˇtsˇinou potrˇeba restartovat syste´m, kromeˇ aplikace neˇktery´ch jaderny´ch za´plat.
2.9 Editace banneru ˚ Bannery znacˇ´ıme zpra´vy, ktere´ se zobrazı´ jake´mukoliv i cizı´mu uzˇivateli prˇi pokusu o prˇihla´sˇenı´ do syste´mu. V GNU/Linuxu se jedna´ zejme´na o soubory /etc/issue a /etc/issue.net. V teˇchto souborech cˇasto prozrazujeme citlive´ informace jako naprˇ´ıklad pouzˇ´ıvanou verzi linuxove´ho ja´dra nebo co jsme vu˚bec za instituci. Toto samozrˇejmeˇ mu˚zˇe u ´ tocˇnı´ka motivovat k napadenı´ nasˇeho syste´mu – naprˇ´ıklad pokud v teˇchto souborech upozorn ˇ ujeme na to, zˇe se jedna´ o akademicky´ veˇdecky´ server – to uzˇ by mohlo neˇkoho zajı´mat. Informace o tom, jake´ ja´dro (nebo obecneˇji jaky´ operacˇnı´ syste´m) pouzˇ´ıva´me, je pro u ´ tocˇnı´ka cenna´ informace. Samozrˇejmeˇ bychom meˇli vhodny´m zpu˚sobem editovat bannery i u subsyste´mu˚ – FTP server, SMTP server, atd. U FTP serveru˚ se nacha´zejı´ bannery v souboru ~ftp/welcome.msg nebo ~ftp/.message. K prˇecˇtenı´ banneru˚ mu˚zˇe vetrˇelec jednodusˇe pouzˇ´ıt telnet, ktery´m se prˇipojı´ k pocˇ´ıtacˇi na portu prˇ´ıslusˇ´ıcı´ dane´ sluzˇbeˇ. Bannery jsou crackery cˇasto vyuzˇ´ıva´ny k hromadny´m u ´ toku˚m na servery, kdy jsou pomocı´ skriptu˚ cˇi programu˚ proskenova´ny sˇiroke´ rozsahy IP adres a jejich bannery jsou filtrova´ny podle vy´skytu urcˇite´ho rˇeteˇzce – naprˇ´ıklad rˇeteˇzec ”Sendmail 8.12.10”, podle ktere´ho bychom mohli zı´skat databa´zi stroju˚ pouzˇ´ıvajı´cı´ch pra´veˇ tuto verzi programu Sendmail. Pokud je tato verze deˇrava´, mu˚zˇe cracker velmi efektivneˇ napadat nalezene´ servery. Nebo si mu˚zˇe vytvorˇit jakousi databa´zi a uchova´vat v nı´ bannery softwaru, da´vno prˇedtı´m nezˇ se v neˇm objevı´ chyba a pokud se objevı´ chyba v urcˇite´m softwaru, mu˚zˇe si jednodusˇe prohledat svojı´ databa´zi, jestli na´hodou neobsahuje neˇjaky´ server s touto deˇravou verzı´ softwaru. 18
Archiv konference prˇ´ıstupny´ z webu: http://www.securityfocus.com/archive/1
25
2. Za´kladnı´ hardening GNU/Linuxu
Obrana je jasna´ a to odstranit bannery nebo v nich neprozrazovat zˇa´dne´ konkre´tnı´ informace. Silneˇjsˇ´ı povahy mohou modifikovat bannery tak, zˇe se budou tva´rˇit jako jina´ verze softwaru cˇi u ´ plneˇ jiny´ operacˇnı´ syste´m. Samozrˇejmeˇ toto nenı´ stoprocentnı´ ochrana, protozˇe jsou jine´ techniky, ktery´mi lze skutecˇneˇ pouzˇ´ıvany´ software poznat. Ma´m na mysli prˇedevsˇ´ım metodu rozpozna´va´nı´ tzv. otisku˚ (angl. fingerprints). Osveˇdcˇeny´ je naprˇ´ıklad program Xprobe2 19 k rozpozna´va´nı´ operacˇnı´ch syste´mu˚. K tomuto u ´ kolu mu˚zˇe dobrˇe poslouzˇit i du˚veˇrneˇ zna´my´ Nmap20 . Samozrˇejmeˇ mu˚zˇete obelstı´t i tuto crackerovu metodu, protozˇe existujı´ programy, ktere´ doka´zˇ´ı tyto otisky simulovat 21 .
2.10 Proble´m adresa´ˇre /lost+found Distribuce Red Hat (cˇi Fedora), Mandrake a Slackware a dalsˇ´ı vytva´rˇejı´ v soucˇasny´ch verzı´ch adresa´rˇ /lost+found s prˇ´ıstupovy´mi pra´vy 755. Do tohoto adresa´rˇe se ukla´dajı´ prˇ´ıpadne´ ztracene´ soubory nalezene´ programem fsck po na´hle´m pa´du syste´mu. Souborovy´ syste´m Ext2 totizˇ nema´ zˇurna´l, ktery´ te´to uda´losti doka´zˇe prˇedcha´zet. Proble´m je, zˇe tomuto adresa´rˇi je povolen prˇ´ıstup pro vsˇechny ˇ esˇenı´m je restrikce pra´v na mo´d 700 nebo pouzˇ´ıva´nı´ zˇurna´lovacı´ch uzˇivatele. R souborovy´ch syste´mu˚ – naprˇ´ıklad Ext3.
2.11 Volba bezpec ˇny ´ ch hesel Pokud budete vy a vasˇi uzˇivatele´ pouzˇ´ıvat slaba´ syste´mova´ hesla, velmi usnadnı´te u ´ tocˇnı´kovi prˇ´ıstup do vasˇeho syste´mu, protozˇe je to jedna z veˇcı´, kterou crackerˇi zkousˇejı´ nejdrˇ´ıve. Pokud se bude jednat o slabe´ heslo ke kontu superuzˇivatele, je situace alarmujı´cı´. Heslo by meˇla zna´t opravdu jen osoba (mu˚zˇe by´t i vı´ce osob), ktera´ ma´ opra´vneˇnı´ ho pouzˇ´ıvat a samozrˇejmeˇ by nemeˇlo by´t lehce uhodnutelne´. Cracker mu˚zˇe vasˇe heslo podrobit slovnı´kove´mu u ´ toku nebo u ´ toku hrubou silou, kde veˇtsˇinou za´lezˇ´ı na de´lce a slozˇitosti (paleteˇ pouzˇity´ch znaku˚) hesla, jak bude odolne´ – cˇ´ım delsˇ´ı a slozˇiteˇjsˇ´ı, tı´m de´le bude trvat crackerovi prolomenı´ tohoto hesla. Existujı´ i dalsˇ´ı specializovane´ u ´ toky.
2.11.1 Kontrola hesel uz ˇ ivatelu ˚ Jednı´m ze zpu˚sobu˚, jak kontrolovat to, zdali si uzˇivatel zvolil bezpecˇne´ heslo, je ten, zˇe se vzˇijeme do role crackera a pokusı´me se hesla uzˇivatelu˚ prolomit. K tomu mu˚zˇeme pouzˇ´ıt naprˇ´ıklad program John the Ripper 22 . Samozrˇejmeˇ za´lezˇ´ı na 19
http://www.sys-security.com/html/projects/X.html http://www.insecure.org/nmap/ 21 Tzv. honeypots – naprˇ. Honeyd – http://www.honeyd.org/ 22 http://www.openwall.com/john/ 20
26
2. Za´kladnı´ hardening GNU/Linuxu
vy´pocˇetnı´m vy´konu pocˇ´ıtacˇe, ktery´ by u ´ tocˇnı´k pouzˇil, ale urcˇity´ obra´zek o stavu hesel uzˇivatelu˚ na nasˇem syste´mu si mu˚zˇeme udeˇlat. Jen bych chteˇl upozornit, zˇe k tomuto kroku byste si meˇli vyzˇa´dat pı´semny´ souhlas vasˇich nadrˇ´ızeny´ch, abyste se sami nedostali do proble´mu˚. Existujı´ i moduly do programu passwd, ktere´ se snazˇ´ı automaticky heslo uzˇivatele prolomit. Dalsˇ´ı mozˇnostı´ je pouzˇ´ıt knihovnu cracklib z PAM 23 . Tato knihovna analyzuje hesla a snazˇ´ı se je prolomit. Pokud chceme tuto mozˇnost aktivovat, je potrˇeba do souboru /etc/pam.d/passwd napsat:
passwd password requisite /usr/lib/security/pam_cracklib.so retry=3 passwd password required /usr/lib/security/pam_pwdb.so use_authtok Na mnou pouzˇ´ıvane´m Slackware Linuxu je jesˇteˇ potrˇeba nainstalovat prˇ´ıslusˇny´ slovnı´k a zapsat do souboru /etc/login.defs:
CRACKLIB_DICPATH /var/cache/ceacklib/cracklib_dict V akademicke´m prostrˇedı´, kde se prˇirozeneˇ vyskytuje mnoho uzˇivatelu˚ (ktere´ navı´c o informacˇnı´ bezpecˇnosti nemusı´ nic veˇdeˇt), je velmi pravdeˇpodobne´, zˇe se naleznou uzˇivatele´ (nejen studenti), kterˇ´ı budou mı´t lehce uhodnutelna´ nebo slaba´ hesla. Abychom zabra´nili z toho plynoucı´m nezˇa´doucı´m du˚sledku˚m, je potrˇeba tyto jedince donutit k pouzˇ´ıva´nı´ bezpecˇny´ch hesel (nebo striktneˇ slaba´ hesla nepovolovat) a take´ samotne´mu zacha´zenı´ s tı´mto heslem, cozˇ by meˇlo by´t zmı´neˇno v prˇ´ıpadne´ bezpecˇnostnı´ politice dane´ sı´teˇ.
2.12 Prˇ´ıznaky prˇipojova´nı´ Samotne´mu prˇ´ıkazu mount nebo v souboru /etc/fstab mu˚zˇeme definovat prˇ´ıznaky (angl. flags) pro zvy´sˇenı´ bezpecˇnosti. Prvnı´m prˇ´ıznakem je nodev, ktery´ rˇekne ja´dru, aby nerozpozna´valo zˇa´dne´ soubory zarˇ´ızenı´. Toto je uzˇitecˇne´ prˇedevsˇ´ım u jednotek CD- cˇi DVD- ROM nebo NFS. Dalsˇ´ım flagem je noexec, ktery´ zaka´zˇe na prˇ´ıslusˇne´m oddı´lu prova´deˇnı´ spustitelny´ch souboru˚, ktere´ vyvola´va´ ja´dro. Prˇ´ıznak nosuid zaprˇ´ıcˇinı´ to, zˇe nebudou akceptova´ny prˇ´ıznaky set-UID a set-GID. Prˇ´ıznakem ro se prˇipojı´ dany´ oddı´l pouze pro cˇtenı´. 23
Vı´ce o PAM v sekci ”3.1 PAM”.
27
2. Za´kladnı´ hardening GNU/Linuxu
2.12.1 Prˇipojova´nı´ /boot s prˇ´ıznakem ro Jak uzˇ jsem probı´ral v sekci ”2.1 Spra´vne´ nastavenı´ prˇ´ıstupovy´ch pra´v”, adresa´rˇ /boot by meˇl mı´t prˇ´ıstupova´ pra´va jen pro cˇtenı´. Pokud ma´me tento adresa´rˇ na zvla´sˇtnı´m oddı´lu, cozˇ je relativneˇ cˇaste´, mu˚zˇeme elegantneˇ vyuzˇ´ıt prˇ´ıznak ro a docı´lit tak stejne´ho efektu.
2.13 Odstrane ˇ nı´ stary ´ ch u ´c ˇtu ˚ Jak studenti (zameˇstnanci) prˇicha´zejı´ a dosta´vajı´ konta, tak take´ odcha´zejı´ a ˇ ´ım vı´ce u konta by jim meˇla by´t odstran ˇ ova´na. C ´ cˇtu˚ v syste´mu, tı´m veˇtsˇ´ı je riziko, zˇe se prˇes neˇ do syste´mu neˇkdo dostane. Proto bychom kazˇde´ konto, ktere´ jizˇ v nasˇem syste´mu nema´ co deˇlat, meˇli odstranit – vcˇetneˇ uzˇivatelova domovske´ho adresa´rˇe a vsˇech souboru˚, jejichzˇ je vlastnı´kem a dalsˇ´ıch za´znamu˚ naprˇ´ıklad v aplikacı´ch pro elektronickou posˇtu.
2.14 /etc/aliases Tento soubor umozˇn ˇ uje nastavit jine´ uzˇivatelske´ jme´no u konta nezˇ u e-mailove´ adresy. Toto se hodı´, pokud nechceme, aby se neˇkdo jednodusˇe dozveˇdeˇl na´zev konta na nasˇem syste´mu, u ktere´ho by mohl naprˇ´ıklad zkousˇet uhodnout heslo. Obecneˇ platı´ pravidlo, zˇe cˇ´ım me´neˇ informacı´ o sobeˇ (obecneˇ o pocˇ´ıtacˇ´ıch, pouzˇ´ıvany´ch sluzˇba´ch a softwaru, uzˇivatelı´ch, atd.) prozradı´me, tı´m vysˇsˇ´ı bezpecˇnost zajistı´me. Samozrˇejmeˇ toto platı´ pouze pokud se nacha´zı´ posˇtovnı´ server a uzˇivatelska´ konta na jednom stroji. V akademicke´m prostrˇedı´, kde se veˇtsˇinou volı´ jme´no uzˇivatelske´ho podle skutecˇne´ho jme´na studenta (a ostatnı´ch zameˇstnancu˚), nenı´ teˇzˇke´ odhadnout uzˇivatelske´ jme´no podle skutecˇne´ho jme´na uzˇivatele. Je k tomu vsˇak potrˇeba zna´t formu tohoto uzˇivatelske´ho jme´na (naprˇ. josef.k, josef.kadlec, apod.). Vu˚bec nejlepsˇ´ı je pouzˇ´ıt formu, ktera´ by se nedala jednodusˇe odhadnout – to mu˚zˇeme docı´lit prˇida´nı´m na´hodne´ho cˇ´ısla (naprˇ. josef.kadlec638, apod.). A abychom zbytecˇneˇ neprozrazovali tuto formu nebo samotne´ uzˇivatelske´ jme´no, je vhodne´ pouzˇ´ıt soubor /etc/aliases.
2.15 /etc/mailcap Jedna´ se o metasoubor voleb posˇty a veˇtsˇina posˇtovnı´ch klientu˚ ho pouzˇ´ıva´. Obsahuje informace o zpracova´nı´ jednotlivy´ch datovy´ch typu˚ ve zpra´va´ch. Proble´m je v tom, zˇe na´sˇ pecˇliveˇ zkonfigurovany´ soubor mu˚zˇe kazˇdy´ uzˇivatel potlacˇit vytvorˇenı´m souboru .mailcap, cozˇ mu˚zˇe by´t nezˇa´doucı´. Obrana mu˚zˇe by´t
28
2. Za´kladnı´ hardening GNU/Linuxu
takova´, zˇe nainstalujeme na´sˇ .mailcap do domovsky´ch adresa´rˇu˚ uzˇivatelu˚ a nastavı´me jim prˇ´ıznak nezmeˇnitelnosti prˇ´ıkazem chattr +i /home/*/.mailcap. Uzˇivatel vsˇak mu˚zˇe nastavit jine´ umı´steˇnı´ pomocı´ syste´move´ promeˇnne´ $MAILCAPS. Takzˇe bychom zase museli nastavit bit nezmeˇnitelnosti i pro soubory prˇ´ıkaˇ esˇenı´m mu˚zˇe by´t pravidelne´, zautomatizovane´ kontrolova´nı´ zove´ho interpretu. R teˇchto faktoru˚ a jejich na´sledne´ odstran ˇ ova´nı´. Nebo pouzˇ´ıt klienta, ktery´ soubor /etc/mailcap nepouzˇ´ıva´.
2.16 Bezpec ˇne´ odstran ˇ ova´nı´ souboru ˚ Uzˇ jsme se o te´to problematice lehce zmı´nil v sekci ”2.7.1 Exploitovani smazane´ho programu”. Proble´m je v tom, zˇe kdyzˇ v GNU/Linuxu (na souborove´m syste´mu Ext2 nebo Ext3) vymazˇete soubor, Linux pouze oznacˇ´ı datove´ bloky, ktere´ soubor zabı´ral, jako volne´, ale skutecˇny´ obsah na disku sta´le je, dokud ho neprˇepı´sˇe neˇjaky´ jiny´. To si mu˚zˇeme oveˇrˇit prˇ´ıkazem grep, ktery´ prohleda´va´ neforma´tovane´ diskove´ zarˇ´ızenı´ a hleda´ v blocı´ch va´mi nadefinovany´ text. Jednı´m ze zpu˚sobu˚, jak odstranit obsah souboru˚, ktere´ jsme jizˇ smazali, je zaplneˇnı´ volne´ kapacity disku. To lze prove´st naprˇ´ıklad prˇ´ıkazem:
cat /dev/urandom » velky_soubor Tento prˇ´ıkaz zacˇne plnit soubor velky_soubor na´hodny´mi znaky ze zarˇ´ızenı´ /dev/urandom a tı´m dojde postupneˇ k zaplneˇnı´ cele´ho oddı´lu. Je trˇeba si da´vat pozor na limity, ktery´mi mu˚zˇeme mı´t urcˇenou maxima´lnı´ velikost souboru. Velikost souboru take´ urcˇuje souborovy´ syste´m Ext2 a to na hodnotu 2 GB, takzˇe v prˇ´ıpadeˇ oddı´lu, ktery´ je veˇtsˇ´ı nezˇ 2 GB, je potrˇeba vytvorˇit souboru˚ s na´hodny´mi znaky vı´ce, nezˇ dojde k u ´ plne´mu zaplneˇnı´ kapacity oddı´lu. Toto je ovsˇem zejme´na u ´ cˇinne´, pokud tento soubor vytva´rˇ´ıme s pra´vy superuzˇivatele. Jen bych chteˇl upozornit, zˇe zaplneˇnı´m cele´ diskove´ kapacity, mu˚zˇete ohrozit neˇktere´ beˇzˇ´ıcı´ procesy a proto by toto meˇlo by´t vykona´vane´, pokud zrovna nenı´ nikdo prˇihla´sˇen v syste´mu.
29
Kapitola 3
Pokroc ˇily ´ hardening GNU/Linuxu Tato kapitola se veˇnuje pokrocˇilejsˇ´ım technika´m zabezpecˇova´nı´ operacˇnı´ho syste´mu GNU/Linux.
3.1 PAM Mysˇlenka modulu˚ PAM (Pluggable Authentication Modules) spocˇ´ıva´ v tom, zˇe mı´sto toho, aby urcˇita´ aplikace cˇetla soubor s hesly, pozˇa´da´ PAM, aby autorizaci provedl. PAM umozˇn ˇ ujı´ komplexneˇjsˇ´ı autorizaci nezˇ jednoduche´ oveˇrˇenı´ hesla a hlavneˇ celou operaci oveˇrˇova´nı´ uzˇivatele deˇlajı´ univerza´lnı´ a aplikace si tyto moduly mohou pouze volat a nemusejı´ si vytva´rˇet sve´ vlastnı´ oveˇrˇovacı´ metody, ktere´ by mohly by´t nekvalitnı´. Pokud aplikace potrˇebuje autorizovat uzˇivatele, tak se nejprve snazˇ´ı najı´t prˇ´ıslusˇnou funkci v konfiguracˇnı´ch souborech dane´ aplikace. Pokud tam zˇa´dne´ nejsou, pouzˇije se implicitnı´ konfiguracˇnı´ soubor modulu˚ PAM, kde aplikace dostane instrukce, jak ma´ autorizaci prove´st. Aplikace se pak dozvı´, jestli byl uzˇivatel u ´ speˇsˇneˇ autorizova´n, cˇi nikoliv. Konfiguracˇnı´ soubory modulu˚ PAM jsou umı´steˇny implicitneˇ v adresa´rˇi /etc/ pam.d. Vyhodnocova´nı´ v teˇchto souborech probı´ha´ po rˇa´dcı´ch – tzn. zˇe na kazˇde´m rˇa´dku probı´ha´ urcˇite´ krite´rium oveˇrˇova´nı´ uzˇivatele. Kazˇdy´ soubor ma´ na´sledujı´cı´ tvar:
module_type control_flag module_path arguments Module_type mu˚zˇe by´t jedna ze cˇtyrˇ hodnot. Prvnı´ je hodnota Auth, ktera´ prˇikazuje aplikaci, aby vyzvala uzˇivatele k zada´nı´ hesla a udeˇluje pra´va uzˇivatelu˚ a skupin. Druhou hodnotou je Account, ktera´ prova´dı´ oveˇrˇova´nı´ na za´kladeˇ jiny´ch vlastnostı´ nezˇ je heslo a to naprˇ´ıklad cˇas nebo mı´sto (konsole, apod.). Dalsˇ´ı hod30
3. Pokrocˇily´ hardening GNU/Linuxu
notou je Session, ktera´ urcˇuje, jaka´ akce se ma´ prove´st prˇed a po prˇihla´sˇenı´ uzˇivatele. A poslednı´ modul Password, umozˇn ˇ uje uzˇivateli zmeˇnu hesla.
Control_flag na´m umozˇn ˇ uje urcˇit, jak bude nalozˇeno s u ´ speˇchem, cˇi neu ´ speˇchem autorizace dane´ho modulu. Mu˚zˇe naby´vat hodnoty Required, cozˇ znamena´, zˇe autorizace musı´ by´t provedena u ´ speˇsˇneˇ. Druhou hodnotou je Requisite, ktera´ je podobna´ hodnoteˇ Require s tı´m rozdı´lem, zˇe prˇi neu ´ speˇchu se dalsˇ´ı moduly nevolajı´ a aplikace dostane zpra´vu o neu ´ speˇchu autorizace. Hodı´ se, pokud chceme oveˇrˇit urcˇite´ faktory jesˇteˇ prˇed prˇihla´sˇenı´m uzˇivatele. Dalsˇ´ı hodnotou je Sufficient, ktera´ v prˇ´ıpadeˇ u ´ speˇchu a toho, zˇe se v souboru nenacha´zejı´ dalsˇ´ı prˇ´ıznaky Required nebo Sufficient, vra´tı´ u ´ speˇch. Poslednı´m prˇ´ıznakem je Optional, ktery´ dovoluje i v prˇ´ıpadeˇ neu ´ speˇchu kontrolovat dalsˇ´ı moduly. Module_path urcˇuje platnou cestu do adresa´rˇe modulu. Kompletnı´ seznam modulu˚ naleznete na adrese: http://www.kernel.org/pub/linux/libs/pam Arguments mu˚zˇe u kazˇde´ho modulu naby´vat jiny´ch voleb, proto zde uvedu jen ty, ktere´ jsou pro vsˇechny spolecˇne´. Prˇ´ıznak Debug zası´la´ informace o ladeˇnı´ programu do logovacı´ho syste´mu. Volba no_warn zajistı´, aby se aplikaci neprˇedala zˇa´dna´ varovna´ zpra´va. Use_first_pass zabra´nı´ tomu, aby bylo heslo po uzˇivateli pozˇadova´no dvakra´t. Prˇi volbeˇ try_first_pass bude pozˇadova´no opeˇtovne´ zada´nı´ hesla pouze v prˇ´ıpadeˇ, zˇe prvnı´ heslo vra´tı´ neu ´ speˇch. Use_mapped_pass zaprˇ´ıcˇinı´, zˇe se heslo prˇeda´ z prˇedchozı´ho modulu do aktua´lnı´ho modulu a pouzˇije se k vygenerova´nı´ naprˇ´ıklad sˇifrovacı´ho klı´cˇe. Jizˇ zmı´neˇny´m implicitnı´m souborem, ktery´ se nacˇte pokud aplikace neobsahuje svu˚j konfiguracˇnı´ soubor pro PAM, je /etc/pam.d/other. Pokud budeme chtı´t donutit uzˇivatele, aby zadali bezpecˇne´ heslo o minima´lnı´ de´lce 8 znaku˚, provedeme to u ´ pravou souboru /etc/pam.d/passwd, ktery´ by mohl vypadat neˇjak takto:
auth required /lib/security/pam_stack.so service=system-auth account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_cracklib.so retry=3D3 minlen=8 password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow password required /lib/security/pam_deny.so Kromeˇ beˇzˇne´ rutiny je du˚lezˇity´ prˇedevsˇ´ım trˇetı´ rˇa´dek, kde je pouzˇita PAM knihovna cracklib k oveˇrˇenı´ prolomitelnosti hesla a take´ minima´lnı´ de´lky hesla. Ovsˇem funguje tu tzv. kreditnı´ syste´m. Tzn. zˇe de´lka urcˇena´ prˇ´ıznakem minlen je 31
3. Pokrocˇily´ hardening GNU/Linuxu
do jiste´ mı´ry dynamicka´. Pokud naprˇ´ıklad pouzˇijete v hesle jako jeden ze znaku˚ cˇ´ıslici nebo nealfanumericky´ znak, zkra´tı´ se va´m povinna´ minima´lnı´ de´lka hesla o jeden znak, takzˇe budete moci zmeˇnit heslo, i kdyzˇ jeho skutecˇna´ de´lka nebude dosahovat hodnoty urcˇene´ prˇ´ıznakem minlen. Pokud uzˇivatel nezada´ spra´vne´ heslo, nebude mu dovoleno toto heslo zmeˇnit. Pro u ´ plnost bych meˇl jesˇteˇ dodat, jak bude vypadat soubor /etc/pam.d/system-auth:
auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so likeauth nullok auth required /lib/security/pam_deny.so account required /lib/security/pam_unix.so session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so Je nutno upozornit, zˇe superuzˇivatel root mu˚zˇe by´t vu˚cˇi teˇmto omezenı´m imunnı´. To zˇe superuzˇivatel mu˚zˇe ledacos prˇepsat nebo obejı´t je takova´ vlastnost vsˇech operacˇnı´ch syste´mu˚ unixove´ho typu. Jsou k dispozici moduly pro autentizacˇnı´ metody jako naprˇ´ıklad LDAP 1 , SecurID2 , Kerberos3 , atd. PAM na´m umozˇnı´ pouzˇ´ıt ru˚zne´ autentizacˇnı´ metody pro ru˚zne´ sluzˇby, proto se sta´va´ velmi u ´ cˇinny´m autorizacˇnı´m na´strojem, ktery´ lze pouzˇ´ıt prˇi omezova´nı´ uzˇivatelu˚.
3.2 chroot Chroot je zkratka pro ”change root” a je tı´m mysˇleno to, zˇe korˇenovy´ adresa´rˇ je zmeˇneˇny´ nebo spı´sˇe posunuty´. Pomocı´ te´to syste´move´ funkce (resp. stejnojmenne´ho prˇ´ıkazu) mu˚zˇeme vytvorˇit uzavrˇene´ prostrˇedı´, ve ktere´m mu˚zˇeme nechat beˇzˇet nebezpecˇne´ aplikace. Vy´sledek bude takovy´, zˇe dana´ aplikace a nebo vetrˇelec, ktery´ se zmocnı´ dane´ aplikace, uvidı´ pouze soubory v tomto uzavrˇene´m prostrˇedı´ (cozˇ jsou veˇtsˇinou pouze soubory nutne´ k chodu dane´ aplikace) a neohrozı´ tı´m cely´ syste´m, protozˇe k tomu, aby se dostal do skutecˇne´ho korˇenove´ho adresa´rˇe, by musel prˇekonat samotny´ chroot – je zna´mo neˇkolik zpu˚sobu˚, jak toto udeˇlat. Tı´mto zpu˚sobem nemusı´me omezovat jen aplikace, ale i samotne´ domovske´ adresa´rˇe uzˇivatelu˚. K vytvorˇenı´ chroot prostrˇedı´ je nutne´ si nejprve vytvorˇit adresa´rˇ, kam zkopı´rujeme vsˇechny potrˇebne´ knihovny a soubory k beˇhu dane´ aplikace, prˇicˇemzˇ musı´me zachovat strukturu adresa´rˇu˚ – tzn. zˇe v nasˇem vytvorˇene´m adresa´rˇi vytvorˇ´ıme naprˇ´ıklad adresa´rˇ /etc, kam zkopı´rujeme potrˇebne´ soubory, ktere´ byly pu˚vodneˇ 1
http://ldap-abook.sourceforge.net/ http://www.unc.edu/ais/systems/security/securid.html 3 http://web.mit.edu/kerberos/www/ 2
32
3. Pokrocˇily´ hardening GNU/Linuxu
v adresa´rˇi /etc skutecˇne´ho korˇenove´ho adresa´rˇe. A pak je samozrˇejmeˇ nutne´ upravit konfiguracˇnı´ soubory a spousˇteˇcı´ soubory tak, aby pracovaly s novy´m prostrˇedı´m. Do tohoto prostrˇedı´ by meˇly by´t umist’ova´ny prˇedevsˇ´ım problematicke´ sı´t’ove´ sluzˇby jako naprˇ´ıklad BIND nebo Apache. Uzavrˇenı´ domovske´ho adresa´rˇe do prostrˇedı´ chroot mu˚zˇe by´t znacˇneˇ problematicke´, protozˇe je potrˇeba zabra´nit prˇipojenı´ segmentu sdı´lene´ pameˇti vytvorˇeny´ mimo chroot, prˇipojenı´ unixove´ho soketu mimo chroot, ovla´da´nı´ a manipulace procesu˚ mimo chroot, zveda´nı´ priority procesu˚ v chrootu vzhledem k procesu˚m vneˇ chrootu, atd. Neˇktere´ z uvedeny´ch proble´mu˚ mu˚zˇeme rˇesˇit pomocı´ IDS (Intrusion Detection System) jako naprˇ´ıklad grsecurity4 nebo LIDS5 . Omezova´nı´ pomocı´ syscallu chroot() nenı´ zas azˇ tak beˇzˇne´, protozˇe konfigurace programu˚, ktere´ se beˇzˇneˇ v chroot prostrˇedı´ nepousˇteˇjı´, nemusı´ by´t vu˚bec bezproble´mova´. Druhy´m proble´mem je to, zˇe udeˇlat chroot prostrˇedı´ opravdu bezpecˇne´ nenı´ zase azˇ tak lehke´ a v minulosti se nasˇlo pa´r zpu˚sobu˚, jak se z prostrˇedı´ chroot vymanit a na teˇchto chyba´ch bylo zalozˇeno naprˇ´ıklad exploitova´nı´ FTP serveru wu-ftpd v2.4.2-beta18 6 . K vytva´rˇenı´ chroot prostrˇedı´ lze take´ vyuzˇ´ıt nadstavbu a tou je Jail 7 . K zajisˇteˇnı´ vysˇsˇ´ı bezpecˇnosti se jisteˇ vyplatı´ nechat neˇktere´ sluzˇby jako naprˇ´ıklad web server cˇi name server beˇzˇet v chroot prostrˇedı´, ale pro akademicke´ sı´teˇ bych videˇl nejveˇtsˇ´ı vy´hodu v tom, zˇe mu˚zˇeme jednotlive´ uzˇivatele uzamknout do tohoto prostrˇedı´ a tı´m jim vlastneˇ zabra´nit v pohybu mimo jejich domovsky´ adresa´rˇ. Tito uzˇivatele´ jsou pak u ´ plneˇ izolova´ni od samotne´ho syste´mu a to jim bra´nı´ v zı´ska´va´nı´ informacı´ o tomto syste´mu – takzˇe i v prˇ´ıpadne´ nekale´ cˇinnosti.
3.3 Openwall patch Zkra´ceneˇ rˇecˇeno, Openwall patche 8 by meˇly rˇesˇit jiste´ bezpecˇnostnı´ proble´my na u ´ rovni ja´dra za u ´ cˇelem zvy´sˇenı´ bezpecˇnosti. Prˇi aplikova´nı´ za´platy a na´sledne´ konfiguraci kompilace ja´dra se volby za´platy Openwall objevı´ v sekci ”Security Options”. V nyneˇjsˇ´ı dobeˇ lze tento patch aplikovat na linuxova´ ja´dra rˇady 2.0, 2.2 a 2.4, prˇicˇemzˇ aktua´lnı´ stabilnı´ ja´dro je jizˇ rˇady 2.6. 4
http://www.grsecurity.net/ http://www.lids.org/ 6 Exploit vyuzˇ´ıvajı´cı´ tuto chybu: http://www.securityfocus.com/archive/1/12962 7 http://www.jmcresearch.com/projects/jail/ 8 http://www.openwall.com/linux/ 5
33
3. Pokrocˇily´ hardening GNU/Linuxu
Za´plata Openwall prˇida´ vlastnosti jako naprˇ´ıklad nespustitelne´ za´sobnı´ky (angl. non-executable user stack area), cozˇ zabra´nı´ spousˇteˇnı´ ko´du umı´steˇne´ho v za´sobnı´ku. Takovy´ ko´d je veˇtsˇinou vytva´rˇen crackery, kterˇ´ı zneuzˇ´ıvajı´ chybu v prˇetecˇenı´ vyrovna´vacı´ pameˇti. Dalsˇ´ı vlastnostı´ je omezenı´ odkazu˚ v adresa´rˇi /tmp – zabran ˇ uje naprˇ´ıklad uzˇivatelu˚m ve vytva´rˇenı´ odkazu˚ na soubory, jejichzˇ nejsou vlastnı´kem a neˇktera´ dalsˇ´ı omezenı´. Dalsˇ´ım omezenı´m v adresa´rˇi /tmp/ je za´kaz vytva´rˇenı´ pojmenovany´ch rour (angl. pipes), ktere´ mohou by´t vyuzˇity k prˇesmeˇrova´nı´ dat mezi uzˇivateli. Da´le jsou upravena prˇ´ıstupova´ pra´va v /proc tak, zˇe uzˇivatele´ nevidı´ procesy jiny´ch uzˇivatelu˚, pokud nejsou ve specia´lnı´ skupineˇ (tohoto lze take´ dosa´hnout naprˇ´ıklad pomocı´ jizˇ zmin ˇ ovane´ho grsecurity). A neˇktera´ dalsˇ´ı bezpecˇnostnı´ vylepsˇenı´ spojena´ prˇedevsˇ´ım se spra´vou pameˇti – naprˇ´ıklad odalokova´nı´ pameˇti, ktera´ nesmeˇrˇuje na zˇa´dny´ proces aj. Samozrˇejmeˇ toto va´s neochra´nı´ na sto procent. Existujı´ exploity, ktere´ v jisty´ch situacı´ch doka´zˇ´ı obejı´t ochrany vytvorˇene´ patchem Openwall. Co se ty´cˇe prˇetecˇenı´ haldy (angl. heap overflow), nenı´ schopen zabra´nit vu˚bec – vyhnu se prˇesne´mu vysveˇtlova´nı´ teˇchto pojmu˚, cozˇ je soucˇa´stı´ nı´zkou ´ rovn ˇ ove´ bezpecˇnosti a tou se v te´to pra´ci nezaby´va´m. Soucˇa´stı´ te´to za´platy je i program stacktest, ktery´m si lze vyzkousˇet, zdali je na´sˇ syste´m na´chylny´ k prˇetecˇenı´ za´sobnı´ku. Po u ´ speˇsˇne´m aplikova´nı´ patche Openwall by jste meˇli po spusˇteˇnı´ programu dostat hla´sˇku ”Segmentation fault” mı´sto ”Succeeded.”, cozˇ znacˇ´ı, zˇe k tomuto u ´ toku na´chylnı´ jste. Do te´to kapitoly mu˚zˇeme zarˇadit i prˇ´ıbuzne´ projekty jako naprˇ´ıklad Medusa DS9 Security Systems9 , LoMaC10 , SELinux11 , RSBAC12 a take´ mnohem komplexneˇjsˇ´ı programy jako LIDS13 , grsecurity14 a dalsˇ´ı.
3.4 Bastille Pu˚vodneˇ meˇla z projektu Bastille 15 vzniknout cela´ linuxova´ distribuce, ktera´ by meˇla jako hlavnı´ prioritu vlastnı´ bezpecˇnost. Ovsˇem to bylo cˇasoveˇ na´rocˇneˇjsˇ´ı, nezˇ autorˇi pu˚vodneˇ zamy´sˇleli a tak radsˇi vytvorˇili sadu modulu˚, ktere´ tenkra´t meˇly upevnit bezpecˇnost noveˇ nainstalovane´ distribuce Red Hat. Tato utilita se vsˇak nynı´ da´ pouzˇ´ıt nejen bezprostrˇedneˇ po instalaci, ale kdykoliv. A jsou jizˇ podporova´ny i jine´ distribuce nezˇ je Red Hat, pro ktery´ byl tento program navrzˇen 9
http://medusa.fornax.sk/ http://opensource.nailabs.com/lomac/ 11 http://www.nsa.gov/selinux/ 12 http://www.rsbac.de/ 13 http://www.lids.org/ 14 http://www.grsecurity.org/ 15 http://www.bastille-linux.org/ 10
34
3. Pokrocˇily´ hardening GNU/Linuxu
pu˚vodneˇ. Bastille lze aplikovat na Mandrake, Debian, SuSE nebo operacˇnı´ syste´my unixove´ho typu jako HP-UX cˇi Mac OS X. Tento program se ovla´da´ se´riı´ textovy´ch menu. Kazˇde´ z teˇchto menu popisuje urcˇitou situaci, kde hrozı´ potenciona´lnı´ bezpecˇnostnı´ riziko a program se va´s pta´, zdali si prˇejete tuto situaci zabezpecˇit. Tato menu se spousˇtı´ skriptem InteractiveBastille.pl. Po projitı´ te´to konfigurace se nastavenı´ ulozˇ´ı do souboru BackEnd.pl. Tento soubor lze pak pouzˇ´ıt na jine´m syste´mu, kde chceme aplikovat stejne´ bezpecˇnostnı´ u ´ pravy. Stacˇ´ı prˇekopı´rovat stary´ BackEnd.pl a spustit skript AutomatedBastille.pl. Bastille nabı´zı´ ochrany jako omezenı´ root-setuid bina´rnı´ch souboru˚, ktere´ bude moci spousˇteˇt pouze superuzˇivatel. Da´le umozˇn ˇ uje nastavit platnost hesla na 180 dnı´. Nabı´dne va´m neˇkolik mozˇnostı´ prˇ´ısneˇjsˇ´ıch nastavenı´ umask. Da´le je umozˇneˇno omezit prˇihlasˇova´nı´ superuzˇivatele root – naprˇ´ıklad ho donutit, aby se nemohl prˇihlasˇovat prˇ´ımo z konzole a musel pouzˇ´ıt program su po prˇihla´sˇenı´ pod beˇzˇny´m uzˇivatelem. Pomocı´ omezenı´ pra´v zamezı´ pouzˇ´ıva´nı´ R* sluzˇeb, pokud se na syste´mu nacha´zejı´. Zvla´sˇteˇ uzˇitecˇnou veˇcı´ je na´vrh omezenı´ uzˇivatelu˚ v pouzˇ´ıva´nı´ na´stroje cron pomocı´ souboru˚ /etc/cron.allow a /etc/cron.deny. Take´ umozˇn ˇ uje pouzˇ´ıt heslo v zavadeˇcˇi syste´mu (pokud ma´te fyzicky´ prˇ´ıstup k pocˇ´ıtacˇi) – toto je za´lezˇitost prˇedevsˇ´ım fyzicke´ bezpecˇnosti. Pokud by totizˇ meˇl u ´ tocˇnı´k prˇ´ıstup k vasˇemu pocˇ´ıtacˇi, mohl by nabootovat jiny´ operacˇnı´ syste´m naprˇ´ıklad z CD nebo diskety a tı´m se dostat k vasˇim datu˚m. Dalsˇ´ım bezpecˇnostnı´m prvkem, ty´kajı´cı´ se fyzicke´ bezpecˇnosti je ten, zˇe Bastille umozˇn ˇ uje nadefinovat akci, ktera´ se provede po stisknuti kombinace kla´ves Ctrl+Alt+Del. Nadefinovat lze take´ heslo pro jednouzˇivatelsky´ rezˇim. Da´le umozˇn ˇ uje konfiguraci TCP wrappers16 . Bastille va´m take´ pomu˚zˇe editovat bannery, o ktery´ch sem zde jizˇ psal. Da´le mu˚zˇete vypnout telnet, zamezit uzˇivatelu˚m pouzˇ´ıvat kompila´tor, nastavit zabezpecˇenı´ subsyste´mu˚ jako web server, mail server cˇi DNS server a mnohe´ dalsˇ´ı.
3.5 libsafe Knihovna libsafe17 ochra´nı´ na´sˇ syste´m proti prˇetecˇenı´ za´sobnı´ku (angl. buffer overflow), ale ne na u ´ rovni ja´dra, jako tomu je v prˇ´ıpadeˇ za´platy Openwall. Libsafe funguje jako sdı´lena´ knihovna. Jesˇteˇ prˇed spusˇteˇnı´m dane´ho programu se zkontrolujı´ mozˇna´ prˇetecˇenı´ za´sobnı´ku ve funkcı´ch jako strcat(), getwd(), gets(), scanf(), sprintf(), vsprintf(), atd. Vy´hoda je jisteˇ v tom, zˇe nenı´ potrˇeba znovu kompilovat kernel. 16 17
Vı´ce o TCP wrappers v sekci ”4.1 TCP wrappers.” http://www.research.avayalabs.com/project/libsafe/
35
3. Pokrocˇily´ hardening GNU/Linuxu
Podobneˇ funguje i program StackGuard 18 , ktery´m mu˚zˇete zkontrolovat kompilovany´ ko´d. Funguje to tak, zˇe StackGuard vlozˇ´ı specia´lnı´ identifika´tor do za´sobnı´ku prˇed spusˇteˇnı´m funkce. Po spusˇteˇnı´ se zkontroluje integrita tohoto identifika´toru a pokud byl identifika´tor prˇepsa´n, proces se ukoncˇ´ı. Nevy´hodou vsˇak je, zˇe aplikace, ktere´ chcete kontrolovat musı´te kompilovat pra´veˇ pomocı´ programu StackGuard, k cˇemuzˇ potrˇebujete zdrojovy´ ko´d, ktery´ nemusı´te mı´t vzˇdy dostupny´.
ˇ ifrovane´ souborove´ syste´my 3.6 S Toto je prvnı´ kapitola, ktera´ se ty´ka´ problematiky sˇifrova´nı´, proto bychom si meˇli vysveˇtlit, co to je sˇifrova´nı´ a procˇ vlastneˇ sˇifrovat. Sˇ ifrova´nı´ je prostrˇedek ˇ ´ıka´ se, zˇe i kdyby prˇ´ımo urcˇeny´ k rˇesˇenı´ proble´mu˚ spojeny´ch s bezpecˇnostı´. R na´s meˇlo sˇifrova´nı´ sta´t navı´c jednu jednotku strojove´ho cˇasu, impulz internetove´ho prˇipojenı´ nebo jinou protihodnotu, meˇli bychom sˇifrovat. Samozrˇejmeˇ existujı´ prˇ´ıpady, kdy je sˇifrova´nı´ vylozˇeneˇ zbytecˇne´, ale v dnesˇnı´ dobeˇ je mozˇnost sˇifrovat tak dostupna´, zˇe prˇemy´sˇlet o tom, jestli nesˇifrovat je takrˇka zbytecˇna´. Veˇda, ktera´ se zaby´va´ sˇifrova´nı´m – tj. tedy utajova´nı´m informacı´, se nazy´va´ kryptografie. Lusˇteˇnı´m sˇifer se zase zaby´va´ kryptoanaly´za. Obeˇ tyto disciplı´ny se rˇadı´ pod pojem kryptologie. ˇ ifrovane´ souborove´ syste´my jsou urcˇeny k ochraneˇ dat na pevne´m disku. S Pokud neˇkdo zı´ska´ fyzicky´ nebo vzda´leny´ prˇ´ıstup k datu˚m, ktera´ budou tı´mto zpu˚sobem ochra´neˇna, budou pro neˇj necˇitelne´. Tento zpu˚sob je zvla´sˇteˇ vhodny´ pro sˇifrova´nı´ veˇtsˇ´ıho mnozˇstvı´ dat. Dalsˇ´ı sˇifrovacı´ mechanismy, probı´rane´ v kapitole ”4 Bezpecˇnost na u ´ rovni sı´teˇ” jako naprˇ´ıklad GPG 19 , by se pro tento u ´ cˇel prˇ´ılisˇ nehodily. Zasˇifrova´nı´ a rozsˇifrova´nı´ dat by oproti sˇifrovany´m souborovy´m syste´mu˚m trvalo dlouho (v za´vislosti na objemu dat, pouzˇite´ sˇifry a jejı´ sı´ly). To by na´m bra´nilo v pohodlne´m pouzˇ´ıva´nı´ dat. Tento mechanismus sˇifrova´nı´ bude v akademicke´m prostrˇedı´ u ´ cˇinny´ prˇedevsˇ´ım na straneˇ serveru nebo na strojı´ch, ktere´ slouzˇ´ı jako skladisˇteˇ dat. Lze zde chra´nit data nejru˚zneˇjsˇ´ıho typu – od nejru˚zneˇjsˇ´ıch dokumentu˚ azˇ po neˇktere´ syste´move´ soubory, ktere´ chceme zvla´sˇteˇ ochra´nit.
18 19
http://immunix.org/stackguard.html Vı´ce o GPG v sekci ”4.8 GnuPG”.
36
3. Pokrocˇily´ hardening GNU/Linuxu
3.6.1 Linux CryptoAPI Linux CryptoAPI20 je sada kernelovy´ch patchu˚, ktera´ implementuje sˇifrova´nı´ dat na disku, ale i sı´t’ove´ho prˇenosu v podobeˇ IPSec 21 . V ja´drech rˇady 2.6 je jizˇ soucˇa´stı´ (konkre´tneˇ jizˇ v rˇadeˇ 2.5, ktera´ je ovsˇem vy´vojova´). Za´plata (angl. patch), ktery´ obsahuje CryptoAPI (jakozˇto holou implementaci sˇifrovacı´ch algoritmu˚) a dalsˇ´ı potrˇebne´ za´platy, se nazy´va´ patch-int. Tato za´plata obsahuje sˇifry jako AES, Blowfish, DES, GHOST, IDEA, MARS, RC5, RC6, Twofish, 3DES, atd. Da´le take´ hashovacı´ funkce jako naprˇ´ıklad SHA cˇi MD5. Ale take´, pro nasˇe u ´ cˇely velmi potrˇebnou, implementaci loopback zarˇ´ızenı´ (konkre´tneˇ se na´m jedna´ prˇedevsˇ´ım o utilitu losetup), ktera´ je soucˇa´stı´ balı´ku util-linux. Bohuzˇel i v prˇ´ıpadeˇ ja´dra rˇady 2.6, kde je jizˇ CryptoAPI soucˇa´stı´, je nutne´ nainstalovat noveˇjsˇ´ı verzi nebo aplikovat za´platu na prˇ´ıslusˇnou verzi util-linux 22 (toto neplatı´ pouze pro ja´dra 2.4.21 a nizˇsˇ´ı). Prˇi konfiguraci ja´dra v sekci ”Block devices” je potrˇeba povolit prˇ´ıslusˇne´ polozˇky pro loopback zarˇ´ızenı´, ktere´ na´m bude slouzˇit jako mezivrstva nad diskem, pomocı´ ktere´ budeme moci data sˇifrovat – po prˇ´ıslusˇne´m nastavenı´ v sekci ”Cryptography support (CryptoAPI)”. Da´le je potrˇeba povolit ”ramdisk” a ”initrd” (v te´ same´ sekci jako jsme nastavili loopback zarˇ´ızenı´), ktere´ pouzˇijeme jako u ´ lozˇisˇteˇ dat prˇi rozsˇifrova´nı´ oddı´lu. V prˇ´ıpadeˇ potrˇeby mu˚zˇeme povolit podporu pro vı´ce souborovy´ch syste´mu˚. Pokud tedy ma´me kernel 2.4.21 a nizˇsˇ´ı, je potrˇeba samotny´ Vanilla kernel, na ktery´ aplikujeme prˇ´ıslusˇnou za´platu patch-int - naprˇ´ıklad prˇ´ıkazem:
bunzip2 -c ../patch-int-2.4.21.0.bz2 | patch -p1 Povolenı´ prˇ´ıslusˇny´ch polozˇek v konfiguraci kernelu bude vypadat takto (vy´pis z menuconfigu):
Block devices ---> <*> Loopback device support <*> RAM disk support [*] Initial RAM disk (initrd) support Cryptography support (CryptoAPI) <*> CryptoAPI support [*] Cipher Algorithms <*> AES (aka Rijndael) cipher <*> Loop Crypto support [*] Loop IV hack
--->
Pote´ uzˇ jen kernel zkompilujeme a po nabootova´nı´ tohoto ja´dra mu˚zˇeme 20
http://ftp.kerneli.org/pub/linux/kernel/crypto/ Vı´ce o IPSec v sekci ”4.7.1”. 22 http://www.kernel.org/pub/linux/kernel/people/hvr/util-linux-patch-int/ 21
37
3. Pokrocˇily´ hardening GNU/Linuxu
pouzˇ´ıvat podporu CryptoAPI. U kernelu 2.4.22 je situace trochu odlisˇna´. Je zde verze CryptoAPI z jader rˇady 2.6, na kterou je ovsˇem nutne´ pouzˇ´ıt noveˇjsˇ´ı verzi util-linux. Pote´ aplikujeme spra´vnou verzi za´platy cryptoloop (naprˇ´ıklad cryptoloop-jari). Povolenı´ prˇ´ıslusˇny´ch polozˇek ve vy´pisu menuconfigu z konfigurace kernelu bude vypadat takto:
Block devices ---> <*> Loopback device support <*> CryptoLoop support <*> RAM disk support [*] Initial RAM disk (initrd) support Cryptography support (CryptoAPI) <*> CryptoAPI support [*] Cipher Algorithms <*> AES (aka Rijndael) cipher
--->
Na´sleduje samotna´ kompilace kernelu. U kernelu˚ rˇady 2.6 je situace o pozna´nı´ jednodusˇsˇ´ı, protozˇe CryptoAPI je jizˇ jeho soucˇa´stı´. Jak jizˇ bylo rˇecˇeno, je opeˇt potrˇeba pouzˇ´ıt noveˇjsˇ´ı verzi util-linux. Vy´pis menuconfigu by meˇl vypadat takto:
Block devices ---> <*> Loopback device support <*> CryptoLoop support <*> RAM disk support [*] Initial RAM disk (initrd) support Cryptography support (CryptoAPI) --- CryptoAPI support --- Cipher Algorithms <*> AES (aka Rijndael) cipher
--->
Jak si mu˚zˇete vsˇimnout, preferuji sˇifru AES-Rijndael (Advanced Encryption Standard). Vyznacˇuje se vysokou rychlostı´ sˇifrova´nı´ a take´ samotnou sı´lou sˇifrovacı´ho algoritmu. Tı´mto ma´me zprovozneˇne´ CryptoAPI. Nynı´ prˇedvedu za´kladnı´ pouzˇitı´ tohoto mechanismu. Cı´lem bude vytvorˇit sˇifrovany´ svazek na existujı´cı´m oddı´lu nebo vytvorˇit sˇifrovany´ svazek ze samotne´ho oddı´lu. Pomocı´ dd vytvorˇ´ıme prˇ´ıslusˇneˇ velky´ soubor na disku takto:
dd if=/dev/zero of=crypto_file count=100 bs=1M
38
3. Pokrocˇily´ hardening GNU/Linuxu
Vytvorˇili jsme soubor crypto_file o velikosti 100 MB. Nynı´ pouzˇijeme utilitu losetup k aplikova´nı´ sˇifrova´nı´ na na´mi vytvorˇeny´ soubor crypto_file:
losetup /dev/loop2 crypto_file -e aes256 Je videˇt, zˇe jsem vybral pra´veˇ sˇifru AES - Rijndael s velikostı´ sˇifrovacı´ho klı´cˇe 256 bitu˚. Nynı´ jizˇ stacˇ´ı nasˇe looback zarˇ´ızenı´ /dev/loop2 upravit tak, abychom s nı´m mohli pracovat – chova´ se stejneˇ jako jine´ blokove´ zarˇ´ızenı´. Vytvorˇ´ıme na neˇm souborovy´ syste´m:
mke2fs /dev/loop2 Vytvorˇ´ıme naprˇ´ıklad adresa´rˇ /mnt/crypto_dir, do ktere´ho loopback zarˇ´ızenı´ prˇipojı´me:
mkdir /mnt/mnt/crypto_dir; mount /dev/loop2 /mnt/crypto_dir Mı´sto vytvorˇene´ho souboru je vhodneˇjsˇ´ı sˇifrovat cele´ diskove´ oddı´ly – klidneˇ i ˇ ifrovat lze i cely´ korˇenovy´ svazek, ale veˇtsˇinou k uspokojenı´ i vysˇsˇ´ıch oddı´l swap. S na´roku˚ na bezpecˇnost stacˇ´ı zasˇifrovat pouze neˇktere´ svazky jako naprˇ´ıklad /var, /home cˇi swap oddı´l. Prˇipojovat sˇifrovane´ svazky nemusı´me jen pomocı´ losetup, ale i prˇ´ıslusˇny´m za´pisem do souboru /etc/fstab. Pro na´sˇ prˇ´ıklad by jeden rˇa´dek, ty´kajı´cı´ se nasˇeho sˇifrovane´ho oddı´lu, mohl vypadat takto:
/crypto_file /mnt/crypto_dir ext2 noauto,encryption=AES,keybits=256, phash=SHA512 0 0 Dalsˇ´ı velmi zdarˇily´ projekt, ktery´ slouzˇ´ı ke stejne´mu u ´ cˇelu se nazy´va´ loopAES23 . Tato utilita slouzˇ´ı pouze k sˇifrova´nı´ souborovy´ch syste´mu˚ a pouzˇ´ıva´ k tomu sˇifru AES - Rijndael. Implementace pro procesory x86 je prˇ´ımo v assembleru, takzˇe je velmi rychla´. Prˇesny´ postup, jak pomocı´ loop-AES sˇifrovany´ oddı´l vytvorˇit naleznete v me´m dvojcˇla´nku Cryptoroot pro nejvysˇsˇ´ı bezpecˇnost 24 , ktery´ va´s provede cely´m procesem krok za krokem. Ovsˇem s aktua´lnostı´ linuxovy´ch jader rˇady 2.6 nutno zmı´nit, zˇe se zacˇ´ına´ od cryptoloopu, ktery´ nebyl u ´ plneˇ tak bezchybny´, upousˇtet a nahrazuje ho dm-crypt 25 . Nakonec bych chteˇl upozornit na to, zˇe v souvislosti s sˇifrovany´mi souborovy´mi syste´my, je oblı´bene´ pouzˇ´ıvat tzv. tokeny. Jedna´ se o prˇenosne´ me´dium, na ktere´m je neˇjaky´m zpu˚sobem ulozˇeno heslo (neˇkdy take´ klı´cˇ), ktery´ po prˇipojenı´ do pocˇ´ıtacˇe zprˇ´ıstupnı´ sˇifrovane´ svazky. Vy´hodou je to, zˇe si nemusı´te pamatovat 23
http://loop-aes.sourceforge.net/ http://www.root.cz/clanky/cryptoroot-pro-nejvyssi-bezpecnost-1/ 25 http://www.root.cz/clanky/zaostreno-na-dm-crypt/ 24
39
3. Pokrocˇily´ hardening GNU/Linuxu
heslo – v prˇ´ıpadeˇ ulozˇenı´ klı´cˇe je vy´hodou to, zˇe ma´te klı´cˇ sta´le u sebe. Vy´roba jednoho takove´ho velmi levne´ho tokenu byla prˇedstavena Rodolfem Markem na akci CryptoFest 200326 . Protozˇe samotna´ vy´roba takove´ho tokenu se vymyka´ te´matu te´to pra´ce, odka´zal bych na cˇla´nek Byli jste na CryptoFestu? 27 a na samotny´ abstrakt28 , ktery´ se ty´ka´ prˇedna´sˇky o vy´robeˇ tokenu. Jine´ informacˇnı´ zdroje kromeˇ video za´znamu prˇedna´sˇky o tomto konkre´tnı´m tokenu k dispozici nejsou.
26
http://www.cryptofest.cz/ http://www.root.cz/clanek/1924 28 http://www.cryptofest.cz/slajdy/ssl/Cryptofest.pdf 27
40
Kapitola 4
Bezpec ˇnost na u ´ rovni sı´te ˇ Toto te´ma je, co se ty´cˇe bezpecˇnosti, velmi du˚lezˇite´, z urcˇity´ch hledisek jesˇteˇ du˚lezˇiteˇjsˇ´ı nezˇ bezpecˇnost na u ´ rovni OS, protozˇe sı´t’ je ta frontova´ linie, kterou musı´ u ´ tocˇnı´ci veˇtsˇinou prˇekonat k dosahova´nı´ dalsˇ´ıch cı´lu˚. Asi nejdu˚lezˇiteˇjsˇ´ım a nejkomplexneˇjsˇ´ım prvkem zabezpecˇenı´ sı´tı´ je firewall 1 . Ale abychom dobrˇe porozumeˇli tomu, jak takovy´ firewall spra´vneˇ nakonfigurovat, je potrˇeba veˇdeˇt, jak se pocˇ´ıtacˇe prˇipojujı´ k jiny´m pocˇ´ıtacˇu˚m, jak si vymeˇn ˇ ujı´ data a v jake´ podobeˇ, apod. K tomuto vsˇemu je potrˇeba alespon ˇ dobrˇe rozumeˇt protokolu TCP/IP, ktery´ je nejrozsˇ´ırˇeneˇjsˇ´ı a skry´va´ v sobeˇ mnoho vy´hod – je zalozˇeny´ na paketech, takzˇe prˇes jedno sı´t’ove´ propojenı´ mu˚zˇe komunikovat vı´ce pocˇ´ıtacˇu˚. V sı´tı´ch TCP/IP mu˚zˇe kazˇdy´ pocˇ´ıtacˇ iniciovat nebo prˇijmout sı´t’ova´ prˇipojenı´ neza´visle na ostatnı´ch pocˇ´ıtacˇ´ıch. Umozˇn ˇ uje decentralizovane´ rˇ´ızenı´, takzˇe pokud organizace dostane blok IP adres, mu˚zˇe je da´le distribuovat bez jaky´chkoliv technicky´ch omezenı´. TCP/IP je neza´visly´ na prˇenosove´m me´diu – funguje na me´diı´ch jako Ethernet, Token Ring, ARCNet, FDDI, USB, se´riove´ spoje, paralelnı´ spoje, kra´tkovlnne´ radiokomunikacˇnı´ sı´teˇ (AX.25) a dalsˇ´ıch. Take´ je smeˇrovatelny´, robustnı´ a je otevrˇeny´m standardem (vsˇechna dokumentace je volneˇ dostupna´), ktery´ si kazˇdy´ mu˚zˇe implementovat zdarma. Bohuzˇel, i kdyzˇ na´vrha´rˇi prˇedpovı´dali jisty´ pokrok a navrhli TCP/IP s mozˇnostı´ prˇida´va´nı´ dalsˇ´ıch vlastnostı´, ma´ tento protokol mnoho nedostatku˚ – jak bezpecˇnostnı´ch, tak naprˇ´ıklad jizˇ nedostacˇujı´cı´ 32 bitova´ adresace IPv4. Mezi dalsˇ´ı, ne prˇ´ılisˇ rozsˇ´ırˇene´, sı´t’ove´ protokoly patrˇ´ı naprˇ´ıklad IPX/SPX cˇi SNA. Nebudu se zde zaby´vat cely´m TCP/IP protokolem u ´ plneˇ do podrobnostı´, protozˇe je to te´ma znacˇneˇ rozsa´hle´, ale zameˇrˇ´ım se prˇedevsˇ´ım na bezpecˇnostnı´ aspekty. TCP/IP je rozdeˇlena do vrstev, prˇicˇemzˇ kazˇda´ vrstva spole´ha´ na sluzˇby, ktere´ poskytuje vrstva pod nı´ i nad nı´. Vrstvy popisuje tabulka 4.1. Fyzickou vrstvou jsou mysˇleny ty nejza´kladneˇjsˇ´ı struktury a to fyzicka´ zarˇ´ızenı´, ktery´mi se mu˚zˇeme prˇipojit do sı´teˇ. Propojenı´ na fyzicke´ vrstveˇ lze rozdeˇlit 1
Vı´ce o firewallech v sekci ”4.2 Firewall”.
41
4. Bezpecˇnost na u ´ rovni sı´teˇ
Aplikacˇnı´ vrstva
Aplikace
Prezentacˇnı´ vrstva
FTP, SNMP, Ping, DNS,...
Relacˇnı´ vrstva Transportnı´ vrstva Sı´t’ova´ vrstva
TCP ICMP
UDP IP
IGMP
Linkova´ vrstva
Ovladacˇe zarˇ´ızenı´
Fyzicka´ vrstva
Sı´t’ovy´ adapte´r
Tabulka 4.1: TCP/IP vrstvy do trˇ´ı kategoriı´ – vyta´cˇene´ spojenı´, LAN (Local Area Network) a do dalsˇ´ı skupiny patrˇ´ı WAN (Wide Area Network) a MAN (Metropolitan Area Network). Vyta´cˇene´ spojenı´ je ohrozˇeno prˇedevsˇ´ım fyzicky – provoz klasicke´ho modemu i ISDN modemu lze vyve´st do odposloucha´vajı´cı´ho pocˇ´ıtacˇe. Do skupiny projenı´ LAN patrˇ´ı prˇedevsˇ´ım hojneˇ pouzˇ´ıvany´ Ethernet, da´le pak Token Ring, FDDI, ARCNet apod. Slabina tohoto prˇipojenı´ je v tom, zˇe mu˚zˇe naslouchat vsˇem komunikacı´m, ktere´ prˇes neˇj procha´zejı´. Do poslednı´ skupiny propojenı´ WAN a MAN, kam patrˇ´ı prˇedevsˇ´ım prˇenos mikrovlnami, radiovy´mi vlnami cˇi laserem. Zde je slaby´m mı´stem jesˇteˇ snazsˇ´ı odposlech, nezˇ u sı´tı´ LAN. V poslednı´ dobeˇ se zacˇal hojneˇ pouzˇ´ıvat Ethernet 802.11 (rychlost 2 Mb/s), 802.11b (rychlost 11 Mb/s) a 802.11a (54 Mb/s). Videˇl sem prakticke´ pouzˇitı´ tohoto standardu na VUT Brno 2 , kde pokryli signa´lem cˇa´st area´lu sˇkoly, kde se mohli studenti se svy´mi notebooky prˇipojovat do mı´stnı´ sı´teˇ. Jedna z nejveˇtsˇ´ıch bezdra´tovy´ch sı´tı´ v Cˇ R CZFree.net3 pokry´va´ velkou cˇa´st Prahy a dalsˇ´ı lokality. Ovsˇem tato technologie ma´ spousty bezpecˇnostnı´ch nedostatku˚ – vyuzˇitı´ nativnı´ho sˇifrova´nı´ WEP (Wired Equivalent Privacy) nema´ prakticky smysl, protozˇe bylo prolomeno. WEP by meˇla nahradit nova´ implementace sˇifrova´nı´ WPA (Wi-Fi Protected Access) pro bezdra´tove´ sı´teˇ, ktera´ by meˇla by´t mnohem odolneˇjsˇ´ı. Ale bezdra´tove´ sı´teˇ lze napadnout mnoha dalsˇ´ımi zpu˚soby. Prvnı´ proble´m je v samotne´m fyzicke´m zabezpecˇenı´ sı´teˇ. Je potrˇeba si da´t pozor na to, aby na´m signa´l zbytecˇneˇ neprˇesahoval plochu, kterou chceme pokry´t a da´val tı´m mozˇnost neˇkomu cizı´mu pokousˇet bezpecˇnost te´to sı´teˇ (naprˇ´ıklad pokud ma´ signa´l pokry´vat jednu mı´stnost, aby nezasahoval mimo buˇ ´ıka´ se, zˇe soucˇasna´ bezpecˇnost bezdra´tovy´ch sı´tı´ se rovna´ vystrcˇene´mu dovu). R ethernetove´mu kabelu na ulici. Pro nejvysˇsˇ´ı bezpecˇnost nestacˇ´ı vypnout pouze DHCP, zmeˇnit implicitnı´ identifika´tor SSID, zmeˇnit prˇ´ıstupove´ heslo na prˇ´ıstupove´m bodu (tzv. AP - Access Point), ale je potrˇeba pouzˇ´ıt pokrocˇilejsˇ´ı metody 2 3
Vysoke´ ucˇenı´ technicke´ v Brneˇ http://www.czfree.net/home/index.php
42
4. Bezpecˇnost na u ´ rovni sı´teˇ
zabezpecˇenı´ jako jsou VPN4 – v prˇ´ıpadeˇ bezdra´tovy´ch sı´tı´ naprˇ´ıklad IPSec 5 nebo CIPE6 . V souvislosti s Wi-Fi je dnes aktua´lnı´ chyba, kterou lze omezit (u ´ plneˇ odstavit) provoz fyzicke´ho zarˇ´ızenı´ vysı´la´nı´m tzv. jam signalu (informace o kolizi v sı´ti). Horsˇ´ı je to, zˇe tomuto lze jen teˇzˇko zabra´nit, protozˇe chyba vycha´zı´ ze samotne´ podstaty Wi-Fi. Mezi dalsˇ´ı propojenı´ WAN a MAN patrˇ´ı jesˇteˇ DSL a kabelove´ modemy, ktere´ jsou zase na´chylne´ na odposlech. Pomocı´ linkove´ vrstvy komunikuje syste´m se samotny´m sı´t’ovy´m adapte´rem. Pouzˇ´ıva´ k tomu podvrstvu MAC, se kterou manipuluje teˇsneˇ prˇedtı´m nezˇ prˇemeˇnı´ data na elektricke´ a opticke´ signa´ly. Nebudu zde rozebı´rat samotnou strukturu ra´mcu˚ Ethernet a propojenı´ PPP (point-to-point). Jsou zde mozˇne´ u ´ toky DoS nebo zmeˇna zdrojove´ MAC adresy a budeme se jimi zaby´vat jesˇteˇ v te´to kapitole. Do sı´t’ove´ vrstvy patrˇ´ı samotne´ pakety a urcˇuje tedy zpu˚sob, jaky´m budou ´ toky na tyto vrstvy a dalsˇ´ı nadrˇazene´ vrstvy se budu zaby´vat data prˇena´sˇena. U v dalsˇ´ı cˇa´sti te´to kapitoly. Za´jemce, kterˇ´ı by meˇli za´jem o velmi podrobne´ informace o protokolu TCP/IP odkazuji na knihy z pouzˇite´ literatury cˇ´ıslo [3] a [4]. Du˚lezˇite´ je te´zˇ rˇ´ıct, zˇe je zde velky´ rozdı´l v zabezpecˇenı´ serveru oproti pracovnı´ stanici. Na neˇjake´ internetove´ konferenci jsem kdysi narazil na jedno takove´ porˇekadlo: A busstation is a place where busses stop. A trainstation is a place where trains stop. A workstation is a place... Toto porˇekadlo odlehcˇenou formou nara´zˇ´ı na proble´m zabezpecˇenı´ pracovnı´ch stanic, na ktery´ch prˇirozeneˇ beˇzˇ´ı spousta aplikacı´. Ovsˇem spousta teˇchto programu˚ nemusı´ by´t dlouho aktualizovana´. Je pravdou, zˇe pracovnı´ stanice nemusejı´ by´t pro u ´ tocˇnı´ky tolik zajı´mave´, protozˇe oproti serverovy´m pocˇ´ıtacˇu˚m jsou cˇasto restartova´ny, vypı´na´ny, prˇena´sˇeny (zejme´na notebooky, laptopy, atd.) a hlavneˇ nejsou za´kladnı´m kamenem dane´ sı´teˇ, takzˇe jejich odstavenı´ veˇtsˇinou nema´ na chod cele´ sı´teˇ vliv. Ale samozrˇejmeˇ, pokud vetrˇelec dosa´hne zvy´sˇenı´ privilegiı´ neˇjake´ takove´to stanici, mu˚zˇe jı´ pouzˇ´ıt k narusˇenı´ bezpecˇnosti cele´ sı´teˇ. Na pracovnı´ stanici by nemeˇly beˇzˇet zˇa´dne´ serverove´ aplikace a pro jistotu bychom meˇli striktneˇ zaka´zat jake´koliv prˇihlasˇova´nı´ klientsky´ch programu˚ – to lze uskutecˇnit naprˇ´ıklad pomocı´ TCP wrappers 7 cˇi iptables8 . 4
Vı´ce o VPN v sekci ”4.4 VPN”. Vı´ce o IPSec v sekci ”4.4.1 IPSec”. 6 http://sites.inka.de/sites/bigred/devel/cipe.html 7 Vı´ce o TCP wrappers v sekci ”4.1 TCP wrappers”. 8 Vı´ce o iptables v sekci ”4.2.2 iptables”. 5
43
4. Bezpecˇnost na u ´ rovni sı´teˇ
Zabezpecˇenı´ serveru˚ (tj. i firewallu˚ cˇi routeru˚) by meˇlo odpovı´dat politice, kterou jsem se zaby´val v kapitole ”3 Pokrocˇily´ hardening GNU/Linuxu” – spousˇteˇnı´ jen opravdu potrˇebny´ch sluzˇeb, jejich pravidelna´ aktualizace, atd.
4.1 TCP wrappers TCP wrappers (balı´cˇek tcp_wrapper) tvorˇ´ı vrstvu na u ´ rovni neforma´tovane´ho TCP cˇi UDP soketu, jezˇ je spravova´n de´monem inetd (nebo xinetd) a jednotlivy´mi aplikacemi. Tato vrstva doka´zˇe kontrolovat, ktery´ z uzˇivatelu˚ ma´ prˇ´ıstup k dane´ sluzˇbeˇ. Tı´mto zpu˚sobem tedy doka´zˇeme omezit jednotlive´ uzˇivatele nebo dokonce cele´ syste´my v prˇ´ıstupu ke sluzˇba´m na nasˇem syste´mu. S pouzˇitı´m knihovny libwrap lze omezovat i sluzˇby, ktere´ nejsou spousˇteˇny de´monem inetd (nebo xinetd). Ke konfiguraci TCP Wrappers slouzˇ´ı dva soubory a to /etc/hosts.allow a /etc/hosts.deny. Tyto soubory by meˇly mı´t prˇ´ıstupovy´ mo´d 600, abychom zabra´nili tomu, zˇe u ´ tocˇnı´k zı´ska´ prˇehled o tom, ktery´m syste´mu˚m du˚veˇrˇujeme a ktery´m ne. Vyuzˇitı´m teˇchto informacı´ by mohl nejprve zı´skat kontrolu nad syste´my, ktery´m du˚veˇrˇujeme a prˇes tyto syste´my kompromitovat na´s. Spousˇteˇnı´ veˇtsˇiny sluzˇeb z inetd (nebo xinetd) zajisˇt’uje /usr/sbin/tcpd, ktere´mu se prˇeda´ jako prvnı´ parametr samotny´ na´zev aplikace. Program tcpd si zjistı´ IP adresu a na´zev klientske´ho pocˇ´ıtacˇe. Da´le se zjistı´ uzˇivatelske´ jme´no zaslane´ sluzˇbou ident od pocˇ´ıtacˇe, jenzˇ pozˇaduje danou sluzˇbu. Tato informace vsˇak nemusı´ by´t zasla´na. Sluzˇba tcpd pak zkontroluje dva jizˇ zmı´neˇne´ konfiguracˇnı´ soubory a podle zı´skany´ch u ´ daju˚ rozhodne, jestli sluzˇbu povolı´, cˇi nikoliv. V prˇ´ıpadeˇ povolenı´ sluzˇby se sluzˇba spustı´. V prˇ´ıpadeˇ zamı´tnutı´ se ozna´mı´ nevyhoveˇnı´ jeho pozˇadavku a spojenı´ se uzavrˇe. Za´znamy v teˇchto souborech jsou rozdeˇleny po rˇa´dcı´ch a kazˇdy´ rˇa´dek je jesˇteˇ oddeˇlen znakem ”:”. Prvnı´ pole kazˇde´ho za´znamu je seznam sluzˇeb, ktery´ch se omezenı´ ty´ka´. Hodnota ALL znamena´ vsˇechny sluzˇby. Hodnota ALL EXCEPT, za kterou na´sleduje na´zev sluzˇby, znamena´ vsˇechny sluzˇby s vy´jimka te´ specifikovane´. Druhe´ pole je seznam pocˇ´ıtacˇu˚ podle souboru /etc/hosts, sluzˇby DNS nebo samotna´ IP adresa. Nemusı´me se omezovat pouze na jednotlive´ pocˇ´ıtacˇe, ale lze zada´vat cele´ dome´ny jako naprˇ´ıklad:
.cvut.cz
44
4. Bezpecˇnost na u ´ rovni sı´teˇ
Jak jizˇ bylo rˇecˇeno, zada´vat lze i IP adresy a rozsahy IP adres. Omezenı´ adresnı´ho rozsahu trˇ´ıdy B mu˚zˇe vypadat takto:
192.168. nebo takto:
192.168.0.0/255.255.0.0 Opeˇt lze pouzˇ´ıt hodnotu ALL pro libovolne´ hostitelske´ pocˇ´ıtacˇe. Take´ lze pouzˇ´ıt hodnotu LOCAL, ktera´ prˇedstavuje loka´lnı´ hostitelske´ pocˇ´ıtacˇe, jenzˇ neobsahuje ve sve´m na´zvu tecˇku. Hodnotami KNOWN a UNKNOWN lze specifikovat pocˇ´ıtacˇe, jejichzˇ na´zvy lze nebo nelze vyhledat pomocı´ DNS. Lze pouzˇ´ıt i za´pis:
.cvut.cz EXCEPT lab1.cvut.cz cozˇ znamena´ vsˇechny pocˇ´ıtacˇe v dome´neˇ cvut.cz s vy´jimkou pocˇ´ıtacˇe lab1 v te´ same´ dome´neˇ. Do trˇetı´ho, ovsˇem nepovinne´ho, pole lze uve´st prˇ´ıkaz nebo prˇ´ıkazy, ktere´ budou vykona´ny prˇ´ıkazovy´m interpretem. Za tı´mto polem prˇ´ıkazu˚ musı´ na´sledovat hodnota ”allow” nebo ”deny”, podle toho, jestli chceme danou sluzˇbu povolit nebo odeprˇ´ıt. Z toho take´ vyply´va´, zˇe mu˚zˇeme soubory /etc/hosts.allow a /etc/hosts.deny sloucˇit do jednoho souboru. Pomocı´ te´to mozˇnosti mu˚zˇeme by´t upozorneˇny naprˇ´ıklad e-mailem o neopra´vneˇne´m pokusu pouzˇitı´ dane´ sluzˇby. Jestlizˇe nenı´ nalezeny´ za´znam ani v jednom se souboru˚, sluzˇba ze nepovolı´. Meˇli bychom uprˇednostn ˇ ovat politiku ”co nenı´ vy´slovneˇ povoleno, je zaka´za´no.” – tzn. zˇe v souboru /etc/hosts.deny uvedeme hodnotu ”ALL: ALL” a v souboru /etc/hosts.allow specifikujeme sluzˇby a pocˇ´ıtacˇe, ktere´ chceme povolit. Pokud se neˇkdo pokusı´ prˇipojit na sluzˇbu, ke ktere´ nema´ povolenı´, zapı´sˇe to logovacı´ syste´m (nejcˇasteˇji syslogd) do syste´move´ho protokolu.
4.2 Firewall Pod vy´razem firewall se mu˚zˇe skry´vat neˇkolik vy´znamu˚. Za prve´, zˇe je to stroj oddeˇlujı´cı´ neˇjakou sı´t’ cˇi podsı´t’ od ostatnı´ch nadrˇazeny´ch segmentu˚. Nebo aplikace, ktera´ mu˚zˇe chra´nit byt’ jen pracovnı´ stanici. V te´to souvislosti bych chteˇl upozornit na to, zˇe aplikova´nı´ firewallu jako aplikace na stroje, ktere´ jsou chra´neˇne´ uzˇ fyzicky´m firewallem, se velmi doporucˇuje. Znacˇneˇ to zvedne u ´ roven ˇ zabezpecˇenı´ a vytvorˇ´ı to dalsˇ´ı barie´ru v prˇ´ıpadeˇ, zˇe by vetrˇelec zı´skal kontrolu nad samotny´m firewallem.
45
4. Bezpecˇnost na u ´ rovni sı´teˇ
Rozlisˇujeme dva za´kladnı´ druhy firewallu˚ a to firewally filtrujı´cı´ pakety a aplikacˇnı´ proxy servery9 . My se budeme zaby´vat prˇedevsˇ´ım prvnı´ skupinou a tı´m jsou firewally, ktere´ prˇijı´majı´ nebo odmı´tajı´ pakety v za´vislosti na zdroji nebo cı´li – na rozdı´l od proxy serveru˚, ktere´ doka´zˇ´ı filtrovat i obsah. V GNU/Linuxu je filtrova´nı´ paketu zabudova´no do ja´dra. Pakety mohou projı´t skrze firewall jen tehdy pokud odpovı´dajı´ sadeˇ pravidel – mohou by´t filtrova´ny podle jejich typu, zdrojove´ a cı´love´ IP adresy (mozˇno filtrovat i podle MAC), zdrojove´ho a cı´love´ho portu, atd. Pro zavedenı´ paketove´ho filtru se v dnesˇnı´ dobeˇ jader 2.4 a vysˇsˇ´ıch pouzˇ´ıva´ syste´m Netfilter10 , jehozˇ steˇzˇejnı´ cˇa´stı´ je program iptables, ktery´ nahradil starsˇ´ı program ipchains, pouzˇ´ıvany´ v ja´drech rˇady 2.2. Ovsˇem z hlediska zpeˇtne´ kompatibility lze pouzˇ´ıvat ipchains i na ja´drech 2.4 a vysˇsˇ´ıch. Abychom mohli vyuzˇ´ıvat Netfilter v plne´ sı´le, je potrˇeba v ja´dru povolit tyto polozˇky: CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG
PACKET NETFILTER IP NF CONNTRACK IP NF FTP IP NF IPTABLES IP NF MATCH LIMIT IP NF MATCH MAC IP NF MATCH MARK IP NF MATCH MULTIPORT IP NF MATCH TOS IP NF MATCH STATE IP NF MATCH UNCLEAN IP NF MATCH OWNER IP NF FILTER IP NF TARGET REJECT IP NF TARGET MIRROR IP NF NAT IP NF NAT NEEDED IP NF TARGET MASQUERADE IP NF TARGET REDIRECT IP NF NAT FTP
Ve veˇtsˇineˇ dominantnı´ch linuxovy´ch distribucı´ by vsˇak meˇla by´t tato podpora do kernelu zakompilova´na. Mezi ipchains a iptables jsou vsˇak forma´lnı´ i neforma´lnı´ rozdı´ly. V iptables jsou jme´na rˇeteˇzcu˚ psa´na velky´mi pı´smeny (naprˇ´ıklad INPUT, OUTPUT, FORWARD, PREROUTING, apod.). Prˇ´ıznak -i oznacˇuje pouze vstupnı´ rozhranı´ a -o 9 10
Vı´ce o proxy v sekci ”4.3 Aplikacˇnı´ proxy”. http://www.netfilter.org/
46
4. Bezpecˇnost na u ´ rovni sı´teˇ
vy´stupnı´ rozhranı´. Mı´sto DENY se pouzˇ´ıva´ DROP. MASQ se zmeˇnil na MASQUERADE a ma´ odlisˇnou syntaxi a nasˇlo by se jesˇteˇ pa´r dalsˇ´ıch rozdı´lu˚. Mezi ty neforma´lnı´ rozdı´ly patrˇi to, zˇe iptables nekontroluje pouze adresy zdroje cˇi cı´le a jejich porty, ale oveˇrˇuje take´, zdali komunikace spln ˇ uje spra´vna´ pravidla komunikace – naprˇ´ıklad u protokolu HTTP kontroluje, zdali jsou zası´la´ny POST, GET, HEAD a dalsˇ´ı pozˇadavky ve tvaru, ktery´ vyhovuje specifikaci HTTP. To na´m zarucˇ´ı, zˇe komunikujeme na dane´m portu skutecˇneˇ se sluzˇbou, ktera´ na nı´ ma´ beˇzˇet a ne s neˇjakou podvrzˇenou sluzˇbou, ktera´ mu˚zˇe by´t spusˇteˇna na stejne´m portu. Du˚lezˇite´ je rˇ´ıci, zˇe pakety prˇijate´ z neforma´tovane´ho soketu 11 (angl. raw socket) nejsou pomocı´ iptables ani ipchains filtrova´ny. Odchozı´ pakety vsˇak jizˇ filtrova´ny jsou.
4.2.1 NAT NAT12 umozˇn ˇ uje maskovat celou podsı´t’pod jednu IP – tzn. zˇe pocˇ´ıtacˇe vnitrˇnı´ sı´teˇ prˇistupujı´ k vneˇjsˇ´ı sı´ti pod jednou IP adresou. Kdyzˇ pocˇ´ıtacˇ vnitrˇnı´ sı´teˇ odesˇle pozˇadavek pocˇ´ıtacˇi do vneˇjsˇ´ı sı´teˇ, bude se vneˇjsˇ´ımu syste´mu jevit jakoby byl pozˇadavek zasla´n prˇ´ımo z routeru 13 . Zdrojova´ IP adresa paketu˚ z vnitrˇnı´ sı´teˇ je na routeru prˇepisova´na a je jı´ prˇirˇazeno cˇ´ıslo portu, ktere´ slouzˇ´ı jako docˇasny´ zdroj pro router (dynamicky´ NAT). Paket odpoveˇdi zası´lany´ z vneˇjsˇ´ı sı´teˇ do vnitrˇnı´ sı´teˇ bude obsahovat paket s cı´lovou adresou routeru a cˇ´ıslo portu bude to, ktere´ bylo paketu prˇideˇleno jako docˇasny´ zdroj. Router podle toho dohleda´ syste´m ve vnitrˇnı´ sı´ti, ktere´mu paket patrˇ´ı a nasmeˇruje ho tam. Pokud uzˇijeme pro pocˇ´ıtacˇe ve vnitrˇnı´ sı´ti priva´tnı´ rozsah IP adres, nedajı´ se z vneˇjsˇ´ı strany adresovat – toto se pouzˇ´ıva´ zejme´na v IP protokolu verze 4, kdy s masivnı´m na´ru˚stem pocˇ´ıtacˇu˚ a sı´tı´ prˇipojeny´ch do Internetu, docha´zejı´ verˇejne´ IP adresy. Tento proble´m opeˇt souvisı´ se sta´rˇ´ım tohoto protokolu. Proble´m rˇesˇ´ı novy´ IP protokol verze 6, kde je adresnı´ rozsah IP adres dostacˇujı´cı´. Pouzˇitı´ priva´tnı´ch adres prˇina´sˇ´ı jednu obrovskou vy´hodu a tou je, zˇe vetrˇelec nemu˚zˇe zası´lat pakety prˇ´ımo pocˇ´ıtacˇu˚m ve vnitrˇnı´ sı´ti (za routerem) – pakety s priva´tnı´mi cı´lovy´mi adresami se v Internetu nesmeˇrujı´. Priva´tnı´ rozsahy sı´t’ovy´ch adres lze rozdeˇlit podle RFC 1597 do trˇech trˇ´ıd A, B a C. Trˇ´ıda A ma´ rozsah 10.0.0.0-10.255.255.255. Trˇ´ıda B pak 172.16.0.0172.31.255.255. A trˇ´ıda C pak 192.168.0.0-192.168.255.255. Podle rozsahu sı´teˇ zvolı´me prˇ´ıslusˇnou trˇ´ıdu – pokud si nejsme jisti, jak velika´ bude jednou nasˇe sı´t, zvolı´me trˇ´ıdu A. 11
Neforma´tovany´ soket je spojenı´ mezi procesem, ktery´ jej otevrˇel a zarˇ´ızenı´m, k neˇmuzˇ je prˇipo-
jen. 12
NAT upravuje norma RFC 1631 ˇ asto je router a firewall Routerem neboli smeˇrovacˇem se oznacˇuje stroj, ktery´ smeˇruje pakety. C jeden stroj. 13
47
4. Bezpecˇnost na u ´ rovni sı´teˇ
Abychom mohli pouzˇ´ıvat prˇeklad adres v Linuxu, je potrˇeba zave´st modul ip_MASQUERADE (prˇ´ıkaz modprobe ip_MASQUERADE). Mezi nedostatky NATu patrˇ´ı prˇedevsˇ´ım to, zˇe ho nelze pouzˇ´ıt s neˇktery´mi protokoly, protozˇe naprˇ´ıklad vyzˇadujı´ zpeˇtne´ otevrˇenı´ kana´lu, pouzˇitı´ pu˚vodnı´ adresy IP, atd. Bez aplikova´nı´ neˇjake´ dalsˇ´ı u ´ pravy (naprˇ´ıklad prˇ´ıdavne´ho modulu, ktery´ by dany´ protokol deˇlal skrze NAT funkcˇnı´), nelze pouzˇ´ıt IPSec a PPTP, protozˇe sˇifrovane´ TCP hlavicˇky by musely by´t prˇ´ıstupne´ routeru. IPSec je zalozˇen na kontrole integrity prˇeneseny´ch dat, takzˇe kdyby router prˇepsal hlavicˇku TCP paketu, mechanismus IPSec by tyto pakety na cı´love´m syste´mu zahodil. Dalsˇ´ım problematicky´m protokolem mu˚zˇe by´t FTP, ktere´ do TCP/IP paketu˚ vkla´da´ adresnı´ informace, ktere´ da´le vyuzˇ´ıvajı´, ale po prˇepsa´nı´ TCP hlavicˇky paketu uzˇ nejsou informace spra´vne´. Tento proble´m lze vsˇak vyrˇesˇit zavedenı´m modulu ip_conntrack_ftp a ip_nat_ftp. Dalsˇ´ı proble´my mohou by´t s protokolem H.323, ktery´ slouzˇ´ı pro videokonference, atd. Samozrˇejmeˇ zajisˇteˇnı´m toho, zˇe jsou pocˇ´ıtacˇe vnitrˇnı´ sı´teˇ neviditelne´, na´m nezarucˇ´ı u ´ plnou bezpecˇnost teˇchto stroju˚ vu˚cˇi okolnı´mu sveˇtu. Takzˇe nesmı´me naprˇ´ıklad zapomı´nat na to, zˇe pokud je nava´za´no spojenı´, tak existuje zpeˇtne´ prˇipojenı´. Potenciona´lneˇ zneuzˇitelna´ chyba mu˚zˇe spocˇ´ıvat ve vyprsˇenı´ lhu˚ty ve stavove´ tabulce. Dokud cˇasovy´ limit nevyprsˇ´ı je spojenı´ z pocˇ´ıtacˇe ve vnitrˇnı´ sı´ti prˇes router na pocˇ´ıtacˇ, se ktery´m probı´hala komunikace, sta´le aktivnı´. Toto mu˚zˇe by´t napadnutelne´, pokud u ´ tocˇnı´k zna´ IP adresu a port pu˚vodnı´ho mı´sta urcˇenı´. Tyto informace mohl zjistit prˇedchozı´m sledova´nı´m sı´teˇ. Samozrˇejmeˇ se mohou vyskytnout dalsˇ´ı proble´my a to i trˇeba prˇ´ımo v implementaci NATu.
4.2.2 iptables Nejdrˇ´ıve je nutne´ si vysveˇtlit, jak kernel trˇ´ıdı´ pakety a deˇlı´ je do trˇ´ı za´kladnı´ch rˇeteˇzcu˚ (angl. chains) – INPUT, OUTPUT a FORWARD. Sı´t’ovy´ adapte´r prˇijme data ze sı´teˇ a kernel je zpracuje do formy paketu a urcˇ´ı jeho destinaci. Ta mu˚zˇe by´t bud’ loka´lnı´, tj. pokud jsou pakety urcˇeny pro tento pocˇ´ıtacˇ (rˇeteˇzec INPUT), nebo aplikace odesı´la´ pakety sı´t’ovy´m rozhranı´m smeˇrem ven (rˇeteˇzec OUTPUT), nebo pakety nejsou urcˇeny pro tento pocˇ´ıtacˇ a na´sˇ pocˇ´ıtacˇ slouzˇ´ı pouze jako router, ktery´ smeˇruje pakety da´l (rˇeteˇzec FORWARD). Pokud nenı´ zaple´ smeˇrova´nı´ paketu˚ a to implicitneˇ nenı´ je potrˇeba ho zapnout, cozˇ pro IPv4 provedeme naprˇ´ıklad prˇ´ıkazem:
echo "1" > /proc/sys/net/ipv4/ip_forward Jinak budou pakety v rˇeteˇzci FORWARD zahazova´ny. Samotny´ rˇeteˇzec pak tvorˇ´ı sekvenci pravidel, ktery´m paket procha´zı´. Pokud paket vyhovuje urcˇite´mu
48
4. Bezpecˇnost na u ´ rovni sı´teˇ
pravidlu, je na neˇj aplikova´na akce uvedena´ u pravidla (naprˇ´ıklad ACCEPT, DROP, REJECT cˇi LOG). Neˇkterou z akcı´ vsˇak nemusı´ cesta paketu koncˇit (naprˇ´ıklad u LOG) a pokracˇovat v dalsˇ´ım procha´zenı´ pravidel. Cı´lem je vytvorˇit co nejteˇsneˇjsˇ´ı pravidla, aby nevznikaly zˇa´dne´ toky dat navı´c. Proto aplikujeme metodu identickou s tou, kterou jsem pouzˇil u TCP wrappers a vsˇechny rˇeteˇzce zaka´zˇeme a povolı´me pouze to, co potrˇebujeme ke spra´vne´mu chodu. Samotna´ pravidla firewallu je vy´hodne´ napsat do skriptu, ktery´ se bude spousˇteˇt prˇi startu syste´mu. Restart syste´mu totizˇ vsˇechna pravidla iptables odstranı´ – to lze samozrˇejmeˇ udeˇlat i explicitneˇ. Nema´ cenu, abych tu dopodrobna opisoval manua´l k iptables. Proto nejprve rˇeknu neˇkolik obecny´ch pravidel a na´sledneˇ rozeberu uka´zkovy´ prˇ´ıklad. Zdrojova´ nebo cı´lova´ adresa se zada´va´ bud’ jako hostitelsky´ na´zev (angl. hostname) – naprˇ´ıklad localhost cˇi poc01.fjfi.cvut.cz. Druhy´m zpu˚sobem je jednotliva´ IP adresa – naprˇ´ıklad 127.0.0.1 cˇi 212.21.2.1. Dalsˇ´ım zpu˚sobem je adresace s maskou – naprˇ´ıklad 212.21.2.1/255.255.255.0 nebo adresace s pocˇtem bitu˚ masky 212.21.2.1/24. U specifikova´nı´ pravidla, zˇe jde o zdrojovou adresu, lze pouzˇ´ıt i negaci a to pomocı´ symbolu ”!” – naprˇ´ıklad prˇ´ıznak -s ! 212.21.2.1 vyhovuje vsˇem paketu˚m, ktere´ nemajı´ jako zdrojovou adresu 212.21.2.1. Pomocı´ prˇ´ıznaku -p nebo -protocol lze rozlisˇovat datagramy, ktere´ lze specifikovat bud’ cˇ´ıselneˇ (podle /etc/protocols nebo slovneˇ – naprˇ´ıklad UDP, TCP, ICMP, atd.). Da´le lze specifikovat vstupnı´ (-i nebo -in-interface) a vy´stupnı´ (-o nebo -out-interface) zarˇ´ızenı´. Neexistujı´cı´ rozhranı´ budou ignorova´na do te´ doby, dokud se neobjevı´. A ted’ proberu slı´beny´ skript. Jedna´ se o skript, ktery´ chra´nı´ mojı´ sı´t prˇipojenou technologiı´ ADSL. Jedna´ se o sı´t kategorie SOHO 14 . Firewall ma´ rozhranı´ eth0, ktere´ smeˇrˇuje ven ze sı´teˇ (konkre´tneˇ do ADSL modemu, prˇes ktery´ se tuneluje spojenı´ pomocı´ PPTP protokolu na stranu providera, takzˇe firewall je vlastneˇ prˇ´ıstupny´ pod rozhranı´m ppp0). Druhy´m rozhranı´m je eth1, ktery´ smeˇrˇuje do priva´tnı´ sı´teˇ. Topologii sı´teˇ zna´zorn ˇ uje obra´zek 4.1. Ve skriptu vynecha´va´m prˇ´ıkazy iptables, ktere´ souvisı´ s deˇlenı´m pa´sma a s urcˇova´nı´m priority paketu˚ (pomocı´ paketu˚ s prˇ´ıznakem TOS) – toto te´ma je mimo rozsah te´to pra´ce. Prˇedpokla´dejme, zˇe vsˇechny potrˇebne´ moduly nacˇ´ıta´me mimo tento skript (naprˇ. v souboru /etc/rc.d/rc.local).
#!/bin/sh Rutina specifikujı´cı´ shellovy´ interpret. 14
small office/home office
49
4. Bezpecˇnost na u ´ rovni sı´teˇ
Obra´zek 4.1: Topologie sı´teˇ s tunelem PPTP
IPT="/usr/sbin/iptables" Pro zjednodusˇenı´ pra´ce si vytvorˇ´ıme promeˇnou IPT.
echo "1" > /proc/sys/net/ipv4/ip_forward Zapneme smeˇrova´nı´ (nebo prˇeposı´la´nı´) paketu˚.
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do echo "1" > $interface done Zapne rp filter na vsˇech dostupny´ch rozhranı´ch. Jedna´ se o ochranu prˇed IP spoofingem15 (podvrzˇenı´ zdrojove´ IP adresy). Ja´dro zablokuje vsˇechny pakety se zdrojovou adresou, ktera´ by podle routovacı´ tabulky meˇla prˇijı´t z jine´ho dostupne´ho rozhranı´. Na rozhranı´ ppp0 (ktere´ smeˇrˇuje ven do Internetu) by se 15
Vı´ce o IP spoofingu v sekci 4.9.
50
4. Bezpecˇnost na u ´ rovni sı´teˇ
nemeˇly objevit adresy priva´tnı´ch rozsahu˚, ktere´ nejsou v Internetu smeˇrova´ny. Tote´zˇ platı´ pro neˇktere´ dalsˇ´ı rezervovane´ adresy, ktere´ najdete na domovsky´ch stra´nka´ch koordinacˇnı´ skupiny IANA 16 . Tento seznam se vsˇak mu˚zˇe meˇnit, proto dejte pozor, abyste zbytecˇneˇ nezahazovali korektnı´ pakety.
$IPT -F Tı´mto prˇ´ıkazem vyresetujeme prˇ´ıpadna´ jizˇ zadana´ pravidla ve vsˇech rˇeteˇzcı´ch. Prˇepı´nacˇem -t lze specifikovat tabulku rˇeteˇzcu˚ (naprˇ´ıklad filter, nat cˇi mangle), ktere´ chceme odstranit. Jesˇteˇ doda´m, zˇe vy´pis soucˇasny´ch pravidel se prova´dı´ prˇepı´nacˇem -L.
$IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT Za´kladnı´ politiku jsem si nastavil tak, zˇe nejprve vsˇechny pakety urcˇene´ pro firewall (rˇeteˇzec INPUT) a pakety, ktere´ jsou urcˇeny pro pocˇ´ıtacˇe vnitrˇnı´ sı´teˇ (rˇeteˇzec FORWARD) zahazuji (akce DROP) a v dalsˇ´ıch cˇa´stech skriptu teprve povolı´m pouze ty pakety, ktere´ chci, aby dosˇly na mı´sto urcˇenı´. Paketu˚m, ktere´ generuje firewall (rˇeteˇzec OUTPUT) du˚veˇrˇuji – povoluji (akce ACCEPT) je vsˇechny - pro zajisˇteˇnı´ vysˇsˇ´ı bezpecˇnosti filtrujte i tento rˇeteˇzec.
$IPT -A POSTROUTING -t nat -o ppp0 -j MASQUERADE Akce MASQUERADE rˇ´ıka´, zˇe zdrojova´ adresa mu˚zˇe by´t zmeˇneˇna a to pouze v rˇeteˇzci POSTROUTING (smeˇrovane´ pakety i pakety, ktere´ odcha´zejı´ z pocˇ´ıtacˇe ven). Jinak take´ rˇecˇeno, tento prˇ´ıkaz zprovozn ˇ uje NAT. MASQUERADE se pouzˇ´ıva´ prˇedevsˇ´ım tehdy, pokud ma´me k dispozici dynamickou adresu, cozˇ je mu˚j prˇ´ıpad, ale chteˇl bych upozornit, zˇe v prˇ´ıpadeˇ ADSL je situace trochu slozˇiteˇjsˇ´ı. I kdyzˇ je mu˚j pocˇ´ıtacˇ prˇ´ıstupny´ prˇes verˇejnou statickou IP adresu z Internetu, tak tato adresa nenı´ pro nasˇe u ´ cˇely smeˇrodatna´. Musı´me bra´t v u ´ vahu IP adresu v ra´mci tunelovane´ho spojenı´ prˇes PPTP, ktera´ je dynamicka´. V prˇ´ıpadeˇ, zˇe ma´me skutecˇneˇ statickou IP adresu, mu˚zˇeme pouzˇ´ıt akci SNAT.
$IPT -t nat -A PREROUTING -p tcp -i ppp0 dport 2222 -j DNAT to 192.168.0.3:22 Tento prˇ´ıkaz na´m prˇesmeˇruje port 2222 na port 22 na pocˇ´ıtacˇi s adresou 16
http://www.iana.com/assignments/ipv4-address-space
51
4. Bezpecˇnost na u ´ rovni sı´teˇ
192.168.0.4, ktery´ je soucˇa´stı´ vnitrˇnı´ sı´teˇ. Z /etc/services je zrˇejme´, zˇe port 22 je SSH, o ktere´m se v te´to pra´ci jizˇ zmin ˇ oval. Tento prˇ´ıkaz na´m tedy umozˇn ˇ uje prˇihla´sˇenı´ prˇes SSH na pocˇ´ıtacˇ s adresou 192.168.0.3. Stacˇ´ı v klientu SSH nastavit adresu firewallu a port 2222. Vy´hoda je zrˇejma´. Pokud bychom se jinak chteˇli dostat na pocˇ´ıtacˇ s adresou 192.168.0.3 z Internetu, museli bychom se prˇihla´sit na firewall a azˇ odsud bychom byli schopni se prˇihla´sit na pocˇ´ıtacˇ vnitrˇnı´ sı´teˇ – nehledeˇ na to, zˇe na firewallu by nemeˇli mı´t konto zˇa´dnı´ uzˇivatele´. A firewall by meˇlo by´t synonymem pro bezpecˇnost se vsˇ´ım vsˇudy – mı´t striktneˇ nainstalova´no opravdu jen to, co je potrˇeba, bezpecˇna´ hesla a dalsˇ´ı aspekty, ktere´ jsem jizˇ probı´ral. Nynı´ zpeˇt k samotne´mu prˇ´ıkazu. Akce DNAT rˇ´ıka´, zˇe cı´lova´ adresa mu˚zˇe by´t zmeˇneˇna. Tato akce je aplikovatelna´ na rˇeteˇzec OUTPUT, ktery´ uzˇ zna´me a na rˇeteˇzec PREROUTING (pakety urcˇene´ pro tento stroj i pakety, ktere´ se majı´ smeˇrovat). Dalsˇ´ı prˇ´ıznaky jsou vı´ce nezˇ zrˇejme´.
$IPT -N logdrop $IPT -A logdrop -m limit limit 5/h limit-burst 3 -j LOG log-prefix "Rezervovana adresa: " $IPT -A logdrop -j DROP Zde vytva´rˇ´ım vlastnı´ rˇeteˇzec logdrop (prˇ´ıznak -N), ktery´ na´m pozdeˇji usˇetrˇ´ı ˇ eteˇzec logdrop definuji tak, pra´ci, kdyzˇ budeme chtı´t neˇjake´ pakety logovat. R aby se logovaly (akce LOG) pouze prvnı´ 3 pakety a to maxima´lneˇ peˇtkra´t za hodinu. Tı´m zabra´nı´me prˇ´ıpadne´mu zaplneˇnı´ disku, ktery´ by mohl ve´st u ´ myslneˇ, cˇi neu ´ myslneˇ k odeprˇenı´ sluzˇby. Prˇ´ıznakem log-prefix definujeme textovy´ rˇeteˇzec, ktery´ se vlozˇ´ı prˇed samotny´ za´znam v paketu a tı´m ulehcˇuje pra´ci prˇi samotne´m hleda´nı´ teˇchto za´znamu˚ v loga´ch. Pakety se pak zahodı´.
$IPT $IPT $IPT $IPT
-N -A -A -A
IN_FW IN_FW -s 192.168.0.0/16 -j logdrop IN_FW -s 10.0.0.0/8 -j logdrop IN_FW -s 172.16.0.0/12 -j logdrop
Zde pra´veˇ aplikujeme vy´sˇe vytvorˇeny´ rˇeteˇzec logdrop, ktery´ na´m zajistı´ bezpecˇne´ logova´nı´ neplatny´ch paketu˚ v rˇeteˇzci IN FW, ktere´ pouzˇ´ıvajı´ zdrojovou adresu, ktera´ je z priva´tnı´ho rozsahu a v Internetu se nesmeˇruje. Mu˚zˇeme si zde nadefinovat i dalsˇ´ı rezervovane´ adresy.
$IPT -N syn-flood $IPT -A INPUT -i ppp0 -p tcp syn -j syn-flood $IPT -A syn-flood -m limit limit 1/s limit-burst 4 -j RETURN 52
4. Bezpecˇnost na u ´ rovni sı´teˇ
$IPT -A syn-flood -j DROP SYN flooding je jedna z metod u ´ toku˚, ktera´ ma´ za u ´ kol vyvolat odeprˇenı´ sluzˇby tı´m, zˇe posı´la´ spoustu TCP segmentu s nastaveny´m SYN prˇ´ıznakem (angl. SYN flag). Nejdrˇ´ıve se vytvorˇ´ı rˇeteˇzec syn-flood, do ktere´ho ukla´da´me pakety s prˇ´ıznakem SYN patrˇ´ıcı´ do rˇeteˇzce INPUT. Pokud bude takovy´ch paketu˚ me´neˇ nezˇ cˇtyrˇi za sekundu, vra´tı´ se do rˇeteˇzce INPUT.
$IPT -A FORWARD -p tcp ! syn -m state state NEW -j DROP Nynı´ prˇejdeme k akcı´m s rˇeteˇzcem FORWARD. Tento prˇ´ıkaz znamena´, zˇe se zahodı´ (akce DROP) TCP pakety patrˇ´ıcı´ do rˇeteˇzce FORWARD, ktere´ navazujı´ nove´ spojenı´ (datagram ze skupiny NEW) a nemajı´ nastaveny´ prˇ´ıznak SYN.
$IPT -A FORWARD -i ppp0 -j IN_FW Logujeme a zahazujeme pakety, ktere´ patrˇ´ı do rˇeteˇzce IN FW, cozˇ jsou tedy rezervovane´ adresy.
$IPT -A FORWARD -i ppp0 -o eth1 -p tcp -d 192.168.0.3 dport ssh -j ACCEPT Tı´mto povolı´me prˇesmeˇrova´nı´ portu pro sluzˇbu SSH, ktere´ jsem nadefinoval u rˇeteˇzce INPUT.
$IPT -A FORWARD -i eth1 -j ACCEPT Smeˇrova´nı´ z vnitrˇnı´ sı´teˇ ven neomezuji.
$IPT -A FORWARD -i ppp0 -o eth1 -m state state ESTABLISHED,RELATED -j ACCEPT Toto je velmi du˚lezˇita´ cˇa´st, ktera´ povolı´ smeˇrova´nı´ paketu˚ dovnitrˇ sı´teˇ pro jizˇ vytvorˇena´ spojenı´. Kdyzˇ pouzˇijete neˇjakou aplikaci ve vnitrˇnı´ sı´ti, ktera´ komunikuje prˇes port, ktery´ je pro rˇeteˇzec FORWARD zaka´zany´ a nemeˇli byste nastavene´ toto smeˇrova´nı´ paketu˚, nemohli byste takrˇka pouzˇ´ıvat sı´t’ove´ aplikace z vnitrˇnı´ sı´teˇ, protozˇe odpoveˇdi na pozˇadavky vasˇ´ı aplikace by byly zahozeny. ESTABLISHED a RELATED tedy charakterizuje datagramy, ktere´ jsou soucˇa´stı´ jizˇ nava´zane´ho spojenı´ nebo s nı´m neˇjak souvisı´. INVALID pak znacˇ´ı datagram, 53
4. Bezpecˇnost na u ´ rovni sı´teˇ
ktery´ nenı´ soucˇa´stı´ zˇa´dne´ho spojenı´ nebo se jej nepodarˇilo identifikovat.
$IPT -A FORWARD -m limit limit 12/h limit-burst 3 -j LOG log-prefix "forward-drop: " Ostatnı´ pakety budou zahozeny. Budeme je logovat a to trˇi pakety, maxima´lneˇ dvana´ctkra´t za hodinu.
$IPT -A INPUT -p tcp ! syn -m state state NEW -j DROP Nynı´ se budu zaby´vat rˇeteˇzcem INPUT. Prˇ´ıkaz je identicky´ s tı´m, ktery´ jsem pouzˇil u rˇeteˇzce FORWARD.
$IPT -A INPUT -i ppp0 -j IN_FW Opeˇt identicke´ pouzˇitı´ prˇ´ıkazu jako u rˇeteˇzce FORWARD.
$IPT -A INPUT -i ppp0 -p tcp syn -j syn-flood Pomocı´ jizˇ vy´sˇe vytvorˇene´ho rˇeteˇzce odfiltrujeme pokusy o SYN flooding.
$IPT -A INPUT -i ppp0 -p icmp -j syn-flood Zahlcenı´ pakety ICMP je dalsˇ´ı ze zpu˚sobu˚, jak vyvolat DoS. Budeme se tı´mto u ´ tokem v te´to kapitole zaby´vat pozdeˇji. Tento prˇ´ıkaz opeˇt vyuzˇ´ıva´ rˇeteˇzec synflood, ktery´ ovsˇem nynı´ aplikujeme na pakety ICMP, ktere´ specifikujeme pomocı´ prˇ´ıznaku -p.
$IPT -A INPUT -i ppp0 -p TCP dport 113 -m limit limit 12/h -j LOG $IPT -A INPUT -i ppp0 -p TCP dport 113 -j REJECT reject-with tcp-reset Tı´mto zpu˚sobem filtruji sluzˇbu AUTH (ident) – port 113. Prvnı´ rˇa´dek by meˇl by´t jizˇ jasny´. Ve druhe´m rˇa´dku zahazuji pakety, ktere´ se pokousˇ´ı pouzˇ´ıt tuto sluzˇbu, akcı´ REJECT, ktera´ je identicka´ s akcı´ DROP s tı´m rozdı´lem, zˇe pu˚vodce bude o tomto kroku informova´n zpra´vou ICMP. V nasˇem prˇ´ıpadeˇ se posı´la´ paket s prˇ´ıznakem TCP RST, cozˇ zajisˇt’uje hodnota tcp-reset u prˇepı´nacˇe reject-with. Sluzˇbu ident pra´veˇ nenı´ vhodne´ filtrovat pomocı´ DROP, protozˇe tı´m mu˚zˇe dojı´t k prodleva´m prˇi navazova´nı´ neˇktery´ch spojenı´. Sta´va´ se prˇedevsˇ´ım prˇi zası´la´nı´ e-mailu˚ na vadne´ posˇtovnı´ servery. 54
4. Bezpecˇnost na u ´ rovni sı´teˇ
$IPT -A INPUT -i ppp0 -p ICMP icmp-type echo-request -j ACCEPT Tı´mto prˇ´ıkazem docı´lı´me toho, zˇe firewall z ICMP paketu˚ propustı´ pouze ICMP s prˇ´ıznakem echo-request, cozˇ jsou pakety pro prˇ´ıkaz ping. Pokud bychom to neudeˇlali, byl by firewall pro prˇ´ıkaz ping neviditelny´. To by mohlo zpu˚sobit jiste´ administracˇnı´ potı´zˇe, nebo nespra´vny´ chod aplikacı´ na neˇm za´visly´ch. Ale z hlediska bezpecˇnosti to ma´ jisteˇ vy´hodu. Mnoho skeneru˚ pro hromadne´ testova´nı´ bere pra´veˇ odpoveˇd’ na ping, jako prˇ´ıznak toho, zˇe pocˇ´ıtacˇ je zapojen v sı´ti a mu˚zˇe ho podrobit hlubsˇ´ımu testova´nı´. Pokud je tato informace pro u ´ tocˇnı´ka smeˇrodatna´, nebude tento stroj podrobovat dalsˇ´ım testu˚m, protozˇe je pro neˇj obrazneˇ rˇecˇeno neviditelny´.
$IPT -A INPUT -i ppp0 -p TCP dport 22 -j ACCEPT Tı´mto prˇ´ıkazem povoluji prˇipojova´nı´ prˇes SSH na firewall. Zmeˇnou portu u prˇ´ıznaku dport mu˚zˇeme povolovat dalsˇ´ı sluzˇby. Seznam portu˚ a k nim prˇ´ıslusˇne´ sluzˇby naleznete v souboru /etc/services.
$IPT -A INPUT -i lo -j ACCEPT Loopback nijak neomezujeme. Mu˚zˇe to ve´st k proble´mu˚m.
$IPT -A INPUT -i eth1 -j ACCEPT Toto je velmi volne´ pravidlo a znamena´, zˇe propustı´me vsˇechny pakety z vnitrˇnı´ sı´teˇ a to i ty, ktere´ nejsou urcˇeny pro firewall, cozˇ by bylo samozrˇejmeˇ idea´lnı´, ale vzhledem k tomu, zˇe ma´m dynamickou IP, musela by se tato situace rˇesˇit jinak. Pokud chceme tedy zave´st pravidlo, aby se propousˇteˇly jen ty pakety z vnitrˇnı´ sı´teˇ, ktere´ jsou urcˇeny pro firewall, musı´me doplnit k tomuto pravidlu prˇepı´nacˇ -d s hodnotou IP rozhranı´ smeˇrujı´cı´ho do vnitrˇnı´ sı´teˇ a da´le prˇidat jesˇteˇ jedno identicke´ pravidlo, kde bude mı´t prˇepı´nacˇ -d hodnotu IP na rozhranı´ smeˇrˇujı´cı´ do Internetu. Kdyzˇ doplnı´te jesˇteˇ jeden identicky´ prˇ´ıkaz prˇepı´nacˇe -d s hodnotou adresace vnitrˇnı´ sı´teˇ s pocˇtem bitu˚ masky, tak to znamena´, zˇe povolı´me broadcasty z vnitrˇnı´ sı´teˇ.
55
4. Bezpecˇnost na u ´ rovni sı´teˇ
$IPT -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT Pakety od nava´zany´ch spojenı´ povoluji – tı´mto jsem se jizˇ zaby´val.
$IPT -A INPUT -m limit limit 12/h -j LOG log-prefix "INPUT drop: " Vsˇechny ostatnı´ pakety zakazuji a loguji.
U rˇeteˇzce OUTPUT nema´m zˇa´dna´ pravidla a povoluji ho cely´. To znamena´, zˇe plneˇ du˚veˇrˇuji paketu˚m odeslany´ch z aplikacı´ na firewallu. Toto nenı´ ovsˇem zcela spra´vne´. Spra´vneˇ bychom meˇli cely´ OUTPUT zaka´zat a povolit jen pakety s IP adresou rozhranı´ do vnitrˇnı´ sı´teˇ, IP adresou rozhranı´ do Internetu a loopack zarˇ´ızenı´ (poprˇ. povolit jesˇteˇ DHCP broadcasty, pokud je potrˇebuje). Ostatnı´ pakety by byly zahozeny, poprˇ. jesˇteˇ logova´ny. Ja´ zvolil tuto volneˇjsˇ´ı politiku opeˇt z du˚vodu prˇideˇlova´nı´ dynamicke´ IP adresy. Cely´ skript by jesˇteˇ vı´ce zı´skal na prˇehlednosti a zjednodusˇil manipulaci, pokud bychom rozhranı´ ppp0 prˇirˇadili naprˇ´ıklad do promeˇnne´ $INET_IFC a eth1 naprˇ´ıklad do promeˇnne´ $LAN_IFC. Vı´ce informacı´ o iptables naleznete naprˇ´ıklad na jeho manua´lovy´ch stra´nka´ch. Du˚lezˇite´ je take´ oveˇrˇit, zdali na´mi nakonfigurovany´ firewall pracuje tak, jak ma´ a poprˇ´ıpadeˇ ho doladit. K tomu na´m mohou poslouzˇit skenovacı´ a odposloucha´vacı´ na´stroje jako nmap17 , Nessus18 , tcpdump19 , Ethereal20 , dsniff21 , Snort22 a mnoho dalsˇ´ıch. Abychom byli u ´ plneˇ du˚slednı´ a to v prˇ´ıpadeˇ bezpecˇnosti informacˇnı´ch syste´mu˚ bychom by´t meˇli, nemeˇli bychom dovolit to, zˇe bude firewall v sı´ti zapojen byt’ jen na malou chvı´li bez kompletneˇ zavedeny´ch firewallovy´ch pravidel. Tato situace mu˚zˇe lehce nastat prˇi samotne´ instalaci syste´mu nebo i prˇi restartu syste´mu – zde by meˇla by´t pravidla zavedena drˇ´ıve, nezˇ se aktivuje samotna´ sı´t’. Pokud byste si chteˇli ulehcˇit pra´ci s psanı´m skriptu˚ pro iptables, existujı´ frontendy, ktere´ se va´m tuto pra´ci snazˇ´ı ulehcˇit. Ja´ osobneˇ je nepouzˇ´ıva´m a moc 17
http://www.insecure.org/nmap/ http://www.nessus.org/ 19 http://www.tcpdump.org/ 20 http://www.ethereal.com/ 21 http://naughty.monkey.org/~dugsong/dsniff/ 22 http://www.snort.org/ 18
56
4. Bezpecˇnost na u ´ rovni sı´teˇ
jim nedu˚veˇrˇuji (leckdy urcˇiteˇ nepra´vem). Jmenoviteˇ se jedna´ naprˇ´ıklad o MonMotha’s Firewall23 , Ferm24 , AGT25 , Knetfilter26 , gShield27 , a dalsˇ´ı.
4.2.3 Adaptivnı´ firewall Mysˇlenka adaptivnı´ch firewallu˚ je na sveˇteˇ asi od roku 1999. Adaptivnı´ firewall se snazˇ´ı na za´kladeˇ urcˇity´ch pravidel jako naprˇ´ıklad prˇ´ıstup na zaka´zane´ sluzˇby (porty) nebo u sofistikovaneˇjsˇ´ıch aplikacı´ i pokusy o exploitova´nı´ urcˇite´ho sı´t’ove´ho de´monu, upravit pravidla paketove´ho firewallu tak, aby znemozˇnila prˇ´ıstup u ´ tocˇnı´ka na vsˇechny sluzˇby stroje, ktery´ adaptivnı´ firewall chra´nı´ a nakonec i samotne´ho stroje, ktery´ slouzˇ´ı jako firewall. Jedna´ se vlastneˇ o jaky´si prvek aktivnı´ obrany. Takzˇe naprˇ´ıklad pokud se u ´ tocˇnı´k bude snazˇit prˇistoupit na sluzˇbu, na kterou nema´ pra´vo prˇistupovat, bude mu automaticky zaka´za´n prˇ´ıstup i na vsˇechny ostatnı´ sluzˇby, ke ktery´m meˇl za norma´lnı´ch podmı´nek pra´vo prˇ´ıstupu. Samozrˇejmeˇ tento prˇ´ıstup ma´ i sve´ nevy´hody a jednou z nich mu˚zˇe by´t to, zˇe zaka´zˇete prˇ´ıstup osobeˇ, ktera´ je du˚veˇryhodna´ a nestandardnı´ situace vznikla pouze omylem. Ovsˇem praxe uka´zala, zˇe teˇchto prˇ´ıpadu˚ je zanedbatelne´ procento ve srovna´nı´ s opravdovy´mi prˇ´ıpady napadenı´ syste´mu. Prˇi studova´nı´ problematiky adaptivnı´ch firewallu˚ jsem zjistil, zˇe tato oblast ma´ co do cˇineˇnı´ s IDS (Intrusion Detection System), ze ktery´ch se prˇi jiste´ konfiguraci takovy´ adaptivnı´ firewall sta´va´. Takovy´to firewall se skla´da´ z cˇa´sti, ktera´ odlisˇ´ı pakety s necˇisty´mi u ´ mysly a zjistı´ jejich zdrojovou adresu a druha´ cˇa´st, ktera´ modifikuje soucˇasna´ pravidla paketove´ho filtru tak, aby u ´ tocˇnı´k se zjisˇteˇnou zdrojovou adresou nemohl prˇistupovat k zˇa´dne´ ze sluzˇeb na strojı´ch, ktere´ jsou pod nasˇ´ı ochranou. Prvnı´ cˇa´st mu˚zˇe tvorˇit samotna´ IDS aplikace jako naprˇ´ıklad PortSentry nebo velice sofistikovany´ Snort, ktera´ vola´ skript (jakozˇto druhou cˇa´st), ktery´ se stara´ o modifikaci pravidel firewallu. Existuje implementace adaptivnı´ho firewallu s na´zvem Cracker Trap, kterou vytvorˇil sa´m Bob Toxen 28 . Tato aplikace doka´zˇe spolupracovat s iptables, ipchains cˇi TCP wrappers. Prˇes velke´ nasazenı´ a u ´ speˇchy, ktere´ byly s tı´mto na´strojem dosazˇeny, jizˇ nedoka´zˇe rozpoznat mnoho u ´ toku˚ (jako naprˇ´ıklad tzv. neviditelne´ skenova´nı´, ktere´ lze prove´st na´strojem nmap – tento zpu˚sob neodpovı´da´ specifikaci TCP, protozˇe je odesı´la´n jen prvnı´ paket TCP nebo paket s prˇ´ıznakem RST), ktere´ naprˇ´ıklad Snort rozpoznat doka´zˇe. Co se ty´cˇe druhe´ cˇa´sti, ktera´ ma´ za u ´ kol modifikovat firewall a poprˇ. neˇjaky´m zpu˚sobem upozornit na zjevneˇ nekalou aktivitu na sı´ti, je na´stroj Cracker Trap vybaven vı´c nezˇ dobrˇe. Modifikaci firewallu lze uskutecˇnit velmi jednodusˇe a to tak, zˇe 23
http://monmotha.mplug.org/firewall/index.php http://ferm.sourceforge.net/ 25 http://sourceforge.net/projects/agt 26 http://expansa.sns.it/knetfilter/ 27 http://muse.linuxmafia.org/gshield/ 28 Mimo jine´ jeden z vy´voja´rˇu˚ Berkeley Unixu a autor knihy [2].
24
57
4. Bezpecˇnost na u ´ rovni sı´teˇ
v prˇ´ıpadeˇ zachycenı´ u ´ toku, se prˇida´ pravidlo, ktere´ zakazuje prˇ´ıstup paketu˚ se zdrojovou IP adresou u ´ tocˇnı´ka. To mu˚zˇe vypadat naprˇ´ıklad takto:
/sbin/iptables /sbin/iptables /sbin/iptables /sbin/iptables
-I -I -I -I
FORWARD 1 -s 212.23.32.23 -j DROP FORWARD 1 -d 212.23.32.23 -j REJECT INPUT 1 -s 212.23.32.23 -j DROP OUTPUT 1 -d 212.23.32.23 -j REJECT
Z pohledu programa´tora na tom nenı´ vu˚bec nic slozˇite´ho nebo komplikovane´ho. Jen poznamena´m, zˇe jsem pouzˇil prˇepı´nacˇ -I, za ktery´m na´sleduje jme´no rˇeteˇzce a za nı´m cˇ´ıslo pravidla, ktere´ uda´va´ porˇadı´ vykona´va´nı´ pravidel. V nasˇem prˇ´ıpadeˇ ma´ cˇ´ıslo pravidla hodnotu 1, cozˇ znamena´, zˇe se vykona´ v rˇeteˇzci jako prvnı´. Cracker Trap (resp. skript blockip, ktery´ je soucˇa´stı´) da´le odesˇle elektronickou posˇtou varova´nı´ syste´movy´m administra´toru˚m a nebo take´ odesˇle varova´nı´ ˇ eske´ Republiky nenı´ prˇ´ılisˇ vyuzˇitelne´). Tyto zpra´vy jsou na pager (v podmı´nka´ch C da´le rozlisˇeny podle toho, zdali se jedna´ o nove´ho u ´ tocˇnı´ka nebo o neˇkoho, kdo se jizˇ do nasˇeho syste´mu snazˇil dostat drˇ´ıve. Da´le doka´zˇe na napadene´m stroji nebo na jake´mkoliv jine´m spustit zvuk, ktery´ va´s upozornı´ na pra´veˇ probı´hajı´cı´ u ´ tok. Take´ je uzpu˚soben k vyuzˇitı´ technologie X10 FireCracker 29 , pomocı´ ktere´ lze rozblikat sveˇtla nebo spustit houkacˇku. To znı´ sice velmi impozantneˇ, ale v beˇzˇny´ch podmı´nka´ch asi nebudete potrˇebovat spustit takovy´to poplach, kvu˚li tomu, zˇe neˇkdo skenuje porty na vasˇem serveru. Idea´lnı´ by urcˇiteˇ bylo zkombinovat vlastnosti skriptu blockip a na´stroj Snort, ktery´ ted’ blı´zˇe popı´sˇi. Jak uzˇ bylo rˇecˇeno, Snort je tzv. IDS (Intrusion Detection System). IDS mu˚zˇeme rozdeˇlit na HIDS (Host Intrusion Detection System), ktere´ odhalujı´ nekale´ aktivity prˇ´ımo v syste´mu – sem patrˇ´ı naprˇ´ıklad jizˇ zmin ˇ ovany´ LIDS cˇi HostSentry. Druhou skupinou jsou NIDS (Network Intrusion Detection System), ktere´ odhalujı´ pru˚niky na za´kladeˇ aktivity na sı´tı´ – sem patrˇ´ı pra´veˇ Snort, da´le pak naprˇ´ıklad Prelude 30 . Takovy´ IDS funguje na za´kladeˇ urcˇity´ch pravidel, ktere´ odra´zˇejı´ jiste´ charakteristiky podezrˇely´ch aktivit – v prˇ´ıpadeˇ Snortu je na jeho domovsky´ch stra´nka´ch 31 k dispozici databa´ze, ktera´ cˇ´ıta´ prˇes 2200 pravidel aktualizovana´ kazˇdou pu˚lhodinu. Takova´ signatura pravidla, ktere´ by meˇlo zachytit pokus o zneuzˇitı´ chyby v DNS serveru BIND 32 ve verzi 8.2 a 8.2.1, mu˚zˇe vypadat takto:
alert tcp $EXTERNAL_NET any -> $HOME_NET 53 (msg:"DNS EXPLOIT named 8.2->8.2.1"; flow:to_server,established; content:"../../../"; reference:cve,CVE-1999-0833; reference:bugtraq,788; classtype: attempted-admin; sid:258; rev:4;) 29
http://www.x10.com http://www.prelude-ids.org/ 31 http://www.snort.org/ 32 Podrobnosti o chybeˇ – http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-1999-0833 nebo http://www.securityfocus.com/bid/788 58 30
4. Bezpecˇnost na u ´ rovni sı´teˇ
Toto pravidlo rˇ´ıka´, zˇe paket smeˇrˇujı´cı´ z externı´ sı´teˇ (promeˇnna´ $EXTERNAL_NET se nastavı´ v konfiguracˇnı´m souboru) z jake´hokoliv portu do nasˇ´ı sı´teˇ (promeˇnna´ $HOME_NET) na port 53, obsahujı´cı´ sekvenci znaku˚ ”../../../” bude klasifikova´n jako pokus o exploitova´nı´ named serveru BIND a provede se akce alert. Signatura mu˚zˇe obsahovat i dalsˇ´ı informace, ktere´ urcˇujı´ naprˇ´ıklad prˇ´ıznaky paketu˚ (prˇ´ıznak flags) nebo pocˇet bajtu˚, kam se bude sekvence znaku˚ prohleda´vat (prˇ´ıznak depth). Pokud paket nebo sada paketu˚ bude odpovı´dat neˇjake´mu z pravidel, provede se urcˇita´ akce – v nasˇ´ı te´matice adaptivnı´ch firewallu˚ to bude modifikace pravidel pro firewall (naprˇ´ıklad pomocı´ skriptu blockip cˇi skriptu Guardian, ktery´ je doda´vany´ se samotny´m Snortem). Ale obecneˇ to mohou by´t i jine´ akce jako za´pis do syslogu, logova´nı´ paketu˚ ve forma´tu tcpdump, vy´stup do XML souboru, vy´stup do databa´ze nebo upozorneˇnı´ prˇes SNMP. Na tyto zpra´vy mu˚zˇeme pouzˇ´ıt program logcheck, ktery´ prohleda´ logy z IDS a zasˇle zpra´vu elektronickou posˇtou na uvedenou e-mailovou adresu. Mezi dalsˇ´ı, ovsˇem velmi mlady´ projekt stejne´ho zameˇrˇenı´ patrˇ´ı Magic Box 33 , ktery´ si take´ rozumı´ se Snortem. Vidı´me, zˇe i administra´tor ma´ k dispozici mocne´ na´stroje na obranu proti crackeru˚m a mohou proti nim aktivneˇ bojovat a ne pouze prˇihlı´zˇet, jak jejich syste´m odola´va´ nebo neodola´va´ na´poru vetrˇelcu˚.
4.2.4 DMZ DMZ je zkratkou pro ”Demilitarized Zone” (cˇesky pak ”Demilitarizovana´ zo´na”). Jde o oznacˇenı´ cˇa´stı´ sı´teˇ (i jine´ informacˇnı´ cˇa´sti), ktera´ je oddeˇlena od ostatnı´ch zarˇ´ızenı´ – v prˇ´ıpadeˇ sı´teˇ se jedna´ o cˇa´st, ktera´ je chra´neˇna firewallem od vneˇjsˇ´ı, tak vnitrˇnı´ sı´teˇ. Mu˚zˇeme si prˇedstavit naprˇ´ıklad firewall, ktery´ ma´ trˇi sı´t’ova´ rozhranı´ – ppp0, ktere´ smeˇrˇuje do vneˇjsˇ´ı sı´teˇ (naprˇ´ıklad do Internetu), eth0, ktere´ smeˇrˇuje do vnitrˇnı´ sı´teˇ a eth1, ktere´ smeˇrˇuje pra´veˇ do DMZ. Obecnou topologii takove´ sı´teˇ zna´zorn ˇ uje obra´zek 4.2. Toto sche´ma je v prostrˇedı´ akademicky´ch sı´tı´ vı´ce nezˇ optima´lnı´, protozˇe mu˚zˇete efektivneˇ chra´nit sve´ servery od nebezpecˇ´ı z vneˇjsˇ´ı sı´teˇ, tak i vnitrˇnı´, kde jak uzˇ jsem rˇekl, z du˚vodu prˇ´ıvalu sta´le novy´ch studentu˚, se skry´va´ mnoho potenciona´lnı´ch hrozeb. Pokud pouzˇijeme firewall na ba´zi paketove´ho filtru (naprˇ´ıklad iptables), vytvorˇ´ıme si jednodusˇe trˇi skripty s pravidly, z nichzˇ kazˇdy´ bude obhospodarˇovat svoje pakety podle zdrojove´ho a cı´love´ho zarˇ´ızenı´ – v nasˇem prˇ´ıkladeˇ tedy jeden skript bude filtrovat pakety mezi rozhranı´m ppp0 a eth0, druhy´ skript mezi ppp0 a eth1 a trˇetı´ mezi eth0 a eth1. V DMZ by meˇly by´t umı´steˇny 33
http://security.tamu.edu/db.html
59
4. Bezpecˇnost na u ´ rovni sı´teˇ
Obra´zek 4.2: Topologie sı´teˇ s DMZ servery, ktere´ majı´ by´t zprˇ´ıstupneˇny z vneˇjsˇ´ı sı´teˇ – na to se take´ va´zˇe prˇideˇlenı´ verˇejny´ch IP adres, poprˇ. prˇesmeˇrova´nı´ na routeru, ktere´ dany´ server vneˇjsˇ´ı sı´tı´ zprˇ´ıstupnı´. Samozrˇejmeˇ podobne´ ochrany mu˚zˇeme docı´lit pomocı´ zapojenı´ dvou cˇi vı´ce firewallu˚. Mozˇne´ je i vytvorˇenı´ mnohem slozˇiteˇjsˇ´ı varianty segmentace cele´ sı´teˇ.
4.3 Aplikac ˇnı´ proxy Proxy vznikla uzˇ v da´vny´ch doba´ch Internetu, kdy bylo webovy´ch stra´nek velmi ma´lo. Byly prˇedevsˇ´ım staticke´ a propojenı´ v sı´tı´ch pomale´. Zde nasˇla uplatneˇnı´ pra´veˇ proxy, ktera´ ukla´dala navsˇteˇvovane´ stra´nky do vyrovna´vacı´ pameˇti a pokud neˇkdo z vnitrˇnı´ sı´teˇ pozˇadoval danou stra´nku, mohla mu by´t nacˇtena rovnou z proxy cache. Tı´mto se minimalizovalo zbytecˇne´ prˇipojova´nı´ na servery v Internetu a na´sledne´ zbytecˇne´ stahova´nı´ stra´nky, kterou jizˇ neˇkdo pozˇadoval. Ale jak se zacˇal Internet da´le sˇiroce rozsˇirˇovat a vznikaly dynamicke´ stra´nky (s dynamicky´m obsahem), vyplatila se tato funkce pouze ve velky´ch sı´tı´ch (naprˇ´ıklad u ISP (Internet Service Provider). Pozdeˇji se zjistilo, zˇe pouzˇitı´ proxy ma´ dalsˇ´ı vy´hody a to prˇedevsˇ´ım tu, zˇe umozˇn ˇ uje skry´t vsˇechny uzˇivatele za jedno zarˇ´ızenı´ a na´slednou kontrolu obsahu nebo blokovat URL. Za´kladnı´ funkcı´ proxy je tedy zalozˇen na principu forwardova´nı´ protokolu˚ sluzˇeb – neˇktere´ proxy servery zajistı´ i prˇeklad adres nebo filtrova´nı´ paketu˚, cˇ´ımzˇ uzˇ se ale spı´sˇe meˇnı´ na firewall.
60
4. Bezpecˇnost na u ´ rovni sı´teˇ
Prˇ´ıkladem takove´ho firewallu mu˚zˇe by´t Checkpoint Firewall-1, cozˇ je velmi mocny´ na´stroj, ovsˇem take´ dost drahy´. Na´s budou zajı´mat prˇedevsˇ´ım aplikace, ktere´ zajisˇt’ujı´ vy´hradneˇ funkci forwardova´nı´ protokolu˚ sluzˇeb a to zejme´na protokolu HTTP. Klientske´ pocˇ´ıtacˇe musı´ by´t pro vyuzˇ´ıva´nı´ explicitnı´ proxy serveru nakonfigurova´ny – v prˇ´ıpadeˇ transparentnı´ch proxy si pouzˇitı´ proxy zjistı´ samotne´ klientske´ aplikace, pokud tuto schopnost majı´. Jednou z klı´cˇovy´ch funkcı´ HTTP proxy serveru˚ je blokova´nı´ URL. I kdyzˇ se moc neprˇikla´nı´m k tomuto omezova´nı´ uzˇivatelu˚ internı´ sı´teˇ, mu˚zˇe se sta´t, zˇe jako administra´torˇi budeme nuceni neˇktere´ URL blokovat. Pozˇadavky na danou URL jsou jednodusˇe porovna´va´ny se seznamem zaka´zany´ch adres (tzv. blacklist) a dany´ pozˇadavek smeˇrˇujı´cı´ na zaka´zanou URL, nebude ani z proxy serveru vysla´n. Ovsˇem toto lze neˇkdy obejı´t zada´nı´m URL ve formeˇ IP adresy nebo cele´ho cˇ´ısla, ktere´ zjistı´me z IP adresy podle vzorce:
A × 224 + B × 216 + C × 28 + D
(4.1)
IP adresa je zde reprezentova´na tvarem A.B.C.D. Takzˇe naprˇ´ıklad URL adresu porta´lu Seznam.cz lze do prohlı´zˇecˇe zadat ve tvarech:
http://www.seznam.cz http://212.80.76.3 http://3562032131 Proxy servery take´ umozˇn ˇ ujı´ filtrovat samotny´ obsah. U HTTP proxy serveru˚ je zajı´mave´ prˇedevsˇ´ım filtrova´nı´ ActiveX, Java apletu˚ nebo objemny´ch obra´zku˚ a jiny´ch multimedia´lnı´ch prvku˚. Kontrolovat lze i vy´skyt urcˇity´ch znakovy´ch rˇeteˇzcu˚. Proxy by meˇla take´ zajistit spra´vnou formu posı´lany´ch dat a zamezit prˇeposı´la´nı´ zdeformovany´ch pozˇadavku˚. Dalsˇ´ı funkcı´ proxy serveru je to, zˇe skry´va´ pocˇ´ıtacˇe ve vnitrˇnı´ sı´ti a vsˇechna data prote´kajı´ jednı´m bodem. U HTTP proxy serveru˚ to neznamena´ nic jine´ho, nezˇ zˇe pocˇ´ıtacˇ z vnitrˇnı´ sı´teˇ vysˇle pozˇadavek a proxy server ho prˇijme, jakoby byl konecˇny´ webovy´ server. Vygeneruje znovu svu˚j pozˇadavek a posˇle ho skutecˇne´mu webove´mu serveru, ktery´ odpovı´ zpa´tky proxy serveru. Ten uzˇ jen prˇeposˇle odpoveˇd’ pocˇ´ıtacˇi ve vnitrˇnı´ sı´ti. S tı´mto take´ souvisı´ to, zˇe proxy se hodı´ pro vytva´rˇenı´ ru˚zny´ch statistik o navsˇteˇvovany´ch stra´nka´ch nebo stazˇeny´ch datech.
61
4. Bezpecˇnost na u ´ rovni sı´teˇ
Z prˇedesˇle´ vy´hody ovsˇem take´ vyply´va´ jedno riziko a to pokud z neˇjaky´ch du˚vodu˚ selzˇe proxy server, znemozˇnı´ to cele´ podsı´ti, kterou proxy zastrˇesˇovala, pouzˇ´ıva´nı´ dane´ sluzˇby. Dalsˇ´ı nevy´hodou je to, zˇe pokud budeme chtı´t pouzˇ´ıt proxy na vı´ce sluzˇeb, budeme muset pro kazˇdou sluzˇbu zave´st svojı´ proxy. Pokud pro sluzˇbu neexistuje proxy server, mu˚zˇeme vyuzˇ´ıt tzv. SOCKS proxy, kdy se prˇipojenı´ realizuje prˇes protokol TCP. V akademicky´ch sı´tı´ch najdou proxy servery (zejme´na HTTP proxy nebo FTP proxy) uplatneˇnı´ prˇi oddeˇlova´nı´ veˇtsˇ´ıch segmentu˚ sı´teˇ a to prˇedevsˇ´ım z du˚vodu kontroly nebo prˇ´ıpadne´ho blokova´nı´ urcˇity´ch URL a sˇetrˇenı´ provozu pomocı´ proxy cache ve veˇtsˇ´ıch sı´tı´ch. V mensˇ´ıch sı´tı´ch se vypla´cı´ umist’ovat proxy server prˇ´ımo na hranici, kde se oddeˇluje vnitrˇnı´ sı´t’ od Internetu.
4.3.1 SQUID Squid34 je jedna z nejpouzˇ´ıvaneˇjsˇ´ıch proxy na ba´zi Open Source. Podporuje protokoly HTTP (i HTTPS), FTP, Gopher a dalsˇ´ı. Konfiguracˇnı´ soubor Squidu squid.conf je standardneˇ umı´steˇn v /etc/squid/. Nejprve je potrˇeba modifikovat neprˇ´ıjemne´ implicitnı´ nastavenı´, ktere´ umozˇn ˇ uje komukoliv, aby se prˇipojil na proxy server a vyuzˇ´ıval jeho sluzˇeb. Tohoto hojneˇ vyuzˇ´ıvajı´ uzˇivatele´ s nekaly´mi u ´ mysly, kterˇ´ı tı´mto mohou pouzˇ´ıvat danou sluzˇbu s adresou proxy serveru a tı´m skry´vat svojı´ identitu prˇed servery, na ktere´ se skrze proxy prˇipojujı´. Tyto servery pak zpravidla vidı´ adresu proxy serveru. Spra´vne´ chova´nı´ je takove´, aby se na proxy server mohli hla´sit jen pocˇ´ıtacˇe z vnitrˇnı´ sı´teˇ. Tohoto mu˚zˇeme docı´lit samozrˇejmeˇ zablokova´nı´m prˇ´ıslusˇne´ho portu pomocı´ paketove´ho firewallu. Toto omezenı´ lze zprostrˇedkovat i pomocı´ konfiguracˇnı´ho souboru squid.conf, ve ktere´m lze definovat sekvenci pravidel. Na´sledujı´cı´ prˇ´ıklad povolı´ prˇ´ıstup ke Squid serveru pouze IP adresa´m 192.168.0.3 a 192.168.0.4.
acl OK 192.168.0.3 192.168.0.4 http_access allow OK http_access deny all Samozrˇejmeˇ lze zada´vat i cele´ podsı´teˇ – naprˇ´ıklad 192.168.0.0/255.255.0.0 pro sı´t’ trˇ´ıdy B s adresami 192.168.*.*. Jednotliva´ pravidla jsou procha´zena od shora dolu˚ dokud se nenalezne prvnı´ odpovı´dajı´cı´ pravidlo, ktere´ dany´ pozˇadavek povoluje nebo zamı´ta´. Dalsˇ´ı implicitnı´ polozˇkou je port, na ktere´m Squid nasloucha´. Je to port 3128. Pokud ma´te nastavena´ spra´vna´ pravidla, ktera´ omezı´ prˇ´ıstup nezˇa´doucı´m uzˇivatelu˚m, tak je zbytecˇne´, abyste tento port meˇnili na neˇjaky´ jiny´ a tı´m se vyhnuli 34
http://www.squid-cache.org/
62
4. Bezpecˇnost na u ´ rovni sı´teˇ
skeneru˚m, ktere´ hledajı´ volne´ Squid proxy servery. Tento port se musı´ nastavit v aplikaci na klientske´ straneˇ – naprˇ´ıklad v internetove´m prohlı´zˇecˇi v prˇ´ıpadeˇ HTTP proxy. Samozrˇejmeˇ musı´me na firewallu zaka´zat HTTP port 80 (poprˇ´ıpadeˇ jesˇteˇ HTTPs port 443), aby uzˇivatele´ nemohli proxy server obejı´t prˇ´ımy´m vyuzˇitı´m protokolu HTTP nebo HTTPs a byli donuceni se prˇipojit na port, na ktere´m nasloucha´ proxy server. Da´le je dobre´ upravit porty, ke ktery´m se bude Squid prˇipojovat, protozˇe jsou zde implicitneˇ uvedeny kromeˇ vybrany´ch portu˚ nizˇsˇ´ıch jak 1023, take´ kompletneˇ vsˇechny porty nad 1024, cozˇ jsou dostatecˇneˇ otevrˇene´ dverˇe pro ru˚zne´ typy trojsky´ch konı´ a dalsˇ´ım hrozba´m. Upravena´ omezenı´ v konfiguracˇnı´m souboru by mohla vypadat takto:
acl Safe_ports port 80 21 443 563 http_access deny !Safe_ports Tato konfigurace povolı´ Squidu prˇipojovat se pouze na porty 80 (HTTP), 21 (FTP), 443 (HTTPs) a 563 (NNTP prˇes SSL).
4.4 VPN Tato podkapitola by mohla by´t zarˇazena do kapitoly ”3 Za´kladnı´ hardening GNU/Linuxu”, kde se zaby´va´m mimo jine´ sˇifrova´nı´m, protozˇe te´matika VPN (Virtual private network) se sˇifrova´nı´ u ´ zce ty´ka´. Prˇesto se tato te´matika ty´ka´ prˇedevsˇ´ım bezpecˇnosti na sı´ti a proto je zarˇazena do te´to kapitoly. VPN nechra´nı´ prˇ´ımo sı´t’ (od toho tu jsou firewally a dalsˇ´ı prvky), ale chra´nı´ prˇenos po sı´ti. VPN lze tedy prˇ´ımo vyuzˇ´ıt k bezpecˇne´mu propojenı´ sı´tı´ LAN nebo jednotlivy´ch pocˇ´ıtacˇu˚, kde musı´ data procha´zet nedu˚veˇryhodny´mi sı´teˇmi jako naprˇ´ıklad Internet. VPN je tedy levny´ zpu˚sob (oproti klasicky´m priva´tnı´m sı´tı´m), jak rozsˇ´ırˇit loka´lnı´ sı´teˇ na vzda´lene´ sı´teˇ a ke vzda´leny´m klientsky´m pocˇ´ıtacˇu˚m prˇes Internet. Pakety jsou prˇena´sˇeny v zasˇifrovane´ podobeˇ, takzˇe je mezilehle´ pocˇ´ıtacˇe nemohou cˇ´ıst – v neˇktery´ch implementacı´ch (naprˇ´ıklad IPSec) je zarucˇena i integrita dat. Samozrˇejmeˇ lze touto cestou, byt’ nechteˇneˇ, prˇena´sˇet viry a jina´ za´kerˇna´ data (resp. pakety). Du˚lezˇite´ je do nasˇ´ı sı´teˇ v ra´mci VPN nepovolit zˇa´dne´ spojenı´, ktere´ by meˇlo nizˇsˇ´ı zabezpecˇenı´ nezˇ nasˇe loka´lnı´ sı´t’. Bezpecˇnost prˇenosu je zajisˇteˇna trˇemi za´kladnı´mi prvky – zapouzdrˇenı´ IP, sˇifrovana´ autentizace a sˇifrova´nı´ datove´ cˇa´sti. Zapouzdrˇenı´ sı´teˇ strucˇneˇ znamena´, zˇe skutecˇna´ IP je zapouzdrˇena do dalsˇ´ı IP adresy, protozˇe tak lze zkontaktovat pocˇ´ıtacˇ v jine´ sı´ti, i kdyzˇ nenı´ mozˇne´ realizovat prˇ´ıme´ sı´t’ove´ spojenı´. Z pohledu sı´t’ovy´ch pocˇ´ıtacˇu˚ vznika´ prˇedstava, zˇe dveˇ vzda´lene´ sı´teˇ jsou sı´teˇ oddeˇlene´ pouze jednı´m smeˇrovacˇem, prˇicˇemzˇ ve skutecˇnosti takovy´ch smeˇrovacˇu˚ mu˚zˇe by´t vı´ce. 63
4. Bezpecˇnost na u ´ rovni sı´teˇ
Umozˇn ˇ uje take´ kontaktovat pocˇ´ıtacˇe v priva´tnı´m adresnı´m rozsahu, ktere´ se jinak v Internetu nesmeˇrujı´. Popı´sˇi podrobneˇji na konkre´tnı´m prˇ´ıkladeˇ, jak takova´ komunikace probı´ha´. Pocˇ´ıtacˇ s IP adresou 192.168.0.5 v sı´ti 192.168.0.0/255.255.255.0 potrˇebuje poslat paket pocˇ´ıtacˇi 192.168.1.8 v sı´ti 192.168.1.0/255.255.255.0. Nejprve vysı´lajı´cı´ pocˇ´ıtacˇ zjistı´, zˇe adresa sı´teˇ, ve ktere´ se cı´lovy´ pocˇ´ıtacˇ nacha´zı´, se neshoduje s adresou jeho sı´teˇ. Vysı´lajı´cı´ pocˇ´ıtacˇ posˇle paket na implicitnı´ bra´nu jeho sı´teˇ, cozˇ je v nasˇem prˇ´ıpadeˇ pocˇ´ıtacˇ s adresou 192.168.0.1. Smeˇrovacˇ paket prˇecˇte a odesˇle do cı´love´ sı´teˇ 192.168.1.0/255.255.255.0. Smeˇrovacˇ v cı´love´ sı´ti s adresou 192.168.1.1 paket prˇecˇte a odesˇle na cı´lovy´ pocˇ´ıtacˇ 192.168.1.8, ktery´ paket prˇijme. ˇ ifrovanou autentizacı´ se oveˇrˇuje totozˇnost vzda´lene´ho uzˇivatele, aby mohla S VPN urcˇit, zda je mozˇno s uzˇivatelem bezpecˇny´ tunel vytvorˇit. Tuto autentizaci je take´ mozˇno vyuzˇ´ıt k vy´meˇneˇ priva´tnı´ch nebo verˇejny´ch klı´cˇu˚ pro sˇifrova´nı´ daˇ ifrovana´ autentizace se prova´dı´ bud’ pomocı´ priva´tnı´ho klı´cˇe, kde tove´ cˇa´sti. S se spole´ha´ na tajnou hodnotu, kterou obeˇ strany znajı´. Informace, zˇe uzˇivatel tunelu tento klı´cˇ zna´, dokla´da´ du˚veˇryhodnost tohoto uzˇivatele druhe´mu u ´ cˇastnı´kovi tunelu. Nevy´hoda te´to komunikace spocˇ´ıva´ v pocˇa´tecˇnı´ vy´meˇneˇ klı´cˇu˚. Neexistuje zcela bezpecˇny´ zpu˚sob, aby se obeˇ strany dozveˇdeˇly najednou priva´tnı´ klı´cˇ. Vzˇdycky musı´ nejdrˇ´ıve probeˇhnout neˇjaka´ forma nesˇifrovane´ komunikace. Vy´hodou je neˇkolika na´sobna´ rychlost oproti sˇifrova´nı´ na principu verˇejne´ho klı´cˇe, kde se spole´ha´ na vy´meˇnu klı´cˇu˚, kde verˇejny´ klı´cˇ slouzˇ´ı jen na zasˇifrova´nı´ dat a priva´tnı´ klı´cˇ jen na rozsˇifrova´nı´ dat. ˇ ifrova´nı´ datove´ cˇa´sti se pouzˇ´ıva´ k proste´mu utajenı´ obsahu vlozˇeny´ch dat. S Neutajuje ovsˇem informace z hlavicˇky, proto je mozˇne´ zjistit podrobnosti o sı´ti. Ovsˇem pokud bychom srovnali klasicke´ priva´tnı´ sı´teˇ (naprˇ´ıklad WAN) a VPN, mu˚zˇeme rˇ´ıci, zˇe VPN jsou sice levneˇjsˇ´ı, dajı´ se lehce implementovat, ale oproti WAN jsou pomalejsˇ´ı a me´neˇ spolehlive´. V akademicky´ch sı´tı´ch najdou VPN uplatneˇnı´ prˇedevsˇ´ım prˇi propojova´nı´ segmentu˚ sı´teˇ, kde musı´ datovy´ provoz procha´zet Internetem. Mu˚zˇe se jednat o propojenı´ ru˚zny´ch pracovisˇt’, fakult, apod. Samozrˇejmeˇ lze pomocı´ VPN umozˇnit bezpecˇny´ prˇ´ıstup do internı´ sı´teˇ jednotlivy´m pocˇ´ıtacˇu˚m. Takzˇe administra´tor nebo jaky´koliv jiny´ zameˇstnanec mu˚zˇe s internı´ akademickou sı´tı´ bezpecˇneˇ komunikovat.
64
4. Bezpecˇnost na u ´ rovni sı´teˇ
4.4.1 IPSec IPSec je rozsˇirˇujı´cı´ protokol pro bezpecˇnou komunikaci prˇes IP a popsa´no je prˇedevsˇ´ım v RFC 240135 . Ostatnı´ odkazy na RFC ty´kajı´cı´ se IPSec jsou k nalezenı´ na URL:
http://www.ietf.org/html.charters/ipsec-charter.html ˇ ifrova´nı´ v IPSec probı´ha´ na u S ´ rovni IP protokolu, cozˇ znamena´, zˇe je pro aplikace a dalsˇ´ı sı´t’ove´ prvky zcela transparentnı´. To mu˚zˇe by´t ovsˇem v neˇktery´ch prˇ´ıpadech nezˇa´doucı´ – naprˇ´ıklad pokud pozˇadujeme navı´c autentizaci uzˇivatele v ra´mci neˇjake´ aplikace. Toto vsˇak lze vyrˇesˇit jiny´mi prostrˇedky typu SSL. Prˇedem je nutne´ rˇ´ıci, zˇe IPSec ma´ cenu instalovat pouze na IPv4, protozˇe v noveˇjsˇ´ım IPv6 je jizˇ jeho povinnou soucˇa´stı´. Za´kladnı´mi kameny IPSec jsou rozsˇirˇujı´cı´ mechanismy AH (Authentication Header) popsane´ v RFC 2402 36 a ESP (Encapsulated Security Payload) popsane´ v RFC 2406 37 . Prvnı´ za´kladnı´ cˇa´st AH poskytuje prostrˇedky pro autentizaci a ESP k tomu vcˇetneˇ autentizace prˇida´va´ jesˇteˇ sˇifrova´nı´. Obeˇ cˇa´sti jsou vza´jemneˇ prova´za´ny a mohou by´t pouzˇity spolecˇneˇ nebo neza´visle na sobeˇ. Tyto robustnı´ protokoly jsou doplneˇny mechanismem IKE (Internet Key Exchange) popsane´m v RFC 2409 38 , ktery´ ma´ za u ´ kol zajistit vy´meˇnu klı´cˇu˚. Prvnı´m krokem je vytvorˇenı´ SA (Security Association). Aby spolu mohly bezpecˇneˇ komunikovat dveˇ strany, je zapotrˇebı´ dvou SA. SA obsahuje atributy jako cı´lovou IP adresu, IPSec protokol (AH nebo ESP), SPI 39 , mo´d prˇenosu (tunel nebo transportnı´ rezˇim), a dalsˇ´ı. Jizˇ zmin ˇ ovane´ SPI (Security Parametr Index) je cˇ´ıslo, ktere´ jednoznacˇneˇ identifikuje dany´ SA. IPSec mu˚zˇe fungovat v jednom ze dvou mo´du˚ a to bud’ v transportnı´m rezˇimu, kde nedocha´zı´ k zapouzdrˇova´nı´ paketu˚ a funguje tedy stejneˇ jako beˇzˇny´ IP prˇenos s tı´m rozdı´lem, zˇe se autentizujı´ hlavicˇky pomocı´ AH a obsah se sˇifruje pomocı´ ESP. Druhy´m mo´dem je tzv. tunel, kde jizˇ k zapouzdrˇenı´ paketu˚ do AH nebo ESP docha´zı´. Transportnı´ mo´d tedy slouzˇ´ı k vytvorˇenı´ autentizovane´ komunikace prˇes verˇejne´ intervaly IP mezi hostitelsky´mi pocˇ´ıtacˇi. Tunel slouzˇ´ı prˇedevsˇ´ım k vytvorˇenı´ bezpecˇne´ho spojenı´ mezi koncovy´mi body sı´teˇ (smeˇrovacˇi), cˇ´ımzˇ vznikne bezpecˇne´ propojenı´ dvou sı´tı´. Du˚lezˇite´ je upozornit na to, zˇe nativneˇ nelze provozovat IPSec prˇes NAT, protozˇe NAT meˇnı´ informace v hlavicˇce, cozˇ je pro IPSec neprˇ´ıpustne´. Vı´ce o tomto proble´mu se lze docˇ´ıst na URL:
http://www.cisco.com/warp/public/759/ipj_3-4/ipj_3-4_nat.html 35
http://www.ietf.org/rfc/rfc2401.txt http://www.ietf.org/rfc/rfc2402.txt 37 http://www.ietf.org/rfc/rfc2406.txt 38 http://www.ietf.org/rfc/rfc2409.txt 39 Podrobneˇji o SPI da´le.
36
65
4. Bezpecˇnost na u ´ rovni sı´teˇ
Nynı´ popı´sˇi na konkre´tnı´m prˇ´ıkladeˇ propojenı´ dvou sı´tı´ pomocı´ IPSec. Adresa prvnı´ sı´teˇ je 192.168.0.0/255.255.255.0 s implicitnı´ priva´tnı´ IP adresou smeˇrovacˇe. Verˇejna´ IP adresa tohoto smeˇrovacˇe je 212.123.22.4. Druha´ sı´t’ ma´ adresu 192.168.1.0/255.255.255.0 opeˇt s implicitnı´ IP adresou smeˇrovacˇe. Verˇejna´ IP adresa tohoto smeˇrovacˇe je 147.34.32.5. Vysı´lajı´cı´ pocˇ´ıtacˇ zjistı´, zˇe cı´lova´ adresa se neshoduje s jeho sı´t’ovou adresou a posˇle paket na implicitnı´ adresu pro bra´nu sı´teˇ – v nasˇem prˇ´ıpadeˇ tedy 192.168.0.1. Smeˇrovacˇ IPSec v sı´ti 192.168.0.0/255.255.255.0 paket prˇecˇte a urcˇ´ı, zˇe paket se ma´ odeslat do sı´teˇ 192.168.1.0/255.255.255.0, pro nizˇ ma´ nadefinovanou SA, ktera´ prˇes Internet odkazuje na smeˇrovacˇ 147.34.32.5. Smeˇrovacˇ IPSec posˇle na vzda´leny´ smeˇrovacˇ pozˇadavek o domluvu IKE, autentizuje se a domluvı´ se na sadeˇ sˇifrovacı´ch a autentizacˇnı´ch klı´cˇu˚. Smeˇrovacˇ s verˇejnou IP adresou 212.123.22.4 zasˇifruje paket, zapouzdrˇ´ı ho a posˇle smeˇrovacˇi s verˇejnou IP adresou 147.34.32.5. Cı´lovy´ ´ speˇsˇne´ desˇifrova´nı´ paketu dokazuje platnost smeˇrovacˇ paket prˇijme a desˇifruje. U klı´cˇu˚. Ten samy´ smeˇrovacˇ posˇle paket na pocˇ´ıtacˇ v priva´tnı´ sı´ti, ktery´ ho prˇijme. IPSec nemusı´ slouzˇit pouze k vytva´rˇenı´ VPN, ale take´ naprˇ´ıklad k na´hradeˇ sˇifrova´nı´ WEP a jehozˇ slabina´ch jsem se zmin ˇ oval v u ´ vodu kapitoly ”4 Bezpecˇnost na u ´ rovni sı´teˇ”. V GNU/Linuxu je k dispozici hned neˇkolik implementacı´ IPSec. Jednou z nejkvalitneˇjsˇ´ıch implementacı´ je projekt FreeS/WAN 40 , ktery´ ovsˇem na zacˇa´tku brˇezna 2004 skoncˇil41 a zanedlouho se objevil projekt, ktery´ ve vy´voji pokracˇuje a je jı´m projekt Openswan42 . Dalsˇ´ı implementacı´ je patch patch-int, ktery´ je soucˇa´stı´ CryptoAPI43 . CryptoAPI je jizˇ soucˇa´stı´ ja´dra rˇady 2.6. V ja´drech pocˇ´ınaje verzı´ 2.5.47 (takzˇe i ja´dra rˇady 2.6) se nacha´zı´ nativnı´ implementace IPSec, ktera´ se inspirovala projektem KAME 44 . Ovla´dacı´ na´stroje pro tuto implementaci lze najı´t na URL:
http://sourceforge.net/projects/ipsec-tools IPSec je slozˇity´ mechanismus, cozˇ zvysˇuje pravdeˇpodobnost vy´skytu chyb. Mu˚zˇe se jednat naprˇ´ıklad o nekompatibilitu ru˚zny´ch implementacı´ IPSec. 40
http://www.freeswan.org/ http://www.freeswan.org/ending letter.html 42 http://www.openswan.org/ 43 http://ftp.kerneli.org/pub/linux/kernel/crypto/ 44 http://www.kame.net/
41
66
4. Bezpecˇnost na u ´ rovni sı´teˇ
4.4.2 OpenSSH, SSH V prve´ rˇadeˇ je du˚lezˇite´ si vyjasnit pojmy a vysveˇtlit rozdı´l mezi SSH1, SSH2 45 ´ plneˇ pu˚vodnı´ SSH1 a OpenSSH46 . SSH cˇi ssh je zkratkou pro ”Secure Shell”. U obsahuje programy slogin, scp a ssh jako na´hrada utilit rlogin, rcp a rsh, ktere´ jsem probı´ral v kapitole ”2 Za´kladnı´ hardening GNU/Linuxu”. Licence te´to verze pozˇaduje poplatek za pouzˇ´ıva´nı´ pro zisk. SSH2 rozsˇirˇuje verzi 1. Obsahuje dalsˇ´ı utilitu a to sftp, cozˇ je jake´si bezpecˇne´ FTP, cozˇ je protokol slouzˇ´ıcı´ k prˇenosu souboru˚. Programy SSH2 nejsou kompatibilnı´ s SSH1, ale v prˇ´ıpadeˇ potrˇeby jsou schopny zavolat starsˇ´ı verzi. Licence u te´to verze byla dost matoucı´ a ke zmeˇneˇ licence dosˇlo azˇ po tom, co se objevilo OpenSSH. Nynı´ je tedy SSH2 volneˇ dostupne´. OpenSSH bylo vystaveˇno na starsˇ´ıch verzı´ch SSH1, nezˇ se licence te´to verze stala omezujı´cı´. OpenSSH podporuje oba protokoly ssh. Pokud se podı´va´te ve vasˇ´ı linuxove´ distribuci na verzi vasˇeho ssh klienta a serveru, naprˇ´ıklad prˇ´ıkazem ssh -V, budete vlastnit s nejveˇtsˇ´ı pravdeˇpodobnostı´ pra´veˇ OpenSSH. Zacˇnu obecneˇji. Jak probı´ha´ takove´ ssh spojenı´. Ssh server nasloucha´ standardneˇ na portu 22, takzˇe se nejdrˇ´ıve nava´zˇe spojenı´ na tento port. Server o sobeˇ prozradı´, kterou verzi SSH pouzˇ´ıva´. To same´ v vza´peˇtı´ udeˇla´ klient. Pokud neˇktera´ ze stran zjistı´, zˇe by si spolu nerozumeˇli, ukoncˇ´ı se spojenı´. Autentizace na serveru probı´ha´ tak, zˇe nejdrˇ´ıve server posˇle svu˚j hostkey (verˇejny´ klı´cˇ) a neˇktere´ dalsˇ´ı informace. Da´le server posˇle svu˚j serverkey, cozˇ je klı´cˇ generovany´ v pravidelny´ch intervalech. Klient vygeneruje sessionkey a zasˇifruje ho obeˇma klı´cˇi na serveru. Klient vra´tı´ zasˇifrovany´ sessionkey s dalsˇ´ımi informacemi (naprˇ´ıklad jaky´ bude pouzˇit sˇifrovacı´ algoritmus). Pote´ uzˇ mohou obeˇ strany pouzˇ´ıvat sˇifrovanou komunikaci. Samotna´ autentizace se prova´dı´ pomocı´ RSA nebo v prˇ´ıpadeˇ SSH2 pomocı´ DSA. Existujı´ i jine´ metody autentizace jako naprˇ´ıklad autentizace pomocı´ syste´mu Kerberos47 , autentizace pomocı´ ~/.rhosts cˇi ~/.shosts a dalsˇ´ı. Autentizace RSA probı´ha´ na jizˇ zmin ˇ ovane´ ba´zi verˇejne´ho a priva´tnı´ho klı´cˇe – priva´tnı´ (soukromy´) klı´cˇ ma´ klient u sebe a verˇejny´ klı´cˇ nahra´va´ na servery, proti ktery´m se chce autentizovat. Klient tedy nabı´dne serveru formu autentizace a shodnou se naprˇ´ıklad na RSA (DSA probı´ha´ obdobneˇ). Klient posˇle svu˚j verˇejny´ klı´cˇ a server ho porovna´ s klı´cˇem, ktery´ jizˇ ma´ a spojenı´ bud’ povolı´ nebo zamı´tne. Server vygeneruje vy´zvu a zasˇifruje ji verˇejny´m klı´cˇem klienta, ktery´ ji rozsˇifruje a vytvorˇ´ı tzv. fingerprint. Ten mu˚zˇe by´t ve tvaru SHA-1, ktery´ vypada´ naprˇ´ıklad takto:
2f:b6:95:d5:s1:5f:r3:gd:7d:03:51:2d:18:b7:86:c3 45
SSH1 a SSH2 se veˇtsˇinou obecneˇ nazy´va´ SSH (http://www.ssh.com/). Protokol je pak oznacˇova´n ssh. 46 http://www.openssh.org/ 47 Prˇesneˇji Key Distribution Center KDC – tzv. trˇetı´ hlava psa Kerbera.
67
4. Bezpecˇnost na u ´ rovni sı´teˇ
nebo ve tvaru Bubble Babble a vypadat naprˇ´ıklad takto:
xulip-fihor-hijah-kevad-fyzyt-bulah-cyzuz-mezid-firek-luvyz-pixus. OpenSSH pouzˇ´ıva´ prvnı´ variantu SHA-1. Klient posˇle fingerprint serveru, ktery´ ho porovna´ a autentizuje klienta. Da´le se mu˚zˇe naprˇ´ıklad spustit shell (na´sledny´ prˇechod do interaktivnı´ho rezˇimu), prˇesmeˇrovat X11, vykona´nı´ neˇjake´ho prˇ´ıkazu, prˇesmeˇrova´nı´ portu˚, atd. A nynı´ jizˇ prakticˇteˇji. Pokud se poprve´ prˇihla´sı´me na ssh server naprˇ´ıklad takto:
ssh
[email protected] nebo
ssh -l pepa fjfi.cvut.cz zepta´ se va´s server, jestli souhlası´te s fingerprintem serveru. Verˇejny´ klı´cˇ si pak ulozˇ´ı a upozorn ˇ uje pouze v prˇ´ıpadeˇ, kdyzˇ se fingerprint zmeˇnı´. Pokud se fingerprint zmeˇnı´, nemusı´ to hned znamenat ohrozˇenı´ bezpecˇnosti, ale naprˇ´ıklad prˇeinstalova´nı´ serveru. Ovsˇem ssh va´s nebude chtı´t pustit da´l. Abyste mohli pokracˇovat, je nutne´ smazat prˇ´ıslusˇne´ rˇa´dky v souboru ~/.ssh/known_hosts (pokud se jedna´ o OpenSSH) nebo v souboru ~/.ssh2/hostkeys (pokud se jedna´ o SSH). Fingerprinty sve´ho stroje mu˚zˇete zjistit v prˇ´ıpadeˇ, zˇe klient i server pouzˇ´ıva´ OpenSSH teˇmito prˇ´ıkazy:
ssh-keygen -l -f /etc/ssh/ssh_host_key.pub ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub Jeden z teˇchto fingerprintu˚ musı´ by´t s fingerprintem dotazujı´cı´ho stroje shodny´. V prˇ´ıpadeˇ, zˇe klient i server pouzˇ´ıva´ SSH, zjistı´me fingerprint prˇ´ıkazem:
ssh-keygen2 -F /etc/ssh2/hostkey.pub Pokud server pouzˇ´ıva´ OpenSSH a klient SSH, vypada´ prˇ´ıkaz takto:
ssh-keygen -B -f /etc/ssh/ssh_host_dsa_key.pub Pokud server pouzˇ´ıva´ SSH a klient OpenSSH je situace slozˇiteˇjsˇ´ı, protozˇe SSH neumı´ generovat SHA-1 fingerprinty. Tento proble´m jde obejı´t tak, zˇe se budeme 68
4. Bezpecˇnost na u ´ rovni sı´teˇ
chovat, jakoby jsme se prˇihlasˇovali z SSH, zada´me prˇ´ıkaz:
ssh-keygen2 -F /etc/ssh2/hostkey.pub Toto na´m vytvorˇ´ı fingerprint, ktery´ budeme posle´ze porovna´vat. Pote´ se prˇipojı´me na server, kde akceptujeme fingerprint, ale nezada´me heslo, ny´brzˇ kla´vesy Ctrl+C. Pote´ zada´me:
ssh-keygen -B -l -f ~/ssh/known_hosts V tomto vy´pisu bychom meˇli zı´skat jeden nebo vı´ce fingerprintu˚, kde jeden by se meˇl shodovat s nasˇ´ım pu˚vodneˇ vygenerovany´m fingerprintem. K prˇihlasˇova´nı´ pomocı´ klı´cˇe je nutne´ si takove´ klı´cˇe vytvorˇit a umı´stit je na cı´lovy´ server. Tato metoda vu˚bec nepouzˇ´ıva´ heslo, ktere´ se va´zˇe k syste´move´mu kontu. Toto mu˚zˇe mı´t vsˇak za na´sledek, zˇe vetrˇelec podstrcˇ´ı svu˚j klı´cˇ se svy´m heslem a bude mu umozˇneˇn prˇ´ıstup. Tomuto lze zabra´nit bud’ vypnutı´m te´to formy prˇihlasˇova´nı´ a to nastavenı´m te´to konfigurace ”RSAAuthentication no” v konfiguracˇnı´m souboru /etc/sshd_config nebo kontrolou integrity u souboru ~/.ssh/authorized_keys. V prˇ´ıpadeˇ OpenSSH se prova´dı´ generova´nı´ klı´cˇe takto:
ssh-keygen -t dsa Mu˚zˇeme pouzˇ´ıt i -t rsa pro vygenerova´nı´ RSA klı´cˇe. Po tomto prˇ´ıkazu je nutne´ zadat soubor, do ktere´ho bude klı´cˇ ulozˇen (nebo nechat implicitnı´ hodnotu) a da´le je nutne´ zadat heslo. Implicitneˇ se va´m vytvorˇ´ı dva soubory a to ~/.ssh/id_dsa, kde je ulozˇena vasˇe identifikace a ~/.ssh/id_dsa.pub, cozˇ je samotny´ verˇejny´ klı´cˇ, ktery´ umı´stı´me na server a to do souboru ~/.ssh/authorized_keys (u starsˇ´ıch verzı´ OpenSSH se mu˚zˇe jednat o soubor ~/.ssh/authorized_keys2). K prˇenosu mu˚zˇeme pouzˇ´ıt utilitu scp, kterou budu probı´rat podrobneˇji pozdeˇji. Prˇi prˇihlasˇova´nı´ pomocı´ prˇ´ıkazu ssh mu˚zˇeme vyuzˇ´ıt prˇepı´nacˇu˚ -1 a -2, ktery´mi ovlivnı´me pouzˇitı´ verze protokolu ssh – pouzˇitı´m jine´ verze ssh protokolu se take´ zmeˇnı´ fingerprinty. U SSH je situace podobna´. Ke generova´nı´ se pouzˇ´ıva´ prˇ´ıkaz ssh-keygen2 (pouzˇitı´m -t rsa si vynutı´me pouzˇitı´ RSA). V adresa´rˇi ~/.ssh2/ by se meˇl by´t soukromy´ i verˇejny´ klı´cˇ. Implicitnı´ na´zvy je dobre´ prˇejmenovat na neˇco smysluplneˇjsˇ´ıho. Da´le je potrˇeba nastavit v souboru ~/.ssh2/identification rˇa´dku IdKey nazev_privatniho_klice. Zkopı´rujeme verˇejny´ klı´cˇ na server a v souboru ~/.ssh2/authorization nastavı´me konfiguraci ”Key nazev_verejneho_klice”. Tı´mto je autorizace pomocı´ klı´cˇe zprovozneˇna. Priva´tnı´ klı´cˇ by meˇl mı´t takova´ pra´va, aby byl cˇitelny´ pouze pro vlastnı´ka. 69
4. Bezpecˇnost na u ´ rovni sı´teˇ
Proble´my mohou nastat prˇi pouzˇitı´ NFS, kde je znemozˇneˇno cˇ´ıst z domovske´ho adresa´rˇe prˇed prˇihla´sˇenı´m. Pomocı´ ssh se lze take´ prˇihlasˇovat bez hesla a to pomocı´ souboru /etc/ hosts.equiv a ~/.rhosts – le´pe vsˇak prˇes zabezpecˇene´ podoby teˇchto souboru˚ /etc/shosts.equiv a ~/.shosts. Nynı´ strucˇneˇ na prˇ´ıkladech vysveˇtlı´m pouzˇitı´ programu scp. Jak jsem jizˇ zmı´nil, tento program slouzˇ´ı k bezpecˇne´mu prˇesouva´nı´ souboru˚. Pokud chceme prˇesunout soubor file.log do adresa´rˇe log v domovske´m adresa´rˇi uzˇivatele pepa na serveru fjfi.cvut.cz, provedeme to tı´mto za´pisem:
scp file.log
[email protected]:./log/ Pokud bychom chteˇli do toho same´ho adresa´rˇe prˇene´st mı´sto souboru file.log adresa´rˇ dic a vsˇechny soubory, ktere´ obsahuje pouzˇili bychom za´pis:
scp -r dic
[email protected]:./log/ Funguje to i opacˇny´m smeˇrem a to ze serveru na klienta:
scp
[email protected]:./log/file.log ./ Trochu krkolomne´ je kopı´rova´nı´ mezi dveˇma vzda´leny´mi servery. Za´pis je takovy´to:
scp
[email protected]:file.log
[email protected]: V praxi je vsˇak vhodneˇjsˇ´ı se na server fjfi.cvut.cz nejprve prˇihla´sit a pouzˇ´ıt scp klasicky. Ale co kdyzˇ chceme procha´zet filesyste´mem, pracovat s adresa´rˇi, pra´vy, apod. a to vsˇechno v ra´mci jednoho spojenı´. Mu˚zˇeme pouzˇ´ıt naprˇ´ıklad klasicke´ ssh spojenı´, ktere´ lze realizovat prˇes mc 48 . Take´ mu˚zˇeme pouzˇ´ıt program sftp. Na straneˇ klienta je situace jednoducha´. Stacˇ´ı pouzˇ´ıt neˇjake´ho klienta, ktery´ sftp podporuje. Ja´ pouzˇ´ıva´m naprˇ´ıklad graficke´ho klienta gftp 49 . Proble´m nasta´va´ na serverove´ straneˇ. Je potrˇeba vytvorˇit chroot souborovy´ syste´m. Nebo pouzˇ´ıt za´platu na OpenSSH z URL:
http://mail.incredimail.com/howto/openssh 48 49
http://www.ibiblio.org/mc/ http://gftp.seul.org/
70
4. Bezpecˇnost na u ´ rovni sı´teˇ
Existujı´ i dalsˇ´ı mozˇnosti. V prˇ´ıpadeˇ SSH stacˇ´ı pouzˇ´ıt programy ssh-chrootmgr a ssh-dummy-shell, ktere´ by meˇly zmı´neˇne´ akce zvla´dnout. Pomocı´ ssh lze i prˇesmeˇrova´vat porty. K prˇesmeˇrova´va´nı´ portu˚ ovsˇem preferuji utilitu stunnel50 , ktera´ je pro tento u ´ cˇel specializova´na – touto te´matikou se budu zaby´vat v neˇktere´ z dalsˇ´ıch podkapitol. Poslednı´ veˇcı´, kterou bych chteˇl zmı´nit v souvislosti s ssh, je skript authprogs 51 . Tento program umozˇn ˇ uje definovat v jednom konfiguracˇnı´m souboru seznam prˇ´ıkazu˚ pro jednu autentizacˇnı´ identitu. Tyto prˇ´ıkazy lze spousˇteˇt z urcˇity´ch pocˇ´ıtacˇu˚ na za´kladeˇ definovany´ch IP adres. Konfiguracˇnı´ soubor ~/.ssh/authprogs.conf mu˚zˇe vypadat na´sledovneˇ:
[ 192.168.0.3 ] uname -a; free w Prvnı´ rˇa´dek s IP adresou urcˇuje, ze ktery´ch pocˇ´ıtacˇu˚ budou moci by´t povolene´ prˇ´ıkazy zada´va´ny. Na druhe´m rˇa´dku vidı´me, zˇe lze zada´vat i seznamy prˇ´ıkazu˚. Trˇetı´ rˇa´dek povoluje uzˇitı´ samostatne´ho prˇ´ıkazu w. K tomu, aby mohlo by´t toto realizova´no, je potrˇeba vygenerovat prˇ´ıslusˇne´ klı´cˇe, cozˇ uzˇ jsem v souvislosti s ssh probı´ral. Samotne´ pouzˇitı´ je jednoduche´. Na´sˇ seznam dvou prˇ´ıkazu˚ bychom spustili na serveru fjfi.cvut.cz takto:
ssh -l pepa -i id_dsa fjfi.cvut.cz ’uname -a; free’ Pokud bychom se pokusili spustit prˇ´ıkaz, ktery´ nema´me povolen, meˇlo by se vypsat varova´nı´ ”You’re not allowed to run ’prikaz’”. Akce jsou zaznamena´va´ny do souboru ~/.ssh/authprogs.log.
4.4.3 OpenSSL OpenSSL52 je tvorˇena knihovnou pro sˇifrova´nı´ a autentizaci a dalsˇ´ımi podpu˚rny´mi programy. Tato knihovna se veˇtsˇinou pouzˇ´ıva´ k zabezpecˇova´nı´ protokolu˚ – naprˇ´ıklad HTTPs (HTTP over SSL), cozˇ je sˇifrovana´ verze protokolu HTTP, da´le naprˇ´ıklad IMAPs, POP3s, SMTPs nebo IRCs. Spojenı´ funguje tak, zˇe se vytvorˇ´ı klasicke´ TCP spojenı´, da´le tzv. handshake, prˇi ktere´m se oveˇrˇ´ı certifika´ty a vymeˇnı´ se sˇifrovacı´ klı´cˇe. Pote´ uzˇ se zacˇnou 50
http://www.stunnel.org/ http://www.hackinglinuxexposed.com/tools/authprogs/ 52 http://www.openssl.org/ 51
71
4. Bezpecˇnost na u ´ rovni sı´teˇ
posı´lat zasˇifrovana´ data – tento postup je na´m jizˇ zna´m. K oveˇrˇenı´ identity se pouzˇ´ıvajı´ tzv. certifika´ty. Mohou slouzˇit i pro oveˇrˇova´nı´ osob. V nasˇem smyslu ovsˇem certifika´t slouzˇ´ı k ochraneˇ klientu˚, kterˇ´ı se prˇihlasˇujı´ na servery. Certifika´t klientu˚m zarucˇ´ı, zˇe server, ke ktere´mu se prˇipojı´, nenı´ neˇjak podvrzˇeny´ (tzn. ovla´da´ ho vetrˇelec). K prˇesmeˇrova´nı´ provozu mohl u ´ tocˇnı´k pouzˇ´ıt naprˇ´ıklad ARP poisoning nebo DNS prˇesmeˇrova´nı´ – o teˇchto u ´ tocı´ch bude jesˇteˇ rˇecˇ. Pravost certifika´tu˚ je podlozˇena podpisem. Mu˚zˇe by´t podepsa´n sa´m sebou (tzv. self-signed certificate) nebo tzv. CA (Certificate Authority). Certifika´t CA mu˚zˇe by´t podepsa´n dalsˇ´ı certifikacˇnı´ autoritou 53 . Tyto certifika´ty jsou umı´steˇny v uzˇivatelsky´ch aplikacı´ (naprˇ. v internetovy´ch prohlı´zˇecˇ´ıch) a jsou to certifika´ty, ktery´m uzˇivatel du˚veˇrˇuje. Podepsa´nı´ certifika´tu certifikacˇnı´ autoritou, ktere´ uzˇivatel veˇrˇ´ı, mu garantuje to, zˇe je dany´ certifika´t pravy´ (autenticky´). Tato vlastnost se da´le deˇdı´, takzˇe certifika´t podepsany´ tı´mto autenticky´m certifika´tem je te´zˇ pravy´. Certifika´t obsahuje CN (Common Name), cozˇ je jme´no toho, koho certifika´t identifikuje. Da´le platnost – pocˇa´tecˇnı´ a koncove´ datum platnosti. Platnost mu˚zˇe by´t prˇedcˇasneˇ ukoncˇena zverˇejneˇnı´m v tzv. CRL (Certificate Revocation List). Da´le take´ verˇejny´ klı´cˇ, ktery´m se sˇifruje a neˇktere´ dalsˇ´ı u ´ daje pro samotne´ SSL nepodstatne´ jako naprˇ´ıklad jme´no, e-mail, adresa toho, komu byl certifika´t vyda´n. Pro sˇifrova´nı´ se pouzˇ´ıva´ metoda zalozˇena´ na vy´meˇneˇ klı´cˇu˚, se kterou sem va´s jizˇ dostatecˇneˇ obezna´mil. Ovsˇem klı´cˇe zde slouzˇ´ı pouze pro nava´za´nı´ spojenı´. Pote´ se strany dohodnou na symetricke´m klı´cˇi, ktery´m sˇifrujı´. Je to podstatneˇ rychlejsˇ´ı, nezˇ kdyby se cely´ prˇenos sˇifroval asymetricky. Jenom bych chteˇl upozornit na to, zˇe zde je vy´hodneˇjsˇ´ı pouzˇ´ıvat soukrome´ klı´cˇe bez hesla, jinak bude nutna´ lidska´ asistence naprˇ´ıklad prˇi restartova´nı´ HTTP serveru. Nynı´ prˇedvedu, jak mu˚zˇete jednodusˇe vygenerovat x509 certifika´t. Pouzˇijeme prˇ´ıkaz openssl v tomto tvaru:
openssl req -new -x509 -nodes -out cert.pem -keyout key.pem -days 1098 Prˇ´ıznak req znacˇ´ı, zˇe se jedna´ o certifikacˇnı´ zˇa´dost. Prˇ´ıznak -new znamena´, zˇe vytva´rˇ´ıme novou zˇa´dost. Prˇ´ıznak -x509 znamena´ pra´veˇ vytva´rˇenı´ certifika´tu podepsane´ho sa´m sebou (self-signed certificate). Prˇ´ıznakem -nodes rˇ´ıka´me, aby se soukromı´ klı´cˇ nesˇifroval. Certifika´t bude zapsa´n do souboru cert.pem a klı´cˇ do souboru key.pem. Certifika´t bude platny´ 1098 dnı´ (3 roky). Budete dota´za´ni, abyste vyplnili zby´vajı´cı´ informace jako e-mail, adresa a take´ CN, kam by jste meˇli vyplnit jme´no serveru, pro ktery´ je certifika´t vystaven. Soubory cert.pem a key.pem jsou prˇi beˇzˇne´m cˇtenı´ necˇitelne´ (pokud neuvedeme prˇ´ıznak -text). ˇ R naprˇ´ıklad CESNET (http://www.cesnet.cz/pki/). U te´to CA si mohou, Jako CA pu˚sobı´ v C ˇ VUT zdarma. po prˇedlozˇenı´ dokladu totozˇnosti, nechat vytvorˇit certifika´t zameˇstnanci a studenti C Bohuzˇel CESNET nenı´ oveˇrˇenou certifikacˇnı´ autoritou, takzˇe tento certifika´t zatı´m naprˇ´ıklad ve sta´tnı´ spra´veˇ neuplatnı´te. 53
72
4. Bezpecˇnost na u ´ rovni sı´teˇ
Do lidsky cˇitelne´ podoby je lze prˇeve´st takto:
openssl x509 -in cert.pem -text a
openssl rsa -in key.pem -text Neˇktere´ aplikace pozˇadujı´ certifika´t a klı´cˇ v jednom souboru. Toho lze docı´lit jednoduchy´m spojenı´m:
cat cert.pem key.pem > cert_key.pem Konfiguracˇnı´ soubor OpenSSL se nacha´zı´ veˇtsˇinou v /etc/ssl/ a jmenuje se openssl.cnf nebo openssl.conf. Pokud chceme, aby klienti nebyli otravova´ni hla´sˇenı´m o nedu˚veˇryhodny´ch certifika´tech, je optima´lnı´ si vytvorˇit vlastnı´ CA. Po vygenerova´nı´ nasˇeho certifika´tu je nutne´ jej naimportovat do pocˇ´ıtacˇu˚, ktere´ hodlajı´ s nasˇ´ım serverem komunikovat. My jako CA pote´ mu˚zˇeme generovat certifika´ty, ktere´ budou jizˇ pro klienty du˚veˇryhodne´. Pokud chceme vygenerovat certifika´t CA, je nejprve nutne´ vytvorˇit adresa´rˇ pro CA – direktiva dir (implicitneˇ demoCA) v konfiguracˇnı´m souboru pro OpenSSL. Da´le vytvorˇ´ıme dalsˇ´ı nutne´ podadresa´rˇe (implicitneˇ certs, crl, newcerts a private) podle konfiguracˇnı´ho souboru pro OpenSSL. Do adresa´rˇe pro CA je potrˇeba vytvorˇit soubor index.txt, cozˇ je jaky´si ”database index file”. V tom same´m adresa´rˇi je nutne´ vytvorˇit soubor serial, do ktere´ho je nutne´ napsat hodnotu ”01”. Da´le jizˇ mu˚zˇeme vygenerovat certifika´t a klı´cˇ s vy´stupy do souboru nastaveny´ch v konfiguracˇnı´ho souboru implicitneˇ takto:
openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 1825 Jako CA mu˚zˇeme certifika´t podepsat prˇ´ıkazem:
openssl ca -in request.pem -out cert.pem Tı´mto se zmeˇnı´ neˇktere´ soubory, ktere´ jsme vytva´rˇeli prˇi zakla´da´nı´ CA. Je to z toho du˚vodu, zˇe CA si udrzˇuje databa´zi podepsany´ch certifika´tu˚. Pokud chceme zabezpecˇit jednotlive´ protokoly (IMAPs, HTTPs, atd.) je potrˇeba to samotne´mu serveru (v prˇ´ıpadeˇ HTTP naprˇ´ıklad Apache) sdeˇlit. Server musı´ veˇdeˇt odkud ma´ certifika´t a klı´cˇ cˇ´ıst. Tuto funkci musı´ samozrˇejmeˇ server podporovat. V prˇ´ıpadeˇ serveru Apache k te´to cˇinnosti slouzˇ´ı mod ssl 54 . Oveˇrˇenı´ 54
http://www.modssl.org/
73
4. Bezpecˇnost na u ´ rovni sı´teˇ
funkcˇnosti takove´ho serveru mu˚zˇeme prove´st prˇ´ıkazem:
openssl s_client -connect server.cz:https
4.4.4 stunnel Stunnel55 je program distribuovany´ pod licencı´ GPL, ale je omezen licencı´ SSL knihovny, pod kterou je zkompilova´n. Tato aplikace umozˇn ˇ uje spojit dva pocˇ´ıtacˇe (tı´m i cele´ sı´teˇ) sˇifrovany´m tunelem (toto ovsˇem vyzˇaduje dveˇ instance stunnelu), nebo zabezpecˇit nesˇifrovane´ protokoly poprˇ. daemony jako IRC, POP3, IMAP, MySQL apod. Stunnel pracuje ve dvou mo´dech. Prvnı´ mo´d vynutı´me prˇ´ıznakem -d s povinny´m parametrem, ktery´ znacˇ´ı port, na ktere´m bude stunnel naslouchat a nepovinny´m parametrem, ktery´ znacˇ´ı adresu pocˇ´ıtacˇe, na ktere´ bude stunnel naslouchat. Druhy´ (serverovy´) mo´d se pouzˇije prˇi zada´nı´ prˇ´ıznaku -d bez parametru˚ a pak se jedna´ o standardnı´ vstup a vy´stup stunnelu. Prvnı´ mo´d umozˇn ˇ uje obsluhovat vı´ce spojenı´ najednou. Mezi dalsˇ´ı du˚lezˇite´ prˇ´ıznaky patrˇ´ı prˇedevsˇ´ım prˇ´ıznak -r s nepovinny´m parametrem adresy pocˇ´ıtacˇe, kam se bude prˇipojovat prˇes port, ktery´ je druhy´m povinny´m parametrem. Pokud se nezada´ jme´no pocˇ´ıtacˇe, bude se stunnel snazˇit prˇipojit na localhost. Prˇ´ıznakem -l lze specifikovat program, ktery´ bude spusˇteˇn a jeho standardnı´ vstup, vy´stup (nemeˇly by mı´t termina´love´ vlastnosti) budou jednı´m koncem stunnelu. Programu lze prˇedat jeho parametry prˇes nepovinne´ parametry (u prˇ´ıznaku -l). Pro programy s termina´lovy´mi vlastnostmi slouzˇ´ı prˇ´ıznak -L. Velmi du˚lezˇity´ prˇ´ıznak je prˇ´ıznak -c, ktery´m urcˇ´ıme to, ktery´ konec se bude sˇifrovat. Pokud ho zada´me, bude prvnı´ konec nesˇifrovany´. Pote´ dojde k zasˇifrova´nı´ dat a jejich dopravenı´ na druhy´ konec (druhy´m smeˇrem funguje prˇesneˇ opacˇny´m zpu˚sob). Pokud ovsˇem prˇ´ıznak -c zada´me, bude prvnı´ konec sˇifrovany´ – tzn. zˇe na neˇm bude ocˇeka´va´no spojenı´. Data se tedy rozsˇifrujı´ a dopravı´ nesˇifrovana´ na druhy´ konec (druhy´m smeˇrem funguje prˇesneˇ opacˇny´ zpu˚sob). Serverovy´ mo´d vyzˇaduje certifika´t (jeho vytvorˇenı´ jsem popisoval v podkapitole o SSL), ktery´ se cˇte implicitneˇ ze souboru /etc/ssl/certs/stunnel.pem nebo ho lze specifikovat za prˇ´ıznak -p. Tento certifika´t nesmı´ obsahovat klı´cˇ chra´neˇny´ heslem. At’ se sta´le neopakuji s HTTPs, prˇedvedu, jak jednodusˇe pomocı´ stunnelu zprovoznit POP3s. Provedeme to pomocı´ prˇ´ıkazu stunnel v tomto tvaru:
stunnel -d pop3s -l /usr/sbin/pop3d pop3d -p /data/certst/cert.pem 55
http://www.stunnel.org/
74
4. Bezpecˇnost na u ´ rovni sı´teˇ
Vidı´me, zˇe se spustı´ POP3 daemon, ktery´ pak bude beˇzˇet na pozadı´. Certifika´t se nacˇte ze souboru /data/certst/cert.pem. Parametr pop3s lze nahradit numerickou reprezentacı´ portu. Pote´ je vhodne´ prˇesmeˇrovat POP3s na POP3, abychom nemuseli spousˇteˇt novou instanci POP3 daemona pokazˇde´, kdyzˇ se neˇkdo prˇipojı´. Provedeme to prˇ´ıkazem:
stunnel -d pop3s -r pop3 Vsˇechny parametry by na´m meˇli by´t jizˇ jasne´. Pokud na´sˇ klient, se ktery´m prˇistupujeme na POP3 nepodporuje sˇifrova´nı´, mu˚zˇeme si opeˇt pomoci pomocı´ stunnelu a to tı´mto prˇ´ıkazem, ktery´ spustı´me na pocˇ´ıtacˇi, ze ktere´ho budeme na POP3s server prˇistupovat:
stunnel -c -d localhost:pop3 -r pop3s.server:pop3s Po zada´nı´ tohoto prˇ´ıkazu stacˇ´ı pouzˇ´ıt norma´lnı´ho POP3 klienta a prˇipojit se na port POP3 serveru na localhostu. Mezi klientem a serverem, kde je provozova´n POP3s, se vytvorˇ´ı sˇifrovany´ tunel. Pro vytva´rˇenı´ podobny´ch tunelu˚ lze pouzˇ´ıt, kromeˇ jizˇ zmı´neˇne´ho ssh, take´ protokol GRE56 (General Routing Encapsulation). Dalsˇ´ı variantou pro vytva´rˇenı´ sˇifrovany´ch spojenı´ je PPTP (Point-to-Point Tunneling Protocol), ktery´ umozˇn ˇ uje vytva´rˇet sˇifrovanou relaci PPP (Point to Point Protocol) mezi dveˇma pocˇ´ıtacˇi. Toto je v soucˇasne´ dobeˇ aktua´lnı´ prˇedevsˇ´ım ve spojenı´ s ADSL, kde je pra´veˇ PPTP vyuzˇ´ıva´no ke spojenı´ klientu˚ s ISP. Dalsˇ´ı mechanismus, ktery´ lze vyuzˇ´ıt k vytva´rˇenı´ VPN, je CIPE57 (Crypto IP Encapsulation). Tento mechanismus se take´ osveˇdcˇil prˇi zabezpecˇova´nı´ bezdra´tovy´ch sı´tı´. Jesˇteˇ zmı´nı´m projekt Zebedee 58 , ktery´ se snazˇ´ı prˇedevsˇ´ım o snadnou konfiguraci VPN.
4.5 GnuPG GnuPG59 (The GNU Privacy Guard – zkra´ceneˇ oznacˇova´no take´ jako GPG) vzniklo jako kompletnı´, volneˇ sˇirˇitelna´ na´hrada PGP 60 (Pretty Good Privacy). Oba tyto programy slouzˇ´ı k sˇifrova´nı´ dat, elektronicke´mu podepisova´nı´, oveˇrˇova´nı´ elektronicky´ch podpisu˚, spra´veˇ klı´cˇu˚, apod. GPG je tedy na rozdı´l od PGP bezplatny´ software, ktery´ lze pouzˇ´ıvat za podmı´nek licence GNU GPL. PGP pouzˇ´ıva´ patenty IDEA a RSA, ktere´ tedy v soucˇasne´ dobeˇ jizˇ neomezujı´ (jejich platnost vyprsˇela v za´rˇ´ı roku 2000), takzˇe je volneˇ k dispozici i mimo USA a Kanadu. Protozˇe 56
http://www.ietf.org/rfc/rfc1701.txt http://sites.inka.de/~W1011/devel/cipe.html 58 http://www.winton.org.uk/zebedee/ 59 http://www.gnupg.org/ 60 http://www.pgpi.org/ 57
75
4. Bezpecˇnost na u ´ rovni sı´teˇ
omezenı´ vy´voje a pouzˇ´ıva´nı´ sˇifrovacı´ho softwaru, ktery´ je naprˇ´ıklad v USA rˇazen na stejnou u ´ roven ˇ jako zbraneˇ, jsou znacˇneˇ nejasna´ a v dnesˇnı´ dobeˇ se ty´ka´ politik jednotlivy´ch sta´tu˚, zmı´nil bych dokument ”Crypto Law Survey” 61 , ktery´ vesˇkera´ omezenı´, ty´kajı´cı´ se sˇifrova´nı´, shrnuje. Ovsˇem PGP jako freeware obsahuje pouze omezene´ mnozˇstvı´ funkcı´ a to pouze k nekomercˇnı´mu pouzˇitı´. GPG vyuzˇ´ıva´ metod asymetricke´ho sˇifrova´nı´ – tzn. zˇe verˇejny´m klı´cˇem data zasˇifrujeme a soukromy´m (priva´tnı´m) naopak rozsˇifrujeme. Pokud tedy chceme, aby byla data cˇitelna´ pouze pro Josefa, zasˇifrujeme je jeho verˇejny´m klı´cˇem. Priva´tnı´ klı´cˇ by spra´vneˇ meˇl vlastnit jen on, proto je jediny´, ktery´ mu˚zˇe data rozsˇifrovat. Lze ale data zasˇifrovat soukromy´m klı´cˇem a verˇejny´m klı´cˇem je rozsˇifrovat. Tohoto se vyuzˇ´ıva´ prˇi podepisova´nı´ dokumentu˚ i jiny´ch dat. Podepisova´nı´ slouzˇ´ı k oveˇrˇova´nı´ autenticity (pravosti) zpra´vy. Obecneˇ je totizˇ verˇejny´ klı´cˇ Josefa verˇejneˇ k dispozici, takzˇe zasˇifrovanou zpra´vu mu mu˚zˇe poslat kazˇdy´. Podepisova´nı´ funguje tak, zˇe jesˇteˇ prˇed zasˇifrova´nı´m zpra´vy se vytvorˇ´ı hash zpra´vy pomocı´ symetricke´ho sˇifrovacı´ho algoritmu (naprˇ´ıklad MD5 cˇi kvalitneˇjsˇ´ı SHA1). Pokud by se ve zpra´veˇ cokoliv zmeˇnilo, hash by nesouhlasila. Hash je pote´ zasˇifrova´na priva´tnı´m klı´cˇem odesı´latele. Do zpra´vy je doplneˇno datum a identifika´tor uzˇivatele. Pak uzˇ jen odesı´latel zasˇifruje vy´slednou zpra´vu verˇejny´m klı´cˇem adresa´ta. Pokud chce odesı´latel zajistit pouze integritu dat (nejde mu o utajenı´ dat), mu˚zˇe poslednı´ operaci (zasˇifrova´nı´ verˇejny´m klı´cˇem adresa´ta) vynechat. Prˇ´ıjemce (adresa´t) po desˇifrova´nı´ zpra´vy, rozpozna´nı´ podpisu pomocı´ verˇejne´ho klı´cˇe odesı´latele a vytvorˇenı´ hashe ze zpra´vy, porovna´ jı´m vytvorˇeny´ hash s hashem od odesı´latele – shoda garantuje pravost zpra´vy. Vsˇechny tyto operace jsou samozrˇejmeˇ programem GPG automatizova´ny. Nynı´ popı´sˇi proces vytvorˇenı´ vlastnı´ch klı´cˇu˚. Zacˇneme prˇ´ıkazem:
gpg gen key Pokud je toto vasˇe prvnı´ pra´ce s GPG na dane´m pocˇ´ıtacˇi, vytvorˇ´ı se adresa´rˇ ~/.gnupg, kde se budou nacha´zet potrˇebne´ konfiguracˇnı´ soubory. Po zada´nı´ prˇ´ıkazu potvrd’te implicitnı´ volbu ”DSA a ElGamal (implicitnı´)”, kterou vytvorˇ´ıte pa´r klı´cˇu˚. Da´le vyberte velikost klı´cˇe. Optima´lnı´ bude zvolit 1024 nebo 2048 bitu˚. Vı´ce uzˇ by bylo zbytecˇne´ a nepohodlne´ – velikost 2048 je jesˇteˇ v soucˇasne´ dobeˇ prakticky neprolomitelna´ a veˇtsˇ´ı velikost klı´cˇe by sˇifrova´nı´ a rozsˇifrova´nı´ znacˇneˇ prodluzˇovala. Da´le vybere dobu platnosti klı´cˇe – nedoporucˇuje se nechat dobu platnosti klı´cˇe neomezenou. Da´le je nutne´ vyplnit identifika´tory klı´cˇe ve formeˇ jme´na, e-mailove´ adresy a komenta´rˇe. Prˇi na´sledne´ generaci klı´cˇe potrˇebuje program na´hodne´ hodnoty – ke zvy´sˇenı´ entropie mu˚zˇeme prˇispeˇt naprˇ´ıklad pohybem mysˇi. Nynı´ ma´me k dispozici pa´r klı´cˇu˚. 61
http://rechten.kub.nl/koops/cryptolaw/
76
4. Bezpecˇnost na u ´ rovni sı´teˇ
Lze vytvorˇit i tzv. odvolacı´ klı´cˇ, ktery´m lze zrusˇit platnost klı´cˇe, ke ktere´mu se odvolacı´ klı´cˇ vztahuje:
gpg gen-revoke e-mailova_adresa_klice Mı´sto e-mailove´ adresy lze pouzˇ´ıt i jme´no vztahujı´cı´ se ke klı´cˇi. Pokud chceme prˇedat verˇejny´ klı´cˇ druhe´ straneˇ, ktera´ s nı´m bude sˇifrovat data pro na´s, je nutne´ ho nejdrˇ´ıve vyexportovat – nejle´pe do souboru:
gpg export armor e-mailova_adresa_klice > verejny_klic.pub Po bezpecˇne´m prˇeda´nı´ tohoto souboru druhe´ straneˇ 62 , mu˚zˇe druha´ strana tento soubor (verˇejny´ klı´cˇ) importovat:
gpg import verejny_klic.pub Meˇli bychom take´ vyloucˇit mozˇnost, zˇe neˇkdo klı´cˇ zmeˇnil po cesteˇ a to pomocı´ jizˇ zmin ˇ ovany´ch fingerprintu˚ (otisku˚). Pro zobrazenı´ fingerprintu dane´ho klı´cˇe zadajı´ obeˇ strany:
gpg fingerprint e-mailova_adresa_klice Mı´sto e-mailove´ adresy lze opeˇt pouzˇ´ıt i jme´no vztahujı´cı´ se ke klı´cˇi. Pote´ vhodny´m zpu˚sobem komunikace otisky porovnajı´. Pokud se shodujı´, je vsˇe v porˇa´dku a druha´ strana (jakozˇto prˇ´ıjemce verˇejne´ho klı´cˇe) by meˇla klı´cˇ uznat pravy´m a podepsat ho prˇ´ıkazem sign, ktery´ zada´ v interaktivnı´m rezˇimu, ktery´ se spustı´ takto:
gpg edit-key e-mailova_adresa_klice Verˇejne´ klı´cˇe lze stahovat i ze serveru, pokud jsou na neˇm k dispozici:
gpg keyserver server_s_klici recv-keys ciselna_hodnota Klı´cˇ nelze sta´hnout prˇ´ımo prˇes e-mail cˇi jme´no vztahujı´cı´ se ke klı´cˇi, ale pomocı´ jake´si cˇ´ıselne´ hodnoty. Tato sluzˇba vyuzˇ´ıva´ TCP port 11 371. K teˇmto u ´ cˇelu˚m lze vyuzˇ´ıt naprˇ´ıklad servery www.keyserver.net, wwwkeys.pgp.net cˇi pgp.ai.mit.edu.
62
Uzˇivatele´ cˇasto vystavujı´ sve´ verˇejne´ klı´cˇe na webovy´ch stra´nka´ch, cozˇ nemusı´ by´t z hlediska bezpecˇnosti optima´lnı´. Je proto nutne´ du˚kladneˇ kontrolovat fingerprinty (viz. da´le) takto stahovany´ch klı´cˇu˚.
77
4. Bezpecˇnost na u ´ rovni sı´teˇ
Pokud chceme umı´stit nasˇe verˇejne´ klı´cˇe na takovy´to server, uskutecˇnı´me to prˇ´ıkazem:
gpg send-keys e-mailova_adresa_klice keyserver server_s_klici Nynı´ k samotne´mu sˇifrova´nı´ a desˇifrova´nı´ dat. Proste´ zasˇifrova´nı´ souboru provedeme takto:
gpg -e -r jmeno_klice soubor Prˇ´ıznak -e znamena´, zˇe soubor bude zasˇifrova´n - prˇ´ıznakem -s si lze vynutit i podepsa´nı´ sˇifrovane´ho souboru. Prˇ´ıznak -r definuje klı´cˇ, ktery´m bude soubor zasˇifrova´n. Lze zadat jme´no nebo e-mail vztahujı´cı´ se ke klı´cˇi. Po zasˇifrova´nı´ se v aktua´lnı´m adresa´rˇi vytvorˇ´ı soubor s prˇ´ıponou .gpg, cozˇ je vy´sledny´ zasˇifrovany´ soubor. Rozsˇifrova´nı´ takove´ho souboru provedeme takto:
gpg -d soubor.gpg Pokud nechceme mı´t vy´sledny´ rozsˇifrovany´ soubor vypsany´ na standardnı´m vy´stupu, lze vy´stup specifikovat i pomocı´ prˇ´ıznaku -o, za ktery´m na´sleduje na´zev souboru, kam chceme vy´sledna´ data ulozˇit. Pokud chceme oveˇrˇit pravost souboru (naprˇ´ıklad program stazˇeny´ z Internetu), ke ktere´mu je k dispozici podpis, provedeme to takto:
gpg verify program.asc program.tgz kde program.asc je soubor s podpisem (cˇasto ma´ take´ koncovku .sig, cozˇ je veˇtsˇinou bina´rnı´ podoba podpisu) a program.tgz samotny´ program. Pokud chceme tedy vytvorˇit soubor s ASCII podobou podpisu bez origina´lnı´ch dat s koncovkou .asc, provedeme to takto:
gpg -b armor soubor Pokud neuvedeme prˇ´ıznak armor, vytvorˇ´ı se bina´rnı´ podoba podpisu s koncovkou .sig. Program GPG na´m samozrˇejmeˇ nabı´zı´ nescˇetneˇ dalsˇ´ıch voleb, ktere´ nalezneme v dokumentaci63 . 63
http://www.gnupg.org/(en)/documentation/index.html
78
4. Bezpecˇnost na u ´ rovni sı´teˇ
ˇ ifrovat elektronickou korespondenci bychom jisteˇ meˇli v prˇ´ıpadech, pokud S naprˇ´ıklad uzˇivatelu˚m rozesı´la´me citlive´ informace jako hesla, apod. a existuje nebezpecˇ´ı, zˇe by se k e-mailu mohla dostat trˇetı´ osoba. E-mailove´ klienty lze nakonfigurovat tak, aby u ´ kony jako zasˇifrova´nı´, rozsˇifrova´nı´, podepisova´nı´, atd. prova´deˇly automaticky. Podepisova´nı´ e-mailu˚ a naprˇ´ıklad na webu vystavovany´ch dokumentu˚ jisteˇ doda´ jistou da´vku du˚veˇryhodnosti lidem, kterˇ´ı je cˇtou.
4.6 Sı´t’ove´ hrozby Tato podkapitola se zaby´va´ popisem mozˇny´ch sı´t’ovy´ch hrozeb a jejich eliminacı´. Zaby´va´m se ovsˇem nativnı´mi proble´my, protozˇe rozbor subsyste´mu˚ nenı´ na´plnı´ te´to pra´ce.
ARP cache poisoning a ARP spoofing Jestlizˇe potrˇebuje jedno zarˇ´ızenı´ komunikovat s jiny´m (prˇes sı´t Ethernet), norma´lnı´ IP adresa mu k tomu nestacˇ´ı. K tomu, aby mohl by´t paket dorucˇen je potrˇeba pouzˇ´ıt MAC (Media Acces Control) adresu, kterou lze zjistit pomocı´ protokolu ARP (Address Resolution Protocol). MAC adresa je tvorˇena sˇesticı´ dvouciferny´ch hexadecima´lnı´ch cˇ´ısel – naprˇ´ıklad 00:4F:4E:16:DA:68. Zarˇ´ızenı´, ktere´ chce komunikovat s jiny´m tedy odesˇle ARP pozˇadavek, kde se dotazuje komu patrˇ´ı IP adresa, se kterou chce komunikovat. Zarˇ´ızenı´ s touto IP adresou odpovı´ zasla´nı´m sve´ MAC adresy a prˇesnost se mu˚zˇe uskutecˇnit. Kvu˚li u ´ sporˇe provozu je ovsˇem na kazˇde´m syste´mu vytvorˇena tzv. ARP cache, kde se ukla´dajı´ prˇevody IP adres na adresy MAC. Jejı´ obsah lze prohle´dnout zobrazenı´m souboru /proc/net/arp nebo pouzˇ´ıt prˇ´ıkaz arp -a. Tato tabulka je sta´le obmeˇn ˇ ova´na (nety´ka´ se pevny´ch za´znamu˚) – na GNU/Linuxu je tato doba implicitneˇ 60 sekund. Tuto hodnotu lze zmeˇnit prˇepsa´nı´m hodnoty v souboru /proc/sys/net/ipv4/neigh/eth0/gc_stale_time, cozˇ vsˇak nenı´ obecneˇ doporucˇova´no. Se za´znamy lze manipulovat. Mu˚zˇeme je mazat nebo prˇida´vat jizˇ zmin ˇ ovane´ pevne´ (permanentnı´) za´znamy pomocı´ souboru /etc/ethers. Vı´ce o protokolu ARP lze nale´zt v RFC 82664 . Protokol ARP ma´ take´ rozsˇ´ırˇenı´ ”proxy ARP”, s jehozˇ pomocı´ mu˚zˇe zarˇ´ızenı´ odpovı´dat na ARP pozˇadavky jme´nem jine´ho zarˇ´ızenı´. Tohoto mu˚zˇe ovsˇem zneuzˇ´ıt vetrˇelec, ktery´ zı´skal kontrolu nad syste´mem uvnitrˇ sı´teˇ. Pomocı´ proxy ARP mu˚zˇe ovla´dat smeˇrova´nı´ paketu˚, takzˇe mu˚zˇe smeˇrovat ARP pakety na ktery´koliv jiny´ syste´m v Internetu. Tomuto se lze vyhnout pouzˇitı´m pevny´ch za´znamu˚. Vetrˇelec toto mu˚zˇe obejı´t zfalsˇova´nı´m vlastnı´ MAC adresy (pomocı´ du˚veˇrneˇ zna´me´ho prˇ´ıkazu ifconfig), pokud to dana´ karta podporuje. Tomuto se lze opeˇt vyhnout zvy´sˇenı´m bezpecˇnosti pomocı´ na´stroje Arpwatch, cozˇ je sofistikovana´ aplikace, ktera´ na´m bude hla´sit nejen nove´ pocˇ´ı64
http://www.ietf.org/rfc/rfc826.txt
79
4. Bezpecˇnost na u ´ rovni sı´teˇ
tacˇe komunikujı´cı´ s nasˇ´ım syste´mem, ale i jine´ podezrˇele´ aktivity. Mnoho bezpecˇnostnı´ch rizik na te´to vrstveˇ lze take´ eliminovat pouzˇitı´m sˇifrovane´ho prˇenosu, ktere´mu jsem se veˇnoval v prˇedesˇly´ch sekcı´ch nebo pomocı´ firewallu (naprˇ´ıklad iptables) – kontrolou nesmyslny´ch IP adres a take´ kontrolou samotny´ch MAC adres, cozˇ v iptables lze.
IP spoofing IP spoofing (oznacˇovany´ take´ jako IP faking, packet spoofing cˇi packet faking) je metoda, kdy u ´ tocˇnı´k skry´va´ svoji identitu prˇedstı´ra´nı´m, zˇe je neˇkdo jiny´ zmeˇnou zdrojove´ adresy. Toto je zpu˚sobeno jisty´mi nedokonalostmi protokolu˚ TCP, UDP, ICMP a dalsˇ´ımi. Zapsa´nı´ zdrojove´ adresy se deˇje na straneˇ odesı´lajı´cı´ho syste´mu a je tedy schopen takovou adresu podvrhnout. V soucˇasne´ dobeˇ jsou tyto techniky jizˇ teˇzˇko pouzˇitelne´ – s vy´jimkou bezdra´tovy´ch sı´tı´, kde je mozˇno si dovolit to, co v dobeˇ linuxovy´ch jader rˇady 2.0 a nizˇsˇ´ıch, kde byla lehce prˇedvı´datelna´ cˇ´ısla sekvence TCP (od jader 2.0.36 je proble´m vyrˇesˇen). Dalsˇ´ı za´vazˇny´ proble´m je v protokolu UDP, ktery´ zpu˚sobuje snadne´ zneuzˇitı´ tohoto protokolu k falsˇova´nı´ zdrojove´ adresy. Eliminovat riziko podvrzˇenı´ zdrojove´ adresy lze prˇedevsˇ´ım pomocı´ dobrˇe nakonfigurovane´ho firewallu (naprˇ´ıklad aktivova´nı´m funkce rp filter) a opeˇt pouzˇitı´m sˇifrovacı´ch a autentizacˇnı´ch mechanismu˚ jako SSH cˇi IPSec probı´rane´ v prˇedesˇly´ch sekcı´ch te´to pra´ce. Take´ bychom nemeˇli du˚veˇrˇovat paketu˚m UDP. Jesˇteˇ bych zmı´nil na´stroj ipsentinel65 , ktery´ doka´zˇe zamezit neautorizovane´mu pouzˇ´ıva´nı´ IP adres na loka´lnı´m Ethernetu.
Odposlech prˇenosu Odposlech prˇenosu (sniffing) je metoda, kdy neˇkdo zachyta´va´ (cˇte) prˇena´sˇena´ data (pakety) mezi mı´stem, odkud byl paket vysla´n a mı´stem, kam paket smeˇrˇuje. Tato situace mu˚zˇe nastat naprˇ´ıklad prˇ´ımo na jednom syste´mu, kdy superuzˇivatel zachyta´va´ pakety proudı´cı´ prˇes sı´t’ova´ rozhranı´ loka´lnı´ho stroje. Data mohou by´t zachyta´va´na take´ na smeˇrovacˇ´ıch mezi zdrojovy´m a cı´lovy´m pocˇ´ıtacˇem. V prˇ´ıpadeˇ bezdra´tove´ho prˇenosu je mozˇnost odposlechu doslova snadna´, cozˇ samozrˇejmeˇ vycha´zı´ z vlastnostı´ prˇenosove´ho me´dia. Dalsˇ´ı situace mozˇnosti odposlechu nasta´va´ v prˇ´ıpadeˇ pouzˇitı´ rozbocˇovacˇu˚ (angl. hubs), ktery´ prˇijaty´ paket rozesˇle vsˇem syste´mu˚m s prˇedpokladem, zˇe dany´ syste´m prˇijme jen ten provoz, ktery´ mu skutecˇneˇ patrˇ´ı. Inteligentneˇji se chovajı´ prˇepı´nacˇe (angl. switches), ktere´ smeˇrujı´ pakety jen tomu syste´mu, ktere´mu skutecˇneˇ patrˇ´ı. Ovsˇem nenı´ zas tak velky´ proble´m prˇinutit prˇepı´nacˇ, aby se choval jako rozbocˇovacˇ. Toto lze prove´st za´plavou paketu˚ s podvrzˇenou cı´lovou a zdrojovou adresou (MAC nebo IP) a soucˇasneˇ odposloucha´vat provoz na sı´ti. Toto riziko je potrˇeba eliminovat, protozˇe na sı´tı´ mohou by´t prˇena´sˇena citliva´ data jako uzˇivatelske´ prˇ´ıstupy s hesly, 65
http://www-user.tu-chemnitz.de/~ensc/ip-sentinel/
80
4. Bezpecˇnost na u ´ rovni sı´teˇ
e-maily, atd. Existuje mnoho programu˚, ktere´ doka´zˇ´ı provoz odposloucha´vat – naprˇ´ıklad dsniff66 , Ethereal67 , tcpdump68 , Snort69 , Sniffit70 a spousta dalsˇ´ıch. Obranou je opeˇt pouzˇitı´ sˇifrovany´ch verzı´ sluzˇeb a vu˚bec sˇifrovane´ho prˇenosu. Vidı´me, zˇe sˇifrova´nı´ je opravdu silny´ prostrˇedek v posilova´nı´ bezpecˇnosti na u ´ rovni sı´teˇ.
MITM MITM (man in the middle attack71 ) u ´ tok spocˇ´ıva´ v tom, zˇe pakety nedorazı´ prˇ´ımo na mı´sto urcˇenı´, ale k neˇkomu jine´mu, kdo tvorˇ´ı jake´hosi nechteˇne´ho prostrˇednı´ka mezi odesı´latelem a pra´voplatny´m prˇ´ıjemcem. Vetrˇelec, ktery´ takto narusˇuje komunikaci, se pak chova´ vzhledem k odesı´lateli jako prˇ´ıjemce a vzhledem k pra´voplatne´mu prˇ´ıjemci jako odesı´latel (v opacˇne´m smeˇru komunikace ´ tocˇnı´k pak mu˚zˇe takovouto komunikaci modifikovat, anizˇ by si zase naopak). U toho obeˇ komunikujı´cı´ strany vsˇimly. Prostrˇedkem eliminace tohoto rizika je ovsˇem autentizace (poprˇ. i sˇifrova´nı´), ktera´ na´m zarucˇ´ı pravost prˇijaty´ch dat. V prˇ´ıpadeˇ e-mailove´ komunikace mu˚zˇeme vyuzˇ´ıt GPG. V jiny´ch prˇ´ıpadech komunikace naprˇ´ıklad jizˇ neˇkolikra´t zmin ˇ ovane´ IPSec cˇi SSH.
Detekce sı´t’ovy ´ ch karet v promiskuitnı´m mo ´ du Sı´t’ova´ karta v norma´lnı´m rezˇimu ignoruje ra´mce, ktere´ jsou urcˇene´ pro jine´ rozhranı´. Zatı´mco v promiskuitnı´m rezˇimu se chova´ sı´t’ove´ rozhranı´ tak, zˇe prˇijı´ma´ vsˇechny ra´mce, cˇehozˇ lze vyuzˇ´ıt k hleda´nı´ chyb na sı´ti, ovsˇem z hlediska bezpecˇnosti by tento mo´d nemeˇl by´t pouzˇ´ıva´n. Co vı´c, meˇli bychom pravidelneˇ kontrolovat, zdali neˇkdo cˇi neˇco sı´t’ove´ rozhranı´ do tohoto mo´du neprˇepnul. To jestli je karta v promiskuitnı´m rezˇimu zjistı´te podle toho, zdali ve vy´pisu ifconfig obsahuje rˇeteˇzec PROMISC. Vsˇe mu˚zˇete zautomatizovat skriptem, ktery´ budete pravidelneˇ spousˇteˇt naprˇ´ıklad kazˇdy´ch 30 minut, cozˇ provedete pomocı´ de´monu cron. 66
http://naughty.monkey.org/~dugsong/dsniff/ http://www.ethereal.com/ 68 http://www.tcpdump.org/ 69 http://www.snort.org/ 70 http://reptile.rug.ac.be/~coder/sniffit/sniffit.html 71 Dozveˇdeˇl jsem se, zˇe korektnı´ na´zev tohoto u ´ toku by meˇl by´t ”human in the middle attack”, aby tento u ´ tok nebyl mylneˇ spojen pouze s muzˇsky´m pohlavı´m. 67
81
4. Bezpecˇnost na u ´ rovni sı´teˇ
DoS, DDoS ´ toky DoS (Denial of Service) slouzˇ´ı veˇtsˇinou k blokova´nı´ sı´t’ove´ho provozu U (sı´t’ovy´ch sluzˇeb). Toto je realizova´no zasla´nı´m velke´ho mnozˇstvı´ pozˇadavku˚, ktere´ nenı´ cı´lovy´ syste´m schopen zvla´dnout. S teˇmito u ´ toky se poty´kala sı´t’ (Internet) jizˇ od same´ho pocˇa´tku a v dnesˇnı´ dobeˇ, kdy ma´me k dispozici nejmoderneˇjsˇ´ı prostrˇedky obrany, ho porˇa´d nelze u ´ plneˇ eliminovat. K tomuto u ´ toku lze vyuzˇ´ıt prakticky vsˇechny druhy paketu˚ – neˇktere´ sofistikovaneˇjsˇ´ı na´stroje pakety ´ tok je samozrˇedokonce kombinujı´, aby zvy´sˇily efektivnost samotne´ho u ´ toku. U jmeˇ efektivneˇjsˇ´ı, pokud u ´ tocˇnı´k disponuje sˇirsˇ´ım internetovy´m pa´smem nezˇ obeˇt’. Prvnı´m typem jsou tzv. ICMP za´plavy, ktere´ lze vyvolat obycˇejny´m prˇ´ıkazem ping naprˇ´ıklad takto:
ping -f -s 1024 obet.cz Prˇ´ıznak -f zajistı´, zˇe se pakety budou zası´lat tak rychle, jak to jen pu˚jde. Prˇ´ıznakem -s lze specifikovat velikost paketu, ktera´ je v uvedene´m prˇ´ıpadeˇ 1KB. Proti tomuto druhu u ´ toku se lze efektivneˇ bra´nit spra´vnou konfiguracı´ firewallu, kde omezı´me nebo u ´ plneˇ zaka´zˇeme mnozˇstvı´ propousˇteˇny´ch ICMP paketu˚ (ICMP ECHO REQUEST pakety). Dalsˇ´ım typem jsou tzv. UDP za´plavy. Ty jsou realizova´ny pomocı´ sluzˇeb jako echo nebo chargen. Tomu zamezı´me zaka´za´nı´m teˇchto sluzˇeb. Nemajı´ jizˇ v te´to dobeˇ vy´znam. Smurf u ´ tokem72 se oznacˇuje u ´ tok, kdy je zası´la´no velke´ mnozˇstvı´ ICMP ECHO REQUEST paketu˚, ktere´ majı´ podvrzˇenou IP adresu obeˇti. Syste´my, ktery´m je paket urcˇen, na tento paket odpovı´ a tı´m se cela´ efektivnost u ´ toku zna´sobı´. Stejne´ho mechanismu vyuzˇ´ıva´ program fraggle, ktery´ pouzˇ´ıva´ UDP pakety. TCP/IP protokolu vyuzˇ´ıva´ tzv. SYN za´plava. Pocˇ´ıtacˇ je zahlcen mnozˇstvı´m polootevrˇeny´ch spojenı´, cozˇ po zaplneˇnı´ fronty u obeˇti zpu˚sobı´ to, zˇe nebude schopen prˇijı´mat dalsˇ´ı TCP spojenı´. Vzhledem k tomu, zˇe v novy´ch ja´drech je fronta zveˇtsˇena a prodleva, kdy pocˇ´ıtacˇ cˇeka´, jestli od komunikujı´cı´ho pocˇ´ıtacˇe neobdrzˇ´ı druhy´ inicializacˇnı´ paket, zkra´cena, je realizace teˇchto u ´ toku˚ obtı´zˇneˇjsˇ´ı. Sofistikovaneˇjsˇ´ımi u ´ toky DoS jsou tzv. DDoS (Distributed Denial of Services), ktere´ vyuzˇ´ıvajı´ mnozˇstvı´ koordinovany´ch pocˇ´ıtacˇu˚, ktere´ soubeˇzˇneˇ zahlcujı´ va´sˇ ´ tocˇnı´k musı´ mı´t samozrˇejmeˇ nad u pocˇ´ıtacˇ. U ´ tocˇ´ıcı´mi syste´my kontrolu. Na tyto pocˇ´ıtacˇe nainstaluje klienty, ktere´ jsou rˇ´ızeny z jednoho mı´sta. 72
Na´zev je odvozen podle stejnojmenne´ aplikace.
82
4. Bezpecˇnost na u ´ rovni sı´teˇ
Viry a GNU/Linux Viry jsou programy, ktere´ se neˇjaky´m zpu˚sobem infiltrujı´ do syste´mu a prˇinutı´ ho k vykona´va´nı´ vlastnı´ch instrukcı´. Ovsˇem zatı´mco operacˇnı´ syste´m MS Windows je viry doslova ubı´jen, GNU/Linux je proti tomuto typu u ´ toku prakticky imunnı´. Procˇ tomu tak ale je? Prvnı´m faktorem je prˇedevsˇ´ım to, zˇe GNU/Linux je mnohem rozmaniteˇjsˇ´ı ve smyslu konfigurace syste´mu. Existuje velke´ mnozˇstvı´ distribucı´, kde kazˇda´ obsahuje jinou verzi softwaru cˇi ja´dra. Zatı´mco naprˇ´ıklad MS Windows XP jsou takrˇka na vsˇech pocˇ´ıtacˇ´ıch identicke´, takzˇe pokud vytvorˇ´ım vir pro jednu instalaci, bude fungovat stejneˇ na ostatnı´ch pocˇ´ıtacˇ´ıch, cˇ´ımzˇ vznika´ u ´ rodna´ pu˚da pro viry. Vsˇe je umocneˇno tı´m, zˇe MS Windows se nacha´zejı´ mnohem cˇasteˇji na pracovnı´ch stanicı´ch, kam mohou by´t infiltrova´ny naprˇ´ıklad skrze elektronickou posˇtu. I prˇesto se na Internetu pa´r takovy´ch linuxovy´ch viru˚ objevilo a take´ dokumenty, jak takove´ viry pod GNU/Linux psa´t 73 . Jednı´m z viru˚ je Linux/Bliss, ktery´ napada´ spustitelne´ soubory ELF. Druhy´m virem je Linux/Vit, ktery´ infikuje spustitelne´ soubory. Oba viry jsou paraziticke´, cozˇ znamena´, zˇe soubor infikujı´ bez toho, anizˇ by ho posˇkodily. Take´ jsou nerezidentnı´, cozˇ znamena´, zˇe infikova´nı´ probeˇhne po spusˇteˇnı´ souboru s virem. Podobny´ch viru˚ se postupem cˇasu objevilo vı´ce – naprˇ´ıklad Linux.Winter, Linux.Rike.1627, Linux.Diesel, Linux.Kagob a dalsˇ´ı. Ovsˇem u ´ cˇinnost teˇchto viru˚ je, oproti jejich kolegu˚m z rodiny windowsovy´ch viru˚, miziva´. Ovsˇem akademicke´ sı´teˇ jsou sı´teˇ heterogennı´, takzˇe virove´ nebezpecˇ´ı zde hrozı´ prˇedevsˇ´ım pro pocˇ´ıtacˇe s operacˇnı´mi syste´my MS Windows, kam se viry mohou dostat naprˇ´ıklad skrze elektronickou posˇtu. Toto ohrozˇenı´ lze eliminovat, i kdyzˇ pouzˇ´ıvany´ posˇtovnı´ server (angl. mail server) beˇzˇ´ı na GNU/Linuxu. Existujı´ antiviry, ktere´ lze nainstalovat na posˇtovnı´ server a kontrolovat vesˇkerou posˇtu, ktera´ prˇes tento server projde. Jednı´m takovy´m antivirem, ktery´ je vyda´vany´ pod licencı´ GNU GPL, je ClamAV 74 . Tato aplikace je napsa´na podle norem POSIX, takzˇe stejneˇ dobrˇe pobeˇzˇ´ı na ru˚zny´ch hardwarovy´ch platforma´ch v GNU/Linuxu, *BSD, Solarisu cˇi MacOS. Antivirova´ databa´ze tohoto programu je zalozˇena na databa´zi OpenAntivirus 75 , ktery´ vyvı´jı´ ClamAV jako jeden ze svy´ch projektu˚. OpenAntivirus vyvı´jı´ mnoho dalsˇ´ıch projektu˚ zameˇrˇeny´ch na problematiku viru˚ – prˇ´ıkladem mu˚zˇe by´t dalsˇ´ı posˇtovnı´ virovy´ skenr AMaViS 76 , se ktery´m doka´zˇe ClamAV spolupracovat. Pokud bychom chteˇli vyuzˇ´ıt neˇjaky´ komercˇnı´ projekt, mu˚zˇeme sa´hnout po antiviru NOD32 77 , ktery´ ma´ opravdu velmi kvalitnı´ heuristiku odhalova´nı´ viru˚. 73
Naprˇ´ıklad http://www.lwfug.org/abartoli/virus-writing-HOWTO/ html/ http://www.clamav.net/ 75 http://www.openantivirus.org/ 76 http://www.amavis.org/ 77 http://www.nod32.com/home/home.htm 74
83
4. Bezpecˇnost na u ´ rovni sı´teˇ
I kdyzˇ je tedy GNU/Linux proti viru˚m prakticky imunnı´, najdou antiviry na tomto syste´mu sve´ vyuzˇitı´ a to prˇi eliminaci viru˚ prˇedevsˇ´ım na platformeˇ MS Windows. Do du˚sledku mu˚zˇe virova´ infekce na teˇchto pocˇ´ıtacˇ´ıch ohrozit i linuxove´ stroje nebo samotnou sı´t’. Jednoduchy´m prˇ´ıkladem mu˚zˇe by´t virus, ktery´ po usazenı´ se na hostitelske´m pocˇ´ıtacˇi vysı´la´ za´plavu paketu˚ na urcˇite´ stroje v sı´ti, cˇ´ımzˇ mu˚zˇe cely´ provoz na sı´tı´ zpomalit nebo dane´ pocˇ´ıtacˇe u ´ plneˇ zneprˇ´ıstupnit. Prˇ´ıme´ riziko virove´ho ohrozˇenı´ linuxovy´ch stroju˚ ovsˇem postupem cˇasu roste a to z du˚vodu rostoucı´ pouzˇ´ıvanosti GNU/Linuxu i na pracovnı´ch stanicı´ch a take´ dı´ky fenome´nu, ktery´ se objevil v neda´vne´ dobeˇ a tı´m je objevenı´ neˇkolika kernelovy´ch chyb, ktere´ umozˇn ˇ ovali prˇ´ıme´ zı´skanı´ pra´v superuzˇivatele. Jednalo se zejme´na o chybu v syste´move´m vola´nı´ (angl. syscall) ptrace z brˇezna 2003 78 , ktera´ ohrozˇovala ja´dra rˇady 2.2 azˇ 2.4. Na´sledovala chyba v do brk 79 . A pak se objevily dveˇ chyby v syscallu mremap 80 . Pomocı´ teˇchto loka´lneˇ zneuzˇitelny´ch chyb se jizˇ neˇjaky´ takovy´ linuxovy´ virus dal vyuzˇ´ıt a urcˇiteˇ se o to i neˇkdo pokusil. Porˇa´d to ovsˇem nenı´ optima´lnı´ prostrˇedı´ k masivnı´mu rozsˇ´ırˇenı´ na´kazy.
78
http://marc.theaimsgroup.com/?l=linux-kernel&m=104791735604202&w=2 http://isec.pl/vulnerabilities/isec-0012-do brk.txt 80 http://isec.pl/vulnerabilities/isec-0013-mremap.txt, http://www.isec.pl/vulnerabilities/isec0014-mremap-unmap.txt 79
84
Kapitola 5
Fyzicka´ bezpec ˇnost Existujı´ zpu˚soby ohrozˇenı´ bezpecˇnosti, ktere´ vycha´zejı´ pouze s fyzicke´ho pu˚sobenı´ osoby nebo jiny´ch faktoru˚ na pocˇ´ıtacˇ cˇi syste´m. Samozrˇejmeˇ pokud ma´ vetrˇelec prˇ´ıstup k pocˇ´ıtacˇu˚m, mu˚zˇe narusˇit jejich provoz prˇ´ımy´m odpojenı´m z datove´ nebo elektricke´ sı´teˇ, posˇkozenı´m, apod. Toto riziko lze jednodusˇe eliminovat omezenı´m prˇ´ıstupu k dany´m pocˇ´ıtacˇu˚m. Tı´mto zamezı´me i prˇ´ıpadne´ ztra´teˇ dat odcizenı´m fyzicky´ch me´diı´. Cˇ tenı´ samotny´ch dat lze znemozˇnit sˇifrova´nı´m na disku naprˇ´ıklad pomocı´ CryptoAPI – ovsˇem to na´m nezarucˇ´ı, zˇe my sami data jesˇteˇ neˇkdy uvidı´me. Pak jsou fyzicka´ ohrozˇenı´, ktera´ nejsou zpu˚sobena u ´ myslneˇ – naprˇ´ıklad vy´padek proudu. Tomuto lze prˇedejı´t vyuzˇitı´m UPS (Uninterruptible Power Supply), cozˇ je zarˇ´ızenı´, ktere´ doka´zˇe prodlouzˇit prˇ´ısun elektricke´ energie na dobu, po kterou mu stacˇ´ı jeho vlastnı´ baterie. Tato doba nenı´ veˇtsˇinou prˇ´ılisˇ dlouha´ (u beˇzˇny´ch UPS od 20 do 50 minut v za´vislosti na prˇ´ıkonu pocˇ´ıtacˇe a kapaciteˇ baterie, ktere´ nejsou vu˚bec levnou za´lezˇitostı´) a je urcˇena ke korektnı´mu ukoncˇenı´ syste´mu. Obcˇas se take´ stane, zˇe dojde k porusˇe disku, cozˇ mu˚zˇe znemozˇnit cˇtenı´ z disku. Tomuto zabra´nı´me za´lohova´nı´m na jina´ me´dia – naprˇ´ıklad DVD me´dia, CD me´dia, magneticke´ pa´sky, apod. Dalsˇ´ı ohrozˇenı´ u ´ zce navazuje na prˇedchozı´ odstavec. Pokud uzˇ me´dia se za´lohami prˇeru˚stajı´ u ´ nosne´ meze, je potrˇeba je vhodny´m zpu˚sobem odstranit. Toto se ty´ka´ i prˇ´ıpadny´ch vy´stupu˚ z tiska´ren, i kdyzˇ toto se beˇzˇneˇ v akademicky´ch sı´tı´ch nepraktikuje. Tyto materia´ly je nutne´ vhodny´m zpu˚sobem znehodnotit, aby z nich nebylo mozˇne´ data zı´skat (o tzv. trashingu jsem se jizˇ zmin ˇ oval). Rozhodneˇ by se tato cˇinnost meˇla objevit v prˇ´ıpadne´ bezpecˇnostnı´ politice. Pomalu se dosta´va´me od teˇch hruby´ch technik k teˇm jemneˇjsˇ´ım. Mozˇna´ se to na prvnı´ pohled zda´ absurdnı´, ale zneuzˇ´ıt lze i diod LED, ktere´ indikujı´ odesı´la´nı´ a prˇ´ıjem dat, ktere´ najdete na ethernetovy´ch prˇepı´nacˇ´ıch. V soucˇasne´ dobeˇ ak85
5. Fyzicka´ bezpecˇnost
tua´lnı´ bezdra´tove´ mysˇi a kla´vesnice, poprˇ. infra porty, ktere´ jsou pouzˇ´ıva´ny u notebooku˚, PDA a jiny´ch prˇenosny´ch zarˇ´ızenı´, vysı´lajı´ signa´ly prostrˇednictvı´m infracˇerveny´ch diod v nijak nechra´neˇne´ podobeˇ – tzn. nesˇifrovane´. Jsou popsa´ny metody, jak efektivneˇ i na velke´ vzda´lenosti tyto signa´ly snı´mat – popsane´ v dokumentu ”Information Leakage from Optical Emanations” 1 . Snı´mat lze i za´rˇenı´ monitoru (tato metoda se nazy´va´ ”van Eck Phreaking” nebo take´ ”Tempest”) – popsane´ v dokumentu ”Compromising emanations: eavesdropping risks of computer displays”2 a ”Optical Time-Domain Eavesdropping Risks of CRT Displays” 3 . Protiopatrˇenı´m proti teˇmto u ´ toku˚m je dobre´ skrytı´ vyzarˇujı´cı´ho signa´lu, cozˇ nemusı´ by´t vzˇdy snadne´. Existuje projekt eckbox 4 , ktery´ prˇedstavuje software a k neˇmu prˇ´ıslusˇny´ hardware k zamezenı´ snı´ma´nı´ za´rˇenı´ monitoru. Nic nekoncˇ´ı u za´rˇenı´ monitoru, cenne´ informace lze zı´skat i vedlejsˇ´ım zvukovy´m kana´lem. Adi Shamir a Eran Tromer popisujı´ ve sve´m dokumentu 5 tzv. akustickou kryptoanaly´zu. Pokud bude mı´t vetrˇelec fyzicky´ prˇ´ıstup k pocˇ´ıtacˇi a bude chtı´t nad nı´m zı´skat kontrolu (a nebude zrovna moci ho u ´ plneˇ odcizit cˇi rozebrat) je nejjednodusˇsˇ´ım zpu˚sobem zavedenı´ vlastnı´ho syste´mu z CD-ROM, vyuzˇitı´m disketove´ mechaniky, nebo jiny´ch zarˇ´ızenı´. Tomuto lze zabra´nit vı´cero zpu˚soby. Prvnı´m mu˚zˇe by´t zmeˇna nastavenı´ pameˇti CMOS tak, aby stroj bootoval z disku, kde ma´me syste´m a na´sledne´ nastavenı´ hesla CMOS. Pokud vetrˇelec nemu˚zˇe uskutecˇnit fyzicky´ za´sah do u ´ trob pocˇ´ıtacˇe a heslo CMOS vyrˇadit z cˇinnosti vyjmutı´m baterie z CMOS nebo specia´lnı´m prˇepı´nacˇem na desce, je toto rˇesˇenı´ bezpecˇne´. Druhy´m zpu˚sobem obrany proti zavedenı´ vetrˇelcova syste´mu je vyjmutı´ samotny´ch mechanik cˇi u ´ schovou pocˇ´ıtacˇe do uzamcˇene´ skrˇ´ıneˇ (prˇ´ıpady, kdy je server zavrˇen v trezoru a obsluha ma´ k dispozici jen vstupnı´, vy´stupnı´ zarˇ´ızenı´, uzˇ nejsou tak neojedineˇle´). Tı´mto se chra´nı´me i proti u ´ myslne´mu restartova´nı´ stroje, ovsˇem je potrˇeba take´ osˇetrˇit mozˇnost restartova´nı´ pomocı´ kombinace kla´ves Ctrl+Alt+Del, ktera´ mu˚zˇe by´t zneuzˇita beˇzˇny´m uzˇivatelem. Zablokova´nı´ kombinace kla´ves Ctrl+Alt+Del se deˇje prˇes soubor /etc/inittab. Stacˇ´ı zakomentovat rˇa´dek:
ca::ctrlaltdel:/sbin/shutdown -t5 -r now Nebo zmeˇnit akci, ktera´ se prˇi stisku te´to kombinace vykona´ (naprˇ. zaznamena´nı´ do syslogu nebo jina´ forma upozorneˇnı´ administra´torovi). Dalsˇ´ı nebezpecˇ´ı fyzicke´ho prˇ´ıstupu cˇ´ıha´ v zneuzˇitı´ jednouzˇivatelske´ho mo´du. 1
http://www.applied-math.org/optical tempest.pdf” http://www.cl.cam.ac.uk/TechReports/UCAM-CL-TR-577.pdf 3 http://www.cl.cam.ac.uk/~mgk25/ieee02-optical.pdf 4 http://eckbox.sourceforge.net/ 5 http://www.wisdom.weizmann.ac.il/ tromer/acoustic/ 2
86
5. Fyzicka´ bezpecˇnost
To je mo´d, kdy je umozˇneˇno vyuzˇ´ıvat syste´m s pra´vy superuzˇivatele bez toho, anizˇ by bylo nutne´ zadat heslo. Tento mo´d se pouzˇ´ıva´ k opravny´m nebo ladı´cı´m akcı´m. V zavadeˇcˇi LILO6 si tento mo´d vynutı´te zada´nı´m linux 1 nebo linux single. Tomuto lze zabra´nit jednodusˇe tak, zˇe nikdo nebude moci v zavadeˇcˇi zadat zˇa´dny´ prˇ´ıkaz. U zavadeˇcˇe LILO toto provedeme doplneˇnı´m rˇa´dku:
timeout=0 cozˇ nastavı´ nulovy´ cˇasovy´ limit a rˇa´dek:
prompt cozˇ zamezı´ automaticke´mu zavedenı´ syste´mu po restartu. Druhou mozˇnostı´ je chra´nit zavadeˇcˇ heslem, cozˇ v zavadeˇcˇi LILO provedeme prˇida´nı´m rˇa´dku˚:
restricted password=maminka kde maminka bude prˇ´ıstupove´ heslo zavadeˇcˇe. Poslednı´ situacı´ ty´kajı´cı´ se fyzicke´ bezpecˇnosti, kterou zde zmı´nı´m je ta, pokud se uzˇivatel loka´lneˇ prˇihla´sı´ na linuxove´m stroji a opustı´ pocˇ´ıtacˇ, anizˇ by ho jakkoliv zajistil. Zajistit takovy´ pocˇ´ıtacˇ lze univerza´lneˇ naprˇ´ıklad pouzˇitı´m programu xlock, ktery´ umozˇnı´ dalsˇ´ı pra´ci se syste´mem azˇ po zada´nı´ hesla, ktere´ patrˇ´ı ke kontu prˇihla´sˇene´ho uzˇivatele. Pouzˇ´ıt lze take´ aplikaci xscreensaver 7 s prˇ´ıznakem -lock-mode, cozˇ bude mı´t stejny´ efekt. Aplikace xscreensaver slouzˇ´ı jinak jako sporˇicˇ obrazovky. Ovsˇem je potrˇeba si take´ da´vat pozor na hrozbu simulovane´ho sporˇicˇe obrazovky, kdy za´sˇkodnı´k upravı´ naprˇ´ıklad pouzˇity´ program xlock, kde doplnı´ programovy´ ko´d, ktery´ mu zajistı´ odesla´nı´ hesla po jeho zada´nı´ pravy´m uzˇivatelem. Takto lze zı´skat heslo i naprˇ´ıklad pomocı´ simulovane´ho prˇihla´sˇenı´. V prostrˇedı´ akademicky´ch sı´tı´ docha´zı´ k fyzicke´mu kontaktu s pocˇ´ıtacˇi deno denneˇ. At’ uzˇ jsou to spra´vci, studenti nebo jinı´ zameˇstnanci, vsˇichni vytva´rˇejı´ riziko, ktere´ je potrˇeba vy´sˇe popsany´mi prostrˇedky eliminovat.
6 7
http://lilo.go.dyndns.org/ http://www.jwz.org/xscreensaver/
87
Kapitola 6
Uka´zkovy ´ prˇ´ıklad akademicke´ sı´te ˇ V te´to kapitole budu demonstrovat to, jak mu˚zˇe konkre´tneˇ vypadat takova´ mala´ akademicka´ sı´t’. Sı´t’ by meˇla mı´t svu˚j webovy´ server, mail server a server pro databa´ze, ktery´ bude take´ slouzˇit jako u ´ lozˇisˇteˇ dat. V sı´ti by se da´le meˇla nacha´zet pocˇ´ıtacˇova´ laboratorˇ, da´le mı´sto, kde by se dal ethernetovy´m kabelem prˇipojit notebook a take´ AP (Access Point) sˇ´ırˇ´ıcı´ bezdra´tovy´ signa´l po urcˇite´ cˇa´sti budovy. Tato sı´t’ by meˇla mı´t vytvorˇenı´ bezpecˇny´ komunikacˇnı´ kana´l s jinou akademickou sı´tı´. A take´ by meˇla umozˇnit prˇedevsˇ´ım administra´torovi, bezpecˇneˇ se prˇipojovat na firewall a servery za nı´m za u ´ cˇelem spra´vy. K dispozici je pouze jedna verˇejna´ IP adresa. A nynı´ jizˇ k prˇesne´mu popisu sı´teˇ, ktery´ vidı´me na obra´zku 6.1. Zacˇnu firewallem, ktery´ oddeˇluje nasˇ´ı sı´t’ od vneˇjsˇ´ıho prostrˇedı´. Tento stroj slouzˇ´ı za´roven ˇ jako firewall, router a proxy server. Ma´ trˇi rozhranı´. Prvnı´m je eth0, ktere´ smeˇrˇuje ven ze sı´teˇ. Druhy´m rozhranı´m je eth1, ktere´ uvozuje demilitarizovanou zo´nu (DMZ) a trˇetı´ rozhranı´ eth2, ktere´ smeˇrˇuje do druhe´ cˇa´sti vnitrˇnı´ sı´teˇ, odkud se prˇipojujı´ pracovnı´ stanice. Tento stroj bude z Internetu viditelny´ pod prˇideˇlenou verˇejnou IP adresou – v nasˇem prˇ´ıpadeˇ 195.168.3.87. Z vnitrˇnı´ sı´teˇ bude prˇ´ıstupny´ take´ pod IP adresou 172.20.20.20. Vidı´me, zˇe ve vnitrˇnı´ sı´ti pouzˇ´ıva´m adresnı´ rozsah priva´tnı´ch adres trˇ´ıdy B, ktera´ ma´ rozsah 172.16.0.0-172.31.255.255, cozˇ pro nasˇ´ı sı´t’ bude dostatecˇne´ nadimenzova´nı´. Paketovy´ filtr je zalozˇen na iptables, jak jsem popsal v sekci ”4.2.2 iptables”. Kromeˇ filtrova´nı´ beˇzˇny´ch protokolu˚ by meˇl obsahovat ochranu proti IP spoofingu, SYN floodingu, ICMP floodingu, apod. Mu˚zˇeme odfiltrovat ICMP ECHO REQUEST pakety a tı´m udeˇlat firewall cˇa´stecˇneˇ neviditelny´. Ve skriptu s firewallem mohou by´t jesˇteˇ neˇktere´ dalsˇ´ı prvky, ktere´ zde jesˇteˇ zmı´nı´m. Na tomto syste´mu take´ necha´me beˇzˇet HTTP proxy server Squid, ktery´m budeme moci kontrolovat HTTP prˇenos a poprˇ´ıpadeˇ ho blokovat. Je potrˇeba prˇesmeˇrovat odchozı´ HTTP pozˇadavky s vy´jimkou loka´lnı´ho stroje na port 3128, kde nasloucha´ Squid. Prˇ´ıkaz pomocı´ iptables by vy88
6. Uka´zkovy´ prˇ´ıklad akademicke´ sı´teˇ
padal takto:
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -i ! eth0 -d ! 195.168.3.87 dport 80 -j REDIRECT to-port 3128 Funkci proxy cache bych zde nezava´deˇl, protozˇe se to u takove´to relativneˇ male´ sı´teˇ nevyplatı´. Na tomto serveru by jinak nemeˇly beˇzˇet zˇa´dne´ sı´t’ove´ sluzˇby a meˇly by zde platit prˇ´ısna´ bezpecˇnostnı´ pravidla utvrzena´ prostrˇedky popsany´mi v kapitola´ch ”2 Za´kladnı´ hardening GNU/Linuxu” a ”3 Pokrocˇily´ hardening GNU/Linuxu”. Firewall je take´ vyzbrojen aplikacı´ Snort, ktera´ je nakonfigurova´na tak, aby se chovala jako adaptivnı´ firewall. Snort doka´zˇe podchytit i u ´ toky cˇervu˚ (angl. worms), cozˇ ochra´nı´ windowsove´ syste´my ve vnitrˇnı´ sı´ti, ktere´ jsou k tomu zvla´sˇteˇ na´chylne´. V prˇ´ıpadeˇ potrˇeby lze se Snortem sledovat ostatnı´ (beˇzˇny´) provoz. Na firewall se pu˚jde prˇihla´sit pouze ze stroje s IP adresou 172.20.20.31, ktery´ bude slouzˇit prˇedevsˇ´ım jako server pro sdı´lenı´ souboru˚ NIS, print server nebo file server. Budou zde umı´steˇny domovske´ adresa´rˇe uzˇivatelu˚, du˚lezˇite´ konfiguracˇnı´ soubory a dalsˇ´ı potrˇebne´ sluzˇby a soubory pro spra´vny´ beˇh vnitrˇnı´ sı´teˇ. To zˇe se na server da´ prˇipojit jen z tohoto pocˇ´ıtacˇe, zajistı´ iptables a TCP wrappers, ktere´ ostatnı´m pocˇ´ıtacˇu˚m zaka´zˇ´ı prˇ´ıstup. Prˇ´ıstup k tomuto pocˇ´ıtacˇi (a vlastneˇ i ostatnı´m serveru˚m) z vneˇjsˇ´ı sı´teˇ bude zajisˇteˇn prˇesmeˇrova´nı´m portu 2222 z firewallu na port 22 tohoto stroje:
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -d 195.168.3.87 dport 2222 -j DNAT to 172.20.20.31:22 Cozˇ umozˇn ˇ uje vneˇjsˇ´ım pocˇ´ıtacˇu˚m pouzˇ´ıt ssh ke spojenı´ se s tı´mto strojem. Odtud uzˇ se lze prˇihla´sit na vsˇechny servery vcˇetneˇ firewallu. Tento pocˇ´ıtacˇ je vybaven syste´mem grsecurity, ktery´ velkou meˇrou podporˇ´ı bezpecˇnost na u ´ rovni OS (loka´lnı´ bezpecˇnost). Nedu˚veˇryhodne´ uzˇivatele zamkneme do chroot prostrˇedı´, zaka´zˇeme jim kompilova´nı´ a spousˇteˇnı´ vlastnı´ch bina´rnı´ch souboru˚, neuvidı´ beˇzˇ´ıcı´ procesy ostatnı´ch uzˇivatelu˚ atd. Da´le si vsˇimneˇme, zˇe mezi nasˇ´ı a neˇjakou dalsˇ´ı akademickou sı´tı´ je vytvorˇena VPN pomocı´ IPSec, cozˇ zabezpecˇ´ı cˇtenı´ a pozmeˇneˇnı´ dat, ke ktere´mu by mohlo dojı´t prˇi prˇenosu dat v Internetu. Protozˇe se sta´le pohybujeme v sı´tı´ch, kde je pouzˇ´ıva´na IPv4, pouzˇili bychom k vytvorˇenı´ IPSec tunelu projekt Openswan. Dalsˇ´ım pocˇ´ıtacˇem v DMZ je server slouzˇ´ıcı´ jako webovy´ a posˇtovnı´ server. Coby webovy´ server bude prˇ´ıstupny´ opeˇt prˇes prˇesmeˇrova´nı´ na firewallu, cozˇ provedeme prˇes iptables (konkre´tneˇ prˇes DNAT aplikovany´ na rˇeteˇzec PREROUTING), abychom meˇli vesˇkerou konfiguraci konzistentnı´. Webovy´ server by 89
6. Uka´zkovy´ prˇ´ıklad akademicke´ sı´teˇ
zajisˇt’oval Apache1 s prˇ´ıslusˇny´mi bezpecˇnostnı´mi moduly jako mod_dosevasive 2 a mod_security3 . Posˇtovnı´ server by meˇl zajisˇt’ovat elektronickou posˇtu skrze protokoly SMTP, POP3, IMAP a jejich sˇifrovane´ varianty, k cˇemuzˇ bych pouzˇil OpenSSL. Aby byl umozˇneˇn vy´beˇr posˇty i uzˇivatelu˚m vneˇ sı´teˇ, je potrˇeba opeˇt tyto sluzˇby prˇesmeˇrovat. V prˇ´ıpadeˇ POP3s a IMAPs musı´me da´t navı´c k dispozici pouzˇity´ certifika´t. Jako posˇtovnı´ server bych doporucˇoval pouzˇ´ıt Postfix 4 v kombinaci s antivirem ClamAV nebo NOD32. Na vsˇech teˇchto serverech je samozrˇejmostı´ kontrola integrity syste´movy´ch souboru˚ pomocı´ projektu Tripwire 5 (lze pouzˇ´ıt i projekty Aide6 nebo Afick7 ). Syste´move´ logy8 pouze pravidelneˇ sledujeme a mazˇeme (tuto pra´ci na´m zjednodusˇ´ı program logrotate). Nejidea´lneˇjsˇ´ı by ovsˇem bylo smeˇrovat logy na jiny´ pocˇ´ıtacˇ v sı´ti po jednosmeˇrne´m spojenı´, kde by je nemohl nikdo modifikovat. My mu˚zˇeme smeˇrovat logy na server s IP adresou 172.20.20.31, ale toto spojenı´ je obousmeˇrne´, takzˇe pokud neˇkdo nad tı´mto pocˇ´ıtacˇem zı´ska´ kontrolu, mu˚zˇe logy upravit nebo smazat. Vytvorˇ´ıme tı´m urcˇitou barie´ru, takzˇe smysl to urcˇiteˇ neztra´cı´. Na serveru 172.20.20.31 tedy zajistı´me prˇedevsˇ´ım integritu dat a samozrˇejmeˇ ostatnı´ zabezpecˇenı´ loka´lnı´ bezpecˇnosti. Na prˇepı´nacˇ s cˇ´ıslem dveˇ jsou napojeny pracovnı´ stanice. Tyto pocˇ´ıtacˇe majı´ stejneˇ jako servery pevneˇ nastavenou IP adresu. O zabezpecˇenı´ pracovnı´ch stanic sem v te´to pra´ci jizˇ psal. Prˇepı´nacˇ s cˇ´ıslem trˇi je volny´ pro prˇipojova´nı´ prˇenosny´ch pocˇ´ıtacˇu˚. Teˇmto pocˇ´ıtacˇu˚m bude umozˇneˇno zı´skat IP adresu dynamicky prˇes DHCP. K prˇepı´nacˇi cˇ´ıslo 1 je take´ prˇipojen AP (Access Point), ktery´m rozva´dı´me bezdra´tovy´ signa´l. Zde bychom ovsˇem DHCP povolovat nemeˇli. A meˇli bychom dodrzˇet dalsˇ´ı za´sady, ktere´ jsem probı´ral v u ´ vodu kapitoly ”4 Bezpecˇnost na u ´ rovni sı´teˇ”.
1
http://www.apache.org/ http://www.nuclearelephant.com/projects/dosevasive/ 3 www.modsecurity.org 4 http://www.postfix.org/ 5 http://www.tripwire.org/ 6 http://www.cs.tut.fi/~rammer/aide.html 7 http://prdownloads.sourceforge.net/afick/ 8 Problematikou linuxovy´ch logu˚ sem se v te´to pra´ci nezaby´val. 2
90
6. Uka´zkovy´ prˇ´ıklad akademicke´ sı´teˇ
vnejsi prostredi
vzdalena akademicka sit
klientsky pocitac
IPSec ssh
Internet
DMZ
firewall router
MAIL, WEB server
NIS, PRINT server
eth0
195.168.3.87
DB server-uloziste
eth1 172.20.20.30
172.20.20.20
172.20.20.31
eth2
172.20.20.32
switch 04
LAN
switch 01
172.30.0.0
172.30.0.1
172.30.0.2
172.30.0.3
switch 02
switch 03 AP
(192.168.0.1)
eth0 172.50.50.50
wlan0 192.168.0.5
(192.168.0.2)
(172.40.0.0)
(172.40.0.0)
Obra´zek 6.1: Uka´zkovy´ prˇ´ıklad akademicke´ sı´teˇ 91
Kapitola 7
Za´ve ˇr Resˇersˇnı´ pra´ce na´s provedla mozˇnostmi ohrozˇenı´ OS GNU/Linux a samozrˇejmeˇ take´ prostrˇedky k jejich eliminaci. Pra´ce se veˇnuje vy´hradneˇ operacˇnı´mu syste´mu GNU/Linux, ale mnoho z teˇchto informacı´ ma´ obecnou platnost. Vidı´me, zˇe i administra´tor ma´ prostrˇedky, ktere´ mu˚zˇe u ´ cˇinneˇ vyuzˇ´ıt v boji proti hrozba´m, ktery´m jsou jı´m spravovane´ pocˇ´ıtacˇe, denodenneˇ vystavova´ny. Zjistili jsme take´, zˇe pomocı´ programove´ho vybavenı´ typu Open Source, lze vytvorˇit bezpecˇnostnı´ barie´ry velmi levneˇ (nebo u ´ plneˇ zadarmo), cozˇ se v akademicke´m prostrˇedı´ jisteˇ hodı´. Dı´ky otevrˇenosti zdrojove´ho ko´du je navı´c mozˇno tyto prostrˇedky snadno rozsˇirˇovat a vylepsˇovat. V beˇzˇny´ch sı´tı´ch je zvykem vytvorˇit pevnou bezpecˇnostı´ politiku, ktera´ by meˇla by´t striktneˇ dodrzˇova´na. Ovsˇem, jak jsem jizˇ rˇekl, v prostrˇedı´ akademicky´ch sı´tı´ docha´zı´ ke zvy´sˇene´ fluktuaci zameˇstnancu˚, cozˇ nevytva´rˇ´ı optima´lnı´ podmı´nky k jejı´mu dodrzˇova´nı´. Pra´ce tvorˇ´ı informacˇneˇ velmi rozsa´hle´ho pru˚vodce problematiky bezpecˇnosti od nativnı´ch bezpecˇnostnı´ch prostrˇedku˚ syste´mu GNU/Linux azˇ po komplexnı´ softwarova´ rˇesˇenı´. Tuto pra´ci da´le rozsˇirˇujı´ odkazy na dalsˇ´ı zdroje informacı´, ktere´ prova´zejı´ celou pra´ci a zvysˇujı´ tı´m jejı´ informacˇnı´ hodnotu. Popisova´ny jsou prostrˇedky, ke ktery´m cˇasto nejsou k dispozici kvalitnı´ informacˇnı´ zdroje v cˇesˇtineˇ – naprˇ´ıklad sˇifrovane´ souborove´ syste´my cˇi popis bezpecˇnostnı´ch proble´mu˚ Wi-Fi, o ktery´ch se v pra´ci neˇkolikrat zmin ˇ uji. Pra´ci dopln ˇ uje mnoho prˇ´ıkladu˚, ktere´ poma´hajı´ k pochopenı´ vysveˇtlovane´ problematiky. Mezi steˇzˇejnı´ prˇ´ıklady patrˇ´ı kompletnı´ vysveˇtlenı´ skriptu, ktery´ zajist’uje firewall pomocı´ iptables a take´ uka´zkovy´ prˇ´ıklad sˇkolnı´ sı´teˇ, ktery´ zavrsˇuje celou pra´ci. Je tu ovsˇem neˇkolik veˇcı´, ktere´ se jizˇ do te´to pra´ce nevesˇly a je potrˇeba je alespon ˇ zmı´nit. V prvnı´ rˇadeˇ zde nebyla rozebı´ra´na bezpecˇnost subsyste´mu˚ (FTP server, web server, name server, samba server, atd.), jejı´zˇ popis by vydal minima´lneˇ na pra´ci stejneˇ obsa´hlou, jako je tato.
92
7. Za´veˇr
Jen lehce sem se v te´to pra´ci zmı´nil o logova´nı´. Logova´nı´ je silny´ prostrˇedek nejen pro ladeˇnı´ konfigurace naprˇ´ıklad sı´t’ovy´ch de´monu˚, ale sledova´ny by meˇli by´t prˇedevsˇ´ım proto, abychom se ujistili o tom, zdali je na nasˇem syste´mu vsˇe v porˇa´dku (mysˇleno prˇedevsˇ´ım z pohledu bezpecˇnosti). Logy mu˚zˇe u ´ tocˇnı´k prˇi zı´ska´nı´ potrˇebny´ch privilegiı´ meˇnit – mu˚zˇe je jednodusˇe odstranit a nebo modifikovat tak, zˇe budou vypovı´dat o nepravdivy´ch aktivita´ch. Proto je nejlepsˇ´ı smeˇrovat logy na centra´lnı´ log server. K tomuto serveru by meˇl by´t znemozˇneˇn prˇ´ıstup u ´ tocˇnı´kovi pomocı´ specia´lnı´ hardwarove´ u ´ pravy. Tohoto lze dosa´hnout pomocı´ specia´lnı´ch hardwarovy´ch rˇesˇenı´, ktera´ zde nebudu popisovat. Logy majı´ mnoho podob – bina´rnı´ nebo textove´. V GNU/Linuxu veˇtsˇinou zajisˇt’uje spra´vu logu˚ de´mon syslogd, ktery´ je jizˇ velmi zastaraly´ a jeho u ´ lohu by meˇl nahradit noveˇjsˇ´ı Socklog1 . Pro filtrova´nı´ logu lze pouzˇ´ıt utilitu logcheck 2 . Dalsˇ´ım preventivnı´m prvkem, ktery´m lze prˇedejı´t mnoha proble´mu˚m spojeny´ch z bezpecˇnostı´ je za´lohova´nı´. Za´lohovat by se meˇly prˇedevsˇ´ım potrˇebneˇ syste´move´ soubory nutne´ k chodu syste´mu. O tato data lze prˇijı´t mnohy´mi zpu˚soby a jednı´m z nich mu˚zˇe by´t i cˇinnost vetrˇelce. Ten nemusı´ ani data prˇ´ımo mazat, ale pouze modifikovat – naprˇ´ıklad umist’ovat konfiguracˇnı´ backdoory. Na´vrat do pu˚vodnı´ho stavu mu˚zˇe by´t takovy´, zˇe administra´tor prˇepı´sˇe soubory za´lohovany´mi soubory z doby, o ktere´ vı´, zˇe bylo vsˇe v porˇa´dku, mı´sto toho, aby prˇepisoval soubory rucˇneˇ. Vydarˇeny´ popis toho, jak optima´lneˇ navrhnout politiku za´lohova´nı´ je v knize [8]. Ale jak zjistit, zˇe neˇkdo urcˇite´ konfiguracˇnı´ nebo jine´ syste´move´ soubory modifikoval? Samozrˇejmeˇ pravidelnou kontrolou integrity teˇchto souboru˚. K teˇmto u ´ cˇelu˚m slouzˇ´ı jizˇ zmin ˇ ovane´ projekty Tripwire, Aide cˇi Afick. Vsˇimneˇme si, zˇe toto jsou vsˇechno obrane´ mechanismy, ktere´ na´m ukazujı´ na to, zˇe u ´ tocˇnı´k uzˇ jista´ (klidneˇ ta nejvysˇsˇ´ı) privilegia na na´mi spravovane´m syste´mu ma´. O co se vlastneˇ snazˇ´ı u ´ tocˇnı´k, pokud zı´ska´ kontrolu nad syste´mem? Prˇedevsˇ´ım o to, aby si zajistil pohodlny´ prˇ´ıstup a byl skryt prˇed ocˇima administra´tora – tzn. aby nebyly videˇt jeho soubory, procesy, atd. Zajisˇteˇnı´ prˇ´ıstupu lze prove´st opravdu mnoha zpu˚soby a za´lezˇ´ı jen na ostrazˇitosti administra´tora, jestli si jich vsˇimne. Vsˇimli byste si naprˇ´ıklad toho, zˇe nejste jediny´, kdo ma´ v souboru /etc/passwd hodnotu UID rovnu 0, nebo zˇe va´m na portu 5002 nasloucha´ rootovsky´ shell? Pokud kontrolujete integritu souboru˚, tak jisteˇ ano. Ovsˇem existujı´ mnohem sofistikovaneˇjsˇ´ı metody a zde, jak se rˇ´ıka´, se fantazii meze nekladou. Za zmı´nku jisteˇ stojı´ LKM (Loadble Kernel Modules), s jejichzˇ pomocı´ lze prˇeve´st prˇesmeˇrova´nı´ syste´movy´ch vola´nı´ ja´dra a proto se zvla´sˇteˇ hodı´ pro tvorbu kernelovy´ch rootkitu˚ 3 . Jmenoviteˇ naprˇ´ıklad adore, knark, kis 1
http://smarden.org/socklog/ http://www.linux-sxs.org/files/psionic/logcheck-1.1.1.tar.gz 3 Programove´ vybavenı´ pro skryte´ ovla´da´nı´ operacˇnı´ho syste´mu. 2
93
7. Za´veˇr
cˇi specificky´ suckit. Obranou proti zavedenı´ teˇchto rootkitu˚, je pouzˇ´ıva´nı´ ja´dra, ve ktere´m nenı´ podpora zava´deˇnı´ modulu˚, cozˇ na´s mu˚zˇe ovsˇem velmi omezovat. Navı´c tı´mto zpu˚sobem nezabra´nı´me v zavedenı´ rootkitu suckit, ktery´ vyuzˇ´ıva´ ´ cˇinnou metodou proti teˇmto zna´my´m rootkitu˚m je pouzˇitı´ programu˚, /dev/kmem. U ktere´ je doka´zˇ´ı odhalit – naprˇ´ıklad chkrootkit 4 cˇi kstat5 . Nejen odstran ˇ ova´nı´ na´sledku˚ u ´ toku˚ by meˇlo by´t soucˇa´stı´ dane´ bezpecˇnostnı´ politiky sı´teˇ. Je ovsˇem potrˇeba, aby neˇkdo dohlı´zˇel na jejı´ dodrzˇova´nı´, cozˇ v prostrˇedı´ akademicky´ch sı´tı´ch je znacˇneˇ obtı´zˇne´ z du˚vodu fluktuace zameˇstnancu˚. V pra´ci take´ nezmin ˇ uji techniky, ktere´ se pouzˇ´ıvajı´ pro zkusˇebnı´ audit sı´teˇ nebo techniky forensnı´ analy´zy, ktera´ se pouzˇ´ıva´ pokud k neˇjake´mu bezpecˇnostnı´mu incidentu dojde. Tyto techniky uzˇ se nety´kajı´ samotne´ho zebezpecˇova´nı´ syste´mu˚, jako spı´sˇe analy´z, ktere´ se prova´deˇjı´ po procesu zabezpecˇenı´ syste´mu. S normami v oblasti ochrany informacı´ se setka´me prˇedevsˇ´ım v mezina´rodnı´ podobeˇ. Snazˇ´ı se o jistou normalizaci v oblasti ochrany informacı´. Nejveˇtsˇ´ı institucı´ zaby´vajı´cı´ se normami v oblasti informacˇnı´ bezpecˇnosti je ANSI (Americky´ na´rodnı´ u ´ rˇad pro normalizaci), ktera´ se zaby´va´ prˇedevsˇ´ım sbeˇrem a trˇ´ıdeˇnı´m americky´ch i zahranicˇnı´ch norem. Mezi dalsˇ´ı instituce patrˇ´ı jmenoviteˇ CCITT (Mezina´rodnı´ poradnı´ sbor pro telefonii a telegrafii), IEEE (Spolecˇnost pracovnı´ku˚ v elektronice a elektrotechnice), ISO (Mezina´rodnı´ organizace pro normalizaci), ECMA (Sdruzˇenı´ evropsky´ch vy´robcu˚ pocˇ´ıtacˇu˚), IFIP (Mezina´rodnı´ federace pro zpracova´nı´ informacı´), NCSC (Na´rodnı´ centrum pro pocˇ´ıtacˇovou bezpecˇnost) a dalsˇ´ı. Do budoucna lze ocˇeka´vat zvy´sˇeny´ za´jem o pocˇ´ıtacˇovou bezpecˇnost. Jisteˇ velky´ rozmach v oblasti bezpecˇnosti (nejen v te´ pocˇ´ıtacˇove´) nastal po uda´lostech z deva´te´ho za´rˇ´ı 2001. Je vsˇak zrˇejme´, zˇe hackerˇi (jakkoliv je nazy´va´me) jsou vzˇdy o krok prˇed spra´vci. Jak jinak by bylo mozˇne´, aby se seznamu tajny´ch agentu˚ rozmı´steˇny´ch na letisˇtı´ch v souvislosti s teroristicky´mi u ´ toky na mrakodrapy Twins, zmocnil pa´r mlady´ch kluku˚, kterˇ´ı se prˇezdı´vali ”The Deceptive Duo” 6 . Tı´m uka´zali, zˇe cela´ informacˇnı´ bezpecˇnost Americky´ch vla´dnı´ch organizacı´ je pouze frasˇka. Tato skupina meˇla na sveˇdomı´ webove´ stra´nky mnoha americky´ch vla´dnı´ch institucı´ a jasneˇ upozorn ˇ ovala na to, zˇe pocˇ´ıtacˇova´ bezpecˇnost rozhodneˇ nenı´ na u ´ rovni, na ktere´ by by´t meˇla. Jeden mladı´k z te´to dvojky byl zatcˇen FBI v kveˇtnu 20047 . Beˇzˇny´m jevem je to, zˇe chyby se objevujı´ s prˇ´ıchodem novy´ch technologiı´ a produktu˚. Proto je potrˇeba dba´t na bezpecˇnost jizˇ v dobeˇ jejich vy´voje. 4
http://www.chkrootkit.org/ http://www.s0ftpj.org/en/site.html 6 http://www.zone-h.org/defaced/2002/04/24/extra-cas.faa.gov/ 7 http://www.securityfocus.com/news/8559 5
94
Literatura [1] kolektiv autoru˚: Linux Dokumentacˇnı´ Projekt 3. aktualizovane´ vyda´nı´, Computer Press, Praha 2003, ISBN 80-7226-761-2 [2] Bob Toxen: Bezpecˇnost v Linuxu, Computer Press, Brno 2003, ISBN 807226-716-7 [3] Libor Dosta´lek, Alena Kabelova´: Velky´ pru˚vodce protokoly TCP/IP a syste´mem DNS, Computer Press, Praha 2000, ISBN 80-7226-323-4 [4] Libor Dosta´lek a kolektiv: Velky´ pru˚vodce TCP/IP Bezpecˇnost, Computer Press, Praha 2003, ISBN 80-7226-849-X [5] Jirˇ´ı Prˇibyl, Jindrˇich Kodl: Ochrana dat v informatice, Vydavatelstvı´ Cˇ VUT, Praha 1996, ISBN 80-01-01664-1 ´ toky, SoftPress, [6] Brian Hatch, James Lee, George Kurtz: Linux Hackerske´ U Praha 2002, ISBN 80-86497-17-8 [7] Matthew Strebe, Charles Perkins: Firewally a proxy-servery Prakticky´ pru˚vodce, Computer Press, Brno 2003, ISBN 80-7226-983-6 [8] Vicki Stanfield, Roderick W. Smith: Spra´va operacˇnı´ho syste´mu Linux, SoftPress, Praha 2002, ISBN 80-86497-25-9 [9] Michal Mat’ejka: Pocˇ´ıtacˇova´ kriminalita, Computer Press, Brno 2002, ISBN 80-7226-419-2 [10] Simson Garfinkel: PGP: Pretty Good Privacy, Computer Press, Praha 1998, ISBN 80-7226-054-5 [11] SecurityFocus, online na Internetu: http://www.securityfocus.com/ [12] ROOT, online na Internetu: http://www.root.cz/ [13] AbcLinuxu, online na Internetu: http://www.abclinuxu.cz/ [14] LinuxZone, online na Internetu: http://www.linuxzone.cz/ [15] BlackHole, online na Internetu: http://www.blackhole.sk/ i
LITERATURA
[16] Penguin, online na Internetu: http://www.penguin.cz/ [17] Linux security, online na Internetu: http://www.linuxsecurity.com/ [18] SecuriTeam, online na Internetu: http://www.securiteam.com/ [19] Packet Storm, online na Internetu: http://packetstormsecurity.nl/ [20] Security-protocols, online na Internetu: http://security-protocols.com/ [21] Hackwire, online na Internetu: http://www.hackwire.com/ [22] Underground, online na Internetu: http://www.underground.cz/ [23] Hysteria, online na Internetu: http://www.hysteria.sk/ [24] Phrack, online na Internetu: http://www.phrack.org/ [25] WiFi ONLINE, online na Internetu: http://www.wifionline.net/
ii