Fusic Tech Blog

Fusion of Society, IT and Culture

【論文読み】SQL Injectionと機械学習を用いた検知、防御手法
2021/03/24

【論文読み】SQL Injectionと機械学習を用いた検知、防御手法

論文リンク https://www.researchgate.net/publication/342734749_SQL_Injection_Attack_Detection_and_Prevention_Techniques_Using_Machine_Learning

はじめに

「機械学習✖️セキュリティ」の分野に興味があったけどあまり追えていなかったのでサーベイ論文読んでみました。この論文は主にSQLInjection攻撃に注目したものです。

SQL Injection攻撃はとても大きな脅威で、webアプリケーションへの攻撃としては最も大きな割合を占めており、その影響も大きいでしょう。 これまでに様々なSQL Injection Attack(以下 SQLIA)の検知手法や対策方法が研究されてきました。

この論文では、SQLインジェクションの種類、攻撃方法が最初にまとめられていて、その後に検知手法、対策手法の解説、機械学習を含めた手法の解説と進められていました。 古典的な手法に関しては、他にも多くの文献で紹介がされているので簡単に紹介する程度に割愛して、

  • SQLIAの種類
  • 機械学習を用いたアプローチ

に注力してまとめていきます。

SQLIAの分類

SQLIAも様々な種類があるため、分類がされていました。

A. ソースによる分類

SQLIAがどこから行われるのかによって分類するものです

  • ユーザ入力
  • クッキー
  • サーバの変数
  • Storedインジェクション

B. 攻撃の目的による分類

  • インジェクト可能なパラメータの特定
  • DBのフィンガープリンティング(DBのバージョンなどを探る)
  • DBスキームの決定
  • データの取得
  • データ改竄
  • DoS攻撃
  • 不正な認証
  • コマンドの実行
  • 権限昇格

C. 攻撃方法による分類

  • Tautologies(常にtrueを返すようなやつ)
  • Blind SQL injection(レスポンスと動作を観察・分析することにより、攻撃先の理解を深める攻撃)
  • Union query(Union構文は非常に攻撃者にとって有用で、SQL Injectionできる環境が一つあれば、UNIONを使って他のテーブルにまで操作を及ぼすことができることから)
  • Piggy-backed query(一般クエリに追加してさらに操作する。「;」を入れてクエリを終了したのち、さらにクエリを実行する方法。)
  • Stored procedures (一般にストアドプロシージャはSQLインジェクション対策として目にすることが多いが、実はストアドプロシージャはOSとのコミュニケーションも可能になっているため悪用されると危険。)
  • Alternate encoding(攻撃者が検知対策から逃れるための手法。悪意のあるコードは、文字エンコーディングを変更することで、検出メカニズムを回避することを試みたりする)
  • Illegal/logically incorrect queries(意図的に間違ったクエリを入力してDBスキーマがどうなっているのかを調べる手法)

いろいろありますが、よく知られているのはトートロジーなどですね。 SQLIAのデモなんかでよく見かけますね

古典的なSQLIAの検出

静的解析は入力をそのまま解析することです。例えばクエリのシンタックスツリー構造と、良性のクエリのシンタックスツリー構造を比較することで判定を行う手法などが紹介されていました。 その後も様々な静的解析の手法が提案されましたが、欠点としては開発者が対処していない悪意のあるパターンをクラッカーがが注入できることが挙げられています。例えば、難読化などがそれにあたります。

その対策として CANDIDに代表されるような、静的解析と動的解析を組み合わせた手法などが提案されてきた。

動的解析などでは、エントロピーに注目した指標が提案されている。 例えば、悪意のある入力を含んだダイナミッククエリ(難読化などが施されたクエリ)は本来意図していた構造を変えてしまうため、変化前と後でエントロピーレベルが変化する(ここでいうエントロピーは情報理論のエントロピー)。それを検知しましょうという手法が提案されている。

機械学習を用いたアプローチ

HIPS

https://hal.archives-ouvertes.fr/hal-01137542/document

この論文などではHIPSという手法を提案しており、シグネチャに注目してベイジアンネイフ(またはベイジアンマルチノミアル)という分類機を使いhttpリクエストを不正なものか否かを分類することを試みています

Httpリクエストから特徴を抽出するためにTotal Cost Rate法(TCR)を使用し,機械学習の分類器の入力となる基本的な特徴を選択するためにMutual Information法を使用しています。

正当なリクエストを悪意のあるリクエストとみなすエラーを他のエラーよりも重視するための重みλなどを入れるなど、偽陽性を少なくするような工夫がされている。

SQL-IDS

https://www.napier.ac.uk/research-and-innovation/research-search/outputs/sql-ids-evaluation-of-sqli-attack-detection-and-classification-based-on-machine-learning

この論文では2つの異なるニューラルネットワークの使用を提案しています。バックプロパゲーション・ニューラルネットワークを使用して、7種類のSQLIを検出するタスクを行ったところ、13,000件のURLを含む小規模なデータセットにもかかわらず、96.8%

Sheykhkanloo et al.(上の著者の2つ目の論文)

https://dl.acm.org/doi/10.4018/IJCWT.2017040102

この論文では

  • URL生成器
  • URL分類器
  • ニューラルネットワークモデル

ここでは、先ほどのデータセットよりも大きなデータセットで学習したが精度は95%だった

Verbruggen et al.

この論文では、ネットワーク・ファイアウォールの新しいルールを作成するために、機械学習アルゴリズムを利用することを提案しています。既存のオープンデータセットは古いと考えhttpリクエストのデータセットを自分たちで作成したところがすごいところですね

ニューラルネットワークのトレーニングに6つの異なるデータセットを作成し、1876個の悪意のあるパケットと11444個の正常なパケットを含むようにして学習をさせたところ

98.6%の精度を得たとのこと

Wang et al.

https://www.blackhat.com/docs/us-15/materials/us-15-Wang-The-Applications-Of-Deep-Learning-On-Traffic-Identification-wp.pdf

Stacked AutoEncoder(SAE)を使用することで特徴抽出と特徴選択の面で効率的であることを示した研究

Ingre e al.

https://www.springerprofessional.de/en/decision-tree-based-intrusion-detection-system-for-nsl-kdd-datas/14220720

IDSシステムに決定木を使用して SQLIA を分類・検出しています.著者らは,NSL-KDDデータセットを使用して手法の学習とテストを行い,83.7%の精度を達成したと言っています

Moosa et al.

https://publications.waset.org/1001/artificial-neural-network-based-web-application-firewall-for-sql-injection

「Multi-layer Feed Forward」を使用してSQLI攻撃を検出することを試みた研究。

SQLI攻撃300件、XSS攻撃200件というデータセットを用いて、ニューラルネットワークの学習とテストを行った。精度は66.67%

Joshi et al.

https://ieeexplore.ieee.org/document/6993127

3種類のSQLIA

  • alternate encoding
  • union query
  • tautology

の検出を目的とした研究

特徴を抽出・選択するためにNaive Bayesを使用している。 Role Based Access Controlメカニズムを使用することで93.3%の精度を出した。

SQLiGOT

https://www.researchgate.net/publication/301760523_SQLiGoT_Detecting_SQL_injection_attacks_using_graph_of_tokens_and_SVM

SQLiGOTは,グラフ生成器とSVM分類器によって構成されています。 SQLクエリをトークンに変換した後,ジェネレータはトークンをノードとし,これらのトークン間の関係をウェイトとするグラフを構築します。 そして、SVMを用いてクエリを分類し、SQLIAを検出します。

この方式は99.47%の精度と0.31%の誤検出率を実現しています。SQLiGoTの理論上の処理時間は、各ページの読み込み時に50ミリ秒以内ですが、1秒間に100以上のリクエストを実行するウェブサーバではオーバーヘッドとなることも指摘されていました。

中間表現を得て分類タスクに食わせるという手法は機械学習では比較的よく見る手法ですが、グラフ理論を用いているのは面白いですね!

Modsecurity with ML

https://ieeexplore.ieee.org/document/8614199

この論文の著者らは機械学習アルゴリズムを使用して、Web Application Firewall (WAF) Modsecurityのルールをチューニングしました。

詳細としては、SVM、KNN(k=3)、Random Forestの3つの分類器を使用して偽陰性率を減少させることができることを示しました。

しかし、提案された方式が正しく機能するためには、与えられたアプリケーションに関連する悪意のある攻撃の大規模なデータセットが必要

TbD-NNbR

https://www.semanticscholar.org/paper/Token-based-Detection-and-Neural-Network-based-code-George-Jacob/4c186778432b94902d33dbbf8841f4fd53dfc644

トークン化技術とニューラルネットワークを融合させ、SQLI攻撃を検知・防御するためのTbD-NNbR(Token based Detection and Neural Network based Reconstruction)フレームワークを提案するもの

検出モジュールと再構築モジュールの2つのモジュールを構成し、ウェブサーバとデータベースサーバの間にあるプロキシサーバとして配置される。

検出モジュール(TbD)はトークンベースで、静的に生成された合法的なクエリストークンと、実行時に解析された動的なクエリストークンの照合を試みます。解析されたクエリと、テンプレート・リポジトリに保存されているリーガル・クエリが一致しない場合、SQLI攻撃が検出したとする。

このままだと、有効なクエリを含む大規模なリポジトリを自前で用意する必要があり,もし抜け漏れがあると偽陰性率が高くなるのが欠点として挙げられます。

この欠点を埋めるためにニューラルネットワークを導入して再構築モジュールNNbRを追加することを提案した。

検知モジュールTbDが認証済みユーザのクエリを攻撃として検知すると、このクエリをNNbRモジュールに転送して再構築します。再構築では、実際のクエリの注入された部分を除去するか、ヌル値で置換することで、悪意のあるクエリから有効なクエリを生成します。このプロセスにより、サービス拒否を減らし、認証されたユーザーのシステム可用性を向上させることができます。NNbRモジュールは、BP-NN(Back Propagated-Neural Network)モデルを使用してクエリを学習し、最適な法的クエリモデルを学習するとのこと。

終わりに

いろいろ書きましたが、要点だけ絞ってまとめてある表が論文内の Table3, 4でありますのでぜひそちらも目を通してみてください。

さっと全体像を拾えると思います。

機械学習が様々なところで活躍できることを見つけたり、知るのは実に面白いですね〜

Ryu Ishibashi

Ryu Ishibashi

機械学習/Vue/React/Laravelとかやってます