Fortify SCA 的工作原理:
Foritfy SCA 首先通过调用语言的编译器或者解释器把前端的语言 代码(如 JAVA,C/C 源代码)转换成一种中间媒体文件 NST(Normal Syntax Tree)将其源代码之间的调用关系,执行环境,上下文等分析 清楚。然后再通过上述的五大分析引擎从五个切面来分析这个 NST, 匹配所有规则库中的漏洞特征,一旦发现漏洞就抓取出来。后形成 包含详细漏洞信息的 FPR 结果文件,用 AWB 打开查看。
Fortify软件
强化静态代码分析器
使软件更快地生产
“将FINDBUGS XML转换为HP FORTIFY SCA FPR | MAIN | CA特权身份管理员安全研究白皮书?
强化针对JSSE API的SCA自定义规则滥用
允许所有的行动
应用程序不检查服务器发送的数字证书是否发送到客户端正在连接的URL。
Java安全套接字扩展(JSSE)提供两组API来建立安全通信,一个HttpsURLConnection API和一个低级SSLSocket API。
HttpsURLConnection API默认执行主机名验证,源代码审计工具fortify报告中文插件,再次可以通过覆盖相应的HostnameVerifier类中的verify()方法来禁用(在GitHub上搜索以下代码时,大约有12,800个结果)。
HostnameVerifier allHostsValid = new HostnameVerifier(){
public boolean verify(String hostname,SSLSession session){
返回真
}
};
SSLSocket API不开箱即可执行主机名验证。以下代码是Java 8片段,仅当端点标识算法与空字符串或NULL值不同时才执行主机名验证。
private void checkTrusted(X509Certificate [] chain,String authType,SSLEngine engine,boolean isClient)
throws CertificateException {
...
String identityAlg = engine.getSSLParameters()。
getEndpointIdentificationAlgorithm();
if(identityAlg!= null amp;amp; identityAlg.length()!= 0){
checkIdentity(session,chain [0],identityAlg,isClient,
getRequestedServerNames(发动机));
}
...
}
当SSL / TLS客户端使用原始的SSLSocketFactory而不是HttpsURLConnection包装器时,识别算法设置为NULL,因此主机名验证被默认跳过。因此,如果攻击者在客户端连接到“domain.com”时在网络上具有MITM位置,则应用程序还将接受为“some-evil-domain.com”颁发的有效的服务器证书。
这种记录的行为被掩埋在JSSE参考指南中:
“当使用原始SSLSocket和SSLEngine类时,源代码审计工具fortify规则库,您应该始终在发送任何数据之前检查对等体的凭据。 SSLSocket和SSLEngine类不会自动验证URL中的主机名与对等体凭
FortifySCA支持源代码安全风险评估的语言
支持的语言业界,跨层、跨语言地分析代码的漏洞的产生:C, C , .Net,
Java, JSP,PL/SQL, T-SQL, XML, CFML, Javascript, PHP, ASP,华中源代码审计工具fortify, VB, VBscript;
支持的平台,基本上所有平台都支持:Windows, Solaris, Red Hat Linux,
Mac OS X, HP-UX,源代码审计工具fortify服务商, IBM AIX;
IDE支持 VS, Eclipse, RAD, WSAD。
源代码审计工具fortify服务商-华克斯由苏州华克斯信息科技有限公司提供。苏州华克斯信息科技有限公司是江苏 苏州 ,行业软件的见证者,多年来,公司贯彻执行科学管理、创新发展、诚实守信的方针,满足客户需求。在华克斯领导携全体员工热情欢迎各界人士垂询洽谈,共创华克斯更加美好的未来。