来自 CC防护 2021-02-20 19:04 的文章

国外服务器防御_能不能防住_云防御

国外服务器防御_能不能防住_云防御

与Unicode相关的漏洞在过去一年中呈上升趋势。去年,jonathanbirch的一个黑帽子演示详细说明了字符规范化NFC/NFKC如何导致URL和主机操作中的故障。最近在重置密码功能中发现了两个漏洞。两个受影响的应用程序是Django和Github。在上一篇博客文章中,我们介绍了API转换代码点的潜在副作用。在本文中,我们展示了我们的一个发现:在TLS通信中影响oraclejdk和openjdk主机验证的漏洞。我们还包括了来自apachehttp客户端的一个类似弱点的细节。与Unicode相关的漏洞在过去一年中呈上升趋势。在去年的NFC/NFC中,详细介绍了NFC和NFC的规范化操作。最近,在密码重置功能中发现了两个漏洞。受影响的两个应用程序是Django和Github。在上一篇博客文章中,我们介绍了API转换代码点的潜在副作用。在本文中,我们展示了我们的一个发现:在TLS通信中影响oraclejdk和openjdk主机验证的漏洞。我们还包括了来自apachehttp客户端的一个类似弱点的细节。根本原因在许多情况下,为了向用户显示字符串,已经实现了字符转换。在大多数语言中,小写和大写操作将根据Unicode标准转换特定字符。对于ASCII范围内的字符,行为是可预测的。但是,在特定情况下,某些非ASCII字符可以转换为ASCII范围内的字符。当两个不同的Unicode字符序列被转换成相同的序列时,我们考虑字符冲突。这些转换可能会干扰安全验证的上下文。下面是几个例子,其中一个Unicode字符将转换为ASCII范围内的一个或多个字符。蟒蛇"\u00DF".upper()=>"SS"Java东阿西伊("\u2116dejs.org网站") => "nodejs.org网站".NET版新建URI("https://faceboo\u212A.com")。主机=>"https://facebook.com"如果这些转换发生在安全验证期间或之后,则可能会产生安全影响。它可能导致不同的输入字符串在转换后被认为是相等的。案例研究1:Oracle主机名检查器(CVE-2020-14577)以下代码取自HostnameChecker类。它比较它连接到的主机(名称)和从SSL/TLS证书(模板)中提取的主机。private boolean isMatched(字符串名称,字符串模板,boolean chainsToPublicCA){//规范化为Unicode,ddos防御程序,因为PSL是Unicode格式。名称=图尼科德(东阿西伊(名称));模板=图尼科德(东阿西伊(模板));[....]返回matchAllWildcards(name,template);转变图尼科德()与东阿西伊()可能导致意外的代码点。一些扩展的Unicode字符被转换为ASCII范围,从而导致与其他字符冲突。存储在名称或模板中的最终主机名将无法正确描述远程主机。输入图尼科德(东阿西伊(输入)U+FF41安一U+FF45 E型e[…] U+212AKkU+2116ℕ不U+2121℡电话大约321个Unicode代码点有问题,可能导致此漏洞。风险攻击者可能会创建带有Unicode字符U+FF41的恶意证书或证书签名请求(CSR),从而与包含"a"的域名发生冲突。这是可能的,因为公共名称是支持UTF-8的X.509证书中subject字段的一部分。在实践中,主机检查只是验证的一部分,第二部分是信任控制链。很难让一个互联网根机构用一个特殊的通用名称来签署一个CSR。除非当局的安全控制不力,否则这是不可能的。有两种非常狭隘的情形可以获得所需的信任链:目标客户机信任内部证书颁发机构(即:Windows服务器证书颁发机构允许使用UTF-8扩展字符的CSR)。攻击者已经破坏了一个证书颁发机构,他隐藏了带有Unicode冲突的恶意证书,这是非常不可能的。正如您所看到的,尽管这个弱点很危险,但它不容易让攻击者拦截来自所有Java应用程序的流量。概念证明如果你想自己看看这个弱点,我们已经发布了提交给Oracle和OpenJDK的概念证明,ddos200g防御价格,其中包括生成恶意证书的python脚本。以下是恶意证书的视图:Microsoft Active Directory证书服务是允许主机名使用扩展Unicode字符的系统之一。建议解决方案回避东阿西伊()可以解决这个问题,因为它避免了与使用特殊Unicode字符的域的潜在冲突。时间轴报告的脆弱性:2020年1月14日确认调查已开始:2020年1月14日Fix发布时间:2020年7月案例研究2:HTTPClient 4.5.10Apache库HTTPClient也有类似的弱点。在HTTPClient 4.4及更高版本中,PublicSuffixMatcherLoader类容易受到对Unicode编码(CWE-176)的不当处理的攻击。该类由DefaultHostnameVerifier类使用,该类负责在TLS握手期间验证主机名。深入研究代码查看PublicSuffixMatcherLoader类中的matches()方法,我们可以看到它依赖于getDomainRoot()方法。公共布尔匹配(最后一个字符串域,最后一个域类型expectedType){if(域==null){返回false;}最终字符串domainRoot=getDomainRoot(域.startsWith(".") ? 域.substring(1) :域,预期类型);return domainRoot==null;}匹配的关键实现细节在getDomainRoot()方法中。在请求的域名称转换之前,阿里云escddos防御,请将其与小写的证书进行比较:public String getDomainRoot(最终字符串domain,final DomainType expectedType){[...]最终规范化字符串=域.toLowerCase(区域设置.ROOT);字符串段=标准化;字符串结果=null;转变字符串.toLowerCase()可能导致意外的代码点。与东阿西伊()在JDK实现中使用。只有两个字符可能会引起问题:开尔文度符号和大写字母I上面有一个点。输入输入.toLowerCase()K(U+212A)k(U+006b)İ(U+0130)(U+0069 U+0307)下面是一个小的概念证明,它演示了一个带有开尔文度符号的恶意证书。如果主机名验证失败,通常会引发异常。val verifier=DefaultHostnameVerifier();val cert=模拟(X509证书::类.java);`什么时候`(cert.GetSubjectX500主体())。然后返回(X500Principal("CN=montrehac\u212A.ca,OU=假,服务器ddos要怎么防御,O=假,C=CA")验证程序。验证("加利福尼亚州蒙特勒哈克",证书);风险在HTTPClient中发现的这个问题与前面提出的JDK问题具有相似的风险。但它仅限于带有字母k的域名。修复您可以查看HttpClient团队所做的提交,以获取有关修复的更多详细信息。时间轴报告的脆弱性:2020年1月9日修复漏洞:2020年1月14日发布日期:2020年1月23日结论本文总结了我们在Java运行时环境和HTTPClient库中的发现。如前所述,影响主机名检查器的弱点是不允许完全截获TLS。攻击者仍然需要获得由可信机构签名的证书。工具书类用Unicode的无点"i"破解GitHub强大的Django的衰落,利用Unicode大小写转换

,ddos攻击有办法防御