前回SQLインジェクション(SQLi)が存在するコンテンツに対して、sqlmapを使用し、実際にデータベースから情報を取得するところを確認いただいけたかと思います。
SQLiは昨今良く発生するクレジットカードの情報漏洩事故や個人情報漏洩事故の主な原因として使用される脆弱性の一つです。
Question.SQLインジェクションってまだあるの?
Answer.まだあります!
私が今の仕事(脆弱性診断)をして8年目になりますが、毎月のように見かける脆弱性です。
それだけ世の中にまだまだセキュリティ対策をするという考え方が浸透されていないのだと思います。
また、実際にどうすればいいのかわからないのだと私は考えています。
例えば、クレジットカード情報を取り扱う際に、「PCI DSS」というカード情報セキュリティの国際統一基準がありますが、「PCI DSS」という単語を知っている人はごく一部だと思います。
※「PCI DSS」については、いつか解説したいと思います。
ECサイトの運営者については、カード情報非保持であれば、「PCI DSS」に準拠する必要や、その審査を受ける必要はありませんが、一度基準を見て、自分の持ち物(サーバ等)へのベストプラクティスを検討する必要があるかと思います。
「PCI DSS」の基準の中にログやトランザクションのチェックという内容があります。
簡単に言うとちゃんとログはチェックしようね!という内容です。
では今回のSQLiのログはどうなっているか見てみましょう。
SQLインジェクションが行われた際のアクセスログを確認する!
$ cd /var/www/apache2/ #apacheのアクセスログの保存箇所に移動 $ less access.log #アクセスログを確認
以下のように見えました。
最初の数回は192.168.70.1(ホストPCのwindows)からのアクセスですが、以降は192.168.70.130(Kali Linux)からのアクセスです。
実際に前回のような環境でsqlmapを流したことがある方はわかると思いますが、ツールが実行されていた時間はほんの数十秒です。
ではその数十秒でどれくらいアクセス回数があったのか確認してみます。
$ grep "192.168.70.130" access.log | wc -l #192.168.70.130からのアクセスがどのくらいあったのかをカウント 67 #結果は67回
物凄い頻度でアクセスしているかわかると思います。
また、アクセスしているURLもすべて同じURLになるため、ECサイト等であれば、数あるコンテンツの中で、同じURLに対して、短い時間に同じIPアドレスからアクセスが頻発するので、攻撃の挙動を気付ける可能性が高いです。
もしGETパラメータに対しての攻撃であれば、アクセスログに記録されるので、さらに気付く可能性は上がります。
今回はDB名までしか取得しませんでしたが、さらにテーブル、カラムと取得する情報が増えていきますので、それに比例してアクセス回数も大幅に増えていきます。
攻撃の挙動を検知してすぐに対応できれば、被害を抑制または制限できる可能性もあります。
なので、サイトを管理(特に個人情報や決済をするサイトは)する上でログの監視が重要です。
ログ監視ツール等でもいいですが、サイトの管理者はある程度は有名どころの脆弱性があった際に、攻撃はどのようにして行われるかは把握しておいても損はないでしょう。
SQLインジェクションであれば一回だけではなく、大量にアクセスすることは必須なので、そういった挙動から、把握できるかもしれませんね!
いきなり数多くある脆弱性に対応するのは難しいと思いますので、まずはよくある攻撃であるSQLインジェクションの挙動を理解しておくことをオススメします。
またその際は実際に手を動かして、検証環境等を構築することでさらに良く把握できると思います。
今回の内容については以下の勉強会で話をした内容です。
[秋葉原]第17回ゼロから始めるセキュリティ入門 勉強会(発表・LT大歓迎)
7月も発表を予定していますので、興味がある方は是非足を運んでみてください。
質問や不明点等あれば、コメントやツイッター等でご連絡頂ければ幸いです。
コメント