今回は、メールでファイルを送るときの話をしよう。
よく、客先や知人に、メールでファイルを送信する際、パスワードZIPにして送ることが多いだろう。パスワードをファイル添付後すぐに送信していないだろうか?実は、このパスワードをすぐに送信することが、既に攻撃者の攻撃ポイントになっている事をご存じだろうか。通常、通信内容を盗聴する際に用いる手法として、幾つかのポイントがある。
1.攻撃相手のネットワークに潜むケース
攻撃相手のネットワークに、何らかの盗聴システムを配し、通信内容を常に確認している方法だ。一般的に、ファイルサーバへのアクセスとして、Windowsのファイル共有を用いている場合、用いるパスワードは暗号化されている。しかしながら、通信しているファイルの内容やファイル名などは暗号化されていない。このため、もしも、攻撃対象のネットワーク内にマルウェアを配置することが出来たなら、通信がマルウェア上を流れている限りにおいて、ファイルサーバの内容は丸裸と言える。
2.攻撃相手とメールサーバの間に潜むケース
攻撃相手のインターネット接続ポイントに、何らかのマルウェアを配するケースだ。この場合、インターネットとの通信情報を全て把握することが出来る。仮に通信内容が暗号化されている場合は、経路上に透過Proxyと偽の証明書を配せば問題なく、平文として通信内容を読むことが出来る。情報システム部やセキュリティを専門に行っていなければ、偽の証明書がブラウザやメールサービス等で表示されたとしても、何ら疑問を持つこと無く、偽の証明書を受け入れてしまうかもしれない。偽の証明書を取り入れた場合、いかなるSSLを含む通信でも、攻撃者は平文で読むことが出来る。
3.メールサーバに潜むケース
メールサーバにマルウェアを配した場合、通信する全てのメールが読み放題になる。通信経路が暗号化されていようとも、先ほどの様な偽の証明書を利用しなくても、ごく普通にファイルを読むかのように、メールを読み書き出来る。当然、メールを改ざんすることも問題なく行える。ここまで書いて、気づいた人もいるだろう。パスワードZIPの話と先ほどまでのケースとは内容がリンクされていない。
つまり、通信路が暗号化されていても、平文で通信されていたとしても、パスワードZIPの存在そのものには影響を与えない。
ただし、ファイルそのものは暗号化されていても、それを解く鍵が平文で通信されていた場合、これは大きな問題となり得る。
攻撃者が通信内容を全て記録していた場合、2や3のケースではスムーズに、流れてきたパスワードを使って、パスワードZIPを展開する事が出来る。
では、どうするのが良いのか?
通信相手と、予め用いるパスワードの基礎フレーズを決めておく。この基礎フレーズは、プロジェクトが終了するまででも良いし、特定の期間だけでも構わない。そして、この基礎フレーズは共有者だけで共有し、他には絶対に公開しない。
この基礎フレーズを直接パスワードZIPに用いずに、2工夫ほど行う。例えば、今日が2016年8月31日だったとする。基礎フレーズは、guardian だ。一つ目の工夫は、[guardian20160831] とする。
つまり、基礎フレーズ+今日の日付だ。この状態のまま送信した場合、何度も送信していくと、攻撃者がパスワードの内容を気づいてしまう可能性もゼロでは無い。そこで、もう一つ工夫を加える。
1 |
echo guardian20160831|openssl sha1 |
とする。ここで表示された内容は、ハッシュ値と呼ばれる物で、元のフレーズを1bitでも変更する事があれば、その内容は大きく変わり、元のフレーズを調べる事はかなりの困難を極める。このハッシュ値を用いて、毎回パスワードZIPを送信しているケースに於いては、擬似的なストリーム暗号であり、数学的な解釈からもスパコンレベルの機材を用いたとして、数億年の時間を有する。
先ほどまでの、パスワードZIP送信後に、パスワードを送信する方法に比べ、パスワードフレーズが秘匿化されるほか、内容もかなり緻密な内容となっており、普通の環境でクラックすることは不可能に近い。1のケースを除き、非常に優位な状況となり得る。
各自も、一度試されてみては如何だろうか。