Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Proxyで遊ぼう!
~作って&使ってわかるProxyの面白さ
2016/09/21
情報セキュリティ大学院大学
客員研究員
宮本 久仁男
1
はじめに
• 本講義は、別に盗聴などを助長するものでは
ありません
• あくまで自分の管理範囲内にProxyを設置す
る方のために、「こんな構成方法やこんな使
い方があるんだ」という紹介をするためのもの
です
Copyright by Kuni...
本日の話でご説明すること
• いろんなProxyがあるということ
• 普通のProxyの構成法
• 透過型Proxyの構成法
• Proxyで残る証跡
• その他Proxyに関連した事項
Copyright by Kunio Miyamoto
前提
• Debian GNU/LinuxをProxyサーバを構成するOS
にします
• ProxyサーバソフトはSquid3.xを使います
• 「極力」debパッケージを使います
• Proxyサーバが扱うプロトコルはHTTP/HTTPS
•...
Content.
• Proxyって何?
• Proxyの効能
• Proxyの使い方
• 設定なしでProxyを使う~透過型Proxy
• 設定なしでProxyを使う2~SSL対応の透過型
Proxy
• 設定なしでProxyを使う3~何も意...
Proxyって何?
Copyright by Kunio Miyamoto
Proxy is 何?
• Proxyは代理(通信)サーバ
– 本来通信を行うべきコンピュータ間に介在し、代理で
通信を行う機能を持つ
– HTTPやHTTPSをしゃべるモノが多いけど、別に
HTTPやHTTPS以外のプロトコルを扱えるものもあ...
さまざまなProxy(の一部)
• (普通の)Proxy
• リバースProxy / HTTPアクセラレータ
Copyright by Kunio Miyamoto
Proxy
組織内NW
リバース
Proxy
組織内NW
Proxyがない生活
• 直接の外部通信を制限するのがかなり大変
– 安物のブロードバンドルータでやろうとすると、かなり大変(出来ない
こともある)
• これでもいいように見えるけど、実はNAT(NAPT)はルータに多大
なる負荷をかける
– ...
Proxyがない生活(の例)
• ルータがアドレス変換を行う
• クライアントは直接サーバに接続・通信する
Copyright by Kunio Miyamoto
ルータ
Proxyのある生活
• 直接外と通信するコンピュータや通信先を(比較的)ラクに
制限できる
– いらんものまで外部と繋がせる必要はない
• ルータに(少し)優しい
– 一度気合を入れて設計してしまえば、あとは(ルータは)手放し
でもOK
– ...
Proxyがある生活(の例)
• クライアントはProxyと通信します
• Proxyのみが外部のコンピュータと通信します
Copyright by Kunio Miyamoto
Proxy
ここでのまとめ
• いろんなProxyがありますが、今回扱うのは、
HTTP/HTTPS Proxy
• Proxyを入れるとよいことを示しました
• Proxyを使った例を示しました
Copyright by Kunio Miyamoto
Proxyの使い方
便利だけど少しだけ制限が出ます
Copyright by Kunio Miyamoto
Proxyの使い方
• Proxyサーバを準備します
– Debian, CentOS, Ubuntuなんかで普通に使え
ます(入れるのは一瞬(!))
• クライアントにProxyの設定を入れます
– 多少の設定はありますが、問題なし
Copy...
こんなところにもProxy?
• Webアプリケーションの試験ツール
– 例:Fiddler, Burp Suite, OWASP ZAP
– HTTP通信を…
• 横取りして
• 書き換えて
• 試験対象に送る
• モバイルキャリアのWebア...
Proxyサーバの作り方
• ここではDebian GNU/LinuxにSquidと呼ば
れるProxyサーバソフトウエアを入れて、
Proxyにします
• squid3パッケージをインストール&設定する
と、とりあえず普通のProxyを使える...
クライアントのProxy設定
• PCの場合、Webブラウザの設定画面から可
能
• スマートフォン、タブレット(Android)の場合、
ネットワークの設定から可能
• iPhoneの場合、WiFiの設定(詳細設定)で
Proxy情報を投入す...
FirefoxでのProxy設定例
Copyright by Kunio Miyamoto
Proxyに残る情報~楽しい証跡
• PCもAndroidもiPhoneも、Proxy経由でのアクセ
スを行うとProxyに証跡(アクセス履歴)が残る
– 当然、広告サービスなどへのアクセス履歴も残るた
め、通常のWebアクセス画面を見るよりも...
Webサイト閲覧遷移も見える
Copyright by Kunio Miyamoto
例外1:SSL利用時
• SSLを使った場合、通信内容が全部暗号化さ
れているため、アクセスしているホスト「だけ」
わかる
– 何もわからないよりは100万倍いいけど
• 当然、URLなどはわからない
– 部分的に止めたい時などが非常に困る
C...
例外2:外部のAnonymizer利用時
• Anonymizer≒外部のProxyサービス
– アクセス元隠蔽サービス
• Anonymizerを使うと、Proxyに残るのは
「Anonymizerにアクセスした」ということだけ
– 実際はA...
例外3:Tor等のトンネル利用時
• Tor等のトンネル経由でアクセスしたサイトは
(当然だが)Proxyには残らない
• ここまでやる人は、(Torのゲートウェイにアク
セスした以外は)Proxyに証跡が残るようなこ
とはやらない(割り切り重...
SSLを使った時の見え方
Copyright by Kunio Miyamoto
CONNECTメソッドを使って、
www.iisec.ac.jp の TCP443番
ポートに繋いだということしかわ
からない
CONNECTメソッド
• Proxyサーバに対して「指定したサーバの指定したポ
ートに接続して」と依頼するメソッド
• 接続された後は、SSL/TLSで暗号化された伝聞がや
りとりされる
• Proxyはやりとりの内容を一切知れない(流れたデ...
ここでのまとめ
• 普通のProxyは、Proxyサーバの構成にあわ
せてクライアントの設定を行うことで使えます
• Debian GNU/Linuxでの入れ方は簡単
• 一部の例外はあるものの、通信の証跡が残
るため、いろいろ調べやすいです
...
設定なしでProxyを使う
~透過型Proxy
少し制限が出ます
Copyright by Kunio Miyamoto
透過型(Transparent)Proxy
• クライアントとサーバの間に入って、クライア
ントの通信を横取りし、サーバに代わりにぶ
ん投げる
• クライアント側は特に何か設定をする必要は
「ない」
– Proxyががんばる
Copyright...
透過型Proxy構成例
Copyright by Kunio Miyamoto
透過型
Proxy
インターネット
クライアントPCのデフォルト
ゲートウェイに透過型Proxyを
設置
192.168.44.100
192.168.44.88
岩崎学園のWebサイトを見る
Copyright by Kunio Miyamoto
透過型Proxyがある時の
パケットの見え方
Copyright by Kunio Miyamoto
クライアントからサーバへ
透過型Proxyからサーバへ
サーバから透過型Proxyへ
サーバからクライアントへ
Debian GNU/LinuxのSquid3
パッケージの制約
• SSL通信を透過型Proxyできない
– 普通のHTTPを透過型Proxyすることは可能
– SSLするにはパッケージのコンパイルオプション不足
• SSL対応の透過型Pro...
ここでのまとめ
• 透過型Proxyの構成を紹介しました
• 透過型Proxyは便利ですが、すぐにできるも
のはSSL対応してないためちょっと不便
Copyright by Kunio Miyamoto
ちょっとだけ寄り道
~原始的なSSL盗聴
アリモノを利用してSSLを盗聴する
Copyright by Kunio Miyamoto
お約束
• あくまでこれは、「SSLを盗聴するためには本
質的にこういう手段を取る」という説明をする
ための内容です
• 悪用はしないでください(!)
– 例:POP over SSLで通信しているメールサーバ
の(自分の)パスワードを忘れた時...
用意するもの
• Stone(SSL対応)
apt-get install stone
• Stoneで使う証明書
– opensslコマンドで作成
– 作成の仕方は省略
Copyright by Kunio Miyamoto
やり方
• Stoneをインストールしたホストで以下のコマンドラインを
実行(例えば)
stone -z key=/etc/stone/stone.pem -z
cert=/etc/stone/stone.pem localhost:12345...
少々面倒だけど、SSL通信の
中身を覗ける
• 2つのstoneの間を平文通信させる
→平文通信は容易にキャプチャ&解読可能
• SSL対応の透過型Proxyもこんなことやります
Copyright by Kunio Miyamoto
Ston...
ブラウザエラーで見えない場合
Copyright by Kunio Miyamoto
Internet Explorerのインターネットオプションで「詳細設定」タブを選択し、
図のように設定する(実験後はもとに戻すこと!)
ここでのまとめ
• SSLの盗聴(Man-in-the-Middle)は意外と簡
単にできます
• SSLを一旦解読→再度SSL通信というやり方
は、SSL対応の透過型Proxyも使います
Copyright by Kunio Miyamoto
設定なしでProxyを使う2
~SSL対応の透過型Proxy
実はちょっと面倒
Copyright by Kunio Miyamoto
SSL対応の透過型Proxy構成例
Copyright by Kunio Miyamoto
SSL対応
透過型
Proxy
インターネット
クライアントPCのデフォルト
ゲートウェイに透過型Proxyを
設置
サーバ証明書
ルート証明書
SSLで透過型Proxy
• 実は(少しだけ)面倒
• 透過型Proxyを入れた場合、SSL通信をして
いる「つもり」のホストと実際にSSL通信をして
いるホストが異なる
– 証明書の検証機能に「不正なサイト」と叱られる
Copyright b...
それより前に…
• Squid3のパッケージを作り直す必要がある
– configure + make + make install でもいいが、メ
ンテナンス性が非常に悪い
– DebianでもRed Hat Enterprise Linux...
Squid3のカスタムパッケージ
• 準備
– Squid3のパッケージ構築環境作成+Squid3の
パッケージビルド
– configureオプションの変更
– changelogへの追記
• パッケージ再構築
– dpkg-buildpac...
必要なものはシステムに聞く
Copyright by Kunio Miyamoto
パッケージを作ろうとすると…
足りないものを教えてくれます
詳細は以下のWebサイトに
• Squid 3.4.x for with transparent ssl
proxying/support for Debian Wheezy.
– https://codepoets.co.uk/2014/sq...
カスタム版Squid3パッケージ作成
時の注意
• 標準のSquid3パッケージをビルドする時に必要
なものに加え、libssl-devパッケージをインストー
ルしておく必要がある
– Proxy経由でSSL/TLS通信をする時は、Webブラウ...
検証に使ったものまとめました
• 以下のURLから取得可能です
https://www.dropbox.com/s/69h78cd5k6x0pbo/
squid_proof.tar.gz
• アーカイブには以下のようなものが含まれます
– pk...
パッケージの入れ方
• 入れるマシンはインターネットに接続されてい
る必要があります
• Debian GNU/Linux 8(amd64)がターゲット
• アーカイブを展開後、以下のコマンドをrootで
実行
– cd squid_proof...
設定の仕方
• scripts, etc配下のファイルを使い、ユーザrootで作業します
• 透過型ProxyのIPアドレスを決めます
• 証明書を作ります(この時、上記IPアドレスをCNにします)
ここで作ったファイルのうち、squid.pe...
証明書で注意事項(!)
• 作成した証明書の類は、盗まれないように!
• Internet Explorer, Google Chromeなどは、OS
が管理する証明書ストアの証明書を使う
– 透過型Proxyを使うために作った証明書を証明書ス...
Windowsの証明書ストア上の
配置
Copyright by Kunio Miyamoto
証明書ファイルを
ダブルクリックした後に…
証明書管理ツールでも確認
Copyright by Kunio Miyamoto
Firefoxの場合(1/3)
Copyright by Kunio Miyamoto
Firefoxの場合(2/3)
Copyright by Kunio Miyamoto
この後に、証明書ファイルを選ぶ
Firefoxの場合(3/3)
Copyright by Kunio Miyamoto
Proxyログ上はどう見える?
Copyright by Kunio Miyamoto
https://www.iisec.ac.jp/配下の
個別のURLにアクセスしている
のがわかる
証明書の見え方は?(1/2)
Copyright by Kunio Miyamoto
証明書の見え方は?(2/2)
Copyright by Kunio Miyamoto
WikipediaはHTTPSだけど…
Copyright by Kunio Miyamoto
FirefoxではSSL対応の透過型Proxyを
経由してWikipediaにアクセスできませ
んでした(証明書の検証方法がより厳密
なため)
SSL/TLSの内容を解かれる
• 何の前提もなく解かれるわけではない
– 説明したように準備が必要
– サイトによっては、接続できないこともある
• よほどうかつなコトしなければ、第三者にSSL/TLSの
内容を(通信路上で)盗み見られること...
ここでのまとめ
• SSL対応の透過型Proxyを構成する方法を紹介しまし
た
• SSL対応の透過型Proxyを使えると、通常のProxyで
はわからない「SSLでアクセスしているURL」もログ取
得できるので、より詳細な管理が可能になります...
設定なしでProxyを使う3
~意識させずにProxyを使わせるには?
そのための、DHCPです
Copyright by Kunio Miyamoto
2つほど(管理者側で)仕掛け
• ProxyはデフォルトゲートウェイとしてルータのIP
アドレスを設定
– Proxyは、外部ネットワークと「確実に」通信できるよ
うにする
• DHCPで配布するデフォルトゲートウエイは、透
過型Proxyのア...
構成例
Copyright by Kunio Miyamoto
192.168.44.2 192.168.44.100
ルータ
SSL対応
透過型
Proxy
・クライアントには、192.168.44.128~254を
DHCPで配布
・DNS...
通信の流れ
• クライアント群のPCから、透過型Proxyを経
由した外部通信が発生する
• 透過型Proxyは外部通信を補足し、内容を取
得して、ルータを経由して外にリクエストを送
信する
– SSLであっても、透過型Proxyで一旦暗号化を...
ここでのまとめ
• なるべくクライアントを使う人たちに負担をか
けない形でネットワークにSSL対応の透過型
Proxyを導入する方法を紹介しました
• それでも証明書を入れる手間は残ります…
Copyright by Kunio Miyamoto
Proxyでフィルタリング
フィルタリングのやり方は大きく2通り
Copyright by Kunio Miyamoto
Proxyとセキュリティの相性
• よいところとあまりよくないところがある
– けど、総じてよいところのほうが多い
• アクセス先に関する証跡を取れる
– すでに説明しました
• アクセス先のフィルタリングを容易に行える
– 実はやり方は2通り...
ACLでアクセス制御
• SquidのACLを理解して使う
– ちょっとだけ覚えることがある
• 細かく制御できる
– SSL対応の透過型Proxyを使うと、HTTPSなサイト内
のパスレベルでアクセス制御が可能に
• 例えば以下のサイトが参考...
ACL記述の例
Copyright by Kunio Miyamoto
acl blacklist dstdomain "/etc/squid3/blacklist"
acl blacklist_regex url_regex "/etc/sq...
“hosts”ファイルでアクセス制御
• 基本的なUNIXサーバ管理をできれば実現可
– 名前解決のしくみと優先順序くらいは設定できる
必要はある
• 個別のホストに対するアクセス制御は簡単に
行える
– 細かい制御は苦手
– 透過型Proxy...
おまけ:Proxy認証
• Proxyサーバを使うための認証
– 認証には、HTTPの認証ヘッダを用いる
• 「誰が」「どこに」アクセスしたかをより直感的
に理解可能になる
• マルウエアがC&Cサーバにアクセスする妨
げになることも
• 透過...
構成例
root@squidproof:/home/wakatono# cat /etc/squid3/squid.conf
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /e...
ここでのまとめ
• SSL対応の透過型Proxyを使うと、URLが全
部わかるため、HTTPS経由でしかアクセスで
きないところであっても、URLレベルのアクセ
ス制御も行えるようになる
• Proxy認証とSSL対応透過型Proxyの相性は
...
まとめ
本日お話ししたこと
Copyright by Kunio Miyamoto
本日のまとめ
• Proxyにもいくつか種類がある
• 普通のProxyではSSLの内容を見れない
• SSL対応の透過型Proxyは制約があるが、よ
りさまざまな情報を得られる
• ACLとSSL対応の透過型Proxyは相性がよい
• SSL...
Copyright by Kunio Miyamoto
Thank you!
If you have any question,
Twitter: @wakatono
Facebook: https://www.facebook.com/wak...
Upcoming SlideShare
Loading in …5
×

Play_using_Proxy

5,797 views

Published on

Various of Proxy Configuration, Construction, and Play.

Published in: Technology
  • Be the first to comment

Play_using_Proxy

  1. 1. Proxyで遊ぼう! ~作って&使ってわかるProxyの面白さ 2016/09/21 情報セキュリティ大学院大学 客員研究員 宮本 久仁男 1
  2. 2. はじめに • 本講義は、別に盗聴などを助長するものでは ありません • あくまで自分の管理範囲内にProxyを設置す る方のために、「こんな構成方法やこんな使 い方があるんだ」という紹介をするためのもの です Copyright by Kunio Miyamoto
  3. 3. 本日の話でご説明すること • いろんなProxyがあるということ • 普通のProxyの構成法 • 透過型Proxyの構成法 • Proxyで残る証跡 • その他Proxyに関連した事項 Copyright by Kunio Miyamoto
  4. 4. 前提 • Debian GNU/LinuxをProxyサーバを構成するOS にします • ProxyサーバソフトはSquid3.xを使います • 「極力」debパッケージを使います • Proxyサーバが扱うプロトコルはHTTP/HTTPS • HTTPはTCP80番、HTTPSはTCP443番を使う想 定です • なお、今回はProxy認証やフィルタリングなどの話 は「あんまりしません」 Copyright by Kunio Miyamoto
  5. 5. Content. • Proxyって何? • Proxyの効能 • Proxyの使い方 • 設定なしでProxyを使う~透過型Proxy • 設定なしでProxyを使う2~SSL対応の透過型 Proxy • 設定なしでProxyを使う3~何も意識せずに Proxyを経由させるには? • Proxyでフィルタリング • まとめ Copyright by Kunio Miyamoto
  6. 6. Proxyって何? Copyright by Kunio Miyamoto
  7. 7. Proxy is 何? • Proxyは代理(通信)サーバ – 本来通信を行うべきコンピュータ間に介在し、代理で 通信を行う機能を持つ – HTTPやHTTPSをしゃべるモノが多いけど、別に HTTPやHTTPS以外のプロトコルを扱えるものもあ る • よく見るものは、(主に)組織内のクライアントコ ンピュータから依頼を受付け、かわりに外部ネッ トワークへのアクセスを行う機能を持つもの – サーバを指す場合とソフトウエアを指す場合がある Copyright by Kunio Miyamoto
  8. 8. さまざまなProxy(の一部) • (普通の)Proxy • リバースProxy / HTTPアクセラレータ Copyright by Kunio Miyamoto Proxy 組織内NW リバース Proxy 組織内NW
  9. 9. Proxyがない生活 • 直接の外部通信を制限するのがかなり大変 – 安物のブロードバンドルータでやろうとすると、かなり大変(出来ない こともある) • これでもいいように見えるけど、実はNAT(NAPT)はルータに多大 なる負荷をかける – ブロードバンドルータのNAT機能は実はNAPT – できればNAPTしなくて済むのがルータ(のCPUとメモリ)には優しい • 何がどこに行ったか、証跡が全く残らない(!) – ルータに残ることもあるけど、さっぱりわからないことが多い – 時たま「どこ行ったっけ」と通信先を把握したい人にはチトきつい – 他に取る方法はあるけど、ネットワークがわかる人以外には結構厳し い(面倒しかない) Copyright by Kunio Miyamoto
  10. 10. Proxyがない生活(の例) • ルータがアドレス変換を行う • クライアントは直接サーバに接続・通信する Copyright by Kunio Miyamoto ルータ
  11. 11. Proxyのある生活 • 直接外と通信するコンピュータや通信先を(比較的)ラクに 制限できる – いらんものまで外部と繋がせる必要はない • ルータに(少し)優しい – 一度気合を入れて設計してしまえば、あとは(ルータは)手放し でもOK – NAPTを使う必要は「全く」ない(NATでOK) • 証跡を残せる(!) – Proxyのログを見ることで、どのアドレスからどのURLに通信を 行ったかを確認できる • POSTしたデータとかはきつい(取れてもデータ量が劇的に増える) Copyright by Kunio Miyamoto
  12. 12. Proxyがある生活(の例) • クライアントはProxyと通信します • Proxyのみが外部のコンピュータと通信します Copyright by Kunio Miyamoto Proxy
  13. 13. ここでのまとめ • いろんなProxyがありますが、今回扱うのは、 HTTP/HTTPS Proxy • Proxyを入れるとよいことを示しました • Proxyを使った例を示しました Copyright by Kunio Miyamoto
  14. 14. Proxyの使い方 便利だけど少しだけ制限が出ます Copyright by Kunio Miyamoto
  15. 15. Proxyの使い方 • Proxyサーバを準備します – Debian, CentOS, Ubuntuなんかで普通に使え ます(入れるのは一瞬(!)) • クライアントにProxyの設定を入れます – 多少の設定はありますが、問題なし Copyright by Kunio Miyamoto
  16. 16. こんなところにもProxy? • Webアプリケーションの試験ツール – 例:Fiddler, Burp Suite, OWASP ZAP – HTTP通信を… • 横取りして • 書き換えて • 試験対象に送る • モバイルキャリアのWebアクセラレータ – 画像(JPG, PNG, etc…)取得のHTTP応答を… • 横取りして • 画像のサイズを小さくして • クライアントに送る • セキュリティ対策ソフトウエア(ウイルススキャナ) – 通信に含まれる危険なコンテンツ捕捉のために、Proxyを(ユーザには見え ない形で)挿し込むことも Copyright by Kunio Miyamoto
  17. 17. Proxyサーバの作り方 • ここではDebian GNU/LinuxにSquidと呼ば れるProxyサーバソフトウエアを入れて、 Proxyにします • squid3パッケージをインストール&設定する と、とりあえず普通のProxyを使えるようにな る – apt-get install squid3 Copyright by Kunio Miyamoto
  18. 18. クライアントのProxy設定 • PCの場合、Webブラウザの設定画面から可 能 • スマートフォン、タブレット(Android)の場合、 ネットワークの設定から可能 • iPhoneの場合、WiFiの設定(詳細設定)で Proxy情報を投入する Copyright by Kunio Miyamoto
  19. 19. FirefoxでのProxy設定例 Copyright by Kunio Miyamoto
  20. 20. Proxyに残る情報~楽しい証跡 • PCもAndroidもiPhoneも、Proxy経由でのアクセ スを行うとProxyに証跡(アクセス履歴)が残る – 当然、広告サービスなどへのアクセス履歴も残るた め、通常のWebアクセス画面を見るよりもはるかに 詳しく通信履歴がわかる • 通信量もある程度わかる • 不審なドメインにアクセスした場合も(当然)バッ チリ履歴が残る(!) – マルウエア感染時の通信先等を調べるのに役立つ – 例外アリ Copyright by Kunio Miyamoto
  21. 21. Webサイト閲覧遷移も見える Copyright by Kunio Miyamoto
  22. 22. 例外1:SSL利用時 • SSLを使った場合、通信内容が全部暗号化さ れているため、アクセスしているホスト「だけ」 わかる – 何もわからないよりは100万倍いいけど • 当然、URLなどはわからない – 部分的に止めたい時などが非常に困る Copyright by Kunio Miyamoto
  23. 23. 例外2:外部のAnonymizer利用時 • Anonymizer≒外部のProxyサービス – アクセス元隠蔽サービス • Anonymizerを使うと、Proxyに残るのは 「Anonymizerにアクセスした」ということだけ – 実際はAnonymizerの作りに依存する Copyright by Kunio Miyamoto
  24. 24. 例外3:Tor等のトンネル利用時 • Tor等のトンネル経由でアクセスしたサイトは (当然だが)Proxyには残らない • ここまでやる人は、(Torのゲートウェイにアク セスした以外は)Proxyに証跡が残るようなこ とはやらない(割り切り重要) Copyright by Kunio Miyamoto
  25. 25. SSLを使った時の見え方 Copyright by Kunio Miyamoto CONNECTメソッドを使って、 www.iisec.ac.jp の TCP443番 ポートに繋いだということしかわ からない
  26. 26. CONNECTメソッド • Proxyサーバに対して「指定したサーバの指定したポ ートに接続して」と依頼するメソッド • 接続された後は、SSL/TLSで暗号化された伝聞がや りとりされる • Proxyはやりとりの内容を一切知れない(流れたデー タ量くらいは知ることができる) Copyright by Kunio Miyamoto Proxy SSLサーバ SSLサーバへ接続依頼 クライアント SSLサーバへ接続 クライアントはProxyが接続した通信路を使って SSL/TLS通信を実施
  27. 27. ここでのまとめ • 普通のProxyは、Proxyサーバの構成にあわ せてクライアントの設定を行うことで使えます • Debian GNU/Linuxでの入れ方は簡単 • 一部の例外はあるものの、通信の証跡が残 るため、いろいろ調べやすいです Copyright by Kunio Miyamoto
  28. 28. 設定なしでProxyを使う ~透過型Proxy 少し制限が出ます Copyright by Kunio Miyamoto
  29. 29. 透過型(Transparent)Proxy • クライアントとサーバの間に入って、クライア ントの通信を横取りし、サーバに代わりにぶ ん投げる • クライアント側は特に何か設定をする必要は 「ない」 – Proxyががんばる Copyright by Kunio Miyamoto
  30. 30. 透過型Proxy構成例 Copyright by Kunio Miyamoto 透過型 Proxy インターネット クライアントPCのデフォルト ゲートウェイに透過型Proxyを 設置 192.168.44.100 192.168.44.88
  31. 31. 岩崎学園のWebサイトを見る Copyright by Kunio Miyamoto
  32. 32. 透過型Proxyがある時の パケットの見え方 Copyright by Kunio Miyamoto クライアントからサーバへ 透過型Proxyからサーバへ サーバから透過型Proxyへ サーバからクライアントへ
  33. 33. Debian GNU/LinuxのSquid3 パッケージの制約 • SSL通信を透過型Proxyできない – 普通のHTTPを透過型Proxyすることは可能 – SSLするにはパッケージのコンパイルオプション不足 • SSL対応の透過型Proxyを構成するためには、 Squid3のパッケージを「自分で」作り直す+証明 書の作成とSquid3での使用+証明書のクライア ントへの配布を行う必要がある – そんなに難しくはない Copyright by Kunio Miyamoto
  34. 34. ここでのまとめ • 透過型Proxyの構成を紹介しました • 透過型Proxyは便利ですが、すぐにできるも のはSSL対応してないためちょっと不便 Copyright by Kunio Miyamoto
  35. 35. ちょっとだけ寄り道 ~原始的なSSL盗聴 アリモノを利用してSSLを盗聴する Copyright by Kunio Miyamoto
  36. 36. お約束 • あくまでこれは、「SSLを盗聴するためには本 質的にこういう手段を取る」という説明をする ための内容です • 悪用はしないでください(!) – 例:POP over SSLで通信しているメールサーバ の(自分の)パスワードを忘れた時とかにキャプ チャして解読可能 • 私、経験あります… Copyright by Kunio Miyamoto
  37. 37. 用意するもの • Stone(SSL対応) apt-get install stone • Stoneで使う証明書 – opensslコマンドで作成 – 作成の仕方は省略 Copyright by Kunio Miyamoto
  38. 38. やり方 • Stoneをインストールしたホストで以下のコマンドラインを 実行(例えば) stone -z key=/etc/stone/stone.pem -z cert=/etc/stone/stone.pem localhost:12345 443/ssl & stone [SSLで接続したいホスト]:443/ssl localhost:12345 & • https://[Stoneが動作するホストのIPアドレス/ にWebブラ ウザでアクセスする – hostsファイルにSSLで接続するホスト名を登録しておく必要が あることも • 一般的にはMan-in-the-Middle(中間者攻撃)と呼びます Copyright by Kunio Miyamoto
  39. 39. 少々面倒だけど、SSL通信の 中身を覗ける • 2つのstoneの間を平文通信させる →平文通信は容易にキャプチャ&解読可能 • SSL対応の透過型Proxyもこんなことやります Copyright by Kunio Miyamoto Stoneが動作するホスト stone stone 本来のSSLサーバ 平文 SSLSSL
  40. 40. ブラウザエラーで見えない場合 Copyright by Kunio Miyamoto Internet Explorerのインターネットオプションで「詳細設定」タブを選択し、 図のように設定する(実験後はもとに戻すこと!)
  41. 41. ここでのまとめ • SSLの盗聴(Man-in-the-Middle)は意外と簡 単にできます • SSLを一旦解読→再度SSL通信というやり方 は、SSL対応の透過型Proxyも使います Copyright by Kunio Miyamoto
  42. 42. 設定なしでProxyを使う2 ~SSL対応の透過型Proxy 実はちょっと面倒 Copyright by Kunio Miyamoto
  43. 43. SSL対応の透過型Proxy構成例 Copyright by Kunio Miyamoto SSL対応 透過型 Proxy インターネット クライアントPCのデフォルト ゲートウェイに透過型Proxyを 設置 サーバ証明書 ルート証明書
  44. 44. SSLで透過型Proxy • 実は(少しだけ)面倒 • 透過型Proxyを入れた場合、SSL通信をして いる「つもり」のホストと実際にSSL通信をして いるホストが異なる – 証明書の検証機能に「不正なサイト」と叱られる Copyright by Kunio Miyamoto 透過型Proxyを使うコンピュータに「Proxyに入れた 証明書のルート証明書」を入れる必要がある
  45. 45. それより前に… • Squid3のパッケージを作り直す必要がある – configure + make + make install でもいいが、メ ンテナンス性が非常に悪い – DebianでもRed Hat Enterprise Linuxでも Ubuntuでもいいが、ソフトウエアは可能な限りパ ッケージ化+パッケージ管理システムにインスト ールや削除を任せるのが定石 Copyright by Kunio Miyamoto
  46. 46. Squid3のカスタムパッケージ • 準備 – Squid3のパッケージ構築環境作成+Squid3の パッケージビルド – configureオプションの変更 – changelogへの追記 • パッケージ再構築 – dpkg-buildpackageコマンドの実行 • 作成されたパッケージのインストール Copyright by Kunio Miyamoto
  47. 47. 必要なものはシステムに聞く Copyright by Kunio Miyamoto パッケージを作ろうとすると… 足りないものを教えてくれます
  48. 48. 詳細は以下のWebサイトに • Squid 3.4.x for with transparent ssl proxying/support for Debian Wheezy. – https://codepoets.co.uk/2014/squid-3-4-x- with-ssl-for-debian-wheezy/ – wheezyは、Debian GNU/Linux 7の通称 – 現在、Debian GNU/Linuxは8が最新(通称は jessie)だが、上記手順とほぼ全く同じで対処可 能 Copyright by Kunio Miyamoto
  49. 49. カスタム版Squid3パッケージ作成 時の注意 • 標準のSquid3パッケージをビルドする時に必要 なものに加え、libssl-devパッケージをインストー ルしておく必要がある – Proxy経由でSSL/TLS通信をする時は、Webブラウ ザとWebサーバの間でSSL/TLSセッションが確立さ れる(ProxyはSSL/TLSの処理をしない) – SquidがSSL対応の透過型Proxyになると、Squid自 身がSSLプロトコル処理を行う →libssl-devが必要(!) – その他、細かいもの(squid-langpackやapache2)な どが必要になることも(依存関係を解決するために必 要) Copyright by Kunio Miyamoto
  50. 50. 検証に使ったものまとめました • 以下のURLから取得可能です https://www.dropbox.com/s/69h78cd5k6x0pbo/ squid_proof.tar.gz • アーカイブには以下のようなものが含まれます – pkgs(ビルドしたdebパッケージ(amd64アーキテクチ ャ) – certificate(サンプルの証明書類) – scripts(iptables設定、証明書作成、SSLDB設定等) – etc(/etcより下に置かれるネットワーク設定、Squid設 定) Copyright by Kunio Miyamoto
  51. 51. パッケージの入れ方 • 入れるマシンはインターネットに接続されてい る必要があります • Debian GNU/Linux 8(amd64)がターゲット • アーカイブを展開後、以下のコマンドをrootで 実行 – cd squid_proof – cd ./pkgs; dpkg –I *.deb – apt-get –f install Copyright by Kunio Miyamoto
  52. 52. 設定の仕方 • scripts, etc配下のファイルを使い、ユーザrootで作業します • 透過型ProxyのIPアドレスを決めます • 証明書を作ります(この時、上記IPアドレスをCNにします) ここで作ったファイルのうち、squid.pemとsquid.crtを使いま す • root権限でprepare_ssldb.sh を実行し、Squidが使うSSL 証明書DBを初期化します • /etc/squid3 配下にsquid.confをコピーします • /etc/squid3/sslを作成し、証明書ファイルsquid.pemをコピ ーします • /etc/init.d/squid3 restart を実行します • squid.crt(証明書作成時に作成されます)を、クライアントに インストールします Copyright by Kunio Miyamoto
  53. 53. 証明書で注意事項(!) • 作成した証明書の類は、盗まれないように! • Internet Explorer, Google Chromeなどは、OS が管理する証明書ストアの証明書を使う – 透過型Proxyを使うために作った証明書を証明書スト アに入れる時は、ルート証明書にする • Mozilla Firefoxは、「Firefox自身が管理する証 明書ストア」にある証明書を使う Copyright by Kunio Miyamoto 使うブラウザに応じて、証明書 インポートの手間がかかる
  54. 54. Windowsの証明書ストア上の 配置 Copyright by Kunio Miyamoto 証明書ファイルを ダブルクリックした後に…
  55. 55. 証明書管理ツールでも確認 Copyright by Kunio Miyamoto
  56. 56. Firefoxの場合(1/3) Copyright by Kunio Miyamoto
  57. 57. Firefoxの場合(2/3) Copyright by Kunio Miyamoto この後に、証明書ファイルを選ぶ
  58. 58. Firefoxの場合(3/3) Copyright by Kunio Miyamoto
  59. 59. Proxyログ上はどう見える? Copyright by Kunio Miyamoto https://www.iisec.ac.jp/配下の 個別のURLにアクセスしている のがわかる
  60. 60. 証明書の見え方は?(1/2) Copyright by Kunio Miyamoto
  61. 61. 証明書の見え方は?(2/2) Copyright by Kunio Miyamoto
  62. 62. WikipediaはHTTPSだけど… Copyright by Kunio Miyamoto FirefoxではSSL対応の透過型Proxyを 経由してWikipediaにアクセスできませ んでした(証明書の検証方法がより厳密 なため)
  63. 63. SSL/TLSの内容を解かれる • 何の前提もなく解かれるわけではない – 説明したように準備が必要 – サイトによっては、接続できないこともある • よほどうかつなコトしなければ、第三者にSSL/TLSの 内容を(通信路上で)盗み見られることはない • DLP(情報漏えい防止のためのシステム)で、SSL対 応の透過型Proxyと同じような仕組みを採用すること がある – 普通に中身を確認する術がないため Copyright by Kunio Miyamoto
  64. 64. ここでのまとめ • SSL対応の透過型Proxyを構成する方法を紹介しまし た • SSL対応の透過型Proxyを使えると、通常のProxyで はわからない「SSLでアクセスしているURL」もログ取 得できるので、より詳細な管理が可能になります • SSL対応の透過型Proxyは、クライアントにも準備が 必要です • その他、条件を揃えたらできることの例を示しました Copyright by Kunio Miyamoto
  65. 65. 設定なしでProxyを使う3 ~意識させずにProxyを使わせるには? そのための、DHCPです Copyright by Kunio Miyamoto
  66. 66. 2つほど(管理者側で)仕掛け • ProxyはデフォルトゲートウェイとしてルータのIP アドレスを設定 – Proxyは、外部ネットワークと「確実に」通信できるよ うにする • DHCPで配布するデフォルトゲートウエイは、透 過型Proxyのアドレス – DHCPでIPアドレスの配布を受けるマシンは、透過型 Proxyを「必ず通る」ようにする – これだけでOK(!) Copyright by Kunio Miyamoto
  67. 67. 構成例 Copyright by Kunio Miyamoto 192.168.44.2 192.168.44.100 ルータ SSL対応 透過型 Proxy ・クライアントには、192.168.44.128~254を DHCPで配布 ・DNSは192.168.44.2をDHCPで設定する ・デフォルトゲートウェイは192.168.44.100を DHCPで設定する ・クライアントには、SSL対応透過型Proxyが使 う証明書の「ルート証明書」を入れておく インターネットへ ・SSL対応透過型Proxyは、固定アドレスで 192.168.44.100を設定しDNSとデフォルト ゲートウェイは192.168.44.2を設定する クライアント群
  68. 68. 通信の流れ • クライアント群のPCから、透過型Proxyを経 由した外部通信が発生する • 透過型Proxyは外部通信を補足し、内容を取 得して、ルータを経由して外にリクエストを送 信する – SSLであっても、透過型Proxyで一旦暗号化を解 かれ、内容に応じたリクエストが送信される • 透過型Proxyはレスポンスを受取り、クライア ント群のPCにレスポンスを返す Copyright by Kunio Miyamoto
  69. 69. ここでのまとめ • なるべくクライアントを使う人たちに負担をか けない形でネットワークにSSL対応の透過型 Proxyを導入する方法を紹介しました • それでも証明書を入れる手間は残ります… Copyright by Kunio Miyamoto
  70. 70. Proxyでフィルタリング フィルタリングのやり方は大きく2通り Copyright by Kunio Miyamoto
  71. 71. Proxyとセキュリティの相性 • よいところとあまりよくないところがある – けど、総じてよいところのほうが多い • アクセス先に関する証跡を取れる – すでに説明しました • アクセス先のフィルタリングを容易に行える – 実はやり方は2通りある • 1つはProxyのACLを使う • 1つは”hosts”ファイルを使う(透過型Proxyの場合は不調) • おまけ:Proxy認証を追加することで、より強固に – マルウエア通信をブロックできることも(!) Copyright by Kunio Miyamoto
  72. 72. ACLでアクセス制御 • SquidのACLを理解して使う – ちょっとだけ覚えることがある • 細かく制御できる – SSL対応の透過型Proxyを使うと、HTTPSなサイト内 のパスレベルでアクセス制御が可能に • 例えば以下のサイトが参考になる – http://squid.robata.org/faq_10.html – http://futuremix.org/2005/07/squid-access-deny Copyright by Kunio Miyamoto
  73. 73. ACL記述の例 Copyright by Kunio Miyamoto acl blacklist dstdomain "/etc/squid3/blacklist" acl blacklist_regex url_regex "/etc/squid3/blacklist_regex" http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager # http_access allow localhost http_access deny blacklist http_access deny blacklist_regex http_access allow all ①ラベルを定義 ②拒否を記述 (allowよりも前に) /etc/squid3/blacklistには、ドメインを列挙し、/etc/squid3/blacklist_regexには URL(*)を列挙する *URLが “^https://”で始まる場合、SSL対応の透過型Proxyでないとアクセスを検知できない
  74. 74. “hosts”ファイルでアクセス制御 • 基本的なUNIXサーバ管理をできれば実現可 – 名前解決のしくみと優先順序くらいは設定できる 必要はある • 個別のホストに対するアクセス制御は簡単に 行える – 細かい制御は苦手 – 透過型Proxyの場合は不調 – Squidが解決結果をキャッシュしている場合も不調 Copyright by Kunio Miyamoto
  75. 75. おまけ:Proxy認証 • Proxyサーバを使うための認証 – 認証には、HTTPの認証ヘッダを用いる • 「誰が」「どこに」アクセスしたかをより直感的 に理解可能になる • マルウエアがC&Cサーバにアクセスする妨 げになることも • 透過型Proxyとは相性が良くない – 今回構築した透過型Proxyは、認証そのものが なされず単にエラーとなる(Squidの場合) Copyright by Kunio Miyamoto
  76. 76. 構成例 root@squidproof:/home/wakatono# cat /etc/squid3/squid.conf auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/htpasswd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off acl Password proxy_auth REQUIRED (中略) http_access deny blacklist http_access deny blacklist_regex http_access allow Password ## http_access allow all # http_access allow all Copyright by Kunio Miyamoto Proxy認証の条件(認証用プログラムやパスワー ドデータベース、認証間隔その他)を指定し、ACL “Password”にProxy認証を必須とするよう条件づ けている ACL “Password”の条件を満たしたら(認証をパス したら)アクセスを許可する /etc/squid3/htpasswd は、htpasswdコマンドで作成可能
  77. 77. ここでのまとめ • SSL対応の透過型Proxyを使うと、URLが全 部わかるため、HTTPS経由でしかアクセスで きないところであっても、URLレベルのアクセ ス制御も行えるようになる • Proxy認証とSSL対応透過型Proxyの相性は 悪い(Squidの場合) Copyright by Kunio Miyamoto
  78. 78. まとめ 本日お話ししたこと Copyright by Kunio Miyamoto
  79. 79. 本日のまとめ • Proxyにもいくつか種類がある • 普通のProxyではSSLの内容を見れない • SSL対応の透過型Proxyは制約があるが、よ りさまざまな情報を得られる • ACLとSSL対応の透過型Proxyは相性がよい • SSL対応の透過型Proxyは、セキュリティを考 えると非常に面白い使い方が可能 Copyright by Kunio Miyamoto
  80. 80. Copyright by Kunio Miyamoto Thank you! If you have any question, Twitter: @wakatono Facebook: https://www.facebook.com/wakatono E-mail: wakatono@gmail.com Search “wakatono” by Google

×