ox0xo infosec tutorial

メールプロトコルの概要

2018-08-21
     

SMTP/POP3の観測

前置き

メール送信を担うプロトコルはSMTPです。 SMTPの基本的な機能はメールを受け取って宛先のユーザーのメールボックスに届けることです。

メール受信を担うプロトコルはPOP3もしくはIMAPです。 どちらのプロトコルもユーザー認証を行い適切なメールボックスに蓄積されているメールを取り出すことが出来ます。 以下の図はPOP3によるシンプルなメール受信を示すものですが、IMAPはメール受信だけでなくメールサーバ側にサブフォルダを作成したり一部のメールだけを取り出す事が可能です。

メールクライアントの設定

手元の研修用環境LinuxはVirtualBox NATを通じてenp0s3でメール関連プロトコルを待ち受けています。

プロトコル ポート
SMTP 25
POP3 110
IMAP 143

メールサーバのドメインはsample.localで内部にsshuserアカウントが存在します。 これを宛先にすることでメールの動作確認が可能です。

パケットの観測

  • SMTPメッセージ

取得したパケットを右クリック>追跡>TCPストリームで一連のメッセージをまとめて表示します。 サーバからのメッセージが青く、クライアントからのメッセージが赤く表示されます。

SMTPメッセージにはユーザー認証が無くメールをただ送信するだけです。

  • POP3(アプリケーション層)

POP3はサーバに接続して最初にユーザー認証を行っています。 メールボックスに蓄積されているメールの件数を確認してメールを全件受信しています。

  • IMAP(アプリケーション層)

IMAPはPOP3よりも複雑なメッセージをやり取りしています。

  • MIME

メールはテキストデータだけとは限らず画像や動画のようなデータが添付されることもあります。 そのようなデータはMIMEという方式でエンコードされて一時的にテキストデータとして相手に受け渡されます。 受信側ではMIMEのルールに従ってデータをデコードし元の画像や動画を再生します。

以下のpythonコードはMIMEエンコードされたデータを元のPNG画像ファイルにデコードするものです。 このような手順でメールクライアントは受信したエンコードデータを元のデータに再生しています。

import base64
mime = "iVBORw0KGgoAAAANSUhEUgAAADgAAAATCAIAAABKj1m8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAtSURBVEhL7c5BDQAwEASh+je9NcHnkkEBb0cU1YpqRbWiWlGtqFZUK6oVtbYP/o9sPe0vjZgAAAAASUVORK5CYII="
with open("F:\My Documents\Downloads\decode.png", "wb") as f:
    f. write(base64.b64decode(mime))

Content