MODX Evolution 1.0.7J-r1をリリースしました
2012年12月31日 11時00分 shortlink:http://modx.jp/?id=875
パスワード文字列の管理方法を改善。バックアップデータの盗難などにより万が一データが漏洩しても解読されにくくなりました。新機能としては、ManagerManagerのアップデートにより、単一フィールドに複数の値をインプットできるようになりました。
注意事項
パスワードの管理方法の変更について
今回のバージョンでは、パスワード情報の格納方法を変更しています。不具合がないように念入りにテストを行なっていますが、もし問題があった場合はログインできない可能性があります。気付いた点があればご連絡ください。
新オプション「ディレクトリ表現」とSEO Strict URLsについて
グローバル設定に新オプション「ディレクトリ表現」を追加しました。SEO Strict Urlsをインストールしている場合は末尾のスラッシュが余分に追加されますので、当オプションを無効にするか、SEO Strict Urls側の設定を変更する必要があります。本体の処理のほうが負荷を低く抑えることができますので、SEO Strict Urls側の設定を変更することをおすすめします。
アップデートの手順
https://modx.jp/docs/update.html
上記を参照してください。
変更内容
新機能・新しい仕様
- パスワードのハッシュアルゴリズムを改善
https://github.com/modxcms-jp/evolution-jp/issues/31 - 新機能 - $modx->config['make_folders'] 追加
- 新機能 - 管理画面に「ユーザプロフィール設定」を追加
- 管理画面トップメニュー - グローバル設定で構成を変更できるようにする
- TopicPathバージョンアップ(2.0.1)
http://forum.modx.jp/viewtopic.php?p=5590#p5590
※パラメータ指定が変更になりました - ManagerManagerアップデート(0.4)
- 投稿画面のファイルブラウザで$modx->stripAlias()を使えるようにする
https://github.com/modxcms-jp/evolution-jp/issues/32 - filemanager_pathとrb_base_dirの値としてプレースホルダを使えるようにする
- IE6サポート終了(管理画面)
- ロール設定画面 - 「全てチェックを入れる」を追加
- Ditto - エクステンダーをチャンクで作成できるように改善
不具合修正
- MySQLの環境によってはForgot Manager Loginが動作しないため修正
- チャンク複写時にリッチテキストエディタの設定が引き継がれないため修正
- リソースの移動先にサブリソースを指定できてしまうため修正
http://forum.modx.jp/viewtopic.php?f=7&t=1044 - サンプルコンテンツ - createdbyの値が誤っているため修正
- 複数選択タイプのテンプレート変数不具合修正
- ユーザ設定画面でManagerThemeの選択肢に「Default」が含まれるため修正
- チャンクがひとつもない時にチャンクコールを記述するとエラーになるため修正
- Ditto - &orderByパラメータのデフォルト値の処理を修正
変更
- 管理画面トップメニュー - 「ロックを解除」を「権限管理」に移動
- Ditto - トップページは[+url+]の出力を[(site_url)]とする
- $modx->db->insertの$fromtableパラメータを省略可能にする
- DocManager - リソースID指定フィールドではIMEをオフにする
- $modx->getFullTableName()に代わってプレフィックスをプレースホルダ指定できるようにする
- DocManager - リソースID指定で上限指定・下限指定を省略できるようにする
- 新API追加 - $modx->db->getObject()・$modx->db->getObjects()
- imageウィジェットの使われてないパラメータを削除
- グローバル設定の「アップロードファイルの名前の扱い」を「はい」にしている時にファイルブラウザが正しく動作しないため修正
https://github.com/modxcms-jp/evolution-jp/issues/29 - tplファイルのファイル名を変更
- プラグイン設定画面のイベント一覧の各イベントに番号を振る
- ユーザプロフィール設定画面のActionIDを修正
- Ditto - RSS出力のインデントを揃える
- Ditto - RSSフォーマッタ・&dateSourceパラメータを指定するだけでいいように改善
- 従来どおり&orderByパラメータによる上書きも可
- WebChangePwd・WebSignup削除(別途配布)
- インストーラ - インストールするエレメントがない場合は表示をシンプルにする
- サンプルコンテンツ - RSSフィードのスニペットコールをシンプルに
- インストーラ - HELPのリンクを新規インストール時・アップデート時で出し分け
- メンテナンスモード時のメッセージ表示が文字化けすることがあるため修正
- Ditto - RSSフォーマッタの&dateSourceパラメータのデフォルトをpublishedonにする
- Ditto - デフォルトテンプレートをシンプルにする
http://forum.modx.jp/viewtopic.php?f=7&t=1031 - Ditto - 言語エントリー漏れを修正
- セッションクッキーのパスにMODX_BASE_URLをセット
- $modx->mergeCommentedTagsContent() fix
- urlencodeではなくrawurlencodeを使う
- 「ヘルプ」のsupportタブの内容をシステム情報に統合
- 投稿画面 - リッチテキストエディタの時にtextareaの高さを小さめにする
- TinyMCE - border="0"を付加しない
- message.quit.inc.phpを削除
- ユーザ設定更新時にuseridを追加しないように修正
- ユーザ設定のフィールド構成を整理
- グローバル設定 - configのデフォルト値を最初に読み込む
- 管理画面トップメニューに「ユーザー」を追加
- resource_tree_node_nameオプション表示を改良
- リソースツリーのノード名設定を追加
http://forum.modx.jp/viewtopic.php?f=7&t=1025 - MODxMailer - エンコードを指定できるようにする
- Ditto - エクステンダーを複数回includeしないように修正
- インストーラ・ビギンメッセージを多言語対応
- ユーザ設定の写真設定を改善
http://forum.modx.jp/viewtopic.php?f=32&t=1019 - $modx->makeUrl()$argsの処理を整理
- グローバル変数 $modx_version 追加
技術解説
従来のMODX Evolutionのパスワード管理方法
入力されたパスワードをmd5関数でハッシュ化し、データベースに保存します。データベース文字列をそのままデータベースに保存すると、データベースの内容が漏れるとパスワードもそのまま漏れてしまうためです。ハッシュ化は暗号化のようなもので、見た目にはどのようなパスワードが設定されているかを分からないようにできます。
この方法には問題があり、場合によっては意外と簡単に解読できます。たとえば、誰にも推測されないつもりで、子どもの頃に飼っていたペットの名前をパスワードにしたとします。
「pochi」 → 07475af7ca64f9450efb2cfb1b1e9ba4
たとえば「pochi」という文字列を設定した場合はmd5関数により上記のように変換されてデータベースに保存されますが、この場合は専用の解読ツールを使わなくても誰でも簡単に解読できます。
【参考:技術評論社サイト記事】 なぜPHPアプリにセキュリティホールが多いのか?
「8文字程度のパスワードをmd5ハッシュ化した状態は平文とあまり変わりがありません」
この問題は、すでに何らかの方法で管理画面に不正にログインできることが前提です。MODXを管理するユーザのパスワードが何であるかを推測できてしまうことが問題と言えます。退職したスタッフなど、長い間使われていないアカウントがある場合は削除または休止に設定しましょう。社内で共有しているパソコンなども要注意です。
解析されたパスワードをYahooメールやGmail・Facebookなど他サービスでも使っている場合は、MODXの管理画面に侵入されてしまう危険とは別に、二次被害が拡大する可能性が高くなります。
今回実装された新しいパスワード管理方法
ソルト&ハッシュと呼ばれる手法を採用しました。入力されたパスワードに32文字のランダム文字列を追加し、これをハッシュ化します。これにより、単純なレインボーテーブル参照による解読はほぼ不可能になります。
さらにハッシュ化の方法として6種類のオプションを用意し(※グローバル設定参照)、サーバが対応している場合はストレッチングという手法を追加で用いることができます。
【参考:Gigazine記事】 「WindowsのパスワードはGPUを25個使えば約6分から6時間で突破が可能、毎秒3500億通りもの総当たりが可能な方法とは?」
高いスキルを持つクラッカーは、取得したデータを使って本番サイトへの侵入を試みるようなことはしません。オフラインで環境を作って、じっくり時間と手間をかけてパスワードの解析を行ないます。そのようなケースを想定する場合はストレッチングが有効です。
その他
気付いた点があればフォーラムまたは問い合わせフォームからフィードバックをお願いします。