なりすまし?メールを自分に送ってメールセキュリティの学習

2022-06-21

迷惑メールでPCが侵害されているイメージ画像。
注意事項

本記事の内容は学習・検証用途として、自分宛に送って確認をするだけにして下さい。また、Fromに使うドメインについても、他者の管理しているドメインは使用しないで下さい。

先日、改めて電子メールの仕組みを学習して、ヘッダーFROMとエンベロープFROMの違いを(やっと)理解しました。

ヘッダーFROMは簡単に偽装できるとありますが、普段メールクライアントソフトを使うばかりなので実際はどうなのか正直わかっていませんでした。

今回はSMTPリレーサーバを使って、自分宛にわざとヘッダーFROMを適当なメールアドレスに変更してどんな違いがあるかを確認してみます。

*あくまで確認だけなので、SPFやDKIMについては何も対策?修正?せずに進めています。

なりすましメール

なりすましメールとは、悪意を持って本来とは異なる偽のメールアカウントで送信されているメールです。他人(企業)のメールアカウントになりすます場合、マルウェアやフィッシングサイトへのリンクを含め、受信者をだましてパスワードやクレジットカード番号などの入手を狙って送信される事もあります。

本来の送り主(企業等)が正式な手続きのもとで、メール転送サービス等を使って送られるメールはなりすましメールとは言いません。

手順

telnetでsmtpサーバに接続して対話的に進めるのが一番学習効率が高そうですが、ちょっと今回は無精しています(SMTP認証が面倒くさいなぁ、と)。

Rでメールを送れるようにしたので、このままRでfromを適当なメールアドレスにして送信します。他のプログラムでももちろん大丈夫です。

メール送信はからだにいいもの様を参考に以下のように(emayiliを使ってます)しています。

library("emayili")

email <- envelope()
email <- email %>%
  from("テスト<example@example.com>") %>% #メールクライアントソフトに表示させるメールアドレス
  to("********") #自分のメールアドレス
email <- email %>%
  subject("メールリレーサービスで送信")
text <- "example.comから送信。
"
email <- email %>%
  text("{{text}}")

smtp <- server(
  host = "*******", #SMTPサーバ
  port = ***, #ポート番号
  username = "********", #ユーザ名
  password = "********" #SMTPサーバのパスワード
)

smtp(email, verbose = TRUE)

結果

Google Admin Toolboxを使ったメールヘッダの解析結果です。

解析ヘッダのスクリーンショット

ヘッダFROMは、メールクライアントで適当に入力したメールアドレスでも送れることが確認できました。

FROMを「表示名<メールアドレス>」にするとメールクライアントには表示名が出てきます。SPF、DKIMはSendGridで認証されているようでした。

結論

ヘッダFROMは改ざんと言うか、SMTPサーバではチェックされていない事がわかりました。また、送信ドメイン認証のSPF、DKIMも経由するSMTPサーバがエンベロープを書き換えると認証されることも確認できました。

なりすましメール対策の中でもDMARCは、自身が使っているドメインになりすまされる事を防ぐためにもポリシーは適切に設定した方が良さそうだと思いました。

残念ながら、受信するユーザが実施できる技術的な対策は少ないです。なりすましメールを警告してくれるメールクライアントソフトを使い不審なメールは廃棄するなど、ユーザのセキュリティリテラシーに頼るしかないのが現状のようです。

そのためにも、以前のようにDMARCが不適切に設定されていたために正規のメールがなりすましメールと同じ扱いになることは、ユーザのセキュリティリテラシー低下にも繋がると企業側も考えて頂きたいと思いました。