私は最近、私のウェブサイトにSQLインジェクション脆弱性のあるページがあることを発見しました。テスト時には、sqlmap
のようなペンテストツールを使用すると簡単に悪用可能でした。この抜け穴を悪用する可能性があるSQLインジェクション攻撃でサイトデータベースにアクセスしたかどうかを確認するにはどうすればよいですか?サーバーはApache/2.4.18
とMySQL Ver 14.14 Distrib 5.7.16
を実行しています。SQLインジェクション攻撃によってMySQLデータベースにアクセスしたかどうかを確認する方法はありますか?
答えて
適切なログがないと、それを確認する方法がありません。 リスクを軽減するために、パスワードを変更し、ユーザーにパスワードを変更するように指示することをおすすめします。
私はすでにそれをしています。言及いただきありがとうございます。 – delphinlabs
いいえ、実際にSQLインジェクション攻撃を検出する方法はありません。
検出を近似するいくつかの方法は、アプリケーションが実行する既知の正当なSQLクエリの「ホワイトリスト」を保持することに依存しています。次に、クエリログに知られていないものが含まれている場合、それは潜在的に彼らが不正なソースから来たものであるという手掛かりになります。あるいは、クエリツールでDBAが実行している可能性があります。
また、すべてのSQLクエリをログに記録し、既知の適切なクエリのホワイトリストを準備しておく必要があります。
@alexnは上記のように、Apacheのログを確認できます(SQLインジェクションの脆弱性がすべてではないHTTP要求からSQLインジェクションが直接発生したとします)。これを行うには、ログに記録されているコードで見つかった脆弱性を悪用した可能性のあるすべてのHTTPリクエストを検索し、その検索結果で正式なリクエストがあったようなものをすべて除外します(例:?id=123
良いですが、?id=123 OR 1=1
は疑いがあります)。
他の製品では、クエリトラフィックを監視して、SQLクエリが正当なものか疑わしいクエリかを推測しようとしますが、これらは誤検出や偽陰性の傾向があります。
説明的な答えをありがとう!私はすべてのクエリのロギングを有効にしていたので、うまくいくことができます。これらのIPアドレスをブラックリストに登録できるように、これらのクエリを元のIPアドレスにマップする方法はありますか? – delphinlabs
クエリログにはクエリを送信したクライアントのIPアドレスがありますが、MySQLの「クライアント」はアプリケーションを実行するホストであり、ユーザのホストではありません。ユーザーのIPはApacheログにあります。要求トラフィックがあまり頻繁でなく、1秒あたり1つの要求が1つしかない場合を除いて、MySQLログとApacheログを関連付けるのは通常非常に困難です。 –
最も明白な方法は、Apacheのアクセスログを確認することです。これらは '/ var/log/apache2'の中で最もよく見られます。 – alexn