Simovits

Jarm – Detektera C2 infrastruktur

I dagens blogg kommer jag att testa JARM som är ett verktyg för att skanna TLS-signaturer och se hur det kan användas. Men vad är egentligen JARM och hur kan det hjälpa oss i incidenthantering och detektioner?

JARM är ett verktyg för att skanna TLS-signaturer. JARM tillåter oss att exempelvis:

Så hur fungerar egentligen JARM?

JARM skapar sin signatur utifrån TCP-handskakning och hur TLS Client/Server Hello sker.

Detta illustreras i bilden nedan:

Bilden är tagen från: https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/

En server med TLS skapar Server Hello paketet beroende av TLS Client Hello samt hur servern är konfigurerad, detta kan bland annat bero på:

Alla de olika faktorerna leder till att alla TLS Servrar svarar på sina unika sätt. I och med detta är det osannolikt att servrar i olika organisationer svarar på samma sätt.

JARM skickar 10 TLS Client Hello paket och dessa svar skapar en hash för att skapa en JARM-signatur. En JARM signatur ser ut som följande:

27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d

I och med detta kan olika signaturer tas fram:

Bild från https://engineering.salesforce.com/easily-identify-malicious-servers-on-the-internet-with-jarm-e095edac525a

Låter intresant men låt oss köra igång

För att installera JARM python eller .sh från salesforce kör:

git clone https://github.com/salesforce/jarm.git

Eller om du föredrar GO:

git clone https://github.com/RumbleDiscovery/jarm-go

$ python3 jarm.py google.com

Domain: google.com

Resolved IP: 216.58.207.206

JARM: 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d

Sedan kan en skanning köras enligt nedan:

Samt för gmail:

python3 jarm.py gmail.com

Domain: gmail.com

Resolved IP: 172.217.20.37

JARM: 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d

Så vad har JARM för användingsområden?

Shodan har implementerat JARM i sina skanningar och en sökning kan ske i shodan för att söka efter jarm-signaturer.

För att söka efter en jarm-signatur används:

ssl.jarm:”signatur”

Finns även en sammanställning på vanliga signaturer på följande sida:

https://beta.shodan.io/search/facet?query=http&facet=ssl.jarm

Hur ska vi då egentligen använda JARM?

För att verktyget ska få ett riktigt värde behöver vi ett use-case. Som vi skrev i inledningen så är det att leta efter C2-kanaler. Som tur är har vi redan en samling av JARM-signaturer för det på https://github.com/cedowens/C2-JARM

C2/RED TEAM TOOLSSL IMPLEMENTATION TESTEDJARM HASHLINK TO TOOL
Mythicpython 3 w/aiohttp 32ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06ebhttps://github.com/its-a-feature/Mythic
Metasploit ssl listenerruby 2.7.0p007d14d16d21d21d00042d43d000000aa99ce74e2c6d013c745aa52b5cc042dhttps://github.com/rapid7/metasploit-framework
Metasploit ssl listenerruby07d14d16d21d21d07c42d43d000000f50d155305214cf247147c43c0f1a823https://github.com/rapid7/metasploit-framework
Cobalt StrikeJava 1107d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1https://www.cobaltstrike.com/
Merlingo 1.15.2 linux/amd6429d21b20d29d29d21c41d21b21b41d494e0df9532e75299f15ba73156cee38https://github.com/Ne0nd0g/merlin
Deimosgo 1.15.2 linux/amd64 with github.com/gorilla/websocket package00000000000000000041d00000041d9535d5979f591ae8e547c5e5743e5b64https://github.com/DeimosC2/DeimosC2
MacC2python 3.8.6 w/aiohttp 32ad2ad0002ad2ad22c42d42d000000faabb8fd156aa8b4d8a37853e1063261https://github.com/cedowens/MacC2
MacC2python 3.8.2 w/aiohttp 32ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06ebhttps://github.com/cedowens/MacC2
MacShellSwiftpython 3.8.6 socket2ad000000000000000000000000000eeebf944d0b023a00f510f06a29b4f46https://github.com/cedowens/MacShellSwift
MacShellpython 3.8.6 socket2ad000000000000000000000000000eeebf944d0b023a00f510f06a29b4f46https://github.com/cedowens/MacShellSwift
Slivergo 1.15.2 linux/amd642ad2ad0002ad2ad00041d2ad2ad41da5207249a18099be84ef3c8811adc883https://github.com/BishopFox/sliver
EvilGinx2go 1.10.4 linux/amd6420d14d20d21d20d20c20d14d20d20daddf8a68a1444c74b6dbe09910a511e6https://github.com/kgretzky/evilginx2
Shad0wpython 3.8 flask2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06ebhttps://github.com/bats3c/shad0w
Get2N/A07d19d12d21d21d07c07d19d07d21da5a8ab90bcc6bf8bbc6fbec4bcaa8219
GRAT2 C2python3 http.server2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06ebhttps://github.com/r3nhat/GRAT2
CovenantASP.net core21d14d00000000021c21d14d21d21d1ee8ae98bf3ef941e91529a93ac62b8bhttps://github.com/cobbr/Covenant
SILENTRINITYironpython2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06ebhttps://github.com/byt3bl33d3r/SILENTTRINITY
PoshC2python3 http.server2ad2ad0002ad2ad22c42d42d000000faabb8fd156aa8b4d8a37853e1063261https://github.com/nettitude/PoshC2

Så om vi vill kan vi nu skanna efter EvilGinx2 ett annat verktyg som kan användas för att stjäla access-tokens som Peter visade i förra bloggen. Detta genom att antingen att söka efter signaturen via shodan eller enbart skanna domäner/ip adresser vi vill undersöka. Genom detta skulle vi kunna skapa en lista för att blockera trafik mot servrar med denna signatur eller söka efter dessa domäner/ip-addresser i våra loggar.

Inget verktyg är helt perfekt och det skapas självklart ett antal false positives från JARM, om vi exempelvis söker på Covenant C2 ovan får vi ett antal träffar. Varvid ett antal är false positives, exempelvis har https://emby.media/ samma signatur som Covenant. Detta genom att det är byggt på .net core precis som Covenant, varvid samma jarm-signatur skapas för detta. Samma sak gäller för de flesta av de andra C2-framworken.

En sak som också är bra att tänka på är att om C2 kör bakom en Proxy exempelvis Nginx kommer signaturen komma från Nginx och inte från det som finns bakom proxyn.

Jag vill veta mer?

Det finns ett antal olika användningsområden för JARM som vi visat i denna blogg. Men idag kommer vi inte gå igenom mer än så här. Men om allt går enligt planen kommer en del 2 lanseras i min nästa blogg och då kommer vi djupdyka lite mer i verktyget och använda det för att jaga skurkar och banditer i nätverket.