如何使Web更安全
如何使Web 更安全?陜西省數(shù)字證書認證中心第 1 頁 共 5 頁 ,如何使Web 更安全在某種程度上我們可以說,沒有Web ,就沒有Internet ??墒窃诖蟛糠智闆r下
如何使Web 更安全?
陜西省數(shù)字證書認證中心
第 1 頁 共 5 頁
,如何使Web 更安全
在某種程度上我們可以說,沒有Web ,就沒有Internet ??墒窃诖蟛糠智闆r下,Web 應用程序及 Web 站點往往易遭受到各種各樣的攻擊,Web 數(shù)據(jù)在網(wǎng)絡傳輸過程中也很容易被竊取或盜用。因此如何能夠使Web 及數(shù)據(jù)傳輸更加安全,是一個應該引起廣泛注意地問題。
從總體情況來看,保護Web 站點免受攻擊的最重要的措施就是加強安全意識和提高安全防范措施。
一般情況下,攻擊者攻擊Web 的主要目的在于:
1、非法偷窺;
2、偽裝成Web 站點的合法訪問者;
3、偽裝成Web 站點管理員;
4、試圖控制Web 站點主機。
一、 非法偷窺
阻止Web 攻擊者監(jiān)聽行為的最有效方法就是要對Web 站點和訪問者之間所建立的連接進行有效加密。幾乎所有的Web 瀏覽器和服務器都具備發(fā)送和接收加密通道上的數(shù)據(jù)的能力,這些加密數(shù)據(jù)被SSL 和TLS 這兩個相關(guān)的協(xié)議管理。其中SSL 由Netscape 產(chǎn)生,TLS 與SSL3.0兼容。
Web 瀏覽器在連接一般的WEB 站點通常使用的是HTTP (超文本傳輸協(xié)議),地址欄中URL 一般形式為 http://www.somewhere.com。而當Web 瀏覽器連接到一個安全站點時,瀏覽器將使用HTTPS (超文本安全傳輸協(xié)議) 來建立一個加密連接,地址欄中的URL 通常的形式為https://www.somewhere.com
為了建立一個安全連接,Web 瀏覽器需要首先向Web 服務器請求數(shù)字證書,數(shù)字證書提供了身份證明。瀏覽器在向Web 服務器請求它的數(shù)字證書時,也同時發(fā)送了它所支持的加密算法列表。當服務器回送數(shù)字證書和它所選擇的加密算法后,瀏覽器通過檢查數(shù)字簽名和確認URL 是否與數(shù)字證明的公有名字域相匹配來驗證數(shù)字證書。如過這些測試失敗,瀏覽器將顯示警告信息。
瀏覽器和服務器的通訊使用對稱加密。這就意味著使用相同的密鑰來進行加密和解密。當服務器的證書被證實后,瀏覽器將產(chǎn)生一個密鑰,這個密鑰需要通過一個安全的途徑傳遞給服務器。一般使用雙重加密術(shù)來完成密鑰的傳遞。瀏覽器使用服務器的公鑰來加密密鑰,然后把它傳遞給服務器。服務器使用它的私鑰來解密密鑰然后向瀏覽器發(fā)送確認。
上面的過程表明的就是一個加密連接,瀏覽器和服務器都擁有相同的密鑰,他們使用相同的加密算法。他們后面的通信將使用這個加密的連接。瀏覽器顯示一個黃色的鎖的圖標表示連接已建立。如圖3所示,站點訪問者可以點擊黃色的圖標來檢查服務器的證書,從
第 2 頁 共 5 頁
,而核實服務器的身份。
建立一個加密連接,僅需要服務器獲得權(quán)威機構(gòu)(如VeriSign )頒發(fā)的證書。但是加密僅能阻止攻擊者看到站點發(fā)送
和接收的數(shù)據(jù),它并不能阻止攻擊者偽造身份和對站點進行的惡意攻擊。
二、偽裝成Web 站點的合法訪問者
現(xiàn)在我們已經(jīng)知道如何鑒別一個Web 站點,但是一個站點如何鑒別它的訪問者呢?下面我們就接著討論這個問題。
大部分Web 服務器支持兩個密碼鑒別方案:基本密碼鑒別和分類密碼鑒別。兩個方案都通過向瀏覽器發(fā)送鑒別信號來進
行。當瀏覽器第一次收到鑒別信號時,它顯示一個對話框詢問用戶的名字和密碼。在基本鑒別模式中,瀏覽器以簡單的文
本形式來傳遞用戶名和密碼。在分類鑒別模式中,瀏覽器傳送用戶名和密碼的消息類。如果服務器發(fā)送它的證實,瀏覽器
就把登錄信息存儲起來。
如果你用Web 服務器上的簡單設(shè)置來實現(xiàn)這些鑒定方案,Web 應用程序中不需要添加任何代碼。
攻擊者的監(jiān)聽問題:如果訪問者以簡單的文本形式發(fā)送他的用戶名和密碼,攻擊者很容易就可捕獲到這些信息。傳送
用戶信息使用SSL 可以很容易地解決這個問題。如下面的例子所示。
User ID: < input type="text" name="user" >
Password: < input type="password" name="password">
如果攻擊者不能監(jiān)聽Web 站點和訪問者之間的通信,他將要采取更加卑劣的手段——偽裝成你的合法訪問者。造成這種
情況出現(xiàn)的原因一般是訪問者自己造成的,因為大部分網(wǎng)絡用戶在密碼選取上不是很留心,他們的密碼一般都不是很安
全。他們在登錄各個站點時,喜歡使用相同的用戶名和密碼。
解決這個問題的方法就是訪問者在注冊帳號時要使用安全的密碼。Web 站點最好具有能阻止訪問者設(shè)置英文單詞作為密
碼的功能,它可以建議用戶使用數(shù)字和字母混合而成的密碼。
三、偽裝成Web 站點管理員
當訪問者登錄到你的站點時,你將會保持他們的身份一直有效,直到他們離開該站
第 3 頁 共 5 頁
,點。那么如何實現(xiàn)這個功能呢?因
為在瀏覽器和服務器之間不會建立一個永久的連接,所以服務器會在收到每個頁面請求后只建立一個單獨的連接。
用戶登錄成功后服務器是如何證實該用戶的身份呢?
答案是瀏覽器保存了用戶的姓名和密碼。當瀏覽器和服務器再次連接時,瀏覽器將傳遞已經(jīng)存儲過的用戶名和密碼。
服務器利用用戶數(shù)據(jù)庫來證實這些信息,并會在此基礎(chǔ)上作出允許和拒絕訪問的決定。
前面我們提到過,瀏覽器通過比較帶有服務器的數(shù)字證書的公有名字的URL 來證實服務器的身份。這是一個很好的Web
安全防范措施。但是它不能避免所有的偽裝服務器的攻擊。
域名服務系統(tǒng)(DNS )可把易讀的網(wǎng)址(例如www.yourunit.com )解析為IP 地址,在你的安全鏈接中它是一個易遭受攻
擊的鏈接。如果攻擊者訪問了一個DNS 服務器,并且修改了指向他的機器的記錄,那么這個機器就可以把所有來自
www.yourunit.com 站點的請求全部重定向到www.attacker.com. 。在重定向中,訪問者的瀏覽器將顯示默認的地址后綴。如
果字符串很長,使www.attacker.com 不在視野之內(nèi),大部分訪問者都不會注意到。
如果攻擊者得到VeriSign 為www.attacker.com 頒發(fā)的數(shù)字證書,那么訪問者的瀏覽器將和www.attacker.com 建立合法
的連接。如果訪問者不檢查數(shù)字證書,他不會知道自己在一個黑客站點上。如果攻擊者把他的站點偽裝成為和
www.attacker.com 的登錄界面一樣的話,他就能捕獲到該客戶的銀行信用卡帳號。
四、試圖控制Web 站點主機
一些攻擊利用web 服務器上運行的軟件的漏洞來讓服務器執(zhí)行攻擊者的代碼。一類臭名昭著的攻擊方法就是向緩存寫入大量的數(shù)據(jù)從而使緩存器崩潰。下面所摘錄的一段C 代碼就很容易受到這樣的攻擊,因為它沒有邊界檢查。
void ByYourCommand( char* pszData )
{ char szBuffer[ 255];
strcpy( szBuffer, pszData ); ...}
如果執(zhí)行strcpy()過程使堆棧溢出,將會產(chǎn)生什么結(jié)果呢?圖4向你展示了系統(tǒng)堆棧溢出后的情況。如果攻擊者在緩存中寫入了太多的數(shù)據(jù),它將覆蓋函數(shù)調(diào)用記錄。這是一個數(shù)據(jù)結(jié)構(gòu),它包含了保存函數(shù)入口代碼的寄存器,還有函數(shù)的返回地址。如果攻擊者的代碼覆蓋了函數(shù)的返回地址,攻擊者就可以在你的計算機上執(zhí)行任何代碼。
攻擊者是如何把他的攻擊代碼移植到你的電腦上的呢?他使用的方法就是把代碼
第 4 頁 共 5 頁
,寫進數(shù)據(jù)緩存,傳遞這個例子函數(shù)的字符串很容易感染上“特洛伊木馬”這樣的黑客程序。有許多文章已經(jīng)介紹過這類的攻擊方式。
黑客知道易攻擊的函數(shù)(例如上面所舉的函數(shù)例子)通常易被回應用戶輸入的代碼所調(diào)用。攻擊者發(fā)送一個不可能的長字符串給服務器。如果緩存溢出,處理他的請求的線程將崩潰。攻擊者得到HTTP 超時的消息提示就表明請求線程已被破壞。
如何阻止你Web 站點的應用程序被利用呢?首先,給系統(tǒng)軟件添加最新的安全補丁。然后,檢查使用允許直接訪問內(nèi)存的語言(例如:C 、C 和Delphi )編寫的程序代碼,看是否有安全漏洞。
檢查代碼可以給你無盡的信心,因為你可以發(fā)現(xiàn)一個應用程序并不是很容易就受到緩存溢出這樣的攻擊的。如果你要完全避免這樣的問題,只能不使用直接訪問內(nèi)存的語言來編寫代碼。你可以使用一些腳本語言(例如:JavaScript 、Perl )或使用解釋性的語言(例如Java )。如果使用安全的語言來編寫代碼,Web 站點的操作員就可以被解放出來,不用天天擔心緩存溢出這樣的安全攻擊。
另外,你也不要盲目地相信各種安全技術(shù),廠商雖然為了推銷自己的產(chǎn)品而做出了很好的安全質(zhì)量承諾,但是你要知道沒有任何技術(shù)能夠保證你的Web 不遭受攻擊。所以你需要一定的時間和精力去研究和發(fā)現(xiàn)Web 的缺點,然后找出解決問題的方法。
Web 的安全性問題非常復雜,范圍很廣,在本文中,我們只是從外部的攻擊角度出發(fā),討論了如何避免Web 應用程序和Web 數(shù)據(jù)遭到破壞和竊取,來防止非法用戶對Web 應用程序的越權(quán)訪問,提高Web 站點的安全性。
第 5 頁 共 5 頁