
iOS 및 macOS 애플리케이션 내에서 SSL 인증서 검증(인증서 핀닝 포함)을 비활성화하는 블랙박스 도구
iOS 및 macOS 애플리케이션 내에서 SSL/TLS 인증서 검증(인증서 핀닝 포함)을 비활성화하는 블랙박스 도구입니다. https://github.com/iSECPartners/ios-ssl-kill-switch 의 두 번째 버전입니다.
iOS 또는 macOS 애플리케이션에 로드되면 SSL Kill Switch 2는 SSL/TLS 연결 처리를 담당하는 저수준 함수들을 패치하여 시스템의 기본 인증서 검증과 인증서 핀닝과 같은 모든 종류의 사용자 정의 인증서 검증을 재정의하고 비활성화합니다.
Apple App Store를 포함하여 인증서 핀닝을 구현하는 다양한 애플리케이션에서 성공적으로 테스트되었습니다. SSL Kill Switch의 첫 번째 버전은 2012년 Black Hat Vegas에서 발표되었습니다.
지원이 확인된 가장 최신 iOS 버전은 14.2입니다.
iOS에서 SSL Kill Switch 2는 탈옥된 기기의 Cydia Subtrate 트윅으로 설치할 수 있습니다.
SSL Kill Switch 2를 설치하면 기기와 같은 네트워크에 있는 누구나 모든 SSL 또는 HTTPS 연결에 대해 쉽게 중간자 공격을 수행할 수 있습니다. 즉, 이메일, Safari에서 보는 웹사이트, 기기에서 실행 중인 모든 앱이 다운로드하는 기타 데이터에 접근하는 것이 매우 쉬워집니다.
Cydia를 사용하여 다음 의존성을 설치해야 합니다:
그런 다음 SSL Kill Switch 2 GitHub 페이지의 release 탭에서 제공되는 최신 사전 컴파일 패키지를 다운로드하세요. 기기에 복사하고 설치한 후 기기를 respring하세요:
dpkg -i <package>.deb
killall -HUP SpringBoard
기기의 설정에 확장 기능을 활성화할 수 있는 새 메뉴가 나타납니다. 마지막으로 테스트하려는 앱을 종료하고 다시 시작하세요.
이 트윅은 나중에 다음 명령으로 제거할 수 있습니다:
dpkg -r com.nablac0d3.SSLKillSwitch2
많은 사람들이 SSL Kill Switch 2를 사용하여 App Store의 트래픽을 가로채는 방법을 문의했습니다. 이전에 몇 가지 지침을 작성해 두었지만 지금은 구식입니다: http://nabla-c0d3.github.io/blog/2013/08/20/intercepting-the-app-stores-traffic-on-ios/
기본적으로 SSL Kill Switch는 Charles Proxy iOS 앱을 방해하므로 이를 사용하여 네트워크 트래픽을 프록시할 수 없습니다. 이 문제를 해결하려면 SSL Kill Switch 구성의 제외 번들 ID 목록에 Charles Proxy 앱(com.xk72.Charles)을 추가하세요:

빌드에는 Theos 스위트가 설치되어 있어야 하며, http://www.iphonedevwiki.net/index.php/Theos/Getting_Started 에서 확인할 수 있습니다.
그런 다음 SSL Kill Switch 2의 루트 폴더에서 theos 설치 경로에 대한 심볼릭 링크를 만듭니다:
ln -s /<path_to_your_theos_folder> theos
dpkg가 설치되어 있는지 확인하세요. Homebrew가 있다면 다음을 사용하세요:
brew install dpkg
그런 다음 다음 명령을 사용하여 SSL Kill Switch 2 Debian 패키지를 빌드할 수 있습니다:
make package
SSL Kill Switch 2는 프로세스에 주입할 동적 라이브러리로 macOS 애플리케이션에서 사용할 수 있습니다.
macOS에서 SSLKillSwitch 라이브러리는 SSL 핀닝을 비활성화해야 하는 프로세스에 수동으로 주입해야 합니다. 주입되면 SSL 검증을 자동으로 재정의하고 비활성화합니다.
이를 수행하는 방법은 여러 가지가 있습니다:
LLDB로 프로세스를 시작하거나 Xcode의 Debug->Attach to process에서 일시 중지한 다음 dlopen()을 사용하여 SSLKillSwitch를 로드합니다:
(lldb) expr (void*)dlopen("/path/to/build/SSLKillSwitch.framework/Versions/A/SSLKillSwitch", 1)
예상 결과는 0이 아닌 포인터입니다:
(void *) $1 = 0x00007f92e74d10c0
0 포인터를 받았다면 코드 서명을 활성화하고 프로파일링용으로 빌드한 다음 release 폴더의 바이너리를 사용해야 할 수 있으며, 바이너리를 앱의 리소스 폴더에 복사해야 할 수도 있습니다. 이 경우 샌드박스 읽기 위반이 콘솔에 출력되었을 것입니다. 새 버전의 바이너리를 테스트하려면 앱을 종료하고 다시 로드해야 합니다.
DYLD_INSERT_LIBRARIES를 사용하여 SSLKillSwitch를 주입하고 프로세스를 시작합니다.
TBD
Xcode 프로젝트를 사용하여 macOS용 SSL Kill Switch 2를 빌드하세요. 컴파일된 라이브러리는 _Products/SSLKillSwitch.framework/Versions/A/SSLKillSwitch_에서 확인할 수 있습니다. 이것이 SSL 핀닝을 비활성화하려는 프로세스에 주입해야 하는 바이너리입니다.
MIT - ./LICENSE 참조.
Alban Diquet - @nabla_c0d3