OOo Password Crackerを使って再考するOpenOffice.orgのパスワード保護の安全性
OOo Password Crackerで採用されている解読方式は、辞書を用いた総当たり式のブルートフォースアタックであり、そのため処理速度は遅いが、パスワード保護されたドキュメントの解読ツールとしてはそれなりに有効に機能する。ただしこのマクロを実用に供するには、事前の準備もある程度必要となる。
OOo Password Crackerはスプレッドシートに記述されたマクロという形式で配布されているが、パスワード保護されたファイルを解読させるには、辞書用のディレクトリを用意しておき、その中に最低1つのパスワード辞書を格納しておく必要がある。辞書ファイルはプレイン・テキストで、1行1項目の形式でパスワード候補の文字列を記述しておけばいい。なおマクロによってコメントとして認識はされないが、辞書中にコメント行を記述することが可能で、人間が後で見直す際の注釈として使うことができる。コメント行にある情報もOOo Password Crackerではパスワード候補の一部として扱われるが、マクロの処理速度を大幅に低下させるものでもないので、各自の必要に応じて記述しておけばいいだろう。
辞書の準備終了後の設定は、マクロのスプレッドシート本体を開いて行う。このスプレッドシートを開く際には、マクロの有効化に関する操作が必要となる。OpenOffice.orgにおけるデフォルトのセキュリティ設定はMediumであるが、この状態でスプレッドシートを開いた場合は、マクロを有効化するためのオプションがユーザに提示される。より高いセキュリティレベルが設定されている場合は、Tools → Options → OpenOffice.org → Macro Securityを選択してセキュリティレベルをMediumに変更するか、スプレッドシートの格納ディレクトリを信頼可能なソースとして登録しておく必要がある。
スプレッドシートはシート3枚の構成で、それぞれGNU General Public Licenseの文面、Crackerマクロの動作設定、基本的な使用法の解説が収められている。Crackerマクロを使用するには、解読対象のファイルのフルパスおよび、辞書ディレクトリのパスを指定しておく必要がある。その際に短縮形式でのファイルパス指定は使えず、また正規表現による一致指定も行えない。
必要なパス指定が終了したら、Tools → Macros → Run Macrosを選択する。これによりMacroの選択ウィンドウが表示されるので、ライブラリペインでOOoPasswordCracker1-0 → Standard → Module 1を選択し、マクロ名ペインでmain
を選んでから、Runボタンをクリックする。マクロによるパスワード解除が終了するまでMacroの選択ウィンドウは表示され続けるが、この作業にどの程度の時間を要するかはパスワード辞書の大きさによって異なり、数秒で終わる場合もあれば数時間かかることもある。いずれにせよパスワード解除に成功するか否かは、ファイル本来のパスワードが辞書ファイル中に含まれているかで決まるので、このマクロでパスワードを解除できない場合も想定しておかなければならない。
解読作業が終了すると、マクロによるパスワード解除に成功したか失敗したかを告げるダイアログウィンドウが表示される。成功した場合は、一致したパスワードがダイアログに表示され、解除されたファイルが開かれる。一致したパスワードおよび辞書ファイルの情報については、スプレッドシートの2枚目のシートで確認することもできる(このシートにはパスワードの解読に要した時間も報告されるはずなのだが、実際にはナンバー記号しか表示されない。もっともこのマクロを必要とするのは、パスワード保護されたファイルを何としても開きたいという緊急事態であろうから、そうした場合において処理時間の情報などは些末的な問題だろう)。
辞書ファイルのセットアップ
辞書の設定作業自体に難しい点は特にない。ただしOOo Password Crackerによるパスワード解除の成否は、本質的にセットアップする辞書ファイルの内容で左右されることになる。このマクロにはサンプル用の辞書ファイルも同梱されているが、その内容は「password」という単語とその表記上のバリエーションが登録されているだけなので、実用に供するに当たってはユーザ各自が辞書を用意しなければならない。
自分の所有するドキュメントにパスワードを設定する場合に使う文字列は限られており、特定のパターンのものを使い回しているというユーザであれば、そうした文字列(およびそれらのバリエーション)を辞書ファイルに一覧しておくだけで済むはずである。もっとも辞書ファイルそのものが暗号化処理されないプレインのテキストファイルなので、その気になれば誰でもその内容を覗き見ることができてしまう。よって最低でも辞書ファイルのパーミッション設定を変更し、自分のアカウントでのみ読み取り可能としておくべきだろう。また未使用時の辞書ファイルは暗号化しておくというのも1つの選択肢である。そうした予防策を講じておかないとOpenOffice.orgドキュメントをパスワード保護する意味そのものが無くなるはずであり、特にパスワード保護したドキュメントと解除用の辞書ファイルを同じディレクトリに保管するようなことは避けるべきである。
より複雑なパスワードを解読する場合は、最初からそうした目的で作られたデータが各種のWeb上で公開されているので、そうした辞書ファイルを利用することもできる。一番最初に探すとすれば、OOo Password CrackerのInstructionsシートでも言及されているOpenWall Projectのページということになるだろう。OpenWallにはセキュリティおよびパスワード保護に関する様々なユーティリティへのリンクが張られており、パスワード解除については20以上の言語でパスワード候補の単語を登録したリスト群をFTPミラーサイトからフリーでダウンロードできるようになっているが、登録単語のバリエーションを追加した商用バージョンについては28ドルの寄付金を支払うことで利用できる。
その他にOutpost9も単語リストの入手先として有望なサイトだ。特に「large word dictionary」と題されたリストには、スペルを逆順で綴った単語、先頭のみを大文字化した単語、すべてを大文字化した単語といった各種のバリエーションを登録したファイル群が用意されている。またこのサイトからは、人名の名字や名前だけを収集したリスト、芸能人の名前を集めたリスト、Jargon Fileをベースに編集されたリストなども入手できる。
単語リストの入手先としては、IspellなどのスペルチェッカやBoggleやScrabbleなどの単語ゲーム用に整備された辞書を流用することも考えられる。この種の辞書の多くでは1行1項目という単純なフォーマットが使われているので、そうした形式のファイルであれば、辞書ディレクトリに追加するだけでそのままOOo Password Crackerで使用できるはずだ。その他の形式で記述された辞書の場合は、何らかのスクリプトやマクロを利用したフォーマット変更を施す必要がある。単語リストを登録するほどマクロによる解読成功の可能性を高めることになるが、同時にパスワードの照合作業が終了するまでの所要時間も長時間化することを覚悟しておかなければならない。またこうして入手した辞書については、OpenOffice.orgのTools → Options → Language settings → Writing aidsに登録したり、その他のプログラムで個別利用するという使い方もできる。
パスワード保護の限界
パスワード保護されたファイルの解読手段はOOo Password Crackerだけに限られている訳ではない。例えばInteloreから79ドルで提供されているOpenOffice Password RecoveryというWindows用プロプライエタリ系ツールは、パスワードだけではなく、OpenOffice.orgドキュメントのセクションやセルなどに施された読み取り専用プロテクションを解除することもできる。またOpenOffice.orgドキュメントの実体は複数のXMLファイルをzipアーカイブ化したものなので、John the Ripperなどのzipファイルの解読ツールを利用するという手段も存在する。そうした中でOOo Password Crackerをあえて使うメリットを挙げるとすれば、簡単化された操作性と、OpenOffice.orgユーザの慣れ親しんだインタフェースで実行できる点に尽きるだろう。こうした長所は、パスワード候補の辞書を自分で用意する手間を相殺するだけの価値があるはずだ。
この種のプログラムの存在意義としては、OpenOffice.orgのパスワード保護機能がいかに脆弱なものであるかをユーザに再認識させる効果も見逃せない。“OpenOffice.orgの暗号化機能はMicrosoft Officeのものより優れている”という話を聞かされると、多くのユーザは“パスワード保護さえ施しておけばドキュメントは安全だ”と思い込んでしまうのではなかろうか。しかしながら実際の用途がそうであるように、OpenOffice.orgのパスワード機能で対処できるのはその種の技術に疎いユーザによる不正利用だけであり、そうした事情はここで紹介したパスワード解除ツールを実際に使うまでもなく、少し考えれば誰でも簡単に分かるはずのものである。例えば、ドキュメントのパスワード保護時に簡単に解読されない文字列を使うだけでも、セキュリティの度合いはかなり違ってくるはずだ。更に確実を期したいのであれば、パスワードだけに頼るのではなく、電子署名によるドキュメント保護も併用すべきだろう。OOo Password Crackerが証明しているように、単純なパスワード保護では気休め程度のセキュリティしか施せていないのである。
Bruce Byfieldは、コンピュータジャーナリストとして活躍しており、NewsForge、Linux.com、IT Manager’s Journalに定期的に寄稿している。