Spammer対策
実装技術よもやま
2021/11/12 JPAAWG 4th GM A2-6 LT
フリービット株式会社 技術本部 クラウドサービス部
三浦敏孝
目次
• 自己紹介
• 枕: Service Update
• 乗っ取りspam総合対策の進捗と今後
• 本題: メール配送系の実装よもやま
• メールサーバの配送系開発がややこしい話
• まとめ
2021-11-12 / FreeBit Co., Ltd. 2
自己紹介
3
• フリービット株式会社: ISPサービスをOEM提供など
• 割と何でも屋に近い、開発もする運用担当
• 1999/4~ DTI
• ISPのサーバサービス全般
• DNS, Radius, WWW, Mail, … (NWと顧客DB以外何でも)
• 調達関係、対外接触、データセンタ構築運用
• 2007/8~ フリービットに買収され、遊撃隊仕事
• その中でGmail対抗メールサービスの開発・構築・運用
• 2015/5~ フリービットに転籍
• 現在はOEM向けメールサービスとDTIのISPサーバサービス運用担当
2021-11-12 / FreeBit Co., Ltd.
枕:
Service update
4
2021-11-12 / FreeBit Co., Ltd.
乗っ取りspammer: 積年の課題
5
• ひとつの対策では効果が低くて、spammerのワークフロー全
体に対する打ち手が必要
2021-11-12 / FreeBit Co., Ltd.
ID
List
ID
窃取
メール
送信
奪われにくくする
奪われたら止める
大量に送れなく
する
BlockList
着信拒否
検知する
Delist申請
乗っ取りspam総合的対策: 進捗
6
段階 問題の性質 ありうる対策 項番
ID窃取 弱いパスワード パス変画面で強さチェック(済)
既存の弱いパスワードはロック
(1)
(2)
ID名前空間狭い 認証IDをメールアドレスに (3)
リスト攻撃 認証頻度制限、パスワードレス認証 (4)(5)
共通 アクセス元分布 ID数/IP数比ペナルティ、GeoIPで重み付け、
国間移動ペナルティ (→横軸)
(6)
ユーザ認知 ログイン事実通知、多要素認証 (7)(8)
送信 送信の量自体 検知してユーザ対応(済)、エラー率ペナル
ティ(済)、ID毎流量制限(展開中)
(9)(10)
(11)
ブロックリスト 出口分離、リストチェック(済)、
IPローテーション
(12)(13)
(14)
2021-11-12 / FreeBit Co., Ltd.
乗っ取りspam総合的対策: 次は
7
段階 問題の性質 ありうる対策 項番
ID窃取 弱いパスワード パス変画面で強さチェック(済)
既存の弱いパスワードはロック
(1)
(2)
ID名前空間狭い 認証IDをメールアドレスに (3)
リスト攻撃 認証頻度制限、パスワードレス認証 (4)(5)
共通 アクセス元分布 ID数/IP数比ペナルティ、GeoIPで重み付け、
国間移動ペナルティ (→横軸)
(6)
ユーザ認知 ログイン事実通知、多要素認証 (7)(8)
送信 送信の量自体 検知してユーザ対応(済)、エラー率ペナル
ティ(済)、ID毎流量制限(展開中)
(9)(10)
(11)
ブロックリスト 出口分離、リストチェック(済)、
IPローテーション
(12)(13)
(14)
2021-11-12 / FreeBit Co., Ltd.
本題:
メール配送系の
実装上のよもやま
8
2021-11-12 / FreeBit Co., Ltd.
配送系開発の面倒: 情報伝達
• 処理が1か所に閉じればまあ
本質的困難はない
• 2か所以上で情報を渡そうと
すると面倒に
送信
サーバ
計数
ここで
エラー
前処理
箱
mailbox
付加情報
を利用
判定
情報付加
2021-11-12 / FreeBit Co., Ltd. 9
例:送信ドメイン認証の受信側チェック
• 遅ればせながら、箱に機能があるのでONにしようかと
• 総務省の星取表に○を増やしたい
• ISPからのメールはさておき、企業からの通知・告知の真正性判断には
有効かなと
• メンテを計画し始めたらちょっと困った
• Secondary MXは箱じゃないのでmilter足す必要があった
• Authentication-Resultsヘッダが使いづらい ←これ
2021-11-12 / FreeBit Co., Ltd. 10
段間情報伝達をヘッダでやる悩み
11
• 前段で判定した結果を後段に渡したい
• 送信ドメイン認証の検証結果はAuthentication-Resultsヘッダに書く
• パースが面倒
• cfルールやsieve等の行内パターンマッチでは簡単に解釈できない
• WebMailでの表示ならまあ頑張ってパーサを書く?
• 既に書かれていたらどうする問題
• 消す?: SMTPAUTHやS/MIMEの結果も同居しうるのでまずそう
• BATVみたいなヘッダ署名: A-Rにはメモ欄ないし乱発避けたい
→ 消せるように単独のX-ヘッダにする、のが定石?
• A-Rヘッダの存在意義……
2021-11-12 / FreeBit Co., Ltd.
例:自動応答のループ防止
12
• Vacation responderが嫌われる理由=メールがメールを生む
• ループは防ぎたいが外部注入とは区別したい
• 署名ヘッダを作って応答返さない条件に加えた
• 処理が一か所だったのでまあ難しくない
2021-11-12 / FreeBit Co., Ltd.
例:送信サーバの出口分離を試作
13
• authid-from一致とspam判定結果で出口を分けられるか
• SMTP受信処理(milterもここ)と次段への配送は別の処理
• 間にキューが挟まることもあるのが曲者: ヘッダ渡しになる
• spam判定milterの結果をcfルールで取り込むのが無理だった
• ボディまで全部読んだらヘッダが挿入される
→ヘッダ読み終わってるので取り込めない
• SMTPAUTH情報をキュー再送時に持ち越すにはcfマクロの
persistent指定で何とか解決
• 副作用があるのであまりやりたくなかった
2021-11-12 / FreeBit Co., Ltd.
もう少し開発すっきり出来んのか?
14
• sendmailは開発が呪術的(バッドノウハウの塊)
• cf開発に若手を引き込みづらい
• postfixやeximはどうですか?
• と言いつつ最後はsendmail改造してる
• milterも呪術的かつ融通効かない
• プロトコル非公開: 皆でソース見て解析してる
• 機能する場合が限定的
• 宛先毎に出力を分けたければメール分離が必要
2021-11-12 / FreeBit Co., Ltd.
すっきりしたMTA欲しいですね
15
• MTA界のEmacs欲しい
• qmail/postfix的に適当にモジュール化、プラグインを差し込みやすく
• 検出書き換え系のコアロジックを内部言語で書いて改造しやすく
• ヘッダ以外にメッセージ付随変数が欲しい
• ないのでスクラッチするとしたら(妄想)
• メールは仕様が巨大なので機能不足/コレジャナイが出がち
• 箱の中身を覗いてみると呪術の塊だったりすることも
• 開発してるベンダさんどうやってるのかなあ
• なんだかんだGmailってうまくできてる
• なんてぼやきながら順次開発してます
2021-11-12 / FreeBit Co., Ltd.
まとめ
まとめ
17
• 乗っ取りspammer総合対策の進捗
• 送信流量制限展開中、次はリスト攻撃対策
• メール配送系への機能追加は魔窟
• 特に情報伝達をヘッダでやろうとすると面倒に
• sendmailなまじいろいろできるけど呪術的
• 皆さん配送系の機能追加どうやってるんでしょう
2021-11-12 / FreeBit Co., Ltd.
Thank you

A2-6 現場発!メールサービスを支える運用者の集い 2021 秋(フリービット 三浦氏)