「パスワードは別途お送りします」をなんとかしたい
はじめに
メールの添付ファイルに暗号化 zip を送って,直後に別メールでパスワードだけ送ってくるアレ. こんな話をよく聞きます:
- パスワード入力するのが面倒
- ゲートウェイでの「添付ファイルウィルススキャン」ができないので危険
- セキュリティ向上の意味がほとんどないのでは?
タチの悪いことに,送信側は,そういう「メールソリューション」をお金をかけて導入していて, ほぼ自動化してくれるので,送信者の意識なく,zip の中身が何であれすべて暗号化してしまいます. 受け取るほうは,たまったものではありません.
そこで,本日のお題は,「受信者側でパスワード別送zipメールに対抗する」です.
glima
「パスワード別送zipメール」のパスワードを自動で解く方式を考えて実装しました.
yoshinari-nomura/glima: Gmail CLI client.
原理は簡単.いわゆる「ブルートフォース」をちょっと賢くやるだけです.
- zip メールのパスワードが書いてそうなメールを探す.
以下の条件を満すメールを「パスワード候補メール」とします.
- zipメールと From: が同じ
- Date: が zipメールの前後 1日以内
- 上で見付けた全ての「パスワード候補メール」から,ASCII-printable が連続する文字列を抽出し,「パスワード候補文字列」とする.
- 全ての「パスワード候補文字列」を文字列の「エントロピーが高い順」にソートする. 「エントロピー」というのはここでは,「強いパスワードとされている度合」ぐらいの気持です.
- ソート済みの「パスワード候補文字列」を順番に zip に適用してみる.
という方式です.これで,驚く程簡単にパスワードが解けます. 日本語のメールだと,大体,上位 3つぐらいの内にパスワードがヒットするので,解くのには 1秒もかかりません.
送る側が採用しているらしい,例の「メールソリューション」が 「強いパスワード」を付けてくれているおかげで,それを逆手に取ると, 高確率で真のパスワードが上位に来るというわけです.
使い方その1
- Gmail の設定で,受信メールに "filename:zip -label:decrypted " でフィルタをかけて, マッチしたメールに "queue" とでもラベルを付けておきます.
以下のコマンドを実行します.
glima xzip "in:inbox label:queue" --del-src-labels=queue \ --del-dst-labels=queue \ --add-dst-labels=decrypted
意味は:
- inbox 中にある queue というラベルが付いているメールについて
- 元のメールの添付のzipをパスワードなしのものに置き換えたメールを作成し
- queue ラベルを剥して,decrypted というラベルを付与し
- Gmail に再びプッシュする
ということをやります.
使い方その2
glima dezip "15f4cf5c3376d343" ~/Downloads/
意味は,Gmail の id 15f4cf5c3376d343 というメールの zipを解読して,パスワードなしの zip ファイルを ~/Downloads/ に置く という意味です.
使い方その3 (2019-10-23 追記)
watch コマンドは,Gmail を IMAP IDLE で監視して,zip のパスワードをがんがん解いてくれます.
- Gmail の設定で,受信メールに "filename:zip -label:decrypted " でフィルタをかけて, マッチしたメールに "queue" とでもラベルを付けておきます.
以下のコマンドで glima をバックグラウンド実行しておきます
glima watch queue decrypted >> $HOME/var/log/glima.log 2>&1 &
放置しておくだけで,zip の暗号を勝手にどんどん解いてくれます. 具体的には,
- Gmail を監視して queue というラベルが付いているメールが届いたら
- メール中のzipをパスワードなしのものに置き換えた別メールを作成し
- 別メールから queue ラベルを剥して decrypted というラベルを付与し Gmail に再びプッシュする
- 元メールからは queue ラベルを剥す
これでパスワード別送zipメールも恐くないですね.
おわりに
glima という Gmail の CLI クライアントの機能として実装したので使ってみてください. 自身では,既に半年近く使ってますが,メールを受け取るのが嬉しくなりますよ :)
glima は,ラベルを一括で付け直したりなど,他にも便利なコマンドがあります.
次回は,Mew などの local フォルダを見るメーラから使う方法を紹介します.