공격자가 사용하는 C2(Command and Control) 인프라는 JARM이라는 TLS 서버 핑거프린팅 도구가 생성한 고유 지문을 Shodan 같은 인터넷 검색 엔진에서 쿼리하면 추적됩니다. TLS 서버의 응답 특성을 분석해 특정 C2 프레임워크가 사용하는 서버 후보를 식별하는 원리입니다.
JARM이란 무엇인가: TLS 핸드셰이크 기반 서버 지문
JARM은 Salesforce에서 개발한 오픈소스 TLS 서버 핑거프린팅 도구입니다. 이 도구는 TLS 서버에 능동적으로 10개의 서로 다른 Client Hello 프루브(Probe)를 보내 서버의 응답(Server Hello) 속성을 수집하고, 이를 해싱해 62자리의 고유한 16진수 지문을 생성합니다.
이 프로세스의 핵심은 서버가 동일한 클라이언트 설정에 항상 일관된 방식으로 응답한다는 점입니다. JARM 지문 하나로 특정 프레임워크로 구축된 서버 후보를 식별할 수 있어, 위협 헌팅에서 유용한 신호로 쓰입니다.
Cobalt Strike 팀 서버가 지문에 노출되는 이유
C2 프레임워크 중 Cobalt Strike는 초기 설치 시 기본 SSL/TLS 인증서를 생성합니다. 경험이 부족하거나 설정 과정에서 서두른 공격자가 이 기본 인증서를 교체하지 않고 그대로 사용하면, Shodan 같은 인터넷 검색 엔진에 해당 정보가 노출되고 인프라가 쉽게 추적됩니다.
실제로 Shodan은 2021년 11월부터 스캔 과정에서 포착된 Cobalt Strike C2 서버를 ‘Cobalt Strike Beacon’이라는 제품군으로 인덱싱해 대시보드에 표시하기 시작했습니다. 공격자의 설정 실수와 검색 엔진의 인덱싱 능력이 맞물리면서 C2 인프라 탐지 가능성이 높아진 셈입니다.
C2 프레임워크별 JARM 해시 사례 분석
JARM 해시 값은 사용된 프레임워크뿐 아니라 서버의 자바 런타임 버전이나 설정에 따라 달라집니다. 단일 해시만 블랙리스트로 관리하기보다는 다양한 환경에서 관측된 해시 세트를 활용하는 쪽이 효과적입니다.
다음은 주요 C2 프레임워크에서 관측된 대표적인 JARM 해시 예시입니다.
| C2 프레임워크 | 관측 환경/기준 | 대표 JARM 해시 값 |
|---|---|---|
| Cobalt Strike | Java 11 기준 | 07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 |
| Sliver C2 | Golang 기준 | 2ad2ad0002ad2ad00041d2ad2ad41da5207249a18099be84ef3c8811adc883 |
| Mythic C2 | 일반 관측 | 2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29eecb81d0c7b06eb |
특히 Cobalt Strike의 경우 SANS ISC에서 2020년 11월에 특정 해시를 보고했고, OpenJDK 11 기본값에서는 또 다른 해시가 관측되었다는 분석도 있습니다. 커뮤니티 저장소에도 서로 다른 해시 값을 담은 다양한 헌팅 쿼리 예시가 수록되어 있습니다.
실전 C2 인프라 추적 및 탐지 기법
보안 관제 요원과 CERT 팀은 JARM에 JA3/JA3S 조합을 더해 더 정밀한 추적을 수행합니다.
- JARM 기반 외부 헌팅: Shodan이나 Censys에서 특정 C2 프레임워크의 JARM 해시를 쿼리해 전 세계에 활성화된 C2 서버 후보군을 식별합니다.
- JA3/JA3S 조합 분석: JA3(클라이언트 지문)와 JA3S(서버 응답 지문)를 조합하면 클라이언트와 서버 간의 전체 암호화 협상 지문이 만들어집니다. 서버는 동일한 클라이언트에 항상 동일하게 응답하기 때문에, 이 조합으로 내부 호스트와 특정 C2 서버 간의 TLS 협상을 정밀하게 매칭할 수 있습니다.
- 의심 신호 판단: JARM 지문 기반의 C2 서버는 Alexa Top 1M 같은 유명 웹사이트와 거의 겹치지 않는 특성을 보입니다. 조직 내부 호스트가 이런 특이 지문을 가진 서버로 연결을 시도하는 모습이 관찰되면, 강력한 침해 지표(IoC)이자 의심 신호로 판단할 수 있습니다.
운영 권고 및 탐지 전략의 한계
JARM을 활용한 탐지는 강력하지만, 공격자가 자바 런타임 버전을 변경하거나 프레임워크 설정을 조정하면 해시 값이 변한다는 한계가 있습니다. 다음과 같은 전략적 접근이 필요합니다.
- 해시 세트 기반 탐지: 단일 JARM 해시에만 의존하지 않고 다양한 버전과 환경에서 수집된 해시 세트를 쿼리에 포함시키면 탐지율이 높아집니다.
- 맥락 기반 분석: JARM 지문 일치 여부뿐 아니라 해당 서버가 Alexa Top 1M에 포함되지 않는지, 평소에 통신이 없던 생소한 도메인인지 등의 맥락을 함께 살핍니다.
- 지속적인 업데이트: 새로운 C2 프레임워크 버전이 출시되거나 공격자의 설정 기법이 변하면 새로운 JARM 지문이 계속 생겨납니다. 커뮤니티의 최신 헌팅 쿼리와 지문 저장소를 꾸준히 모니터링하는 일이 그만큼 중요해집니다.