• 検索結果がありません。

SQLインジェクションの透過的な防御手法

N/A
N/A
Protected

Academic year: 2021

シェア "SQLインジェクションの透過的な防御手法"

Copied!
2
0
0

読み込み中.... (全文を見る)

全文

(1)情報処理学会第 82 回全国大会. 2F-01. SQL インジェクションの透過的な防御手法* 向佐裕貴†. 中村章人†. 会津大学†. 1. 拡張文字列システム(Extended String System: ESS) と呼ぶ.ESSは以下の二つの機能を持つ.  外部入力マーキング: 文字列中の外部入力値 にマーク(目印)を付ける.マークは,文字 列中の外部入力部分の位置を表す二つの整 数の組(スライス索引)である.  マーク伝搬: 文字列どうしの連結を行って新 しい文字列が作られるときに,マークを伝搬 させる. ESS オブジェクトは,文字列とマークリストの 二つで構成する.図 1 に ESS の例を示す.Web アプリケーションにおける認証処理において,ユ ーザ名とパスワードの組合せをデータベースから 検索する場合を想定する.この SQL 文は,二つの 外部入力値を連結して作成される.それぞれの値 が "a' OR 1=1; --" と "dummy" であったとす ると,まず一つ目の外部入力値のマークは [1,14] となる(a).これが SQL 断片文字列と連結されて 新しい文字列に伝搬すると,[36,49] に更新される (b).二つ目の外部入力値のマークは当初 [1,6] であるが,これが連結されて SQL 文が完成すると [65,70] に更新される(c) .. はじめに. SQL インジェクション(SQL Injection: SQLI)は, データベースを利用するシステムにおける最も危 険な脆弱性の一種である[1].SQLI 攻撃が成功す ると,一般的に機密性または完全性が侵害され, 情報の漏洩,改竄,または破壊を引き起こす.ま た,ユーザ認証を回避されたり,任意のコマンド を実行されたりする可能性もある. 本論文では,SQLI 攻撃の防御方法を示す.提案 手法は,外部由来の入力値を言語処理系レベルで 確実に追跡し,危険な SQL 文の実行方法を動的に 変更して攻撃を防止する.アプリケーションコー ドが SQLI 脆弱かどうかに係わらず攻撃を防止で きるという意味で透過的である.. 2. SQL インジェクション(SQLI). 2.1 SQLI 脆弱性と攻撃 SQL 文を文字列の連結で作成する方法を動的文 字列生成または動的 SQL と呼ぶ.SQLI が起きる 原因は,動的文字列生成において,適切な処理が されていない外部由来の要素を SQL 文に注入し てしまうことに起因する[1].その結果,意図しな い SQL 文を作成・実行してしまう.. (a). marks: nil. +. a' OR 1=1; -marks: [1,14]. マーク伝搬. (b). 2.2 プリペアードステートメント. SELECT * FROM user WHERE username='a' OR 1=1; --' AND password=' marks: [36,49]. SQLI 攻撃に対する防御策の一つがプリペアード ステートメント(Prepared Statement: PS)の利用で ある.PS は SQL 文の構造を定義し,外部入力値 との組み合わせ後もその構造を変化させない働き を持つ.すなわち,想定する SQL 文の構造を変化 させるような外部入力値の注入を防止できる[1].. 3. SELECT * FROM user WHERE username='. 提案手法:SQLI 防御策. +. dummy marks: [1,6]. マーク伝搬 (c). SELECT * FROM user WHERE username='a' OR 1=1; --' AND password='dummy'; marks: [36,49], [65,70]. 図 1: 外部入力マーキングとマーク伝搬の例. 3.2 SQLI 防御手順. 3.1 外部入力の追跡 プログラミング言語における文字列型オブジェク トを拡張した抽象的な言語要素を仮定する.これを *. “Transparent SQL Injection Defense Method”, Yuki MUKASA, Akihito NAKAMURA † University of Aizu. 3-389. ESS を用いて SQLI を防止する手順を示す(図 2). Web インタフェース(Web IF)はクライアントか らの HTTP リクエストを受信し,それをアプリケ ーションコードに引き渡す.SQL 文を生成するコ ードをここでは SQL 生成ロジックと呼ぶ.作成し. Copyright 2020 Information Processing Society of Japan. All Rights Reserved..

(2) 情報処理学会第 82 回全国大会. た SQL 文はデータベース(DB)ドライバを通じ て DB サーバに送られて実行される.. SQL 実行関数を呼び出して,パラメータ をバインドした PS を実行する. SQL文 S (ESSオブジェクト). (a). (b) Web IF. U Web ブラウザ (クライアント). (c) SQL生成 ロジック. U. Web拡張. marks: [36,49], [65,70]. SQLF + U. [a,b] 外部入力 フック. SELECT * FROM user WHERE username='a' OR 1=1; --' AND password='dummy';. [a',b']. 外部入力 マーキング. S[36,49] a' OR 1=1; --. 無害化. マーク 伝搬. S[65,70] dummy. プリペアードステートメント PS SELECT * FROM user WHERE username=? AND password=?;. 拡張文字列システム(ESS). (d1) パラメータ化. (d) DB ドライバ U: 外部由来文字列. SQL文 フック. SQLF: SQL断片文字列 PS(U): プリペアードステートメント、 Uはバインドされた値. PS(U). 拡張文字列システム(ESS). DB サーバ. DB ドライバ. (d2) パラメータバインド DB拡張. (d3) 実行. SQLI 無害化. 図 3: SQLI 無害化手順. DB拡張. 図 2: SQLI 防御手順. 4. システム本来の処理に割り込むために,二つの 拡張を行う.Web 拡張は,Web IF を拡張して外部 入力をフックする.DB 拡張は,DB ドライバを拡 張して SQL 文の送信をフックする. 以下に SQLI 防御手順を示す(図 2 参照) . (a) 外部入力フック: Web IF は,外部入力を受 信したら,値をパースして文字列オブジェ クトを生成する.Web 拡張は,ESS の外部 入力マーキング機能を呼び出す. (b) 外部入力マーキング: ESS は各外部入力値 に対してマーキングを行い,ESS オブジェ クトを生成する. (c) マーク伝搬: 文字列の連結操作により新し い文字列が生成されるとき,ESS はマーク を統合して更新する. (d) SQLI 無害化(detoxification): DB 拡張は, SQL 文が DB ドライバに渡されるのをフッ クして,文字列がマークされているならば PS を生成してパラメータ値(外部入力値) をバインドし,SQL 文を実行する.SQL 文 の文字列がマークされていないならば,何 もせず元のアプリケーションコードに戻る. 以下に SQLI 無害化の手順を示す(図 3) . (d1) パラメータ化: 外部入力スライスをプレ ースホルダ("?")に置換した PS を作成 する. (d2) パラメータバインド: DB 拡張は,DB ドラ イバが提供する関数を呼び出して PS を DB サーバに送る.同様に各外部入力スラ イスを PS にバインドする. (d3) 実行: DB 拡張は,DB ドライバが提供する. 3-390. 実装と評価. Web アプリケーションの開発に広く利用されてい る Ruby,JavaScript,PHP で提案手法を実装し評 価した.Ruby ではメタプログラミング,JavaScript ではソースコード変換を用いた[2].PHP では拡張 モジュールを用いた[3]. SQLI 用ペネトレーションツール sqlmap を用い て,各実装が SQLI 攻撃を防止できることを確認 した.また,本手法の導入による性能負荷を計測 したところ,応答時間は十数%(絶対値で数 ms), メモリ使用量は数%(約 1KB)増加する.それぞ れ対話的なアプリケーションでは問題にならない.. 5. おわりに. 本論文では,情報漏洩等の深刻な損害をもたらす SQLI攻撃に対する防御策を示した.提案手法は,言 語処理系を拡張して外部入力を確実に追跡し,必要 に応じてSQL文の実行方法を変更することで,アプ リケーションコードがSQLI脆弱な場合であっても DBアクセスを安全に実行できる.. 参考文献 [1] Clarke-Salt, J.: SQL Injection Attacks and Defense (2nd ed.), Syngress, 2009. [2] Mukasa, Nakamura: Transparent SQL Injection Defense Method using Programming Language Constructs, IPSJ SIG Technical Report, Vol.2019-DBS-170 No.11, 2019. [3] 向佐, 中村: WordPress におけるプラグイン透過な SQL インジェクション防御策の提案, 情報処理学会 研究報告, Vol.2019-DPS-181 No.5, 2019.. Copyright 2020 Information Processing Society of Japan. All Rights Reserved..

(3)

参照

関連したドキュメント

〜3.8%の溶液が涙液と等張であり,30%以上 では著しい高張のため,長時間接触していると

血管が空虚で拡張しているので,植皮片は着床部から

本体背面の拡張 スロッ トカバーを外してください。任意の拡張 スロット

I Samuel Fiorini, Serge Massar, Sebastian Pokutta, Hans Raj Tiwary, Ronald de Wolf: Exponential Lower Bounds for Polytopes in Combinatorial Optimization. Gerards: Compact systems for

荷役機器の増車やゲートオープン時間の延長(昼休みの対応を含む)、ヤードの拡張、ターミ

2011 Jiangsu Eastern Heavy Industry Arpeni Pratama Ocean Line JIANGSU EASTERN 115000 n.a.. 2012 Shanghai Jiangnan

新型コロナウイルス感染症(以下、

防災 “災害を未然に防⽌し、災害が発⽣した場合における 被害の拡⼤を防ぎ、及び災害の復旧を図ることをい う”