[LinuxFocus-icon]
<--  | Home  | Map  | Index  | Zoek

Nieuws | Archieven | Links | Over LF
Dit document is beschikbaar in: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Portugues  Russian  Turkce  

[Georges Tarbouriech]
door Georges Tarbouriech
<georges.t/at/linuxfocus.org>

Over de auteur:

Georges is een lange-tijd Unix gebruiker. Hij vindt computer beveiliging een van de belangrijkste uitdagingen van deze eeuw.



Vertaald naar het Nederlands door:
Guus Snijders <ghs/at/linuxfocus.org>

Inhoud:

 

Psionic Portsentry 1.1, de poortwachter

[illustration]

Kort:

Psionic portsentry is deel van de Abacus Project suite van tools (naast portsentry omvat het project logcheck en hostsentry). Het is een IDS (Intrusion Detection System - een soort inbraakalarm), toegespitst op het ontdekken van poortscans en actieve verdediging. Het werkt op vele Unix smaken inclusief Mac OS X. De belangrijkste feature van een IDS is om de sysadmin te waarschuwen over inbraak pogingen. Portsentry gaat verder, daar het kan reageren op een aanval. De nieuwste versie (1.1) van deze prachtige tool is beschikbaar op http://www.psionic.com, en tussen haakjes, versie 1.0 wordt nu meegeleverd met een paar van de grootste Linux distributies (Debian, RedHat...).


_________________ _________________ _________________

 

Waarom portsentry gebruiken?

Tijdens het laatste decennium zijn netwerken opgegroeid met een ongeloofelijke snelheid. Het doel was om communicatie mogelijk te maken tussen verschillende OS'sen. Dus, gesloten netwerk systemen werden langzaam vervangen door TCP/IP. Internet deed de rest! Vandaag de dag steunen de meeste netwerken op TCP/IP en TCP/IP gebruikt poorten. In het kort, poorten worden toegewezen aan programma's (clients of servers). De server luistert tot een client er contact mee maakt teneinde een verbinding tot stand te brengen. De services (bovengenoemde programma's) zijn verbonden aan een specifieke poort. Op Unix systemen is dit verbindings schema terug te vinden in het bestand /etc/services. Dat betekend dat iedereen weet welke poort aan welke service is toegewezen. Als iedereen dit weet, weten crackers dit nog veel beter! Als we een poort voorstellen als een deur, als een poort open is (luistert), is het vergelijkbaar met een open deur. En hoe kom je een huis binnen? Meestal via de deur (tenzij je de voorkeur geeft aan het raam, het is aan jou!). En zo komen black hats (zwarte hoeden) in je computer...
Het eerste wat je kunt doen om het risico te verminderen, is zoveel mogelijk poorten te sluiten, oftewel services te stoppen. Hoe minder, hoe beter. Maar je kunt moeilijk alle poorten sluiten op een netwerk machine: communicatie zou niet langer mogelijk zijn, dat zou jammer zijn.
Hoe je het aantal actieve services omlaag kunt brengen, of hoe je poorten sluit, valt buiten het bereik van dit artikel. Er is veel literatuur te vinden over deze onderwerpen, kijk bijvoorbeeld op The Linux Documentation Project of doorzoek LinuxFocus uitgaven (bijvoorbeeld, Bastille-Linux of Hulp bij beveiliging). Dus om het beveiligen van van een machine of een netwerk, voor Linux beschouw Bastille Linux als een must.
En dit is waar portsentry komt. Portsentry kan poorten monitoren en is in staat om ze te blokkeren, als jij het vraagt om dat te doen. Het biedt je meerdere operating modes, waarvan sommige OS specifiek. In feite, met OS'es wordt hier Linux bedoelt.
Portsentry is in staat gebruik te maken van packet filtering, beschikbaar gesteld door ipfwadm, ipchains of iptables, afhankelijk van welke Linux kernel je hebt. Dit is waar voor Unix smaken met gebruik van andere tools (meer hierover later). Daar zijn we: de mooiste functie van portsentry is waarschijnlijk "auto blocking".
Hoe krijgt het dat voor elkaar? Hier gaan we!

 

Hoe portsentry te installeren?

Portsentry komt als een kleine tarball. na het uitpakken van het archief, krijg je broncode en een aantal configuratie en documentatie bestanden. Uiteraard valt het aan te raden al dat spul te lezen. Nu we het toch hebben over beveiliging, vergeet niet om de PGP bestanden (handtekening en sleutel) te downloaden.
De installatie van portsentry ligt voor de hand: make (jouw systeem) en make install. Maar voor installatie zou je het moeten klaarmaken. Dat wil zeggen je zou de documentatie moeten lezen, de portsentry.conf file aanpassen aan jouw wensen en zowel de Makefile als portsentry_config.h file controleren.
Om portsentry zo efficiënt mogelijk te laten werken heb je minstens TCPWRAPPERS nodig. Minstens, want het zou beter zijn om het te gebruiken in combinatie met een packet filtering tool. Natuurlijk, als je Linux gebruikt, heb je alles al wat je nodig hebt. Maar hoe zit het met de andere Unices?
Daar we portsentry hebben getest op meerdere platforms zal nu stukje volgen over de benodigdheden.
Op MAC OS X is het net als Linux: alles is aanwezig. Je hebt TCPWrappers, en ipfw (de BSD versie). Het is dan ook voldoende om "make osx" te typen.
Op Solaris 2.6 (SPARC), heb je geen TCPWrappers. Deze zijn verkrijgbaar op ftp://ftp.porcupine.org/pub/security. Je kunt ook IPFilter proberen, te vinden op ftp://coombs.anu.edu.au/pub/net/ip-filter/ip-fil3.4.9.tar.gz (maar alleen als je de Solaris compiler hebt!!!)
Op Irix 6.5 ontbreekt TCPWrappers eveneens. Het is als package beschikbaar op http://freeware.sgi.com/index-by-alpha.html Voor packet filtering is er ipfilterd. Deze wordt meegeleverd met Irix, maar niet standaard geïnstalleerd.
Ten slotte, tenzij je een werkende vsnprintf() weet te vinden, zul je niet in staat zijn porsentry te installeren op NeXTSTEP... en ik heb er geen gevonden!
Echter, weer eens, je zou portsentry moeten configureren voordat je het installeerd. Wel, het is aan jou, maar het is beter om de filosofie te gebrijpen voor je iets anders doet... maar dat is slechts een mening!

 

Hoe werkt portsentry?

Goed, dank je!
Serieus, portsentry is afhankelijk van configuratie bestanden. De belangrijkste is het portsentry.conf bestand. Dit is waar je portsentry verteld hoe te reageren op tegenspoed.
Alvorens dat bestand te bewerken, zou je moeten weten wat de verschillende operatie modi zijn en wat ze doen
Portsentry kan 6 verschillende modi gebruiken, afhankelijk van de optie die je meegeeft bij het starten.
De eerste is "-tcp" en dit is de 'basic' mode. Met deze optie kan hij zich binden aan de TCP poorten gevonden in de config file in de "port configuration" sectie. Hij kan zich binden aan maximaal 64 poorten.
- De tweede is "-udp" en doet hetzelfde als de vorige, maar dan voor UDP poorten.
- De derde is "-stcp", waarbij de staat voor stealth. Deze optie en de volgende zijn alleen beschikbaar voor Linux. Met de "-stcp"optie gebruikt portsentry een socket om inkomende pakketten te monitoren, wat wil zeggen dat de poorten niet zijn gebonden aan iets.
- De vierde is "-sudp" en dat doet hetzelfde als de vorige, maar dan voor UDP.
- De vijfde en de zesde zijn "-atcp" en "-audp". Deze zijn de meest effectieve opties (a staat voor advanced). Met deze opties maakt portsentry een lijst aan van luisterende poorten en blokkkeert iedere host die probeert naar deze poorten te connecten, tenzij de host is opgenomen in het portsentry.ignore bestand.
Dit alles wordt veel beter uitgelegd in de README bestanden die meekomen met portsentry. Aansluitend, we zullen niet proberen het wiel opnieuw uit te vinden, en proberen de documentatie te herschrijven. Deze README bestanden zijn verplichte leeskost (zoals gewoonlijk, laten we een beetje streng zijn!).

Hoe reageert portsentry ?

Vanzelfsprekend kan portsentry logs genereren. Als jij van het soort sysadmin bent die de logs niet lezen (schaam je!), kun je logcheck gebruiken in combinatie met portsentry. Op die manier kan porsentry mail sturen over inbraakpogingen.
Het kan de doelhost opnemen in het /etc/hosts.deny bestand, voor gebruik met TCPWrappers.
De local host is in staat om netwerk verkeer te routen naar een dode host.
Ten slotte, de local host kan de pakketten droppen door de packet filtering local tool.
Nu je iets weet over de filosofie van portsentry, kun je een begin maken met het schrijven van je portsentry.conf bestand.
- De eerste sectie van het config bestand gaat over de poorten. Daar kun je poorten kiezen om te binden. Houdt in gedachten dat wordt genegeerd als de advanced modes voor Linux worden gebruikt. Wees voorzichtig met welke poorten je bindt (bindt poort 6000 niet als je X gebruikt, bijvoorbeeld).
- De volgende sectie is voor geavanceerde detectie opties. Default is om iedere poort onder 1024 te monitoren, zowel voor TCP als UDP. Hier kun je ook de poorten aangeven die moeten worden genegeerd. Dit is belangrijk om valse alarms te voorkomen, en dus ook omvangrijke logging, in het byzonder als je Windos machines in je netwerk hebt. Bijvoorbeeld, denk aan poort 111 als portmap wordt gebruikt, en de hosts niet zijn opgenomen in portsentry.ignore. Natuurlijk, dit zou gek zijn, daar portmap RPC services als NFS betekend, maar je bent gewaarschuwd. Dat is, NFS is niet zo veilig op Unix machines, dus praten we maar niet over Windos machines.
Hier komt het gebruikelijke off-topic gedeelte: als ik type "Windos"; is het geen Typo: het is gewoon om te staan op feit dat Windows een desktop omgeving bovenop DOS (D van Dirty?) is... en het is een karakter minder om te typen (hoe lui ik ben!). Sorry voor het afdwalen.
- Het configuratie bestanden gedeelte gaat over bestanden, gebruikt door portsentry voor geschiedenis doelen of om te definiëren hoe lang hosts genegeerd moeten worden. Als je een default install doorloopt, verander dit niet.
- In het miscellaneous config gedeelte kunnen DNS lookups worden in- en uitschakeld.
- Het response options deel vormt het hart van de configuratie. Hier wordt ingesteld hoe portsentry zal reageren.
Ten eerste zijn er de de "ignore" (negeer) opties. Je kunt ervoor kiezen om scans te blokkeren, ze niet te blokkeren of een extern commando uit te voeren.
Hierna, in de sectie "dropping routes", vertel je portsentry hoe de route moet worden gedropt, of hoe er gebruik kan worden gemaakt van de packet filtering tool die gebruikt wordt op jouw machine. Er zijn veel voorbeelden voor vele platformen. Selecteer er een (slechts een!) die voldoet aan jouw eisen.
- De sectie "TCPWrappers" geeft aan of je in het /etc/hosts.deny bestand wilt schrijven.
- In het external commands deel kun je een commando definiëren, wat moet worden uitgevoerd als een host een verbinding maakt.
- In de sectie "scan trigger value" definieer je de reactie tijd. De standaard waarde (0) is het meest direct daar het een alarm af laat gaan bij de eerste poging een verbinding tot stand te brengen.
- Het laatste deel is om een boodschap weer te geven in geval van een inbraak poging. Deze werkt niet met stealth modes.
Als je dit deel gehad hebt, ben je bijna klaar. Om valse alarmen en enorme log files te voorkomen, controleer het portsentry.ignore bestand. Hier kun je de adressen en netwerk bits van je lokale netwerk inzetten, of de IP adressen van een paar vertrouwde machines.
Dat is het! Nu kun je "make jouwsysteem" en "make install" draaien. Het install script doet het verder werk en beperkt de permissies van de directory en de bestanden. Nu kan Portsentry draaien met de opties van jouw keus. Controleer de logs om te zien wat er gebeurt. Als alles goed is gegaan, is portsentry gestart en is de host security gehard.

 

Wat gebeurt er dan?

Met behulp van tools als nmap, kun je een poortscan simuleren van nieuw geharde beveiligde host. (meer over nmap hier). Dit is het antwoord dat je kunt krijgen:

portsentry is     actief op de gescande host

Dat wil zeggen, deze machine geeft niet veel informatie aan de cracker!
Normaal gesproken, zou deze poging je hebben verteld welke OS versie en welke poorten open staan op de gescande host. Dit soort informatie is zeer bruikbaar voor een cracker, daar hij weet waar en hoe aan te vallen. Met portsentry draaiend met een scan trigger waarde van 0 in advanced mode, werkt het blokkeren onmiddelijk. Draaiend met een waarde van 1 in normale mode had de aanvaller een lijst van open poorten en vermoedelijk het OS type draaiend op de machine opgeleverd. Maar dan, een poging tot verbinden met een bekende open poort zou falen. Portsentry heeft de poort geblokkeerd na de eerste poging. Simpel doch effectief!
Dat wil zeggen, als je alleen TCPWrappers gebruikt is het IP adres van de aanvaller weggeschreven in /etc/hosts.deny. Als je hebt besloten om de route te droppen en te laten verwijzen naar een dode host, is porsentry nog steeds efficiënt maar stopt UDP aanvallen niet volledig.
Als je gebruik maakt van een packet filtering tool, dropt de aangevallen host de pakketten die komen van de aanvaller met behulp van deze tool.
Uiteraard is dit de beste manier om volledig te profitren van de volle kracht van Porsentry.
Nogmaals, de advanced mode voor Linux is de ideale. Dit betekend niet dat portsentry het niet goed doet op andere OS'en, het "presteert" gewoon iets minder goed, niet echt!
Voor beter begrip, check de logs na verschillende inbraak pogingen op verschillende OS'en met portsentry draaiend in verschillende modi. Dat zegt genoeg!
Te oordelen naar de verschillende gebruikte modi, zullen de logs enkele valse alarms bevatten. Om de kwaliteit van de informatie te verbeteren zul je moeten werken aan het config bestand. Na een beetje testen zou je precies moeten krijgen wat je wilt.

 

Kun je leven zonder portsentry ?

Zeker NIET! Er zijn vele IDS'en, al dan niet vrij. Een van de bekenste is snort, beschikbaar op http://www.snort.org.
Gewoonlijk zijn IDS'es passief. Dat is, ze worden gebruikt om te informeren over inbraken. Dat is waarvoor ze gemaakt zijn. Snort bijvoorbeeld, is heel geraffineerd, daar hij afhankelijk is van scripts met voorschriften, en je dus toestaat je eigen te schrijfen. Trouwens, als je niet bang bent voor enorme logs, is het mogelijk portsentry en snort samen op een machine te draaien. Dat is nog niet eens zo gek!
Echter, de kracht van portsentry is dat het een actieve IDS is. De manier van reageren is werkelijk adembenemend. In combinatie met een packet filtering tool, is het het aan te raden pakket. We zouden kunnen vragen: is portsentry de aanvulling van het packet filter, of is het packet filter de aanvulling op portsentry?
Nou ja, er is nog veel meer dat we zouden kunnen vertellen over portsentry. Zo moet je bijvoorbeeld heel voorzichtig zijn met 'advanced mode UDP scan detection'. Lees de documentatie (weer!) om de problemen met relatie tot UDP te begrijpen. Ook Solaris kan problemen opleveren, daar het zeer hoge poorten gebruikt in de 32700 range (zowel TCP als UDP). Echter, dit artikel is slechts een bespreking en zeker geen compleet overzicht van dit zeer goede stukje software.
De beveiling van computers is een zorg, en zeker niet alleen voor de sysadmin. de ongelofelijke groei van het Internet maakt de dingen alleen maar erger. De Free software community levert ons goede tools: portsentry is er een van. Laat ze niet links liggen! Maar, onthoud, deze tools verminderen alleen het risisco en leveren zeker geen 100% veilig systeem op. Dit is een andere reden om het gebied van beveilings tools te onderzoeken.
Ten slotte, de mensen van Psionic werken ook aan een commerciëel produkt en weten alvast te vertellen dat "we niet teleurgesteld zullen worden". Afwachten dus!
In de tussentijd, ga heen en zorg dat je portsentry 1.1 krijgt, het is zeker de moeite waard. De mensen van Psionic leveren goed werk. Tussen haakjes, hostsentry is ook de moeite waard om getest te worden... en te gebruiken.
Wat leven we toch in een mooie tijd, nietwaar?

 

Referenties

De volgende websites zijn absolute referenties voor wat betreft beveiliging. Verder kunnen ze je wijzen op meer websites, welke je ook weer wijzen op meer websites... Ken je ze, de Russische poppen? Het enige probleem is dat als je alles wilt lezen, je zult ondervinden dat het leven niet lang genoeg is!!!
http://www.linuxsecurity.com
http://www.sans.org
http://www.infosyssec.org
http://www.securityfocus.com
http://www.cs.purdue.edu/coast/hotlist/

 

Talkback voor dit artikel

Elk artikel heeft zijn eigen talkback pagina. Daar kan je commentaar geven of commentaar van anderen lezen:
 talkback pagina 

<--, Terug naar de titelpagina van dit nummer

Site onderhouden door het LinuxFocus editors team
© Georges Tarbouriech, FDL
LinuxFocus.org
Vertaling info:
en --> -- : Georges Tarbouriech <georges.t/at/linuxfocus.org>
en --> nl: Guus Snijders <ghs/at/linuxfocus.org>

2004-03-03, generated by lfparser version 2.43