WEB 應用威脅有哪些?
在之前的小節中,我們談到網絡的整個鏈路很長,每一個環節都有可能存在危險。這種威脅可能是物理硬件,操作系統,操作系統上面的軟件漏洞,協議漏洞,甚至是人的某些行為導致,場景非常多而本節主要聚焦 Web 層面的安全問題。
1. Web 安全簡介
Web 安全是個大課題,面對層出不求的黑客漏洞,個人能力很有限制,所以這邊介紹一個平臺 國家信息安全漏洞共享平臺,可以到上面注冊個賬號,并訂閱漏洞信息報送。
針對各類漏洞筆者歸類了 3 個方面:1. 注入與欺騙;2. 編程代碼邏輯缺陷;3. 服務器問題;
2. 注入與欺騙
注入一般是將惡意代碼以參數的形式傳入系統,并誘使系統或者用戶手動觸發代碼事件。欺騙通常是偽造某個客戶端身份去訪問服務器。
2.1 會話模擬
會話標識
因為 Http 是無狀態協議,服務端為了區別不同請求分別來自哪個用戶,一般借助的是 Session 和 Cookies。Session 的數據存儲在服務端,而 Cookies 存儲在客戶端。
Cookies 以鍵值對的方式存儲在瀏覽器中,設置 Cookies 的時候如果指定了過期時間,對應的值就會寫到本地磁盤中,時間到了自動剔除。如果沒有設置過期時間,它的生命周期就是瀏覽器關閉了就消失了。
Session 雖然存儲在服務端,但是它的 SessionId 也存了一份在客戶端的 Cookies 中的,并且它的生命周期隨著瀏覽器的關閉而消失。Http 有個機制:請求的時候會把瀏覽器中當前域名對應作用域下的所有 Cookies 都發送到出去,所以同一個作用域下的 Cookies 對象不要太多,會影響每次請求的帶寬。服務端就能從請求中拿到 SessionId ,從而查出具體的 Session 對象。
模擬會話
在了解了會話標識的過程后,我們發現只要拿到了用戶的 SessionId 就能很容易的假冒用戶的身份去與服務端交互。
場景
場景1:開發中我們會用 Http 請求工具,如 PostMan 去調用我的接口,驗證接口的出入參。如果系統需要登錄才能訪問,我們比較簡便的做法是用瀏覽器先登錄,然后將瀏覽器的 SessionId 設置到 PostMan 中,此時接口就能訪問了。
場景2:瀏覽器的 SessionId 自己能容易獲得,但是別人要拿到還是相對困難的,于是有一種名為 CSRF 跨站點請求偽造(Cross—Site Request Forgery) 的攻擊出現。用戶登錄 A 網站,然后又打開了另一個標簽頁訪問 B 網站,如果此時 B 中隱藏了 A 網站某個請求的鏈接,到用戶點擊了,就會以當前用戶的身份去觸發對應的事件。
2.2 跨站腳本攻擊(XSS)
XSS 跨站腳本攻擊(Cross-site scripting)使用到的技術主要為 HTML 和 Javascript 腳本。
攻擊者將對客戶端有危害的代碼放到服務器上作為一個網頁內容,用戶不經意打開此網頁時,這些惡意代碼會注入到用戶的瀏覽器中并執行,從而使用戶受到攻擊。一般而言,利用跨站腳本攻擊,攻擊者可竊取會話 Cookie,從而獲得用戶的隱私信息,甚至包括密碼等敏感信息。
2.3 SQL 注入
Web程序代碼中對于用戶提交的參數未做過濾就直接放到SQL語句中執行,導致參數中的特殊字符打破了SQL語句原有邏輯,黑客可以利用該漏洞執行任意SQL語句。
場景:
2.4 域名劫持
我們通過域名訪問某個網站的時候,需要 DNS 域名解析系統幫忙解析出對應服務器的 IP 地址。如果域名服務器收到攻擊,那黑客就可以將我們的域名任意解析到另一個服務器過去了。當然也可能是直接通過病毒軟件修改我們本地的 hosts 文件。
3. 編程代碼邏輯缺陷
3.1 敏感數據依賴前端參數
系統中的重要參數需要后臺重新計算,如商品購買的價格,限時購買中的時間等,對客戶端的輸入保持警惕。
3.2 接口限制問題
場景1: 登錄的接口失敗沒有次數限制,會被暴力破解。
場景2: 短信發送的接口沒有次數限制,容易被濫用,造成損失,甚至被非法分子用來做短信轟炸。
3.3 第三方依賴包的漏洞問題
我們代碼工程里面會引入很多第三方依賴包,整個系統的安全性就像漏斗效應,一旦某個依賴包被發現漏洞,我們的整個系統也等于存在威脅邊緣。
例如下面常見的一些依賴包
- struct
- fastjson
- httpclient
- apache commons
- spring
- 等等
3.4 權限控制問題
場景1: 權限只在前端設置,接口沒有做校驗,了解 HTML 的人很容易可以將某些隱藏的按鈕顯示出來,從而觸發對應的功能。
4. 服務器問題
4.1 服務器信息泄露
- SSH 密碼泄露
- WEB 控制端密碼泄露(阿里,騰訊,百度等控制臺,寶塔控制臺等)
- IP 地址 ,操作系統信息
4.2 軟件漏洞
系統上面安裝的軟件存在漏洞,被探測工具掃描到,就可能利用你這個漏洞入侵你的操作系統。
4.3 DDOS攻擊
DDOS(Distributed Denial of Service)也是一種經典的攻擊模式,它不是利用服務器存在什么漏洞,而是直接粗狂的用大流量來訪問你的網站,使你的網站承受不了這么多流量而崩潰。這種模式有時候還挺難處理的,因為流量的來源可能是一種變化的,都沒有固定 IP 防不勝防。而這些攻擊你的電腦可能是來自各地的私人電腦,只是被黑客利用了的傀儡機。
5. 小結
網絡威脅與網絡安全是一個不斷演化的過程,通過學習上面的一些經典場景,可以了解到威脅的主要入侵方式。雖然很多久的漏洞都被瀏覽器、協議、軟件框架優化了,但是新變種的入侵方式往往也是舊模式上面的創新,畢竟理論基礎是逃不開的。