ssl pinning

agnusdei·2025년 9월 19일
0

CTF

목록 보기
128/155

SSL/TLS Pinning이란?

SSL/TLS Pinning은 클라이언트가 서버에 연결할 때 미리 지정된(pinned) SSL/TLS 인증서나 공개키만 신뢰하도록 강제하는 보안 기술입니다. 중간자 공격(Man-in-the-Middle Attack, MitM)을 방어하기 위해 사용됩니다. . 일반적인 TLS 통신은 CA(인증기관)가 발급한 모든 유효한 인증서를 신뢰하지만, SSL Pinning은 특정 서버의 인증서(혹은 공개키)만을 허용함으로써 공격자가 위조된 인증서로 클라이언트를 속이는 것을 방지합니다.


동작 원리

SSL Pinning은 크게 두 가지 방식으로 구현됩니다.

  1. Certificate Pinning: 서버의 인증서(Certificate)를 앱 내부에 직접 저장하고, 연결 시 서버가 보내온 인증서와 일치하는지 확인합니다. 이 방식은 인증서가 갱신될 때마다 앱을 업데이트해야 하는 번거로움이 있습니다.

  2. Public Key Pinning: 서버의 인증서에 포함된 공개키(Public Key)를 추출하여 앱 내부에 저장하고 검증합니다. 이 방식은 인증서 자체는 갱신되어도 공개키는 유지될 수 있어, 인증서 갱신에 따른 앱 업데이트 부담이 Certificate Pinning보다 적습니다.


우회 기법 (Bypassing SSL Pinning)

SSL Pinning은 강력한 보안 기술이지만, 다음과 같은 방법으로 우회될 수 있습니다.

  1. 프록시 도구를 이용한 동적 후킹: FridaMagisk 모듈(예: TrustMeAlready) 같은 동적 분석 도구를 사용합니다. 이러한 도구는 앱이 인증서 유효성 검사 함수(예: NSURLAuthenticationChallenge, SSLCertificate)를 호출할 때 그 함수의 실행을 가로채서(hooking) 검사 결과를 조작합니다. 즉, 검사 결과가 실패하더라도 성공했다고 속여 우회하는 방식입니다.
  2. 클래스 및 메서드 패치: 앱의 바이너리 코드 자체를 수정하여 SSL Pinning 관련 코드를 비활성화하거나, 검증 로직을 무력화시킵니다. 이 방식은 리버스 엔지니어링 지식이 필요하며, GhidraIDA Pro 같은 디컴파일러를 사용해 코드를 분석해야 합니다.
  3. 안전하지 않은 라이브러리 우회: 일부 개발자는 SSL Pinning을 구현하면서 자체 검증 로직을 사용하거나, TrustManager를 잘못 구성하는 경우가 있습니다. 이러한 구현상의 오류를 찾아내 우회할 수 있습니다. 예를 들어, okhttp와 같은 라이브러리의 커스텀 TrustManager를 찾아내고 그 함수를 후킹합니다.

결론 및 전문가적 조언

SSL Pinning은 강력한 방어책이지만 완벽하지는 않습니다. 전문적인 해커는 Frida와 같은 동적 분석 도구를 사용해 런타임에 손쉽게 우회할 수 있습니다. 따라서 SSL Pinning은 심층 방어(Defense in Depth)의 한 요소로 활용되어야 합니다.

진정한 보안을 위해서는 SSL Pinning 외에 다음을 함께 고려해야 합니다.

  • API 보안 강화: 서버 측에서 API 키, 세션 토큰 등 인증 정보를 안전하게 관리하고, 서버-클라이언트 통신에 대한 접근 제어와 로깅을 철저히 합니다.
  • 코드 난독화(Code Obfuscation): 리버스 엔지니어링을 어렵게 만들어 해커가 중요한 함수나 로직을 쉽게 찾지 못하게 합니다.
  • 루트(Root) 및 탈옥(Jailbreak) 탐지: 앱이 루팅되거나 탈옥된 환경에서 실행될 경우, 민감한 기능의 사용을 제한하거나 앱을 종료시킵니다. 이는 Frida와 같은 동적 분석 도구 사용을 어렵게 만듭니다.
profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글