《源代码安全审计服务方案.docx》由会员分享,可在线阅读,更多相关《源代码安全审计服务方案.docx(57页珍藏版)》请在第一文库网上搜索。
1、源代码安全审计服务方案有限公司2023年04月1 代码审计概述32 代码审计适用范围33 代码审计方法43.1 工具化审计方法43.2 通用的代码安全审计策略43.3 PHP代码审计要点83.4 JAVA代码审计要点173.5 ASRNET代码安全审计要点274 服务流程601代码审计概述代码安全审计工作通过分析当前应用系统的源代码,熟悉业务系统,从应用系统结构方面检查其各模块和功能之间的关联、权限验证等内容;从安全性方面检查其脆弱性和缺陷。在明确当前安全现状和需求的情况下,对下一步的编码安全规范性建设有重大的意义。通过实施代码安全审计,可以以较小成本快速发现项目中的代码安全漏洞、快速评估系统
2、代码安全风险、增强系统安全性,抵御黑客恶意攻击,保护信息系统资产。我公司将按照要求针对指定系统代码进行安全审计,代码审计的内容包括但不限于:系统架构分析、业务流程分析、敏感数据梳理和敏感数据保护措施测试、系统接口安全审计、输入输出有效性校验测试(特别是SQ1注入,XSS等攻击测试)、身份验证和密码管理审计、会话管理审计、访问控制审计、加密算法和密钥管理审计、错误处理和日志管理审计、通讯安全审计、系统配置安全审计、数据库安全审计、文件管理功能审计、系统后门检查、系统功能使用权限管理审计。采用自动静态分析技术扫描某个应用程序的源代码,通过甄别和定位可能存在的薄弱环节数量,以验证该应用程序完整性,通
3、过输入数据与输出数据的对应关系出发,对目前主流的安全漏洞进行检测和验证,客观和全面地发现软件系统自身的安全隐患。2代码审计适用范围代码安全审计适用于以C、C+、C#、Java、VB、VB.Net等语言开发的应用程序,以及以RUby、PHP、ASP、JSP、AJAX和Per1等在内的各种Web技术编写的应用程序。源代码安全审计的对象可以是一个应用程序的全部代码,也可以是其中的一部分代码。3代码审计方法3.1 工具化审计方法通过白盒(代码审计)的方式检查应用系统的安全性,白盒测试所采用的方法是工具审查+人工确认+人工抽取代码检查,依照OWASP2023TOP10所披露的脆弱性,根据业务流来检查目标
4、系统的脆弱性、缺陷以及结构上的问题。3.2 通用的代码安全审计策略分析项检查具体内容可能存在的问题输入验证应用程序验证是否所有的输入数据?所有输入数据是否验证长度、范围、格式和类型?是否有依赖于端验证码?应用程序信任写出到Web页上的数据吗?程序员是否过滤或转换用户提交数据中的所有HTM1代码?在不同的信任边界之间传递数据时,在接收入口点验证数据吗?应用系统是否使用独立的数据库帐号,并且分配最小的库,表以及字段权限?数据库是否禁止或删除不必要的存储过程?将未经验证的数据写出到Web页。利用未经验证的输入来生成SQ1查询。使用不安全的数据访问编码技术,这可能增加SQ1Injection威胁。使用
5、deny方法而非a11ow来筛选输入。使用输入文件名、UR1或用户名进行安全决策。依赖于客户端验证。分析项检查具体内容可能存在的问题是否屏蔽数据库错误信息?身份验证用户名和密码是以明文的形式在未受保护的信道上发送的吗?敏感信息有专门的加密方法吗?存储证书了吗?如果存储了,是如何存储和保护它们的?执行强密码吗?执行什么样的其他密码策略?如何验证凭据?首次登录后,如何识别经过身份验证的用户?在未加密的网络链接上传递身份验证凭据或身份验证COOkie,这会引起凭据捕获或会话攻击。利用弱密码和帐户策略,这会引起未经授权的访问。授权是否进行了必要的行为审计等。在应用程序的入口点使用了什么样的访问控制?应
6、用程序使用角色吗?如果它使用角色,那么对于访问控制和审核目的来说它们的粒度足够细吗?应用是否限制访问系统资源?应用是否限制数据库访问?对于数据库,如何进行授权?使用越权角色和帐户没有提供足够的角色粒度没有将系统资源限制于特定的应用程序身份配置管理如何保护远程管理界面?如何保护配置存储?对敏感配置数据是否加密?以明文存储配置机密信息,例如,连接字符串和服务帐户证书没有保护应用程序配分析项检查具体内容可能存在的问题是否做到分离管理员特权?是否使用具有最低特权的进程和服务帐户?置管理的外观,包括管理界面使用越权进程帐户和服务帐户安装脚本有没有删除数据目录和文件名固定、配置文件扩展名问题目录权限设置不
7、当等。敏感数据是否在永久性存储中存储机密信息?如何存储敏感数据?在网络上传递敏感数据吗?在不需要存储机密信息时保存它们在代码中存储机密信息以明文形式存储机密信息在网络上以明文形式传递敏感数据会话管理如何生成会话cookie?如何交换会话标识符?在跨越网络时如何保护会话状态?如何保护会话状态以防止会话攻击?如何保护会话状态存储?在未加密信道上传递会话标识符延长会话的生存期不安全的会话状态存储会话标识符位于查询字符串中分析项检查具体内容可能存在的问题应用限制会话的生存期吗?应用程序如何用会话存储进行身份验证?加密技术使用什么算法和加密技术?应用使用自定义的加密算法吗?密钥有多长、如何保护它们?多长
8、时间更换一次密钥?如何发布密钥?使用自定义加密方法使用错误的算法或者长度太短的密钥没有保护密钥对于延长的时间周期使用同一个密钥异常管理应用程序如何处理错误条件?允许异常传播回客户端吗?异常消息包含什么类型的数据?应用是否显示给客户端太多的信息?应用在哪里记录异常的详细资料?日志文件安全吗?没有验证所有的输入参数显示给客户端的信息太多审核和日志记录应用确定进行审核的主要活动了吗?应用的应用程序是跨所有层和服务器进行审核的吗?如何保护日志文件?没有审核失败的登录没有保护审核文件没有跨应用程序层和服务器进行审核习惯问题不好的编程习惯如程序员喜欢在服务器上直接修改程序,结果导分析项检查具体内容可能存在
9、的问题致编辑器在服务器上生成了很多备份文件,而这些文件可能暴露程序源代码。如果程序员再喜欢把一些敏感信息,如数据库密码保存在文件中的话,那后果就更不堪设想。3.3 PHP代码审计要点输入验证和输出显示大多数漏洞的形成原因主要都是未对输入数据进行安全验证或对输出数据未经过安全处理,比较严格的数据验证方式为:对数据进行精确匹配接受白名单的数据拒绝黑名单的数据对匹配黑名单的数据进行编码在PHP中可由用户输入的变量列表如下:$_SERVER$_GET$_POST$_C00KIE$_REQUEST$_F11ES$_ENV$_HTTP_C00KIE_VARS$_HTTP_ENV_VARS$_HTTP_GE
10、T_VARS$HnPpOST_FI1ES$_HTTP_POST_VARS$_HTTP_SERVER_VARS我们应该对这些输入变量进行检查命令注入PHP执行系统命令可以使用以下几个函数:systemexec、passthruSheI1exec、popenproc_openpcnt1_exec我们通过在全部程序文件中搜索这些函数,确定函数的参数是否会因为外部提交而改变,检查这些参数是否有经过安全处理。防范方法:使用自定义函数或函数库来替代外部命令的功能使用escapeshe11arg函数来处理命令参数使用safe_mode_exec_dir指定可执行文件的路径跨站脚本反射型跨站常常出现在用户提交
11、的变量接受以后经过处理,直接输出显示给客户端;存储型跨站常常出现在用户提交的变量接受过经过处理后,存储在数据库里,然后又从数据库中读取到此信息输出到客户端。输出函数经常使用:echo、print、Printf、VPrintf、o对于反射型跨站,因为是立即输出显示给客户端,所以应该在当前的PhP页面检查变量被客户提交之后有无立即显示,在这个过程中变量是否有经过安全检查。对于存储型跨站,检查变量在输入后入库,又输出显示的这个过程中,变量是否有经过安全检查。防范方法:如果输入数据只包含字母和数字,那么任何特殊字符都应当阻止对输入的数据经行严格匹配,比如邮件格式,用户名只包含英文或者中文、下划线、连字
12、符对输出进行HTM1编码,编码规范>(())##&"'%60文件包含PHP可能出现文件包含的函数:inc1ude、inc1ude_once、require、require-onceshow_sourcehigh1ight_fi1e、readfi1efi1e_get_contentSAfopen、fi1e防范方法:对输入数据进行精确匹配,比如根据变量的值确定语言en.phpcn.php,那么这两个文件放在同一个目录T,1anguage/,.$_POST41ang,.,.hp,那么检查提交的数据是否是en或者Cn是最严格的,检查是否只包含字
13、母也不错通过过滤参数中的/、.等字符 代码注入PHP可能出现代码注入的函数:eva1、preg_rep1ace+/eassertca11_user_funcca11_user_func_arrayncreate_function查找程序中程序中使用这些函数的地方,检查提交变量是否用户可控,有无做输入验证。防范方法:输入数据精确匹配白名单方式过滤可执行的函数 SQ1注入SQ1注入因为要操作数据库,所以一般会查找SQ1语句关键字:insert、de1eteupdatese1ect,查看传递的变量参数是否用户可控制,有无做过安全处理防范方法:使用参数化查询 XPath注入Xpath用于操作xm1,我
14、们通过搜索xpath来分析,提交给xpath函数的参数是否有经过安全处理防范方法:对于数据进行精确匹配 HTTP响应拆分PHP中可导致HnP响应拆分的情况为:使用header函数和使用$_SERVER变量。注意PHP的高版本会禁止HnP表头中出现换行字符,这类可以直接跳过本测试。防范方法:精确匹配输入数据检测输入输入中如果有r或n,直接拒绝 文件管理PHP的用于文件管理的函数,如果输入变量可由用户提交,程序中也没有做数据验证,可能成为高危漏洞。我们应该在程序中搜索如下函数:copy.rmdir、un1ink、de1ete、fwrite、ChmOd、fgetc、fgetcsv、fgetsfgetssfi1e、fi1e_get_contentsfread、readfi1e、ftruncatefi1e_put_contentsfputcsv.fputs,但通常PHP中每一个文件操作函数都可能是危险的。防范方法:对提交数据进行严格匹配限定文件可操作的目录 文件上传PHP文件上传通常会使用move_up1oaded_fi1e,也可以找到文件上传的程序进行具体分析防范方式:使用白名单方式检测文件后缀上传之后按时间能算法生成文件名称上传目录脚本文件不可执行注意为00截断变量覆盖PHP变量覆盖会出现在下面