Fortify软件
强化静态代码分析器
使软件更快地生产
“将FINDBUGS XML转换为HP FORTIFY SCA FPR | MAIN | CA特权身份管理员安全研究白皮书?
强化针对JSSE API的SCA自定义规则滥用
允许所有的行动
应用程序不检查服务器发送的数字证书是否发送到客户端正在连接的URL。
Java安全套接字扩展(JSSE)提供两组API来建立安全通信,一个HttpsURLConnection API和一个低级SSLSocket API。
HttpsURLConnection API默认执行主机名验证,再次可以通过覆盖相应的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 && identityAlg.length()!= 0){
checkIdentity(session,chain [0],源代码审计工具fortify报告中文插件,identityAlg,isClient,
getRequestedServerNames(发动机));
}
...
}
当SSL / TLS客户端使用原始的SSLSocketFactory而不是HttpsURLConnection包装器时,识别算法设置为NULL,因此主机名验证被默认跳过。因此,如果攻击者在客户端连接到“”时在网络上具有MITM位置,则应用程序还将接受为“”颁发的有效的服务器证书。
这种记录的行为被掩埋在JSSE参考指南中:
“当使用原始SSLSocket和SSLEngine类时,源代码审计工具fortify服务商,您应该始终在发送任何数据之前检查对等体的凭据。 SSLSocket和SSLEngine类不会自动验证URL中的主机名与对等体凭
Fortify软件
强化产品包括静态应用程序安全测试[11]和动态应用程序安全测试[12]产品,以及在软件应用程序生命周期内支持软件安全**或可重复和可审计的安全行为的产品和服务。 13]
2011年2月,Fortify还宣布了Fortify OnDemand,一个静态和动态的应用程序测试服务。[14]
静态代码分析工具列表
HP WebInspect
惠普新闻稿:“惠普完成Fortify软件的收购,加速应用程序生命周期安全”2010年9月22日。
跳转软件搜索安全漏洞(英文),,2004年4月5日
2004年4月5日,跳起来加强软件的新方法
跳起来^桑德,保罗;贝克,莉安娜B.(08-09-08)。 “惠普企业与Micro Focus软件资产交易达88亿美元。”路透社。已取消2010-09-13
跳起来^“开源社区的质量和解决方案”于2016年3月4日在Wayback机上归档。
跳起来^“软件安全错误”归档2012年11月27日,在Wayback机。
跳起来“JavaScript劫持”于2015年6月23日在Wayback机上存档。
跳起来^“通过交叉构建注入攻击构建”
跳起来“看你所写的:通过观察节目输出来防止跨站脚本”
跳起来^“动态污染传播”
跳起来强化SCA
跳起来^ Fortify Runtime
惠普强化治理
跳高^ SD Times,“惠普建立了安全即服务”2011年2月15日。
Fortify软件
强化静态代码分析器
使软件更快地生产
“将FINDBUGS XML转换为HP FORTIFY SCA FPR | MAIN | CA特权身份管理员安全研究白皮书?
强化针对JSSE API的SCA自定义规则滥用
我们的贡献:强制性的SCA规则
为了检测上述不安全的用法,我们在HP Fortify SCA的12个自定义规则中对以下检查进行了编码。这些规则确定了依赖于JSSE和Apache HTTPClient的代码中的问题,因为它们是厚客户端和Android应用程序的广泛使用的库。
超许可主机名验证器:当代码声明一个HostnameVerifier时,该规则被触发,并且它总是返回'true'。
<谓词>
<![CDATA [
函数f:f.name是“verify”和f.enclosingClass.supers
包含[Class:name ==“javax.net.ssl.HostnameVerifier”]和
f.parameters [0] .type.name是“java.lang.String”和
f.parameters [1] .type.name是“javax.net.ssl.SSLSession”和
f.returnType.name是“boolean”,f包含
[ReturnStatement r:r.expression.ctantValue matches“true”]
]]>
过度允许的信任管理器:当代码声明一个TrustManager并且它不会抛出一个CertificateException时触发该规则。抛出异常是API管理意外状况的方式。
<谓词>
<![CDATA [
函数f:f.name是“checkServerTrusted”和
f.parameters [0] .type.name是“java.security.cert.X509Certificate”
和f.parameters [1] .type.name是“java.lang.String”和
f.returnType.name是“void”而不是f包含[ThrowStatement t:
t.expression.type.definition.supers包含[Class:name ==
“(javax.security.cert.CertificateException | java.security.cert.CertificateException)”]
]]>
缺少主机名验证:当代码使用低级SSLSocket API并且未设置HostnameVerifier时,源代码审计工具fortify规则库,将触发该规则。
经常被误用:自定义HostnameVerifier:当代码使用HttpsURLConnection API并且它设置自定义主机名验证器时,该规则被触发。
经常被误用:自定义SSLSocketFactory:当代码使用HttpsURLConnection API并且它设置自定义SSLSocketFactory时,该规则被触发。
我们决定启动“经常被滥用”的规则,江苏源代码审计工具fortify,因为应用程序正在使用API,并且应该手动审查这些方法的重写。
规则包可在Github上获得。这些检查应始终在源代码分析期间执行,以确保代码不会引入不安全的SSL / TLS使用。
AuthorAndrea Scaduto |评论关闭|分享文章分享文章
标签TagCustom规则,CategoryApplication安全性中的TagSDL,CategoryCustom规则