AndroidのVPNキルスイッチを突破?NAT-Tキープアライブによる通信漏洩のリスクとは
Android NAT-T keepalive offload bypasses VPN lockdown
Android NAT-T keepalive offload bypasses VPN lockdown
Androidにおいて、VPN接続中でも通信が保護されないまま外部に漏洩してしまう新たな脆弱性が発見されました。Mullvad VPNのブログで詳細が解説されています。この問題は、AndroidのNAT-Tキープアライブオフロード機能が原因で、VPNの通信制限(Lockdown)をバイパスしてパケットが漏れてしまうというものです。詳細は公式記事(https://mullvad.net/en/blog/another-way-to-leak-traffic-on-android-has-been-discovered )を確認してください。
この問題は公開されていませんが、この情報から判断するとGoogleがこれに対して何か対処する可能性は低いと考えられます。GrapheneOSはこの問題を認識しており、修正に取り組んでいます。
相変わらずのGoogle、さすがですね。
適切な修正にはAndroidシステムの変更が必要です。この脆弱性を発見した研究者がAndroid脆弱性報奨金プログラムに報告しましたが、研究者によると問題は対応なしでクローズされたとのことです。この問題は公開されていませんが、この情報から判断するとGoogleが何か対処する可能性は低いと考えられます。GrapheneOSはこの問題を認識しており、修正に取り組んでいます。
もし研究者の説明が正しいなら、Googleが意図的にリークを導入したか、そのまま放置しようとした可能性は否定できないね。
その場しのぎの対応として、この種の接続機能がないUSB-Cの無線LANアダプターを使うとかはどう?(もっとも、モバイル回線には効果がないだろうけど)
もっと騒ぎになってもいいはずなのに意外だ!
「対応なしでクローズ」ってのが全てを物語ってる。Googleが知っていながら放置しているリークは、もはやバグじゃなくて彼らが許容している『機能』ってことだよ。
Androidのバカなところは、トラフィックフィルタリングに必須の常時接続VPNを使うためにPIN設定を要求してくるところだよ(Androidはnftへのアクセスを提供してくれないからね)。
FortiClient VPNとSmartVPNのGoogle Playでの累計インストール数は4,134,648件ですが、Googleは30億台以上のアクティブなAndroidデバイスがあるとしています。
VPNの問題を修正する代わりにAPIを廃止しようとする(Googleの誰かが計画していると示唆したように)理由づけとしては、かなり奇妙だよ。「使っているのはたった400万人だから、廃止しよう」という理屈は、2000年代にMicrosoftがPCへのLinuxインストール機能を排除しようとした時の考え方にそっくりだ。
Androidにはソケットをインターフェースにバインドする方法がある。Network.bindSocketだ。これはアクセス制御付きのsetsockopt(SO_BINDTODEVICE)のラッパーだよ。
これへのアクセスはVPNアプリによって制御される。VPNが有効でデフォルトで全トラフィックをルーティングしている時でも直接接続を許可されるアプリもあるし、デフォルトでは使わないように設定できるアプリもある。
ただ、Linuxカーネル5.7以降、特権を持たないユーザースペースから直接setsockopt(SO_BINDTODEVICE)を呼び出せるようになり、VPNクライアントによる制限を無視してVPNまたは非VPNインターフェースを利用できるようになったんだ。
現時点でどのAndroid環境(他のリーク対策はしているGrapheneOSでさえも)でも修正されていない。
PoCはTermuxで「curl --interface [インターフェース名、IPではない] ifconfig.co」とするだけで簡単に試せる。
これでまた一つ、私たちが既に知っていることが証明されたね。
Googleは邪悪だ。
いっそのことMetaやMicrosoftの製品、あるいはPhillip Morrisの製品でも使えばいいんじゃないかな。その後の顛末は自業自得ということで。