1P by GN⁺ 4시간전 | ★ favorite | 댓글 1개
  • 메시징 앱에서 삭제되었거나 자동 소멸된 메시지가 알림 캐시에 남아 포렌식 도구로 읽힐 수 있었고, Apple이 iPhone과 iPad용 소프트웨어 업데이트로 이를 수정함
  • 메시지 내용이 표시된 알림은 기기에 최대 한 달 동안 저장될 수 있었으며, Apple 보안 공지에는 삭제 대상으로 표시된 알림이 예상치 않게 유지될 수 있었다고 적혀 있음
  • 이 추출 경로는 삭제된 Signal 메시지가 휴대폰 데이터베이스에 남아 있던 방식과 연결되며, 법 집행 기관은 오래전에 삭제된 메시지도 읽을 수 있었음
  • Signal은 이 문제 공개 뒤 Apple에 수정을 요청했으며, 자동 삭제 타이머 기능은 기기 압수 상황에서도 대화를 비밀로 유지하려는 사용자에게 도움이 될 수 있음
  • 앱 내부 삭제만으로는 운영체제 수준의 알림 저장소에서 같은 내용이 사라지지 않을 수 있었고, 이번 수정은 자동 삭제 메시지의 프라이버시 보호에서 OS 계층도 중요함을 드러냄

버그 수정과 영향

  • Apple이 iPhone과 iPad용 소프트웨어 업데이트를 배포해, 법 집행 기관이 메시징 앱에서 삭제되었거나 자동 소멸된 메시지를 추출할 수 있게 했던 버그를 수정함
    • 메시지 내용이 표시된 알림(notification) 이 기기에 최대 한 달 동안 캐시되면서 이런 문제가 발생했음
  • Apple의 보안 공지에는 삭제 대상으로 표시된 알림이 기기에 예상치 않게 유지될 수 있었다고 적혀 있음
  • 알림 내용이 왜 처음부터 기록됐는지는 확인되지 않음
    • 이번 수정으로 그 현상이 버그였음이 드러남
  • Apple은 왜 알림이 보존됐는지 묻는 질의에 즉시 답하지 않았음
  • Apple은 구형 iOS 18을 실행하는 iPhone과 iPad에도 수정 사항을 백포트함

드러난 추출 경로

  • 이번 수정은 이달 초 404 Media가 공개한 문제와 직접 연결됨
    • FBI는 포렌식 도구를 사용해 누군가의 iPhone에서 삭제된 Signal 메시지를 추출할 수 있었음
  • 추출이 가능했던 이유는 메시지 내용이 한때 알림으로 표시된 뒤, Signal 내부에서 메시지가 삭제된 이후에도 휴대폰 데이터베이스 안에 저장되어 있었기 때문임
  • 법 집행 기관은 포렌식 도구를 사용할 때, 오래전에 삭제된 메시지도 읽을 수 있었음

Signal과 삭제 메시지 기능

  • Signal의 Meredith Whittaker는 이 문제가 공개된 뒤 Apple에 수정 조치를 요청했다고 밝힘
    • 삭제된 메시지에 대한 알림은 어떤 운영체제의 알림 데이터베이스에도 남아 있어서는 안 된다고 적었음
  • Signal은 WhatsApp 등 다른 메시징 앱과 마찬가지로, 일정 시간이 지나면 메시지를 자동 삭제하는 타이머 기능을 제공함
  • 이 기능은 당국이 기기를 압수하는 경우에도 대화를 비밀로 유지하려는 사용자에게 도움이 될 수 있음

프라이버시 우려

  • FBI가 매일 사용되는 보안 기능을 우회하는 경로를 찾았다는 사실이 알려지자 프라이버시 활동가들의 경각심이 커졌음
  • 자동 삭제 메시지 기능은 특히 위험에 노출된 사용자들이 일상적으로 사용하는 보안 수단에 해당함
  • 이번 버그는 앱 내부에서 메시지를 삭제해도 운영체제 수준의 알림 저장소에 같은 내용이 남을 수 있음을 드러냄
Hacker News 의견들
  • 이건 기기에 캐시가 남는 버그였다고 봄. 다만 Apple과 Google이 대부분의 알림 흐름 한가운데 들어가 있어서 내용이 서버를 지나가는 구조 자체는 여전히 우려스러움. 그래서 종단간 암호화된 메시지를 남에게 덜 노출하고 싶다면, 알림에는 새 메시지 도착 정도만 보이게 하고 내용이나 발신자는 숨기는 설정이 맞다고 봄
    • 나는 이 설명이 두 가지 점에서 틀렸다고 봄. 첫째 이번 이슈는 OS가 알림을 기기 로컬에 추적 저장한 문제이지 Google이나 Apple의 알림 서버 문제는 아님. 둘째 알림이 Apple이나 Google 서버를 거치더라도 데이터 자체를 암호화하거나 메시지 본문을 빼면 E2EE를 유지할 수 있음. 실제로 Signal도 그런 식이라 Apple이나 Google이 평문 메시지를 보는 구조는 아님
    • 내 생각엔 Apple과 Google 모두 앱이 표시 전에 메시지를 가로채 수정할 수 있는 기능을 제공함. 그래서 암호화된 알림을 보내고, 사용자 기기에서 앱 코드로 복호화해 표시하면 됨
    • 맞는 말이라고 봄. 서버는 알림만 보내고, 실제로는 기기 로컬에서 잠금 해제 후 읽은 메시지와 조합해 표시하면 되니, 굳이 Apple이나 Google 서버에 평문이 갈 필요는 없다고 느낌
    • 내가 최근 읽은 Matrix FAQ 기준으로는 저 설명이 정확하지 않다고 봄. Matrix 앱에서는 일부 메타데이터만 채팅 서버에서 푸시 서버를 거쳐 Google을 통해 내 기기로 오고, 메시지 본문은 E2EE 상태로 남음. 앱은 메타데이터 알림으로 깨어난 뒤 실제 메시지를 다시 가져와 알림에 표시함. 마지막 지적처럼 Android 쪽도 고쳐지기 전까지는 로컬 보관 문제는 남는다고 봄
    • 이 경우에는 맞게도 Google과 Apple의 OS 알림 API를 쓰면서 우리가 평문 메시지를 넘겨준 셈이라고 봄
  • 기사에서 말하는 버그는 문제의 일부일 뿐이라고 봄. 핵심은 알림 텍스트가 Signal 바깥에서 휴대폰 DB에 저장된다는 점이고, 이걸 피하려면 설정을 바꿔야 함. 이번 사례에서는 피고인이 Signal 앱 자체를 지웠고, 원래라면 그 앱 알림도 내부적으로 삭제 표시가 됐어야 하는데 제거되지 않은 점이 이번 수정 사항으로 보임. 공개된 내용의 핵심은 삭제 대상으로 표시된 알림이 예상 밖으로 기기에 남을 수 있었다는 점이고, 설명상으로는 logging issue라서 DB 본체보다는 로그 쪽에 남았을 가능성도 있어 보임
    • 내가 본 바로는 이게 로그만이 아니라 logs, json, plist, SQLite DB까지 걸친다는 뉘앙스였음. Biome의 /private/var/mobile/Library/Biome/streams/.../Notification/segments/에는 제목과 본문 원시 로그가 있고, BulletinBoard와 UserNotificationsCore의 /var/mobile/Library/{BulletinBoard,UserNotificationsCore}/에는 전달됨과 닫힘 상태의 json, plist가 있으며, CoreDuet의 /var/mobile/Library/CoreDuet/coreduetdClassD.db에는 Biome 이벤트를 다시 집어넣는 SQLite가 있다고 봄. 출처는 이 트윗
    • 나는 그 해석이 아직 추측이라고 봄. 삭제 대상으로 표시됐다는 말은 앱 전체를 지운 뒤만이 아니라, 사용자가 알림을 닫은 뒤를 뜻할 수도 있음
    • 내 머릿속에는 SQLite WAL 가능성도 먼저 떠오름
    • 나는 둘이 사실상 같은 문제일 수도 있다고 봄. 왜 굳이 별개라고 보는지 궁금함
  • 내 생각엔 Signal이 제공하는 일반형 알림인 “메시지를 받음” 같은 방식이 전반적으로 좋은 보안 습관임
    • 사실 이런 건 거의 모든 앱에서 가능함. iOS 설정의 notifications shows previews를 never로 바꾸면 됨
  • 나는 Signal이 이 문제를 사용자에게 적극적으로 알리지 않는 점이 꽤 답답함. 나는 알림을 꺼뒀는데도 Signal은 다시 켜라고만 리마인드했음
  • 이걸 보면 Mythos 관련해 제일 큰 걱정이 취약점 발견인지, 아니면 취약점 수정인지 되묻게 됨
  • 처음엔 나도 좀 헷갈렸음. 푸시 알림이 종단간 암호화되어 있으니 푸시 서비스가 읽을 수 있는 형태로 캐시할 수 없고, 기기에서 앱이 받은 뒤 복호화한다고 생각했기 때문임. 그런데 실제로는 앱이 복호화해 OS API로 사용자에게 보여준 뒤, 그 알림 텍스트가 기기 로컬의 어떤 알림 히스토리 DB 같은 곳에 다시 저장된 것으로 보임
    • 나도 대략 그런 종류의 동작으로 이해함
    • 내가 보기엔 Apple과 Google의 푸시 아키텍처에서는 메타데이터 상당수가 평문임
  • 프라이버시 쪽에서는 이 문제가 원래부터 꽤 알려져 있었다고 봄. Google과 Apple이 종종 알림 내용을 자기 서버로 보내기 때문에 앱의 경계를 우회하는 일이 생김. 비슷한 범주의 설명으로는 이 글도 참고할 만함
    • 나는 Signal이 Apple로 보내기 전에 알림 데이터를 사전 암호화하고, 기기에서는 Notification Service Extension으로 복호화할 거라고 예상함. 이건 Apple을 신뢰하지 않기 위한 흔한 패턴이라, 결국 Apple이 아니라 기기 쪽에서 복호화 후 평문이 저장된 셈이라고 봄
    • 이번 보고 사례에서는 내용이 서버를 떠난 게 아니라, 연방 수사기관이 휴대폰에서 직접 가져간 것으로 이해함
    • 나는 Snapchat이나 WhatsApp 같은 메신저도 함께 떠오름. WhatsApp은 end-to-end를 말하지만, 키워드 기반으로 일부 메시지 사본을 당국에 넘긴다는 주장도 있어 범주상 비슷한 우려가 있다고 느낌
  • 앱은 iOS에 표시 후 이 알림을 보관하지 말라고 지시할 수 없어서, 페이로드가 그냥 캐시된다고 봄. 결국 “삭제됨이 곧 삭제됨은 아님”이라는 전형적인 문제이고, 데이터는 생각보다 더 많은 곳에 남음. 그런 점에서 Signal이 잘 짚어낸 사례라고 느낌
  • 다행히 Apple이 이 수정 사항을 iOS 18에도 백포트한 점이 반가움
    • 그뿐 아니라 iOS 18.7.8은 iOS 26을 돌릴 수 있는 기기에도 별다른 우회 없이 배포되는 것처럼 보여 흥미로움. 반면 18.7.3부터 .6까지는 그렇지 않았던 걸 보면, 중간 배포판들이 원래는 나왔어야 했는데 배포 문제가 있었고 아무도 고치지 않았던 건지 궁금해짐
  • 나는 보안 메시징을 위해 폐쇄형 시스템에 절대 기대지 않겠다는 쪽임. 특히 많은 불특정 상대와 통신할 때는 더 그렇다고 봄
    • 그럼에도 iOS는 아마 보안 메시징에 가장 안전한 모바일 플랫폼일 가능성이 큼. 특히 lock down mode에서는 더 그렇다고 봄