首頁 -> 安全研究

安全研究

安全公告
綠盟科技安全公告(SA00-01)

NSFOCUS安全小組([email protected])
http://www.nsfocus.com

國內電子商務站點存在嚴重安全隱患

發布日期:2000-03-31


受影響的軟件及系統:
====================
ASP、PHP、Perl
--Microsoft SQL Server
--MySql
--Sybase

綜述:
======
  隨著國內電子商務的逐漸升溫,網上交易的安全性問題日益引起關注。中國互聯網中心(CNNIC)于一月十八日發布的《中國互聯網絡發展狀況統計報告》中關于電子商務的調查結果表明,目前用戶最關心的問題就是網上交易的安全問題。由此可見,電子商務能否在國內順利發展,其重要前提就是網上交易的安全性必須得到保證。
    近日發現,國內90%以上的電子商務站點存在一些具有普遍性的嚴重安全漏洞,攻擊者可以輕易盜取用戶帳號、交易密碼,并可使用用戶資金進行網上交易。這些安全漏洞將直接影響電子商務站點的信譽,對國內電子商務的發展進程將產生重大影響。目前,“中聯綠盟”已經協助多家電子商務網站成功解決了這些安全問題。由于最近又有多家電子商務網站遭受到這種攻擊,導致數據庫資料受損或丟失,“中聯綠盟”特就此發布安全公告。鑒于這些攻擊可能對網站造成嚴重影響,本安全公告不公布具體的攻擊細節。

分析:
======
 以下是對目前國內電子商務站點普遍存在的幾個嚴重的安全問題的一些分析。

1、 客戶端數據的完整性和有效性檢查

1.1、特殊字符的過濾
在 W3C 的 WWW Security FAQ 中關于CGI安全編程一節里列出了建議過濾的字符:

&;`'\"|*?~<>^()[]{}$\n\r

    這些字符由于在不同的系統或運行環境中會具有特殊意義,如變量定義/賦值/取值、非顯示字符、運行外部程序等,而被列為危險字符。W3C組織強烈建議完全過濾這些特殊字符。但在許多編程語言、開發軟件工具、數據庫甚至操作系統中遺漏其中某些特殊字符的情況時常出現,從而導致出現帶有普遍性的安全問題。

1.1.1、CGI和Script編程語言的問題
    在幾種國內常見的WEB編程語言中,ASP和Cold Fusion 腳本語言對特殊字符的過濾機制不夠完善,例如沒有對單引號做任何處理等。Perl和php對特殊字符的過濾則較為嚴密,如忽略或加上“\”(取消特殊字符含義)處理。C語言編寫的cgi程序對特殊字符的過濾完全依賴于程序員的知識和技術,因此也可能存在安全問題。

1.1.2、Microsoft ASP腳本
    普遍存在的問題是程序員在編寫ASP腳本時,缺少或沒有對客戶端輸入的數據/變量進行嚴格的合法性分析。無意或有意輸入的特殊字符可能由于其特殊含義改變了腳本程序,從而使腳本運行出錯或執行非法操作。例如,當腳本程序需要進行數據庫操作時,惡意用戶可以利用嵌入特殊字符來突破腳本程序原先的限制。
    因此,如果攻擊者輸入某些特定sql語句,可能造成數據庫資料丟失/泄漏/甚至威脅整個站點的安全。比如攻擊者可以任意創建或者刪除表(如果可以猜測出已存在的表名),清除或者更改數據庫數據。攻擊者也可能通過執行一些儲存過程函數,將sql語句的輸出結果通過電子郵件發送給自己,或者執行系統命令。

1.1.3、PHP和Perl
    雖然提供了加上”\”(取消特殊字符含義)處理的手段,但是處理一些數據庫時依然可以被改寫。(我們本地的測試證實了這情況。)請閱讀下面關于數據庫問題的分析。對于MySQL則沒有問題,\'不會與前面的單引號封閉,而當作一個合法的字符處理。針對oracle和informix等數據庫暫時未進行相關測試。
    另外,對于PHP或者Perl語言,很多程序對于數字類型的輸入變量,沒有加單引號予以保護,攻擊者就有可能在這種變量中加入額外的SQL語句,來攻擊數據庫或者獲得非法控制權限。

1.2、數據庫問題
    不同的數據庫對安全機制的不同認識和實現方法,使它們的安全性也有所不同。最常見的問題是利用數據庫對某些字符的不正確解釋,改寫被執行的SQL語句,從而非法獲得訪問權限。例如,Microsoft SQL Server和Sybase對 \'當作了兩個不同字符,所以僅僅在程序中加上”\”仍然可能通
過一些特殊手段改寫 SQL語句突破數據庫的安全防線。Microsoft SQL Server也將”—“作為注釋符號,這個符號以后的SQL語句均被忽略,攻擊者可能利用這個來屏蔽掉某些用來認證的SQL語句(例如口令驗證),獲得對合法用戶帳號的控制權。MySQL則將\'作為一個可操作的正常字符,不存在利用\'改寫的可能。其它數據庫如Oracle、Informix和MiniSQL等也必須注意防止各種改寫SQL語句的可能。

(注:另外,迄今為止,各種數據庫都或多或少地被發現存在不同程度上的安全漏洞。如Microsoft SQL拒絕服務漏洞,MySQL GRANT權限可改變任意用戶口令的漏洞,MySQL 遠程繞過口令限制的漏洞,MiniSQL遠程緩沖區溢出漏洞,Oracle Web Listener 非授權訪問漏洞,
Oracle dbsnmp符號連接漏洞,Sybase PowerDynamo目錄遍歷漏洞,等等。由于數據庫數據資料是電子商務網站的最重要部份,關系到電子商務網站的生死存亡,因此修補各種安全漏洞,保證數據庫免受各種攻擊,是絕對必要的!
聲明:本次安全公告不包含以上漏洞的內容。如有需要請向“綠盟科技”咨詢詳細資料。)


2、 Cookie或用戶身份的常用認證問題
    對于一個網站會員而言,經常存在需要一次注冊,多次認證的問題,一般采用手段為cookie或input type=hidden來傳遞認證參數。這里面有幾點隱患:

    I.    所攜帶內容必須完整包含帳號密碼,或類似的完整安全信息,如果只攜帶帳號信息或用某種權限標志來認證,極容易造成非法入侵,我們檢測了一些電子商務網站,很多都有此類安全隱患。例如某站點中的會員更新頁面中攜帶的認證信息是兩個,用戶名和Uid(均為明文傳送)已知Uid對于每個會員是唯一的。由于我們只需要知道對方的帳號和Uid就可以更改對方信息(不需要知道密碼?。?,只要攻擊者知道Uid(攻擊者可以通過暴力猜測的方法來得到Uid,有時候站點本身也會泄露用戶的Uid,例如在論壇等處)那么,攻擊者就可以通過遍歷攻擊完成對任意一個帳號的信息更改。

    II.    必須所有需要權限操作的頁面都必須執行認證判斷的操作。如果任何一頁沒有進行這種認證判斷,都有可能給攻擊者以惡意入侵的機會。

    III.  很多網站為了方便,將用戶名以及口令信息儲存在Cookie中,有的甚至以明文方式保存口令。如果攻擊者可以訪問到用戶的主機,就可能通過保存的Cookie文件得到用戶名和口令。

3、 大量數據查詢導致拒絕服務
    許多網站對用戶輸入內容的判斷在前臺,用JavaScript判斷,如果用戶繞過前臺判斷,就能對數據庫進行全查詢,如果數據庫比較龐大,會耗費大量系統資源,如果同時進行大量的這種查詢操作,就會有Denial of Service(DoS —— 拒絕服務)同樣的效果。

解決方法:
==========
1、客戶端數據完整性和有效性檢查的解決辦法
    根據目前國內電子商務網站普遍存在的安全問題,主要的原因是未對某些特殊字符——例如單引號(’)進行過濾,或過濾機制不夠完善。因此較為根本的解決方法是加強過濾機制,對用戶輸入數據進行全面的檢查。以對ASP + Microsoft SQL Server類型的網站危害比較大的單引號(’)為例。目前可以肯定的是僅僅通過加上”\”或雙引號處理是不健全的,必須杜絕單引號在處理程序的SQL語句中出現。

    I.    對于從客戶端接收的數據變量應該用"’"(單引號)來引用;
    II.   對用戶輸入的所有數據進行合法性檢查(盡可能放在后臺校驗),包括數據長度和數據內容,將其中的特殊意義字符替換或不予往下執行。例如,將"’"替換成"’’" (兩個單引號)號或用雙字節中文單引號替換;而對于數字型變量,要檢查輸入的數據是否全為數字。
    III.  對象數據庫不使用系統默認的dbo用戶。并盡量減少新增用戶的權限;

以ASP為例,具體的實現可以通過函數Replace函數來實現,如:

<%
username=Replace(trim(Request.Form(“username”)),”’”,”’”)
password=Replace(trim(Request.Form(“password”)) ,”’”,”’”)
%>
以上例子將變量username與password中的字符”’”(單引號)替換成雙字節中文單引號。

如希望用戶能使用單字節單引號”’”,可參考使用如下函數:
<%
function CheckStr(str)
dim tstr,l,i,ch
    l=len(str)
    for i=1 to l
        ch=mid(str,i,1)
        if ch="’" then
           tstr=tstr+"’"
        end if
        tstr=tstr+ch
    next
    CheckStr=tstr
end function
%>


該函數將需要校驗的數據中的單字節單引號后添加了"’",這樣,送入SQL中的"’"就變成了"’’",當輸出該字段數據時,該項內容中的"’’"輸出為"’"。對于其他的CGI編程語言,可以參照上述方法的思路進行處理。

2、 Cookie或用戶身份的常用認證問題的解決辦法
    由于session (會話)機制主要由服務器控制,比利用cookie傳遞認證參數更為安全可靠,因此可使用session會話取代cookie認證。如果必須使用Cookie傳遞參數,必須將參數內容進行加密,并正確設置Cookie的有效時間。

3、 大量數據查詢導致拒絕服務的解決辦法
    為了安全起見,應該將可能導致出現這種拒絕服務攻擊的Javascript移植到由服務器端執行,防止客戶端向服務器提交過量的數據庫操作。

4、 若對本次安全公告有不明之處,請與我們聯系獲得進一步的幫助。鑒于此漏洞的嚴重性,我們將向國內站點提供解決這個安全問題的免費技術支持。


特別感謝:清華isme工作組

聲 明
==========

本安全公告僅用來描述可能存在的安全問題,綠盟科技不為此安全公告提供任何保證或承諾。由于傳播、利用此安全公告所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,綠盟科技以及安全公告作者不為此承擔任何責任。綠盟科技擁有對此安全公告的修改和解釋權。如欲轉載或傳播此安全公告,必須保證此安全公告的完整性,包括版權聲明等全部內容。未經綠盟科技允許,不得任意修改或者增減此安全公告內容,不得以任何方式將其用于商業目的。

關于綠盟科技
============

綠盟科技(NSFOCUS Co., Ltd.)是中國網絡安全領域的領導企業,致力于網絡和系統安全問題的研究、高端網絡安全產品的研發、銷售與網絡安全服務,在入侵檢測/保護、遠程評估、 DDoS攻擊防護等方面提供具有國際競爭能力的先進產品,是國內最具安全服務經驗的專業公司。有關綠盟科技的詳情請參見: http://www.nsfocus.com

© 2020 綠盟科技
浙江快乐彩网上投注