소개
여기에 공개 익스플로잇(Public Exploit) 분석이나 제 1day 익스플로잇 일부를 게시할 예정입니다.
[ 공개 익스플로잇 분석 ]
- 개인적으로 공개 익스플로잇을 배우는 가장 좋은 방법은 익스플로잇을 완전히 이해할 때까지 한 줄 한 줄 이해하는 것이라고 생각합니다. 저는 이러한 (과도하게 주석이 달린 ;) ) 익스플로잇 중 일부를 게시하여 다른 사람들도 배울 수 있기를 바라며, 커뮤니티에 조금이나마 환원하려는 시도를 합니다. 또한 문서화 목적도 있습니다. 이런 것들은 시간이 지나면 제 머릿속에서 희미해지기 때문입니다.
CVE-2016-8655
- rebel의 익스플로잇에 대한 상세 분석입니다.
- 멋진 익스플로잇을 만들어 주신 rebel 님께 감사드립니다! :D
CVE-2016-5342
mp3 버전
tty 버전
- freener의 Android LPE 익스플로잇에 주석을 단 버전입니다.
- arm32
- 힙 오버플로우
- 이 익스플로잇은 다른 객체의 객체 포인터를 덮어씁니다. ret2dir 공격을 사용하여 손상된 포인터가 익스플로잇 페이로드를 보유한 커널의 예측 가능한 고정 주소를 가리키도록 만듭니다. 이 익스플로잇 기술은 PXN 및 PAN을 우회합니다.
CVE-2016-2434
- Jianqiang Zhao의 Android LPE 익스플로잇에 주석을 단 버전입니다.
- arm64
- 임의 주소의 16바이트를 0으로 만듭니다.
- 이 익스플로잇은 커널의 고정 주소에 위치한 유용한 전역 객체의 16바이트를 지워버립니다.
- 전역 객체 내부의 손상된 객체 포인터는 사용자 영역의 익스플로잇 페이로드를 참조합니다. 이러한 종류의 공격은 PAN(PAN 에뮬레이션 포함)이 장착된 기기/커널에서는 작동하지 않습니다.
- extra_recipe 탈옥을 이해하려는 제 시도입니다.
- 저는 특히 kpp 우회 부분에 관심이 많았습니다. 우회에 대해 막연한 이미지를 얻을 수 있는 슬라이드가 몇 개 있었지만, 세부 사항을 파고들어 코드 내부에서 실제로 무엇이 일어나는지 확인하고 싶었습니다.
- 또한 탈옥의 최종 요소(Cydia 설치 등)를 이해하고 싶었습니다.
yalu102 (ViewController.m)
- 실제 버그와 관련된 부분과 그것이 어떻게 익스플로잇되었는지에 주석을 달았습니다.
- 원본 익스플로잇 대신 yalu102를 살펴본 이유는 포트-펭-슈이(port-feng-shui) 기술이 더 깔끔하고 이해하기 쉬워 보였기 때문입니다.
- 분석은 kpp 우회 직전에서 멈춥니다.
- 다양한 숫자 오프셋에 대한 정보가 조금 더 있었기 때문에 여기로 넘어갑니다.
- 또한 yalu102에는 객체 파일만 있는 반면, 여기에는 patchfinder.c가 온전히 존재합니다.
- cydia 부분은 다소 불완전해서 kpp 이후에 cydia 브랜치로 넘어갑니다.
- tfp0 및 익스플로잇 이후(post-exploitation) 탈옥의 구성 요소를 이해하려고 시도합니다.
empty_list (sploit.c)
- Ian Beer의 empty_list 커널 익스플로잇에 대한 상세 분석입니다.
- 매우 약한 프리미티브에서 시작하여 더 강력한 AAR을 구축하고, 마침내 완전한 기능을 갖춘 task port를 구축하는 놀라운 기술을 사용합니다. 익스플로잇 코드 뒤에 숨은 포트 매직은 믿을 수 없을 정도입니다. 이 모든 것이 8개의 NULL 바이트 힙 오버플로우로 이루어집니다. 정말 경이롭습니다.
- 신뢰성을 개선하기 위한 몇 가지 기초적인 아이디어를 끄적여 보았습니다. 누군가가 향후 더 안정적인 버전의 익스플로잇을 공개하기를 바랍니다. :)
- 놀라운 익스플로잇을 만들어 주신 Ian Beer 님께 감사드립니다!
CVE-2018-4233
- @niklas_b의 iOS Webkit 익스플로잇에 주석을 단 버전입니다.
- 매우 명확하고 간결하며 철저하게 주석이 달린 분석 글을 작성해 주신 kudima(@begger_dd) 님께 큰 감사를 드립니다! :)
- 그 분석 글은 JIT 타입 혼동 버그, 박싱/언박싱 변환의 일부 제한 사항(불안정성을 유발할 수 있음), 그리고 초기/후기 AAR/AAW 프리미티브가 구성되는 방식에 대한 상세한 안내를 설명합니다. 또한 최근 완화 조치(인덱스 마스킹, ArrayBuffer 백킹 스토어 포이즈닝, W^X JIT 메커니즘의 일부 변경, JSObject 구조 변경 등) 이후 익스플로잇 기술의 변화에 대한 통찰력도 제공합니다.
jsc_ConcatMemcpy_infoleak
- kudima의 WebKit 정보 누출 익스플로잇(2018.8.27에 패치됨)에 주석을 단 버전입니다.
- 이는 lokihardt가 보고한 버그 중 하나의 불완전한 수정에서 비롯되었습니다. lokihardt의 보고서에 대한 패치는 Double -> Object 타입 혼동 프리미티브를 수정했지만, 반대 방향인 Object -> Double은 수정하지 않았습니다.
- 단일 객체와 마커를 포함하는 버터플라이를 webkit 힙에 스프레이한 다음, 나중에 concat 버그를 트리거하여 여러 double 배열의 큰 부분을 초기화되지 않은 힙 데이터로 채웁니다. 초기화되지 않은 버그성 concat으로 생성된 double 배열을 반복하면서 이전에 스프레이한 객체의 주소를 찾아 누출합니다.
- 멋진 익스플로잇과 분석 글을 다시 한번 제공해 주신 kudima(@begger_dd) 님께 감사드립니다! :)
[ 1Day ]
CVE-2017-2547
- 어느 날 Zer0con 2018에서 발표된 singi의 익스플로잇을 살펴본 후, 이를 개선하기로 결정했습니다.
- 이는 pwnjs에 통합하기 전의 독립 실행형 버전의 익스플로잇입니다.
- 개선 사항은 다음과 같습니다.
- 신뢰성 향상(오염된 메모리로 광범위한 브라우징 세션 후에도 완벽하게 작동)
- 다양한 브라우저 버전과 호환되도록 모든 하드코딩된 오프셋 제거
- 다른 익스플로잇 기술 사용(표준 misalign 기법)
- 최종적으로 webkit 프로토타입을 만들어 pwnjs 프레임워크에 통합
- 코드를 훨씬 더 읽기 쉽게 만들고 많은 주석 추가
- 특별 감사
- 놀라운 phrack 기사와 공개 익스플로잇을 제공한 qwertyoruiop & Samuel Grob
- 훌륭한 pwnjs 프레임워크를 만든 Brian Pak & Andrew Wesie!