• 沒有找到結果。

李安娜

N/A
N/A
Protected

Academic year: 2022

Share "李安娜"

Copied!
7
0
0

加載中.... (立即查看全文)

全文

(1)

以合理輸入值驗證為基礎之組合型 以合理輸入值驗證為基礎之組合型 以合理輸入值驗證為基礎之組合型

以合理輸入值驗證為基礎之組合型 SQL 指令植入式攻擊防禦 指令植入式攻擊防禦 指令植入式攻擊防禦 指令植入式攻擊防禦

李安娜 李安娜 李安娜

李安娜

1

吳靜茹 吳靜茹 吳靜茹 吳靜茹

2

田筱榮 田筱榮 田筱榮 田筱榮

3

中原大學資訊工程系

中原大學資訊工程系 中原大學資訊工程系 中原大學資訊工程系

1,2,3

nekoko@cycu.org.tw

1

wuadele@ice.cycu.edu.tw

2

tyan@ice.cycu.edu.tw

3

摘要

摘要 摘要 摘要

由於 Web 2.0 的發展,使得動態網頁結合資料 庫存取成為目前網頁應用服務最常用的系統架構。

資料庫的使用使得網頁應用服務很容易便能提供 多樣性及客製化的動態變化,然而風險也隨著這些 好處而來,SQL 指令植入式攻擊即是針對網頁應 用服務程式組合使用者輸入形成 SQL 指令的漏洞 來攻擊資料庫,可能導致資料庫內的資料被竊取,

或讓資料庫被破壞。過濾使用者輸入,攔截可能形 成 SQL 指令植入式攻擊的輸入可以防止攻擊發生,

採用這種策略的防護方法有許多,其中之一的兩步 驟輸入驗證法可以在網頁伺服器接收參數時防禦,

以防止網頁伺服器回應的錯誤訊息導致資訊洩漏。

由於 SQL 指令的複雜性以及網頁應用程式寫作方 式的多樣化,所以 SQL 指令有跨頁組合的可能,

而 SQL 指令中的參數亦可由多個使用者輸入組合 而成。我們以兩步驟的使用者輸入驗證防禦機制為 基礎,將其防禦範圍延伸成考慮網頁應用程式中含 有跨頁組合 SQL 指令或是多輸入組合參數的情形。

在靜態分析階段,我們發展了一個新的靜態分析程 序,可以找出跨頁 SQL 指令的組合方式,以及所 有使用者輸入參數與 SQL 指令之間的關係,我們 同時提出一個新的動態分析程序,在線上進行動態 使用者輸入驗證時能夠辨識並攔截跨頁組合 SQL 指令及多輸入組合 SQL 參數而成的攻擊。我們完 成了系統雛型,並加以測試,測試的結果顯示我們 的方法可以防禦跨頁及多輸入組合 SQL 指令植入 式攻擊。

關鍵詞 關鍵詞關鍵詞

關鍵詞 :::: web application security、 SQL injection attacks、input validation

1. 簡介 簡介 簡介 簡介

在科技日新月異的時代,全球資訊網(World Wide Web)已成為目前人們生活中不可或缺的一部 分。而動態網頁(如:JSP、ASP、PHP)結合存取資 料庫成為現今最常運用在網站中的技術,雖然使用 資料庫來儲存資訊非常方便,但同時也帶來了風險,

因為攻擊者可能利用網頁應用程式的弱點來竊取 資料庫內的重要資訊,甚至是破壞資料庫內容,此 種 攻 擊 手 法 稱 為 SQL 指 令 植 入 式 攻 擊 (SQL injection attacks)。

根據資料顯示[3],SQL 指令植入式攻擊是除了 XSS 外於應用程式中最常發生的安全缺陷,雖然 SQL 指令植入式攻擊從被發現開始到現在已經過 多年,但截至目前為止,這個問題並未完全解決,

它仍然是現今最容易發生的安全弱點之一。

因為 SQL 語法能夠允許多種不同指令層層組 合,所以 SQL 指令植入式攻擊種類也非常多樣化 [2][8],而由輸入驗證(Input validation)的角度來看,

攻擊方式[1]可以分為恆值邏輯(Tautologies)、註解 化(Commentization)、嵌入查詢(Embedded queries) 以及內建程序(Stored procedures)。

網頁應用程式的執行會發生 SQL 指令植入式 攻擊而導致使資料庫受攻擊,屏除應用程式邏輯上 的錯誤這個原因,通常肇因於使用者輸入帶有惡意 攻擊的字串,所以驗證過濾使用者輸入是防禦系統 的重點;而[1]的防禦機制就是驗證將會成為 SQL 指令一部分的使用者輸入(Input validation),但只考 慮應用程式中只有非跨頁的 SQL 指令或單一輸入 參數的情況。我們以作者提出的系統架構為基礎,

並提出修改版的使用者輸入合理性驗證機制,使得 防禦機制能考慮到發生於跨頁組合 SQL 指令及多 輸入組合參數的攻擊。

2. 相關研究 相關研究 相關研究 相關研究

至目前為止,雖然已有許多方法能夠防禦與偵 測 SQL 指令植入式攻擊,但由於方法不同,所以能 夠防禦的攻擊種類與特色各有差異(表 1)

表 表 表

表 1 相關研究比較表相關研究比較表相關研究比較表相關研究比較表

Taut. Com. Embedded Stored proc.

不需更 動程式

能處理跨 頁 SQL 指 令與多輸 入組合參 Input

Legitimacy Validation[1]

v v v v v x

JAVA application static analysis[4]

v v v v N/A v

WAVES[10] v v v v N/A v

Sania[12] v v v x N/A v

MUSIC[14] v v v v N/A x

SQLGuard[5] v v v x x v

SQLCheck[15] v v v x x v

AMNESIA[7] v v v x x v

WASP[9] v v v v x v

SQL-IDS[11] v v v v v v

Combinatorial approach[6]

v v v v v v

SQLProb[13] v v v v v v

Taut. :恆值邏輯 Com. :註解化 Embedded :嵌入查詢 Stored proc. : 內建程序 N/A:無法分類

Input Legitimacy Validation [1]是先利用靜態分 析來找出各頁面中與 SQL 指令有關的使用者輸入 參數資訊,並記錄到參數元素過濾檔中,最後於應 用程式上線時,根據參數過濾元素檔來分析過濾使 用者輸入。

JAVA application Static Analysis[4]則是於應用 程式設計師開發網頁應用程式時,提示程式設計師

(2)

是否寫出了具有弱點的程式片段。

WAVES[10]針對已開發完成的應用程式,藉由 輸入已知的不同種類 SQL 指令植入式攻擊,以測試 弱點所在。但依然可能無法測試出是否有新攻擊型 態導致的弱點。

Sania[12]是原始碼檢測工具,方法為自動產生 正常輸入與惡意輸入,再比對兩者之間所產生的 SQL 語法解析樹的異同,以判定該處是否有漏洞。

MUSIC[14]為原始碼掃描工具,藉由比較 SQL 指令與變異型 SQL 指令查詢結果來判定該處程式 碼是否有弱點存在。

SQLGuard[5]與 SQLCheck[15]的作法類似,都 是在應用程式執行階段送出前將 SQL 查詢指令與 語法樹做比對。SQLGuard[5]的語法樹是在執行時 同時產生;而 SQLCheck[17]的語法樹則是事先產生 定義好的。[5][17]的共通缺點在於無法防禦內建程 序攻擊。

AMNESIA[7]先於離線時靜態分析原始程式碼 並產生 SQL 語法樹,再於應用程式執行階段送出前 與靜態分析產生的語法樹比對,若是通過檢查,則 允許連接資料庫;未通過檢查則會被當作攻擊並阻 止連接資料庫。

WASP[9]在應用程式執行階段,對疑似有弱點 的參數即時加入檢測用的字串標記,並立即過濾檢 查,但由於會更動應用程式原始碼內容,所以可能 會對其原本程式執行的目的有所影響。

SQL-IDS[11]攔截應用程式執行後、資料庫接 收前的 SQL 查詢指令,再與事先設定好的 SQL 指 令特徵比對是否合法,雖然這樣的做法並不影響到 系統的運行速度,但此種基於特徵比對的方法誤判 率較高,且無法偵測出新型的攻擊型態。

Combinatorial approach[6]與 SQL-IDS[11]同樣 是使用特徵比對方法,由於都是基於特徵比對的方 法,所以有誤判率較高的問題。而他們的不同點在 於 , [6] 另 外 結 合 了 資 料 庫 管 理 系 統 (Database management system)的稽核紀錄判定是否為 SQL 指 令植入式攻擊,其誤判率也會降低。

SQLProb[13]分為資料蒐集與 SQL 指令查詢分 析兩部分。在資料蒐集階段,蒐集分類所有可能產 生的 SQL 查詢,並產生查詢集;在 SQL 指令查詢 分析階段,攔截應用程式送出的查詢,同時產生對 應的 parse tree 及解出使用者輸入內容,最後再利用 異常與正常查詢的 parse tree 的結構來驗證使用者 輸入是否合法。

3. 分析規劃與系統架構 分析規劃與系統架構 分析規劃與系統架構 分析規劃與系統架構

3.1

分析規劃 分析規劃 分析規劃 分析規劃

在[1]的研究中,作者所提出的防禦機制是在伺 服器接收階段攔截使用者輸入的參數,並根據原始 碼中的 SQL 指令來判定參數是否合法,其系統架構 分成靜態分析與動態分析兩部分。靜態分析是在系

統離線時事先掃描網頁程式內含有 SQL 語法的部 分 , 並 針 對 其 內 容 產 生 「 參 數 元 素 過 濾 檔 」 (Factor_txt),離線狀態下運作的目的是防止網頁應 用程式上線運作時可能遭受攻擊的風險。動態分析 是依據「參數元素過濾檔」來判定網頁伺服器接收 到的參數的型態以及有無符合定義的攻擊字串。這 種做法的優點是,能夠避免讓攻擊者知道伺服器發 出的錯誤訊息,且能夠不需更動原始程式的情況下 來進行防禦,以及考量到整段 SQL 指令的語意以避 免誤判,在所組成的 SQL 指令中只有單一輸入參數 時能夠提供完整防禦。然而現在的網頁應用程式常 需組合多個輸入參數形成所需的 SQL 指令,跨頁形 成 SQL 查詢指令的情形也可能出現,例如:

範例一:含有多輸入組合參數的 SQL 指令:

que= “SELECT * FROM info WHERE id=’ ”+ id+ “ ’ AND phone=’ ”+countrycode+number +“ ’ ”;

countrycode 與 number 會組合成一個值後,再指定 至 SQL 指令中的參數 phone。假設使用者輸入 countrycode 為’OR 1、number 為=1--,在靜態分析 中雖然能夠辨別出 countrycode 與 number 都屬於字 串,但由於在動態分析時會將它們分開過濾,所以 並不會查覺 countrycode 與 number 組合後的’OR 1=1--是有害的字串。

範例二:跨頁組合的 SQL 指令:

完整 SQL 指令:SELECT * FROM tables WHERE id

= ’ ”+id+ “ ’ AND birthday = ’ ”+birth+“ ’ ”

位於 a.jsp 的 SQL 指令 A 部分:”SELECT * FROM tables WHERE id = ’ ”+id+ “ ’ AND”

位於 b.jsp 的 SQL 指令 B 部分:”birthday

= ’ ”+birth+“ ’ ”

假設 a.jsp 頁的 id 輸入為 lab718,而 b.jsp 頁的輸入 為’OR 1=1--,由於 b.jsp 中並無 SQL 關鍵字,所以 在靜態分析中不會將 birth納入參數元素過濾檔內,

因此在動態過濾時就不會攔下 birth 這個參數來分 析。

由於[1]只考慮非跨頁組合 SQL 指令與單一輸 入參數的情況,所以在靜態分析中會依據單一頁面 中是否有帶有 SELECT、INSERT..等關鍵字來找出 SQL 指令,再分析指令中使用者輸入參數的性質。

因此當一個 SQL 指令含有關鍵字的部分在 A 頁、

部分使用者輸入的參數在 B 頁時,就無法將在 B 頁 的參數資訊紀錄在參數過濾元素檔中,所以在動態 分析時並不會分析到該參數,造成防禦上的漏洞。

網頁伺服器接收到參數後,必須要從參數過濾 元素檔判定它是來自哪一頁的哪一個參數、以及是 否會成為 SQL 指令的一部分才能準確分析,所以我 們改善靜態分析的流程,使參數元素紀錄檔的內容 更為完整詳盡。

而在動態分析部分,同樣是在網頁伺服器接收 時防禦,但是我們會同時分析同一頁所接收到,且 會與 SQL 查詢指令組合的參數,所以能夠判定哪些 參數會組合後才對 SQL 指令作用。

3.2

系統架構 系統架構 系統架構 系統架構

(3)

承襲[1]的架構,我們將整個系統(圖 1)分成靜 態分析與動態分析兩個部分。首先由靜態分析產生

「參數過濾元素檔」,它的內容為記錄參數在網頁 應用程式中與 SQL 指令相關的性質,接著在系統 上線運作時的動態分析即以此為分析的依據。

圖 圖圖

圖 1 系統系統系統系統架構架構架構架構 3.2.1

靜態分析 靜態分析 靜態分析 靜態分析

我們的靜態分析方法為檢查網頁應用程式原 始碼,目的是要找出會影響 SQL 指令的使用者輸入 部分,經過分析後再將相關資訊記錄於參數元素過 濾檔中。

參數元素過濾檔中所記錄的資訊是為了在動 態分析時能夠有判別使用者輸入性質的依據,所以 必須記錄下使用者輸入參數名稱、最後會指定給 SQL 指令中的哪個參數之性質(長度與資料型態)。

若是多個參數(或是一個以上的參數與固定字串)組 合成一個值再指定給 SQL 指令中參數,則必須記錄 下這些參數或字串是如何組合為一個值。接下來以 圖 2 的 login.jsp、login1.jsp、login2.jsp 來說明分析 的流程:

圖圖

圖 2 login.jsp、、login1.jsp、、 、、、login2.jsp 的部分原始的部分原始的部分原始的部分原始 碼

碼碼

碼與與與與資料庫綱要範例資料庫綱要範例資料庫綱要範例 資料庫綱要範例

1. 分析還未被分析的頁面。

2. 找出接收的以及傳送給其他頁的參數,並記錄 要傳送到哪一頁。找出其中與執行 SQL 指令相 關的地方,在範例中執行 SQL 指令查詢是使用 executeQuery(SQL query),並記錄被當成 SQL 指令執行的字串,如果字串中含變數就一一代 換,直到變數為上一頁接收的參數為止。在此 步驟得到的資訊如表 2 所示。

表 表表

表 2 靜態分析步驟靜態分析步驟靜態分析步驟 2 所得到的資訊靜態分析步驟 所得到的資訊所得到的資訊所得到的資訊

3. 重複步驟 1、2,直到所有頁面都完成分析。

4. 分析由步驟 2 得到的資訊(表 2) ,找出各頁接 收的參數是從哪一頁傳送來的。

5. 如果 SQL 指令字串中含有變數,且變數為上一 頁傳遞來的參數,則找出它的值並一一代換,

直到其中含有的變數是使用者輸入為止。若是 變數為含有 input 為上頁傳來參數的函式,則找 出參數經函式轉換後的結果。本步驟得到的資 訊如表 3 所示。

表表

表 3 靜態分析步驟靜態分析步驟靜態分析步驟靜態分析步驟 4 &步驟步驟步驟步驟 5 所得到的資訊所得到的資訊所得到的資訊所得到的資訊 網頁應

用程式 檔名

login.jsp login1.jsp login2.jsp

接收的 參數

N/A username

password

pin1 pin2 sql1 傳送的

參數

username password

pin1 pin2

sql1="SELECT

* FROM sqlija WHERE user_id='"+user name+"' AND user_pw='"+pas sword+"'"

N/A 網頁應用

程式檔名

login.jsp login1.jsp login2.jsp

接收的參

N/A username

password

pin1 pin2 sql1 傳送的參

username password

pin1 pin2 sql1="SELEC T * FROM sqlija WHERE user_id='"+us ername+"' AND user_pw='"+p assword+"'"

N/A

參數傳送 到哪一頁

login1.jsp login2.jsp N/A

代換同頁 變數後的 SQL 查詢 指令

N/A sql="SELECT

* FROM sqlija WHERE user_id='"+us ername+"' AND user_pw='"+p assword+"'"

sql3=sql1+"

AND user_pin

=

'"+pin1+pin2+

"'"

(4)

參數傳 送到哪 一頁

login1.jsp login2.jsp N/A

參數從 哪一頁 傳送過

N/A login.jsp login1.jsp

代換跨 頁變數 後的 SQL 查 詢指令

N/A sql="SELECT * FROM sqlija WHERE user_id='"+user name+"' AND user_pw='"+pas sword+"'"

sql3="SELECT

* FROM sqlija WHERE user_id='"+user name+"' AND user_pw='"+pa ssword+"' AND user_pin

=

'"+pin1+pin2+"

'"

6. 由步驟 5 所得到的網頁應用程式原始碼中的相 關資訊(SQL 指令、接收的參數、傳送的參數),

以及資料庫綱要,經過分析最後可以得出參數 過濾元素檔(圖 3)。

圖 圖 圖

圖 3 參數元素過濾檔參數元素過濾檔參數元素過濾檔 參數元素過濾檔

我們實作的系統僅能分析簡單明瞭的原始碼,

雖然允許使用者輸入參數與 SQL 指令能夠在頁面 間或透過函式隨意組合,但多個 user input 只會在 同一頁面組合成另一個對 SQL 指令作用的參數,不 會跨頁面組合,且函式僅能為簡單明瞭的字串組合 功能。

圖圖圖

圖 4 跨頁組合的跨頁組合的跨頁組合的跨頁組合的多輸入組合多輸入組合多輸入組合多輸入組合參數參數參數參數

在圖 4 的例子中,雖然靜態分析時能夠判定 id1、

id2、id3 的各種性質,但在我們實作的系統中,動 態分析時會將不同頁面接收的參數分別做分析,所 以 "id1+id2" 、 "id3" 會 被 分 開 過 濾 , 而 不 是 把 id1+id2+id3 合起來當成一個參數來過濾。

3.2.2

使用者輸入動態分析 使用者輸入動態分析 使用者輸入動態分析 使用者輸入動態分析

我們在網頁伺服器接收參數時分析使用者輸 入,用來做分析的 module 我們稱為 Filter。Filter 會參照靜態分析階段所得的「參數過濾元素檔」來 過濾使用者輸入參數,以及防禦我們在第 1 節中所 定義的四種 SQL 指令植入式攻擊。

圖 圖 圖

圖 5 使用者輸入動態分析流程使用者輸入動態分析流程使用者輸入動態分析流程使用者輸入動態分析流程

過濾的流程如圖 5,首先取得使用者輸入的參 數,再呼叫靜態分析所得的參數過濾元素檔,依照 其內容所記載先檢查是否為非一次性傳遞的參數,

如果是則將片段參數結合為完整參數,接著檢查它 的資料型態、長度是否符合,若是該參數是字串的 話則進入字串檢查流程 (圖 6),最後依照分析結果 決定是否合法,合法則讓參數傳至 web 應用程式,

不合法則阻擋並顯示錯誤訊息。數字型態的參數若 是通過資料型態與長度的檢查,則表示它並不是惡 意的輸入,所以不需要再檢查是否含有攻擊性內容,

會直接放行讓它傳至應用程式。

圖 圖 圖

圖 6 字串攻擊型態檢查流程圖字串攻擊型態檢查流程圖字串攻擊型態檢查流程圖字串攻擊型態檢查流程圖

//a.jsp

< form method = "POST" action = "b.jsp" >

< input type = "text" name = "id1" >

< input type = "text" name = "id2" >

<input type = "submit" name = "button" value="submit">

<input type = "reset" name = "reset" value="reset">

</form>

--- //b.jsp

<%

String id1=request.getParameter("id1");

String id2=request.getParameter("id2");

String bsql = "SELECT * FROM tables WHERE id='"+id1+id2;

%>

< form method = "POST" action = "c.jsp" >

< input type = "text" name = "id3" >

<% session.setAttribute("bsql" , bsql); %>

<input type = "submit" name = "button" value="submit">

<input type = "reset" name = "reset" value="reset">

</form>

--- //c.jsp

<%

String csql = session.getAttribute ("bsql").toString();

String id3 = request.getParameter("id3");

String sql = csql+id3+" ' ";

ResultSet rs=stat.executeQuery(sql);

%>

#parameter name,datatype,length(0表組合型),在組合型參數中的順序(0 表示非組合型)

#login1.jsp

username,varchar,16, 0 password,varchar,16, 0

#@(用來標記此行為多輸入組合參數資訊),SQL 指令中的參數名,資料 型態,長度,使用者輸入參數組合順序

#login2.jsp

@user_pin,varchar,16,pin1,pin2 pin1,varchar,0, 1

pin2,varchar,0, 2

(5)

在字串檢查方法中,並非包含某些符號或是關 鍵字就將使用者輸入當作惡意攻擊字串,而是要

「分析」整句使用者輸入參數與 SQL 指令結合後是 否會對資料庫造成威脅,我們將字串檢查分為三個 步驟:

(1) 第一步檢查恆值邏輯類型攻擊

SELECT money FROM info WHERE id=’lab718’

AND password=’cycu2011’ OR 1=1 --’;

先檢查使用者輸入內是否含有運算子,如果有的話 則檢查其運算式是不是恆成立的式子 (如:1=1、

2>1),且運算式前有邏輯運算子 (如:OR、AND),

則會判定此使用者輸入為恆值邏輯類型攻擊。

(2) 第二步檢查嵌入查詢攻擊

SELECT money FROM info WHERE id=’’ UNION SELECT credit_no FROM data WHERE id=’lab719’

--’ AND password=’’;

使用者輸入中出現 UNION 不一定就是惡意攻擊,

嵌入查詢攻擊要成功的要件除了利用 UNION 外,

其後接的 SQL 指令必須是完整的才會攻擊成功,如 果不是完整且正確的 SQL 指令,則只會被當成普通 的字串來處理。我們使用 SQL 語法樹(圖 7)來檢查 是否為有效完整的 SQL 指令;SQL 語法樹越詳細,

則分析結果也越準確。

圖圖

圖 7 SQL 語法樹語法樹語法樹語法樹

(3) 第三步檢查內建程序攻擊

SELECT money FROM info WHERE id=’lab718’

AND password=’cycu2011’; SHUTDOWN--’

檢查 DROP TABLE、SHUTDOWN 等操控資料庫的 指令與註解(--)是否同時存在來判定為攻擊與否,除 了內建程序指令關鍵字及註解外,還必須同時檢查 於內建程序指令字串前是否有”;”,”;”是分隔 SQL 指令的符號,若是缺少它則內建程序指令只會被當 成普通的字串處理,也因此攻擊不會成立。

而註解化攻擊則是每個步驟都會檢查,在某些 情況下,若是攻擊字串中不含註解,則攻擊就不會 成立。

4. 實作與討論 實作與討論 實作與討論 實作與討論

為了驗證我們修改過的方法除了能夠抵擋一

般的 SQL 指令植入式攻擊,也可以阻擋跨頁式或組 合式 SQL 指令植入式攻擊。在 4.2 節我們將會示範

展示實作的系統如何防禦在第 1 節中所定義的攻 擊。

圖 圖 圖

圖 8 實實實實作系統架構作系統架構作系統架構作系統架構 4.1 實作環境

實作環境 實作環境 實作環境

實作系統架構如圖 8,所使用的網頁伺服器為 Tomcat6.0,並將之掛載於相容的作業系統(我們使 用的是 Windows 7 64-bit);資料庫伺服器則是使用 MySQL server 5.0。

我們在 Tomcat 中的 web.xml 來設定所有的網頁 應用程式(包括 jsp 及 servlet)全部套用其中所制定的

<filter>。<filter>是 Java API 中的一個介面(interface),

我們的程式就是實做<filter>而完成的。

4.2

實作與防禦 實作與防禦 實作與防禦 實作與防禦

我們使用 3.2.1 節中圖 2 的例子(以下稱 Login form)來說明並展示我們系統的防禦過程。由於在 MySQL 中,註解是 “#”而不是”--”,所以以下的實 作展示中,”#”就是 SQL 指令中的註解。

4.2.1 防禦

防禦 防禦展示 防禦 展示 展示 展示

在 Login form 中,輸入帳號與密碼後僅能看 到”data”,想觀看其他資料必須另外再輸入 pin1 與 pin2,其正常登入過程如圖 10。另外圖 9 為 Login form 各頁面的「參數過濾元素檔」。

圖 圖圖

圖 9 Login form 各頁面各頁面各頁面各頁面的參數過濾元素檔的參數過濾元素檔的參數過濾元素檔 的參數過濾元素檔

(6)

圖 圖圖

圖 10 實作範例實作範例實作範例實作範例(Login form) --

第一道驗證是很常見的登入驗證 它輸入攻擊字串,在沒有防禦的狀況下 如圖 11;若是使用本研究的防禦,

擊(圖 12)。

圖 圖圖

圖 11 實作範例實作範例實作範例實作範例(Login form) --未做防禦時針對第未做防禦時針對第未做防禦時針對第未做防禦時針對第 一道驗證攻擊的攻擊結果

一道驗證攻擊的攻擊結果一道驗證攻擊的攻擊結果 一道驗證攻擊的攻擊結果

圖圖圖

圖 12 實作範例實作範例實作範例實作範例(Login form) --成功防禦針對第一成功防禦針對第一成功防禦針對第一成功防禦針對第一 道驗證的攻擊

道驗證的攻擊 道驗證的攻擊 道驗證的攻擊

4.2.2 跨頁

跨頁 跨頁 跨頁 SQL 指令組合 指令組合 指令組合與多輸入組合參數 指令組合 與多輸入組合參數 與多輸入組合參數 與多輸入組合參數

第二道驗證的語法結合了跨頁與多輸入組合 參數,由於在[1]所實作的系統中,

原始碼中的 SQL 指令在同一頁中隨意組合或是單 --正常登入過程正常登入過程正常登入過程正常登入過程

第一道驗證是很常見的登入驗證,我們先針對 在沒有防禦的狀況下,攻擊結果

,則會成功阻擋攻

未做防禦時針對第 未做防禦時針對第 未做防禦時針對第 未做防禦時針對第 一道驗證攻擊的攻擊結果

一道驗證攻擊的攻擊結果一道驗證攻擊的攻擊結果 一道驗證攻擊的攻擊結果

成功防禦針對第一 成功防禦針對第一 成功防禦針對第一 成功防禦針對第一

與多輸入組合參數 與多輸入組合參數 與多輸入組合參數 與多輸入組合參數

第二道驗證的語法結合了跨頁與多輸入組合

,靜態分析僅限於 指令在同一頁中隨意組合或是單

一輸入參數的情況,所以無法阻擋這類利用應用程 式中的多輸入組合型參數或是跨頁組合

的攻擊(圖 13),而我們改良的系統考慮到了這一點 因此能夠成功地防禦發生於跨頁或多輸入組合參 數的 SQL 指令植入式攻擊,結果如圖

圖 圖 圖

圖 13 實作範例實作範例實作範例實作範例(Login form) 攻擊成功攻擊成功 攻擊成功攻擊成功

圖 圖 圖

圖 14 實作範例實作範例實作範例實作範例(Login form) 道驗證的攻擊結果 道驗證的攻擊結果 道驗證的攻擊結果 道驗證的攻擊結果 4.3

討論 討論 討論 討論

由 4.2 節的驗證結果可以 析對使用者輸入參數收集足夠的資訊 次性傳遞參數組合後會對應到

分,則在動態分析的時候,不論是一般的 植入式攻擊,還是跨頁式或組合式的 式攻擊,都能夠成功進行防護

的系統,不需要更動網頁應用程式原始碼 在 Tomcat 的 web.xml 之中設定好就可以使用了

5. 結論與未來工作 結論與未來工作 結論與未來工作 結論與未來工作

SQL 指令植入式攻擊的問題雖然已經存在許 久,防治的方式除了加強程式設計人員對於如何寫 出強健(Robust)的程式碼及上線前的原始碼檢測外 在 網頁伺 服器系 統中加 上防 禦系統 也是一 種方 法。

我們的方法延續[1]之特點 做靜態分析,以取得必須過濾的參數 伺服器接收參數時接收參數,

得的參數資訊進行分析,除了能夠防止伺服器回傳 的錯誤訊息導致資訊洩漏的風險

的時間消耗,同時也參考了整段

除此之外,我們考慮到了發生於跨頁組合 令與多輸入組合參數的攻擊。

我們的檢查方法不論網頁 種語言撰寫皆能夠防禦,但是

所以無法阻擋這類利用應用程 式中的多輸入組合型參數或是跨頁組合 SQL 指令 而我們改良的系統考慮到了這一點,

因此能夠成功地防禦發生於跨頁或多輸入組合參 結果如圖 14。

(Login form) -- 使用使用使用[1]的系統會讓使用 的系統會讓的系統會讓的系統會讓 攻擊成功攻擊成功

攻擊成功攻擊成功

(Login form) --成功防禦針對第二成功防禦針對第二成功防禦針對第二成功防禦針對第二 道驗證的攻擊結果

道驗證的攻擊結果 道驗證的攻擊結果 道驗證的攻擊結果

的驗證結果可以得知,若是於靜態分 析對使用者輸入參數收集足夠的資訊,例如:非一 次性傳遞參數組合後會對應到 SQL 指令中的哪部 不論是一般的 SQL 指令 還是跨頁式或組合式的 SQL 指令植入 能夠成功進行防護。另外我們實作出來 網頁應用程式原始碼,只需要 之中設定好就可以使用了。

指令植入式攻擊的問題雖然已經存在許 防治的方式除了加強程式設計人員對於如何寫

的程式碼及上線前的原始碼檢測外,

在 網頁伺 服器系 統中加 上防 禦系統 也是一 種方

特點,於網站上線前事先 以取得必須過濾的參數,然後在網頁

,並根據靜態分析時取 除了能夠防止伺服器回傳 的錯誤訊息導致資訊洩漏的風險,也能減少執行時 了整段 SQL 指令的語意。

考慮到了發生於跨頁組合 SQL 指

網頁應用程式是使用何 但是目前實作的系統僅能

(7)

在 Tomcat 上執行,以及針對 JSP 撰寫的網頁應用 程式做檢查,未來希望能夠擴展成能夠相容於各種 不同的網頁伺服器(例如:IIS、Apache)以及偵測不 同語言(例如:PHP 或 ASP)所撰寫的網頁原始碼。

另外在靜態分析中,希望未來能夠加入檢查會受程 式流程影響而改變的 SQL 指令,並於動態分析時 依據條件式檢查,以及能夠考慮網頁應用程式原始 碼內用來處理使用者輸入的較複雜函式。

在我們的防禦架構中,靜態分析的部分是離線 運作,所以不會影響到系統上線運作時的效能;而 動態分析部分在目前利用 Apache Tomcat 為平台的 實驗系統中,是由增加附加元件的方式完成,當使 用者的輸入與形成 SQL 指令有關時,即會驅動相 關的運算,這個部分會增加系統的運算量,所增加 的運算量的多寡與 SQL 指令形成的複雜度有關。

然而考慮系統效能的影響大時,我們可以採用不同 的實作平台,將動態分析過濾的功能與網頁伺服器 分開。這方面的實作方法,也是我們未來研究的目 標。

參考文獻 參考文獻 參考文獻 參考文獻

[1] 吳靜茹,「以合理輸入值為基礎之 SQL 指令植 入式攻擊防禦」,中原大學研究所,碩士論文,

中華民國九十八年七月。

[2] Justin Clarke, Rodrigo Macros Alvarez, Dave Hartley, Joseph Hemler, Alexander Kornbrust, Haroon Meer, Gary O’Leary-Steele, Alberto Revelli, Marco Slaviero, Dafydd Stuttard. "SQL Injection Attacks and Defense", Burlington, MA:

Syngress Pub., 2009 [3] OWASP Top Ten Project.

https://www.owasp.org/index.php/Top_10 [4] V. Benjamin Livshits and Monica S. Lam.

"Finding Security Vulnerabilities in Java Applications with Static Analysis" In Proceedings of the 14th conference on USENIX Security Symposium, pages 271-286, Aug.

2005.

[5] G. T. Buehrer, B. W. Weide, and P. A. Sivilotti.

“Using parse tree validation to prevent SQL injection attacks.” In Proceedings of the International Workshop on Software Engineering and Middleware at Joint FSE and ESEC, pages 106–113, Sept. 2005.

[6] R. Ezumalai, G. Aghila. "Combinatorial Approach for Preventing SQL Injection Attacks", In Proceedings of IEEE Int’l Advance Computing Conference, pages 1212-1217, March. 2009.

[7] W.G. Halfond and A. Orso. “AMNESIA:

Analysis and Monitoring for Neutralizing SQL-Injection Attacks.” In Proc. 20th IEEE and ACM Int’ l Conf. Automated Software Eng., pages 174-183. Nov. 2005.

[8] W. G. Halfond, J. Viegas, and A. Orso. “A

Classification of SQL-Injection Attacks and Countermeasures.” In Proc. IEEE Int’l Symposium on Secure Software Engineering, Mar. 2006.

[9] W. Halfond, A. Orso, and P. Manolios. “WASP:

Protecting Web applications using positive tainting and syntax-aware evaluation.” IEEE TSE, 34(1):65, 2008.

[10] Yao-Wen Huang, Shih-Kun Huang, Tsung-Po Lin and Chung-Hung Tsai. "Web Application Security Assessment by Fault Injection and Behavior Monitoring" In Proceedings of the 12th international conference on World Wide Web, pages 148-159, 2003.

[11] Konstantinos Kemalis and Theodores Tzouramanis. “SQL-IDS: a specification-based approach for SQL-injection detection.” In Proceedings of the 2008 ACM symposium on Applied computing, pages 2153-2158, 2008.TSE, 34(1):65, 2008.

[12] Yuji Kosuga, Kenji Kono, Miyuki Hanaoka, Miho Hishiyama, Yu Takahama. "Sania:

Syntactic and Semantic Analysis for Automated Testing against SQL Injection", In Proceedings of 23thAnnual Computer Security Applications Conference, pages 107-117, Dec. 2007.

[13] Anyi Liu, Yi Yuan, Duminda Wijesekera, Angelos Stavrou. "SQLProb: A Proxy-based Architecture towards Preventing SQL Injection Attacks", In Proceedings of the ACM symposium on Applied Computing,pages 2054-2061, Mar. 2009.

[14] Hossain Shahriar and Mohammad Zulkernine.

"MUSIC: Mutation-based SQL Injection Vulnerability Checking.", In Proc. The 8th International Conference on Quality Software, pages 77-86, Aug. 2008.

[15] G. Wassermann and Z. Su. "The Essence of Command Injection Attacks in Web Applications” In proceedings of The 33rd Annual ACM SIGPLAN - SIGACT Symposium on Principles of Programming Languages, pages 372-382, Jan. 2006.

參考文獻

相關文件

手機會使用 eclipse 開發一套 Android 系統配合 arduino 三軸的 APP,其功能會 有連接 arduino 藍芽模組的按鈕,按下按鈕,將可與 arduino

(10 分)試說明 Linux 系統的使用者介面中「指令介面(command line interface)」與「圖形介面. (graphical user

RiOs 是生產第三型 (Type III)純水的純水系統。Elix Essential 是生產第二型 (Type II)純水的純水系統。如果安裝有純水儲水桶,產水可儲存在純水儲水桶中。. 總而言之,Elix

平台操作 題庫內容 教師使用

‡ RFID 運作原理是透過一片小型硬體的無線射頻辨識技 術晶片( RFID chips),利用內含的天線來傳送與接

 提高業主、物業管理人及 用戶對妥善保養內部水管 系統的重要性,以及在內 部水管系統中使用合規格

銀行 A 提供年利率 7%的七年期貸款 銀行 B 提供年利率 8%的八年期貸款 銀行 C 提供年利率 9%的九年期貸款 銀行 D 提供年利率

定期更新作業系統 定期更新作業系統,修 正系統漏洞,避免受到