8割解けるCTF「WEST-SEC」

セキュリティ初心者の方でも楽しめるゲーム形式のセキュリティイベント。CTFや勉強会の依頼があればご相談ください。

送信ドメイン認証

1.WEST-SEC セキュリティ勉強会概要

タイトル

「WEST-SEC セキュリティ勉強会概要#10 送信ドメイン認証(軽いハンズオン付き)」
または、「世界一わかりやすい送信ドメイン認証」

以下、ハンズオンの場合
好評をいただいていますWEST-SECのセキュリティ基礎勉強会ですが、今回は、送信ドメイン認証の勉強会を実施します。
ハンズオンと言えるかはわかりませんが、実際にメールを送受信して、メールヘッダにおけるSPFやDKIMなどの結果を確認してもらいたいと思います。
また、nslookupによって、送信元ドメイン認証のDNS設定を確認していただきます。

世界一わかりやすいの方が、集客効果があるかも。
その場合、ハンズオンは弱めで、初心者向けにわかりやすい内容にする(構成はこちらで考えます)

勉強会の目的

・迷惑メール対策としての送信ドメイン認証の理解を深める
・SPF、DKIM、DMARCの概要を理解する
・SPF、DKIMを設定しても、なぜAmazonや楽天などの迷惑メールが来るかを理解する
・SPF、DKIMの認証が、どんなときに失敗するかを理解する
・DMARCがなぜ有効な対策かを理解する
・実際に、ハンズオン(と言えるかわかりませんが)、メールのヘッダを見たり、nslookupを実行してDNS設定を行い、送信ドメイン認証の理解を深める。

参加対象者

・送信ドメイン認証を基礎から学びたい人★重要★
・SPF、DKIM、DMARCの言葉の意味、ITパスポートに登場するセキュリティの用語を概ね知っている(または当日までにさらっと勉強する)
・勉強会の運営に理解をしてくださり、協力していただける人
※2つ目に関しては、知っている前提で講義を進めます。

WEST-SECのこだわり

・初学者向けなので、初歩からしっかりと伝える。難しすぎない。
・ハンズオンによる勉強会。なるべく実機に触れてもらう。

講義スケジュール

適当に入れましたが、要相談

項番 時刻 内容
Program0 18:55~  Web会議の部屋を空けます。
Program1 19:00 ~ 19:30 SPF、DKIM、DMARC概要(30分) t-kasu
Program2 19:30 ~ 19:50 SPF、DKIMの認証が、どんなときに失敗するか(20分)
Program3 19:50 ~ 20:20 実際の設定を紹介(30分)twofive
Program4 20:20 ~ 20:50 ハンズオン?(30分) CATO社のエンジニア
アンケート記入
Program5 20:50 ~ 21:00 対策ソリューション紹介
アンケート記入
Program5 終了後 当日の感想をブログやfacebook、TwitterなどのSNSに投稿願います。

講義は、以下を使うつもりです。御社で公開しているサイトがあればそれを使わせてもらいます。
https://ent.iij.ad.jp/articles/172/

ハンズオンに関して、参加者ができそうな環境に関して、ご相談させていただきたいです。
AWS環境は準備できるので、皆さんにSSHでログインしてもらうことは可能です。
決めるべきは、日程、カリキュラム(特にハンズオン環境をどこまでできるか)、役割分担など

2.送信ドメイン認証とは

2.1 言葉の確認

送信ドメイン認証の説明の前に、メールヘッダについて整理

送信元メールアドレスの種類 概要 コマンド メールヘッダのどこに記載されるか
Envelope-FROM エンベロ-プの送信者メールアドレス MAIL FROMコマンド Return-Pathに転記される
Header-FROM メールデータ内のメールヘッダで指定される送信者メールアドレス DATAコマンド メールヘッダの以下
From: 表示名 < (ここ) >
dタグ     DKIM-Signature:のd=


2.2 メールヘッダ解説
項目 解説
Return-Path: <bad@fake.dom> MAIL FROMコマンドで送られたEnvelope-FROMの値がここに転記される。
Reply-To: <mailing-list@fake.dom> 送信者が、異なるメールアドレスに返信させたいときに使う。たとえば、メーリングリスト宛にメールを送っていて、受信した人が「返信」ボタンを押すと、送信者ではなくメーリングリストを宛先にしたい場合など。この場合の設定は、メーリングリスト側でReply-Toを設定可能
Received-SPF: pass (msc117.plala.or.jp: domain of xxx@red.plala.or.jp designates 60.36.166.39 as permitted sender) receiver=msc117.plala.or.jp; client-ip=60.36.166.39; envelope-from=xxx@red.plala.or.jp; SPFの結果
Authentication-Results: mta7022.mail.djm.ynwp.yahoo.co.jp from=orange.plala.or.jp; domainkeys=neutral (no sig); dkim=pass (ok); header.i=@plala.or.jp; dmarc=pass (p=NONE,sp=NONE,pct=100,domain=plala.or.jp); header.from=red.plala.or.jp 送信ドメイン認証の結果
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=plala.or.jp; q=dns/txt; s=p20240201; t=1717042923;
x=1748578923;(中略)
bh=sjDXyHL6vgVVG4LCQfX6NnNjrwyTgzk25mkBJT759NA=;
b=Iz9cpav56POlN0(省略)=;
DKIM署名
Received: from [192.168.1.110] (really [153.239.234.128])
by msc11.plala.or.jp with ESMTP
経由したメールサーバ
Date: Thu, 30 May 2024 22:21:59 +0900 送信日時
To: user1@example.co.jp 宛先メールアドレス
From: =?UTF-8?B?5234d7KV5?= <bad@fake.dom>  送信元の 表示名<送信元メールアドレス=Header from> 
2.3 そもそも送信元ドメイン認証とは何か?

A1.送信者のメールアドレスが偽装されていないかを確認する
→× メールアドレスの@より前が正しいかまではわからない。
A2.送信者のメールアドレスのドメイン部分(@以降)が偽装されていないかを確認する
→× メール送信者がドメインの所有者であるかの確認」だと思っていて、加えて、DKIMだったらメールの改ざんなどになると思う。どこまでが判断できて、どこまではわからないか。Envelop-FromとHeader-Fromの具体的なフィッシングメールをもとに説明したい

・送信ドメイン認証とは何か。言葉の定義からしたほうがいい

・なりすまし対策とあるが、なりすましメールの定義も必要。いろいろななりすまし方法がある。それぞれのなりすましによって、SPFやDKIMなどによって、防げることと防げないことがあるはず。
・できること

技術 できること わかりにくくいうと できないこと
SPF Envelope fromの偽装 送信者のメールアドレスが、そのドメインのメールサーバから送られてきたことの確認  ★後で記載  
DKIM      
DMARC      

3.DMARCの導入状況

なりすましメール対策の実態調査結果を発表
https://emberpoint.com/news/release/release20240522.html

3.DKIMの具体的なやりかた

Q.DKIM bタグ bh 検証方法 ハンズオンでやりたいが、その前にどういう検証をしているのかの理解が必要

・作成者署名と第三者署名の話
・DKIMの署名のやり方。メールヘッダとメールのボディの両方を署名します。エンベロープの情報は署名の対象外です。正規化方法には、simple relaxedがある。
どういう場合に正規なメールでもDKIMのエラーになるか、など

4.偽装メール

4.1 攻撃者の考えで考える

たとえば、本物のamazonのメールに見せたいと思ってメールを送る

❶メールの表示名を偽装。
送信元メールアドレスはもっともらしいドメインを使う(正規に取得)

項目 偽装状態
本来のメールアドレス bad@fake.dom  - 
以下は実際に送るメール
送信元のメールサーバのIPアドレス x.x.x.x  - (偽装不可)
エンベロープ(Envelope-from) Return-Path:bad@amadon.dom  - (偽装無)
メールヘッダ(Header-From) Subject:アカウント異常
From:Amazon.co.jp <auto-confirm@amadon.dom>
偽装
dタグ d=fake.dom  - (偽装不可)

Envelope-from、Header-Fromは、(いかがわしいドメインであるが、)どちらも正規。正規なので、SPFもDKIMもpassしてしまう。
認証結果は以下

spf pass
DKIM pass
DMARC  ★

このメールは送信元ドメイン認証では防げない。DMARCでも、Envelope-fromとHeader-Fromが一致しているので、防げない。
BIMIという手法がある。
https://www.naritai.jp/technology_bimi.html

❷メールの表示名と送信元メールアドレスを偽造する

エンベロープ(Envelope-from) Return-Path:123456@fake.dom
メールヘッダ(Header-From) Subject:アカウント異常
From:Amazon.co.jp <admin@amazon.co.jp>
dタグ d=fake.dom

つまり、Header-Fromが偽物。
・この場合、攻撃者がSPFレコードとして、fake.domのメールサーバのIPアドレスを指定していれば、SPFはエラーにならない。

ゾーンファイル
 $ORIGIN fake.dom.
   IN   TXT  "v=spf1 ip4:203.0.113.25  ~all" ←IPアドレスを指定

・DKIMは、Header-Fromのadmin@amazon.co.jpという情報から、amazon.co.jpというドメインに対してTXTレコードを確認に行くのではなく、DKIM-Signatureの d=で指定している公開鍵で署名検証をします。(攻撃者によ第三者署名)。なので、攻撃者は、fake.domのドメインのメールサーバなので、(自動で?)d=fake.domになる。ヘッダFROMが今回のように、@amazon.co.jpとなっていて、違うドメインであれば、本来であればDKIM署名をしない。しかし、メールサーバの設定にて、@amazon.co.jpであっても署名するという設定を施すと、DKIM署名を付けて相手に送る(これお第三者署名という)。そうされると、受信側で、DKIMの認証が成功する(途中で改ざんなどがされていない限り) ★この数行の内容、あってる?
・認証結果(攻撃者が細工)は以下

spf pass
DKIM pass
DMARC  ★

であれば、SPFやDKIMでは防げない。Envelope-fromとHeader-Fromを比較するDMARCが必要。

❸Envelope-FROMも偽装
攻撃者が、Envelope-FROMも偽装して、本格的なメールに見せようとする

エンベロープ(Envelope-from) Return-Path:auto-confirm@amazon.co.jp
メールヘッダ(Header-From) Subject:アカウント異常
From:Amazon.co.jp <auto-confirm@amazon.co.jp>
dタグ d=fake.dom

このとき、攻撃者のドメインのメールサーバから送られるので、dタグは攻撃者のドメインになる。(メールサーバのDKIM設定?にて、ドメイン情報を記載してある★要確認)。なので、DKIMの署名でエラーになることはない。まあ、そもそも、DKIMはエンベロープFROMを見ていない。

X-Apparently-To: mail-kensyo@ymail.ne.jp; Sun, 26 May 2024 19:36:36 +0900
X-Z-SRV: s_ip=122.1.91.97;d_t=1716719796;Retro=Y;
<span style="color: #ff0000">Return-Path: <auto-confirm@amazon.co.jp></span>
X-Z-PassedDKIMSig: spf.sclocalgovntt.ne.jp
X-YahooFilteredBulk: 122.1.91.97
(中略)
X-Z-SenderAuth: yahooip=false; suspicious=false; domainkeys-result=neutral(nosig); <span style="color: #ff0000">dkim-result=pass(ok); spf-result=softfail</span>; reversed-hostname=pc1.tw-sol-unet.ocn.ne.jp; dkauth-stat=ok;
Received-SPF: softfail (mxa.acity.co.jp: domain of transitioning auto-confirm@amazon.co.jp does not designate 122.1.91.97 as permitted sender) receiver=mxa.acity.co.jp; client-ip=122.1.91.97; envelope-from=auto-confirm@amazon.co.jp;
Authentication-Results: zmta7003.mail.djm.ynwp.yahoo.co.jp  from=amazon.co.jp; domainkeys=neutral (no sig); dkim=pass (ok); header.i=@spf.sclocalgovntt.ne.jp; dmarc=fail (p=QUARANTINE,sp=QUARANTINE,pct=100,domain=amazon.co.jp); header.from=amazon.co.jp
Received: from 124.83.241.220  (EHLO mxa.acity.co.jp) (122.1.91.97)
  by zmta7003.mail.djm.ynwp.yahoo.co.jp with SMTP; Sun, 26 May 2024 19:36:36 +0900
Received: from spf.sclocalgovntt.ne.jp (bcity.co.jp [10.1.20.100])
	by mxa.acity.co.jp (Postfix) with ESMTP id 108D6400EC87
	for <mail-kensyo@ymail.ne.jp>; Sun, 26 May 2024 19:36:36 +0900 (JST)
Received: by spf.sclocalgovntt.ne.jp (Postfix, from userid 0)
	id E7DF540FB265; Sun, 26 May 2024 19:36:35 +0900 (JST)
DKIM-Filter: OpenDKIM Filter v2.11.0 spf.sclocalgovntt.ne.jp E7DF540FB265
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	<span style="color: #ff0000">d=spf.sclocalgovntt.ne.jp;</span> s=20240423; t=1716719795;
	bh=E6pDkwiKDLkzB5AnsLo85U15f8W/tGYNS/EvvKvaWNg=;
	h=From:To:Subject:Date;
	b=cp/kil7YQaNMnl+D34SajMdL9dHCCulSL3SdKaEXz19cZnQKDFtfzr4csy+JuvREf
	 /BtBNxSsmBllsuHRbaBOO4Qycbc5iOMSWKCyjcvnycjgcaBXygSD7CIJQfPnjTmBcU
	 r+uMWvFy5uOYDXhqBYxQ0/5C6B+DocmTLZ50TnJY=
<span style="color: #ff0000">From: auto-confirm@amazon.co.jp</span>
To: mail-kensyo@ymail.ne.jp
Subject: Test Spam Mail!!!

認証結果は以下

spf fail(★↑を見るとSoft-failだが、何か意味があるか?)
DKIM pass
DMARC fail dタグは.gov.ne.jpでhedderfromはamazon.co.jpなのでDMARCは失敗

このように、SPFが失敗する。なので、攻撃者はEnvelope-FROMを偽装してくることはないだろう。

4.3 正規メールが届いた場合

本当に正規のメールだが、標的型メール訓練のように、若干あやしい。それと、知らないドメインからのメール

Envelope-from Return-Path:admin@kennko-center.dom
Header-From Subject:健康診断のお知らせ
From:健康センター

5.メーラでできるフィッシングメール対策

ThunderbirdやGmailなどを例に、具体的な設定を解説。Gmailはけっこうしっかりしているので、Thunderbirdでやったほうが、具体的な対策ができて、やりやすいかもしれない。