Taggat med: JA3S

Så upptäcker ni bakdörrar i IT-system

Så upptäcker ni bakdörrar i IT-system

Att upptäcka bakdörrar i IT-system är ingen lätt match och en mycket bra utvecklad bakdörr är mer eller mindre omöjlig att upptäcka. En bra utvecklad bakdörr har en mycket liten och snäv målgrupp och ligger vilande större delen av tiden. Men det finns givetvis olika metoder och sätt att upptäcka bakdörrar, för förr eller senare så kan misstag eller avvikande beteenden analyseras och påvisa en bakdörr.

Denna guide är främst skriven för att upptäcka bakdörrar som redan är in-planterade. Och hur bakdörrarna kommer in är utanför denna guide, men för att nämna några sätt:

  • Implanterade från start i servrar eller mjukvara/hårdvara
  • Via manuella eller automatiska uppdateringar av mjukvara, firmware osv
  • Man in the middle-attack eller MOTS mot nedladdad mjukvara
  • Via hackad server eller klient, bifogade filer i mail, sårbarhet i mjukvara
  • Fysiskt installerad via serverhall eller evil-maid attack
  • Infekterat PyPi, NPM, CPAN, RubyGem, NuGet-paket
  • Insider

Klienter och servrar

En vital funktion för att upptäcka bakdörrar på klienter och servrar är att samla in data, det kan röra sig om processer som startar och avslutas, drivrutiner som installeras/avinstalleras, telemetridata. Det är information där en enskild loggrad eller händelse kanske inte säger så mycket, men om den berikas och sätts i ett större sammanhang kan identifiera ett avvikande beteende.

Använder ni Windows-baserade system så är Sysmon ett givet verktyg att använda. För Linux-system så bör man använda verktyg såsom Sysdig Falco och auditd. Eller mer generiska verktyg såsom osquery.

Jag rekommenderar även att titta närmare på Velociraptor som jag bloggade tidigare om. Givetvis bör även binärer, konfigurationsfiler och dylikt hållas koll på med tripwire-liknande funktionalitet. Jobb som körs vid regelbundna intervall såsom cron, AT (Task Scheduler) osv. Eller vid uppstart av mjukvara, system (autoruns).

Nätverk

Jag har tidigare skrivit om RITA som kan underlätta analysen av nätverkstrafik för att hitta beacons som bakdörrar och implantat använder sig av för att kommunicera. Men en väl skriven bakdörr gör detta väldigt sällan och avviker minimalt från normal nätverkstrafik.

Att använda sig av TLSI (TLS Inspection) kan underlätta analysen av TLS/SSL-krypterad nätverkstrafik men det finns givetvis risker också, som bl.a. NSA varnat för. Rekommenderar att titta på PolarProxy som kan hjälpa till med TLSI.

Verktyg som kan hjälpa dig att analysera nätverkstrafik är exempelvis Zeek, JA3/S, Brim, Suricata, Arkime (fd Moloch) och SecurityOnion.

Passivt bör ni också undersöka om system anropar och kopplar upp sig mot kända C&C-servrar, därav viktigt att underhålla aktuella Threat Intelligence-listor med IP-adresser, domännamn etc.

Mängden av data som flödar ut ur era system kan också ge en fingervisning om exfiltration genomförs. Men detta är inte alltid helt enkelt att upptäcka, vid forensiska undersökningar där jag medverkat har jag sett att antagonister delar upp upp information i flertalet 500MB RAR-arkiv som exfiltreras över en längre tid för att undgå upptäckt.

bakdörr IT-system skadlig kod

Glöm inte heller att DNS kan användas för kommunikation, som bl.a. SolarWinds Orion SUNBURST-bakdörren gjorde. Även kan Twitter och andra sociala medier eller andra välkända tjänster användas för kommunikation med bakdörren. Steganografi kan också nyttjas för att försvåra upptäckt.

På internet eller fjärrsystem

Att aktivt undersöka vilka fjärrsystem på Internet som anropas kan hjälpa till att förstå om bakdörren pratar med en Command and Control-infrastruktur (C&C). Flertalet olika datakällor såsom Shodan kan användas för att förstå vilket eller vilka målsystem som kommunikationen sker mot.

Ett verktyg såsom JARM kan hjälpa till med detta och skapa unika signaturer. Observera att just aktivt undersöka system på internet kan vara en legal gråzon och undersök noga vad ni har möjlighet att göra.

Avslutande ord

Jag rekommenderar att bygga upp ett antal olika scenarion där ni undersöker vilka möjligheter ni har att upptäcka just dessa metoder. För att ge några exempel:

  • Log4j JNDI-sårbarheten utnyttjas på ett system mot Internet. Om en bakdörr sedan installeras på detta system, hur kan ni försvåra installation av bakdörren och hur ni upptäcka denna bakdörr?
  • En mjukvara som automatiskt uppdateras börjar att ”ringa hem” via dess normala kanaler för uppdateringar. Men innehåller nu krypterad data om erat interna nätverk såsom AD-namnet
  • DNS används för exfiltration
  • Switchen ni köpte innehåller en Rasperry Pi med WiFi eller 4G-mobildata för exfiltration av intern nätverkstrafik

Vad väntar ni på? Avsätt tid och resurser redan nu för att utveckla förmågan att upptäcka bakdörrar i IT-system. Och givetvis så bör ni också genomföra åtgärder för att försvåra för att bakdörren hamnar i IT-systemet i första taget, och även dess möjligheter att kommunicera ut på internet (eller på andra sätt ringa hem).

Desto mer bakdörren är integrerad i en befintlig komponent i era IT-system desto svårare är det att upptäcka den.

Tack till Erik Hjelmvik för genomläsning och synpunkter!

Test av JARM

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:

07d14d16d21d21d07c42d43d000000f50d155305214cf247147c43c0f1a823

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.

Jarm finns att laddas hem här:

Analys av krypterad datatrafik

Analys av krypterad datatrafik

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.

👉Stöd mitt bloggande via Patreon!

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
  • Argus – För att identifiera långa sessioner etc
  • packetStrider – Analyserar SSH-trafik för att dra slutsatser

Tips på fler verktyg mottages gärna, kommentera gärna nedan.