隨著Web2.0、網絡社交等一系列新型的互聯網產品的誕生,基于Web環境的互聯網應用越來越廣泛,企業信息化的過程中,越來越多的應用都架設在Web平臺上。Web業務的迅速發展吸引了黑客們的強烈關注,接踵而至的就是Web安全威脅的凸顯。黑客利用網站操作系統的漏洞和Web服務程序的SQL注入漏洞等得到Web服務器的控制權限,輕則篡改網頁內容,重則竊取重要內部數據,更為嚴重的則是在網頁中植入惡意代碼,使得網站訪問者受到侵害。這使得越來越多的用戶關注應用層的安全問題,Web應用安全的關注度也逐漸升溫。
SQL注入:
XSS跨站腳本攻擊
CSRF跨站請求偽造
任意文件讀取:
任意代碼執行:
越權訪問:
敏感信息泄露:
越權訪問
不安全的會話管理漏洞
用戶名/口令暴力爆破:
弱口令漏洞:
撞庫攻擊:
注冊模塊設計缺陷:
短信接口設計缺陷:
URL重定向漏洞:
DDOS拒絕服務漏洞
不足的日志記錄和監控:
業務邏輯漏洞:
網絡安全通信協議:
SQL注入(SQL Injection),是一個常見的發生于應用程序和數據庫之間的web安全漏洞,由于在開發過程中的設計不當導致程序中忽略了檢查,沒有有效的過濾用戶的輸入,是攻擊者可以向服務器提交不正常的訪問數據(即惡意的SQL命令代碼),程序在接收后錯誤的將攻擊者的輸入作為代碼語句的一部分執行,導致原始的查詢邏輯被改變,額外的執行了攻擊者靜態構造的惡意代碼,從而繞過驗證機制和權限檢查,達到取得隱藏數據或覆蓋關鍵的參值,甚至執行數據庫主機操作系統命令的目的。
SQL注入危害
數據庫信息泄露:數據庫中存放的用戶的隱私信息的泄露
網頁篡改:通過操作數據庫對特定網頁進行篡改
網站被掛馬,傳播惡意軟件:修改數據庫一些字段的值,嵌入網頁鏈接,進行掛馬攻擊。
數據庫被惡意操作:數據庫服務器被攻擊,數據庫的系統管理員賬戶被篡改。
服務器被遠程控制,被安裝后門。經由數據庫服務器提供的操作系統支持,讓黑客得以修改或控制操作系統。
破壞硬盤數據,癱瘓全系統。
例子:
應對方案:
過濾特殊字符:單引號、雙引號、斜杠、反斜杠、冒號、空字符等的字符
過濾的對象:用戶的輸入;提交的URL請求中的參數部分;從cookie中得到的數據;部署方SQL注入系統或腳本。
嚴格限制web應用的數據庫的操作權限,給用戶提供僅能滿足需求的最低權限,從而最大限度的減少注入攻擊對數據庫的危害。
對進入數據的特殊字符(‘ “ \ <> & *)進行轉義處理(或編碼轉換)
不要直接拼接SQL語句,所有的查詢語句建議使用數據庫提供的參數化查詢接口,使用參數化的語句而不是將用戶輸入的變量嵌入SQL語句中。
在應用發布之前建議使用專業的SQL注入檢測工具進行檢測,及時修補被檢測出的SQL注入漏洞。
避免網站打印SQL錯誤信息,比如類型錯誤、字段不匹配等,可對異常信息做封裝,給出友好提示,不直接打印堆棧信息到前端。
跨站腳本漏洞(Cross-site scripting , xss),是一種常見的web安全漏洞,由于web應用未對用戶提交的數據做充分的檢查過濾,允許用戶在提交的數據中摻入HTML代碼(最主要的是”>”,”<”),并將未經轉義的惡意代碼輸出到第三方用戶的瀏覽器解釋執行,從而導致XSS漏洞。攻擊成功后,攻擊者可以得到更高的權限、私密網頁內容、會話和cookie等內容。
XSS類型包括:
(1)非持久型跨站:即反射型跨站腳本漏洞,是目前最普遍的跨站類型。跨站代碼一般存在于鏈接中,請求這樣的鏈接時,跨站代碼經過服務端反射回來,這類跨站的代碼不存儲到服務端(比如數據庫中)。
(2)持久型跨站:這是危害最直接的跨站類型,跨站代碼存儲于服務端(比如數據庫中)。常見情況是某用戶在論壇發貼,如果論壇沒有過濾用戶輸入的Javascript代碼數據,就會導致其他瀏覽此貼的用戶的瀏覽器會執行發貼人所嵌入的Javascript代碼。
(3)DOM跨站(DOM XSS):是一種發生在客戶端DOM(Document Object Model文檔對象模型)中的跨站漏洞,很大原因是因為客戶端腳本處理邏輯導致的安全問題。
應對方案:
1、與SQL注入防護的建議一樣,假定所有輸入都是可疑的,必須對所有輸入中的script、iframe等字樣進行嚴格的檢查。這里的輸入不僅僅是用戶可以直接交互的輸入接口,也包括HTTP請求中的Cookie中的變量,HTTP請求頭部中的變量等。
2、不僅要驗證數據的類型,還要驗證其格式、長度、范圍和內容。
3、針對請求參數以及用戶可控數據進行防御,對輸出進行編碼處理。
4、在服務端對每一個輸入進行合法性驗證,只允許輸入常見符號,字母以及數字。
5、對Cookie添加HttpOnly標識。
跨站請求偽造(Cross-site request forgery , CSRF),是一種常見的web安全漏洞,由于在web請求中重要操作的所有參數可被猜測到,攻擊者可通過一些技術手段欺騙用戶的瀏覽器去訪問一個用戶曾經認證過的網站,遂使攻擊者可冒用用戶的身份,進行惡意操作。
應對方案:
1、在表單中添加一個隨機的數字或字母驗證碼,通過強制用戶和應用進行交互,來有效地遏制CSRF攻擊。
2、如果檢查發現是非正常頁面提交的請求(根據Referer進行判斷),則極有可能是CSRF攻擊。
3、在請求的參數里增加一個隨機的token參數,且不可被猜測。
4、敏感的操作應該使用POST,而不是GET,以form表單的形式提交,可以避免token泄露。
任意文件讀取漏洞(Unrestricted File Upload),是一種常見的web安全漏洞,因web程序提供的文件查看下載、附件下載等功能存在安全缺陷,導致通過修改該文件路徑就能夠查看和下載任意文件,這些文件包括:源代碼文件、系統文件(/etc/passwd , C:/boot.ini等)、配置文件(config.php , /WEB-INF/web.xml , web.config等),造成網站敏感信息泄露,嚴重危害網站安全。
應對方案:
1、服務端過濾特殊字符。(…./、 ….\、 ….\)
2、判斷用戶輸入的參數的格式是否合法。
3、指定文件類型白名單(如:jpg\gif\png\rar\zip\pdf\doc\xls\ppt等),禁止用戶讀取、下載白名單以外的文件。
4、指定下載路徑,禁止用戶讀取、下載指定目錄以外的文件。
任意代碼執行漏洞(Unrestrcted Code Execution),是一種常見的web安全漏洞,由于web程序沒有針對執行函數做過濾,當web程序應用在調用一些能將字符串轉化成命令的函數(如PHP中的eval(),system(),exec())時,沒有考慮做一些安全限制,導致可以通過構造特殊代碼,執行操作系統命令,致使攻擊者獲取到網站服務器權限。
應對方案:
1、如果因使用的框架或中間件造成遠程代碼執行漏洞,需及時升級框架和中間件。
2、針對代碼中可執行的特殊函數入口進行過濾,嘗試對所有提交的可能執行命令的語句進行嚴格的檢查或者對外部輸入進行控制,系統命令執行函數,不允許傳遞外部參數。
3、所有的過濾步驟要在服務器進行,不僅要驗證數據的類型,還要驗證期格式、長度、范圍和內容。
任意文件上傳(Unrestricted File Upload),是一種常見的web安全漏洞,由于web應用程序在實現文件上傳功能是對上傳的文件缺少必要的檢查,使得攻擊者可上傳任意文件。利用該漏洞,攻擊者可以直接上傳webshell(webShell 就是以asp\php\jsp或者cgi等網頁文件形式存在的一種命令執行環境,也可以將其稱之為一種網頁后門)、病毒、惡意腳本等各種危險文件,可能導致服務器權限被直接獲取,從而危及整個系統的安全運行。
應對方案:
1、對用戶上傳的文件后綴采用白名單進行限制,且重命名文件名。
2、限定文件上傳目錄,且該目錄不允許解析動態腳本文件。
在最近幾年,這是最常見的、最具影響力的攻擊。這個領域最常見的漏洞是不對敏感信息進行加密。在數據加密過程中,常見的問題是不安全的密鑰生成和管理以及使用弱加密算法、弱協議和弱密碼。特別是使用弱的哈希算法來保護密碼。
攻擊者不是直接攻擊密碼,而是在傳輸過程中或從客戶端(例如:瀏覽器)竊取密鑰、發起中間人攻擊,或從服務器端竊取明文數據。
應對方案:
1.應對敏感信息進行強加密再傳輸的操作,禁止一切敏感信息的明文傳輸,如:密碼明文傳輸等。
2.對于配置文件的明文存儲,可以使用 jasypt 進行密鑰加密存儲,增強安全性。
越權訪問(Broken Access Control , BAC),是一種常見的web安全漏洞,這類漏洞是指應用在檢查授權(Authorization)時存在紕漏,使得攻擊者可以利用一些方式繞過權限檢查,訪問或者操作到原本無權訪問的界面。在實際的代碼安全審查中,這類漏洞往往很難通過工具進行自動化檢測,因此在實際應用中危害很大。
應對方案:
1、將用戶身份標識存在session中并驗證,不能把用戶身份標識以參數形式置于HTTP請求中,應該放在session中,并且僅通過session驗證用戶身份。
2、禁止從Cookie參數中去判斷用戶所屬用戶組,應該通過讀取session會話來判斷用戶所屬用戶組。
3、文件下載時,禁止采用可被猜測的連續ID為參數進行文件下載,下載文件時也應判斷當前用戶是否有權限下載目標文件。
4、非普通用戶操作頁面嚴格做好權限管理,增刪改查操作需要驗證當前用戶權限。
token值信息直接在GET請求的URL上,造成token值的直接暴露,容易被日志記錄、搜索引擎等緩存,影響客戶會話安全。
應對方案:
禁止token以GET方式傳遞,可從header中獲取。
用戶名/口令爆破(Brute-force attack),是一種常見的web安全漏洞,由于用戶登錄模塊缺少必要的防護機制,使用網站的注冊或登錄接口,攻擊者通過系統地組合所有可能性(例如登錄時用到的賬戶名、密碼等),并以窮舉法嘗試所有可能性破解用戶的賬戶名、密碼等敏感信息。
應對方案:
1、增強驗證碼機制,為防止驗證碼被破解,可以適當怎加驗證碼生成的強度,例如中文圖形驗證碼。
2、用戶名或密碼輸入錯誤均提示“用戶名或密碼錯誤”,防止黑客獲取到注冊用戶的信息。
3、限制用戶登錄失敗次數。
4、限制一定時間內IP登錄失敗次數。
5、限制一系列驗證碼的使用次數,用完即失效。
弱口令(weak password),沒有嚴格和準確的定義,通常認為容易被別人(他們有可能對你很了解)猜測到或被破解工具破解的口令均為弱口令,如:生日、名字、簡單的順序數字or字符。
應對方案:
增強口令復雜度,驗證碼類可增加生成強度;密碼類可增加密碼的復雜度。
1、不使用空口令或系統缺省的口令,這些口令眾所周之,為典型的弱口令。
2、口令長度不小于8個字符。
3、口令應該為以下四類字符的組合,大寫字母(A-Z)、小寫字母(a-z)、數字(0-9)和特殊字符。每類字符至少包含一個。如果某類字符只包含一個,那么該字符不應為首字符或尾字符。
撞庫攻擊(Information Leakage Thinking Library Collision),是一種常見的針對web應用的攻擊方式,為了方便記憶很多用戶在不同網站使用的同一賬號和密碼,黑客通過收集網絡已泄露的拖庫信息,特別是注冊用戶和密碼信息,生成對應的字典表,嘗試批量自動登陸其它網站驗證后,得到一系列可以登錄的真實賬戶。
應對方案:
1、增強驗證碼機制,為防止驗證碼被破解,可以適當增加驗證碼生成的強度,例如中文圖形驗證碼。
2、自動識別異常IP,對于異常IP,整理一個非常嚴格的惡意IP庫,甚至禁止這些IP訪問網站。
3、用戶賬戶被撞開后的保護,對用戶行為進行分析,如判斷用戶的登錄IP是否在常用地區,如果不是則直接鎖定賬號,讓用戶通過收集、郵箱等手段來解鎖。
注冊模塊設計缺陷(Registration module design flaws),是一種常見的web安全漏洞,網站注冊模塊的設計缺陷將導致一下幾點安全漏洞:
1、任意用戶密碼找回。
2、暴力枚舉網站已注冊用戶。
3、暴力破解用戶密碼。
4、萬能密碼登錄。
5、SQL注入。
以上安全問題會帶來用戶密碼被盜、個人信息泄露、網站數據庫泄露、網站被入侵等風險。
應對方案:
1、如果使用郵件驗證的方式找回密碼,重置密碼令牌需要設置為不可猜測,且加密令牌時使用通過加密的方式,而不是自己構造;設置重置密碼會話過期時間,在重置密碼時不要從請求中獲取需要重置的用戶名。
2、如果使用短信驗證的方式找回密碼,驗證短信最少應為6位,且短信過期時間不能超過10分鐘,在發送短信頁面添加經過混淆過的圖形驗證碼,并在后端設置單位時間內的短信發送頻率。
3、限制單位時間內認證錯誤次數。
4、在用戶注冊頁面、登錄界面,添加可靠的機器人識別功能,例如圖形驗證碼或短信驗證碼。
短信接口設計缺陷(SMS interface design flaws),是一種常見的web安全漏洞,短信接口通常用于注冊驗證、登錄驗證及其他敏感操作的驗證上,但由于設計不當,通常會導致以下安全問題:
1、短時間內發送大量的手機短信。
2、短信驗證碼過短易被猜測。
3、短信驗證碼在發送多次時,多個驗證碼同時有效。
4、短信驗證碼在HTTP相應包中返回客戶端。
應對方案:
1、在發送短信接口設置機器人識別機制,例如經過混淆的圖形驗證碼,在驗證通過后方可發送手機短信。
2、用來驗證的驗證碼短信最少應為6位,過期時間內只能有一個驗證碼有效,且有效時間不應超過10分鐘。
3、不要把短信驗證碼返回到客戶端。
4、短信驗證碼在認證一次后應立即失效,輸入錯誤需再次獲取。
URL重定向漏洞(URL redirection vulnerability),是一種常見的web安全漏洞,由于網站URL重定向功能設計不當,沒有驗證跳轉的目標URL是否合法,用戶可通過此漏洞轉到任意網站,這會導致可通過該網站跳轉到存在木馬、病毒的網站或者釣魚網站。
應對方案:
1、不應從用戶請求或填寫的內容中獲取跳轉的目標URL,應在后端設定跳轉URL。
2、對需要跳轉的目標URL進行驗證,如果跳轉的URL不是所允許的,則禁止跳轉。
3、進行URL時提示用戶并顯示跳轉的目標URL地址并詢問是否跳轉。
拒絕服務攻擊(denial-of-service attack , DOS),亦稱“洪水攻擊”,是一種網絡攻擊手段,其目的在于使目標電腦的網絡或系統資源耗盡,使服務暫時中斷或停止,導致其正常用戶無法訪問。
拒絕服務的攻擊也可能導致與目標計算機同一網絡中的其它計算機被攻擊。互聯網和局域網之間的帶寬會被攻擊并導致大量消耗,不但影響目標計算機,同時也影響局域網中的其他計算機。如果攻擊的規模較大,整個地區的網絡連接都可能會受到影響。
一種服務需要面向大眾就需要提供用戶訪問接口,這些接口恰恰就給了黑客有可乘之機,如:可以利用 TCP/IP 協議握手缺陷消耗服務端的鏈接資源,可以利用 UDP 協議無狀態的機制偽造大量的 UDP 數據包阻塞通信信道…… 可以說,互聯網的世界自誕生之日起就不缺乏被 DDoS 利用的攻擊點,從 TCP/IP 協議機制到 CC、DNS、NTP 反射類攻擊,更有甚者利用各種應用漏洞發起更高級更精確的攻擊。
1、資源消耗類攻擊
資源消耗類是比較典型的 DDoS攻擊,最具代表性的包括:Syn Flood、Ack Flood、UDP
Flood。這類攻擊的目標很簡單,就是通過大量請求消耗正常的帶寬和協議棧處理資源的能力,從而達到服務端無法正常工作的目的。
Syn Flood:SYN- Flood 攻擊是當前網絡上常見的 DDoS 攻擊,它就是利用了 TCP 協議實現上的一個缺陷,通過向網絡服務所在端口發送大量 的偽造源地址的攻擊報文,就可能造成目標服務器中的半開連接隊列被占滿,從而阻止其他合法用戶進行訪問。這種攻擊早在 1996 年就被發現,但至今仍然顯示 出強大的生命力。很多操作系統,甚至防火墻、路由器都無法有效地防御這種攻擊,而且由于它可以方便地偽造源地址,追查起來非常困難。它的數據包特征通常 是,源發送了大量的 SYN 包,并且缺少三次握手的最后一步握手 ACK 回復。
Syn Flood原理:攻擊者首先偽造地址對 服務器發起 SYN 請求,服務器回應 (SYN+ACK) 包,而真實的 IP 會認為,我沒有發送請求,不作回應。服務 器沒有收到回應,這樣的話,服務器不知 道 (SYN+ACK) 是否發送成功,默認情況下會重試 5 次(tcp_syn_retries)。這樣的話,對于服務器的內存,帶寬都有很大的消耗。攻擊者 如果處于公網,可以偽造 IP 的話,對于服務器就很難根據 IP 來判斷攻擊者,給防護帶來很大的困難。
2、服務消耗性攻擊
相比資源消耗類攻擊,服務消耗類攻擊不需要太大的流量,它主要是針對服務的特點進行精確定點打擊,如 web 的 CC,數據服務的檢索,文件服務的下載等。這類攻擊往往不是為了擁塞流量通道或協議處理通道,它們是讓服務端始終處理高消耗型的業務的忙碌狀態,進而無法對正常業務進行響應
web 的CC攻擊:當一個網頁訪問的人數特別多的時候,打開網頁就慢了,CC 就是模擬多個用戶,多少線程就是多少用戶,不停地進行訪問那些需要大量數據操作,就是需要大量 CPU 時間的頁面,造成服務器資源的浪費,CPU 長時間處于 100%,永遠都有處理不完的連接直至就網絡擁塞,正常的訪問被中止。
應對方案:
拒絕服務攻擊的防御方式通常為入侵檢測,流量過濾和多重驗證,意在堵塞網絡帶寬的流量將被過濾,而正常的流量可正常通過。
1、網絡設備:防火墻可以設置規則,例如允許或拒絕特定通訊協議、端口或IP地址。當攻擊從少數不正常的IP地址發出時,可以簡單的使用拒絕規則阻止一切從攻擊源IP發出的通信。
2、黑洞引導/流量清洗:黑洞引導指將所有受攻擊計算機的通信全部發送至一個“黑洞”(空接口或不存在的計算機地址)或者有足夠能力處理洪流的網絡運營商,以避免網絡受到較大影響。當流量被送到DDoS防護清洗中心時,通過采用抗DDoS軟件處理,將正常流量和惡意流量區分開。這樣一來可保障站點能夠正常運作,處理真實用戶訪問網站帶來的合法流量。
3、web服務器:升級web服務器,避免出現拒絕服務漏洞,如HTTP.sys(MS15-034)。
對不足的日志記錄及監控的利用幾乎是每一個重大安全事件的溫床。攻擊者依靠監控的不足和響應的不及時來達成他們的目標而不被知曉。
根據行業調查的結果,此問題被列入了Top10。判斷你是否有足夠監控的一個策略是在滲透測試后檢查日志。測試者的活動應被充分的記錄下來,能夠反映出他們造成了什么樣的影響。
多數成功的攻擊往往從漏洞探測開始。允許這種探測會將攻擊成功的可能性提高到近100%;據統計,在2016年確定一起數據泄露事件平均需要花191天時間,這么長時間里損害早已發生。
應對方案:
建議應用系統開啟審計功能,審計覆蓋所有用戶審計日志至少包括用戶的注冊、登錄、關鍵業務操作等行為進行日志記錄,內容包括但不限于用戶姓名、手機號碼、注冊時間、注冊地址、登錄時間、登錄地址、操作用戶信息、操作時間、操作內容及操作結果等;
業務邏輯問題是一種設計缺陷,邏輯缺陷表現為設計者或開發者在思考過程中做出的特殊假設存在明顯或隱含的錯誤。攻擊者會特別注意目標應用程序采用的邏輯方式,設法了解設計者與開發者做出的可能假設,然后考慮如何攻破這些假設。攻擊者挖掘邏輯漏洞有兩個重點:業務流程、http/https請求篡改。
業務邏輯漏洞經常出現的場景為:賬戶(注冊/登錄/密碼找回)、交易、支付、個人信息修改。
應對方案:
應用系統在開發之前,盡量避免設計的缺陷,將容易出現重要業務邏輯漏洞的場景多做思考與設計,利用多場景的用例推敲是否存在漏洞。
系統在數據傳輸過程中不具有保護其完整性的措施,通常講的就是http的網絡通訊協議,在此協議下會產生傳輸數據以明文形式顯示,無法保護數據的完整性。
應對方案:
建議使用HTTPS安全網絡通訊協議,通過SSL或TLS提供加密處理數據、驗證對方身份以及數據完整性保護。
此外,再將幾個比較常見的安全規范,如下。
預警級別安全規范:
1.管理后臺泄漏漏洞
管理后臺的帳號和密碼設計過于簡單,容易被猜測到,導致攻擊者>可以暴力破解帳號密碼。
應對方案:
將管理后臺的服務綁定到內網ip上,禁止開放在外網。
如果該管理后臺必須提供給外網訪問,則未登錄頁面不要顯示過多內容,防止敏感信息泄漏,登錄帳號需經過認證,且密碼設置規則盡量復雜,增加驗證碼,以防止暴力破解。
2.錯誤詳情泄漏漏洞
頁面含有CGI處理錯誤的代碼級別的詳細信息,例如sql語句執行錯誤原因,php的錯誤行數等。
檢測方法:修改參數為非法參數,看頁面返回的錯誤信息是否泄漏了過于詳細的代碼級別的信息。
應對方案:
將錯誤信息對用戶透明化,在CGI處理錯誤后可以返回友好的提示語以及返回碼。但是不可以提示用戶出錯的代碼級別的詳細原因。
3.資源控制
應用系統未對單個賬戶的多重并發會話進行限制,會出現同個賬戶,多個操作人同時在操作。
應對方案:
可根據業務系統的需求定制會話的限制數量,類似:同個賬戶在不同地方登錄時提示賬戶已登錄,提供踢出操作,同時提示被踢出用戶。