Archief voor de '3-err 'categorie

Worden gevirtualiseerde systemen Meer of minder veilig?

18 mei 2010

Ik heb de bovenstaande vraag vaak genoeg dat ik voelde dat waardig van een blog post. Terwijl een paar jaar terug het antwoord kan zijn "minder veilig", vandaag is het antwoord "beide". Ik weet het, klinkt als Chris zijn vrijblijvend, maar dat antwoord wel degelijk het meest nauwkeurig beschrijft de huidige stand van de technologie.

Virtualisatie verandert alles

Ik heb gehoord dat een paar mensen opmerking dat virtualisatie is over de industrie invloed op de dezelfde manier als de Internet deed in de jaren 90. Om eerlijk te zijn, ik denk dat er verdienste in dat advies. In de vroege jaren '90 de meeste mensen liepen IPX, AppleTalk, NetBUI en een overvloed aan andere protocollen op gesloten netwerken. Tegen het einde van de jaren 90, werden de meeste mensen actief IP uitsluitend met connectiviteit naar de hele wereld. De manier waarop we zaken deden, evenals de manier waarop we beveiligingsmaatregelen, compleet veranderd over die 10 jaar. Zowel netwerkbeheer en security vaardigheden die rand waren zagen in 1990 waren allemaal maar nutteloos in 1999.

Virtualisatie begint oprit tot aan het dezelfde impact op de industrie hebben. Implementatie van virtualisatie vereist een volledige heroverweging van hoe de veiligheid toe te passen. Terug in de jaren 1990, kreeg admins die gewoon aangesloten op het internet, zonder rekening te houden met hoe dit zou hun netwerk impact, verbrand big time. We staan ​​in de rij om een ​​vergelijkbaar resultaat te zien als mensen vast te stellen virtualisatie.

Wat maakt virtualisatie minder veilig

De achilleshiel van virtualisatie is in de software zelf. We hopen dat we de software te gast systemen weg te houden van elkaar, evenals de gastheer en / of de hypervisor vertrouwen. Er zijn twee grote problemen met deze verwachting:

  1. U hoeft geen software is bug vrij
  2. Software kan worden verkeerd geconfigureerd

Een paar jaar terug Core Uit onderzoek bleek ze konden doorbreken van een gast en volledige controle van de host-OS . Terwijl een hypervisor wordt verondersteld dat type van blootstelling te beperken, hebben we zeker gezien de gevallen waar zelfs de hypervisor is overgeslagen . We hebben zelfs gevallen gezien zijn software wordt misbruikt pas wanneer deze wordt uitgevoerd in een gevirtualiseerde omgeving . Deze links tonen een kleine dwarsdoorsnede van de virtualisatie problemen die zijn ontdekt in de afgelopen jaren. Google kan u een meer complete lijst als je geïnteresseerd bent.

Dus een voorzichtige security professional gaat voorzichtig van blindelings te vertrouwen software te beveiligen. Het probleem is dat verkopers niet altijd nemen deze dezelfde aanpak. Neem VMware met hun ESX (binnenkort ESXi) product als een voorbeeld. Velen van ons waren verbijsterd toen een vertegenwoordiger van VMware aangekondigd op CanSecWest dat het theoretisch onmogelijk om de ESX hypervisor te vallen . Wanneer we gewoon aannemen wat onbreekbaar is, is iemand die meer creatief gaan bedenken een manier om door middel van punch .

Een van mijn grootste zorgen met ESX / ESXi is dat VMware heeft ontworpen om te worden modulair (via VMSafe ). Aan de positieve kant, betekent dit dat externe leveranciers kunnen producten te creëren om de hypervisor van de functionaliteit en de veiligheid te verbeteren. Aan de andere kant verhoogt dit aanzienlijk de kans op slechte code wordt ingevoerd dat kan in gevaar te brengen.

We hebben gezien een mooi voorbeeld van dit in het verleden. Marcus Ranum schiep de Gauntlet firewall, die op dat moment was een van de meest veilige en kick butt beveiliging apparaten beschikbaar. Toen drie letter agentschappen van de beste security wilde, wendden zij zich tot Gauntlet. Marcus verkocht Gauntlet op Network Associates (later werd het McAfee) die meteen begonnen met het toevoegen van functies. Het duurde niet lang voordat er een gestage reeks kwetsbaarheden werden ontdekt, elk ingeleid door deze nieuwe "features". Vanaf nu is het product verloor zijn veiligheid cred en gleed af van de radar.

Nu is het zeker mogelijk om functies toe te voegen en dingen die veilig te houden. De FreeBSD mensen zijn een uitstekend voorbeeld van hoe correct te doen. Om ervoor te zorgen de beveiliging onderhouden ze een zeer strenge controle proces . Is het perfect? Absoluut niet, maar hun audit proces heeft de lat voor veilige software-implementatie. Met een beetje geluk VMware zal doen lijken, maar ik heb niet gehoord geen buzz over dit het geval is.

Getting Your Head Straight

OK, dus we kunnen niet blind vertrouwen virtualisatie software om aanvallers op afstand te houden. We kunnen echter nog steeds voorzorgsmaatregelen treffen om het minimaliseren van de impact als het ergste zich voordoet. Een van de grootste stappen die u kunt nemen is om zorgvuldig te overwegen welke servers gehost te krijgen, en welke andere gastsystemen zijn toegestaan ​​om te draaien op dezelfde doos. De veiligheidszone concept wordt gebruikt door het netwerk van architecten is net zo hier van toepassing.

Een veiligheidszone is gewoon een verzameling van systemen die dezelfde relatieve mate van risico te delen. Bijvoorbeeld Web, en SMTP-servers zijn meestal allemaal op een DMZ, omdat ze allemaal dezelfde risico van directe aanval. Op het binnenste deel van het netwerk, zijn desktops meestal geplaatst in een andere beveiligingszone dan de servers. Dit komt omdat servers hebben weinig tot geen toegang tot het internet, terwijl desktops worden meestal toegestaan ​​om rechtstreeks te communiceren. Dit plaatst de desktops een hoger risico van een aanval dan de servers.

We kunnen toepassen van deze zelfde logica bij de implementatie van virtualisatie. Een DMZ-server en een interne server mag niet worden gasten op dezelfde hardware (zowel CPU en disk array). Dit kan leiden dat een aanvaller een alternatieve route in ons netwerk te creëren. In plaats van door te geven door middel van een firewall, NIDS, NIPS, etc. apparaten die is ingezet op de draad, kan een aanvaller in staat zijn om toegang tot interne resources te krijgen via de virtualisatie-software. Is het een makkelijke aanval? Niet van wat we tot nu toe hebben gezien. Functionele exploits zijn echter ontdekt, dus waarom onnodige risico als we niet te hebben.

By the way, moeten deze dezelfde veiligheid zone regels worden toegepast op uw gevirtualiseerde netwerk versnelling. Het is bijvoorbeeld een slecht idee om dezelfde fysieke switch te gebruiken om VLAN de DMZ en het interne netwerk. Ik heb een paar klanten te krijgen op die manier vermoord.

Wat maakt Virtualisatie veiliger

Gelukkig, vanuit een security perspectief, virtualisatie is niet allemaal slecht nieuws. In feite zijn er een aantal zeer coole beveiliging praktijken die je kunt toepassen in een gevirtualiseerde omgeving die je gewoon niet kan doen zonder. Dit was een van de redenen waarom we gestart met virtualisatie binnen het Honeynet al in 2000.

Een van de grootste security problemen waar we vandaag de dag is kernel-niveau rootkits . Wat maakt deze stam van malware zo verraderlijk is blijkt effectief het besturingssysteem zelf in malware. Dit maakt detectie van uiterst moeilijk, aangezien alle veiligheidscontroles moet door de kernel. Als de kernel zelf is aangetast, kunnen we niet vertrouwen op de kernel om nauwkeurig verslag beveiligingsinformatie. We eindigen met systeem moet afsluiten, monteert u de schijf op een bekend is dat schoon OS, en het uitvoeren van onze forensische controles vanaf daar. Oh natuurlijk het probleem met dit proces is dat het niet goed doet schaal. Als we tientallen of honderden servers, er is gewoon niet genoeg tijd in een dag om ze te controleren alles goed.

Zoals eerder vermeld, is VMware nu toelaten van derden leveranciers toegang tot de hypervisor API via VMSafe. Dit maakt de toegang tot bevoorrechte status informatie, zoals het geheugen en het netwerkverkeer, op elk van de gast-besturingssystemen. Door de stekker in de hypervisor, een aantal zeer coole beveiligingsopties mogelijk geworden.

Bijvoorbeeld laten we zeggen een gast-OS is aangevallen door een kernel rootkit niveau. Door het analyseren van gast-geheugen, kan de rootkit te detecteren van buiten het virtuele besturingssysteem. Bij het uitvoeren van de controles via de hypervisor, is er veel minder van een kans dat een rootkit kan stealth haar activiteiten en onopgemerkt blijven. Zoals eerder vermeld, is er geen vergelijkbare optie met een niet-gevirtualiseerde systeem.

De API plug creëert ook nieuwe mogelijkheden voor het omgaan met versleutelde verkeer. Bij het begin tot het einde encryptie wordt gebruikt (zoals een VPN), netwerk op basis controles van de applicatielaag zijn gemakkelijk omzeild. Uw enige reële optie was om agent software draaien op het eindpunt, kon zo de veiligheid worden uitgevoerd nadat de decryptie-proces. Natuurlijk is het probleem hier is dat als de agent wordt aangevallen, zijn alle weddenschappen zijn uitgeschakeld. Nogmaals, door de stekker in de hypervisor zijn we in een betere positie om veiliger te controleren deze gegevens.

We zijn net begonnen om nieuwe te zien producten die de VMSafe API stekker leverage . Omdat alle producten zijn relatief nieuw, de jury is nog steeds op hoe effectief ze kunnen zijn. Aanbod loopt het gambiet van de vervanging van host-based firewall en IDS bescherming volledige beleid handhaving. Het zal interessant zijn om te zien hoe dit product niche schudt over het komende jaar.

Overzicht

Dus als ik al zei aan het begin van deze post, virtualisatie heeft de mogelijkheid om uw omgeving meer of minder veilig is, afhankelijk van hoe u implementeren. Als je gewoon begint te lopen alles op een enkele box, bent u waarschijnlijk gaat krijgen vermoord. Als u uitbreiden van de best practices die in de loop der jaren ontwikkeld tot de virtualisatie rijk, maar ook als hefboom een ​​aantal van de nieuwe beveiligingsfuncties die worden vrijgegeven, kunt u daadwerkelijk zorgen voor een betere algemene veiligheid houding.

De combinatie van logwatch en OSSEC - Deel 4

18 februari 2010

In mijn laatste bericht installeerden we logwatch als OSSEC. Het is nu tijd om logwatch en OSSEC samen spelen in dezelfde zandbak. In deze post zal ik bespreken hoe om te logwatch naar de informatie die wordt gegenereerd door OSSEC samen te vatten.

Deployment Options

We hebben twee paden die we kunnen volgen om dit op te zetten:

  1. Hebben logwatch direct ontleden de OSSEC logs.
  2. Hebben OSSEC haar waarschuwingen worden verzonden naar een Syslog-server typen, ren dan logwatch op de Syslog-server.

Het voordeel voor optie # 1 is dat we slechts een systeem nodig hebben. Logwatch zal worden uitgevoerd op het systeem als gastheer van de OSSEC server. Het probleem dat we gaan tegenkomen maar heeft betrekking op de OSSEC alert bestand. Logboekvermeldingen niet krijgen genormaliseerd. Dit betekent dat het formaat kan je veranderen van de toegang tot entry, en kan zelfs verspreid over meerdere regels. Het wordt een echte nachtmerrie voor een logwatch script dat zal filteren en een overzicht van de alert informatie te creëren.

Als we met optie # 2, zullen we nodig hebben nog een box op te treden als onze centrale logging server. Met het oog op de OSSEC server log Vermelding van niet-agent systemen, heeft het te luisteren op UDP/514. Dit is dezelfde poort die wordt gebruikt door een centrale logging server, en je kunt geen twee applicaties dezelfde poort (behalve met Windows, maar socket toegang is erg rommelig). Aan de positieve kant, verschijnt de melding inzendingen krijgen genormaliseerd als ze worden doorgegeven aan de Syslog-server, zodat het maken van een samenvatting logwatch script zal veel gemakkelijker. Verder logwatch weet nu al over de standaard Syslog-bestanden, dus we hebben minder aanpassingen werk te doen.

Ten slotte heb ik vermeld in een eerder bericht dat OSSEC niet is ontworpen om een ​​SIM-kaart te zijn. Dit komt omdat het niet alles op, alleen de gebeurtenissen die een waarschuwing genereren. Dus we gaan waarschijnlijk naar een centrale server toch wilt, en is het zinvol om te slaan van de informatie die wordt gegenereerd door OSSEC.

Dus als het klinkt alsof ik stuur je naar optie # 2, bent u absoluut correct. Met dat gezegd, ben ik eigenlijk ga optie # 1 te dekken omdat het een veel ingewikkelder.

Omgaan met datum / tijd stempels

Neem een ​​kijkje op de belangrijkste OSSEC logfile en je ziet de volgende strekking:

[Root @ Fubar logs] # tail -3 / var / ossec / logs / ossec.log

2010/02/18 12:32:05 ossec-rootcheck: INFO: Ending rootcheck scannen.

2010/02/18 14:27:06 ossec-syscheckd: INFO: Starten syscheck scannen.

2010/02/18 14:39:21 ossec-syscheckd: INFO: Ending syscheck scannen.

Let op de manier waarop de datum / tijd stempel is opgemaakt. Dit is anders dan de meeste toepassingen, dus het eerste wat we zullen moeten doen is vertellen logwatch hoe om te gaan met dit formaat. Moeten we een script dat we kunnen bellen wanneer dat nodig is, dat begrijpt het formaat hierboven te creëren.

Begin met het verhuizen naar de gedeelde scripts directory:

cd / usr / share / logwatch / scripts / shared

Gebruik uw favoriete editor, maak een bestand met de naam "applylongdate":

vi applylongdate

Hier is wat je nodig hebt binnenkant van dat bestand. Voel je vrij om te kopiëren / plakken van deze pagina:

gebruik logwatch ': data ";

my $ Debug = $ ENV {'LOGWATCH_DEBUG'} | | 0;

$ SearchDate = TimeFilter ('% Y /% m /% d% H:% M:% S');

if ($ Debug> 5) {

afdrukken STDERR "DEBUG: Inside ApplyLongDate ... \ n";

afdrukken STDERR "DEBUG: Op zoek naar:". $ SearchDate. "\ N";

}

while (defined ($ ThisLine = <STDIN>)) {

if ($ ThisLine = ~ m / ^ $ SearchDate / o) {

print $ ThisLine = ~ s / ^ .... \ / .. \ / .. ..:..:.. / /;

print $ ThisLine;

}

}

# Vi: shiftwidth = 3 syntax = perl tabstop = 3 et

Zodra u het bestand opslaat, we moeten nu de juiste machtigingen in te stellen:

chmod 755 applylongdate

Configureren The Log Files

Vervolgens moeten we logwatch vertellen waar de OSSEC log bestanden zich bevinden. Keer dat je nieuwe log bestanden of creëren van nieuwe services te monitoren in logwatch, moet u uw wijzigingen onder de / etc / logwatch directory. We gaan twee configuratie bestanden te maken. De eerste behandelt OSSEC boodschappen, en de tweede zal behandelen OSSEC waarschuwingen en actieve respons veranderingen.

Laten we beginnen met het maken van het configuratiebestand voor de belangrijkste OSSEC logbestand:

cd / etc / logwatch / conf / logfiles

vi ossec.conf

De inhoud van het bestand moet worden als volgt:

Logboek = / var / ossec / logs / ossec.log

* ApplyLongDate =

U kunt nu te slaan en het bestand. Vervolgens maken we het configuratiebestand voor de overige logbestanden:

vi ossec-alert.conf

De inhoud van dit bestand moet worden als volgt:

Logboek = / var / ossec / logs / actief-responses.log

Logboek = / var / ossec / logs / alerts / alerts.log

Logboek = / var / ossec / logs / firewall / firewall.log

Eenmaal voltooid, op te slaan en af ​​te sluiten. De standaard permissies moet aanvaardbaar zijn voor onze setup.

Configureren van OSSEC Services

Vervolgens moeten we de OSSEC diensten te definiëren en wat we willen gebruiken als een titel wanneer rapporten worden gegenereerd identificeren. Hier is hoe u het eerste bestand:

cd / etc / logwatch / conf / services

vi ossec.conf

De inhoud van dit bestand is vrij simpel:

Title = "OSSEC Berichten"

Logboek = ossec

Eenmaal voltooid, kunt u opslaan en af ​​te sluiten. We moeten nog een bestand aan te maken in deze directory:

vi ossec-alert.conf

De inhoud van dit bestand moet zijn:

Title = "OSSEC Alerts"

Logboek = ossec-alert

Eenmaal voltooid, op te slaan en af ​​te sluiten zoals gebruikelijk.

Ontleden van de inzendingen

Vervolgens moeten we logwatch vertellen hoe de logboekvermeldingen format in het rapport. We zullen een maatwerk script voor elke set van diensten te creëren. We gaan starten met een logwatch meegeleverde testscript, gewoon om er zeker alles werkt te maken.

Begin met het verplaatsen naar de juiste directory:

cd / etc / logwatch / scripts / services

Gebruik je favoriete editor om uw eerste script te maken:

vi ossec

De inhoud van het script moet worden als volgt:

#! / Bin / bash

# Dit is zo mooi script dat zal u tonen de regels die u zult

# Te verwerken en rapporteren over. Het zal eerst geeft de

# Standaard omgevingsvariabelen en dan duurt het STDIN en

# Dump het goed terug naar STDOUT.

# Dit zijn de standaard omgevingsvariabelen. U kunt definiëren

# Meer in uw dienst config-bestand (zie boven).

echo "Date Range: $ LOGWATCH_DATE_RANGE"

echo "Detail Level: $ LOGWATCH_DETAIL_LEVEL"

echo "Temp Dir: $ LOGWATCH_TEMP_DIR"

echo "Debug Level: $ LOGWATCH_DEBUG"

# Neem nu STDIN en dump het naar STDOUT

kat

Maak nu uw tweede script:

vi ossec-alert

en omvatten de exact dezelfde inhoud:

#! / Bin / bash

# Dit is zo mooi script dat zal u tonen de regels die u zult

# Te verwerken en rapporteren over. Het zal eerst geeft de

# Standaard omgevingsvariabelen en dan duurt het STDIN en

# Dump het goed terug naar STDOUT.

# Dit zijn de standaard omgevingsvariabelen. U kunt definiëren

# Meer in uw dienst config-bestand (zie boven).

echo "Date Range: $ LOGWATCH_DATE_RANGE"

echo "Detail Level: $ LOGWATCH_DETAIL_LEVEL"

echo "Temp Dir: $ LOGWATCH_TEMP_DIR"

echo "Debug Level: $ LOGWATCH_DEBUG"

# Neem nu STDIN en dump het naar STDOUT

kat

Tot slot moeten we de juiste machtigingen in te stellen:

chmod 755 ossec *

De installatie testen

De eenvoudigste manier om onze nieuwe setup te testen is het uitvoeren van de opdracht:

logwatch | less

Als u alleen uw wijzigingen wilt zien, kunt u een verslag uit over elke dienst, een voor een:

logwatch-service ossec | less

logwatch-service ossec-alert | less

Verdere Customization

Zodra je al het bovenstaande werkend te krijgen, kunt u zich concentreren op het verkrijgen van logwatch te filteren en samen te vatten van de logboekvermeldingen. Logwatch is vrij flexibel, en je kunt de output aanpassen op elke gewenste manier. Een van de leuke dingen over de bovenstaande test script is vooral dat het laat zien u precies wat u moet werken. Dus met een beetje regular expression magie kun je samenvatten van de vermeldingen als u dat nodig acht. Voor een aantal ideeën, check out de bestanden zich onder:

/ Usr / share / logwatch / scripts / services

Dit zijn de standaard samenvatting van scripts die bij logwatch. In het bijzonder, hebben een blik op de bestanden "PAM" en "sshd". Ze zijn goede voorbeelden van zowel een eenvoudige en een complexe set van samenvatting filters.

Als je de ontwikkeling van uw scripts, bijzondere aandacht schenken aan de $ LOGWATCH_DETAIL_LEVEL "variabele. Dit zal u toelaten om het uitgangsniveau van het rapport afhankelijk van hoeveel breedsprakigheid van de gebruiker is op zoek naar aan te passen. Bijvoorbeeld, terwijl u nog steeds in de bovenstaande diensten directory, voer het volgende commando:

minder sshd

Als de eerste pagina van de inhoud van het bestand wordt weergegeven, typt u in:

/ Detail <Voer key>

De backslash laat ons het bestand zoeken naar een bepaalde tekststring. In dit geval zijn we op zoek naar het woord "Detail". Zodra u op Enter drukt het zoeken slaat door het bestand tot hij vindt het eerste exemplaar van de tekenreeks. Het zal ook wijzen op de zoekterm. In de eerste wedstrijd zal je merken dat de auteur de variabele "$ Detail" toegewezen aan hetzelfde te zijn als de variabele $ LOGWATCH_DETAIL_LEVEL ". Dit is hen te redden wat typwerk.

Druk nu op de backslash toets te drukken, gevolgd door de Enter-toets. Dit zal springen door het bestand naar de volgende instantie van "Detail". Je moet zien:

if ($ Detail> = 20) {

Gebruikers $ {$ user} {$ Host} {$ Methode} + +;

} Else {

if ($ Host! ~ / $ IgnoreHost /) {

Gebruikers $ {$ user} {$ Host} {"(alle )"}++;

Let op de auteur geeft meer informatie als het detail niveau is ingesteld op 20 (halverwege tussen laag-en medium) of hoger. Blijf springen door het bestand en je ziet andere voorbeelden waar de auteur leveraged deze techniek.

Nu page down aan het einde van het bestand en je ziet deze verklaring:

if (keys% OtherList) {

print "\ n ** Ongeëvenaarde Inzendingen ** \ n";

print "$ _: $ OtherList {$ _} tijd (s) \ n" foreach keys% OtherList;

}

Dit gedeelte is uiterst belangrijk, want het is een laatste catchall. Denk aan een firewall beleid voor een moment. De meesten van ons een definitieve regel die zegt: "Als ik niet specifiek een verkeerspatroon vergunning door, ontkennen". Met andere woorden, als er iets onverwachts gebeurt, dit is hoe ik wil dat je om te gaan.

De bovenstaande verklaring dient hetzelfde doel bij het parseren van het logbestand. Alle vorige "als" statements poging om een ​​bepaalde tekst reeks wedstrijd in de logboekvermelding om naar behoren te formatteren. Dit bericht zegt: "Als u nog niet op elkaar afgestemd en drukte een specifieke log entry yet, print het uit in een hoofdstuk getiteld" ** Ongeëvenaarde Inzendingen ** ". Deze stap is zeer belangrijk, want zonder dat zullen we nooit te zien onverwacht inzendingen. Het is de onverwachte items die waarschijnlijk de belangrijkste en meest interessante.

Exec Samenvatting

Zowel OSSEC en logwatch zijn uitstekende gratis tools. OSSEC blinkt uit in het waarschuwen wanneer een bekende aanvalsvectoren patroon plaatsvindt. Logwatch is een geweldig hulpmiddel voor het samenvatten van een tijd stuk van logs, zodat mensen ook daadwerkelijk zinvol zijn van wat er gebeurt. Door het combineren van de twee tools die u kunt een veel robuuster verdediging in de diepte-houding. Het geheel wordt meer dan de som der delen.

De combinatie van logwatch en OSSEC - Deel 3

17 februari 2010

In mijn laatste twee posten besprak ik logwatch en OSSEC, en hoe ze kunnen benutten om uw veiligheid te vergroten zijn houding. In deze aflevering bespreek ik hoe beide van deze tools te installeren.

Het installeren van logwatch

Logwatch is vrij eenvoudig te installeren. In feite is het standaard geïnstalleerd op een groot aantal Linux-distributies, zodat je misschien al een kopie op uw systeem. Om te controleren, moet u inloggen als root en probeer logwatch met de "-v" schakelaar. Als u ziet:

[Root @ Fubar logwatch] # logwatch-v

Logwatch 7.3.6 (uitgebracht 05/19/07)

Logwatch is geïnstalleerd en je hebt een kopie van de laatste versie. Als u niet beschikt over de nieuwste versie, kunt u het grijpen van de logwatch download pagina .

Er zijn drie smaken logwatch die kunnen worden gedownload; Binaries in RPM-formaat, bron in de RPM-formaat, of bron in een Tar bal. Als uw systeem ondersteunt RPM package management, de binaire RPM is uw beste keuze. Het is eenvoudig te installeren en RPM zal automatisch updaten van de software als er nieuwe versies beschikbaar zijn.

Het installeren van logwatch Van RPM

Voor het installeren van de binaire versie van de RPM, gewoon inloggen als root en ga naar de map waar u het gedownloade RPM-bestand. Voer nu het commando:

rpm-U logwatch-7.3.6-1.noarch.rpm

Vergeet niet dat je kan de TAB-toets te gebruiken om automatisch aan te vullen de bestandsnaam in plaats van te typen in het hele ding.

Het installeren van logwatch van de Bron

Het installeren van de broncode is een beetje meer tijd in beslag. Vergeet niet dat, om de broncode te installeren moet je al een compiler (zoals gcc) op uw systeem geïnstalleerd te hebben. Aanmelden als root en ga naar de map waar u het gedownloade Tar bal. Voor het extraheren van het archief, het commando:

tar xvzf logwatch-7.3.6.tar.gz

U ziet een directory-structuur onder de huidige locatie worden aangemaakt en veel bestanden worden gekopieerd inch We moeten nu verhuizen naar de hoofddirectory dat is gemaakt:

cd logwatch-7.3.6

Om logwatch uit te voeren, zijn er een heleboel mappen die moeten worden gemaakt op uw systeem. Deze zijn gedocumenteerd in de README in de huidige directory. Gelukkig, logwatch bevat een install script dat al het werk voor u kan doen. Helaas, het script heeft de verkeerde rechten zo ingesteld dat deze niet standaard uitgevoerd. Dit is vrij makkelijk om maar vast met het chmod commando:

chmod 500 install_logwatch.sh

Nu kunnen we het script uitvoeren om ons systeem setup:

. / Install_logwatch.sh

Vergeet niet de periode aan het begin van de regel.

Testen logwatch

Voor het testen van uw logwatch setup, het commando:

logwatch | less

U ziet uw terminal scherm leeg te gaan, maar dat is normaal. Je zult uiteindelijk zien een logwatch rapport te krijgen naar het scherm dat je kunt navigeren door het gebruik van de "Page Up" en "Page Down" toetsen. Hoe log het duurt voor het rapport te laten zien op het scherm is afhankelijk van hoe veel log-informatie nodig heeft om verwerkt. Het kan een paar seconden of een paar minuten. Hoe dan ook, het geeft je een kans om vertrouwd te raken met het rapport-formaat.

Het installeren van OSSEC

Zoals ik in mijn laatste post, heb je twee installatie-opties met OSSEC, lokale of client / server. In deze post ga ik focussen op de client / server setup, want het is een beetje ingewikkelder. Als u het uitvoeren van een lokaal te installeren, selecteert u de "lokale" optie tijdens het installatieproces en sla het gedeelte over het opzetten van een beveiligd kanaal tussen de agent en de server.

Begin met de server

OSSEC maakt gebruik van Blowfish-encryptie om de communicatie veilig tussen de client en de server. Blowfish is symmetrische sleutel gebaseerd, zodat aan beide zijden moet weten wat de belangrijkste waarde om te gebruiken om te communiceren. De server is verantwoordelijk voor het genereren van de symmetrische sleutel, dus we moeten de server software eerst installeren. Tijdens de client te installeren zullen wij gevraagd worden om een ​​belangrijke waarde zo duidelijk we zullen moeten die handig hebben van tevoren.

Hier is een tijdsbesparende tip. De sleutel waarde is lang en bijna onmogelijk om te onthouden. De eenvoudigste manier om de belangrijkste waarde te verplaatsen van de server-systeem aan de agent-systeem is het gebruik van SSH. Maak een veilige verbinding met de server OSSEC, en haal de juiste toets (aanwijzingen hieronder). In een tweede terminal venster, maak een SSH-sessie aan het systeem waar u de installatie van de agent. Wanneer de client te installeren die u vraagt ​​om de sleutel waarde, kun je gewoon copy / paste tussen de twee terminals.

Het installeren van de OSSEC Server

De server software is beschikbaar als een Tar bal, dus je kunt een exemplaar van de laatste versie te pakken vanaf de OSSEC download pagina . U moet dan om de inhoud van de Tar bal uit te pakken:

tar xvzf ossec-HIDS-2.3.tar.gz

Vervolgens verplaatsen naar de directory-structuur die u zojuist hebt gemaakt:

cd ossec-HIDS-2.3

OSSEC biedt een install script die u stapsgewijs door het proces van het installeren van de server. Het script, type start:

. / Install.sh

Vergeet niet de periode aan het begin van de opdracht. U wordt nu gevraagd door een aantal installatie opties:

  • Taal - De standaard is Engels. Veranderen als dat nodig is.
  • Bevestiging van de installatie - Druk op Enter als je eenmaal hebt gelezen op het scherm.
  • Installeer type - Type in "server" zonder de aanhalingstekens en druk op Enter.
  • Installeer locatie - Accepteer de standaard.
  • E-mail - standaard is ja, selecteren als u wilt e-mail alerts. Als u Ja selecteert, wordt u gevraagd om een ​​geldig e-mail adres en e-mail server.
  • Integriteitscontrole - Standaard is ja. Selecteer deze optie als u wilt dat het lokale systeem periodiek gecontroleerd op indringers.
  • Root kit detectie - Standaard is ja. Goede optie, aangezien we nodig hebben om een ​​hoog niveau van integriteit te behouden op dit systeem.
  • Actieve reactie - Standaard is ja. Selecteer deze optie als u wenst om te kunnen reageren op gebeurtenissen.
  • Firewall neerzetten - Vergunningen de OSSEC server te verdedigen zichzelf als een directe aanval wordt gedetecteerd.
  • Witte lijst - Dit zal u toelaten om IP-adressen van waaruit mogelijke aanvallen worden genegeerd toe te voegen. Wees voorzichtig met deze optie. Als je geen console toegang tot de OSSEC server, is het misschien verstandig om een ​​IP-adres dat altijd kan krijgen inch Gewoon zorgen voor de bron-IP is een betrouwbaar systeem te identificeren.
  • Enable Syslog - Standaard is ja. Selecteer deze optie als u wilt logs van systeem dat niet kan draaien een OSSEC agent (zoals firewalls, switches, routers, access points, etc.) te verzamelen.
  • Log files worden gecontroleerd - In dit scherm identificeert alle van de lokale logbestanden OSSEC monitor. Het is puur informatie, zodat alles wat je kunt doen is druk op Enter om over heen te stappen. Als u merkt dat een of meerdere log files ontbreken in de lijst, kunt u later toevoegen aan de ossec.conf bestand.

Op dit punt OSSEC zal de toegang van de lokale compiler en installeer alle benodigde bestanden naar het systeem. Eenmaal voltooid, kunt u de OSSEC server starten door het uitvoeren van het commando:

/ Var / ossec / bin / ossec-control start

Het definiëren van OSSEC Agents

We zijn nog niet klaar met de OSSEC server gewoon nog niet. Vervolgens moeten we vooraf bepalen alle systemen die zullen worden uitgevoerd de OSSEC agent (client) software. Dit is uitgevoerd met behulp van de manage_agents commando. Eerst echter moeten we een beetje huiswerk te maken. Maak een lijst van alle systemen die worden uitgevoerd de OSSEC agent software. Voor elk systeem, hebt u een beschrijvende naam als dat systeem het IP-adres.

Nu, voert u de volgende vanaf de opdrachtregel:

/ Var / ossec / bin / manage_agents

Dit zal de Agent Manager hoofdmenu. Druk op "A", gevolgd door de Enter-toets om uw eerste systeem te definiëren. Voer een beschrijvende naam voor het eerste systeem, gevolgd door het IP adres van het systeem. Maak je geen zorgen over de agent-ID-nummer. Gewoon accepteren de standaard en OSSEC zal automatisch toekennen van de volgende beschikbare ID-nummer. Zodra u de informatie die u hebt ingevoerd te bevestigen, keert u terug naar de Agent Manager hoofdmenu. Herhaal het bovenstaande proces voor elk systeem dat wordt het runnen van een OSSEC agent.

Het genereren van sleutels

Zodra u hebt toegevoegd in al uw systemen, is het tijd om encryptiesleutels te genereren. Deze stap is ook uitgevoerd met de manage_agents utility. Als u sloot het gereedschap na de laatste stap gemaakt, nu herstart het.

Druk op de "E" toets gevolgd door Enter om de "Extract toets voor een agent" te kiezen menu-optie. U wordt dan gevraagd naar het ID-nummer van de toets die u wenst te halen. De beschrijvende namen en IP-adressen worden vermeld met elk ID-nummer, dus het moet triviaal om te bepalen welke u wilt. Begin met het systeem dat u van plan om de agent software te installeren op de eerste plaats.

OSSEC Agent op Linux te installeren

Bij het installeren van de agent software op een Linux-of UNIX-client, gebruikt u exact dezelfde Tar bal hebben we gebruikt om de server software te installeren. Rijden op de zelfde installatie script, maar deze keer wanneer u wordt gevraagd voor het type installatie u wilt uitvoeren, type in "agent", gevolgd door de Enter-toets.

De client te installeren heeft veel van dezelfde aanwijzingen als de server te installeren. Gebruik maken van de info hierboven om u te begeleiden door het proces. De vraag die echter zal variëren is dat u wordt gevraagd om het IP-adres van de OSSEC server. Eenmaal voltooid, zal OSSEC toegang tot de lokale compiler en installeert alle benodigde bestanden naar het systeem.

Vervolgens moeten we de Blowfish sleutel te importeren uit de OSSEC server. Hoewel nog steeds over de agent-systeem, het volgende commando:

/ Var / ossec / bin / manage_agents

Toen de agent Manager menu verschijnt, selecteer "ik" aan de Blowfish sleutel te importeren.

Wanneer het volgende bericht verschijnt, moet u handmatig de juiste sleutel Blowfish. Nogmaals, als u SSH rennen om beide systemen op hetzelfde moment, kun je gewoon copy / paste tussen de twee terminals. Zorg ervoor dat de sleutel juiste looks, drukt u op de Enter-toets, en kies vervolgens "y" om te bevestigen dat de sleutel juiste looks. Keert u terug naar de Agent Manager menu. Selecteer "q" om terug te keren naar de opdrachtregel.

Nu hebben we gewoon nodig om de OSSEC-agent te starten. U kunt dit doen door het volgende commando:

/ Var / ossec / bin / ossec-control start

Je moet alle van de OSSEC middel onderdelen starten, gevolgd door een bericht 'Completed'.

OSSEC Agent installeren op Windows

OSSEC is een zelfuitpakkend uitvoerbaar, dat zal u toelaten om de agent software te installeren op een Windows-systeem. Gewoon dubbelklikken op het uitvoerbare bestand om de installatie te starten. U wordt gevraagd in te stemmen met de licentie en welke onderdelen u wilt installeren. Volg gewoon de aanwijzingen tot aan de OSSEC Agent Manager venster.

The OSSEC Agent Manager window will prompt you for the IP address of the OSSEC server. It will also prompt you for the Blowfish key value to use, so extract the appropriate key on the server and enter the value in this field. Make sure you delete the prompt within this field before you paste in the Blowfish key. Otherwise communication with the server may fail.

Next, select “Manage” from the OSSEC Agent Manager menu, followed by “Start OSSEC”. You should now see the “Status:” indicator change to “Running…”.

Testing OSSEC

Once you have the server and agent software installed, started and the appropriate keys configured, it is now time to check our setup. Execute the following command on the OSSEC server:

cd /var/ossec/logs

And check out the ossec.log file:

less ossec.log

Check the log file for any errors. A common error is that OSSEC reports it cannot send e-mail. Make sure the mail server is running and that it is accepting connections. Once you are happy with the server setup, it is now time to check out the agents. Move down to the “alerts” directory:

cd alerts

And check out the alerts.log file:

less alerts.log

Specifically, you are looking for entries similar to the following:

2010 Feb 17 16:09:16 (desktop) 192.168.1.10->ossec

Rule: 501 (level 3) -> 'New ossec agent connected.'

Src IP: (none)

User: (none)

ossec: Agent started: 'test_system->192.168.1.10′.

You should see an entry for every system on which you installed the agent software.

More To Come

Whew! That's more than enough for one post! In my next post I'll get into leveraging Logwatch to parse all of the alert information being generated by OSSEC.

De combinatie van logwatch en OSSEC - Deel 2

February 16th, 2010

In my last post I described how Logwatch could be used to simplify the log review process. In this post we'll look at OSSEC and what it brings to the table.

What Is OSSEC?

OSSEC , short for “Open Source SECurity”, is a host based intrusion detection system (HIDS). In other words, it is designed to detect attacks or policy violations if and when they occur. While it does not have the ability to protect against unknown or 0-Day attacks (that would be host based intrusion prevention), it does include a wide range of tools which can help you identify an intrusion when it occurs, as well as the extent of the damage that has been caused.

Ondersteunde platformen

To take advantage of all of the features OSSEC has to offer, you have to run an agent on the system being protected. OSSEC agents can run on Windows, Mac OS X, Linux, and a wide range of UNIX systems. If you are just interested in the log analysis portion however, an even wider range of systems can be supported. This includes hardware from both Cisco and Juniper. A number of specific products are also supported like Checkpoint firewalls, Symantec Anti-Virus, Snort, Squid, and Arpwatch, just to name a few.

When you install OSSEC you have two configuration options, local or client/server. A local install is used when you need to run everything on a single system. The client/server installation lets you run a distributed environment protecting multiple systems at the same time. While most deployments are client/server based, if you want to give OSSEC a spin you can easily run everything on a single test system using a local install.

Log Analysis

OSSEC includes a Log-based Intrusion Detection System (LIDS). This has the ability to review log files in near real time, while scrutinizing them for known attack patterns. When a log is generated on a protected system, the agent takes care of securely transmitting the log (Blowfish encryption using a pre-shared secret) back to the server. The server then takes care of performing the analysis.

De meeste log analyse tools proces hun regels in een lineaire indeling. Daarmee bedoel ik dat als we 500 regels, regel een is aangevinkt, dan is de regel twee, dan regel drie en ga zo maar door totdat een match is gevonden of bereiken we het einde van de regel in te stellen. OSSEC werkt een beetje anders omdat het implementeert een hieratical structuur aan de regels. Log inzendingen worden eerst geclassificeerd en vervolgens gecontroleerd alleen tegen welke regels geschikt zijn. Het resultaat is dat in plaats van te hoeven aan alle 500 regels proces, de meeste gebeurtenissen krijgen vergeleken met 10 regels of minder. Dit vermindert drastisch de hoeveelheid overhead nodig is om de regel te stellen proces.

Integriteit Controle

OSSEC is voorzien van een tool genaamd Syscheck voor het uitvoeren van bestanden en mappen de integriteit te controleren. Als u werkt met een Windows-agent, kunt u ook specifieke toetsen binnen het Windows-register te worden gecontroleerd ook. File changes can be detected using both MD-5 and SHA-1 hash algorithms. The system is extremely customizable. You can include or exclude single files, or entire directory structures. You can even set a flag to detect new file creation.

The agent software is designed to use a minimal amount of CPU during the integrity check. While this means the check will take longer, it also helps to minimize the performance hit to the system. Hash information is transmitted back to the server. The server then takes care of performing the hash comparison to see if any of the system's critical files have been changed. The server also stores a copy of the integrity check policy, so that if policy changes are made on the agent, they can be detected and reported as well.

Anomaly detection

OSSEC goes far beyond log checking to verify system integrity. Usage policies can be centrally managed from the server, and then pushed out to the appropriate agents. For example you could define a policy regarding which Windows applications are acceptable (Office, Firefox, etc.) and which ones are not (IM client, Skype, etc.). You can even define acceptable configuration options like verifying that NT hashes are being used for password stored but not LanMan hashes.

OSSEC includes a number of other goodies in order to help verify a system's integrity. For example OSSEC has the ability to execute commands from the agent and monitor the output that gets generated. For example you could have the Linux agent execute the “df” command at regular intervals and generate an alert if disk usage exceeds 90%. A Windows example may be to have OSSEC generate an alert whenever file information is written to the alternate data streams area of NTFS.

Active Response

Finally, OSSEC includes the ability to respond when suspicious activity is detected. Responses can be generated from the server or the agent, which ever you specify. Responses can be as benign as generating an e-mail alert, to being as proactive as blocking a remote IP address for a limited amount of time. There are a number of included active response scripts you can draw on, or you can easily write your own.

Secure Architecture

The OSSEC authors have gone to great lengths to secure all of the components within the product. Tasks such as integrity checking are performed on the server, rather than the agent, so the trustworthiness of the hashes cannot be compromised during an attack. Processes are run with the lowest level of permissions possible, and different accounts are used to run each OSSEC component. This means that a compromise of a single application within OSSEC will not immediately lead to a compromise of the full package. Further, most components are run within a chrooted jail so their access to the system is even further restricted.

Final Words

While OSSEC is a powerful tool, it is important to remember that it is a HIDS and not a log management solution. OSSEC can review log entries looking for suspicious patterns, but it will only save alert information. So while OSSEC will not replace your Security Information Management (SIM) solution, it can most certainly augment it. You can easily setup OSSEC to forward all alerts it generates to a central logging server .

While OSSEC is open source software, Trend Micro is primarily developing it. If you need commercial support, you can purchase a support contract through them at a reasonable fee.

More To Come

In my next installment we'll look at installing OSSEC and Logwatch. After that, we'll move into integrating the two together.

De combinatie van logwatch en OSSEC

15 februari 2010

I recently had a student ask me a question regarding the integration of Logwatch with OSSEC. I felt like this was a complex and yet cool enough idea that it warranted a series of posts to cover it in full. So over the next few days I'll talk about each of these tools, how to integrate them together, as well as what additional security visibility can be gained once the process is complete.

What Is Logwatch?

Logwatch is an excellent open source tool for generating daily human readable log reports. Log entries tend to fall into one of three categories:

  • Stuff you know is evil
  • Stuff you know is normal and can be safely ignored
  • Everything else

It is that “everything else” category where Logwatch really shines. For the stuff we know is evil, we will setup some form of alerting system. For example we may write an alert signature that warns the security analyst when an account is being brute forced. But what about the attacks we don't know about or are not sure what they look like? This would be a clear example of that “everything else” category. The traffic is not normal, but we have not seen it before to have a signature waiting to generate an alert. Since we will be unable to catch the attack in real time, we will need to catch it during a daily log review.

Of course the problem with doing daily log reviews is that it is tedious and time consuming. I mean let's be honest, who really wants to spend their day reviewing one million plus log entries? Even if you did, are you sure you would actually catch the out of the ordinary traffic?

Hoe het werkt

What Logwatch does very well is permit you to reorganize your data into a format that is easier for humans to follow. Its real strength is that it permits you to move the stuff you understand out of the way (normal or evil), so that the unexpected log entries stand out like a sore thumb. In other words, Logwatch lets you summarize your log entries so the unusual stuff is easier to spot.

What I really love about Logwatch is that you don't lose anything. Many log review tools will only show you the stuff that has been pre-defined as being evil. The problem they all share is that when something evil but unexpected happens, it flies right under the wire. Because Logwatch lets you see everything, you no longer miss the unexpected.

Logwatch In Action

Lets discuss how Logwatch works using the SSH server service as an example. The scripts to deal with SSH have already been defined within Logwatch, so you do not need to do any tweaking to receive the features we are going to discuss.

When reviewing a log file, the first thing Logwatch does is reorganize log entries based on their message types. For example all Successful SSH logons are grouped together, as well as too many logon failures, refused connections, locked accounts, accounts without a proper shell, protocol mis-matches, etc. etc. etc. Once all the SSH messages are grouped by their type, the data is then summarized to reduce the amount of information being reported.

For example, the default is to summarize failed logon attempts by account and source IP. So a typical failed logon report section might look like this:

Failed logins from these:

bsmith/password from 1.2.3.4: 637 time(s)

jsmith/password from 1.2.3.5: 2 time(s)

So rather than having to review 639 log entries reporting a bad logon attempt, we have all the pertinent information summarized into three lines (if you include the title). Continue this process for all of the other SSH messages, and we have dramatically reduced the amount of time required to review our logs.

But what if something happens that Logwatch is not pre-programmed to recognize? When an unexpected log entry is found, Logwatch adds a section to the end of the service report called “Unmatched Entries”. So if we see this title in the SSH server section, we know some event has occurred that is either abnormal or unexpected for the SSH service. This could very well be some form of attack that we are not aware is making the rounds.

By focusing in on the unmatched entries section, we can quickly identify unexpected activity. As I stated earlier, this is really the main goal of doing daily log reviews. To find the stuff we don't expect which will sneak past our alerting system. Logwatch makes this process as quick and as painless as possible.

Feature Summary

In the above example I talked about doing daily log reviews, but to be honest Logwatch is highly customizable. You can specify any range you wish to use down to an interval of one second. For example let's say I'm investigating an intrusion rather than performing a daily log review. I could specify a range such as “2010/02/14 17:05:00 for that hour” to focus right in on the information that interest me. I can also focus in on one specific log file or service.

The detail level of the report is also customizable. Typically when you deal with security you get in the habit of always wanting the highest detail level of reporting. To be honest, with Logwatch a high level of detail is probably more than you will ever need. Personally I typically stick with “med” for medium and that works out nicely. You can also specify the reporting level as “low” or “high” or use a numeric range of 0-10 for a higher level of granularity (low =0, med=5, high=10).

Logwatch can be run automatically or as a manual process. Typically you will want to set it up to run automatically each day and summarize one day's worth of log entries. If you ever need to expand or focus the report, you can always run Logwatch from the command line while specifying exactly what you want to see. You can then use the “–save” option to specify a report name and directory location for storage.

More To Come

The above should give you a good idea as to the features Logwatch can bring to the table. In the next post I'll discuss OSSEC in the same level of detail. After that, I'll get into how to install each tool as well as how to integrate them together.

Dag 2 Keynote

12 januari 2010

Thanks to all who came out to the Encryption/DLP summit. Here are the slides from my keynote on day 2.

encryption-dlp-keynote

ICMPv6 Challenge – Answers

13 december 2009

The challenge was: “Write a tcpdump/windump filter that will capture ICMPv6 Multicast Listener packets.” I have an extensive write up on what makes the answer so complex. If you know IPv6 and just want the answer, skip to the end.

First, Some Background

Steinar made some comments to the previous posts and was 100% on track. If you read them and thought “Wow, that sounds really messy”, you understand the scope of the problem as well. :)

Protocol Vs. Next Header Field

With IPv4 we had the options field. This could cause the IP header to grow from 20 bytes to as large as 60 bytes in size. With IPv6, there is no longer an options field and the header is fixed at 40 bytes in size. When options are required, we use extension headers to identify them. This throws an interesting curve ball at us because with IPv4 the protocol field (byte 9) would (almost) always identify the upper level transport (TCP, UDP, etc.). With IPv6 the next header field (byte 6) might identify the upper layer transport, or it might identify an extension header which will include some number of options.

Here's a list of some IPv6 extension headers you might run into, as well as the RFCs that define them:

Option # Option Description RFC
0 Hop-by-Hop 2460
6 TCP 793
17 UDP 768
43 Routing 5095
44 Fragmentatie 2460
50 ESP 4303
51 AH 4302
58 ICMPv6 4443
59 No next header 2460
60 Destination options 2460
135 Mobiliteit 3775

IPv6 does not limit the number of extension headers you can use in a single packet.There is however a published “recommended order” as to how the headers should be laid out. The order is:

  • IPv6 Header
  • Hop-by-Hop Options
  • Routing Header
  • Fragment Header
  • AH
  • ESP
  • Destination Options
  • Mobility Header
  • TCP/UDP/ICMPv6

Note this list is “recommended” but not mandatory. An IPv6 host must be able to process the headers in what ever order they were received. This means you will probably find vendors following this list but not attackers. I've personally seen devices start acting really odd when you mess with the header order. In fact I've run across quite a bit of “IPv6 compatible code” which can't deal if the preferred order is not used.

Chasing The Protocol Header

So with IPv6 we can have multiple headers behind the IPv6 header. If this sounds like a new concept, it is actually not. In fact you've probably worked with it already. When you deploy IPSec the two possible security protocols are ESP and AH. These were actually borrowed from IPv6 and massaged to work on IPv4. Both AH and ESP include a next header field to identify what type of packet they are protecting.This is referred to as protocol chaining , as you effectively have multiple headers sitting behind the layer 3 protocol header.

So to figure out what upper level transport (TCP, UDP, etc.) is being used, you may have to search through multiple headers before you find the answer. This is referred to as “ chasing the header “, and tcpdump/Windump give us a filter option to perform this task. You may be fimiliar with the proto filter. In the IPv4 world, if I say:

ip proto tcp

That filter reads “check byte 9 of the IPv4 header and if the value is equal to 6 (protocol value for TCP), match on the packet”. This filter is not as effective in the IPv6 world of course because byte 6 of the IPv6 header might identify the upper layer transport, or it might just identify an optional extension header that is being used. To solve this problem, the protochain filter was introduced. Writing:

ip6 protochain tcp

Reads as “Check byte 6 of the IPv6 header to see if the value is equal to 6. If instead you find a value which identifies an optional extension header, check the extension header's next header field for a value of 6. If you find more optional extension headers, keep repeating the last test till you find the last extension header”.

Pretty simple to write in English, but this is a nightmare to implement in code. Most optional extension headers are variable in length which just adds to the complexity. I've done some testing with Scapy and you can actually see the difference in performance when protochain gets invoked. In fact you could probably do a pretty good job of DoSing an IDS/IPS by forcing it to process a lot of useless extension headers.

Writing our filter

So our first problem in writing the challenge filter is that the ICMPv6 header may not appear right after the IPv6 header. We have to watch out for optional extension headers. In fact RFC 2710 states: “All MLD messages described in this document are sent with a link-local IPv6 Source Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option [RTR-ALERT] in a Hop-by-Hop Options header.” This means our multicast listener packet is required to have a Hop-by-Hop extension header with the Router Alert option set. With this in mind, our first check should be:

ip6 protochain icmp6

To ensure we are only looking at ICMPv6 packets. Now it is just a matter of checking to see if the type field (byte 0) is set to 130 (Multicast Listener Query) or 131 (Multicast Listener Report).This brings us to our second problem however. In the IPv4 world I can do a:

icmp[0]= <type value of interest>

If I try this with icmp6 I get:

[root@fubar ~]# tcpdump -nn icmp6[0]=130
tcpdump: IPv6 upper-layer protocol is not supported by proto[x]

In other words, I can't use offsets with icmp6 to search for specific values. Windump and tcpdump are advertised as IPv6 compatible, but don't expect to get all the same functionality you have with IPv4. YUCK!

So what do we do? We'll have to fall back on referencing the value from an ip6 offset. In other words, we'll have to measure through the IPv6 header, through the required Hop-by-Hop header, and into the ICMPv6 header to see if the type field is set to 130 or 131. Some things to take into consideration:

  • IPv6 header is fixed at 40 bytes in size
  • Hop-by-Hop header is variable, but 4 bytes with Router Alert set
  • The type field is byte 0 within the ICMPv6 header

So here is what we end up with:

ip6 protochain icmp6 and (ip6[44]=130 or ip6[44]=131)

Whew! We finally got it! Or did we?

Q: What happens if the packet has additional extension headers?

A: Our filter will not work.

Q: What if the Hop-by-Hop header has more options set than Router Alert?

A: Our filter will not work.

Q: Can we fix the above two problems?

A: Not till tcpdump/Windump filtering adds IF/THEN loop support.

So if we want to capture normal ML traffic, the above filter will work fine. If however we want to insure we catch attacker trickiness as well, the filter is not going to fly.

What if we try something like this:

tcpdump -nn -s 1500 -x ip6 protochain icmp6 | grep -i multicast > multicast.txt

and then just use Wireshark's text2cap tool to convert it to Libpcap format? The problem here is we will only get the header info. Grep will match the summary line which contains the word “Multicast” but then skip all the Hex below it which is the actual contents of the packet.

So the final answer is: “Can't get theya from haya” ;)

So what if you really need to be able to see this traffic? Until support for IPv6 matures, the only 100% method is to grab all ICMPv6 traffic and then manually sort through it.

At least that's my view on this. If anyone can actually come up with a 100% working solution, I would love to hear it.

ICMPv6 Challenge – Hints

December 9th, 2009

OK, here's a hint to point you in the right direction.

The challenge was: “Write a tcpdump/windump filter that will capture ICMPv6 Multicast Listener packets.”

Sounds easy, right?

With a little help from Google you'll find that the “type” for Multicast listener is 130, and the ICMPv6 type field is the first byte in the header. So this should be as easy as:

tcpdump -nn -p -v -s 0 icmp6[0]=130

however if you run the command you'll get back:

tcpdump: IPv6 upper-layer protocol is not supported by proto[x]

In other words, you can use “icmp6″ to see all ICMPv6 packets, but you can't use it to filter on any of the ICMPv6 header fields.

So we need a “Plan B”. Figure out plan B and you've solved the challenge. :)

ICMPv6 Challenge

04 december 2009

Building on the IPv6 challenge from last time, I have a new one for you: Write a tcpdump/windump filter which will capture ICMPv6 Multicast Listener packets.

Dat is het! Pretty easy, right? ;)

Weekend Challenge – Answers

December 3rd, 2009

Well its now Thursday so I figured its time to post the answers to last weekend's challenge. ;)

First, why should you even care about IPv6 if you have not started deploying it? I felt much the same way till I found IPv6 being used as a covert communication channel within a client's network. The data was then being pushed out to the Internet via Teredo. If you are not familiar with the technique, Scott Hogg has some excellent posts on the topic.

So even if you are not currently using IPv6, it pays to start cutting the cure on the technology as well as watching for it on your local network.

So to review, the challenge was:

Write a tcpdump or Windump filter that will capture all traffic with a source IPv6 address of 2001:db8::10 through 2001:db8::20.

There are a couple of caveats with writing this filter. The first few I covered in the last post. The final one, which I knew but never really thought was a problem till I started working with IPv6 pretty heavily, is that tcpdump/Windump will only let you use 1, 2 or 4 byte masks. So while we would love to solve this with an initial filter statement of “ip6[8:14]=”, we can't because we're limited to 4 bytes. There is in fact a way to get around this, but I'll come back to it.

So here's the filter I've been working with:

(ip6[8:4]=0x20010db8 and ip6[12:4]=0 and ip6[16:4]=0 and (ip6[20:4]>=0×0010 and ip6[20:4]<=0050))

Bit long, but it works. Elizabeth came up with a solution that is far more elegant than my own:

src net 2001:db8::/122 and ip6[23] >= 0×10 && ip6[23] <= 0×20

So by starting with the Libpcap format, she's able to combine my first three statements into one. Not to be a size queen, but that makes her solution is much shorter than mine. In this case that's a good thing. :)

Dat is het zo'n beetje. I'll post another IPv6 type challenge tomorrow.