NoSQLでもインジェクション攻撃は成立する|仕組みと対策を解説

「NoSQLのデータベースを使えば、インジェクションは成立しないのでは?」
「NoSQLインジェクションの対策は何から取り組むべきなのか?」

NoSQLインジェクションとは、NoSQLのデータベースに対して実行されるインジェクション攻撃です。インジェクション攻撃とは、入力値に悪意のある文字列を「注入(インジェクション)」する攻撃のことです。

NoSQLデータベースを使用することで、SQLインジェクションのような攻撃が防げるという考え方があるかもしれませんが、実際にはNoSQLデータベースを使用していても攻撃が成功する可能性があります。

まだ馴染みのない方も多いと思いますが、ビッグデータの活用など、NoSQLの需要が高まっている昨今、インジェクション攻撃への対策を実施しておかないと大きな被害につながる恐れがあります。

そこで本記事では、以下の点について解説します。

  • NoSQLとは
  • NoSQLインジェクションの仕組みと実例
  • NoSQLインジェクションへの対策例

本記事をお読みいただくことで、NoSQLインジェクションの概要と基本的な対策について理解ができます。さらに対策を実施したい方におすすめの施策や、よりコストをおさえてセキュアなWebアプリケーションを開発するための手法についても解説しているため、ぜひ参考にしてみてください。

NoSQLデータベースを導入している企業の方、必見!

NoSQLインジェクションの対策は何から取り組むべき?

特殊文字のサニタイズやクエリストリングのバリデーションなどが代表的な対策です。また、漏れなく対応するためには、Webシステム全体の脆弱性をチェックし、最適な対策を実施する工程を加えましょう。方法はこちらの資料をご覧ください。

NoSQLインジェクションとは?

NoSQLインジェクションとは、NoSQLのデータベースに対して成立するインジェクション攻撃のことです。
ここではまずNoSQLと、NoSQLインジェクション攻撃の仕組みについて解説します。

NoSQLとは?

NoSQLとは「Not only SQL」の略称で、リレーショナルデータベース以外のデータベースの総称です。リレーショナルデータベースとNoSQLデータベースは、データの構造や処理性能、検索精度や拡張性が異なります。

RDBとNoSQLの違いの図 エーアイセキュリティラボ

リレーショナルデータベース(RDB)とは、データ間の関係を定義して管理するデータベースのことで、Excelのように表形式でデータを管理します。代表的な製品としては、Oracle DatabaseやSQLServer、My SQLなどがあります。「リレーショナルデータベース」いう単語にはピンと来なくても、これらの製品名は聞いたことがあるのではないでしょうか。「SQL」と呼ばれるデータベース言語を使うことで、参照や検索がしやすいという特徴があります。

リレーショナルデータベースは表形式で直感的に理解しやすく、SQLで操作もしやすかったことから広く普及していました。しかしその反面、データの量が多くなると処理速度が低下したり、データ構造を固定する必要があったりといった課題もありました。

NoSQLはリレーショナルデータベースとは違い、表形式ではデータを管理しません。様々な形式のデータをそのまま保存できるため、画像や動画といった決まった構造を持たないデータを保存でき、拡張性や処理速度に優れている、といった特徴があります。ビッグデータの活用が広まる中で、より柔軟かつ高速に大量のデータを処理できるデータベースとして、NoSQLが普及しています。

NoSQLに分類される代表的なデータベースとして、以下が挙げられます。

製品名 特徴
MongoDB 処理速度が速く外部システムとの連携が容易、NoSQLでは最も高いシェアを誇る。
CouchDB 複数のサーバーやデバイス間でデータの同期が可能、AWSやGCPでフルマネージドサービスとして利用できる。
DynamoDB Amazonが提供するフルマネージドサービス。システムの規模に関わらず高速で一貫したパフォーマンスを実現。
Redis インメモリデータベースで高速処理が特徴、オンプレミス、クラウド両方で利用可能。
Riak シンプルな構造で拡張性と可用性が特徴、処理性能も高い。時系列データなどに最適。
Cassandra ビッグデータ用分散データベース。大量のセンサーデータやログデータなどの非構造化データを効率的に格納する。
HBase リアルタイムの処理能力が高い。拡張性に優れ、処理対象の増加にも柔軟に対応可能。
Neo4j 最も人気のあるOSSグラフデータベース。オンプレミス、クラウドの両方で利用可能。

NoSQLインジェクションとは?

NoSQLは表形式でデータを保存しないことから、SQLも使用しません。そのため、NoSQLのデータベースを利用すれば「SQLインジェクション」のような攻撃を回避できると誤解されている場合があります。しかし実際には、NoSQLのデータベースでも「NoSQLインジェクション」という脆弱性を突いた攻撃手法が確認されています。

SQLインジェクションの脆弱性は、データベースを操作するSQL文の扱いに不備がある場合に生じます。SQLインジェクション攻撃は、Webアプリケーションの入力値に不正な文字列を挿入し、用意されていたSQL文に干渉する攻撃です。不正なログインやデータの不正な取得・改ざん・削除といった被害が発生する恐れがあり、危険性の高い攻撃の1つです。

NoSQLのデータベースも、データを操作する際には「クエリ」と呼ばれる命令文を使います。そのため、このクエリの組立て方法に不備があれば、NoSQLのデータベースであっても、このクエリに干渉するような入力値を挿入することで、インジェクション攻撃を実行できる場合があります。NoSQLを使っているからといって安心せず、必要な対策を実施しなければなりません。

NoSQLインジェクション攻撃の実例

それでは、NoSQLインジェクション攻撃は、具体的にはどのように成立するのでしょうか。

例えば、代表的なNoSQLのデータベースに「MongoDB」があります。MongoDBは圧倒的なシェアを誇っており、世界のNoSQL市場をリードしているデータベースです。

MongoDBの主な特徴はスピードで、特定の操作を行うための演算子が用意されています。今回例にあげる演算子は「$ne」です。これは「not equal」の略称で、一致しない値を出力します。例えば、「’$ne’:”test”」と使えば、「test」という文字列に一致しないデータを出力します。

NoSQLインジェクション攻撃の例として、この演算子を悪用することで、ユーザーIDの一覧を検索する以下のようなクエリを作成することが可能です。

db.userlist.find(
                 {user_name: {‘$ne’:””}}
)

上記のようなクエリが実行された場合、返ってくるデータは、「user_name」の値が「””」で囲まれた文字列に一致しないデータ、すなわち全てのデータです。「””」で何も囲んでおらず空白になっているため、「空白」に一致しないデータ=なんらかの値を持っているデータ全てを参照することが可能となります。

NoSQLのクエリの組立てに不備がある場合、上記のように、NoSQLのクエリに干渉するような文字列を挿入することで、全ユーザーのIDを取得するといった攻撃が可能となります。

NoSQLインジェクションの対策

一般にNoSQLは単純なクエリ操作に留まることが多く、SQLほど複雑な処理ができません。そのため、SQLインジェクション対策ほど複雑な対策は求められませんが、NoSQLと一口に言っても様々な形式があるため、製品に合わせたセキュリティ対策が必要になります。

ここでは、NoSQLインジェクションの代表的な対策を2つご紹介します。まず特殊文字のサニタイズを確実に実施し、二次的・保険的な対策としてクエリストリングのバリデーションを実施するという順番での取り組みがおすすめです。

特殊文字のサニタイズ

1つ目の対策は、特殊文字のサニタイズです。NoSQLインジェクション攻撃は、入力値にクエリに干渉するような特殊な文字を挿入することから成立します。そのため、特殊な意味を持つ文字をサニタイズし、クエリに干渉しないようにすれば、NoSQLインジェクション攻撃を防ぐことができます。

クエリに干渉するような特殊文字の種類はデータベースの種類によっても異なりますが、一般的には以下のような文字が対象となります。

  • \
  • ;
  • {
  • }

詳しくは、各ベンダーのマニュアルなどを参照してください。

クエリストリングのバリデーション

2つ目の対策例は、クエリストリングのバリデーション(検証)です。先ほどご紹介したように、NoSQLインジェクション攻撃では、クエリに干渉し得るような文字列が入力値に挿入され、開発者の意図しないクエリストリングが作られてしまうことで成立します。

そこで、クエリストリングのバリデーションを実施し、不当なクエリストリングが作成されている場合にはエラーを返す、といった実装をすることで、NoSQLインジェクションの対策になります。

さらに対策したい場合は

NoSQLは、大容量のデータを高速で処理できるという共通項はあるものの、「NoSQL」という名前のデータベースがある訳ではなく、製品によって仕組みが異なります。その多様さから、NoSQLインジェクション対策が確立されているとは言い難く、漏れなく対策することが難しい脆弱性です。

自社で対策を実施しても不安が残る場合には、「脆弱性診断の実施」や「脆弱性診断ツールの導入」といった対応を検討してみてください。

脆弱性診断の実施

脆弱性の対策を漏れなく実施するのは難しいものです。特にセキュリティについての専門的な知識がない場合はなおさらでしょう。診断ベンダーなどの第三者に脆弱性診断を依頼して、NoSQLインジェクションの脆弱性を洗い出してもらうことをおすすめします。

脆弱性診断を実施すれば、検出された場合の該当箇所や具体的な対応策の提示もしてもらえるだけでなく、他の危険な脆弱性の有無もチェックしてもらえるので、セキュアなWebアプリケーションの開発に役立ちます。

脆弱性診断(セキュリティ診断)とは|必要性からやり方まで、すべて解説」では、脆弱性診断の概要、種類やサービスを選ぶ際のポイントについて説明しています。脆弱性診断について知ることは、自社のニーズに合うセキュリティ対策を検討する上での判断材料になりますので、ご一読いただくことをおすすめします。

脆弱性診断ツールの導入

ベンダーへの脆弱性診断の依頼には工数やコストがかかるため、頻繁に実施するのは難しいものです。ベンダーに依頼せず、自社で診断を実施することも検討してみると良いでしょう。

脆弱性診断ツールを導入すれば、自社の好きなタイミングで診断を実施できるため、ベンダーに依頼するよりもスピーディーな対応が可能です。また、頻繁に診断を依頼する場合は、ツールに置き換えることでコストをおさえることもできます。自社のWebアプリケーションのセキュリティをより手軽に強化したい場合は、診断ツールの導入も検討してみることをおすすめします。

脆弱性診断ツールについては、「脆弱性診断ツール(サービス)|有料・無料の違いと5つの選定ポイント」にて詳細を解説しております。併せてご覧ください。

まとめ|クエリ対応と脆弱性診断でNoSQLインジェクション対策を

NoSQLインジェクションとは、NoSQLのデータベースに対して実行されるインジェクション攻撃です。

攻撃は、以下の方法で防ぐことが出来ます。

  • 特殊文字のサニタイズ
  • クエリストリングのバリデーション

特殊な意味を持つ文字のサニタイズや、クエリストリングのバリデーションを実施し、入力値がクエリに干渉しないようにすれば、NoSQLインジェクション攻撃のリスクを大幅に下げることが可能です。

自社で対策を実施しても不安が残る場合には、「脆弱性診断の実施」や「脆弱性診断ツールの導入」によるセキュリティの強化が有効です。

脆弱性診断

  • 脆弱性が検出された箇所の報告
  • 具体的な対応策の提示
  • 他の危険な脆弱性の有無もチェック

脆弱性診断ツール

  • 脆弱性診断を自社に導入することで外部委託による工数やコストが削減できる
  • 好きなタイミングで迅速な診断を実施
  • 手軽にセキュリティを強化したい場合におすすめ

脆弱性診断、脆弱性診断ツールを導入することで、その多様さから漏れなく対策することが難しいと言われるNoSQLインジェクションを見つけることができます。自社に合った対策を検討し、Webアプリケーションを安全に運用しましょう。

NoSQLデータベースを導入している企業の方、必見!

NoSQLインジェクションの対策は何から取り組むべき?

特殊文字のサニタイズやクエリストリングのバリデーションなどが代表的な対策です。また、漏れなく対応するためには、Webシステム全体の脆弱性をチェックし、最適な対策を実施する工程を加えましょう。方法はこちらの資料をご覧ください。

エーアイスキャン編集部

エーアイスキャン編集部

クラウド型Webアプリケーション診断ツールAeyeScanなどを提供している、株式会社エーアイセキュリティラボのオウンドメディアを運営しています。セキュリティや脆弱性に関する情報について、わかりやすさと正確さをモットーに発信していきます!

FAQ

  • NoSQLインジェクションとは何ですか?

    NoSQLインジェクションとは、NoSQLのデータベースに対して成立するインジェクション攻撃のことです。

    NoSQLのデータベースは、データを操作する際には「クエリ」と呼ばれる命令文を使います。

    クエリの組立て方に不備があれば、NoSQLのデータベースであっても、このクエリに干渉するような入力値を挿入することでインジェクション攻撃が成立する恐れがあります。

    詳しくは、「NoSQLインジェクションとは?」をご覧ください。

  • NoSQLインジェクションにはどのような対策が必要ですか?

    NoSQLインジェクションの代表的な対策は、以下の2つです。

    • クエリストリングのバリデーション
    • 特殊文字のサニタイズ

    NoSQLインジェクションは、入力値に特殊な文字列が挿入され、開発者の意図しないクエリが組み立てられることで成立する攻撃です。

    そのため、クエリストリングのバリデーションや特殊文字のサニタイズが効果的な対策となります。

    詳しくは、「NoSQLインジェクションの対策」をご覧ください。

AeyeScan

AeyeScanの導入を検討してみませんか?

操作性の確認、
実際に利用してみたい方へ

「AeyeScan」の無料トライアル

トライアルにかかる費用は不要。実際の操作性はどうなの?またどのように脆弱性が発見されるのか?などの疑問は無料トライアルで解消しましょう。

無料トライアルの申し込み

サービスをより詳しく
知りたい方へ

「AeyeScan」のサービス概要資料

改めてサービスの特長や導入効果、企業の導入実績などAeyeScanについてより詳しく知りたい方はぜひサービス資料をご覧ください。

サービス資料を読む

お見積もりの希望・導入を
ご検討している方へ

「AeyeScan」へのお問い合わせ

お見積りの希望・導入をご検討してくださっている方はお問い合わせフォームよりご連絡ください。当日もしくは遅くとも翌営業日にはご連絡を差し上げます。

お問い合わせフォーム

導入企業様

クラウド型Webアプリケーション脆弱性検査ツール 国内市場シェアNO.1

※ 富士キメラ総研調べ「2023 ネットワークセキュリティビジネス調査総覧 市場編」
  Webアプリケーション脆弱性検査ツール〈クラウド〉2022年度実績