那些需要自己開發的安全需求(服務端)

小姐姐味道發表於2019-04-08

最近在實施App安全方面的方案,下面是一些思考。有些安全方面的產品需要購買,本文中的卻要自己整合。需要開發的元件很多,所以依個人經驗,簡單做了下分層,不包括App端和主機環境。

那些需要自己開發的安全需求(服務端)

資料處理

通訊層

http協議簡單易懂、使用方便,我們大多數網路應用都是基於它開發的。資料展示,移動網際網路已經佔據了大量市場,對於App端開發,已經進入了混合協議的時代。這就是通訊層,資料傳輸的通道。

請求可能來自這些地方: 一、APP。 某些移動應用 二、Web端。 大多數網頁請求或者H5 三、小程式。 被封裝的各種呼叫(大多數要遵循平臺開發方式) 四、開放平臺。 各種SASS、PASS。

通訊層的破解難度是: Socket(自有二進位制協議)>WebSocket(wss、ws等)> Https > Http。

通訊層的加密主要是提高攻擊者的分析成本,並不能夠防禦所有的攻擊。通訊層獨立的好處是可以隨時進行互動協議的切換或者升級,並不影響下方的業務與策略。

加密層

加密是由呼叫者和服務者進行約定的一個演算法層。目前,有對稱加密與非對稱加密之分。

對稱加密是指維護一個金鑰,解祕方即可通過金鑰還原出被保護的資料。比較流行的對稱加密演算法有

DES
3DES
AES
複製程式碼

對稱加密的金鑰管理比較難,容易被破解,更換起來成本也比較大,但它的速度比非對稱加密快幾個數量級。

相對應的,非對稱加密是指加密金鑰和解密金鑰不同的演算法。安全性相對較高,但執行速度比較低。常見的非對稱加密有:

RSA(耳熟能詳)
DSA
ECC
複製程式碼

這裡插個有趣的事情。某個重要的root私鑰,被倒入到一個專門的小型裝置裡。此裝置被放入保險箱,保險箱需要四個不同的人的密碼才能開啟。安全級別非常高。

而我們常說的MD5、SHA1等,並不屬於加密演算法。

驗籤層

通過對傳輸的資訊進行驗證,我們就能夠判斷資訊是否被篡改過。有些資訊,比如密碼,即使是簡單的MD5,也比將原文儲存下來好得多。

雖然DSA、RSA等,能夠對資訊進行數字簽名,但我們常用還是一些摘要演算法,也叫做Hash演算法。

摘要演算法不能對資料進行逆向解密,通常通過加鹽的方式進行摘要保護。常見的摘要演算法有:

MD5
SHA1
Bcrypt
複製程式碼

值得一提的是Bcrypt,目前應用比較廣泛。它的特點是即使是對相同的資訊進行摘要,也會生成不同的內容,隱蔽性更強。

它的加密結果類似這種,你一定見過:

$2a$10$iRdNmYoINR8QqynemTsP2OzFtM7N5pFPoBFuzAtvR6YBtov4gRt7e
複製程式碼

使用上,有些系統喜歡使用多重的摘要演算法進行計算,安全性更高一些。但一旦被猜解,就形同虛設。

多重hash:md5(md5(sha1(str))).

業務防護

但資料還是能夠偽造。業務層需要對傳入的引數進行驗證,進行真正業務意義上的判斷。比如對某些餘額操作,使用MVCC+CAS進行保護等。

請求大部分應該是冪等的,不能夠重入。偽造的資訊應該能夠通過自定義的規則被識別。

掃描工具會掃描一些類似XXE、Struts漏洞之類的,這裡是很多人的天堂。這種,建議還是買服務吧。

還有最後一道,風控系統。雖然重要,但有能力搞的公司很少,包括一些P2P系統,那就讓子彈多飛一會吧。

我覺得坑多多的優惠券就是業務防護的範疇。當然還有銀行這種,事後跨省追捕的,屬於武裝業務防護。

規範

同一類業務互動,一個http請求中既帶有requestbody,又有request params;另一個請求卻變成了post請求。後端的處理變來變去,就複雜了很多,也不利於排查問題。

此類問題還有傳輸了大量用不到的欄位,資訊巢狀層次過深,錯誤碼紊亂等。許多故障最後的原因讓人慾哭無淚。

在通訊層上,某些規範是非常重要的,值得花心思進行設計。

開發模式

開發模式是你給自己留的後門。

經過各種加密,驗籤,重入防護等元件的保護,你的系統安全性可能已經很高了。高到連你自己也被防護住了。

當你需要人工構造一些請求的時候,就會知道它的威力。通過某些開關或者灰度,可以讓你略過某些環節,直接開展對主因的分析,提高驗證的效率。

詳盡的日誌是系統遇到問題時強有力的幫手,當業務流程分支多而長的時候,呼叫鏈能顯著加快問題的處理速度。在設計伊始,便要考慮對這些功能的整合與配置,以便對關鍵環節進行調優。

End

安全很重要,售賣靠忽悠。但是不買也是要受傷害的,還是花錢。買平安。

那些需要自己開發的安全需求(服務端)

相關文章