Taggat med: pcap

Identifiera cyberintrång med Moloch

Identifiera cyberintrång med Moloch

Uppdatering 2020-11-20: Moloch har nu bytt namn till Arkime. Läs mer om bakgrunden till namnbytet här.

Jag har haft på min todo-lista ända sedan det första släppet av Moloch som var år 2012 att jag ska testa verktyget. Moloch utvecklades innan 2012 internt hos AOL men släppte det sedan fritt för allmänheten. Dock så dröjde ända tills November 2019 innan jag fick bekanta mig mer med verktyget.

Moloch är ett verktyg som låter dig göra indexerade sökningar i stora mängder data. Säg exempelvis att du lagrar många hundra terabyte av PCAP-data och vill hitta vilka datorer på ditt nätverk som pratat med en viss IP-adress. Att göra en sådan sökning i mängder med PCAP:s kan ta otroligt lång tid. Du kan så klart använda Argus-metadata för att snabba upp sökningen men Moloch är mer användarvänligt samt avkodar information om varje protokoll också, som så klart också är sökbart.

Som backend använder Moloch sökmotorn Elasticsearch som är skriven i Java. Även så tillför Moloch ett snyggt webbgränssnitt och ett REST-API.

Förutom själva webb-gränssnittet så finns även mjukvaran moloch-capture med som antingen kan importera PCAP-filer offline eller läsa av data direkt från ett interface.

Du kan även enkelt tagga upp information från andra system såsom Maltrail eller Suricata och sedan se dessa taggar eller söka på taggarna i Moloch via API:et eller verktyget som följer med:

capture/plugins/taggerUpload.pl localhost:9200 ip iptagdata tag tag .. tag
capture/plugins/taggerUpload.pl localhost:9200 host hosttagdata tag ..
capture/plugins/taggerUpload.pl localhost:9200 md5 md5tagdata tag
capture/plugins/taggerUpload.pl localhost:9200 email emailtagdata tag
capture/plugins/taggerUpload.pl localhost:9200 uri uritagdata tag

Det jag gillar mest med Moloch är att den kan avkoda ett antal olika protokoll såsom DNS, SSH, HTTPS, HTTP, DHCP, radius, socks osv.

För att ge ett exempel på en av många Threat Hunting teser du kan köra:

Vilka unika HASSH klient fingerprint SSH finns det och vart ansluter dom?

Så steg ett är att exportera dessa, exempelvis genom att gå på SPI-vyn och sedan Export unique HASSH. Då öppnas en ny länk med följande tre HASSH-fingerprints:

Tre unika HASSH (bilden är maskad)

Sedan klickar jag på Sessions-fliken och kan söka på sessioner med någon av dessa unika HASSH-fingerprints:

Sökning på en unik hassh i Moloch, bilden är maskad.

Om du är observant så ser du även att det finns en flik som heter Hunt. Den kan användas för att göra klartext-sökningar med intervaller, tyvärr inte så användbar om du inte kör TLSI (TLS Inspection).

Du kan även lägga upp något som heter Cron-queries som körs vid intervaller som sedan skickar notifieringar via Slack, E-post eller Twilio.

Sammanfattning Moloch

Verktyget är gratis att använda och stödjer Er verksamhet i att analysera nätverkstrafik. Det är ingen hög inlärningströskel och kan snabba upp arbete som i dagsläget kanske är mindre effektivt.

Moloch kompletterar andra open-source verktyg såsom Zeek och Suricata mycket bra.

Även har Moloch möjlighet att exportera data som PCAP från sessioner, vilket gör det enklare också om du vill analysera en händelse ytterligare med exempelvis Wireshark.

Threat Hunting med Maltrail

Maltrail är en open-source mjukvara för att upptäcka skadlig kod, skriven i programspråket python. Mjukvaran består av en serverdel och en klientdel som kan köras fristående.

Maltrail kan titta på nätverkstrafik och larma om något av följande matchar någon av de medföljande listorna:

  • HTTP Host Headers
  • DNS-uppslag
  • IP-adresser
  • URL
  • User-agent

För att installera Maltrail så klonar du bara hem Git-repot och installerar beroenden såsom python-pcapy. Jag kör dessa tester på en Raspberry Pi och det fungerar fint.

Och när du startar upp Maltrail för första gången så laddas 68 stycken olika publika listor hem med IOCer:

Förutom att sniffa nätverkstrafik direkt mot ett interface så kan köra sensor.py mot en pcap-fil på följande sätt:

$ sudo python sensor.py -i /data/pcap/trace_2018-12-15_14.54.33.pcap

Och vill du se vad som larmar direkt till konsollen kan du starta Maltrail på följande sätt med –console:

sudo python sensor.py -i /data/pcap/trace_2018-12-15_14.54.33.pcap --console

En annan sak som jag noterar är att dessa 68 st listor som laddas hem innehåller hela 1 396 712 st IOC:er.

Det pcap-filter som används som standard är enligt följande:

udp or icmp or (tcp and (tcp[tcpflags] == tcp-syn or port 80 or port 1080 or port 3128 or port 8000 or port 8080 or port 8118))

Vilket den observanta läsaren kan se att HTTPS tcp port 443 exempelvis inte finns med, dock all ICMP och UDP. Som standard kontrollerar inte maltrail http-host headern men detta kan snabbt ändras i maltrail.conf som du bör ta en titt på. Du kan även ändra pcap-filtret i konfigurationsfilen, men då tar analysen givetvis längre tid.

Att analysera en 2.2GB pcap-fil med min Raspberry Pi 3 Model B+ tog cirka 3 minuter. Då hade jag satt USE_HEURISTICS till false samt CHECK_HOST_DOMAINS till true, främst för att USE_HEURISTICS gav så många false-positives.

För den som gillar trevliga webb-gränssnitt så finns det även ett till Maltrail och startas upp med server.py:

Sedan är det bara att surfa till IP-adressen där du har Maltrail installerat och port 8838. Du måste även logga in med användarnamn och lösenord som är satt till admin/changeme! som standard. Går givetvis att ändra i konfigg-filen, och server.py stödjer även SSL/TLS.

Följande bild är en skärmdump på en dag där det identifierats 145 st threats:

Maltrail larm
src_ip och dst_ip är maskerade på bilden ovan

Majoriteten av larmen som dykt upp under mina tester är klassificerade som medium eller low. Och precis som vid Threat Hunting så är det viktigt att följa upp varför just dessa larm uppstår, jag rekommenderar att använda Moloch eller Argus-data för vidare analys. Vid denna vidare analys kan det vara intressant att kolla källan som framgår samt om du har rådata i pcap:ar kvar så bidrar även detta till större framgång.

Ett annat tips är att kolla datakällor såsom Zoomeye, Censys.io och Shodan där dessa IP-nummer eller domäner kan identifieras.

Så blir du en ninja på nätverksforensik

Nätverksforensik

Artikel uppdaterad: 2016-10-20

För att bli en ninjamästare på nätverksforensik så gäller det först och främst att du är bekväm och känner till din uppsättning med verktyg. Jag rekommenderar att du börjar med att testa Linux-disten Security Onion som är har en stor mängd olika verktyg förinstallerade såsom NetworkMiner, Argus, Snort och Bro.

Sen gäller det också att ha tillgång till någon data att experimentera med, och desto råare format desto bättre. Därför gillar vi som jobbar med nätverksforensik formatet pcap (och numera även vidareutvecklingen pcap-ng).

Har du inga egna pcap-filer så kan du alltid skapa upp dessa genom att spara ner nätverkstrafik till/från din egen dator eller hämta hem från Wireshark eller Netresec.

Hitta rätt i nätverkstrafiken

När du väl har tillgång till råmaterial i form av pcap-filer så måste du lista ut hur du ska angripa problemet. Oftast så finns det inte enbart en lösning på problemet utan som forensiker får du prova flera olika innan du eventuellt hittar en lösning.

Mer åren får du troligtvis även mer erfarenhet och kan lösa problem snabbare och navigera rätt snabbare bland nätverkstrafiken.

Frågan vi måste ställa oss är: Vad är syftet? Vad är det vi är ute efter. Är det potentiellt skadlig kod som har passerat eller söker vi efter något annat. Och innan vi börjar så bör vi även veta hur nätverkstopologin ser ut:

  • Är trafikinspelningen innanför eller utanför brandväggen?
  • Är det bakom NAT?
  • Är det egress/ingress eller dubbelriktad trafik
  • capinfos-kommandot som följer med Wireshark ger bra info

Sedan bör ni ha en Standing Operating Procedures (SOP) för hur trafiken ska hanteras. Jag rekommenderar exempelvis att alltid använda Snort och ett relativt uppdaterat regelverk som en av de första kontrollerna.

Lär dig med hjälp av CTF

CTF står för Capture The Flag och är en typ av övning som du själv kan utföra för att lära dig mer samt testa dina färdigheter. Det finns ett antal olika CTF:er som är inriktade på nätverksforensik och du börjar som oftast med att ladda hem en pcap-fil som ska analyseras.

Här har jag listat ett antal CTF:er med inriktning på nätverksforensik:

Om du kör fast med någon av ovan så testa att söka efter CTF:ens namn samt write-up så hittar du troligtvis lösningar.

NinjaUtmaningar inom nätverksforensik

Att titta på nätverket ger oftast enbart en bild som många gånger bör kompletteras med övriga forensiska utredningar av datorer exempelvis. Även kan loggfiler från olika system också komplettera den nätverkforensiska undersökningen.

Jag ser även att mer och mer trafik blir också krypterad och använder sig av TLS (https) vilket gör det svårare att titta vad som går i sessionerna. False-flag är också något som förekommer mer och mer där metoden går ut på att förvilla och lämna falska spår.

Behöver Er organisation hjälp med nätverksforensik? Kontakta Triop AB 

En annan metod att kringgå och försvåra nätverksforensik är domain-fronting. Med denna metod så döljs skadlig trafik i kommunikation mot tjänster såsom CDN (se mitt föredrag från Internetdagarna 2014).

Verktygen du ska lära dig

Wireshark och tshark

Först och främst är Wireshark och dess CLI-version tshark något som jag anser att alla bör behärska. Och hanterar du stora mängder data så är det otroligt viktigt att känna till alla kommandoargument som tshark kan ta.

Exempel på kommando: Följande kommando kan användas för att titta på information om TLS/SSL-certifikatet vid en handskakning:

tshark -r snort.log.1425565272 -R ssl.handshake.certificate -V | grep dNSName:

Även så kan vi titta på SNI-värdet (server name indication) om detta finnes:

tshark -r test.pcap -T fields -e ssl.handshake.extensions_server_name

tcpdump

tcpdump är också ett sådant självklart kommando som följer med nästan alla Linux-distar och kan användas till det mesta. Om inte annat så har verktyget bra prestanda när det gäller att filtrera trafik när du skriver pcap-filter för att förfina sökningen, exempelvis:

tcpdump -r gigantisk-fil.pcap -w mindre-fil.pcap "dst port 31337"

Och behöver du snabbt och enkelt spara ner data så brukar jag köra kommandot nedan. Observera att snaplen -s inte behövs om du har en relativt ny tcpdump-version eftersom nya går standard till 65535 bytes (tidigare 96).

tcpdump -i en2 -s0 -w test.pcap

ngrep

ngrep används precis som det klassiska kommandot grep, dvs att vi söker efter något. Gör ingen direkt tolkning av protokoll såsom tshark/wireshark vilket gör att kommandot kan vara snabbare att arbeta med.

Följande kommando kan användas för att identifiera namn på HTTP-förfrågningar

ngrep -q -W byline -I snort.log.1425565276 Host:|grep -i ^Host

Network Miner

Erik Hjelmvik som utvecklat Network Miner har även utvecklat CapLoader och andra bra verktyg. Följer med Security Onion men en gratisversion kan även laddas hem från Netresec. Lätt och enkelt att arbeta med och är det bästa verktyget för att identifiera filer som går över nätverket.

För cirka 7400kr så får du en bättre version som har ytterligare en mängd funktioner såsom protokollidentifiering med hjälp av statistik, GeoIP, CLI-version.

NetworkMiner

Om du använder dig av Security Onion kan du starta NetworkMiner med kommandot /opt/networkminer/networkminer

tcpflow

NinjaDetta verktyg parar ihop TCP:s fem-tupel och skriver ner dessa strömmar till disk, en ström per fil. Otroligt värdefullt om du vill analysera stora mängder data närmare.

Varje fil får ett namn som relaterar till sessionen i form av IP-adress src/dst samt käll och destinations-porten. Med nollor som prefix, exempelvis:

185.003.051.013.00080-010.101.001.143.63092

Sedan kan vi hantera filen med vanliga verktyg såsom grep, head osv:

$ head -3 185.003.051.013.00080-010.101.001.143.63092
HTTP/1.0 304 Not Modified
Server: Apache-Coyote/1.1
P3P: policyref="/w3c/p3p.xml", CP="NON DSP COR NID CUR ADMa DEVa PSAa PSDa TAIa OUR IND COM CNT DEM INT LOC NAV PRE UNI"

Även så genomförs ingen vidare avkodning, så vi får själv ta hand om gzippat innehåll osv. Men har vi en nyare version och lägger på argumentet -e http (eller -a). Då får vi en till fil men med suffixet -HTTPBODY-002 exempelvis:

185.003.051.013.00080-010.101.001.143.63092-HTTPBODY-002

snort

Snort är en mjukvara för att upptäcka intrång i nätverkstrafik (IDS) men kan även läsa PCAP-filer i efterhand. Och som anti-virus motorer så fungerar en IDS bäst då regelverket är uppdaterat.

När det gäller Snort så finns det tre huvudspår när det gäller regelverk:

  • Emerging Threats
  • Snort – Cisco Talos
  • Snort Community

Jag rekommenderar att använda Snort Cisco Talos, kostar enbart 29$ per år för personligt bruk. Annars testa även Emerging Threats regler som också uppdateras och innehåller 47k regler. Kör kommandot rule-update på Security Onion om du vill uppdatera regelverket med PulledPork:

PulledPork

För att läsa in en pcap-fil och sedan skriva ut larm till mappen ./log/ kör du:

snort -r snort.log.1425565276 -c /etc/nsm/templates/snort/snort.conf --daq pcap --daq-mode read-file -l ./log/

Och om du som jag får många regler som larmar false-positive så kan du alltid lägga till dem i filen /etc/nsm/pulledpork/disablesid.conf

Även så kan Snort logga direkt till console med -A console argumentet.

Givetvis är även Suricata ett alternativ till Snort, och finnes så klart redan installerat i Security Onion.

Snort

argus

Argus (audit record generation and utilization system) är uppdelat i en mängd olika verktyg såsom ra, rasort och racluster. Argus gör det lätt att arbeta med flöden samt övergripande analyser. Och precis som många andra verktyg som jag gått igenom här så kan Argus fungera offline eller direkt online mot nätverkstrafik.

Även så kan argus-filer vara bra vid långtidslagring där bara meta-data behöver sparas från trafiken.

argus -r snort.log.1425565276 -w snort.log.1425565276.argus

Vår pcap-fil är på 153 MB och argus metadata-fil är på 241K.

Sedan kan vidare använda argus verktyg såsom racluster och rasort för att koppla ihop TCP-sessioner och sedan sortera samtliga sessioner i filen för att försöka upptäcka exfiltration:

racluster -r snort.log.1425565276.argus -w -|rasort -r - -m sbytes|head -30

Och vill vi enkelt filtrera ut samtliga tcp-sessioner, slå ihop dessa samt se vilka som varit mest långvariga kan vi köra följande kommando:

racluster -r snort.log.1425565276.argus -w - -- tcp|rasort -r - -m dur -s stime saddr daddr sport dport dur proto |tail

OPSEC

SchhyyyNär du utför dina analyser så bör du upprätthålla god sekretess. Trafiken du analyserar kan innehåll diverse kod som gör att sårbarheter utnyttjas i exempelvis Wireshark. Se därför till att köra så mycket som möjligt med låg behörighet och helt avskilt från andra nätverk och system såsom Internet.

Och fundera igenom allt du gör mot Internet: Vad lämnar detta för spår? Om du exempelvis analyserar kommunikation som en trojan utnyttjar (C&C) och det helt plötsligt dyker upp ett curl-anrop från din analys-klient så kan detta förstöra framtida mtrl.

Antagonisten kan nämligen bevaka kontrollkanalerna och då snabbt radera samtliga bevis, nycklar osv om hen märker att du utför analys.

Skärmdump

Denna skärmdump är från webbgränssnittet i Security Onion:

securityonion-web

DDoS-attack mot mediasajter

Igår Lördag strax innan kl 20 på kvällen så genomförde någon en DDoS-attack mot flertalet stora svenska mediasajter. Sajter såsom Aftonbladet gick inte att nå på över en timme, och det är ännu oklart exakt vilka sajter som stod som mål.

Attacken var tydlig på de grafer som är publikt tillgängliga från Netnod. Och det vi ser nedan är datatrafik som kommer från ryska internetoperatörer:

Netnod DDoS
Sammanställning av @SandraForesti

Att hyra någon att utföra DDoS-attack är inte speciellt dyrt och det som händer är att operatören troligtvis börjat att filtrera trafiken. Tittar vi via Telias looking-glass i Moskva så går det inte att nå Aftonbladet just nu via Telia i Ryssland.

Priserna för att hyra en DDoS-attack på svarta marknaden varierar en hel del men här är några exempelpriser:

booter-prices

 

Bakom attacker står troligtvis servrar med bra kapacitet som blivit hackade via WordPress, standardlösenord eller forcerade lösenord. Attacker tidigare mot bl.a. Regeringen använde JS LOIC men inte troligt i detta fall.

Med hjälp av trafikinspelning i PCAP-format exempelvis så skulle det gå relativt snabbt att ta reda på hur attacken utfördes. Även kan det vara möjligt att skapa motverkansmedel mot attacken om man vet i detalj hur den fungerar.

Reklam: Anlita Triop AB för att analysera DDoS-attacker

Sist men inte minst så är det också viktigt att skriva något hur mediasajters webb är uppbyggd. För att stå emot en attack som denna så bör DNS anycast samt web-anycast användas, och det finns flera leverantörer såsom Akamai, CloudFlare och Amazon CloudFront som kan leverera detta.

Även kan följande skrift vara bra att läsa med jämna mellanrum:

MSB Att hantera överbelastningsattacker
MSB Att hantera överbelastningsattacker

PCAP – Or it didn’t happend

Jag fick denna T-shirt av Erik på Netresec som bl.a. gör Network Miner och CapLoader. Du kan köpa den direkt från Netresec eller under konferensen 4SICS som går av stapeln imorgon.

PCAP or it didn't happend

Och vad menas med texten som står på t-shirten kanske du undrar? Jo, det är så att PCAP står för packet capture och är ett filformat för inspelad nätverkstrafik. För oss som jobbar med IT-säkerhet så är inspelad nätverkstrafik A och O när det gäller IT-forensiska undersökningar och analys av skadlig kod exempelvis.

Du kan läsa mer om inspelning av nätverkstrafik här.

Nätverksforensik med Dshell från US Army

Den amerikanska militärens forskningscenter vid namn U.S. Army Research Laboratory har släppt ett verktyg för att analysera nätverkstrafik (nätverksforensik). Verktyget är skrivet i Python och ligger uppe på Github för vem som helst att ladda ner och testa samt skicka in förbättringsförslag.

Även så är Dshell modulärt och har stöd för att återskapa TCP-strömmar samt IPv4 och IPv6.

Installation Dshell

Följande kommandon exekveras för att installera paketberoenden på exempelvis Ubuntu:

$ sudo apt-get install python-crypto python-dpkt python-ipy python-pypcap python-pip unzip build-essential
$ sudo pip install pygeoip
$ wget https://github.com/USArmyResearchLab/Dshell/archive/master.zip
$ unzip master.zip
$ cd Dshell-master
$ make

Då var installationen klar och du bör ha en fil vid namn dshell.

Nätverksforensik med dshell

Om du ej sitter på inspelad nätverkstrafik i form av pcap-filer så kan du ladda hem någon av de publika filerna från Netresec:

$ wget http://download.netresec.com/pcap/maccdc-2012/maccdc2012_00016.pcap.gz
$ gzip -d maccdc2012_00016.pcap.gz

Dshell stödjer även att köras i realtid mot ett nätverkskort, använd då flaggan -i (för interface).

Finemang. Då startar vi dshell och listar de avkodningsmoduler som följer med som standard med decode -l

Dshell modulerFör att få hjälp med en specifik avkodningsmodul kan man skriva:

Dshell> decode -d rip-http -h

Vi vill nu testa rip-http som är en modul som extraherar hur nedladdningar över http. Vi ser även att det finns möjlighet att ange filändelse så vi anger att vi vill läsa ut alla .PNG-bilder:

Dshell> mkdir img
Dshell> cd img
Dshell> decode -q -d rip-http ../maccdc2012_00016.pcap --rip-http_name_filter="\.png"

Vi får då upp ett antal rader på skärmen som bekräftar att det identifierats PNG-bilder i nätverkstrafiken (eller åtminstone vad filändelsen säger).

Men det var ju mindre kul, låt oss istället försöka hitta på någon slags skadlig kod:

Dshell> cd ..
Dshell> mkdir files
Dshell> sudo apt-get install clamav
Dshell> cd files
Dshell> decode -q -d rip-http ../maccdc2012_00016.pcap

Sen väntar du ett bra tag på att samtliga nedladdningar ska skrivas ut till disk. Du kan testa att labba med -t och -p som står för trådat respektive parallella körningar.

När det är klart så kan vi testa att söka igenom samtliga filer med clamav:

$ clamscan -i -r

Och får då ut att ett antal suspekta filer identifierades:

/home/vagrant/Dshell-master/files/apache.php_: JS.Agent-144 FOUND
/home/vagrant/Dshell-master/files/apache.php: JS.Agent-144 FOUND
/home/vagrant/Dshell-master/files/apache.php__: JS.Agent-144 FOUND
/home/vagrant/Dshell-master/files/process.php: PHP.ShellExec FOUND

Det var väl ett trevligt verktyg för att utföra nätverksforensik? Intressant är också att det finns en decoder för INNUENDO DNS-kanal som skapats genom att observera en produktvideo från Immunity som är företaget som utvecklar INNUENDO-produkten.