Java Web 工程源代码安全审计实战,第 3 部分: 文件途径操作
前语
本文是 JavaWeb 工程源代码安全审计实战的第 3 部分,根据 WebGoat 工程,解说四种高危缝隙:文件途径操作、体系日志诈骗、线程安全和资源未开释问题。要点评论的是源码审计思路和攻防演练实战。
Web 运用要挟之文件途径操作
技能原理
当进犯者能够指定文件名、文件途径等文件操作的参数,就有或许越权拜访正常情况下无法抵达的体系资源。
问题剖析 PathBasedAccessControl.java129
源代码审计发现 PathBasedAccessControl.java 第 129 行 File() 办法。进犯者有或许操控文件途径越权拜访或许修正被维护的其他文件。该文件内容被作为页面元素显现。
图 1. 问题代码段
在已布置的 WebGoat 工程,发动出产环境。模仿进犯者登录,在左边导航目录下点选“Access Control Flaws - Bypass a Path Based Access Control Scheme”, 任选一个 combox 中的 xx.html 文件,点击“View Profile”提交。
进犯场景
图 2. 文件途径操作进犯场景
处理方案
快速修正
处理 WebGoat 工程的示例的文件途径操作问题,能够在 PathBasedAccessControl.java 第 97 行办法,增加对文件途径的校验。代码片段如下:
图 3. 整改文件途径操作的代码
布置整改后的代码,从头运转进犯场景,不行再现进犯。
触类旁通
一般的,为避免文件途径操作问题,开发者首先要运用正确的体系函数,其次能够自定义根据需求对文件操作参数进行过滤, 还能够运用服务器安全拜访结构。供给以下五种思路:
1. 运用标准途径 getCanonicalPath()
进犯者能够用包括 ../序列的参数来指定坐落特定目录之外的文件,然后违背程序安全战略,引发途径遍历缝隙,进犯者或许向恣意目录上传文件。
Java 言语对途径的操作有 getAbsolutePath() 获取肯定途径和 getCannonicalPath() 获取标准途径。getCannonicalPath() 首先将途径名转换成肯定途径名,这与调用 getAbsolutePath() 办法的作用相同。然后用与体系相关的方法将它映射到其专一途径名。这一般涉及到从途径名中移除剩余的称号(比方 "." 和 "..")、剖析符号衔接(关于 UNIX 渠道),以及将驱动器名转换成标准大小写方法(关于 Microsoft Windows 渠道)。所以应该尽量运用标准途径,躲避进犯者或许运用的剩余的剖析符号。
2. 开发者为运用到的文件操作参数进行输入验证,过滤字符(如“.”和“..”)
3. 针对运用场景,约束文件类型。比方运用的图片文件只能是后缀.png, .jpg 而不或许是.bat, .sh。 主张加强对文件的判别,要经过文件头而不仅仅是文件后缀来判别。
4.Java 安全管理器 permission Java.io.FilePermission
5. 服务器安全装备战略文件。能将所能读取的文件限定在特定的目录下。怎么装备安全战略文件,和详细运用的服务器类型相关
回页首
Web 运用要挟之体系日志 (Log) 诈骗和隐私走漏
当进犯者有或许写 Log 信息的时分,就有或许结构虚伪信息,利诱 Log 读者,利诱体系运维调试人员调试体系故障。Log 诈骗能够帮忙进犯者展开大型可继续进犯 (APT)。
源代码审计发现 HammerHead.java 第 271 行记载未经校验的 message,代码片段如下:
图 4. 问题代码段
在已布置的 WebGoat 工程,发动出产环境。
模仿进犯者登录,在左边导航目录下点选“Injection Flaws - Log Spoofing”, 在文本框输入“Smith%0d%0aLogin Succeeded for username: admin”, 提交后假定服务器 Log 这段文本,将会在 Log 文件中新的一行中写入虚伪信息“Succeeded for username: admin”。进犯的小窍门在换行符号n,也便是转码后的 %0d%0a, 换行使 Log 中的诈骗信息看起来更实在。
WebGoat 的这个示例项目仅仅描述性展现,没有真实代码履行写服务器日志。
处理方案
1. 换行符”n”。Log 诈骗最要害的元素便是换行符,假如 Log 信息用黑名单过滤,”n”必定要出现在黑名单中。假如 Log 信息用白名单过滤,”n”必定不能出现在白名单中
2. 开发完结,在出产环境上线之前,要悉数删去 System.out()
3. 分级 Log 开关。软件开发版别和发布版别,翻开不同等级的 Log 开关,明晰记载的一起将损害降到最小规模
4. 操控 Log 内容。不以任何方法记载用户的灵敏信息,哪怕是加密过的
5. 不记载隐私信息。当用户隐私信息被写到 Log 中时,就造成了隐私走漏。尤其是暗码信息,即使是加密之后的暗码信息,也不该该被存储到 Log 中。因为任何加密算法都有被破解的或许
WebGoat 工程演示了几十个 Web 问题事例,比方上传并履行歹意文件等等。本文篇幅有限,不一一列举其他事例。
以上议论了 Web 高危缝隙的审计。下面叙述几个因为 Java 言语特性,简单引导开发者犯下的编程过错。这些代码缺点使得工程不强健,需求定点审计排查、整改。
回页首
[1] [2] 黑客接单网