4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【inotify】ファイルを上書き保存するだけで情報が漏洩する

4
Posted at

inotifyは、ファイルの変更を感知して報告するシステムです。
ファイルが開かれた、更新された、といったイベントを監視することができますが、ファイルの中身を見ることはできません。
inotifyは2005年にLinuxに導入されました。
またAndroid・Windows等にも類似の機能が存在します。

まあ普通に便利な機能ですよね。

これを用いて、別ユーザのキー入力やWebの閲覧履歴を追跡する方法が発見されました。
すなわち20年近く、もしくはそれ以上にわたって、危険な脆弱性が隠れていたということです。
また面白いことに、プラットフォームによって攻撃方法や漏洩内容が異なっています。

ということで以下、File Notification Attacksの概要紹介です。
論文はこちら。

File Notification Attacks

Linuxでは、inotifyというファイル通知サブシステムが2005年のカーネル2.6.13で導入され、クロスユーザーアプリケーションがファイル・ディレクトリの監視を行えるようになりました。

AndroidではFileObserverと呼ばれており、これはinotifyのラッパーです。

WindowsではWindows2000以降ReadDirectoryChangesWを提供しています。
.NETではFileSystemWatcherから呼び出せます。

MacOSではFile System Eventsです。

1. Linux: Inter-Keystroke Timing

Linuxでは、読み取り権限のないファイルを監視しようとすると拒否のエラーになります。
しかしディレクトリが読み取り可能であれば、そのディレクトリを監視することでファイルのイベントを受け取ることが可能です。

たとえば、/dev/input/event4ファイルに権限がなかったとしても、/dev/inputディレクトリに権限があれば監視が成功します。

01.png

このシステムでは、event4はキーボードイベントです。
重要なのは、漏洩するのは『キーが押された』であり、『どのキーが押された』かはわからないということです。
それなら別に大したことではないと思うかもしれませんが、キーストロークについては20年以上にわたって研究が続けられてきました。
キーを押す時間の差によって情報が漏洩するのです。
たとえばWindRunnerという単語では、指を動かす必要のない2文字目のNが最速で入力される傾向があります。

2001年のSong et al、2009年のZhang and Wang、2018年のMonaco、そして最近では2025年のQiu et alといった研究が存在します。

02.png

また、2人のユーザがSSHログインしている場合、片方のユーザは/dev/ptsを監視することで、もう一人の入力を同様に監視することが可能です。

03.png

3. Android: Revealing Private Communication

Androidでは、FileObserverはアプリごとのアクセス制限レイヤーFUSEを迂回して、他アプリのプライベートフォルダを監視することが可能です。
写真や動画などのファイルが、いつ作成・削除されたかを知ることができます。

Androidの全てのアプリは、FUSEによって他のアプリからはアクセスできないプライベートフォルダ/sdcard/Android/が割り当てられます。
権限のないアプリがFile.listFiles()でWhatsAppのプライベートフォルダ/sdcard/Android/media/com.whatsapp/WhatsAppを呼び出そうとすると、空のサブフォルダが返り、実際のファイルは返されません。
FUSEレイヤーはWhatsAppのファイルをファイルリストから除外するため、WhatsApp以外のアプリがファイルを見ることはできません。
ところが我々の調査によると、このフィルタは監視については適用されません。
該当のフォルダにFileObserverの監視イベントを設定すると、権限を持たないはずのアプリでもそのフォルダ内で発生するイベントの通知を受け取ることができてしまいます。
たとえファイルリストを見ることができない状態でも、ファイル名を得ることができます。

たとえばWhatsAppでは、受信したメディアはMOVED_TOイベントです。
以下のサンプルでは、WhatsAppがダウンロードと復号を行った100ミリ秒後に、ファイルIMG-20260401-WA0011.jpgがWhatsApp Imagesフォルダに移動されました。

04.png

送信したファイルはWhatsApp Images/Sent/フォルダ、ドキュメントはWhatsApp Documents/Sent/に送られるため、そのファイルが送信されたのか受信されたのかも知ることができます。
ファイルの削除でもイベントが発生するため、それも知ることができます。

4. Windows: Direct Website Leakage

Windowsでは、読み取り権限のないディレクトリにReadDirectoryChangesWを設定しようとするとアクセス拒否のエラーになります。
ところがルートディレクトリC:\を指定すると、あらゆる制限を無視して全てのイベントとフルパスが通知されるようになりまwす。
Microsoftへの責任ある開示によると、これはドキュメント化されていない機能だそうです。

ファイル名から漏洩する例として、ブラウザがWebサイトにアクセスした際にできるキャッシュがあります。
Firefoxはローカルストレージやキャッシュなどに、Webサイトごとにディレクトリを作成して管理します。
このディレクトリ名にはWebサイトの名前が含まれています。
Firefoxでは、上位1000Webサイトのうち97.8%へのアクセスを識別できました。

05.png

FirefoxでWebアクセスしたところを攻撃者が監視した例。

Some Questions and Answers

1. Am I affected?

自分には影響がある?

Linux、Android、Windows、macOSのいずれかを使っているのであれば多かれ少なかれ影響があります。

macOSではグローバルに読み取り可能なファイルしか読めないため他のOSよりは影響が少なめです。

2. Are there fixes?

解決策は?

Linuxでは2025年12月に/dev/など特殊なファイルにはイベントが発生しないようにされ、一部の問題が軽減されました。
この問題にはCVE-2025-68788が割り当てられました。

What can be leaked?

どのような情報が漏洩する?

重要なポイントは、『ファイルの中身は流出しないという点です。
漏洩するのはファイルに関する通知だけですが、しかしそれだけでユーザ・システム・アプリケーションの情報を漏洩させるのには十分です。

4. Have these attacks been exploited in the wild?

この攻撃は実際に悪用された?

我々は把握していません。

6. Is there proof of concept code?

PoCはある?

はい。
こちらをご覧ください:https://github.com/isec-tugraz/file-notification-attacks

感想

ファイルの作成や更新を監視して何かを行いたいというのは正当な要求ですが、その実装にOSそれぞれの問題があることで、様々な脆弱性が発生してしまっています。
特にWindowsの無法っぷりがやべえですな。
ドライブ単位で監視可能ってどういうことだよ。

Linuxの場合、本文にもあるとおりわかるのは『キーが押されたタイミング』だけであり、『どのキーが押されたか』はわかりません。
そしてキーを押すタイミングだけから文字を復元できる割合は2026年最新の研究で35%程度だそうです。
一見低そうにも見えますが、5つ候補を作ったらひとつは合っているというレベルです。
また中の人がわかっていれば、既存のアウトプットとかと照合することで文章の癖とかから相当な確率で復元できそうですね。

inotifyはさすがにWebAPIではないのでWebサイトを閲覧するだけで漏れるということはありませんが、マイナーなアプリをインストールした、よくわからないライブラリをdnf・apt-getした、なんて場合は裏側でひっそり監視されているかもしれません。
そんなときのために等速タイピングをマスターしておきましょう。
つまり一本指打法こそ最強の漏洩対策だった?

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?