メモ: SSL/TLS で暗号化されちゃってるSMTPのパケ解析
といっても私の方法、完璧ではないようなんだけど
SSLで包まれてるとtcpdumpが使えないらしいのでWiresharkでやる。今回はGUI環境を使いたくないのでコマンドラインインターフェースであるtsharkを使う。ちなみに今日初めて使ったので読んだ人はきっとすぐ出来るようになるに違いない。うそだ
以下のページに記載されている方法をもとに、それのSMTP版をやるということにした。案外ネットにSMTP over SSLについてtsharkを使う記事はないんだけど (ネットでよく見たのはhttpsの解析)、まぁやることはだいたい同じなので。
http://wiki.wireshark.org/SSL
SMTPサーバが使っている鍵が /etc/pki/tls/certs/tomorrow.key にあったとする。ちなみにCentOSだとここにそもそも鍵を作るためのMakefileがあったりする。オレオレ証明書作るのに便利らしい。
で、自分のIPアドレスがXX.XX.XX.XXとしてただのSSL/TLS (STARTTLSではなく) を使ってる場合、多分これでパケットが見られる。
tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list: XX.XX.XX.XX,465,smtp,/etc/pki/tls/certs/tomorrow.key" -o "ssl.debug_file: /root/wireshark-log.txt" -i eth0 -R "tcp.port == 465"
ssl.debug_file の部分は絶対必要というわけではないが、交信内容を見るのに便利、とても。他のssl関係の部分はコピペなので私も意味わかってない。どうせその鍵使って復号するんだよ。ポートやインターフェースは自分の環境でちゃんと書き換える。eth1を使ってるのにeth0って指定したりしたらめー、なの。
うまくいっている場合にはtsharkから漏れ出てくる結果に以下のようなSMTP的に意味のあるメッセージが入る (うまくいかない場合は「暗号化されたパケット」とか書かれるだけ)
- SMTP C: EHLO [YY.ZZ.XX.VV]
- SMTP S: 235 Authentication Successful
- SMTP C: MAIL FROM:<hansodesan@project.mowa.example.com>
..
(生ログにあまりに生々しい情報ばっかりあったので大分削った)
ただし、これだと私のローカル環境だとたまにしかうまくいかなかった。具体的にはSMTPのメッセージが解読できずTLSの謎パケットだと主張され続けた。
なんでかは調べてないんだけれど (というのもそもそもの目的は一回SMTPのパケットが見られれば解決したからこっちを解読しまくる必要がない)、だいたいここから理由が推測できた
http://ask.wireshark.org/questions/11778/problem-viewing-unencrypting-ssl-packet
ログからは(A?)DHとか使ってる様子は伺えなかったのだけど、まぁ何かそういうケースがあるということなのだ。
結果としてエラーとしては平凡なRelay Deniedをサーバが出してメールのフォワーディングを阻止いることが判明した。こういう話である。確かにパケット解析は役に立ったが、やるせない。だってそれはサーバ側のログを読めばもっと早く分かることでしょう?
これより前段階にSSL/TLSがきちっと設定されてるかも調べといた方が良い、らしい。
https://www.owasp.org/index.php/Testing_for_SSL-TLS_(OWASP-CM-001)
SSLで包まれてるとtcpdumpが使えないらしいのでWiresharkでやる。今回はGUI環境を使いたくないのでコマンドラインインターフェースであるtsharkを使う。ちなみに今日初めて使ったので読んだ人はきっとすぐ出来るようになるに違いない。うそだ
以下のページに記載されている方法をもとに、それのSMTP版をやるということにした。案外ネットにSMTP over SSLについてtsharkを使う記事はないんだけど (ネットでよく見たのはhttpsの解析)、まぁやることはだいたい同じなので。
http://wiki.wireshark.org/SSL
SMTPサーバが使っている鍵が /etc/pki/tls/certs/tomorrow.key にあったとする。ちなみにCentOSだとここにそもそも鍵を作るためのMakefileがあったりする。オレオレ証明書作るのに便利らしい。
で、自分のIPアドレスがXX.XX.XX.XXとしてただのSSL/TLS (STARTTLSではなく) を使ってる場合、多分これでパケットが見られる。
tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list: XX.XX.XX.XX,465,smtp,/etc/pki/tls/certs/tomorrow.key" -o "ssl.debug_file: /root/wireshark-log.txt" -i eth0 -R "tcp.port == 465"
ssl.debug_file の部分は絶対必要というわけではないが、交信内容を見るのに便利、とても。他のssl関係の部分はコピペなので私も意味わかってない。どうせその鍵使って復号するんだよ。ポートやインターフェースは自分の環境でちゃんと書き換える。eth1を使ってるのにeth0って指定したりしたらめー、なの。
うまくいっている場合にはtsharkから漏れ出てくる結果に以下のようなSMTP的に意味のあるメッセージが入る (うまくいかない場合は「暗号化されたパケット」とか書かれるだけ)
- SMTP C: EHLO [YY.ZZ.XX.VV]
- SMTP S: 235 Authentication Successful
- SMTP C: MAIL FROM:<hansodesan@project.mowa.example.com>
..
(生ログにあまりに生々しい情報ばっかりあったので大分削った)
ただし、これだと私のローカル環境だとたまにしかうまくいかなかった。具体的にはSMTPのメッセージが解読できずTLSの謎パケットだと主張され続けた。
なんでかは調べてないんだけれど (というのもそもそもの目的は一回SMTPのパケットが見られれば解決したからこっちを解読しまくる必要がない)、だいたいここから理由が推測できた
http://ask.wireshark.org/questions/11778/problem-viewing-unencrypting-ssl-packet
The chosen cipher 0xC011 (TLS_ECDHE_RSA_WITH_RC4_128_SHA) is using a DiffieHellman key exchange. It is not possible to decrypt these sessions as the session keys are transferred with randomly generated keys, rather than the servers private key.
ログからは(A?)DHとか使ってる様子は伺えなかったのだけど、まぁ何かそういうケースがあるということなのだ。
結果としてエラーとしては平凡なRelay Deniedをサーバが出してメールのフォワーディングを阻止いることが判明した。こういう話である。確かにパケット解析は役に立ったが、やるせない。だってそれはサーバ側のログを読めばもっと早く分かることでしょう?
これより前段階にSSL/TLSがきちっと設定されてるかも調べといた方が良い、らしい。
https://www.owasp.org/index.php/Testing_for_SSL-TLS_(OWASP-CM-001)