史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 程式 & 網頁設計技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2005-12-27, 11:01 AM   #1 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 SQL注入和CSS攻擊的檢測

1. 介紹
在 最後兩年中,安全專家應該對網路套用層的攻擊更加重視。因為無論你有多強壯的防火牆規則設定或者非常勤於補漏的修補機制,如果你的網路應用程式開發者沒有 遵循安全程式碼進行開發,攻擊者將通過80連接阜進入你的系統。



廣泛被使用的兩個主要攻擊技術是SQL注入[ref 1] 和CSS[ref 2] 攻擊。SQL注入是指:通過網際網路的輸入區域,插入SQL meta-characters(特殊字元 代表一些資料)和指令,操縱執行後端的SQL查詢的技術。這些攻擊主要針對其他組織的WEB伺服器。



CSS攻擊通過在URL裡插入script標籤,然後 誘導信任它們的用戶點擊它們,確保惡意Javascript程式碼在受害人的電腦上執行。這些攻擊利用了用戶和伺服器之間的信任關係,事實上伺服器沒有對輸 入、輸出進行檢測,從而未
拒絕javascript程式碼。

這篇文章討論SQL注入和CSS攻擊漏洞的檢測技術。網上已經有很多關 於這兩種關於WEB攻擊的討論,比如如何實施攻擊,他們的影響,怎樣更好的編制和設計程序防止這些攻擊。 然而, 對如何檢測這些攻擊並沒有足夠的討論。


我們採用流行的開源的IDS Snort[ref 3],組建根據檢測這些攻擊的規則的正則陳述式。 附帶,Snort預設規則設定包含檢測CSS的方法,但是這些容易被避開檢測。比如大多通過hex進制編碼,如%3C%73%63%72%69%70% 74%3E替代<script>避開檢測。

依賴level of paranoia組織的能力,我們已經編寫了多種檢測相同攻擊的規則。如果你希望檢測各種可能的SQL注入攻擊,那麼你需要簡單的留意任何現行的SQL meta-characters,如單引號,分號和雙重破折號。



同樣的一個極端檢測CSS攻擊的方法,只要簡單地提防HTML標記的角括號。但這樣會檢測 出很多錯誤。為了避免這些,這些規則需要修改使它檢測更精確些, 當仍然不能避免錯誤。

在Snort規則中使用pcre(Perl Compatible Regular Expressions)關鍵字,每個規則可以帶或不帶其他規則動作。這些規則也可以被公用軟體如grep(文件搜尋工具)使用,來審閱網路伺服器日誌。


但是,需要警惕的是,用戶的輸入只有當以GET提交請求時,WEB伺服器才會記錄日誌,如果是以POST提交的請求在日誌中是不會記錄的。

2. SQL注入的正則表示式
當 你為SQL注入攻擊選項正則表示式的時候,重點要記住攻擊者可以通過提交表單進行SQL注入,也可以通過Cookie區域。你的輸入檢測邏輯應該考慮用戶 組織的各檔案類型輸入(比如表單或Cookie訊息)。


並且如果你發現許多警告來自一個規則,請留意單引號或者是分號,也許些字元是你的Web應用程式創造的 合法的在CookieS中的輸入。因此, 您需要根據你的特殊的WEB應用程式評估每個規則。

依照前面提到,一個瑣細的檢測SQL射入攻擊的正則陳述式要留意SQL特殊的meta-characters 譬如單引號(')雙重擴則號(--),為了查出這些字元和他們hex等值數, 以下正則陳述式適用:

2.1 檢測SQL meta-characters的正則陳述式
/(\%27)|(\')|(\-\-)|(\%23)|(#)/ix

解釋:
我 們首先檢查單引號等值的hex,單引號本身或者雙重擴折號。這些是MS SQL Server或Oracle的字元, 表示後邊的為評論, 隨後的都將被忽略。 另外,如果你使用MySQL,你需要留意 '#'和它等值的hex的出現。



注意我們不需要檢查雙重破折號等值的hex, 因為這不是HTML meta-character, 瀏覽器不會進行編碼。 並且, 如果攻擊者設法手動式修改雙重破折號為它的hex值%2D(使用代理像Achilles[ref 5]), SQL注入將失敗。
加入上述正則陳述式的新的Snort規則如下:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"SQL Injection - Paranoid"; flow:to_server,established;uricontent:".pl";pcre:"/(\%27)|(\')|(\-\-)|(%23)|(#)/i"; classtype:Web-application-attack; sid:9099; rev:5

在本篇討論中, uricontent關鍵字的值為".pl ", 因為在我們的測試環境裡, CGI 程序是用Perl寫的。uricontent關鍵字的值取決於您的特殊套用, 這個值也許是".php ", 或" .asp ", 或" .jsp ", 等。



從這點考慮, 我們不顯示對應的Snort 規則, 但是我們會指出創造這些規則的正則陳述式。 通過這些正則陳述式你可以很簡單的創造很多的Snort規則.在前面的正則陳述式裡, 我們檢測雙重破折號是因為:即便沒有單引號的存在那裡也可能是SQL射入點[ref 6]。 例如, SQL查詢 列項只包含數值,如下:

select value1, value2, num_value3 from database
where num_value3=some_user_supplied_number

這種情況,攻擊者可以執行額外的SQL查詢, 示範提交如下輸入:

3; insert values into some_other_table

最後, pcre的修飾符' i' 和' x ' 是用於分別匹配大小寫和忽略空白處的。



上面的規則也可以另外增強來檢查分號的存在。然而,分號很可以是正常HTTP回應的一部分。為了減少這種錯誤,也是為了任何正常的單引號和雙重擴折號的出

現,上面的規則應該被修改成先檢測=號的存。


用戶輸入會回應一個GET或POST請求,一般輸入提交如下:

username=some_user_supplied_value&password=some_user_supplied_value

因此, SQL 注入嘗試將導致用戶的輸入出現在a = 號或它等效的hex值之後。

2.2 修正檢測SQL meta-characters的正則陳述式

/((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|()/i

解釋:
這個規則首先留意 = 號或它的hex值(%3D),然後考慮零個或多個除換行符以外的任意字元,最後檢測單引號,雙重破折號或分號。

典 型的SQL注入會嘗試圍繞單引號的用途操作原來的查詢,以便得到有用的價值。討論這個攻擊一般使用1'or'1'='1字元串. 但是, 這個串的偵查很容易被逃避,譬如用1'or2>1 --. 然而唯一恆定的部分是最初的字元的值,跟隨一單引號,再加'or'。






隨後的布爾邏輯可能在一定範圍上變化,可以是普通樣式也可能是非常複雜的。這些攻擊可 以相當精確被偵測,通過以下的正則陳述式。2.3章節講解。

2.3 典型的 SQL 注入攻擊的正則陳述式

/\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

解釋:
\w* - 零個或多個字元或者底線。
(\%27)|\' - 單引號或它的hex等值。
(\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -『or』的大小寫以及它的hex等值。

'union'SQL 查詢在SQL注入各種資料庫中攻擊中同樣是很一般的。如果前面的正則陳述式僅僅檢測單引號或則其他的SQL meta characters ,會造成很多的錯誤存在。你應該進一步修改查詢,檢測單引號和關鍵字『union』。




這同樣可以進一步增強其他的SQL關鍵字,像'select', 'insert', 'update', 'delete', 等等。

2.4 檢測SQL注入,UNION查詢關鍵字的正則陳述式

/((\%27)|(\'))union/ix

(\%27)|(\') - 單引號和它的hex等值
union - union關鍵字

可以同樣為其他SQL查詢設定陳述式,如 >select, insert, update, delete, drop, 等等.

如 果,到這個階段,攻擊者已經發現web應用程式存在SQL注入漏洞,他將嘗試利用它。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
舊 2005-12-27, 11:03 AM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

如果他認識到後端伺服器式MS SQL server,他一般會嘗試執行一些危險的儲存和增強儲存程序。這些程序一般以『sp』或『xp』字母開頭。典型的,他可能嘗試執行 『xp_cmdshell』增強儲存程序(通過SQL Server執行Windows 指令)。



SQL伺服器的SA權限有執行這些指令的權限。同樣他們可以通過xp_regread, xp_regwrite等儲存程序修改註冊表。

2.5 檢測MS SQL Server SQL注入攻擊的正則陳述式

/exec(\s|\+)+(s|x)p\w+/ix

解釋:
exec - 請求執行儲存或增強儲存程序的關鍵字
(\s|\+)+ - 一個或多個的空白或它們的http等值編碼
(s|x) p- 『sp』或『xp'字母用來辨認儲存或增強儲存程序
\w+ - 一個或多個字元或底線來匹配程序的名稱

3. 跨站指令碼(CSS)的正則陳述式

當 發動CSS攻擊或檢測一個網站漏洞的時候, 攻擊者可能首先使簡單的HTML標籤如<b>(粗體),<i>(斜體)或<u>(底線),或者他可能嘗試簡單的 script標籤如<script>alert("OK")</script>. 因為大多數出版物和網路傳播的檢測網站是否有css漏洞都拿這個作為例子。這些嘗試都可以很簡單的被檢測出來。



然而,高明點的攻擊者可能用它的hex值取代整個字元串。


這樣<script>標籤會以%3C%73%63%72%69%70%74%3E出 現。 另一方面,攻擊者可能使用web代理伺服器像Achilles會自動轉換一些特殊字元如<換成%3C、>換成%3E.這樣攻擊發生時,URL 中通常以hex等值替代角括號。

下列正則陳述式將檢測任何文本中包含的html的<、>。它將捉住試圖使用< b>、<u>、或<script>。這正則陳述式應該忽略大小寫。



我們需要同時檢測角括號和它的hex等值(% 3C|<)。檢測hex進制轉化的整個字元串,我們必須檢測用戶輸入的數位和%號,即使用[a-z0-9%] 。這可能會導致一些錯誤出現,不是大部分會檢測到真實攻擊的。

3.1 一般 CSS 攻擊的正則陳述式

/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/ix

解釋:
((\%3C)|<) -檢查<和它hex等值
((\%2F)|\/)*-結束標籤/或它的 hex等值
[a-z0-9\%]+ -檢查標籤裡的字母或它hex等值
((\%3E)|>) -檢查>或它的hex等值

Snort 規則:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NII Cross-site scripting attempt"; flow:to_server,established; pcre:"/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/i"; classtype:Web-application-attack; sid:9000; rev:5

跨站指令碼同樣可以使用<img src=>技術。現行預設的snort規則可以被輕易避開。

3.2章節提供了防止這種技術的方法。

3.2 "<img src" CSS 攻擊正則陳述式

/((\%3C)|<)((\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47))[^\n]+((\%3E)|>)/I

解釋:
(\%3 C)|<) -<或它的hex等值
(\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47) -'img'字母或它的大小寫hex等值的變化組合
[^\n]+ -除了換行符以外的任何跟隨<img的字元
(\%3E)|>) ->或它的hex等值

3.3 CSS 攻擊的極端的正則陳述式

/((\%3C)|<)[^\n]+((\%3E)|>)/I

解釋:
這個規則簡單尋找<+除換行符外的任何字元+>。由於你的web伺服器和web應用程式的構架,這個規則可能產生一些錯誤。但它能保證捉住任何CCS或者類似CSS的攻擊。

一個不錯避開過濾的CSS方法請參考Bugtraq投稿的
http://www.securityfocus.com/archive...chive/1/272037.
但是請注意最後一種極端的規則將能檢測這所有的攻擊。

總結:

在 這篇文章中,我們提出了不同種類的正則陳述式規則來檢測SQL注入和跨站指令碼攻擊。有些規則簡單而極端,一個潛在的攻擊都將提高警惕。但這些極端的規則可 能導致一些主動的錯誤。考慮到這點,我們修改了這些簡單的規則,利用了另外的樣式,他們可以檢查的更準確些。在這些網路套用成的攻擊檢測中,我們推薦將這 些作為偵錯你IDS或日誌分析方法的起點。再經過幾次修改後,在你對正常網交易部分的非惡意回應進行評估以後,你應該可以準備的檢測那些攻擊了。

參考
1. SQL Injection

http://www.spidynamics.com/papers/SQ...WhitePaper.pdf
2. Cross Site Scripting FAQ http://www.cgisecurity.com/articles/xss-faq.shtml
3. The Snort IDS http://www.snort.org
4. Perl-compatible regular expressions (pcre) http://www.pcre.org
5. Web application proxy, Achilles http://achilles.mavensecurity.com
3. Advanced SQL Injection
http://www.nextgenss.com/papers/adva..._injection.pdf
7. Secure Programming HOWTO, David Wheeler www.dwheeler.com
8. Threats and Countermeasures, MSDN, Microsoft
http://msdn.microsoft.com
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次
向 psac 送花的會員:
longlie (2007-10-21)
感謝您發表一篇好文章
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 01:46 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2021, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1