5月 272015
 
Pocket

さて巷ではJVNVU#98282440: 「提督業も忙しい!」(KanColleViewer) がオープンプロキシとして動作する問題が話題ですが、FiddlerCore は何も考えないで実装すると恐らくこうしてしまうような仕様です。クソですね。。

そもそも何が問題なのか

とりあえず適当に FiddlerCore を使ったアプリケーションを立ち上げてみましょう。

[csharp]
FiddlerApplication.Startup(55555, FiddlerCoreStartupFlags.Default);
[/csharp]

するとあら不思議、0.0.0.0:55555でListningされてしまいます。

[raw]
C:\Windows\system32>netstat -a -b -n -o -p TCP

アクティブな接続

プロトコル ローカル アドレス 外部アドレス 状態 PID
…(中略)…
TCP 0.0.0.0:55555 0.0.0.0:0 LISTENING 6688
[FiddlerTest.vshost.exe]
[/raw]

これではアプリが立ち上がってる間は外部からHTTPプロキシとして利用できてしまいます。
知らず知らずのうちに他所様への攻撃の踏み台にされて、ある日突然警察がやってくるなんてこともあるかもしれません。怖いですね。

で、どうすればいいかというと、127.0.0.1:55555でLisningするようにできればローカルプロセスしかアクセスできなくなるので、そう変更したいですね?
これはごく簡単で、AllowRemoteClientsfalseにしてやればOKです。

[csharp]
FiddlerApplication.Startup(55555
, FiddlerCoreStartupFlags.RegisterAsSystemProxy
| FiddlerCoreStartupFlags.ChainToUpstreamGateway
| FiddlerCoreStartupFlags.MonitorAllConnections
| FiddlerCoreStartupFlags.CaptureLocalhostTraffic);
[/csharp]

Flagなので指定しなければOK。

[raw]
C:\Windows\system32>netstat -a -b -n -o -p TCP

アクティブな接続

プロトコル ローカル アドレス 外部アドレス 状態 PID
…(中略)…
TCP 127.0.0.1:55555 0.0.0.0:0 LISTENING 7128
[FiddlerTest.vshost.exe]
[/raw]

つまりFiddlerCoreStartupFlags.Defaultがイカンわけです。
でも FiddlerCore は Fiddler.exe のUI以外の部分を抜き出したものなわけですから、Fiddler.exe 自体がそういうもんだという可能性もあります。


参照: FiddlerCore – Fiddler Proxy Engine for your .NET Applications

ここで Fiddler.exe および FiddlerCore のデフォルト値を見てみましょう。

オプションのデフォルト値

Fiddlerオプション Fiddler.exeのデフォルト FiddlerCoreのデフォルト
RegisterAsSystemProxy true true
DecryptSSL false true
AllowRemoteClients false true
ChainToUpstreamGateway true true
MonitorAllConnections true true
HookUsingPACFile false false
CaptureLocalhostTraffic true true
CaptureFTP false false
OptimizeThreadPool ??? true

参考:

おかしいですね。
DecryptSSLAllowRemoteClientsは、Fiddler.exe ではデフォルトfalseですが、FiddlerCore ではtrueになってしまっています。

いやでももしかしたらFiddlerCoreStartupFlags.Defaultを使うのは推奨されていないのかもしれません。
そこで FiddlerCore Documentation を見てみましょう。

FiddlerCore – Fiddler Proxy Engine for your .NET Applications

だめじゃん……

いや、でもまだ他に2つのオーバーロードがある?
ところがどっこい、こいつらは NOT RECOMMENDED なのです。

おまけにここでbAllowRemoteを指定しない場合、trueになります。

なお悪いことに、適当に FiddlerCore で検索してよく出てくるサンプルでは、これらの NOT RECOMMENDED なオーバーロードを使用してかつbAllowRemotetrueになっているものが非常に多いのが現状です。

実にクソい。

まとめ

FiddlerCoreStartupFlags.Defaultや、FiddlerCoreStartupFlagsを使わないオーバーロードの使用をやめ、必要最低限の Flag のみ指定しましょう。

おまけ

とはいえ、現実的にはオープンプロキシなプロセスが立ち上がっていたとしても、実害を受ける人は恐らく少ないと考えています。
NAT(NAPT)環境下やパーソナルファイアウォール(PFW)がある場合は、対象のポートへアクセスできるようにしていない限りは外部からのアクセスは出来ないからです。
この条件に当てはまる人はそれほど多くないのではないでしょうか?
モバイルデバイス上でかつサービスアプリケーションのようにずっとバックグラウンドで立ち上がっているようなものは、やられる可能性も少し増えるかもしれませんが……

また、PFWも無しにインターネット直繋ぎなんてしている場合はこの問題以外にも様々な攻撃に曝されることになるでしょうし、穴だらけなところに穴が一つ増えるという感じになりそうな気がします。

あと考えられるのはIPv6環境?([::]:5555とかでListningされる)
ごめんなさい。IPv6はよく知らないんです。。

 Leave a Reply