web-dev-qa-db-ja.com

デフォルトの塩は安全ですか?

新しいワードプレスをインストールするときにすべきことの1つは、wp-config.phpのsaltを更新することです。

セクションはこんな感じです

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');

クライアントがこれらのソルトを変更した場合、または定数が欠落している場合は、代わりにwordpressはこれらの値をデータベース内に保存します。

塩を生成するためにそれはwp_generate_password(64, true, true)を使いますこれをするコードは1993行目のプラガブルにあります。

今の質問は:

  • wp_generate_passwordは、推奨されるhttps://api.wordpress.org/secret-key/1.1/salt/によって生成されたソルトと同じくらい安全です。

  • この方法はそれにフォールバックするので、データベースに塩を含めることによってセキュリティが低下することはありますか。

  • 値を設定しないでデータベースに即座にランダムに生成させることは、セキュリティに何らかの影響がありますか?

6
Ronni Skansing
  1. wp_generate_password()は、推奨されるhttps://api.wordpress.org/secret-key/1.1/salt/によって生成される塩と同じくらい安全ですか?

明らかな理由により、これらの詳細に答えることはできません。内部構造は一般に知られていません。それに答えることができれば、プロセスのリバースエンジニアリングを可能にする詳細がわかります。このcouldはセキュリティの低下につながります。誰かがこのURLに膨大な数のリクエストを設定し、表面に浮かぶ気泡を監視するプロセスをリバースエンジニアリングしようとする可能性があることに注意してください。

  1. この方法はフォールバックするため、データベースにソルトを含めることでセキュリティが低下しますか?

はい。あなたはセキュリティの詳細/認証資格情報を他人がアクセスできる場所に保存したくないこれも:

  • バージョン管理
  • コマンドライン履歴
  • データベースまたはファイルのバックアップ

認証資格情報と関連データ(「salt」など)を.envファイル( Dotenvパッケージ を参照)、展開サービスの秘密の安全な避難所、個別の構成ファイル(たとえば、AWS資格情報ファイル)、したがって単一の場所のみ。

  1. 値を設定せず、その場でランダムに生成できるようにすることはセキュリティに影響しますか データベースへ

はい。 Cookieでもauth定数が使用されるため、ユーザーのCookieを無効化することで、ユーザーのログインセッションを無効化します。これらは理由のための定数です:それらは固執する必要があり、リクエストごとに変更しないでください。

編集:@gmazzapから指摘されたように、私はnotデータベースに保存された値について話していました、約 "その場で生成"定数。データベースに保存する場合は、セキュリティに関するポイント2を参照してください。

さらに追加するには、@-Mark Kaplunの リンク をたどり、@ gmazzapの回答を詳細に読んでください(両方に投票してください)。

追加のメモ/リマインダー:APIサーバーから取得したデータには、常に独自の擬似ランダム文字を追加してください。そして、決してあなたの資格情報やデータベースを手に入れないでください。パスワードを使わずに電子メールを送信したり、USBメモリやプライベートDropboxアカウント、ラップトップのハードディスクに保存したりする傾向があるものは信じられません。

編集:@stephenharrisが[chat]で指摘したように、興味深いものがあります そのトピックに関するブログ記事 ここでの回答よりも詳細。

4
kaiser
  1. それはあなたのマシンで達成できるランダム性に依存します。正確な詳細は思い出しませんが、あなたのマシンのランダムさが十分でない場合はwordpress.org APIがあります。

  2. おそらくそうではありません。誰かがあなたのDBまたはコードへのその種のアクセスを持っているなら、あなたはどんな場合でも乾杯しています、そして塩を手に入れることはあなたが直面する最も重要でない問題です。

  3. それをする理由は何ですか? DBからこれらの8つの値を取得すると、セキュリティを強化することなく、各ページの表示が少し遅くなります。

編集:なぜランダム性(エントロピー)が重要なのか

最初に、多分これは https://security.stackexchange.com/questions/61676/why-do-wordpress-installations-retrieve-the-crypto-secrets-rem remote-on-installat よりそれを説明します私

問題は、塩は推測されるべきではないということです。そのため、それらはほとんどのOSが持っているいくつかの乱数発生器で中継することによって生成されます。しかし、すべての乱数生成器が等しく作成されているわけではなく、たとえばあなたの生成器が環境からの値を入力として受け取らない場合、それは同じ数列を生成します。生成されようとしている1000個の数字、それらを塩として使用し、パスワードを推測するのがより簡単になります。

これは、すべてのサイトが同じ乱数発生器を使用し、そのためにランダムに生成された数のシーケンスにアクセスし、OSの知識とそれによって使用される乱数アルゴリズムに基づいている共有ホスティング環境では特に問題となります。以前に生成された数.

サイドノート:これが、スマートフォンや他のソフトウェアがデバイス/ソフトウェアを初期化するときにランダム入力を要求する理由です。そのランダム入力は、乱数生成の基礎として機能し、各デバイスが異なる数のシーケンスを生成することを保証します。

乱数発生器としてwordpress.orgを使用する利点は、使用されているアルゴリズム、初期化方法、および場所がわからないため、生成された数がサーバーにアクセスしないと推測できないことを知ることです。あなたが現在立っている順番で。

しかし、私がリンクした質問が言っているように、外部サービスを利用することもセキュリティ問題です。この種の攻撃手段は(ワードプレスサイトを攻撃するという文脈では)ほとんどの攻撃者が欠けている洗練されたものを必要とするので、私はこれをパラノイアの境界にあると思います、そして私はランダムジェネレータの品質について心配しないでしょうがサーバーに関連していないランダムジェネレータソフトウェアを使用して自分で塩を生成し、設定ファイルを更新します。

3
Mark Kaplun

推奨される https://api.wordpress.org/secret-key/1.1/salt/ によって生成される塩と同じくらい安全なIs wp_generate_password()

@kaiser と言いましたAPIソルト生成の内部の詳細は不明ですが、 - 正直なところ - 各文字がwp_generate_password()で使用されるのと同じ92の可能なグリフの1つである64文字列を返します。 。

サーバにPHP 7がある場合、92個のグリフの1つを選択するために使用されるランダムな整数は/ - PHP 7 CSPRNG を使用して生成されます。それより強い。より古いPHPバージョンでは、ランダムな値は mt_Rand によって提供されています。

これを考慮し、パスワードの強度が使用されるソルトよりも暗号化アルゴリズムにはるかにあることを考慮すると、はい、wp_generate_passwordはAPIによって生成されるソルトと同じくらい安全であると言えるでしょう。

この方法はそれにフォールバックするので、データベースに塩を含めることによってセキュリティが低下することはありますか。

この点に関して、私は @kaiser に同意します。

バックアップのために、誰かがあなたのデータベースダンプのコピーを取得したとしましょう。そのdbダンプで、彼らはあなたのユーザーのパスワードを見ることができますが、暗号化されています。

彼らは塩へのアクセス権を持っている場合、彼らはあなたのウェブサイトをハッキングする方が簡単です。

さらに、使用されるソルト、ユーザーIDおよびユーザー・メタ(セッション・トークンが格納されている場所)を知ることで、「復号化された」パスワードを知らなくても、ユーザーのナンス値を簡単に再現できます。

もちろん、悪意のあるユーザーがデータベースのコピーを入手した場合、セキュリティは非常に危険にさらされますが、塩をdbに格納することで、その悪意のあるユーザーの生活をより簡単にすることができます。

値を設定しないでデータベースに即座にランダムに生成させることは、セキュリティに何らかの影響がありますか?

塩がまったく設定されていない場合は、最初にWPがそれらにアクセスしようとしたときにだけwp_generate_password()を使って生成され、その後データベースに格納され、その後の要求でそこから引き出されます。

前述のように、wp_generate_password()によって生成されたソルトはそれ自体悪くはありませんが、それらはdbに格納されているので、機密性の意味は前のポイントで述べたとおりです。コピーは塩を含んでいます。

ただし、realセキュリティへの影響は、安全でない値がsaltに使用されている場合です。実際に、弱い値が設定に設定されている場合、WPは値を生成しませんが、その弱い値を使用します。確かに良いです。

WPの最近のバージョンでは(どの正確なバージョンなのかわからない)デフォルト値'put your unique phrase here'が無視されるので、もしwp-config.phpが任意のsaltに対してその値を含むなら、WordPressはそれを無視して使いますwp_generate_password()で生成された値で、弱い値よりは優れていますが、configに格納されている強い値よりも劣ります(dbにソルトを格納するため)。同じソルト値が複数のソルトに使用されている場合でも、自動的に生成された値が使用されます。

ノート

  • Saltを変更すると、変更する前にログインしていなかったが変更前にログインしたときに[私を覚えている]オプションを選択したユーザーも含めて、変更前にサイトにログインしたユーザーはすべてログアウトされます。

  • WordPressが(手動でwp-config.phpを作成せずに) "installer"を使ってインストールされると、salt値が生成され、APIから値が引き出されます。

3
gmazzap