1P by neo 5달전 | favorite | 댓글 1개

메타의 메신저 인증서 핀닝 깨기 (macOS)

  • 메타의 macOS용 메신저 애플리케이션은 독립 실행형 데스크톱 애플리케이션인 Texts.com 모델과 유사함.
  • Texts.com의 메타 플랫폼 프로젝트를 이끄는 Batuhan İçöz는 네트워크 요청을 가로채는 것이 첫 단계로 중요하다고 생각함.
  • 메타는 인증서 핀닝을 적용하여 보안을 강화하고, MITM(중간자) 공격을 통한 서버 요청 분석을 방지함.

인증서 핀닝이란?

  • 프록시 클라이언트를 설정할 때 "인증 기관"을 신뢰하도록 구성해야 함.
  • 인증 기관에서 발급한 인증서를 사용하여 요청에 대한 정보를 가로채고 해독할 수 있음.
  • 서비스가 인증서 핀닝을 구현하면 특정 인증 기관에서만 발급한 인증서를 수락하여 사용자의 인증 기관에서 발급한 인증서를 사용하지 못하게 함.

기본 동작

  • 인증서 핀닝을 비활성화하지 않으면 모든 요청이 "내부 오류"로 반환되고, 프록시 소프트웨어는 "SSL 핸드셰이크 실패"를 나타냄.
  • 요청이 생명주기를 완료하지 못하므로 요청에 대한 정보를 추론할 수 없음.

원하는 동작

  • MITM 공격을 사용하여 네트워크 디버깅 도구에서 요청, 응답 및 헤더를 성공적으로 읽을 수 있음.

가능한 접근 방식

  • 이전에 작동한 방법 중 하나는 바이너리에서 URL 문자열을 TLS를 구현하지 않는 불안전한 자체 호스팅 엔드포인트로 변경하는 것임.
  • Frida와 같은 동적 계측 라이브러리를 사용할 수 있지만, 메신저는 특히 후킹 시 충돌이 발생하기 쉬움.
  • Frida를 사용하는 것은 복잡한 배포 과정을 포함함.

접근 방식

  • Messenger를 다운로드하고 애플리케이션 폴더로 이동한 후, Hopper에 ARM 바이너리를 가져옴.
  • Hopper를 사용하여 바이너리를 분해, 디컴파일, 리컴파일, 디버깅 및 시각화할 수 있음.
  • "SSL 핀닝 검증 실패"와 같은 문자열을 찾아 수정을 최소화하려고 함.
  • "Using custom sandbox -> turn off SSL verification"이라는 문자열을 발견하고 관련 함수를 찾아 수정함.
  • IsUsingSandbox 함수를 항상 true로 설정하여 인증서 핀닝을 비활성화함.

결과

  • 새로운 실행 파일을 내보내고 서명을 제거한 후 원래 Messenger 바이너리를 새로운 바이너리로 교체함.
  • Messenger를 다시 시작하면 프록시 도구에서 헤더, 응답 본문 및 모든 요청 정보가 표시됨.
  • 바이너리의 97,477,728 바이트 중 단 4바이트만 수정하여 요청을 가로채는 데 성공함.

배포

  • 바이너리를 컴파일한 후 Batuhan에게 보냄.
  • Batuhan은 서명 인증서를 받아 설치하고 애플리케이션에 서명함.
  • 서명이 완료되면 자신의 시스템에서 바이너리를 사용하여 자신의 요청을 볼 수 있음.

GN⁺의 의견

  • 이 기사는 보안 연구원들이 어떻게 메타의 메신저 앱에서 인증서 핀닝을 우회하는지에 대한 흥미로운 사례를 제공함.
  • 인증서 핀닝은 중간자 공격을 방지하는 중요한 보안 기능이지만, 연구원들이 이를 우회하는 방법을 찾아내는 것은 보안 커뮤니티에 중요한 통찰을 제공함.
  • 이 기술은 개발자들이 자신의 앱이나 서비스의 보안을 강화하는 데 도움이 될 수 있으며, 보안 취약점을 찾아내고 해결하는 데 기여할 수 있음.
  • 그러나 이러한 연구가 악의적인 목적으로 사용될 가능성도 있으므로, 연구 결과를 공유할 때는 신중해야 함.
  • 비슷한 기능을 제공하는 다른 도구로는 Wireshark나 Burp Suite와 같은 네트워크 분석 도구가 있으며, 이들은 네트워크 트래픽을 모니터링하고 분석하는 데 널리 사용됨.
Hacker News 의견
  • 법적인 측면에 대한 궁금증

    • 이러한 행위의 합법성에 대해 궁금해함.
    • 기술적으로 DCMA 위반일 것이라고 가정했었는데, 이 가정이 틀렸을 수도 있음을 의심함.
    • 법적으로 어떻게 가능한지에 대한 의문 제기.
  • 데컴파일 및 재컴파일 시도와 헌신

    • 비슷한 경로를 시도했으나 데컴파일/편집/재컴파일 단계에서 포기함.
    • 이러한 헌신에 대해 감탄하며, 이에 투자된 시간에 대해 궁금해함.
    • 자신은 시간 제한을 정하고 그것을 지킴.
  • 과거 기술의 상실

    • 과거 +Orc의 시절을 회상함.
    • 원치 않는 분기를 찾아서 제거하는 방법과 같은 당시의 지식이 대부분 잊혀짐.
    • 현재는 배워야 할 다른 기술들이 훨씬 많음.
  • 메타의 RE 방어와 관련된 관찰

    • 메타(특히 메신저)의 리버스 엔지니어링(RE) 방어가 상당히 관대함을 지적함.
    • 생산 빌드에서 IsUsingSandbox()를 제거하는 것이 간단할 것이라고 언급함.
    • 고급 난독화 기술을 사용하기 전에도 이러한 방어는 쉬울 것이라고 함.
  • 샌드박스 모드에서의 인증서 핀닝

    • 샌드박스 모드에서도 인증서 핀닝을 강제할 수 있는 방법에 대해 언급함.
    • 대학 시절 Snapchat의 트래픽을 중간자 공격(MitM)으로 가로채려고 시도했으나 실패한 경험을 회상함.
  • 런타임 바이너리 체크섬의 유용성

    • 런타임 바이너리 체크섬이 수정을 복잡하게 만드는 데 도움이 되었을지에 대한 질문.
    • 모바일 앱에서 일반적인 절차가 아닌지, iOS나 안드로이드 SDK가 이러한 기능을 제공하는지에 대한 의문.
    • 최종 해결책이 단순히 바이너리의 몇 바이트를 수정하는 것이었기 때문에 이를 방지할 수 있었을 것 같다는 생각.
  • 프록시 도구 사용에 대한 질문

    • 작성한 글에서 사용된 프록시 도구에 대한 질문.
    • 해당 도구가 실행 중일 때 모든 애플리케이션 트래픽을 라우팅하는지에 대한 궁금증.
  • 대형 기업 애플리케이션의 보안

    • 큰 기업들의 애플리케이션들이 완전히 난독화되지 않고, 수정된 바이너리의 실행을 거부하는 다른 보호 기능들을 포함하지 않는 이유에 대한 의문.
  • 메타 앱 트래픽 가로채기의 가능성

    • 메타 앱의 트래픽을 가로채는 것이 필요하지 않다고 주장함.
    • 메타의 버그바운티 교육 페이지 링크 제공.
  • 트래픽 모니터링의 중요성

    • 페이스북 앱이 마이크를 통해 사용자를 감시하고 타겟 광고를 보여준다는 음모론을 불식시키는 데 중요함을 강조함.
    • 앱과 페이스북 서버 간의 트래픽을 모니터링하여 이를 반박할 수 있는 가장 쉬운 방법이지만, 인증서 핀닝이 이를 방해함.
    • 음모론을 믿는 사람들을 설득하는 것은 어렵지만, 이러한 모니터링이 가능하다는 것을 아는 것이 중요함.