# macOS에서 메타의 메신저 인증서 핀닝 해킹

> Clean Markdown view of GeekNews topic #13677. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13677](https://news.hada.io/topic?id=13677)
- GeekNews Markdown: [https://news.hada.io/topic/13677.md](https://news.hada.io/topic/13677.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-03-06T19:36:14+09:00
- Updated: 2024-03-06T19:36:14+09:00
- Original source: [texts.blog](https://texts.blog/2024/02/20/cracking-metas-messenger-certificate-pinning-on-macos/)
- Points: 1
- Comments: 1

## Topic Body

### 메타의 메신저 인증서 핀닝 깨기 (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와 같은 네트워크 분석 도구가 있으며, 이들은 네트워크 트래픽을 모니터링하고 분석하는 데 널리 사용됨.

## Comments



### Comment 23529

- Author: neo
- Created: 2024-03-06T19:36:14+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39609336) 
- 법적인 측면에 대한 궁금증
  - 이러한 행위의 합법성에 대해 궁금해함.
  - 기술적으로 DCMA 위반일 것이라고 가정했었는데, 이 가정이 틀렸을 수도 있음을 의심함.
  - 법적으로 어떻게 가능한지에 대한 의문 제기.

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

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

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

- 샌드박스 모드에서의 인증서 핀닝
  - 샌드박스 모드에서도 인증서 핀닝을 강제할 수 있는 방법에 대해 언급함.
  - 대학 시절 Snapchat의 트래픽을 중간자 공격(MitM)으로 가로채려고 시도했으나 실패한 경험을 회상함.

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

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

- 대형 기업 애플리케이션의 보안
  - 큰 기업들의 애플리케이션들이 완전히 난독화되지 않고, 수정된 바이너리의 실행을 거부하는 다른 보호 기능들을 포함하지 않는 이유에 대한 의문.

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

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