-
Notifications
You must be signed in to change notification settings - Fork 114
OSのプロキシ設定を無視したHTTP接続を行っている #95
Comments
@keiji 正しくあるべきなのは、プロキシ設定は有効であるけれどもユーザCA は信頼しない iOS はたぶんそういう機能がないのでユーザCAをインストールできる環境では傍受できてしまいますが |
話を整理したいのですが、descriptionでは「傍受プロキシが使えないのでデバッグが難しくなっている」と言う趣旨で結んであるのですが、大事なのはタイトルにあるシステムのプロキシをアプリが使わない(無視する)と言うことでしょうか。 積極的に通信の傍受をしなかったとしても、プロキシサーバー経由して通信をしたときに、宛先サーバーや通信量、ネットワークへの接続時間帯から接触者であることが類推できる可能性があることが知られています。Googleのリファレンスサーバーではダミー(チャフ)リクエストを出すという方法が提案されていますね。 COCOAではプライバシーは一丁目一番地です。プロキシサーバーが使える利便性よりもユーザープライバシー保護を優先すべきかとぼくは考えます。 一方、プロキシサーバーを介しては通信できないよと周知することは重要であることはぼくも個人的に同意するところです。 |
比べるとしたら、リファレンスサーバの話よりは、Google / Apple のサンプルアプリの方で 個人的に困ってはいないですが、例えば感染者が入院先の病院の WiFi に接続した場合に |
通信内容が傍受できてしまう件については、急ぎ issue を上げました。 |
@b-wind さん
Android OS よりも下のレイヤーでプロキシ設定することで #85 の再現テストは可能ということですね。参考にします。 @keiji さん
概念実証のために通信傍受用のプロキシを再現手順に起用したためそのように思われてしまったのかもしれませんが、その認識は事実とは異なります。通信傍受用のプロキシは標準で SSL/TLS を終端し HTTPS のサーバ証明書を書き換えてしまうので root 証明書をインストールする手順を入れていますが、サーバ証明書を書き換えずにパケットを転送する設定にすれば root 証明書をインストールする必要はありませんし、root 証明書をインストールしていなければ HTTPS 通信を解読されることはありません。 たとえプロキシを使わずとも、直接インターネットに繋がっているゲートウェイルータの方で通信をいくらでも傍受・類推できてしまいますので、プロキシの話と通信傍受の話は別物として切り離して考えてください。プロキシサーバを通過しないからといってプライバシーが保護されるということはありません。
デバッグについては「その他」のコンテキストですので重要ではありません。大事なのは、大企業や官公庁、教育機関等で採用されているであろうネットワーク構成で COCOA が機能しない可能性があるということです。こうした企業がどの程度あるのか客観的な数値は把握していませんが、昔から聞く話ですので、珍しくはないと考えています。
そうですね。現時点では本 Issue がどう着地するか分からないので、あとで連絡します。 @zipperpull さん
私の認識では Android OS も iOS も機能的には変わりないです。iOS でもプロキシの構成プロファイルと root 証明書(ユーザCA)の構成プロファイルは別個にインストールできるので、「プロキシ設定は有効であるけれどもユーザCA は信頼しない」ということは可能だと思います。 |
@Guest126 さん 一応確認なのですが、iOS でルート証明書を追加した場合、OS設定で iOS 9以前では、ネットワーク管理者が不明な場合や悪意がある場合にも ですが、この機能でも、mitmproxy などで意図的にユーザが傍受したい場合には
という記載としました(いずれにしても省きすぎていてわかりづらかったのはすみません)。 iOS の新しい機能で別途そういう機能があるのかもしれないのでもしご存知なら 追記: この話は #96 に書いた方がよかったですね。すみません |
ごめんなさい。私が一方的に勘違いしていました。OS 側でどの証明書を信頼するかではなく、アプリ側でどの証明書を信頼するか制御する機能が iOS にはないということですね。 |
@keiji さん
というのが違っていて、そもそも Xamarin がデフォルトでは古い apache http client を使っているために
という問題を引き起こしています。 @tmurakami さんがおっしゃる方法で HttpURLConnection を使うように
という実装になるのが自然なのですが、あえてプロキシ設定されていても無視するように |
@keiji さん
例えば未だに COCOA が平文の HTTP 接続を用いているとかであればそういう考えもあると思うんですが、私が確認する限りではすべて暗号化された HTTPS 接続になっている上に、プロキシ設定は利用者が自ら設定するものですから、杞憂であると思います。 そこまでならプロキシを制限する理由も、あえてプロキシの制限を外す理由もないといったところだと思いますが、なにぶんプロキシ環境下で濃厚接触を判定・通知できないというリスクが大きすぎるので、制限を外す方向に持っていくのが望ましいと考えています。 |
@Guest126 さんとしてはプロキシの制限は外すことが望ましいとのこと、@zipperpull さんはプロキシの設定を無視していることに特段の理由がなければ、よりモダンな通信ライブラリ(HttpURLConnection)に差し替えようという提案ですね。 プロキシの設定について制約を続けるにせよ、解除するにせよ、Apache HttpClientを廃止するのは、これは積極的に進めたいですね! |
@b-wind さん 1.i と 2.i は問題ないとして、1.ii は自己責任ですし、2.ii のケースは権利の侵害に関わる法的な論争になるので、一アプリ側で考慮すべき話ではないと考えています。
という元々の発言自体に理論的な誤謬があるのは上で散々指摘されている通りで、それを前提にした検討は混乱のもとになります。 そもそも明確なポリシーがあって COCOA がプロキシを無視しているわけではなく、現在でも WebView を使った通信はプロキシを通っていることからも、これが COCOA の正常動作などではないことは明らかです。 @heykuro @halsk さんらの見解はどうなのでしょうか。@keiji さんの「やらない理由探し」に対してコミュニティで総ツッコミするパターンはコミュニティを疲弊させるだけで有意義な議論でも何でもないので有識者のコメントが欲しいのですが、それも難しいでしょうか。 |
「やらない理由探し」というのは不本意ではありますが、そのように見えてしまっているのであれば改善したいと思います。 基本的にぼくは、それをする目的や、検討の過程にある不明点を明らかにしたいと考えて発言しています。 たとえば今回も「再現テストが難しい」とあったので、その目的でプロキシーを使うのであれば、プライバシー保護の目的にかなわないのではないかと述べています。もちろん、その後、プロキシーを使わないことがプライバシー保護の目的にかなわないと言うことは他の方からも指摘されているわけで、コミュニティの議論そのものは健全に機能しているなという認識でいました。 さて、これは @Guest126 さんに申し上げます。 別のIssueでも言っているのですが、ぼくはこのGitHubコミュニティを「認識に誤りがある」とか「技術的に間違ったことを言う」ことで責めを受けるような場所にするつもりはありませんし、そんなものはコミュニティではないと思っています。そういうことは会社とかでやればいいことです。 動く量の多い人間が、さまざまな方面から指摘を受けることは当然です。もし失敗をしないことが主眼になれば、それは何もしないことが第一選択肢となりますし、誰かから承認を得たり、指示を受けることでしか動かないことがもっとも安全です。 ぼくは以前、「日本Androidの会」というコミュニティで幹事(後の運営委員)をやっていました。その頃はどちらかというと @Guest126 さんのような立ち位置で、他の運営委員のやったことの間違いを指摘したり、トラブルの原因を探したりして、今のGuest126さんのように「彼のせいでコミュニティが疲弊する」といったような「個人 vs コミュニティ」という論戦を引いたこともあります。 周りからは強く「正しいことを言う」論客に見えていたのかもしれません。自分と意を同じくする人たちとTwitterで対立する運営に対する皮肉めいたことをツイートして、親しい人から窘められたこともあります。 今振り返ってみれば、当時の僕のやったことは大きな間違いだったと思います。そのときにぼくが起こしていた争いこそが、コミュニティを疲弊させる要因になっていたことに気づいたのは、ずいぶん後になってからのことです。このことを公の場で話したことはありませんが、ぼくの人生のなかで大きな反省点となっています。 根本的なことですが、コミュニティとは有志の集まりであり参加も離れることも自由です。 つまるところ、 @Guest126 さんにも他の方も、好きに参加して、自分にできることがあればそれをやり、だめだと思えば離れることができる。皆さんにはその自由があります。ぼくと応対することで疲弊するというのであれば、コミュニティを離れるという選択をされるのがよいと思います。もちろん、またやりたいと思えば戻ってきてください。喜んで歓迎します。 |
@keiji さんの本音が聞けて嬉しいですが、本 Issue と関係ない話を続けても迷惑だと思うので、いったん無視しますね。 |
本 Issue を進めるうえで @keiji さんにお願いしたいのは、当初の見解を堅持するのか、取り下げるのか、はっきりして欲しいということです。別に謝罪しろということではなく、もし認識を新たにしたのであればそのことをしっかり言ってもらわないと、しなくてもいい議論を繰り返すことになります。 |
一連の検討を理解した上で、ぼくの見解をお伝えします。 現在のAndroid版のCOCOAは、プロキシサーバーの設定が反映されずに通信を行います。 プロキシサーバーの設定が反映されない原因は、通信にApache HttpClientを利用していることにあります。 Apache HttpClientは、速やかにURLConnectionに置き換えるべきだとぼくは考えます。 状況については #95 (comment) にあるとおりです。 |
開発チームに確認した結果、課題を解決するため
|
不具合の内容 / Describe the bug
COCOA は一部の WebView 表示(規約関係)を除き、OS のプロキシ設定を無視し、直接のインターネット接続を行っています。
組織によってはセキュリティ上の理由から、直接のインターネット接続を遮断し、端末のインターネット接続をすべてフォワードプロキシ経由で行っているケースがあります(IPAによる模式図)。このような環境下で COCOA は利用者の意図に反してプロキシを経由しないため、診断キーサーバーとの通信が遮断され、濃厚接触を判定・通知できないと思われます。
再現手順 / Steps to reproduce
期待される挙動 / Expected behavior
OSのプロキシ設定に準じたHTTP接続を行う
またはアプリ自体にプロキシ設定機能を持たせる
スクリーンショット / Screenshots
N/A
動作環境 / Environments
その他 / Additional context
OWASP モバイルセキュリティテストガイドによると、これは Xamarin アプリの標準仕様のようです。
iOS でも同様の可能性がありますが、実機でどうなるかまでは確認していません。
この仕様があり #85 の再現テストが難しくなっています。
Internal Tracking ID: PRODUCT BACKLOG ITEM 1785
The text was updated successfully, but these errors were encountered: