題:
如何查看後門代碼?
Andrew Russell
2011-05-10 17:48:59 UTC
view on stackexchange narkive permalink

我有一個代碼庫,需要代碼審查才能評估後門程序。

代碼太大,無法全部審查,您將建議如何解決該問題。

這是一個帶有oracle數據庫的Java Web應用程序,代碼是從超大型產品中定制的。

定制幾乎涵蓋了所有代碼庫,但是我可以自動識別定制的代碼。 / p>

問題在於,現在所有的答案都將後門理解為簡單的網絡後門,但它也可能是“復活節彩蛋”。例如,ATM中的邏輯後門程序使壞人可以從ATM中提取所有資金。
@VP01-這就是為什麼您需要人工和工具相結合的原因。一個人在合理的時間內無法通過一百萬行代碼,但更有可能發現邏輯炸彈。
@Rory Alsop-是的,正確的工具,人員和業務知識。但是一切都應該與開發一起完成。之後,真的很難付錢給分析師做魔術或購買特定工具。因此,我認為審查後門代碼的最佳方法是與開發一起進行,而不是事後進行。
@VP01-在理想的世界中,絕對可以,但是OP已經具有代碼庫,因此在這種情況下,我們尋求最好的解決方法。
是的,但是請記住,那些盯著“如何審查後門代碼?”的人會來這裡,也許對他們來說,還為時不晚;-)
感謝大家的有見地的評論,在這種情況下風險不高。
五 答案:
D.W.
2011-05-11 05:40:58 UTC
view on stackexchange narkive permalink

最重要的是:您很困惑。如果您擔心其中一位開發人員故意在該代碼庫中隱藏了後門,則您不現實地希望知道是否存在後門。生活很糟糕。

評論:這裡的一些人建議您可以通過檢查代碼或使用靜態分析工具等來檢查後門。不要相信如果他們認為這很可能檢測到故意隱藏的後門,他們就會自欺欺人。我認為,這些答案過於樂觀,可能會給您帶來虛假的安全感。 (我知道我會這樣說並棄掉其他評論員,以使自己不受歡迎,但我有責任向您提供我誠實,坦率的建議。)

建議和緩解措施:關於您應該做什麼,我認為您需要向我們詳細介紹該軟件的功能,它與您的業務之間的關係以及如果擁有後門的後果。以下是您可能會考慮的一些通用緩解措施,具體取決於情況:

  • 風險轉移。提供該代碼沒有後門的保證,並附有主要的經濟處罰條款(如果有)。 (請注意,如果存在後門,則發現它的機率很低,因此,如果發現後門,則其懲罰必須與檢測到它的概率的倒數成比例地增加。)

  • 隔離。。您可以嘗試隔離後門程序的影響,以使其僅影響此軟件的功能,並且攻擊您其他系統的機會有限。您可以在虛擬機中運行它,將其從網絡中防火牆屏蔽,等等。也可以將其從網絡中防火牆屏蔽,從而使壞人更難激活後門。

  • 監視。。在某些情況下,可以執行外部監視以檢測非法活動。例如,在老虎機聯合中,您可以監視所收取的金額,所支付的金額,並且從統計上講,這兩者之間應具有牢固的關係;如果您看到付款超出預期金額超過五個標準差,那可能是引起關注的一個很好的理由。再舉一個例子,在銀行,您可以使用兩次記賬簿並跟踪一些匯總指標,例如消費者的投訴率以及消費者對收費提出異議的頻率。這類監視技術是特定於您的特定業務的,但可能可以有效地檢測出惡作劇。

防範故意的後門程序,它們可能會或可能不會在任何特定情況下都適用,但是如果您很幸運,它們可能總比沒有好。

我今天剛剛坐下來,複習了1M +線路代碼庫,並提出了類似的懷疑。(發現一名10年前離開的開發人員將我們的某些代碼帶給了另一家公司,因此我們想知道他們是否留下了任何討厭的東西。風險很小,但也許值得檢查。)回顧代碼,我意識到獲得100%的肯定是乾淨的是徒勞的。這是我非常熟悉的代碼庫,並且參與了很多年的重寫和添加。我無法想像嘗試審核對我來說是全新的東西。
Rory Alsop
2011-05-10 18:46:17 UTC
view on stackexchange narkive permalink

我將從結構概述開始-從設計角度來看,代碼的各個部分是否定義明確?例如,您是否在整個代碼庫中都具有用於這些目的的驗證代碼,輸入和輸出功能等,或者每個功能都是單獨的嗎?您是否具有功能上安全的代碼(通常某些樣式構造不會影響數據流的安全性)

如果您有一個安全包裝器可以對每個功能進行身份驗證,則可以對這些功能進行快捷檢查函數,並僅檢查包裝函數的用法。

如果代碼庫非常大,則需要運行Fortify之類的工具(或@AviD將能夠使用的其他工具)。名稱:-)首先解決問題,但是所有工具都缺乏上下文智能。它們基於典型簽名進行識別,因此您會得到錯誤的假陽性(甚至可能是假陰性),這就是為什麼擁有良好的概述可以幫助您識別工具無法發現的風險的原因

該工具縮小了可能的風險範圍,並確定了大多數問題,因為工具相對便宜,然後人工驗證並添加到工具的輸出中,將其置於應用程序環境中。

在聽起來過於商業化的風險我建議使用經驗豐富的安全顧問的服務,該顧問不僅完全了解代碼審查工具並且精通Java + Oracle,而且還具有基於業務和安全風險架構的經驗。

好方法。首先確定入口點,看看它們如何處理數據,進行哪些身份驗證以及如何進行身份驗證。然後查看下一個數據在哪里以及如何處理。沖洗,重複。
:)。是的,您幾乎涵蓋了幾乎所有內容...請參閱下面的內容。
胡扯。 Fortify和其他靜態分析工具不太可能檢測到故意隱藏的後門。沒有顧問能夠審查一百萬個LOC代碼庫,並告訴您它沒有後門程序,甚至沒有檢測到後門程序(如果存在)的可能性很大。顧問的經驗如何並不重要。
有趣的是,這與[OWASP應用程序安全審查標準]保持一致(https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_Project)
AviD
2011-05-11 05:12:11 UTC
view on stackexchange narkive permalink

@Rory幾乎涵蓋了如何進行審核...

我要補充一點的是,您應該知道自己在尋找什麼,而不是通常只是“後門”(類似於@ VP01在其頂部的評論中所說)。

例如您是否正在尋找可以這樣做的後門?

  • 身份驗證旁路(通過特殊身份或超級密碼);
  • 魔術參數(ala“?admin = 1”);
  • 一分錢竊取(就像在《超人3》中一樣);
  • 信息竊取(例如,在後端通過電子郵件發送信用卡號);
  • ...其他。

如果您知道要尋找的後門的類型,您不必平等地集中於數百萬行代碼的每一行,您可以確定優先級。

我還要補充一點,有一些自動化工具可以編寫非常豐富的腳本,因此它支持基於人工查找您定義的後門的特定類型情報和情境,然後將其應用於數百萬個LOC ...


PS您可能對以下一些相關問題感興趣:

我不相信有任何自動化工具可能會檢測到故意隱藏的後門。
-1
我認為問題在於您正在考慮傳統的自動化工具模型ala fortify splint等。有一些更新的工具(例如上面的Checkmarx,還有其他一些)工作方式截然不同。
@AviD,我非常懷疑是否有可能編寫一個通用查詢來檢測故意隱藏的後門程序(通常)。
@D.W。啊,看-我同意你的意見,*如果*您使用的是“一般”一詞。但是,正如我所說,如果您限制了要尋找的內容,並定義了*一種特定類型的後門*,則有可能。複雜,並且取決於執行此操作的人員的技能,但是仍然可能。
這樣考慮:信用卡進入系統,可以用代碼識別。這樣就可以使該數據段的任何使用相關聯,無論其被如何混淆,並跟踪數據去往或使用的任何地方。是的,您需要指定*什麼*對您很有趣-例如您指定了電子郵件和臨時文件,但是錯過了原始套接字-但是可以跟踪和突出顯示所有“可疑”用法(對於給定值的“可疑”)。
VP.
2011-05-11 01:58:14 UTC
view on stackexchange narkive permalink

我認為羅里(Rory)的答案涉及內核,但是時間在這裡確實很重要。在生產中已經存在大量代碼,記錄不良,未經測試的代碼之後進行代碼審查(我不知道這裡是否是如此),現在就“太遲了”,無法正確執行。即使使用最好的工具和Java / Oracle,外部分析師也將很難理解業務邏輯缺陷(有意植入其中)。在我看來,從一開始就進行代碼分析是必須的。

快來不及了?為時已晚,不只是幾乎。理解有意植入的邏輯缺陷不僅“更難”,而且您還面臨著一個非常不可能的任務。代碼分析不太可能給您很高的機會,以在一百萬行的舊代碼庫中檢測到故意植入的後門程序,除非您真的很幸運或壞蛋不老練。
anonymous
2011-05-10 19:48:59 UTC
view on stackexchange narkive permalink

無論使用哪種語言,都有一些方法對於每次應用程序審查都是通用的。這裡有一些提示:

  • 要觀看大代碼中的更改,您可以使用差異工具(就像我在這裡提到的:代碼審查策略);
  • 設置環境,因此您可以登錄並查看任何可疑的網絡請求;
  • 非常簡單的方法是使用“ grep”之類的工具-有助於處理一些基本且顯而易見的惡意代碼;
是的,但是監視網絡請求和grepping代碼只會捕獲一些非常基本的後門。也許這使您有1%的機會檢測到後門,也許這是5%的機會,但是機會很小。如果有人在您的腿上竊取一百萬個LOC的舊代碼庫並告訴您“我擔心它可能已經有後門”,則代碼差異將無濟於事。
首先,我是否也應該說“總比沒有好”?顯然,要增加找到後門的機會,就需要進行完整的代碼審查。其次,在我的回答中,我不再重複這裡已經提到的內容。第三,它實現自動化,在一定程度上有所幫助。我不會說機會總是像您提到的那樣低。這取決於。最後,在您自己的答案中,除了最後一個,您大多提到緩解措施。這也是正確的點。但是我的答复確實側重於檢測,而不是緩解或預防。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...