Skip to content

JARM - Sherlock Holmes för serveridentifikation

JARM-fingeravtryck är en identifieringssträng som är starkt kopplat till SSL/TLS, dvs den teknik som används när vi besöker hemsidor med krypterad trafik (https). Företaget Salesforce har hittat ett sätt att identifiera sårbara servrar med hjälp av denna sträng, som i sin tur kan innehålla bl.a. ransomware. Detta har de valt att kalla JARM-fingeravtryck. Hädanefter refererad som JARM-hash.

Tekniken

JARM-tekniken bygger på att tio speciellt utformade TLS Client Hello-paket skickas för att skapa ett unikt fingeravtryck, JARM-hash. De olika attributen som skickas tillbaka från serverns TLS Server Hello Response fångas upp och aggregeras på ett specifikt sätt för att skapa en JARM-hash för den specifika servern. Denna hash består utav 62 tecken, uppdelat i två sektioner. De 30 första tecknen består utav det chiffer och TLS-version som servern valt att kommunicera med. De resterande 32 tecknen representerar en trunkerad SHA526-hash av serverns plugin.

Nedan är en lista på olika domäner som tillhör Google och Meta (tidigare Facebook). Det är ganska tydligt att de olika företagen har valt att konfigurera sina servrar med samma TLS-version och chiffer, då de 30 första tecknen i JARM-hashen för domänerna för Google och Meta är samma (markerat i gult i bilden nedan). Därefter skiljs de olika domänerna åt då de använder sig utav olika plugin (markerat i orange i bilden nedan).

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

Det som JARM-hashen letar efter i svaret är bl.a.:

  • Operativsystem och version
  • Plugin som används samt deras versioner
  • Vilken ordning dessa plugin anropas

Dessa faktorer gör att TLS-svaret blir olika och som gör denna JARM-hash möjlig.

Genom att ha listor där dessa JARM-hashar är uträknande för respektive domän går det snabbt att identifiera hur en server är konfigurerad och på så sätt snabbt hitta kända illasinnade servrar, då de ofta är konfigurerade på samma sätt och därav har samma JARM-hash. Även om en angripare byter domän eller IP, så finns det fortfarande stor chans att den nya illasinnade servern är uppsatt på samma vis och därmed fortfarande kommer ha samma JARM-hash.

När forskarna som tagit fram denna teknik skannade efter ett specifikt Malware från en lista hämtad från abuse.ch (Threat Intelligence Community), visade det sig att 80% av de aktiva IP-adresserna från denna lista med illasinnade servrar hade samma JARM-hash.

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

Ett relativt enkelt sätt att kontrollera att en “TLS-uppsättning” är densamma är genom att använda sig utav en web-hook. Enkelt sagt är en web-hook en webserver som lyssnar efter anrop. Så fort den får ett anrop till sig så svarar den antingen med ett förbestämt värde eller triggar ett nytt flöde i kedjan. I detta exempel används Burp Suite, vilket är ett kraftfullt verktyg som använd för säkerhetstesta webbsidor. Burp Suite har en inbyggd web-hook-server, också kallar Burp Collaborator och den svarar endast med ett nonsensvärde. Det går att generera massor av web-hooks och varje web-hook får en unik URL. Nedan är en bild där två olika web-hookar (URL:er) har använts för Burp Collaborator (understrukna med rött i bilden nedan), men de har samma JARM-hash (understrukna med gult i bilden nedan). Även om det är olika URL, så är själva TLS-uppsättningen och JARM-hashen densamma.

jarm3

 

Hur kan man använda JARM-hashen?

Många verktyg har stöd för JARM-hashen, bl.a. sökmotorerna Shodan och Censys. Det går med andra ord att hitta servrar som är konfigurerade på samma sätt genom dessa söktjänster. Det går även att ladda ner Salesforces egna verktyg och köra mot en domän för att få ut en JARM-hash. Verktyget går att hitta här: https://github.com/salesforce/jarm 

Vill man istället använda en sökmotor för att jämföra olika JARM-hashar, så finns bl.a. Shodan: https://www.shodan.io/search/facet?query=org%3Aknowit&facet=ssl.jarm

Så här kan det se ut för Knowits konfiguration för de olika domänerna: jarm4

Det är med andra ord möjligt att skapa en lista över kända illasinnade servrar länkade till deras JARM-hash och kunna blockera tillgång till dessa servrar. Dock finns det risk att legitima servrar är uppsatta på samma vis och på så sätt har samma JARM-hash. Av den anledningen kan JARM hashen behöva lite stöd från andra steg i blockeringsprocessen.

Ett annat sätt att använda JARM-hashen på är i större organisationer som vill härda sina servrar med samma konfiguration. På så sätt är det enkelt att se vilka servrar som sticker ut, som i sin tur gör det lättare att snabbt hitta vilka som behöver patchas eller konfigureras om korrekt.

 

Alternativ

Utöver JARM-hashen, så finns liknande metoder så som JA3 och JA3S. JARM använder sig utav en aktiv teknik för att få fram sin unika hash för den specifika servern, medan JA3 och JA3S använder en passiv metod, men fungerar på liknande sätt som JARM, där de också granskar de olika TLS-handskakningarna. JA3 används för TLS-klienter och lyssnar passivt på nätverkstrafiken och baserar sitt fingeravtryck på det den snappar upp. JA3S gör samma sak, fast för serversidan. Då JARM är aktiv, kan den bygga en hash, medan JA3S inte kan det. JA3 har sedan en tid tillbaka blivit ersatt utav den senaste versionen som kallas för JA4+: https://medium.com/foxio/ja4-network-fingerprinting-9376fe9ca637.

 

Summering

  • Med en JARM-hash är det möjligt att identifiera alla serverar i en organisation som har samma konfiguration på ett snabbt och enkelt sätt och på så sätt snabbt hitta de som behöver patchas eller konfigureras om.

  • JARM-hash kan hjälpa till att skapa blockeringslistor över servrar som har en specifik uppsättning som indikerar på att den på något vis är illasinnad, exempelvis att den har skadlig kod. Denna process kan dock behöva lite extra steg i blockeringskedjan för att inte råka blockera pålitliga servrar som råkar har samma uppsättning.

  • Det är även möjligt att gruppera servrar efter konfiguration vilket gör det möjligt att identifiera om en server tillhör tex Google, Apple, Meta osv.

 

Referenser

  1. Tekniska detaljer kring JARM — https://engineering.salesforce.com/easily-identify-malicious-servers-on-the-internet-with-jarm-e095edac525a/
  2. Salesforce JARM-verktyg — https://github.com/salesforce/jarm
  3. Tekniska detaljer kring JA3 och JA3S — https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/
  4. Jämförelse mellan olika tekniker — https://medium.com/@jalthouse/great-question-11aa555f6b28
  5. Tekniska detaljer kring JA4+ — https://medium.com/foxio/ja4-network-fingerprinting-9376fe9ca637
  6. JA4+-verktyg — https://github.com/FoxIO-LLC/ja4