一、SQL 注入漏洞
SQL 注入攻擊( SQL Injection ),簡稱注入攻擊、SQL 注入,被廣泛用
於非法獲取網站控制權, 是發生在應用程序的數據庫層上的安全漏洞。在設計程序,
忽略了對輸入字符串中夾帶的SQL 指令的檢查,被數據庫誤認為是正常的SQL 指
令而運行,從而使數據庫受到攻擊,可能導致數據被竊取、更改、刪除,以及進一
步導致網站被嵌入惡意代碼、被植入后門程序等危害。
通常情況下, SQL 注入的位置包括:
(1)表單提交,主要是POST 請求,也包括GET 請求;
(2)URL 參數提交,主要為GET 請求參數;
(3)Cookie 參數提交;
(4)HTTP 請求頭部的一些可修改的值,比如Referer 、User_Agent 等;
(5)一些邊緣的輸入點,比如.mp3 文件的一些文件信息等。
SQL 注入的危害不僅體現在數據庫層面上, 還有可能危及承載數據庫的操
作系統;如果SQL 注入被用來掛馬,還可能用來傳播惡意軟件等,這些危害包括但
不局限於:
(1)數據庫信息泄漏:數據庫中存放的用戶的隱私信息的泄露。作為數據
的存儲中心,數據庫里往往保存着各類的隱私信息, SQL 注入攻擊能導致這些隱私
信息透明於攻擊者。
(2)網頁篡改:通過操作數據庫對特定網頁進行篡改。
(3)網站被掛馬,傳播惡意軟件:修改數據庫一些字段的值,嵌入網馬鏈
接,進行掛馬攻擊。
(4)數據庫被惡意操作:數據庫服務器被攻擊,數據庫的系統管理員帳戶
被篡改。
(5)服務器被遠程控制,被安裝后門。經由數據庫服務器提供的操作系統
支持,讓黑客得以修改或控制操作系統。
(6)破壞硬盤數據,癱瘓全系統。
解決SQL 注入問題的關鍵是對所有可能來自用戶輸入的數據進行嚴格的
檢查、對數據庫配置使用最小權限原則。通常使用的方案有:
(1 )所有的查詢語句都使用數據庫提供的參數化查詢接口,參數化的語
句使用參數而不是將用戶輸入變量嵌入到SQL 語句中。當前幾乎所有的數據庫系統
都提供了參數化SQL 語句執行接口,使用此接口可以非常有效的防止SQL 注入攻
擊。
(2 )對進入數據庫的特殊字符( '"\<>&*; 等)進行轉義處理,或編碼轉
換。
(3 )確認每種數據的類型,比如數字型的數據就必須是數字,數據庫中
的存儲字段必須對應為int 型。
(4)數據長度應該嚴格規定,能在一定程度上防止比較長的SQL 注入語
句無法正確執行。
(5)網站每個數據層的編碼統一,建議全部使用UTF-8 編碼,上下層
編碼不一致有可能導致一些過濾模型被繞過。
(6)嚴格限制網站用戶的數據庫的操作權限,給此用戶提供僅僅能夠滿
足其工作的權限,從而最大限度的減少注入攻擊對數據庫的危害。
(7)避免網站顯示SQL 錯誤信息,比如類型錯誤、字段不匹配等,防
止攻擊者利用這些錯誤信息進行一些判斷。
(8)在網站發布之前建議使用一些專業的SQL 注入檢測工具進行檢測,
及時修補這些SQL 注入漏洞。
二、跨站腳本漏洞
跨站腳本攻擊( Cross-site scripting ,通常簡稱為XSS)發生在客戶
端,可被用於進行竊取隱私、釣魚欺騙、竊取密碼、傳播惡意代碼等攻擊。
XSS 攻擊使用到的技術主要為HTML 和Javascript ,也包括VBScript
和ActionScript 等。XSS 攻擊對WEB 服務器雖無直接危害,但是它借助網站進行
傳播,使網站的使用用戶受到攻擊,導致網站用戶帳號被竊取,從而對網站也產生
了較嚴重的危害。
XSS 類型包括:
(1)非持久型跨站: 即反射型跨站腳本漏洞, 是目前最普遍的跨站類型。
跨站代碼一般存在於鏈接中,請求這樣的鏈接時,跨站代碼經過服務端反射回來,
這類跨站的代碼不存儲到服務端(比如數據庫中)。上面章節所舉的例子就是這類
情況。
(2)持久型跨站:這是危害最直接的跨站類型,跨站代碼存儲於服務端
(比如數據庫中)。常見情況是某用戶在論壇發貼,如果論壇沒有過濾用戶輸入的
Javascript 代碼數據,就會導致其他瀏覽此貼的用戶的瀏覽器會執行發貼人所嵌入
的Javascript 代碼。
(3)DOM 跨站(DOM XSS ):是一種發生在客戶端DOM (Document
Object Model 文檔對象模型)中的跨站漏洞,很大原因是因為客戶端腳本處理邏
輯導致的安全問題。
XSS 的危害包括:
(1)釣魚欺騙:最典型的就是利用目標網站的反射型跨站腳本漏洞將目
標網站重定向到釣魚網站,或者注入釣魚JavaScript 以監控目標網站的表單輸入,
甚至發起基於DHTML 更高級的釣魚攻擊方式。
(2 )網站掛馬:跨站時利用IFrame 嵌入隱藏的惡意網站或者將被攻擊
者定向到惡意網站上,或者彈出惡意網站窗口等方式都可以進行掛馬攻擊。
(3)身份盜用: Cookie 是用戶對於特定網站的身份驗證標志, XSS 可
以盜取到用戶的Cookie ,從而利用該Cookie 盜取用戶對該網站的操作權限。如果
一個網站管理員用戶Cookie 被竊取,將會對網站引發巨大的危害。
(4)盜取網站用戶信息:當能夠竊取到用戶Cookie 從而獲取到用戶身
份使,攻擊者可以獲取到用戶對網站的操作權限,從而查看用戶隱私信息。
(5)垃圾信息發送:比如在SNS 社區中,利用XSS 漏洞借用被攻擊者
的身份發送大量的垃圾信息給特定的目標群。
(6)劫持用戶Web 行為:一些高級的XSS 攻擊甚至可以劫持用戶的
Web 行為,監視用戶的瀏覽歷史,發送與接收的數據等等。
(7)XSS 蠕蟲:XSS 蠕蟲可以用來打廣告、刷流量、掛馬、惡作劇、破
壞網上數據、實施DDoS 攻擊等。
常用的防止XSS 技術包括:
(1)與SQL 注入防護的建議一樣,假定所有輸入都是可疑的,必須對
所有輸入中的script 、iframe 等字樣進行嚴格的檢查。這里的輸入不僅僅是用戶可
以直接交互的輸入接口,也包括HTTP 請求中的Cookie 中的變量, HTTP 請求頭
部中的變量等。
(2 )不僅要驗證數據的類型,還要驗證其格式、長度、范圍和內容。
(3)不要僅僅在客戶端做數據的驗證與過濾,關鍵的過濾步驟在服務端
進行。
( 4)對輸出的數據也要檢查, 數據庫里的值有可能會在一個大網站的多
處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點時也要進行安全檢查。
(5)在發布應用程序之前測試所有已知的威脅。
三、弱口令漏洞
弱口令(weak password) 沒有嚴格和准確的定義,通常認為容易被別
人(他們有可能對你很了解)猜測到或被破解工具破解的口令均為弱口令。設置密
碼通常遵循以下原則:
(1)不使用空口令或系統缺省的口令,這些口令眾所周之,為典型的弱
口令。
(2)口令長度不小於8 個字符。
(3)口令不應該為連續的某個字符(例如: AAAAAAAA )或重復某些
字符的組合(例如: tzf.tzf. )。
(4)口令應該為以下四類字符的組合,大寫字母(A-Z) 、小寫字母(a-z) 、
數字(0-9) 和特殊字符。每類字符至少包含一個。如果某類字符只包含一個,那么該
字符不應為首字符或尾字符。
(5)口令中不應包含本人、父母、子女和配偶的姓名和出生日期、紀念
日期、登錄名、E-mail 地址等等與本人有關的信息,以及字典中的單詞。
(6)口令不應該為用數字或符號代替某些字母的單詞。
(7)口令應該易記且可以快速輸入,防止他人從你身后很容易看到你的
輸入。
(8)至少90 天內更換一次口令,防止未被發現的入侵者繼續使用該口
令。
四、HTTP 報頭追蹤漏洞
HTTP/1.1 (RFC2616 )規范定義了HTTP TRACE 方法,主要是用於客
戶端通過向Web 服務器提交TRACE 請求來進行測試或獲得診斷信息。當Web 服
務器啟用TRACE 時,提交的請求頭會在服務器響應的內容(Body )中完整的返回,
其中HTTP 頭很可能包括Session Token 、Cookies 或其它認證信息。攻擊者可以
利用此漏洞來欺騙合法用戶並得到他們的私人信息。該漏洞往往與其它方式配合來
進行有效攻擊,由於HTTP TRACE 請求可以通過客戶瀏覽器腳本發起(如
XMLHttpRequest ),並可以通過DOM 接口來訪問,因此很容易被攻擊者利用。
防御HTTP 報頭追蹤漏洞的方法通常禁用HTTP TRACE 方法。
五、Struts2 遠程命令執行漏洞
Apache Struts 是一款建立Java web 應用程序的開放源代碼架構。
Apache Struts 存在一個輸入過濾錯誤,如果遇到轉換錯誤可被利用注入和執行任
意Java 代碼。
網站存在遠程代碼執行漏洞的大部分原因是由於網站采用了Apache
Struts Xwork 作為網站應用框架,由於該軟件存在遠程代碼執高危漏洞,導致網站
面臨安全風險。CNVD 處置過諸多此類漏洞,例如:“ GPS 車載衛星定位系統”網
站存在遠程命令執行漏洞(CNVD-2012-13934) ;Aspcms 留言本遠程代碼執行漏
洞( CNVD-2012-11590 )等。
修復此類漏洞,只需到Apache 官網升級Apache Struts 到最新版本:
http://struts.apache.org
六、框架釣魚漏洞(框架注入漏洞)
框架注入攻擊是針對Internet Explorer 5 、Internet Explorer 6 、與
Internet Explorer 7 攻擊的一種。這種攻擊導致Internet Explorer 不檢查結果框
架的目的網站,因而允許任意代碼像Javascript 或者VBScript 跨框架存取。這種
攻擊也發生在代碼透過多框架注入,肇因於腳本並不確認來自多框架的輸入。這種
其他形式的框架注入會影響所有的不確認不受信任輸入的各廠商瀏覽器和腳本。
如果應用程序不要求不同的框架互相通信,就可以通過完全刪除框架名
稱、使用匿名框架防止框架注入。但是,因為應用程序通常都要求框架之間相互通
信,因此這種方法並不可行。因此,通常使用命名框架,但在每個會話中使用不同
的框架,並且使用無法預測的名稱。一種可行的方法是在每個基本的框架名稱后附
加用戶的會話令牌,如main_display 。
七、文件上傳漏洞
文件上傳漏洞通常由於網頁代碼中的文件上傳路徑變量過濾不嚴造成
的,如果文件上傳功能實現代碼沒有嚴格限制用戶上傳的文件后綴以及文件類型,
攻擊者可通過Web 訪問的目錄上傳任意文件,包括網站后門文件( webshell ),
進而遠程控制網站服務器。
因此,在開發網站及應用程序過程中,需嚴格限制和校驗上傳的文件,禁
止上傳惡意代碼的文件。同時限制相關目錄的執行權限,防范webshell 攻擊。
八、應用程序測試腳本泄露
由於測試腳本對提交的參數數據缺少充分過濾,遠程攻擊者可以利用洞
以WEB 進程權限在系統上查看任意文件內容。防御此類漏洞通常需嚴格過濾提交
的數據,有效檢測攻擊。
九、私有IP 地址泄露漏洞
IP 地址是網絡用戶的重要標示,是攻擊者進行攻擊前需要了解的。獲取
的方法較多,攻擊者也會因不同的網絡情況采取不同的方法,如:在局域網內使用
Ping 指令, Ping 對方在網絡中的名稱而獲得IP;在Internet 上使用IP 版的QQ
直接顯示。最有效的辦法是截獲並分析對方的網絡數據包。攻擊者可以找到並直接
通過軟件解析截獲后的數據包的IP 包頭信息,再根據這些信息了解具體的IP。
針對最有效的“數據包分析方法”而言,就可以安裝能夠自動去掉發送
數據包包頭IP 信息的一些軟件。不過使用這些軟件有些缺點, 譬如:耗費資源嚴重,
降低計算機性能;訪問一些論壇或者網站時會受影響;不適合網吧用戶使用等等。
現在的個人用戶采用最普及隱藏IP 的方法應該是使用代理,由於使用代理服務器
后,“轉址服務”會對發送出去的數據包有所修改,致使“數據包分析”的方法失
效。一些容易泄漏用戶IP 的網絡軟件(QQ 、MSN 、IE 等)都支持使用代理方式連接
Internet ,特別是QQ 使用“ ezProxy ”等代理軟件連接后, IP 版的QQ 都無法顯
示該IP 地址。雖然代理可以有效地隱藏用戶IP,但攻擊者亦可以繞過代理, 查找到
對方的真實IP 地址,用戶在何種情況下使用何種方法隱藏IP,也要因情況而論。
十、未加密登錄請求
由於Web 配置不安全, 登陸請求把諸如用戶名和密碼等敏感字段未加密
進行傳輸, 攻擊者可以竊聽網絡以劫獲這些敏感信息。建議進行例如SSH 等的加密
后再傳輸。
十一、敏感信息泄露漏洞
SQL 注入、XSS、目錄遍歷、弱口令等均可導致敏感信息泄露,攻擊者可
以通過漏洞獲得敏感信息。針對不同成因,防御方式不同。
