安全攻防技能30講


  《安全攻防技能30講》是極客時間上的一個關於Web安全的專欄,在學習之后特在此做記錄和總結。

一、安全基礎概念

  先和你聊聊安全本身,以幫你建立整體的大局觀。安全的本質就是保護數據被合法地使用。

1)安全原則

  CIA 三元組原則,是安全領域內最基礎也最重要的原則。

  (1)機密性(Confidentiality)用一句話來說就是,確保數據只被授權的主體訪問,不被任何未授權的主體訪問。簡單用一個詞總結就是“不可見”。

  (2)完整性(Integrity)就是確保數據只被授權的主體進行授權的修改,簡單來說,就是“不可改”。

  (3)可用性(Availability)就是確保數據能夠被授權的主體訪問到 ,簡單來說,就是“可讀”。

2)黃金法則

  黃金法則主要包含三部分:認證(Authentication)、授權(Authorization)、審計(Audit)。這三部分其實是一種串聯的關系,它描述的其實是用戶在使用應用過程中的生命周期:先進行登錄、再進行操作、最后留下記錄。

  (1)認證其實包括兩個部分:身份識別和認證。身份識別強調的是主體如何聲明自己的身份,而身份認證強調的是,主體如何證明自己所聲明的身份是合法的。比如說,當你在使用用戶名和密碼登錄的過程中,用戶名起到身份識別的作用,而密碼起到身份認證的作用。

  (2)除了對“你能做什么”進行限制,授權機制還會對“你能做多少”進行限制。比如,手機流量授權了你能夠使用多少的移動網絡數據。最原始和最安全的授權機制,一定是你的每一次操作,都經過了管理人員的審批和確認。

  (3)當你在授權下完成操作后,安全需要檢查一下“你做了什么”,這個檢查的過程就是審計。當發現你做了某些異常操作時,安全還會提供你做了這些操作的“證據”,讓你無法抵賴,這個過程就是問責。

  大部分情況下,事前防御屬於認證,事中防御屬於授權,事后防御屬於審計。

3)密碼學

  (1)對稱加密,代表加密和解密使用的是同一個密鑰。經典的對稱加密算法有 DES、IDEA、AES、國密 SM1 和 SM4。

  (2)非對稱加密代表加密和解密使用不同的密鑰。具體的加解密過程就是,發送方使用公鑰對信息進行加密,接收方收到密文后,使用私鑰進行解密。經典的非對稱加密算法包括:RSA、ECC 和國密 SM2。

  (3)散列算法應該是最常見到的密碼學算法了。大量的應用都在使用 MD5 或者 SHA 算法計算一個唯一的 id。

4)身份認證

  身份認證可以分為兩個部分:對外認證和對內認證。對外認證,其實就是應用的登錄注冊模塊,它面向用戶進行認證。

  除了應用本身需要有登錄注冊的模塊,應用的各種內部系統同樣需要涉及登錄認證的功能,比如:服務器的登錄、數據庫的登錄、Git 的登錄、各種內部管理后台的登錄等等。這也就是我所說的對內認證。

  對外認證是單一場景下的認證,對內認證是多場景下的認證。

  當賬號體系變得越來越復雜時,如何對這些賬號進行統一的管理,是解決身份認證問題的關鍵。而單點登錄(Single Sign On,SSO)就是一個非常有效的解決方案。

  單點登錄的概念很簡單:用戶只需要進行一次認證,就可以訪問所有的網頁、應用和其他產品了。CAS 是一個開源的單點登錄框架,它不屬於某一種單點登錄的實現方式,而是提供了一整套完整的落地方案。

  

5)訪問控制

  “授權”和“訪問控制”其實是同一個概念,都是允許或者禁止某個用戶做某件事情。

  一個主體請求一個客體,這個請求的授權由訪問控制來完成。例如在用戶去讀取文件的過程中,用戶是主體,讀取這個操作是請求,文件是客體。

  (1)主體:請求的發起者。主體可以是用戶,也可以是進程、應用、設備等任何發起訪問請求的來源。

  (2)客體:請求的接收方,一般是某種資源。比如某個文件、數據庫,也可以是進程、設備等接受指令的實體。

  (3)請求:主體對客體進行的操作。常規的是讀、寫和執行,也可以進一步細分為刪除、追加等粒度更細的操作。

  常見的訪問控制機制有 4 種:DAC、role-BAC、rule-BAC、MAC。

  (1)DAC(Discretionary Access Control,自主訪問控制)。DAC 就是讓客體的所有者來定義訪問控制規則。

  你想要從圖書館中拿走一本書。這個時候,管理員說,“你經過這本書的所有人同意了嗎?”這個過程就是 DAC。

  (2)role-BAC(role Based Access Control,基於角色的訪問控制)。role-BAC 就是將主體划分為不同的角色,然后對每個角色的權限進行定義。

  當你想借書的時候,管理員說,“你是學生嗎?”這個過程就是 role-BAC。

  (3)rule-BAC(rule Based Access Control,基於規則的訪問控制)。rule-BAC 就是制定某種規則,將主體、請求和客體的信息結合起來進行判定。

  有一點需要我們注意,需要定義是“默認通過”還是“默認拒絕”。即當某次請求沒有命中任何一條規則時,我們是應該讓它“通過”還是“拒絕”呢?

  如果你想要在圖書館借書,管理員會說,“根據規定,持有閱覽證就可以借書。”

  (4)MAC(Mandatory Access Control,強制訪問控制)。MAC 是一種基於安全級別標簽的訪問控制策略。

  在互聯網中,主體和客體被划分為“秘密、私人、敏感、公開”這四個級別。MAC 要求對所有的主體和客體都打上對應的標簽,然后根據標簽來制定訪問控制規則。

  當你在圖書館排隊借書的時候,聽到管理員說:“初中生不能借閱高中生的書籍。”這就是一種強制訪問控制。

  相比較來說,DAC 是所有者對客體制定的訪問控制策略,role-BAC 是管理員對主體制定的訪問控制策略,而 rule-BAC 可以說是針對請求本身制定的訪問控制策略。

  

二、Web安全

  在 Web 安全這個模塊中,我們所談論的 Web,是指所有基於 HTTP 或者其他超文本傳輸協議(RPC 等)開發的應用,包括:網頁、App、API 接口等等。這類應用的共同點是:通過 HTTP 等文本協議,在客戶端和服務端之間進行數據交換。客戶端需要將服務端傳出的數據展示渲染出來,服務端需要將客戶端傳入的數據進行對應的處理。而 Web 安全所涉及的正是這些應用中存在的各類安全問題。

  “Web 安全”涉及的主要內容梳理成了一張表格,你可以利用它來及時回顧。

  

1)XSS

  通過給定異常的輸入,黑客可以在你的瀏覽器中,插入一段惡意的 JavaScript 腳本,從而竊取你的隱私信息或者仿冒你進行操作。這就是 XSS 攻擊(Cross-Site Scripting,跨站腳本攻擊)的原理。

2)SQL注入

  黑客會通過構造一些惡意的輸入參數,在應用拼接 SQL 語句的時候,去篡改正常的 SQL 語意,從而執行黑客所控制的 SQL 查詢功能。這個過程,就相當於黑客“注入”了一段 SQL 代碼到應用中。這就是我們常說的 SQL 注入。

3)CSRF/SSRF

  黑客編寫帶有惡意 JavaScript 腳本的網頁,通過“釣魚”的方式誘導你訪問。然后,黑客會通過這些 JavaScript 腳本竊取你保存在網頁中的身份信息,通過仿冒你,讓你的瀏覽器發起偽造的請求,最終執行黑客定義的操作。而這一切對於你自己而言都是無感知的。這就是 CSRF(Cross-Site Request Forgery,跨站請求偽造)攻擊。

  用戶在瀏覽器中輸入一個 URL(比如某個圖片資源),然后服務端會向這個 URL 發起請求,通過訪問其他的服務端資源來完成正常的頁面展示。這個時候,只要黑客在輸入中提交一個內網 URL,就能讓服務端發起一個黑客定義的內網請求,從而獲取到內網數據。這就是 SSRF(Server Side Request Forgery,服務端請求偽造)的原理。

4)反序列化漏洞

  應用在輸出某個數據的時候,將對象轉化成字符串或者字節流,這就是序列化操作。反序列化操作也就是應用將字符串或者字節流變成對象。

  在數據轉換成對象的過程中,應用需要根據數據的內容,去調用特定的方法。而黑客正是利用這個邏輯,在數據中嵌入自定義的代碼(比如執行某個系統命令)。應用對數據進行反序列化的時候,會執行這段代碼,從而使得黑客能夠控制整個應用及服務器。這就是反序列化漏洞攻擊的過程。

5)信息泄露

  避免錯誤信息泄露代碼邏輯,一方面是要通過正確地配置文件,避免錯誤信息被展示到前端;另一方面是要對錯誤信息進行檢測,這里就需要用到“黑盒”檢測了。

  所謂“黑盒(Black Box Testing,功能測試)”,就是在不獲取代碼的情況下,直接運行應用,然后對應用的請求和響應進行掃描。比如,在錯誤信息泄露的場景中,“黑盒”檢測可以向應用發起一些必然會導致錯誤的請求(比如上述例子中的單引號),然后觀察應用是返回完整的錯誤日志,還是返回某些經過處理的頁面。

  除了錯誤信息之外,間接的信息泄露方式還有兩種:返回信息泄露和注釋信息泄露。

  使用一種叫作“白盒”的代碼檢測方法,來避免關鍵的注釋信息出現在線上的代碼中。

  所謂“白盒(White Box Testing,結構測試)”,即直接獲取到線上的源代碼,然后對它進行掃描。“白盒”掃描注釋信息的原理比較簡單,因為每一種語言的注釋都會帶有特殊的標記(比如 Java 和 PHP 中的 /* 等),可以比較准確地被識別出來。

  返回信息過於明確不算是代碼層面的漏洞,更多的是產品層面的漏洞。因此,理論上沒有任何技術手段能夠對這種漏洞進行檢測,只能依靠人為的分析審計來避免。解決方案也比較簡單,直接將返回信息模糊化、統一化即可。比如在登錄的場景中,我們可以將兩種登錄失敗的返回信息,統一修改為“用戶名不存在或密碼錯誤”。

  信息泄露最普遍的方式還是直接泄露 。這里我會講兩種常見的直接泄露方式。

  (1)第一種泄露方式與版本管理工具中的隱藏文件有關。通過版本管理工具(比如 SVN 和 Git),你能夠很方便地進行代碼回滾、備份等操作。

  (2)除此之外,還有一種最常見、也最不容易注意的泄露方式,那就是上傳代碼到 GitHub 上。

  我們可以從以下幾個方面進行防護:

  (1)屏蔽信息:通過技術手段,將不該被訪問的資源進行屏蔽,從而避免信息泄露的產生;

  (2)代碼檢測:從“白盒”和“黑盒”兩個方向,對代碼、應用等進行檢測,對可能的泄露進行預警;

  (3)人工審計:對於非技術原因造成的泄露,加強人工審計的工作。同時從公司制度上,去提高員工的安全意識。

6)插件漏洞

  我准備了幾個問題,你可以看看自己是否對所用的插件了如指掌。

  (1)你所使用的所有插件的版本是什么?(包括前端和后端,直接引用和間接引用)

  (2)你所使用的這些插件,是否存在漏洞,是否不被維護了,是否被廢棄了?

  (3)你所使用的這些插件,會在哪些地方發布更新信息和漏洞信息?

  (4)你所使用的這些插件,是否會定期更新?

  (5)你是否會對更新插件進行完整的測試?

  (6)你所使用的這些插件,在安全方面,有哪些配置需要關注?

  “0 day”,即在插件發布修復漏洞的安全補丁之前,黑客就已經知道漏洞細節的漏洞。換一句話說,“0 day”就是只有黑客知曉的未公開漏洞。

  因為只有黑客知道這個漏洞,而我們連這個漏洞是什么都不知道,所以“0 day”幾乎無法防御。除此之外,“0 day”還具備極高的攻擊有效性,可以說只要應用使用了對應的插件,黑客幾乎“戰無不勝”。

  建立插件漏洞的防護體系。

  (1)第一步:整理插件,剔除無用插件。

  (2)第二步:管理插件補丁更新。

  (3)第三步:使用公開漏洞庫。

三、業務安全

1)業務安全體系

  黑產是基於正常的業務產品邏輯,采取非正常或者批量的操作,來獲取利益的行為。業務安全就是通過各類產品策略,來對黑產進行識別和攔截,從而保障業務的正常運行。

  在業務安全中,業內普遍將攻擊者稱為“黑產”。之所以會改換一個名稱,我認為主要有兩點原因。

  (1)第一,“黑產”強調的是“產業化”。

  

  (2)第二,黑客強調的是技術對抗,而“黑產”更看重資源對抗。

  在基礎安全中,我們說過應用的本質是數據,安全的本質是數據的 CIA,我們可以通過黃金法則來保護數據。而業務安全的本質就是保障用戶價值不受黑產的惡意影響。保障的方法就是提高黑產的資源成本,使得黑產無法獲利。

  一般來說,黑產會從四個方面進行資源投入,分別是:用戶資源、IP 資源、設備資源和操作資源。

  (1)對於用戶資源的對抗,目前主要的方式就是黑名單。

  (2)黑產會利用“秒撥 IP”來獲取大量 IP 資源。所謂“秒撥”,就是指每一次撥號上網,都會分配一個新的 IP 給我們。

  (3)很多黑產案件中都會出現由大量手機設備組成的“手機牆”。除此之外,也有上游團隊將手機做成雲控模式,下游黑產可以直接花錢購入可遠程操控的真實手機設備。

  (4)黑產會嘗試使用一些自動化的工具,比如按鍵精靈,讓機器來完成游戲的過程。我們和操作資源的對抗,就是在和黑產的自動化工具進行對抗。

  

2)產品安全方案

  我對業務安全中 IPDRR 內容的重點講解。

  (1)Identify(識別):和基礎安全一樣,業務安全的識別階段主要是進行威脅評估的工作。我們需要找到黑產可能獲取到的業務邏輯中的投入成本,比如,應用發放的紅包、優惠券等。

  (2)Protect(保護):在業務安全中,我們是通過產品方案來實施認證和授權過程的。比如,對於登錄過程增加雙因子認證和驗證碼等,就是加強認證的安全性。

  (3)Detect(檢測):檢測階段主要是風控系統發揮作用。

  (4)Respond(響應):發現黑產的攻擊后,我們可以通過封禁賬號、攔截操作、拒絕提現等方式,來阻止黑產獲取利益。

  (5)Recover(恢復):最后就是對整個系統進行恢復了。在業務安全中,黑產可能已經盜取了某些賬號,或者已經領取了部分紅包。這時,我們就需要通過合適的運營機制,將賬號返回給原用戶,把紅包退回到獎金池中。

  

  提升應用安全性的產品方案還有很多。例如:

  (1)在邀約活動中,我們可以適當增加用戶任務的難度,如必須連續活躍三天用戶才能得到收益;

  (2)在抽獎活動中,我們可以增加參與抽獎的門檻,如必須是注冊一個月以上的老用戶才能參加;

  (3)在排行榜活動中,我們可以將排行榜的計算規則隱藏,讓黑產摸不清刷的方式。

3)風控系統

  風控系統就是從業務數據中挖掘出黑產行為的數據分析系統。

  產品方案屬於事前的防控,是從根本上提高黑產操作的成本;風控系統屬於事中的防控,是在檢測到黑產行為時才進行攔截。

  一個完整的風控流程還需要人工進行數據分析、處理用戶投訴、監控輿情,並采取應急響應機制。

  

  (1)前端 SDK 可以采集各類前端數據,如手機型號、硬件類型等。除此之外,前端 SDK 還會計算出一個唯一的設備指紋,通過這個設備指紋,我們就能夠實現對設備行為的追蹤。

  (2)規則引擎會接收到業務提供的原始數據,而想要從中識別出黑產,我們首先需要通過一些統計手段找到其中有用的特征。比如說,我們可以定義,一個設備在 1 分鍾內登錄 5 次的行為屬於異常行為,應當進行攔截。做好一款規則引擎的關鍵在兩個方面:采用正確的工作模式、設計高效的規則管理功能。

4)機器學習

  機器學習是通過找出未知的規則參數來區分已知的行為。

  在生活中,我們能夠快速地分辨一張圖片是貓還是狗。那你有沒有思考過,我們是怎么進行識別的?根據五官、顏色還是形狀?仔細回想一下,你就會發現,我們往往是根據經驗來判斷的,很難用文字描述出准確的判斷依據。

  機器學習實際上是對人為經驗的一種總結,並不具備創新的能力,所以最終對抗效果的好壞,還是取決於人的對抗能力。

5)設備指紋

  設備指紋是用來標識手機或者瀏覽器的唯一 ID,我們能夠通過這個 ID 關聯到手機或瀏覽器相關的全部數據。

  對比於傳統的 IP、手機號等 ID,設備指紋具有唯一性高、穩定性強和信息豐富這三個優勢。

  簡單來說,唯一性高是指一人一設備,因為使用者不同,每個智能設備上的使用痕跡和特征也具有唯一性。穩定性強也很好理解,就是智能設備的硬件不常更新,它們對應穩定不變的 ID。智能設備能夠收集的信息非常豐富,自下而上包括硬件、操作系統、應用信息等。

  基於這些優勢,一方面,設備指紋可以以設備為單位對其相關的行為進行串聯,發現諸如使用一個設備進行大規模注冊等黑產攻擊行為;另一方面,設備指紋可以基於其豐富的設備信息,來識別黑產使用的虛擬設備,幫助風控系統對抗黑產。

  設備指紋面臨的主要挑戰。

  (1)第一,設備重置之后,保持設備指紋不變。

  (2)第二,設備更新之后,保持設備指紋不變。

  (3)最后,我們還要保證設備指紋的唯一性,避免兩個不同的設備產生相同的設備指紋

  想要獲得准確且穩定的設備指紋,我們必須從多個維度采集不同的信息。這些信息可以大致分為:軟件 ID、軟件靜態特征、硬件靜態特征和硬件動態特征。

  (1)軟件 ID 主要包括 iOS 設備的 IDFA、IDFV,Android 設備的 IMEI、MAC 等。這些 ID 本身就是蘋果和 Google 為了給 APP 廠商提供追蹤能力設計的標識,具備較好的唯一性和穩定性。但是,操作系統為了保障用戶隱私,對 APP 的權限做了較多的限制。比如,用戶可以自主選擇禁止 APP 獲取到這些 ID,重置手機也會同時重置這些 ID 等。

  (2)軟件靜態特征主要是操作系統和 APP 本身的各類基本信息,比如操作系統版本、手機名稱、APP 版本等。這些信息基本都可以通過更新或者手動配置的方式修改,因此在穩定性上表現較差。但是,這些信息能夠反映出用戶的個人特征,因此,它們能夠對設備指紋的唯一性產生較大幫助。

  (3)硬件靜態特征主要是設備的各類硬件信息,比如,主板、CPU、攝像頭等相關型號信息。正常用戶基本不會去替換設備上的各個硬件,因此硬件靜態特征具備較高的穩定性。但同一型號手機的硬件配置是一致的,所以,硬件靜態特征在唯一性上相對欠缺。

  (4)硬件動態特征是目前比較新的研究方向,它的基本原理是基於硬件的一些動態執行層產生的特征(如:加速度傳感器的偏差)來識別虛擬設備。

  設備指紋的 ID 計算其實就是計算兩組數據的相似度,相似度越高、差異度越低,就越有可能是同一個設備。

 

相關鏈接:

XSS過濾器規避速查表

haveibeenpwned測試密碼是否泄漏

ATTACK框架識別漏洞

XSS工具BeEF

SQL注入工具sqlmap

對GitHub發起巡檢的工具Hawkeye

開源規則引擎Drools

開源風控系統Nebula

Web安全練習平台WebGoat

免費的攻擊滲透平台Pwnable.kr

插件漏洞檢測工具OWASP Dependency-Check

JavaScript插件管理工具Retire.js

網絡入侵檢測系統SnortSuricata

基於Osquery來開發 HIDS(基於主機型入侵檢測系統)

httprecon報告各種可能的Web服務器

Burp Suite滲透利器

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM