[英]HP Fortify Validation Rules on Path Manipulation
我通過Hp Fortify運行代碼,並有一些路徑操作結果。 我了解它的背景並試圖解決。
我沒有遍歷從數據庫查詢某些路徑值以存儲輸出文件(日志,導出數據等)的所有地方,而是嘗試集中它。 所以,而不是讓File.WriteAllText()具有一些路徑+文件名,內容,我想包裝
FortifyFileWriteAllText()。 然后,在這個函數中,我先做一次路徑驗證檢查,如果有效,只允許寫繼續如...
public static bool FortifyFileWriteAllText( string fileToWrite, string content)
{
if( ! MyPathValidationRoutine( fileToWrite ))
return false;
File.WriteAllText( fileToWrite, content );
return true;
}
所以,我知道這是實際驗證和防止寫入錯誤的縮寫,但我調用Path.GetFullPath()來阻止任何此類..\\..\\..
路徑引用。 然后查看最終路徑,明確地預防像根C:,C:\\ Windows和其他一些東西,但也有一個“CLEAN”路徑列表。
那么,我將如何應用一個規則,說明進入此例程的任何事情都是好的並且已經明確檢查並且可以。
如果你做得對,強化數據流分析器將跟蹤你的數據路徑,看到一些預期的函數(iegetCanonicalPath(),pattern.matcher()等)並觸發生成TAINFLAG = VALIDATED_PATH_MANIPULATION的接收規則。 然后數據流分析器看到這個特定的TAINTFLAG,它將使問題報告靜音。 這個過程是按設計進行的。 如果你實現了FortifyFileWriteAllText()函數,並且Fortify仍然抱怨,那可能是因為fortify不喜歡你正在使用的方法。
如果您認為函數FortifyFileWriteAllText()確實阻止了PM,那么這里是自定義接收器規則,為您創建VALIDATED_PATH_MANIPULATION污點標志。 把它放到~FORTIFY_HOME / Core / config / rules目錄中使用。
<?xml version="1.0" encoding="UTF-8"?> <RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules"> <RulePackID>YOUR RULE PACK ANME HERE</RulePackID> <SKU>SKU-ANY THING HERE</SKU> <Name><![CDATA[ANY THING HERE]]></Name> <Version>1.0</Version> <Description><![CDATA[]]></Description> <Rules version="6.31"> <RuleDefinitions> <DataflowSinkRule formatVersion="6.31" language="java"> <MetaInfo> <Group name="MyCompany">Path Manipulation Remediation</Group> <Group name="Accuracy">4</Group> <Group name="Impact">3</Group> <Group name="RemediationEffort">3</Group> <Group name="Probability">4</Group> <Group name="audience">targeted,medium,broad,dev,fod</Group> </MetaInfo> <RuleID>put-your-rule-id here-with-prefix-for-future-statistics</RuleID> <VulnKingdom>Input Validation and Representation</VulnKingdom> <VulnCategory>Path Manipulation</VulnCategory> <DefaultSeverity>3.0</DefaultSeverity> <Description ref="desc.dataflow.java.path_manipulation"> <Explanation append="true"><![CDATA[This issue is being reported by "your rule name here".]]></Explanation> </Description> <Sink> <InArguments>this</InArguments> <Conditional> <Not> <TaintFlagSet taintFlag="VALIDATED_PATH_MANIPULATION"/> </Not> </Conditional> </Sink> <FunctionIdentifier> <NamespaceName> <Pattern>com.yourpackage</Pattern> </NamespaceName> <ClassName> <Pattern>yourclass</Pattern> </ClassName> <FunctionName> <Pattern>FortifyFileWriteAllText</Pattern> </FunctionName> <ApplyTo implements="true" overrides="true" extends="true"/> </FunctionIdentifier> </DataflowSinkRule> </RuleDefinitions> </Rules> </RulePack>
Path Manipulation是一種特殊類型的“資源操作”。 它的攻擊面僅限於目錄和文件。 為了修復PM,除了輸入驗證技術之外,由於每個部分的保護要求不同,您需要在3個部分中處理資源:
(1)目錄
我們需要防止../../等。我們應該使用java.io.File.getCanoncialPath()來條紋化污染部分,與原始目錄進行比較,並僅在它們匹配時使用它。
(2)FILE_SEPARATOR使用java.io.File.separator比java.io.File.System.getProperty(“file.separator”)更安全,因為第二種方法,可以通過調用System.setProperty(String)來覆蓋分隔符key,String value)或命令行參數-Dfile.separator = /。
(3)FILE_NAME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.