JARM är ett relativt nytt blue-teaming verktyg som bl.a. kan användas för att skapa fingerprints av Command and Control-servrar (C&C). Verktyget är skapat av ett team där John Althouse ingår som också är en av grundarna till JA3/JA3s och HASSH.
Jarm används för att skapa ett unikt fingeravtryck (fingerprint) av en specifik TLS-kapabel server såsom Apache, Nginx, Cobalt Strike eller Metasploit.
Genom att skicka 10 st olika ClientHello TLS-meddelanden så skapas denna unika fingerprint.
Kör man jarm.py mot exempelvis Metasploit så får man följande fingerprint:
Skärmdump när jag kör jarm mot en metasploit-lyssnare som använder sig av reverse_https-payloaden:
För fler signaturer se följande Github-repo: https://github.com/cedowens/C2-JARM och givetvis så stödjer Shodan jarm-fingerprints sedan November 2020:
Ett tips är att testa att kombinera jarm med Rita och aktivt skicka ut probes till de anslutningar som ser suspekta ut. Den fingerprint som jarm beräknar är på 62 tecken och är en form av hybrid fuzzy hash. Observera att jarm ej bryr sig om x509-certifikatinformation.
Även bra att notera att om man ställer sin C2-server såsom Cobalt Strike eller Metasploit bakom Nginx så kommer då Nginx-hashen att vara den som fingerprintas.
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:
Sedan klickar jag på Sessions-fliken och kan söka på sessioner med någon av dessa unika HASSH-fingerprints:
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.
I takt med att allt mer datatrafik på våra nätverk blir krypterad så ställs större krav på möjlighet att inspektera den krypterade nätverkstrafiken antingen via TLS-inspektion (TLSI) eller på ändpunkterna. Men det går fortfarande att utläsa en hel del från att granska krypterad nätverkstrafik.
Google uppger att 93% av all inkommande E-post är krypterad med STARTTLS för att ge en siffra på hur mycket som är krypterad E-post. Hittar tyvärr ingen statistik hur förhållandet mellan https och http ser ut.
När det gäller analys av krypterad datatrafik så finns det flertalet saker man kan titta på, främst följande punkter:
Protokollinformation – Varje krypterat protokoll har som oftast någon form av handskakning som avslöjar information om både klient och server. Det kan röra sig om vilka algoritmer som supportas eller publika nycklar.
Om du inte vet vilket protokoll det rör sig om kan du även titta på sekvenser som förekommer i den session du kollar på och sedan jämföra den med andra (om du har tillgång till andra).
Informationsmängd – Hur mycket datatrafik skickas och åt vilket håll skickas detta. Kan det röra sig om en större filöverföring, och hur stor är dessa filer? Kan det röra sig om överföring av tangentbordsinmatningar, tal eller skärmuppdateringar? Entropi kan också avslöja information om innehållet.
Tidpunkt – Kommunicerar detta krypterade protokoll enbart vissa tider eller veckodagar. Eller är det vid speciella händelser som inträffar som data skickas.
Ändpunkter – Vem kommunicerar med vem? Vilka är källorna och vilka är destinationerna. Om det är en publik VPN-tjänst så kanske det räcker med enkel OSINT för att identifiera vilken typ av VPN-tjänst det är. Det kan även vara så att DNS har nyttjats för att göra en uppslagning innan sessionen etableras.
Omförhandlingar – Sker det någon form av byte av nycklar eller liknande efter en viss tidpunkt eller informationsmängd? Hur långa är sessionerna?
TCP/UDP och portnummer – Har ett nytt portnummer slumpats fram eller är det en välkänd port med tillhörande protokoll, används TCP eller UDP.
Fel(injektioner) – Hur reagerar anslutningen om olika typer av fel introduceras. Passiva eller aktiva där data skickas direkt till ändpunkterna eller om paket tappas.
Övrig kommunikation – Går det kommunikation till och från enheten som kan avslöja information om vilken typ av krypterad anslutning som förekommer. Det kanske är så att vissa anrop går över http och vissa över https. Då kan exempelvis en User-Agent http-header avslöja något om källan.
Antalet paket och paketstorlekar kan också vara relevant att titta på.
Verktyg för analys av krypterad kommunikation
Det viktiga här är att poängtera att det inte finns ett verktyg som löser alla frågor som jag listat ovan. Oftast får du kombinera flertalet verktyg för att ta reda på svaret. Men följande produkter/verktyg hjälper dig en lång väg på traven:
Zeek (bro) – Har ett stort ekosystem samt inbyggt stöd för flertalet intressanta analyser. Kan exempelvis kontrollera revokering av certifikat, algoritmer och mycket mer.
Wireshark/tshark – Förstår flertalet protokoll och underlättar analyser av specifik metadata. Men tyvärr så fort ett standardprotokoll går på en avvikande port så blir det problem för Wireshark. Men detta är något som bl.a. Network Miners Port Independent Protocol Identification (PIPI) fixar.
Tcpdump – Snabbt verktyg och gör mycket av grovjobbet. Gör att du enklare kan göra en första filtrering på källa/destination eller port.
Viktigt också och nämna följande verktyg:
HASSH – Gör fingerprints på ssh-klienter och servrar
JA3/JA3S och JA3ER – Gör fingerprints på SSL/TLS klienter och servrar. Och JA3ER är en databas för dessa fingeravtryck