Appleは本当に起動するすべてのアプリをサーバーに記録しているのか?
(blog.jacopo.io)- 今回話題になったOCSPの技術的な分析
→ 開発者証明書が有効かどうかを確認するため、アプリ起動時にAppleのサーバーへ接続してチェック
→ ネットワーク接続が不可能なら、そのまま起動する
→ 接続自体は可能でもサーバーが遅いと、今回のようにApple製以外のすべてのアプリが起動しない問題が発生
→ アプリ起動のたびにAppleのサーバーへアプリのハッシュを送っているという主張がある [1]
→ 問題はHTTPSではなくHTTPを使っていること(HTTPS証明書を確認するために、さらに接続を開く必要が生じるため)
- 内部を見てみる
→ 途中にHTTP ProxyやWiresharkがあれば、すべてキャプチャ可能
→ 一度起動してOCSP認証が済むと、一定時間は再認証しない
→ GETでbase64エンコードされた80バイトの文字列を送信
→ その値はアプリのHashのように見えるが、「違う」
→ OpenSSSLでそのバイナリ情報を開いてみると、実際には証明書Issuer名とキーのハッシュ値、そしてシリアル番号が入っている
→ それでも、証明書がアプリごとに異なるなら、結局それがアプリに対するハッシュ値と同じではないか?という疑い
- 開発者証明書
→ この証明書情報はどこから来るのだろうか?
→ codesignでMacアプリの証明書を抽出してみる(ここではFirefox)
→ シリアル番号が上でキャプチャしたものと一致
→ では再びThunderbirdの証明書を取り出してみると、やはりシリアル番号が同じ(当然ではあるが)
→ つまり[1]で言われていたように、すべてのアプリを特定できるハッシュ情報を送っているというのは誤情報
→ もちろん、いつどのコンピュータで「どの開発者の」アプリを実行したか自体は把握できるというのは事実
- OCSPを遮断することについて
→ Little Snitchを使ったり、/etc/hostsを通じて遮断することはできる
→ ただしこれは重要なセキュリティ機能そのものを止めることになるので、やらないことを勧める
- TL;DR
→ macOSはアプリを起動するたびにAppleへアプリのハッシュを送ってはいない
→ macOSはあなたが使うアプリの開発者証明書情報を送信しており、これはHTTPで送られる
→ できるだけ ocsp.apple.com への接続を遮断しないでほしい。
4件のコメント
参考までに、英語版Wikipediaによれば、Google Chromeはすでに2012年からOCSPを無効化しています。理由は、「得られる利点は見つけにくい一方で、コスト(遅延やプライバシーの問題の発生)は明らかだ」というものです。
https://www.imperialviolet.org/2012/02/05/crlsets.html
OCSP はもともと、Web ブラウザでも SSL 証明書の有効期限切れなどを確認するために使う方式ではあると思いますが、アプリの認証も SSL 証明書と同じ方式で行うため、そういうことだと推測することもできそうですね。
これは、iOSのようにMacアプリでもApp Analytics情報を収集するためのものではないかと推測しています。
関連して読んでおきたい話題
[1] あなたのコンピュータはあなただけのものではない https://ja.news.hada.io/topic?id=3200
[2] macOS Catalina (10.15) : デザインによって遅くなる https://ja.news.hada.io/topic?id=2145