はじめに

メールの添付ファイルに暗号化 zip を送って,直後に別メールでパスワードだけ送ってくるアレ. こんな話をよく聞きます:

  • パスワード入力するのが面倒
  • ゲートウェイでの「添付ファイルウィルススキャン」ができないので危険
  • セキュリティ向上の意味がほとんどないのでは?

タチの悪いことに,送信側は,そういう「メールソリューション」をお金をかけて導入していて, ほぼ自動化してくれるので,送信者の意識なく,zip の中身が何であれすべて暗号化してしまいます. 受け取るほうは,たまったものではありません.

そこで,本日のお題は,「受信者側でパスワード別送zipメールに対抗する」です.

glima

「パスワード別送zipメール」のパスワードを自動で解く方式を考えて実装しました.

yoshinari-nomura/glima: Gmail CLI client.

原理は簡単.いわゆる「ブルートフォース」をちょっと賢くやるだけです.

  1. zip メールのパスワードが書いてそうなメールを探す. 以下の条件を満すメールを「パスワード候補メール」とします.
    • zipメールと From: が同じ
    • Date: が zipメールの前後 1日以内
  2. 上で見付けた全ての「パスワード候補メール」から,ASCII-printable が連続する文字列を抽出し,「パスワード候補文字列」とする.
  3. 全ての「パスワード候補文字列」を文字列の「エントロピーが高い順」にソートする. 「エントロピー」というのはここでは,「強いパスワードとされている度合」ぐらいの気持です.
  4. ソート済みの「パスワード候補文字列」を順番に zip に適用してみる.

という方式です.これで,驚く程簡単にパスワードが解けます. 日本語のメールだと,大体,上位 3つぐらいの内にパスワードがヒットするので,解くのには 1秒もかかりません.

送る側が採用しているらしい,例の「メールソリューション」が 「強いパスワード」を付けてくれているおかげで,それを逆手に取ると, 高確率で真のパスワードが上位に来るというわけです.

使い方その1

  1. Gmail の設定で,受信メールに "filename:zip -label:decrypted " でフィルタをかけて, マッチしたメールに "queue" とでもラベルを付けておきます.
  2. 以下のコマンドを実行します.

    glima xzip "in:inbox label:queue" --del-src-labels=queue \
                                      --del-dst-labels=queue \
                                      --add-dst-labels=decrypted
    

    意味は:

    1. inbox 中にある queue というラベルが付いているメールについて
    2. 元のメールの添付のzipをパスワードなしのものに置き換えたメールを作成し
    3. queue ラベルを剥して,decrypted というラベルを付与し
    4. Gmail に再びプッシュする

ということをやります.

使い方その2

glima dezip "15f4cf5c3376d343" ~/Downloads/

意味は,Gmail の id 15f4cf5c3376d343 というメールの zipを解読して,パスワードなしの zip ファイルを ~/Downloads/ に置く という意味です.

使い方その3 (2019-10-23 追記)

watch コマンドは,Gmail を IMAP IDLE で監視して,zip のパスワードをがんがん解いてくれます.

  1. Gmail の設定で,受信メールに "filename:zip -label:decrypted " でフィルタをかけて, マッチしたメールに "queue" とでもラベルを付けておきます.
  2. 以下のコマンドで glima をバックグラウンド実行しておきます

    glima watch queue decrypted >> $HOME/var/log/glima.log 2>&1 &
    

放置しておくだけで,zip の暗号を勝手にどんどん解いてくれます. 具体的には,

  1. Gmail を監視して queue というラベルが付いているメールが届いたら
  2. メール中のzipをパスワードなしのものに置き換えた別メールを作成し
  3. 別メールから queue ラベルを剥して decrypted というラベルを付与し Gmail に再びプッシュする
  4. 元メールからは queue ラベルを剥す

これでパスワード別送zipメールも恐くないですね.

おわりに

glima という Gmail の CLI クライアントの機能として実装したので使ってみてください. 自身では,既に半年近く使ってますが,メールを受け取るのが嬉しくなりますよ :)

glima は,ラベルを一括で付け直したりなど,他にも便利なコマンドがあります.

次回は,Mew などの local フォルダを見るメーラから使う方法を紹介します.