original in en Georges Tarbouriech
en to nl Guus Snijders
Georges is een lange-tijd Unix gebruiker. Hij vindt computer beveiliging
een van de belangrijkste uitdagingen van deze eeuw.
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...).
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!
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!
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!).
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.
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:
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.
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?
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/