GN⁺: macOS에서 메타의 메신저 인증서 핀닝 해킹
(texts.blog)메타의 메신저 인증서 핀닝 깨기 (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가 이러한 기능을 제공하는지에 대한 의문.
- 최종 해결책이 단순히 바이너리의 몇 바이트를 수정하는 것이었기 때문에 이를 방지할 수 있었을 것 같다는 생각.
-
프록시 도구 사용에 대한 질문
- 작성한 글에서 사용된 프록시 도구에 대한 질문.
- 해당 도구가 실행 중일 때 모든 애플리케이션 트래픽을 라우팅하는지에 대한 궁금증.
-
대형 기업 애플리케이션의 보안
- 큰 기업들의 애플리케이션들이 완전히 난독화되지 않고, 수정된 바이너리의 실행을 거부하는 다른 보호 기능들을 포함하지 않는 이유에 대한 의문.
-
메타 앱 트래픽 가로채기의 가능성
- 메타 앱의 트래픽을 가로채는 것이 필요하지 않다고 주장함.
- 메타의 버그바운티 교육 페이지 링크 제공.
-
트래픽 모니터링의 중요성
- 페이스북 앱이 마이크를 통해 사용자를 감시하고 타겟 광고를 보여준다는 음모론을 불식시키는 데 중요함을 강조함.
- 앱과 페이스북 서버 간의 트래픽을 모니터링하여 이를 반박할 수 있는 가장 쉬운 방법이지만, 인증서 핀닝이 이를 방해함.
- 음모론을 믿는 사람들을 설득하는 것은 어렵지만, 이러한 모니터링이 가능하다는 것을 아는 것이 중요함.