揭秘Web應用服務的四大弱點 |
發布時間: 2012/9/12 15:24:31 |
知己知彼,方能百戰百勝。在提升Web服務安全性的同時,需要先了解Web服務自身的弱點。然后再根據弱點來采取對應的措施。在這篇文章中,筆者就將根據自己的工作經歷,分析一下Web服務的弱點,并且這些弱點是容易被人用來進行攻擊的。相信這些內容對于大家提高Web的安全性會有很大的幫助。 弱點一:不可靠的默認值 在Web應用程序設計時,為了提高用戶的輸入效率,會設置比較多的默認值。但是這些默認值是把雙刃劍。即可以提高用戶輸入的速度,但是也會影響Web應用程序的安全性。舉一個簡單的例子。Web服務器的默認端口是什么?80。正確。這個信息只要稍微有點Web 知識的人都知道。現在的問題是,大家都知道這個信息,那么攻擊者就可以輕而易舉的通過這個端口來進行攻擊。如可以利用工具掃描80端口是否開啟來判斷服務器是否啟用了Web服務。為此如果Web服務沒有改變這個默認的端口值,那么就將導致很多安全問題。再如,有些管理員在設置用戶名與密碼的時候,可能給用戶的默認用戶名為空或者跟管理員帳戶相同的名字。雖然他們可能提醒用戶需要盡快的去更改密碼。但是根據筆者的經驗,不少用戶都沒有這個安全意識。 可見,為Web應用程序設置默認值時,并不怎么可靠。為此筆者建議,對于一些關鍵的應用,如端口、管理員帳戶名、密碼等信息最好不要采用默認值。這會降低Web應用程序的安全性能。 弱點二:關鍵信息沒有采取加密處理 筆者以前研究過一款Compiere的ERP系統,其有B/S與C/S兩種架構。在登陸的時候,需要用戶輸入用戶名與密碼。在輸入這個信息的時候,密碼采用了掩碼的形式,這確實可以起到一定的保護效果。但是用戶名在后臺數據庫中存儲的,以及從網頁客戶端傳輸到應用服務器、數據庫服務器的過程中,采用的都是明碼的形式。這也就是說,只要攻擊者采用一些嗅探工具、或者攻破了數據庫,那么對于這個應用來說,攻擊者就可以暢通無阻的進行一些破壞行為。相反,如果我們對于這些關鍵信息都采取了加密處理。那么即使攻擊者有了這些數據,對于他們來說,也是沒用任何用處。 無論是在數據庫服務器,還是在客戶端的Cookies中,不直接存儲沒有加密的掛念信息(如密碼或者其他私有數據),這是提高數據安全性的一個首要的原則。如果這些數據暴露了,但是所采用的加密方案將防止暴露用戶的密碼。 了解這個基本的原則之后,那么管理人員就需要關注,該選擇使用哪種加密技術。選擇的加密技術的不同,直接影響到Web服務的安全性。但是需要注意的是,加密技術也是一把雙刃劍。一般來說,在同等條件下,加密級別越高,其需要的資源開銷也就越大。簡單的說,加密的級別與系統的性能是成反向變動的。 弱點三:Web服務的溢出 這是最傳統的、也是危害最大的一個弱點。最早遭受破壞的、且仍舊普遍的攻擊來源于開發人員對最終用戶輸入的數據的可信任假設。其實這種假設是非常危險的。我們做安全的人員,應該保持一種執業的懷疑態度。即將用戶假設為攻擊者。只有如此,才能夠做好安全工作。但是不少開發人員沒有這種安全意識。舉一個簡單的例子。如果一個用戶了解PowerPoint文件格式的相關內容,他們就可以利用文本編輯器來編寫一個PowerPoint的文件。編輯的工作相當簡單,只是讓內部字段中擁有的數據比系統允許的更多的數據,此時就會導致系統崩潰。然后攻擊者就可以執行任何想要執行的程序。這種攻擊手段就叫做溢出攻擊。其適用于大部分Web服務器。 簡單地說,溢出性攻擊是由于將太多的數據放入原始程序設計人員認為足夠的空間中導致。額外的數據溢出將包存儲到附近的內存中,并且覆蓋與這個區域的原始用途無關的數據。當執行其他應用程序時,程序就會使用新的數據。這也就是說,如果攻擊者能夠使用錯誤的數據填充足夠的空間,并在數據中添加一些惡意的代碼,那么應用程序就可能會執行惡意代碼,從而實現其攻擊的目的。如刪除數據、更新網站主頁等等。如果受到攻擊的應用程序是有系統管理員啟動的,此時惡意代碼就可能作為原始程序的一部分執行,從而給攻擊者管理員特權。當攻擊者獲取管理員特權時,那么后果就可想而知了。 對于Web服務來說,需要特別注意緩沖區溢出攻擊。在緩沖區溢出攻擊實例中,程序的內部值將會被溢出,從而改變程序的運行方式。在應用程序的正常操作過程中,當調用一個函數時,被調用函數的所有參數以及返回位置的指針就會被存儲在內存中。當完成這個函數規定的作業之后,使用返回指針將會回到原來到位置并繼續執行其他的程序。利用緩沖區溢出進行攻擊就可以改變這個過程。即讓函數執行攻擊者所希望執行的程序或者代碼。通過輸入足夠多的數據來覆蓋原有的參數,以及輸入到不同函數的新返回指針就可以實現。 可見,溢出這個弱點,對于Web服務來說是非常致命的。不過要彌補這個漏洞難度也不是很大。一般來說,開發人員只需要在開發過程中做好相關的檢查工作,就可以彌補。如在文本框中,在用戶保存數據之前進行必要的檢查。包括數據類型、數據中是否包含著不允許的特殊字符等等。這也就是說,在開發Web應用程序的時候,應該對用戶保持必要的懷疑態度。只有如此,才會去思考如何來檢驗用戶的數據。這么操作完成之后,就可以在很大程度上避免溢出攻擊,提高應用服務器的安全。 弱點四:SQL注入式攻擊 SQL注入式攻擊漏洞是與緩沖區溢出攻擊,可以稱兄道弟。除了溢出弱點,SQL注入是另一類依賴于開發人員沒有測試輸入數據而導致的攻擊。如大多數人擁有字符數字或者秘密,或者有安全意識的人,擁有附帶其他鍵盤符號的字符數字式密碼,這可以提高密碼的安全程度。出于這種安全的考慮,開發人員可能會允許用戶輸入任何字符作為密碼。但是如果在開發過程中,沒有做好嚴格的檢查,那么就可能會造成Web服務器的SQL注入式攻擊。 SQL注入式攻擊的原理非常的簡單。在網絡上關于其的資料也有一大把。為此筆者不在這里過多的闡述。筆者只是強調一下,在開發Web應用程序時,SQL注入式攻擊應該引起開發人員的重視。采取積極的措施來消除這個弱點。 根據以前的攻擊案例,可以知道這個弱點是針對Web應用程序最有效的攻擊手段之一。而且隨著大家對Web應用程序信任的增加(如網上轉帳等業務的應用),其危害性也就越來越大。 其實要防止這個攻擊也比較簡單。主要就是應用程序在開發時,要加強對用戶輸入數據的檢測。如對于用戶輸入字符的長度、字符的格式等等內容進行比較嚴格的限制,并在用戶輸入數據后、保存數據之前進行嚴格的檢查。只要做好輸入檢查這一段,基本上就可以消除這個弱點所帶來的安全威脅。 本文出自:億恩科技【www.laynepeng.cn】 |