我一直堅信混淆本質上是無用的。混淆後的代碼並非不可能閱讀,只會更難閱讀。我相信,熟練的攻擊者能夠將混淆後的代碼重新帶入可讀性更高的狀態。
但是, OWASP建議對移動客戶端使用混淆,
因此,我的問題是:混淆是否能帶來可衡量的安全性收益?具體來說,它的好處超過了增加的成本,複雜性和降低的性能。
注意:當我說“混淆”時,我是在談論為防止反向工程而採取的有意識步驟。編譯器優化儘管使程序集不那麼容易閱讀,但其目的是提高性能,而不是防止反向工程。
我一直堅信混淆本質上是無用的。混淆後的代碼並非不可能閱讀,只會更難閱讀。我相信,熟練的攻擊者能夠將混淆後的代碼重新帶入可讀性更高的狀態。
但是, OWASP建議對移動客戶端使用混淆,
因此,我的問題是:混淆是否能帶來可衡量的安全性收益?具體來說,它的好處超過了增加的成本,複雜性和降低的性能。
注意:當我說“混淆”時,我是在談論為防止反向工程而採取的有意識步驟。編譯器優化儘管使程序集不那麼容易閱讀,但其目的是提高性能,而不是防止反向工程。
編碼混淆有兩個好處:
@SteveSether在他的評論中加倍正確-幾乎找不到實際的測量,並且許多代碼庫是出於專有原因*而不是出於安全性原因而被混淆。
但是出於安全和專有的原因,代碼混淆的價值與其不對稱質量相關聯-混淆的價格要比反混淆的價格便宜。
*通過“專有理由”,我的意思是“為了保持市場競爭優勢而希望使自己的代碼和算法更私密或更難以復制的願望。”公司和個人都容易出現這種趨勢。
在我看到的混淆代碼(主要是在病毒和 rootkits 中)上,只要有可能就可以從Internet接收到的所有內容(郵件, ftp,web,dns等(在請求,日誌,文件傳輸中),反混淆代碼所需的時間足以找到服務器地址等基本信息,殭屍網絡的管理員ID 和散列的密碼,或病毒的敏感字符串或庫調用大部分都計入分鐘。
因此,就防止奇怪代碼而言,這並不是一項艱鉅的工作(如果不瑣碎的話)。
另一方面,構建這類代碼的可編輯源可能會花費很多時間(如果代碼很大,則需要幾天,幾週甚至更多的時間才能計算出來。無論如何,模糊化過程的進行越多,它們的效率就越高。
關於OWASP的建議,我同意:混淆意味著人力資源,因此它們代表了一些成本,從而使盜版行為對吸引力降低了。
關於 可衡量性
...抱歉,但是我不能!根據 誰 可能會對您的代碼感興趣, 的哪一部分以及您的代碼 為什麼 。安全利益
的code>
總的來說,我自己的建議是:使用混淆本質上不是一個壞主意,但
要更加清楚:不要混淆代碼以隱藏秘密鍵/函數,以使其比未混淆時更安全!
混淆的另一點是,使攻擊者更難拒絕其逆向工程活動。
如果您擁有一台服務器,該服務器允許任何向其發送“ Hello foobar”字符串的客戶端,並且有人利用了它,可能很難在法庭上證明犯罪者確實有攻擊意圖,而不僅僅是誤解了您的許可協議並假定允許這樣做。如果您的客戶端使用混淆後的密鑰(包含在客戶端自身中)向服務器進行身份驗證,則在安全性方面將得不到什麼好處,但是利用服務器的人將很難證明他們是偶然獲得了該密鑰,而不是通過有意的逆向工程。
混淆使反向工程程序的時間成本大大增加。儘管從混淆程序中提取一些小秘密可能很快,但是製作該程序的非混淆版本的工作僅是重寫它的競爭對手。提取一種新穎的算法是可能的,但並非不重要。
本質上令人困惑的代碼是可以推理的,但不能重用。
代碼令人困惑的是大量CS研究的主題...您的公理是,本質上毫無價值的迷惑em>將引起爭議。
我建議克里斯蒂安·柯伯格(Christian Collberg)和納格拉·賈斯維爾(Nagra Jasvir)推薦的書機密軟件:模糊處理,水印和防篡改軟件保護。
當發現並利用您的軟件中的可利用錯誤時,它將更有可能是由積極主動且資金雄厚的攻擊者專門針對您(或正在使用您軟件的人)而不是skript進行攻擊的小伙子,勒索軟件等。
在大多數情況下,我認為您寧願由whitehat或grayhat研究人員發現軟件中的錯誤,將skript小子和勒索軟件作為第二選擇,並說明級別的攻擊者,例如最壞的情況。但是您需要撥打電話。