Web服務端漏洞

  • SQL注入攻擊
    • 名詞解釋

      SQL注入攻擊(SQL Injection),簡稱注入攻擊、SQL注入,被廣泛用于非法獲取網站控制權,是發生在應用程序的數據庫層上的安全漏洞。由于在設計程序時,忽略了對輸入字符串中夾帶的SQL指令的檢查,被數據庫誤認為是正常的SQL指令而運行,從而使數據庫受到攻擊,可能導致數據被竊取、更改、刪除,甚至執行系統命令等,以及進一步導致網站被嵌入惡意代碼、被植入后門程序等危害。

    • 常見發生位置
      • URL參數提交,主要為GET請求參數。
      • 表單提交,主要是POST請求,也包括GET請求。
      • Cookie參數提交。
      • HTTP請求頭部的一些可修改的值,例如Referer、User_Agent等。
      • 一些邊緣的輸入點,例如mp3、圖片文件的一些文件信息等。
    • 防御措施
      • 使用預編譯語句。一般來說,防御SQL注入的最佳方式,就是使用預編譯語句,綁定變量,但對現有代碼的改動量較大。
      • 使用存儲過程。使用安全的存儲過程可在一定程度上對抗SQL注入,但要注意此種方法并不是100%安全。
      • 嚴格檢查用戶數據。對用戶傳入的數據類型及內容進行嚴格的檢查。對數據類型檢查,如利用ID查詢時判斷是否為整型,輸入郵箱時判斷郵箱格式,輸入時間、日期等必須嚴格按照時間、時期格式等;對數據內容進行檢查,如嚴格檢測用戶提交數據中是否包含敏感字符或字符串,是否匹配某種注入規則,嚴格轉義特殊字符等。注意此種方法雖然便于實施,但容易產生誤報和漏報,且容易被繞過。
      • 其他。使用安全的編碼函數、統一各數據層編碼格式(如統一使用UTF-8等)、嚴格限制數據庫用戶權限、定期進行代碼黑盒白盒掃描、避免將錯誤信息顯示到頁面等。
  • 文件上傳
    • 名詞解釋

      文件上傳漏洞是指由于程序代碼未對用戶提交的文件進行嚴格的分析和檢查,導致攻擊者可以上傳可執行的代碼文件,從而獲取Web應用的控制權限(Getshell)。

    • 常見發生位置
      • 所有使用到上傳功能的位置。
      • 用戶可自定義的頭像、背景圖片等。
      • 富文本編輯器中的文件上傳功能。
    • 防御措施
      • 上傳目錄設置為不可執行。
      • 嚴格判斷文件類型,使用白名單而不是黑名單(注意大小寫問題)。需要注意的是一些與Web Server相關的漏洞所造成的問題,如Apache、IIS、Nginx等的文件解析漏洞。
      • 使用隨機數改寫上傳后的文件名和文件路徑。
      • 單獨設置文件服務器及域名。
  • 權限漏洞
    • 名詞解釋
      訪問控制是指用戶對系統所有訪問的權限控制,通常包括水平權限和垂直權限。訪問控制問題是所有業務系統都可能產生的邏輯類漏洞,很難通過日常的安全工具掃描或防護,通常會造成大量用戶數據泄露事件。
      • 水平越權:同一權限(角色)級別的用戶之間所產生的問題,如A用戶可以未授權訪問B用戶的數據等。
      • 垂直越權:不同權限(角色)級別的用戶之間所產生的問題,如普通用戶可未授權進行管理操作,未登錄用戶可以訪問需授權應用等。
    • 常見發生位置
      • 所有涉及到與用戶相關數據的位置,如用戶資料、地址、訂單等。
      • 所有涉及到登錄及權限控制的位置,如后臺登錄、當前用戶權限校驗等。
    • 防御措施
      • 對于所有涉及到用戶數據的操作,嚴格判斷當前用戶的身份。
      • 對于所有需要權限控制的位置,嚴格校驗用戶權限級別。
  • 暴力破解
    • 名詞解釋

      暴力破解是指攻擊者通過遍歷或字典的方式,向目標發起大量請求,通過判斷返回數據包的特征來找出正確的驗證信息,從而繞過驗證機制。隨著互聯網眾多網站的數據庫被泄露,攻擊者選擇的樣本可以更具針對性,暴力破解的成功率也在不斷上升。

    • 常見發生位置
      • 用戶登錄處的賬號密碼暴力破解。
      • 人機驗證機制容易繞過,如使用較易識別的驗證碼。
      • 找回密碼或二次身份驗證等可能用到的手機短信驗證碼。
    • 防御措施
      • 強制使用強密碼,并定期修改。
      • 限制密碼錯誤嘗試次數。
      • 使用強人機驗證機制。
      • 限制一定時間內的高頻訪問次數。
  • 拒絕服務攻擊
    • 名詞解釋

      拒絕服務攻擊(DoS,Denial of Service)是利用合理的請求造成資源過載,從而導致服務不可用的一種攻擊方式。分為針對Web應用層的攻擊、客戶端/APP的攻擊。

    • 常見發生位置
      • Web層常見于會大量消耗資源的位置,如查找功能等。
      • 客戶端/APP常見于異常輸入數據造成的程序崩潰。
    • 防御措施
      • 針對Web層DoS:
        • 限制每個客戶端的請求頻率。
        • 使用驗證碼過濾自動攻擊者。
        • 做好應用代碼的性能優化,網絡架構優化等。
      • 針對客戶端/APP拒絕服務攻擊:
        • 刪除不必要的組件。
        • 對用戶輸入數據進行過濾和檢查。
  • 敏感信息泄露
    • 名詞解釋

      敏感信息泄露是指包括用戶信息、企業員工信息、內部資料等不應當被外部訪問到的數據通過網站、接口、外部存儲等途徑被未授權泄露到外部的漏洞。信息泄露漏洞會導致大量用戶或企業信息被惡意利用,進行詐騙、賬戶竊取等,給用戶和企業帶來嚴重的不良影響。并且信息一旦信息被泄露,影響會很難消除。

    • 常見發生位置
      • 獲取用戶、企業信息等數據的網站或客戶端接口。
      • 企業可訪問到的外部存儲,如網盤、郵箱等。
      • 其他一切可能泄露數據的途徑。
    • 防御措施
      • 對數據接口進行嚴格的權限檢查和訪問限制。
      • 劃分企業安全邊界,限制內部數據外流,如禁止訪問外部存儲應用等。
      • 提高員工數據安全意識。
  • 業務邏輯漏洞
    • 名詞解釋

      業務邏輯漏洞是指由于業務在設計時考慮不全所產生的流程或邏輯上的漏洞,如用戶找回密碼缺陷,攻擊者可重置任意用戶密碼;如短信炸彈漏洞,攻擊者可無限制利用接口發送短信,惡意消耗企業短信資費,騷擾用戶等。由于業務邏輯漏洞跟業務問題貼合緊密,常規的安全設備無法有效檢測出,多數需要人工根據業務場景及特點進行分析檢測。

    • 常見發生位置

      所有涉及到用戶交互的位置。

    • 防御措施

      針對業務場景進行全面的檢測。

  • 安全配置缺陷
    • 安全配置缺陷包括:文件遍歷、源碼泄露、配置文件泄露等。
      • 文件遍歷:可以瀏覽服務器Web目錄下的文件列表,可能會泄露重要文件。
      • 源碼泄露:可以查到的Web程序的源代碼。
      • 配置文件泄露:Web服務器及程度代碼的配置文件泄露等。
    • 防御措施

      檢查所有可能存在安全配置問題的點,在滿足業務需求的情況下,最大化安全配置。

Web客戶端安全

  • 跨站腳本攻擊(XSS)
    • 名詞解釋

      跨站腳本攻擊(XSS, Cross Site Script)通常指黑客通過“HTML注入”篡改了網頁,插入惡意腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。XSS漏洞可被用于用戶身份竊取(特別是管理員)、行為劫持、掛馬、蠕蟲、釣魚等。XSS是目前客戶端Web安全中最重要的漏洞。

      XSS按效果的不同可以分為以下3種。
      • 反射型XSS攻擊:頁面僅把用戶輸入直接回顯在頁面或源碼中,需要誘使用戶點擊才能成功。
      • 存儲型XSS攻擊:XSS攻擊代碼會被存儲在服務器中,由于用戶可能會主動瀏覽被攻擊頁面,此種方法危害較大。
      • DOM型XSS攻擊:通過修改頁面的DOM節點形成XSS,嚴格來講也可劃為反射型XSS。
    • 常見發生位置

      所有涉及到用戶可控的輸入輸出點,如個人信息、文章、留言等。

    • 防御措施
      • 對重要的Cookie字段使用HTTPOnly參數。
      • 檢查所有用戶可控輸入。對所有的輸入點進行嚴格的檢查,過濾或攔截所有不符合當前語境的輸入。由于無法預期所有可能的輸出點語境,此種方法效果較差。
      • 檢查所有用戶輸入的輸出點。因為XSS最終攻擊是發生在輸出點,因此需要分析出用戶輸入數據的所有輸出點的環境,是輸入在HTML標簽中,還是HTML屬性、<script>標簽、事件、CSS位置中,針對不同的輸出位置,制定不同的轉義或過濾規則。
      • 處理富文本。在文章、論壇等需要用到富文本的地方,需要特別注意富文本與XSS的區分,嚴格禁止所有的危險標簽及“事件”,原則上應當使用白名單過濾標簽、事件及屬性。
  • 跨站點請求偽造(CSRF)
    • 名詞解釋

      跨站點請求偽造(CSRF, Cross Site Request Forgery)。由于重要操作的所有參數都是可以被攻擊者猜到,攻擊者即可偽造請求,利用用戶身份完成攻擊操作,如發布文章、購買商品、轉賬、修改資料甚至密碼等。

    • 常見發生位置

      所有由用戶(包括管理員)發起的操作點。

    • 防御措施
      • 輔助驗證方法:使用驗證碼。驗證碼是對抗CSRF攻擊最簡單有效的方法,但會影響用戶的使用體驗,并且不是所有的操作都可以添加驗證碼防護。因此,驗證碼只能作為輔助驗證方法。
      • 通用防護方法:添加足夠隨機的csrf_token并每次更新,以防止參數被猜解。使用CSRF_token是目前通用的防護方法。
      • 其他防御措施:驗證HTTP Referer,拒絕不安全的來源。但服務器并非在任何情況下都能獲取到Referer值。
      說明 建議結合上述三種方法進行防御。