Upgrade to Pro — share decks privately, control downloads, hide ads and more …

これからのメールセキュリティ(暗号編)

 これからのメールセキュリティ(暗号編)

「Internet Week ショーケースオンライン2021」でお話したときの資料です。

送信ドメイン認証とメールの暗号化の技術についてのオランダと日本の比較、メール暗号化技術についての概要を紹介しています。
-----
いずれチャットに置き換わると言われ続けている電子メールですが、 今なおインターネットの基盤としてさまざまな局面で利用され続けています。 そのメールの基本的な構造に変化はありませんが、 現在でもさまざまな技術や仕様を取り込んで進化しています。 ここでは、 最新の送信ドメイン認証技術や暗号化の仕組みについて紹介します。

HIRANO Yoshitaka

July 09, 2021
Tweet

More Decks by HIRANO Yoshitaka

Other Decks in Technology

Transcript

  1. 自己紹介 名前 平野 善隆 所属 株式会社クオリティア チーフエンジニア 資格等 Licensed Scrum

    Master Certified Scrum Developer 主な活動 M3AAWG JPAAWG IA Japan 迷惑メール対策委員会 迷惑メール対策推進協議会 メッセージング研究所(MRI) Audax Randonneurs Nihonbashi
  2. メールとの関わり 1990 パソコン通信などでメールに触れる 199x ドメインを取得して近所のISPに個人のサーバーを置 かせてもらって運用開始 2000 外人さんの多い会社に転職したのでメールの漢字に ふりがなを付けたりして遊ぶ (のちのhiragana.jp)

    個人のサーバーをちゃんとしたデータセンターに移 動。imail.ne.jpというドメインを取って一攫千金を 夢見るが挫折 2004 メールの会社に入社 以降 スパムフィルタ、誤送信防止製品の開発やサービス の立ち上げ。PPAPの礎を築く。
  3. 一方 日本では SPF SPF -all DMARC 厳しい DMARC DNSSEC START

    TLS MTA- STS DANE オランダ政府(※1) 94% 92% 94 % 59 % 93 % 98% - 81% go.jp (2021/7) (※2) 94% 74% 7.3% 0.9% 6.0 % 63% 0% 0% .jp (2021/7) (※4) 71% 14% 2.3% 0.3% 0.10% 64% 18件 6件 https://www.forumstandaardisatie.nl/sites/bfs/files/rapport-meting-informatieveiligheidstandaarden-maart-2020.pdf ※1 オランダ政府データ (2020/03) ※2 QUALITIA独自調べ go.jp(全てではない)のうちMXのあるドメイン(サブドメインは含まない) N=330 (2020/11) N=317(2021/7) ※3 QUALITIA独自調べ jpドメイン(全てではない)のうちMXのあるドメイン N=約32万(サブドメイン含む) ※4 N=約20万(eTLD+1のみ) 0 20 40 60 80 100 SPF SPF(-all) DMARC 厳しいDMARC DNSSEC STARTTLS DANE オランダ政府 go.jp .jp
  4. 一方 日本では (昨年との比較付) SPF SPF -all DMARC 厳しい DMARC DNSSEC

    START TLS MTA- STS DANE オランダ政府(※1) 94% 92% 94 % 59 % 93 % 98% - 81% go.jp (2020/11) (※2) 93% 73% 7.0% 1.5% 5.5 % 58% 0% 0% (2021/7) (※2) 94% 74% 7.3% 0.9% 6.0 % 63% 0% 0% .jp (2020/11) (※3) 62% 11% 1.5% 0.3% 0.04% 54% 13件 6件 (2021/1) (※4) 71% 14% 2.0% 0.3% 0.09% 62% 15件 7件 (2021/7) (※4) 71% 14% 2.3% 0.3% 0.10% 64% 18件 6件 https://www.forumstandaardisatie.nl/sites/bfs/files/rapport-meting-informatieveiligheidstandaarden-maart-2020.pdf ※1 オランダ政府データ (2020/03) ※2 QUALITIA独自調べ go.jp(全てではない)のうちMXのあるドメイン(サブドメインは含まない) N=330 (2020/11) N=317(2021/7) ※3 QUALITIA独自調べ jpドメイン(全てではない)のうちMXのあるドメイン N=約32万(サブドメイン含む) ※4 N=約20万(eTLD+1のみ) 0 20 40 60 80 100 SPF SPF(-all) DMARC 厳しいDMARC DNSSEC STARTTLS DANE オランダ政府 go.jp .jp
  5. 厳しい設定 smtpd_tls_security_level = may smtpd_tls_key_file = /etc/letsencrypt/live/example.jp/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/example.jp/fullchain.pem

    smtpd_tls_ciphers = high smtpd_tls_mandatory_ciphers = high smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1 smtpd_tls_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1 tls_high_cipherlist = EECDH+AESGCM tls_preempt_cipherlist = yes Postfixの場合
  6. STARTTLSがあるとき 送信 サーバ 受信 サーバ EHLO sender.example.jp 250-recv.example.jp 250-STARTTLS 250

    OK STARTTLS 220 ready for TLS なんやかんや やり取り EHLO sender.example.jp ここから暗号化 STARTTLS対応 このあたりは 平文
  7. 途中で改ざんされると 送信 サーバ 受信 サーバ EHLO sender.example.jp 250-recv.example.jp 250-STARTTLS 250

    OK FROM: [email protected] 250-recv.example.jp 250-XXXXXXXX 250 OK ふむふむ TLS非対応 なのね MITMさん 盗み放題 ちょこっと 書き換え 暗号化せずに 送りましょ STARTTLS Downgrade Attack
  8. TLS Protocol Downgrade Attack 送信 サーバ 受信 サーバ STARTTLS 220

    Ready for TLS ClientHello (TLS1.2でつなぎたいです) TLS1.2は非対 応なのね MITMさん 盗み放題 捨てて しまえ TLS1.1で 送りましょ TLS Handshake開始
  9. MTA-STSがあるとき クオリティア メール サーバ メール サーバ 強い暗号化に対応 していなければ送らない _mta-sts.qualitia.co.jp. IN

    TXT "v=STSv1; id=20191114123000Z;" version: STSv1 mode: enforce mx: mx1.qualitia.co.jp max_age: 1296000 https://mta-sts.qualitia.co.jp/.well-known/mta-sts.txt =盗まれない ポリシー Downgrade したろ
  10. MTA-STSの動き 送信 サーバ 受信 サーバ mx.example.jp EHLO sender.example.com 250-recv.example.jp 250-STARTTLS

    250 OK STARTTLS 220 ready for TLS Webサーバ https://mta-sts.受信ドメイン/.well-known/mta-sts.txt mode: enforce mx: mx.example.jp DNSサーバ _mta-sts.受信ドメイン TXT id=abc12345
  11. 改ざんされた場合でも 送信 サーバ 受信 サーバ mx.example.jp EHLO sender.example.com 250-recv.example.jp 250-STARTTLS

    250 OK Webサーバ https://mta-sts.受信ドメイン/.well-known/mta-sts.txt mode: enforce mx: mx.example.jp 250-recv.example.jp 250-XXXXXXXX 250 OK ふむふむ TLS非対応 なのね 終了 ちょこっと 書き換え MITMさん
  12. MTA-STSの設定方法 _mta-sts.example.jp txt "v=STSv1; id=20201111010203" 受信するメールアドレス: [email protected] 受信メールサーバー: mx.example.jp DNSの設定

    version: STSv1 mode: enforce mx: mx.example.jp max_age: 1296000 Webの設定 https://mta-sts.example.jp/.well-known/mta-sts.txt none testing enforce *.example.jpのようにも書けます
  13. レポートの例 (問題ない場合) { "organization-name": "Google Inc.", "date-range": { "start-datetime": "2020-09-07T00:00:00Z",

    "end-datetime": "2020-09-07T23:59:59Z" }, "contact-info": "[email protected]", "report-id": "2020-09-07T00:00:00Z_hirano.cc", "policies": [ { "policy": { "policy-type": "sts", "policy-string": [ "version: STSv1", "mode: testing", "max_age: 86400", "mx: *.hirano.cc" ], "policy-domain": "hirano.cc" }, "summary": { "total-successful-session-count": 5, "total-failure-session-count": 0 } } ] } 成功 5通 失敗 0通
  14. レポートの例 (問題のある場合) { "organization-name": "Google Inc.", "date-range": { "start-datetime": "2019-10-01T00:00:00Z",

    "end-datetime": "2019-10-01T23:59:59Z" }, "contact-info": "[email protected]", "report-id": "2019-10-01T00:00:00Z_hirano.cc", "policies": [ { "policy": { "policy-type": "sts", "policy-string": [ "version: STSv1", "mode: testing", "max_age: 86400", "mx: *.hirano.cc" ], "policy-domain": "hirano.cc" }, "summary": { "total-successful-session-count": 0, "total-failure-session-count": 55 }, 失敗 55通 "failure-details": [ { "result-type": "validation-failure", "sending-mta-ip": "209.85.219.198", "receiving-ip": "210.158.71.76", "receiving-mx-hostname": "ah.hirano.cc", "failed-session-count": 2 }, { "result-type": "starttls-not-supported", "sending-mta-ip": "209.85.222.201", "receiving-ip": "210.158.71.76", "receiving-mx-hostname": "ah.hirano.cc", "failed-session-count": 1 }, .... 省略 .... ] } ] }
  15. DANE for SMTP クオリティア メール サーバ メール サーバ CAの代わりにDNSSECを信頼 DNSSEC

    公開鍵証明書認証局(CA) 不要 ルートDNS DNSSEC 信頼 _25._tcp.mx1.qualitia.co.jp. IN TLSA 3 1 1 2B73BB905F…" mx1.qualitia.co.jp Public KeyのHash ◦ Public Key
  16. DANEの設定方法 openssl x509 -in cert.pem -pubkey -noout | openssl rsa

    -pubin -outform DER | openssl sha256 (stdin)= 293f3944e435835ec797acbbe52ffb1bc8e 6637879fbe62d9b6195479e01f67e Public KeyのHashを作成
  17. DANEの設定方法 openssl s_client -connect mx1.example.jp:25 -starttls smtp < /dev/null |

    openssl x509 -pubkey –noout | openssl rsa -pubin -outform DER | openssl sha256 (stdin)= 293f3944e435835ec797acbbe52ffb1bc8e 6637879fbe62d9b6195479e01f67e はじめての設定なら、 サーバーから証明書を取り出すのもあり
  18. DNSに追加 メールサーバー メールアドレスのドメイン部分ではありません! 受信するメールアドレス: [email protected] 受信メールサーバー: mx1.example.jp 0: 証明書 1:

    公開鍵 ※TLSのKeyを入れ替えるときにはTLSAレコードを 先に書いて、DNSのキャッシュ期間が過ぎたらメー ルサーバーの設定を新しいKeyに変更し、古いTLSA レコードを削除します。 0: Hashなし 1: SHA256 2: SHA512 _25._tcp.mx1.example.jp TLSA 3 1 1 293f3944e...
  19. DANE DNSSECに対応していて、 TLSAレコードがあれば、 STARTTLSを必須で使用し、 PublicKeyをTLSAの値で検証します。 Microsoftの対応予定 送信側の対応2020年末まで 受信側の対応2021年末まで (by M3AAWG

    General Meeting (2020/06)) TLS DANE Arcor yes no AOL yes no Bund.de yes yes Comcast yes yes Freenet yes yes Gmail yes no GMX yes yes Kabel Deutschland yes yes O2 yes no Outlook.com yes no Riseup yes yes T-Online yes no Unitymedia yes yes Vodafone yes yes web.de yes yes Yahoo yes no https://posteo.de/en/help/to-and-from-which-other-email-providers-will-my-emails-be-encrypted
  20. Require TLS RFC8689 (2019/11) 送信者が配送先でもSTART TLSを使うことを要求します SMTPで MAIL FROM: <[email protected]>

    REQUIRETLS ヘッダに TLS-Required: No と書くことで、機能をOffにできます。
  21. SMIMEA ホスト名部分はメールアドレスのlocalpartのSHA256の28オクテット # echo -n [email protected] | openssl sha256 2bd806c...af71db._smimecert.example.jp

    SMIMEA 3 0 0 308202cd308201b50214156aee144... ➔ 2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90 証明書や公開鍵はDER形式にして16進数で書く # openssl x509 -in smime.crt -outform DER | xxd -ps 308202cd308201b50214156aee144514e7969ff77e02936211039f9db59e 300d06092a864886f70d01010b050030123110300e06035504030c076869 72615f4341301e170d3231303131373134353434345a170d323230313137 .... 以下大量
  22. まとめ • DMARC 使いましょう • STARTTLS 使いましょう • MTA-STS 使いましょう

    • DNSSEC 使いましょう • DANE 使いましょう • internet.nlで100点になるまでの道は険しい • オランダすごいよ Thank You! 今日の内容を少しQiitaにも書きました https://qiita.com/hirachan