728x90
728x90

Jarm Generator 실습

jarm(just another resource Negotiator)은 SSL/TLS 핸드셰이크 패킷을 분석하여 네트워크 서비스나 애플리케이션을 식별하는데 사용되는 도구이다.
SSL/TLS 핸드셰이크는 서버와 클라이언트 간의 보안 연결을 설정하기 위한 초기 단게로, 이 단계에서 사용되는 핸드셰이크 값들은 서버나 애플리케이션의 특징을 나타내는 경우가 많다.
Jarm은 이러한 핸드셰이크 값들을 분석하여 고유한 식별자를 생성하며, 이를 통해 서비스를 식별할 수 있다.

💡웹서버, vpn 서비스. 메일 서버 등 서비스가 다르면 홴드셰이크 값에서 나타나는 특징들이 다를 수 있기 때문이다.

→ 보안 전문가가 어떤 환경에서 어떤 서비스가 실행 중인지 더 정확하게 판단하도록 도와 적절한 보안 조치를 취할 수 있도록 도와준다.
→ 네트워크 분석, 보안 조사, 침투 테스트 등 다양한 상황에서 유용하게 활용될 수 있다.

 

🙎‍♀️ 그러니까, 내가 웹서버로 접근하고, 네가 메일 서버로 접근한다면?
👨‍🔧 우리의 핸드셰이크 값은 다를테니 누가 누군지 얘가 알려주겠지!
💁‍♀️ 그럼 이 실습은 뭐 하는 건데???
 

Jarm의 특징

 
  1. 한 그룹의 모든 서버가 동일한 TLS 구성을 갖는지 빠르게 확인한ㄷ.
  1. 다양한 서버를 구성별로 그룹화하여 Google, Salesforce, Apple과 같은 조직을 식별한다.
  1. 기본 응용 프로그램이나 인프라를 식별한다.
  1. 악성 소프트웨어 명령 및 제어 인프라와 같은 악성 서버를 식별한다.
  1. Python으로 작성되었다.

jarm generator

이 프로그램을 사용하여 특정 도메인 또는 IP 주소에 대한 jarm 핸드셰이크 값을 생성할 수 있다.

설치부터 해보자고 !

git clone https://github.com/salesforce/jarm
깃허브에 올라와있는 jarm 파일을 클론해준다
그러면 이렇게 하나하나 다운받아진다
cd downloads
cd jarm 
경로에 맞춰서 들어가준다.
근데 뭐, 본인이 원래 폴더에 깔았다면 cd jarm만 해줘도 된다.

실습해보았다

나의 블로그인 insidepixce.com으로 10개의 TLS 헬로 패킷을 대상 TLS서버로 보내고, 해당 서버의 헬로 응답의 특정 속성을 캡처하여 동작한다.
이를 통해 얻은 TLS 서버 응답을 특정 방식으로 해시하여 JARM 핑거프린트를 생성한다.
이 때 클라이언트 헬로는 서로 다른 TLS 버전, 암호화 방식, 확장 등을 다양한 순서로 보내면서 고유한 응답을 얻는 것이다.
 

그럼 이거 어떻게 읽어?

JARM 핑거프린트는 특정 방식으로 해시된 퍼지 해시(fuzzy hash)로, 암호화와 관련된 보안 기능이 아니다. 이 해시는 기계뿐만 아니라 사람도 읽을 수 있도록 디자인되었다.
  • 첫 30자는 10개의 클라이언트 헬로 중 서버가 선택한 암호화 및 TLS 버전으로 이루어져 있음
  • “000”은 해당 클라이언트 헬로한테 요청 날렸는데 안 준 경우를 나타낸다
  • 나머지 32자는 서버가 보낸 확장의 누적을 sha236 해시한 값이다.
  • JARM 핑거프린트를 비교할 때, 마지막 32자가 다르지만 첫 30자가 다르면 서버가 매우 유사한 구성을 가지고 있다고 한다.
 

내가 배포한 블로그의 jarm fingerprint를 알아보자

Domain: insidepixce.com
Resolved IP: 76.76.21.98
JARM: 3fd3fd16d00000000043d3fd3fd43da936ab0256fab25eca082941d14e3ece
 
DOMAIN : 내가 현재 사용중인 나의 도메인
RESOLVED IP : 해당 사이트의 아이피 (dns조회를 통해 얻어진 값)
JARM : 해당 도메인의 TLS 구성을 바탕으로 생성된 고유한 식별자이다. TLS 클라이언트 헬로 메세지를 전송하고 서버의 응답을 기반으로 생성되었다.
이 ‘JARM’값은 지문 같은 것인데, 형제끼리 지문이 비슷한 것 처럼 유사한 구성을 가진 서버를 식별할때 쓰인다.
728x90
300x250

+ Recent posts