警告: macOS Sequoia 15はDNS暗号化を迂回する可能性あり
DNS暗号化の基礎
- Webブラウザにホスト名(例: apple.com)を入力すると、その名前はIPアドレスに変換されなければコンピュータがサーバーに接続できない
- この問い合わせは通常、暗号化されない状態で行われるため、インターネットプロバイダや接続を監視する他の当事者が、どのサイトを訪れているかを見ることができる
- こうした問い合わせを保護するために、Little Snitch 6は新機能としてDNS暗号化を提供している
- DNS暗号化が有効になると、すべての名前解決はLittle Snitchを通じて暗号化された形で行われる
- そのためにLittle SnitchはDNSプロキシを登録し、macOSはすべてのDNSリクエストをそのプロキシに送り、暗号化された形で名前解決を行う
しかし…
- macOS 15 SequoiaでDNS関連の問題を調査している際、一部のDNSリクエスト(特に特定の低レベルなレガシーAPIを通じて行われたリクエスト)がプロキシに渡されていないことを発見した
- macOS Sequoiaにはバグがあり、一部のリクエストがインストール済みのDNSプロキシを迂回し、システムのデフォルトのネームサーバーへ暗号化されないまま送信されているようだ
- このバグはLittle Snitchだけでなく、あらゆる種類のDNSプロキシに影響する可能性がある
- したがって、Little Snitch 6の新しいDNS暗号化機能を使っている場合や、他社製DNSプロキシを使用している場合は、Appleが今後のmacOSアップデートで修正するまで、一部のDNS問い合わせがプロキシを迂回する可能性があることを認識しておく必要がある
- 参考までに、高レベルAPIを通じて行われるDNS問い合わせはこのバグの影響を受けない。たとえば、SafariやChromeでのWebブラウジングは引き続き暗号化された問い合わせの恩恵を受ける。一方で、Firefoxは影響を受ける可能性がある
再現方法
- Little Snitchの設定でDNS暗号化を有効にする
- Wiresharkを
port 53 キャプチャフィルタで開始する
- Xcode Playgroundで次のコードを実行する:
import Foundation
let domain = "dnsproxytest.com"
var result: UnsafeMutablePointer<addrinfo>?
let status = getaddrinfo(domain, nil, nil, &result)
dnsproxytest.com への問い合わせが、Wireshark上で暗号化されていない形のままUDPポート53(暗号化されていない問い合わせのデフォルト)で見えることを確認できる
- また、Little Snitchのネットワークモニタがその問い合わせに関するトラフィックをまったく表示しない。これは、その問い合わせがネットワークフィルタを完全に迂回したことを意味する
- このバグはAppleに報告済みであり、迅速な修正を期待している。引き続き更新を提供する予定だ
更新 2024-09-17 午後7:10
- 追加調査の結果、このバグは少なくともmacOS 14.5 Sonomaから存在しており、さらに古いバージョンにも存在する可能性があることが分かった。現在はそれより古い14.xシステムにアクセスできないため、テストは不可能だ
GN⁺の要約
- この記事は、macOS Sequoia 15でDNS暗号化が迂回される可能性のあるバグを扱っている
- DNS暗号化は、インターネット利用者のプライバシーを保護する重要な機能だ
- このバグは特に、低レベルなレガシーAPIを通じて行われるDNSリクエストに影響する
- Appleがこの問題を解決するまで、利用者は一部のDNS問い合わせが暗号化されない可能性があることを認識しておく必要がある
- 類似の機能を提供する他のプロジェクトとしては、Pi-holeのようなDNSフィルタリングソリューションがある
1件のコメント
重要な情報をありがとうございます。
ひとまずSafariとChromeは安心できるとのことで、よかったです。