iOS 16.x에서 잠긴 Apple 메모 해독하기: 해시캣을 사용한 완벽한 포렌식 워크플로우(SQLite, CyberChef, Python)

소개

유명한 상용 모바일 포렌식 도구로 테스트 기기를 분석하던 중 "숨김"으로만 표시되는 잠긴 Apple 노트가 흥미로운 것을 발견했습니다. 이 도구는 노트의 요약("Lance"라는 레이블)을 보여주었지만 실제 콘텐츠는 보이지 않았습니다. 잠금 장치 아래에 무엇이 있는지 단서가 없었기 때문에 저는 그 안에 숨겨진 비밀을 밝혀낼 수 있을까 하는 의문이 들었습니다. 저는 iOS 16에서 Apple 노트를 해독하는 데 도움이 되는 워크플로우가 필요했습니다.

장치가 실행 중이었습니다. iOS 16.7.10그리고 NoteStore.sqlite 데이터베이스를 파헤친 결과, 모든 암호화 단서가 바로 거기서 해독되기를 기다리고 있다는 사실을 깨달았습니다. 저는 오픈 소스 도구의 도움을 받아 비밀번호를 복구하고 노트의 내용을 해독하기 시작했습니다.            

이 게시물에서는 완벽한 포렌식 워크플로 방법에 대해 iOS 16에서 Apple 메모 해독하기:

  • 🔓 해시캣 비밀번호 크래킹용
  • 🗄️ SQLite용 DB 브라우저 를 사용하여 암호화 매개변수를 탐색하고 추출합니다.
  • 🐍 Python 스크립트 키 파생 및 AES 키 언래핑을 위해
  • 🔍 사이버 셰프 를 사용하여 최종 프로토부프 페이로드를 복호화, 압축 해제 및 구문 분석합니다.

⚠️ 중요 참고 사항: 이 워크플로는 특히 다음에서 잠긴 Apple 노트에 적용됩니다. iOS 16.x. iOS 17부터 Apple은 암호화된 노트 저장 방식을 변경했으며, iOS 18은 더 많은 변화를 가져왔습니다.

잠긴 Apple 노트에 숨겨진 메시지를 살펴보고 그 속을 들여다보겠습니다.

NoteStore.sqlite 자세히 살펴보기

이 시점에서 저는 암호화된 노트의 콘텐츠가 NoteStore.sqlite, 특히 ZICNOTEDATA 테이블 안에 저장되어 있다는 것을 알았습니다. Apple은 종종 gzips 노트의 프로토비프 데이터이지만 잠긴 노트의 경우, 전체 BLOB이 먼저입니다. 암호화된-직접 압축 해제를 시도하면 읽을 수 있는 텍스트가 생성되지 않음을 의미합니다. 압축을 풀려면 올바른 암호 해독 키 를 사용하여 압축을 풀거나 프로토버프 파싱을 수행합니다.
SQLite DB 브라우저를 사용하여 애플 노트 iOS 16 암호 해독하기
잠긴 노트의 ZDATA 필드에 있는 암호화된 BLOB(SQLite용 DB 브라우저)

스크린샷에서 ZDATA의 원시 16진수 값을 볼 수 있습니다. 이 데이터는 다음과 같이 효과적으로 스크램블됩니다. AES 암호화를 사용하여 염 및 반복 횟수와 같은 중요한 메타데이터를 데이터베이스의 다른 부분에 저장할 수 있습니다. 에서 법의학 검사관 관점에서 노트가 완전히 암호화되어 있다는 것을 인식하면 다음과 같은 작업을 수행하는 데 필요한 매개변수를 찾기 위해 ZICCLOUDSYNCINGOBJECT 테이블을 자세히 살펴볼 단서가 됩니다. 균열 암호와 잠금 해제 메모 🔓.

iOS 16에서 잠긴 Apple 노트가 암호화된 이유는 무엇인가요?

Apple Notes는 다음과 같은 조합을 사용하여 잠긴 노트를 보호합니다. PBKDF2 (키 파생) 및 AES (암호화). 노트에서 비밀번호를 사용 설정하면 Apple은 데이터베이스에 주요 암호화 메타데이터를 저장합니다:

  • zcryptoiterationcount
  • Z크립토솔트
  • zcryptowrappedkey

이 값은 올바른 비밀번호를 가진 사람만이 노트의 콘텐츠를 해독할 수 있도록 합니다.

포렌식 접근 방식

포렌식 관점에서 보면 일반적으로 다음과 같은 단계를 거칩니다:

  1. 식별 ZICNOTEDATA와 ZICCLOUDSYNCINGOBJECT에서 관련 잠긴 노트 항목을 찾습니다.
  2. 추출 반복 횟수, 솔트, 래핑된 키와 같은 암호화 세부 정보입니다.
  3. 균열 를 사용하여 사용자의 비밀번호를 해시캣 (또는 존 더 리퍼나 패스웨어와 같은 다른 비밀번호 복구 도구).
  4. 파생 의 마지막 키 파이썬 또는 사이버셰프 그리고 암호 해독 노트의 BLOB.
  5. 압축 해제 잠금 해제된 프로토비프 데이터( 사이버셰프 또는 파이썬)를 클릭하여 최종 일반 텍스트를 표시합니다.

해시캣으로 잠긴 애플 노트의 암호 해독하기

제 목표는 현실적인 포렌식 시나리오를 시뮬레이션하는 것이었습니다. 잠긴 Apple 노트가 있고 콘텐츠를 해독하기 위해 암호를 복구해야 했습니다. 바로 여기에 해시캣 가 작동합니다. Apple 보안 노트 해시 모드(ID 16200), 해시캣은 올바른 비밀번호를 찾을 때까지 체계적으로 비밀번호를 시도합니다.

필수 열 추출하기

먼저 NoteStore.sqlite 를 실행하고 ZICCLOUDSYNCINGOBJECT 테이블에서 ZISPASSWORDPROTECTED = 1인 행을 대상으로 지정했습니다. 그런 다음 다음 열을 쿼리했습니다:

  • Z_PK - 노트의 고유 식별자입니다.
  • Z크립토솔트 - PBKDF2의 소금 값입니다.
  • ZCRYPTOWRAPPEDKEY - 나중에 래핑을 해제할 래핑된 키입니다.
해시캣에 필요한 매개변수에 대한 SQLite 쿼리

해시캣 입력 파일은 작은 Python 스크립트에 의해 생성되었습니다. notes_to_hashcat.py를 사용하여 이 값을 해시캣이 구문 분석할 수 있는 한 줄로 형식화하여 반복 횟수(ZCRYPTOITERATIONCOUNT에서 가져온)를 포함했습니다.

notes_to_hashcat.py는 iOS 16에서 잠긴 Apple Note 암호를 해독하는 데 필요한 매개 변수를 수집합니다.
notes_to_hashcat.py의 출력

해시캣을 실행하여 잠긴 Apple 노트 암호 해독하기

해시캣 입력 파일이 준비되고 사전이 준비된 상태에서 다음 명령을 실행했습니다:

hashcat -m 16200 -a 0
여기:
  • -m 16200은 Apple 보안 노트 모드를 지정합니다.
  • -0은 해시캣을 스트레이트(사전) 공격 모드로 설정합니다.
  • 사전은 다음과 같을 수 있습니다. rockyou.txt 또는 디바이스 아티팩트에서 파생된 사용자 지정 목록입니다.
해시캣을 사용하여 잠긴 Apple 노트 암호 해독하기
해독된 비밀번호를 공개하는 해시캣: 로열위드치즈

해시캣이 올바른 비밀번호인 royalewithcheese를 성공적으로 식별했습니다. 실제 조사에서는 사전이 훨씬 더 클 수 있지만, 이 결과를 통해 해스캣이 무거운 작업을 처리할 수 있음을 확인했습니다.

Apple 노트 암호 해독을 위한 키 암호화 키(KEK) 도출하기

비밀번호를 확보한 다음 단계는 다음 단계로 키 암호화 키(KEK)는 노트의 콘텐츠를 암호화하는 최종 AES 키를 감싸는 데 사용됩니다. KEK를 도출하려면 ZICCLOUDSYNCINGOBJECT 테이블에서 다음 값이 필요했습니다:

  • 암호 구문 (해독된 비밀번호)
  • 반복 횟수 (zcryptoiterationcount)
  • 소금 (Z크립토솔트)

예를 들어 DB 브라우저를 사용하여 쿼리해 보았습니다:

SELECT ZCRYPTOITERATIONCOUNT, ZCRYPTOSALT FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = ;
잠긴 Apple 노트의 암호를 해독하는 데 필요한 KEK를 얻는 데 필요한 소금 및 반복 횟수를 NoteStore.sqlite에 쿼리하기
반복 횟수: 20000 | 소금: d1afa96252a15d8d58827bcb21940de1

다음으로, 제가 즐겨 사용하는 도구인 CyberChef(🛠️)를 열고 'PBKDF2 키 파생' 작업을 드래그했습니다. 해싱 함수를 다음과 같이 설정합니다. SHA-256 를 입력하고 암호, 소금 및 반복 횟수를 입력하면 CyberChef는 다음을 생성합니다. 16바이트 KEK:

CyberChef는 Apple Note 복호화를 위해 PBKDF2 매개변수에서 KEK를 도출하는 데 사용됩니다.
KEK: a1dac1516302e1d3d73ad4fd4b6f8fef

이 프로세스를 자동화하기 위해 다음과 같은 Python 스크립트를 만들었습니다. get_key.py는 데이터베이스 경로, 노트 PK, 비밀번호를 인수로 받습니다. 이 함수를 실행하면 KEK가 16진수로 반환됩니다.

python get_kek.py NoteStore.sqlite

결과:
참고 PK=16: KEK(16진수) = a1dac1516302e1d3d73ad4fd4b6f8fef

iOS 16에서 잠긴 Apple 노트의 암호를 풀기 위한 AES 키 풀기

다음 단계는 키 풀기 노트의 콘텐츠를 암호화하는 데 사용됩니다. 래핑된 키는 ZICCLOUDSYNCINGOBJECT의 ZCRYPTOWRAPPEDKEY 열에 저장됩니다. 예를 들어, 다음과 같이 쿼리했습니다:

SELECT ZCryptowrappedKEY FROM ZICCLOUDSYNCINGOBJECT WHERE Z_PK = 16;
iOS16에서 앱 노트를 해독하는 데 필요한 unwrapped.key에 대한 SQLite 쿼리
래핑된 키: 78c2b79c3e357117c95feb882009e14be9e5f88598ea6db0

포장 풀기 옵션

옵션 1: CyberChef를 사용하여 iOS 16에서 잠긴 Apple 메모의 암호 해독을 위한 AES 키 풀기

이전 작업을 모두 비활성화하고 "AES 키 언랩"을 검색한 다음 레시피 창으로 드래그했습니다. KEK와 래핑된 키를 붙여넣으면 CyberChef가 래핑 해제된 AES 키를 출력합니다.

iOS 16에서 Apple Notes 복호화를 위해 KEK를 도출하고 AES 키를 언래핑하는 데 사용되는 CyberChef
풀린 키: 4b1f0c718aa05a0d097d7bf4865c89d1

옵션 2: unwrap.py로 AES 키 언랩 자동화하기

또한 다음과 같은 Python 스크립트를 개발했습니다. unwrap.py 데이터베이스 경로와 KEK(16진수)를 인수로 사용하는 스크립트입니다. 이 스크립트를 실행하면 키의 래핑이 해제되고 16진수 형식으로 인쇄됩니다. 제 경우에는 언래핑된 키가 다음과 같았습니다:

python unwrap.py NoteStore.sqlite
잠긴 Apple 노트의 암호 해독된 AES 키를 보여주는 Python 스크립트 unwrap.py
풀린 키: 4b1f0c718aa05a0d097d7bf4865c89d1

잠긴 Apple 노트의 콘텐츠를 해독하는 데 사용되는 최종 AES 키입니다.

iOS 16에서 AES-GCM을 사용하여 Apple Notes BLOB 해독하기

이제 암호를 풀었으니, 이제 Apple Notes BLOB에 저장된 ZICNOTEDATA 테이블로 이동합니다. Apple 사용 GCM 모드의 AES 잠긴 노트의 내용을 보호하기 위해 네 가지 필수 구성 요소가 필요했습니다:

  • 🔑 래핑 해제된 AES 키

  • 🔁 초기화 벡터(IV) 에서 zcryptoinitializationvector

  • 🏷 GCM 인증 태그 에서 ZCRYPTOTAG

  • 💾 암호화된 BLOB 에서 ZDATA

📤 NoteStore.sqlite에서 IV 및 GCM 태그 추출하기

위치를 찾으려면 IV 그리고 GCM 태그를 열고 ZICNOTEDATA 테이블로 이동합니다. 이러한 필드는 바이너리 값으로 저장되고 ZICNOTEDATA 또는 ziccloudsyncingobject 테이블을 사용합니다. 둘 다 동일한 열 이름으로 데이터를 저장합니다.

  • IV: 5c0c0bde9b6801747ddad1115a422d05

  • GCM 태그: b9087ba19e3c7deff2cb4b9b51e6aafa

암호화된 BLOB 자체도 ZDATA 열에 복사합니다. 세 값을 모두 16진수 형식으로 복사하여 최종 암호 해독 단계를 준비했습니다.

초기화 벡터입니다: 5c0c0bde9b6801747ddad1115a422d05
AES-GCM 복호화에 사용되는 GCM 태그를 보여주는 DB 브라우저
GCM 태그: b9087ba19e3c7deff2cb4b9b51e6aafa
암호화된 Apple Note BLOB 데이터가 강조 표시된 DB 브라우저
암호화된 BLOB

🧪 CyberChef로 노트 암호 해독하기

모든 것이 준비된 후, 저는 사이버 셰프. 이 도구를 사용하면 모든 매개변수를 쉽게 결합하여 원본 콘텐츠를 표시할 수 있습니다. 제가 한 작업은 다음과 같습니다:

  1. 나는 "AES 해독" 작동합니다.

  2. 나는 래핑되지 않은 AES 키 를 키 필드에 입력합니다.

  3. 나는 모드를 GCM으로.

  4. 나는 IV 및 GCM 태그 를 각자의 분야에 적용합니다.

  5. 마지막으로 암호화된 BLOB 를 입력창에 입력합니다.

일단 Bake를 클릭하자 CyberChef가 BLOB를 해독하고 제가 예상한 대로 압축된 파일을 보여주었습니다. 이제 암호화 계층이 완전히 제거되었으므로 데이터 압축을 풀 수 있었습니다.
AES-GCM 모드를 사용하여 Apple Notes BLOB을 해독하는 CyberChef 레시피
해독된 GZIP 파일

최종 노트의 압축 풀기 및 파싱(Apple 노트에서 해독된 프로토뷰)

AES로 암호화된 BLOB을 해독한 후, 출력을 다음과 같은 파일에 저장했습니다. 디크립티드_블롭.bin 를 클릭하고 HxD로 열었습니다. 파일 서명 0x1F8B08 GZIP 압축 파일임을 확인했습니다. Apple은 이를 사용하여 프로토뷰 데이터를 압축합니다.

일반 텍스트를 추출하기 위해 CyberChef를 다시 열고 Gunzip 작업을 워크플로에 추가했습니다. 즉시 익숙한 문자열이 출력에 나타나기 시작했습니다.

GZIP 추출 후 압축 해제된 Apple Notes 프로토비프 데이터를 보여주는 CyberChef
사이버셰프에서 압축 해제된 프로토부프

압축을 풀고 나서 프로토부프 디코딩 를 입력했습니다. 그 결과 잠긴 Apple 노트의 내용을 나타내는 키와 값이 있는 JSON과 유사한 구조화된 보기가 만들어졌습니다.

JSON과 유사한 형식의 Apple Notes 프로토뷰 디코딩된 구조의 CyberChef 보기
사이버셰프에서 디코딩된 프로트뷰프

더 쉽게 읽을 수 있도록 파이썬 스크립트도 사용했습니다. 백박스프로토비프 모듈을 사용하여 프로토뷰 파일을 구문 분석하고 사람이 읽을 수 있는 깔끔한 형식으로 출력을 인쇄합니다.

백박스프로토비프 파이썬 스크립트를 사용하여 구문 분석된 Apple Note 콘텐츠를 보여주는 명령 프롬프트
깔끔하게 서식이 지정된 결과를 화면에 인쇄

이는 사용자가 잠긴 Apple 노트에 입력한 내용과 일치합니다. 암호로 보호된 숨겨진 항목에서 실제 일반 텍스트 메시지로 전환한 것으로, 모든 포렌식 사건에서 매우 귀중한 발견입니다.

잠긴 Apple 노트 콘텐츠의 UFADE를 사용한 스크린샷

🔚 마무리

축하합니다 🎉 - 방금 다음과 같은 전체 포렌식 워크플로우를 완료하셨습니다. iOS 16에서 잠긴 Apple 노트 암호 해독. SQLite 데이터베이스에서 암호화 매개 변수를 추출하고 다음을 사용하여 암호를 해독했습니다. 해시캣를 사용하여 AES 키를 파생하고 래핑을 해제합니다. Python를 사용하여 프로토버프를 해독하고 구문 분석했습니다. 사이버 셰프. 각 단계를 거치면 노트의 숨겨진 콘텐츠가 노출되는 데 가까워집니다.

이 실습을 통해 얼마나 강력한지 확인할 수 있습니다. 오픈 소스 도구 는 디지털 포렌식 분야에서 활용될 수 있습니다. 특히 다음이 실행되는 기기에서 상용 도구가 놓칠 수 있는 암호화된 Apple 노트를 발견하는 데 도움이 됩니다. iOS 16 이전 버전.

🕵️ 보너스: 비밀번호 힌트

여기에 또 다른 반전이 있습니다. 비밀번호 힌트 에서 ziccloudsyncingobject 테이블:

쿼터 파운더

이 디바이스는 '빈센트'라는 사람의 소유였기 때문에 비밀번호를 추측하는 것은 어렵지 않았습니다: 로얄위드치즈 - 에 고개를 끄덕입니다. 펄프 픽션. 실제 사례에서 이와 같은 비밀번호 힌트를 전략적인 크래킹 프로세스와 결합하면 워크플로우를 가속화할 수 있습니다.

📱 한 가지 더... iOS 17 및 iOS 18에 대하여

이 가이드는 특히 암호 해독 방법에 적용됩니다. iOS 16 및 이전 버전의 Apple 참고 사항. 부터 시작 iOS 17에서 Apple은 노트 암호화 프로세스에 중요한 변경 사항을 도입했습니다. 키 파생 필드가 누락되거나, 암호화 구조가 달라지거나, 더 이상 동일한 방법으로 암호 해독이 되지 않는 노트가 발생할 수 있습니다.

다음과 같은 방법을 찾고 있다면 iOS 17 또는 iOS 18에서 Apple 노트 암호 해독하기협업하고 싶어요. 새로운 암호화를 함께 분석하여 결과를 공유해 보세요.

읽어주셔서 감사합니다! 질문이나 인사이트가 있으신가요? 아래 댓글에 남기거나 직접 문의해 주세요. 포렌식 검색의 경계를 계속 넓혀가도록 노력합시다. 🔍

Facebook
트위터
이메일
인쇄

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다