Taggat med: Active Countermeasures

Identifiera beacons (bakdörrstrafik) med RITA

Identifiera beacons (bakdörrstrafik) med RITA

Det amerikanska cybersäkerhetsföretaget Active Countermeasures har en intressant open-source produkt som heter RITA. RITA står för Real Intelligence Threat Analytics är ett verktyg för dig som vill genomföra Cyber Threat Hunting.

RITA läser in data från Zeek (fd Bro) och kan genomföra följande:

  • Beacon-detektion – Sök efter tecken på beaconing-beteende in och ut ur ditt nätverk.
  • DNS-tunnelavkänning – Sök efter tecken på DNS-baserade bakdörrskanaler
  • Kontroll mot svartlisor – Sök mot ett antal olika svartlistor/blocklists

Jag intresserar mig dock mest för beacon-detektion då detta finns inbyggt i flertalet kommersiella produkter såsom Cisco Encrypted Traffic Analytics  men få open-source produkter kan söka efter denna typ av nätverkstrafik.

Beacons används av bakdörrs-ramverk (C2 frameworks) såsom Cobalt Strike, Metasploit, Empire, SharpC2 och PoshC2 för att nämna några.

RITA är utvecklat i programspråket Go och kan installeras i SecurityOnion, Ubuntu 16.04, Ubuntu 18.04 eller CentOS 7 om du vill köra med det medföljande scriptet install.sh. Du kan även installera RITA på egen hand eller köra RITA under Docker.

Stöd gärna mitt bloggande via Patreon >

De beroenden som RITA har är förutom Zeek är också databasen MongoDB. Jag installerar RITA utan Zeek och MongoDB och editerar sedan konfigg-filen /etc/rita/config.yaml så att den pekar mot min fristående mongodb.

Observera att du ej kan köra RITA med det paket som följer med Ubuntu 16.04 eftersom det är 2.6.10. RITA behöver mongodb-version som är mellan 3.2.0 och 3.7.0.

Jag fick det att fungera genom att installera mongodb version 3.6.18.

Analysera PCAP efter bakdörrar

Nu när RITA är installerat så måste jag först köra zeek på de pcap-filer jag har sparat ner. Bäst fungerar det om du har en pcap-fil för varje dag, detta kan vara problematiskt om du har många filer men går att lösa med verktyg såsom mergecap.

Första steget är att läsa in ett dygns pcap-fil med zeek och skriva ut loggfilerna. Detta exempel gäller dagen 2020-06-05 och pcap-filen var på 33GB:

$ cd /data/pcap
$ mkdir -p zeek/2020-06-05
$ cd zeek/2020-06-05
$ zeek -Cr ../../trace_2020-06-05.pcap local

Ovan kommando tar cirka 15 minuter på min Raspberry Pi och sedan att importera detta via RITA mot mongodb tar ca 3 minuter:

Nu när vi har importerat mappen 2020-06-05 mot RITA-databasen vid namn 2020-06-05 så kan vi titta på analysen när det gäller beacons på följande sätt:

Observera att ovan bild är censurerad av mig. Men när jag tittar på source/dst-IP så ser jag att två översta går till 8.8.8.8 respektive 8.8.4.4 vilket är Googles DNS och troligtvis false-positive. Det som är intressant här är första kolumnen vid namn score och en score på 0.9 och över är mycket intressant. Kör jag metasploit och meterpreter så hamnar score på 0.987.

Och tittar vi på beacon-trafik från Cobalt Strike så ligger standard på sleeptime 30000 millisekunder och 20% jitter. Vilket motsvarar följande kommando från agressor-klienten:

Vill du läsa mer om den underliggande algoritmen så hittar du koden här:

Och en analys av RITA på Cobalt Strike som legat och kommunicerat en hel dag så blir analysen enligt följande:

RITA beacon Cobalt Strike

Rad 17 som är rödmarkerad är den trafik som tillhör Cobalt Strike, och får enbart en score på 0.829 samt hamnar på 16:de plats på topplistan. Resten är enbart falska positiva, dvs videostreaming, DNS-uppslag osv. Så kontentan är att det inte är helt trivialt att detektera Cobalt Strikes standardkonfigurering.

Gillade du detta blogginlägg? Hjälp mig att blogga mer genom att stödja mig via Patreon >