Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)
继续对Fortify的漏洞进行总结,本篇主要针对 Dynamic Code Evaluation: Code Injection(动态脚本注入) 和 Password Management: Hardcoded Password(密码硬编码) 的漏洞进行总结,如下:
1.1、产生原因:
许多现代编程语言都允许动态解析源代码指令。这使得程序员可以执行基于用户输入的动态指令。当程序员错误地认为由用户直接提供的指令仅会执行一些无害的操作时(如对当前的用户对象进行简单的计算或修改用户的状态),就会出现 code injection 漏洞。然而,若不经过适当的验证,用户指定的操作可能并不是程序员最初所期望的。
示例:在这个经典的 code injection 实例中,应用程序可以实施一个基本的计算器,该计算器允许用户指定执行命令。
...
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine
scriptEngine = scriptEngineManager.getEngineByExtension("js");
userOps = request.getParameter("operation");
Object result = scriptEngine.eval(userOps);
...
如果 operation 参数的值为良性值,程序就可以正常运行。例如,当该值为 "8 + 7 * 2" 时,result 变量被赋予的值将为 22。然而,如果攻击者指定的语言操作既有可能是有效的,又有可能是恶意的,那么,只有在对主进程具有完全权限的情况下才能执行这些操作。如果底层语言提供了访问系统资源的途径或允许执行系统命令,这种攻击甚至会更加危险。例如,JavaScript 允许调用 Java 对象;如果攻击者计划将
"
java.lang.Runtime.getRuntime().exec("shutdown -h now")" 指定为 operation 的值,则主机系统就会执行关机命令。
1.2、修复方案:
在任何时候,都应尽可能地避免解析动态代码。如果程序必须动态地解释代码,您可以通过以下方式将这种攻击获得成功的可能性降到最低:尽可能限制程序中动态执行的代码数量,将代码限制到基本编程语言的程序特定的和上下文特定的子集。程序绝对不能直接解析和执行未经验证的用户输入。而应采用间接方法:创建一份合法操作和数据对象列表,用户可以指定其中的内容,并且只能从中进行选择。利用这种方法,就绝不会直接执行由用户提供的输入。

图1.2.1:对js引擎方法执行的源代码指令添加白名单过滤
2、Password
Management: Hardcoded Password(密码硬编码)
2.1、产生原因:
使用硬编码方式处理密码绝非好方法。这不仅是因为所有项目开发人员都可以使用通过硬编码方式处理的密码,而且还会使解决这一问题变得极其困难。一旦代码投入使用,除非对软件进行修补,否则您再也不能改变密码了。如果帐户中的密码保护减弱,系统所有者将被迫在安全性和可行性之间做出选择。
例 1:以下代码用 hardcoded password
来连接数据库:...
DriverManager.getConnection(url, "scott", "tiger");
...
该代码可以正常运行,但是任何有该代码权限的人都能得到这个密码。一旦程序发布,将无法更改数据库用户“scott”和密码“tiger”,除非是要修补该程序。雇员可以利用手中掌握的信息访问权限入侵系统。更糟的是,如果攻击者能够访问应用程序的字节代码,那么他们就可以利用 javap -c 命令访问已经过反汇编的代码,而在这些代码中恰恰包含着用户使用过的密码值。我们可以从以下看到上述例子的执行结果:
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
在移动世界中,由于设备丢失的几率较高,因此密码管理是一个非常棘手的问题。

图2.1.1:使用硬编码的方式设置密码
2.2、修复方案:
绝不能对密码进行硬编码。通常情况下,应对密码加以模糊化,并在外部资源文件中进行管理。在系统中采用明文的形式存储密码,会造成任何有充分权限的人读取和无意中误用密码。至少,密码要先经过 hash 处理再存储。

图2.2.1:获取配置文件配置好的密码

图2.2.2:配置文件配置好且加密的密码
Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)的更多相关文章
- Fortify Audit Workbench 笔记 Dynamic Code Evaluation: Code Injection
Dynamic Code Evaluation: Code Injection Abstract 在运行时中解析用户控制的指令,会让攻击者有机会执行恶意代码. Explanation 许多现代编程语言 ...
- Dynamic Code Evaluation:Code Injection 动态代码评估:代码注入
- Dynamic Code Evaluation:Unsafe Deserialization 动态代码评估:不安全反序列化
- Fortify漏洞之Sql Injection(sql注入)
公司最近启用了Fortify扫描项目代码,报出较多的漏洞,安排了本人进行修复,近段时间将对修复的过程和一些修复的漏洞总结整理于此! 本篇先对Fortify做个简单的认识,同时总结一下sql注入的漏洞! ...
- Fortify漏洞修复总结
1.代码注入 1.1 命令注入 命令注入是指应用程序执行命令的字符串或字符串的一部分来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证.过滤,导致程序执行恶意命令的一种攻击方式. 问题代码: ...
- SQL Injection(SQL注入漏洞)
审计前准备: 1.安�php程序(推荐phpStudy) 2.高亮编辑器(推荐 Sublimetext Notepad++) 3.新建一个文本,复制以下变量,这些变量是审计中需要在源码中寻找的 ### ...
- Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally
继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Fina ...
- Fortify漏洞之Cross-Site Scripting(XSS 跨站脚本攻击)
书接上文,继续对Fortify漏洞进行总结,本篇主要针对XSS跨站脚步攻击漏洞进行总结,如下: 1.Cross-Site Scripting(XSS 跨站脚本攻击) 1.1.产生原因: 1. 数据通过 ...
- 解决 VS Code「Code Runner」插件运行 python 时的中文乱码问题
描述 这里整理了两种 VS Code「Code Runner」插件运行 python 时乱码的解决方案.至于设置「Auto Guess Encoding」为 true 的操作这里就不多描述了. 乱码截 ...
随机推荐
- http各类型请求方法工具总结
本文为博主原创,未经允许不得转载: 在项目中会用到各种类型的http请求,包含put,get,post,delete,formData等各种请求方式,在这里总结一下 用过比较好的请求工具,使用serv ...
- [转]npm安装教程
原文地址:https://www.cnblogs.com/lgx5/p/10732016.html 一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpa ...
- [转]使用 curl 发送 POST 请求的几种方式
HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:四种常见的 POST 提交数据方式.做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容 ...
- Java3d 案例程序
今天偶尔翻出了很久以前写的java3d程序,很怀念曾经探索java3d解析.渲染ifc数据的日子 package com.vfsd.test0621; import java.applet.Apple ...
- 快排的时间复杂度O(n) = nlogn计算过程
转载:https://www.cnblogs.com/javawebsoa/p/3194015.html 本文以快速排序为例,推导了快排的时间复杂度nlogn是如何得来的,其它算法与其类似. 对数据D ...
- 如何在LabWIndows/CVI中调用LabVIEW DLL
首先请参考官方的文档 http://digital.ni.com/public.nsf/websearch/70995EC2CA1B523386256DD4004F3DE6?OpenDocument ...
- LODOP问答部分链接
点击链接进入相关简短问答博文: 问答大全 纸张打印机 注册 table表格 clodop测试地址 字体 行间距.字间距 clodop回调函数 SET_PRINT_STYLEA 页眉页脚 超文本 条码 ...
- kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
以ngxin的配置文件为例子: nginx-deployment.yaml : apiVersion: v1 kind: ConfigMap metadata: name: nginx-cm data ...
- LeetCode 503. 下一个更大元素 II(Next Greater Element II)
503. 下一个更大元素 II 503. Next Greater Element II 题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 ...
- Redhat7.6Linux版本下,在Oracle VM VirtualBox下hostonly下IP地址配置
安装配置Linux的Redhat7.6教程见:https://www.cnblogs.com/xuzhaoyang/p/11264563.html 然后,配置完之后,我们开始配置IP地址,配置IP地址 ...