SMTPの脆弱性と対策

 
 SMTPと言えばSPAM
 SPAMと言えば第三者中継と発信元偽装。
 ぐらいはわかるがそれだけでもないらしい。と言うことでテキストを整理。
 

SMTPにおける脆弱性

これらはSMTPが悪いというより、運用法が悪いと脆弱性になりかねない仕様。
その辺を意識しながらまとめてみる。
 

ユーザー認証機構が無い

基本的にSMTPにおいてはユーザーを認証する仕組みが存在しない。つまり正規のユーザーも不正なユーザーも、だれでもSMTPでメールを送れる。
そりゃスパマーが余所様のサーバーでゴミメールをバカスカ送るはずである。
またこれは、送信元アドレスが詐称されてもそれを確認するすべを持たないということとも同義。これもやはり返信しようのないゴミメールやトンデモないイタズラメールの温床になる。いや全く非道い話。
とてもよろしくない。
 

第三者中継が可能

これは設定によるのだけれど、先に述べた認証不要である点から不正なユーザーでも簡単に利用できてしまうというオハナシ。
メールサーバーが本来想定している動作というのは、
1)管理下にあるユーザーが(宛先は管理下、管理外問わず)メールを送ること。
2)(送信元は管理下、管理外問わず)管理下にあるユーザー宛のメールを受信すること。
である。
つまり送信先か送信元、どちらかに管理下のユーザーが含まれていることが前提。
そりゃあYahooBBのメールサーバーならYahooBBのユーザーが出す/受け取るメールいがい扱うはずがない。企業のメールサーバーでも、大学のメールサーバーでも、対照となるユーザーは(社員、学生など)それぞれだがこのルールに違いはない。
が、しかし、である。
世の中には管理下にないユーザーから、管理下にないユーザーへのメールを中継してしまうメールサーバーもある。コレもひとえに認証がないから出来てしまう業ではあるのだが、この第三者中継が出来てしまうからこそ、SPAMが蔓延して毎日ドキドキ出会い人妻ドピュなメールが来てしまうのである。欲求不満セレブの逆支援メールも乱発である。全く困った話である。話がそれたが、第三者中継こいつを許容してしまうメールサーバーはSPAMの温床になる。コレがポイントである。
 

メールの内容は平文。暗号化は標準装備されていない

故に盗聴の危険性アリ。と言う奴である。
あまりに明らかなので割愛。
 

認証情報も平文

同上。
 

MTAの機能を悪用した攻撃が存在。

sendmailにはVRFYとかEXPNとかいうコマンドが存在して、デフォルトで許可されている。
「VRFY」コマンドはそのサーバに特定のユーザのメールボックスが存在するか否かを
「EXPN」コマンドはそのサーバに特定のメーリングリストが存在するか否かを
それぞれ応答コードにより知ることが可能。
うまく利用すれば当然犯罪の下準備に使えます。これまたとてもよろしくない。
あとどこかのMTA(言い忘れたけど、Mail Transfer Agentの略)にはバッファオーバーフロー脆弱性があるとかないとか。細かいことはよく知らないけれど。
 

SMTP脆弱性に対する対策

残念ながら具体的な技には触れない。
良きも悪きも資格で問われるのは小手先の技術より精神論一般論で、なおかつ現場の技術は現場にいないとよくわからないので。
 

外向きの25番ポート使用を制限

別名 Outbound Port25 Blocking
25番ポートというのはSMTPのデフォルト。
普通コレは自前のプロパイダーのものしか使わない。
つまり自ISPのメールサーバー以外で25番ポートへつなぐ奴は普通じゃない。
 (自前のメールサーバー使ってるとか会社のメールサーバーで云々という例外はあるが)
もっと言ってしまえば、余所様のSMTPを利用する奴なんてスパマーぐらいなものだ。
 (くどいが当然例外はある。フリーメールなんかその典型例。)
つまり、制限してやれば悪いことが出来にくくなる。
 (もちろん良いことでも出来なくなるので利便性は落ちるが。)
 
これは悪徳SPAM業者の締め出しを入り口側から行う方策。
悪用されないようにそれぞれのサーバー管理者ががんばるのも大事だが、悪人をのさばらせないためにこうしてISPががんばることも出来るというある意味興味深い事例だったりもする。
抜け道はあるんだけどね。。。
 
なお、コレは以下の方法で実装されるらしい。
1.MTAの機能の一部をMSA(Message Submisson Agent)に分離。
2.メール投稿はMSAが担当。ポートは25ではなく587を利用。
3.MSAはデジタル証明書などによるユーザ認証などが可能
4.MSAはSSLTLSによる暗号化もサポート
5.MTAはコレまで通り25番を利用して転送と受信を行う。
 
こうするとメールの投稿(=新規メールの送信)は587番ポートを使いMSAが行うため、認証が必要となり悪い人は使えなくなる。つまり外部からの不正な利用も防げるというわけ。
 

POP before SMTP

フリーのメールサービスに多いやり方。
送信前にメールを受信しろ!というルール。
メール受信を正しく行ったIPアドレス=正規ユーザー という考え方。
 

SMTP Authentication

SMTP-AUTHとも呼ぶ。
SMTPにユーザ認証を追加したシステム。
認証機構はSASL(Simple Authentication and Security Layer)に準拠。
方式としては平文、MD5によるチャレンジレスポンスなどがある。
 

SMTP over SSL , SMTP over TLS などによる暗号化とユーザ認証

盗聴防止のための暗号化。
ただしクライアント-サーバー間の通信のみが暗号化されるだけなのでメール自体は平文でネット上を流れる。本文を暗号化したければS/MIMEPGPなどを使うべき。
 
あとは不要な機能は無効にするみたいなある種常識が大事だとか。
結局最後は「よけいなものは使わない」「大事なものは暗号化」に終始するのかね・・・?