File Notification Attacks: Side-Channel Leakage from the File-Notification System on Linux, Android, Windows, and macOS
파일 알림 시스템의 부채널 공격 — Linux·Android·Windows·macOS에서 사용자 행동 유출
파일 알림 API는 파일 내용을 읽지 못하는 공격자에게도 파일의 생성·수정·삭제 시점과 이름을 노출할 수 있습니다. 연구진은 네 운영체제의 동작을 분석하고 키 입력 간격 추론, WhatsApp 미디어 활동 추적, Firefox 방문 웹사이트 식별 등 사례를 보였습니다.
- 주제
AI 요약
파일 알림 시스템은 파일이 열리거나 수정·삭제될 때 애플리케이션에 이벤트를 전달합니다. 연구진은 Linux의 inotify, Android의 FileObserver, Windows의 ReadDirectoryChangesW, macOS의 File System Events를 조사했습니다. 파일 내용을 읽지 못해도 이벤트와 파일 이름만으로 사용자·시스템·애플리케이션의 행동을 추적할 수 있으며, 일부 시스템에서는 접근 권한이 없는 파일의 존재까지 드러납니다. 공격에는 로컬에서 다른 사용자 권한을 노리는 공격자나 공급망 공격을 받은 패키지가 필요합니다.
운영체제별 유출 사례
Linux에서는 파일 자체에 읽기 권한이 없어도, 부모 디렉터리를 읽을 수 있으면 그 안의 파일 이벤트를 inotify로 관찰할 수 있습니다. 예를 들어 /dev/input/event4에 직접 감시를 걸면 권한 오류가 나지만, 읽을 수 있는 /dev/input 디렉터리를 감시하면 키 입력 이벤트를 받을 수 있습니다. 어떤 키를 눌렀는지는 나오지 않지만, 키 입력 사이의 시간 간격을 분석하면 입력 내용을 추론하는 데 쓸 수 있습니다. 연구진은 SSH로 같은 서버에 접속한 서로 다른 사용자 사이에서도 /dev/pts를 감시해 상대방의 입력 시점을 확인했습니다. 단, 터미널에 텍스트 갱신이 발생해야 하므로 피드백을 끈 sudo 암호 입력은 이벤트를 만들지 않습니다.
같은 Linux 사례로 KDE Plasma의 인증 창을 노리는 UI 위장 공격도 제시했습니다. 같은 사용자 권한의 프로세스가 polkit의 /usr/bin/pkexec 접근을 감시하다가 인증 창이 열리기 직전에 가짜 암호 입력 창을 위에 띄웁니다. Wayland가 입력 도청을 막더라도, KDE의 창 포커스 탈취 방지는 보안 기능으로 설계되지 않았다는 것이 KDE 보안 팀의 답변입니다. 연구진은 KDE Plasma 5와 6에서 창을 다른 창보다 위에 유지하도록 설정하는 임시 대응 방법도 안내했습니다.
Android에서는 FileObserver가 FUSE 계층의 앱별 저장소 격리를 우회합니다. 다른 앱의 비공개 폴더를 목록으로 조회하면 파일이 보이지 않지만, 권한이 없는 앱도 해당 폴더에 감시자를 등록해 파일 이벤트와 이름을 받을 수 있습니다. WhatsApp의 경우 수신 미디어가 내려받기와 복호화를 마친 뒤 약 100ms 후 파일 이동 이벤트로 나타났습니다. 전송한 파일은 Sent 하위 폴더에 따로 저장되므로, 파일 이름과 위치로 미디어 종류와 송수신 방향을 구분할 수 있습니다. 삭제 이벤트도 발생해 미디어가 제거된 시점까지 관찰됩니다.
Windows에서는 읽을 수 없는 디렉터리에 감시를 걸면 권한 오류가 나지만, C:\\ 루트에 ReadDirectoryChangesW 감시를 걸면 권한과 사용자 구분을 넘어 시스템 전체 파일 경로 이벤트가 노출됩니다. Microsoft는 이 동작을 문서화되지 않은 기능이라고 설명했습니다. Firefox는 로컬 저장소, IndexedDB 또는 캐시를 쓰는 웹사이트마다 디렉터리를 만들며, 디렉터리 이름에 사이트 이름이 포함됩니다. 이를 이용해 연구진은 상위 1,000개 웹사이트 방문을 F1 점수 97.8%로 식별했습니다. Microsoft는 디렉터리 변경 알림의 권한 검사를 강화하는 레지스트리 정책을 추가했지만 기본값은 비활성화입니다.
macOS에서는 관찰 대상이 전역에서 읽을 수 있는 파일로 제한돼 Linux·Android·Windows와 같은 비공개 정보 유출은 확인되지 않았습니다. 다만 사용자와 애플리케이션, 시스템의 행동을 더 제한적인 범위에서 추적할 수 있다고 연구진은 설명합니다.
대응과 영향 범위
Linux 문제는 CVE-2025-68788로 등록됐습니다. 2025년 12월 특수 파일에서 access·modify 이벤트가 발생하지 않도록 부분 완화했으며, 수정 사항은 5.10.248, 5.15.198, 6.1.160, 6.6.120, 6.12.65, 6.18.3 커널에 들어갔습니다. 연구진은 inotifywait -m -e access,modify /dev/input을 실행한 뒤 키를 눌러 이벤트가 나오는지 확인하는 방법을 제시합니다. Android와 macOS에는 별도 수정 사항이 없다고 밝혔습니다. Windows는 권한 검사 정책을 직접 활성화해야 합니다. 연구진은 실제 악용 사례를 알지 못한다고 덧붙였습니다.
Lobsters 반응
- @k749gtnc9l3w — Linux에서는 stat으로 확인할 수 있는 파일의 읽기를 노출하는 정도는 괜찮다고 본 것 같습니다. atime을 대신 폴링할 수도 있으니까요. 하지만 noatime이 나오기 전에도 특수 장치 파일은 예외였네요.
- @sneela — 저도 stat으로 atime을 폴링해 봤지만, 대부분의 배포판은 relatime을 씁니다. relatime을 폴링하는 방법은 사실상 쓸 수 없습니다. 주로 파일에 쓰기가 발생할 때만 갱신되는데, 제가 과거에 살펴본 특수 문자 파일이나 장치 파일에는 그런 쓰기가 일어나지 않았습니다.
- @k749gtnc9l3w — 문자 장치에서도 mtime과 ctime을 따로 추적한다는 점은 솔직히 조금 놀랍습니다. 물론 noatime은 흔하지 않고 relatime이 기본값이라는 말씀은 맞습니다. devtmpfs에서는 피할 수 없는 기본값인 것 같고, noatime은 요청할 수 있어도 완전한 atime 설정은 할 수 없습니다.
원문: inoti.fyi / 번역·요약: Trawling