SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database の脅威の検出 (プレビュー) を試してみる

leave a comment

機能が使えるようになってから結構経ってしまいましたが、SQL Database では脅威の検出の機能がプレビューで使用することができます。

Azure SQL Database Threat Detection のパブリック プレビューを開始
SQL Database 脅威の検出の概要
Azure SQL Database Threat Detection now in Public Preview
The ongoing scourge that is SQL injection and Azure’s new SQL Database Threat Detection

機能の位置づけとしては、データベース監査の拡張機能のようなものでしょうか。
脅威検出については、監査がオンでないと使用することができません。
image

データベースのセキュリティの中に「監査と脅威検出」という機能があり、ここから有効にすることができます。

image

デモ動画では sqlmap を使用して、動作の確認を実施していましたが、SQL インジェクションで実行されていそうなクエリを実行することで、検出時の挙動を確認することができます。
例えば、PowerShell で以下のようなクエリを実行してみます。
# SSMS で試してもうまくいかなかったのでスクリプトから。

$constring = New-Object System.Data.SqlClient.SqlConnectionStringBuilder
$constring.psbase.DataSource = "<サーバー名>.database.windows.net"
$constring.psbase.InitialCatalog = "<データベース名>"
$constring.psbase.UserID = "<ログイン名>"
$constring.psbase.Password = "<パスワード>"
$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString = $constring
$con.Open()
$cmd = $con.CreateCommand()
$cmd.CommandTimeout = 0
$cmd.CommandText = "SELECT * FROM sys.objects WHERE '1'='1' --' and name='hogehoge' "
$ret = $cmd.ExecuteReader()
while($ret.Read()){
    "{0} {1} {2}" -f $ret[0], $ret[1], $ret[2]
}
$con.Close()
$con.Dispose()

昔ながらの SQL インジェクションにありそうな、条件に「1=1」を設定した後にコメント化したものとなります。

今回はサービス管理者宛にメールを送信する設定にしていますので、上記のスクリプトを実行すると、すぐに以下のようなメールが送信されてきました。

image

メールの中には、監査ログへのリンクが設定されており、ここから、どのようなクエリが実行されたのかを確認することができます。

# メール内の時刻と合致する監査ログを確認します。

image

クエリを連続で実行した場合は、最初の検知から数分しないと再検知が行われていませんでしたが、簡単な設定でこのような検出ができるようになるのは良いですね。

Share

Written by Masayuki.Ozawa

2月 2nd, 2016 at 10:03 pm

Posted in SQL Database

Tagged with

Leave a Reply