脆弱性診断には誤報がつきもの!? 診断員が教えるSQLインジェクションの検出方法 若手診断員の奮闘記⑤

シェア ツイート

診断員3年目に突入の私! 今回は背伸びして「診断の裏側」がテーマ

お久しぶりです。ABURIDA®若手診断員のあーちゃんです。 最近は暖かいどころか「暑い」になってきましたね。
実は最近、オンサイトの案件を担当しているため毎日出社しているのですが、日傘なしではもう歩けないくらいになってる日が増えてきました……。

普段フルリモートで働いている私たちなのですが、自宅の温度調整を好きにできるプライベート空間と違い、たくさんの方が働いていらっしゃるオフィスとの温度差で風邪をひきかけておりました(笑)。

皆さんはいかがお過ごしでしょうか???

関係ない話が長くなってしまいましたが、今年から私も診断員3年目ということで、今回はちょっと診断員っぽく、普段こうやって検出しているよーみたいな診断の裏側に触れる記事にチャレンジしてみようと思います!

3大脆弱性の一つ! SQLインジェクションとは?

Webアプリケーションの中でも、顧客情報や商品の在庫情報などを管理するデータベースに対して、きちんと対策がされていない状態だった場合に、外部(攻撃者)から更新処理や削除といった、いわゆる「コミット」ができてしまう抜け穴がある状態の脆弱性のことを指します。

以前の記事に、とっても分かりやすく説明してあるものがあるので、初心者マークの方はこちらを読んでみてください! 10分以内にSQLインジェクションってね……と語りだすことができるようになりますよ~!(私もこの記事を読んで勉強しました!)

この脆弱性があると、アカウント情報を書き換えられてしまったり、そもそもなかったことにされてしまったり……。ショッピングサイトのポイントを書き換えて、そこから不正利用なんてこともできちゃう可能性などもあったりします。うぅ、怖い。

SQLインジェクションは3大脆弱性の一つで、公開されているWebシステムで見つかってしまうと大変なことになってしまいます。そのため、危険度は一番上(ABURIDA®の場合High)で報告されることが多く、場合によっては検出されたら即時にお知らせして改修を進めてもらうこともあります。

(3大脆弱性は、他にもクロスサイトスクリプティング、クロスサイトリクエストフォージェリが挙げられます)

SQLインジェクションはこうやって検出していく!

ABURIDA®は独自ツールを使用したスキャンと、診断員自ら疑似攻撃を仕掛けにいく、ツールと手作業の「ハイブリット診断」を行っています。特に、SQLインジェクションはデータベースによってルールが固定されており、ある程度攻撃値が決まっているため、反復した攻撃はツールにやってもらい、フラグが立ったものを中心に診断員が検査していくことで、効率よく、ヒューマンエラーも少なく脆弱性を検出することができるのです!

主なツールでは以下のようなロジックで検出されます。

① 攻撃値送信時にSQLのエラーが発生するか

検査パターン送信時のレスポンスにSQLのエラーが発生する場合、パラメータの値によりSQLが操作される可能性があるため、検出としています。

例えば、何かを検索する画面があったとします。検索バーにAという攻撃値を入力して送信したときは、「システムエラーが発生しました」のようなメッセージが表示され、Bという攻撃値を入力したときは、検索結果が表示されるといった感じです。

この時、Aの攻撃値に対して、データベースは不正なSQL文と判断し、検索結果を返せないことになります。攻撃者はここからデータベースの挙動を予測し、より踏み込んだことはできないかと攻撃につなげてくるのです……!!

② 検査パターン送信時のレスポンスに差分があるか

アプリケーションによっては、SQLエラーが発生しても、SQLのエラーメッセージがレスポンスに表示されない場合があったりします。これをBlind SQLインジェクションと呼んでいます。(今どや顔で書いてます。かっこいいー!)

その場合は、レスポンス差分(レスポンスタイムなど)によって脆弱性の有無を判定します。

こんな感じで、世の中の多くの脆弱性検査ツールでは、検査パターンの送信時にエラーの発生や、レスポンス差分をチェックしています。

文章だけ読んでいると、「あれ、実際に攻撃したりしてるっぽいけど、システムに影響ないの……?」と思う方もいらっしゃると思います💦 そこは本当に影響が出てしまうと、いくら診断用に用意していただいた環境とはいえ大変なので、sleep(指定した秒数遅らせてから処理をするもの)やselect(ただ単に参照をするもの)など、影響が出ないSQL文を使って確認しているので、安心していただければと思います!

実際に検出した場合、このような方法で確認した結果をエビデンスとして、報告書を作成して提出しています。

ちなみにちなみに……。

ツールは診断に必要な攻撃値を確実に送信し、怪しい挙動を確実に知らせてくれる半面、システムの癖や仕様によっては、その挙動をSQLインジェクションと勘違いしてしまい、検出してしまう場合もあります。

  • サーバーの仕様上、ある程度の負荷をかけてしまうと、レスポンスに時間を要してしまうことがまばらに発生し、突発的に発生した遅延を通常遷移と比較した際に、レスポンスタイムの差異として認識してしまう場合
  • 許可していない文字列などが攻撃値に含まれていると、それを知らせるエラーを含んだレスポンスが返ってきてしまい、通常遷移と比較したときに差分として認識してしまう場合

などなど……。

ツールはロジック(それか、それ以外か)によって脆弱性を検出しているため、診断員が確認したら誤報だったということが、どうしても多々生じてしまうのが現実です。だからこそ、専門知識のある人の手で、しっかり判定していくことが大切になってくるのです!

ツールだけじゃない! 手動で確認することで精度の高い指摘を実現します!!

昨今、AIによる脆弱性診断ツールが普及してきており、それを安価で提供するサービスも増えてきています。しかし、ツールが判定できるのは「それか、それ以外か」です。本当に対策が必要な脆弱性かどうかは、改めて人間が確認することで、無駄のない確実な対策や改修が実現できるのです!!

私も実際にAIが吐き出した診断結果を見たことがあるのですが、あれ……?と思う結果がたくさんあったなという印象でした。それを実際に精査してみると誤報であることも多く、改めて人の目(手作業)で確認していくこと、診断員の存在意義というのを実感しました。

ABURIDA®では、ツールスキャンの後、必ず診断員が一つひとつ指摘するか否かを確認する「ハイブリット診断」を行っております。ツールスキャンでは検出できない脆弱性まで網羅する診断で、より正確にお客さまのWebアプリケーションにおけるセキュリティ面での信頼性向上をご支援いたします。

まとめ

いかがでしたでしょうか……?

今回は私が日々診断していく上で行っていることの一部をご覧いただきました。3年目に差し掛かるということで、こういった技術的なことを初めて言葉に落とし込んでみましたが、うまく伝わっていたら幸いです!

最後になりますが、インターネットが社会インフラ化している現代において、脆弱性の有無や対策は、最終的にエンドユーザーや開発ベンダーさんの社会的信用に関わってしまいます。これはSQLインジェクションのみならず、どの脆弱性においてもいえることです。お客さまのためにも、エンドユーザーのためにも、自分のためにも、誰もがインターネットを安心して使えるような未来のために、ABURIDA®の脆弱性診断チームは今日も脆弱性と向き合います!!

それでは!

ライター/あーちゃん

新卒で株式会社信興テクノミストに入社し、脆弱性診断の世界に飛び込んでみた普通の20代。診断員歴は、半年とちょっと(2024年8月現在)。好きな脆弱性は「権限周り」(診断員はよく自己紹介に好きな脆弱性を言いがちですが、脆弱性って良いものではないので、「好きな」という表現は違うよね??と毎回思います。でも書いておきます)。

趣味は、おいしいご飯を食べること、アイドルを眺めること、観劇。日々の趣味を楽しむために働いております! 生きがいです!! 先輩方の背中を追いかけながら、日々脆弱性と向き合っております! まだまだ駆け出しですが、世の中の方々が安心してWebアプリケーションを利用できるよう、日々成長中です!

シェア ツイート

カテゴリー

キーワード

人気の記事