web-dev-qa-db-ja.com

データベーステーブル名のプレフィックスとあいまいさによるセキュリティ

WordPressMagento 、およびその他の広く使用されているソフトウェアの保護に関する最も一般的なアドバイスの1つは、データベーステーブル名にプレフィックスを追加するか、デフォルトのプレフィックス。たとえば、WordPressのデフォルトのwp_接頭辞を1sdf34jSqo8_などのあいまいなものに変更することをよく耳にします。

私が持っている質問はこれです:これはあいまいさによるセキュリティにすぎませんか?もしそうなら、とにかくそれを行うのは良い習慣ですか?

これについて私が見る長所と短所は次のとおりです。

利点:

  • 多くのSQLインジェクション攻撃には、必ず2つのステップがあります。テーブルを特定してから、別のことを行います。これは、xyz' OR 1=1 --'のようなパスワードを送信するような攻撃を防ぐことはできませんが、攻撃者が何らかの方法でテーブル名を知るまでは、DROP TABLE fooのようなクエリが実際に何かを行うことを防ぎます。
  • これは、実際にSQLiの脆弱性がある悪夢のゼロデイ攻撃を緩和するのに役立ちます。そのような状況では、少しあいまいなことが役立ちます。
  • Mod_securityまたはWAFを介して特定の攻撃を傍受してブロックするのが少し簡単になる可能性があります。たとえば、テーブルのプレフィックスが1sdf34jSqo8_で、その文字列がGETまたはPOST dataに表示される場合、veryが疑わしいしかし、攻撃者がその文字列を持っている場合、私はおそらくすでに攻撃されているでしょう。スーパーユーザーとしてまだ認証されていない人からのテキストを見ると、実際にはおそらくポケットベルへのダイレクトアラートです。
  • 1つのデータベースにアプリケーションの複数のコピーをインストールできます。ホストまたはサービスプロバイダーが1つまたは2つのデータベースを持つことを許可しているが、テーブルの数は制限していません(これは私には意味がありませんでしたが、私は余談)。 *これは実際にはセキュリティの問題ではありませんが、人々がこのようにプレフィックスを付けることができる主な理由です。

欠点:

  • これは、開発者として実装するのは巨大の痛みです。つまり、コード内のeveryテーブル参照では、テーブル名に定数または変数を追加する必要があります。単純なSELECTは不十分です。スキーマの変更とパッチは実際の悪夢になる可能性があります。これにより、多くのIDEがSQLステートメントのオートコンプリートやスペルチェックなどの機能を実行できなくなります。
  • 上記の問題のおかげで、間違いなくmoreチームの誰かがSELECT * FROM {prefix}foo LEFT JOIN bar ...のようなステートメントを書いて、どこかにプレフィックスを忘れたために、バグや潜在的な脆弱性が発生する可能性があります。
  • それは明らかにis少なくともあいまいさによるセキュリティの形式です。これは、だらしない、自信過剰などにつながります。
  • 準備されたステートメントとホワイトリストでまだ修正されていない問題は解決されません。

私は思う 「データベースのテーブル名を明らかにしても大丈夫ですか?」という質問に対する受け入れられた回答 私の考えをうまく要約します-データベースがインジェクションに対して安全であれば、テーブル名を明らかにすることによって何も失うことはありません。正常にアップロードされて実行された不正スクリプトのように、別のレイヤーで違反があった場合、(1)テーブルプレフィックスは簡単に発見でき、(2)とにかく気に入るはずです。

だから、質問の短いバージョン:これは、実際に開発者がアプリケーションを作成するときに行うべきこと、または単なる追加のレイヤーになりすましているのは悪い習慣ですセキュリティの?

EDIT:明確にするために、エンドユーザーが先に進み、たとえばWordPressインストールのデータベース開発者がデータベースを使用するアプリケーションを作成するときに、開発者が最初にこの種の機能を有効にする必要があるかどうかを尋ねています。

7
elixenide

最新のデータベースのほとんどは、メタデータを通常のテーブル( 情報スキーマ )に格納しているため、SQLインジェクションがあると、攻撃者は最終的に、命名スキームを含む、悪用に必要なすべての情報を見つけます。

Wordpressおよびその他の一般的なソフトウェアのカスタム設定の場合、プリミティブなエクスプロイトが標準の名前が使用されていると想定するため、自動化された攻撃someを回避するのに役立ちます。ただし、攻撃者が SQLmap のようなもう少し高度なツールを使用する場合、カスタムの命名はほぼ瞬時に明らかにされます。

7
buherator