さて巷では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するようにできればローカルプロセスしかアクセスできなくなるので、そう変更したいですね?
これはごく簡単で、AllowRemoteClients
をfalse
にしてやれば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 |
参考:
- Fiddler Options – Fiddler Documentation
- Fiddler and the IE9 Release Candidate – Fiddler Web Debugger – Site Home – MSDN Blogs
おかしいですね。
DecryptSSL
とAllowRemoteClients
は、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 なオーバーロードを使用してかつbAllowRemote
がtrue
になっているものが非常に多いのが現状です。
実にクソい。
まとめ
FiddlerCoreStartupFlags.Default
や、FiddlerCoreStartupFlags
を使わないオーバーロードの使用をやめ、必要最低限の Flag のみ指定しましょう。
おまけ
とはいえ、現実的にはオープンプロキシなプロセスが立ち上がっていたとしても、実害を受ける人は恐らく少ないと考えています。
NAT(NAPT)環境下やパーソナルファイアウォール(PFW)がある場合は、対象のポートへアクセスできるようにしていない限りは外部からのアクセスは出来ないからです。
この条件に当てはまる人はそれほど多くないのではないでしょうか?
モバイルデバイス上でかつサービスアプリケーションのようにずっとバックグラウンドで立ち上がっているようなものは、やられる可能性も少し増えるかもしれませんが……
また、PFWも無しにインターネット直繋ぎなんてしている場合はこの問題以外にも様々な攻撃に曝されることになるでしょうし、穴だらけなところに穴が一つ増えるという感じになりそうな気がします。
あと考えられるのはIPv6環境?([::]:5555とかでListningされる)
ごめんなさい。IPv6はよく知らないんです。。