今月に入り、SQLインジェクションによるサイト改竄被害が、広範囲で発生しているようです(参考:LACの注意喚起)。
この攻撃で使われた手法に関する詳細な情報が、以下のページに載っていました。
非常におおざっぱに言うと、以下のような感じです。
- リクエストを送ってみて、SQLインジェクション脆弱性があるか調べる。
- 脆弱性がある場合、それを突いて、全テーブルの、全カラムの、全レコードの値を改竄する*1。具体的には、DB格納値の末尾に「
<script src=http://www.211796...(省略)
」のような攻撃コードを追加する。 - DBのデータをエスケープせずにHTMLに出力している箇所があると、挿入されたJavaScriptがユーザのブラウザ上で動作して、これが悪さをする。
攻撃の対象は、ASP+SQL ServerのWebページ全般であり、特定のソフトウェア(例えばオープンソースの掲示板ソフトなど)の既知の脆弱性を狙うタイプの攻撃では無いようです。
手口としては、昨年末頃から流行っているものとほぼ同一です。
参考:
InfoSec Handlers Diary Blog - Mass exploits with SQL Injection
uc8010 sql injection attack: the facts, more info and post mortem – in.spite
手口が殆ど変わっていないにも関わらず、たびたびまとまった数のサイトが改竄される被害が発生しています。これは、クローリングによって脆弱なページを発見したり、発見した脆弱性をexploitする能力が強化されてきているためだ、というようなことがSANSの記事に書かれています。
今後も、攻撃側の能力はさらに強化される恐れがあります。例えば、現状の攻撃はASP+SQL Serverのみをターゲットとしていますが、それ以外の言語やDBMSの一部はターゲットになりうると思います。
*1:正確には、システムテーブルや、文字列型以外のカラムを除く。