应用软件安全编程分析

时间:2022-01-19 03:40:28

应用软件安全编程分析

摘要:应用软件在编程实现时往往对功能和性能考虑得比较全面,但是对软件的安全性考虑明显不足。文章介绍了应用软件在编程方面存在的常见安全问题和改进的措施。

关键词:应用软件;安全编程

随着软件工程不断发展,开发出满足功能和性能要求的应用软件正变得越来越容易。但是,在网络安全形势日趋严峻的今天,要开发出安全性足够高的应用软件已不是一件易事。本文介绍了应用软件在编程方面存在的常见安全问题和改进措施。

1应用软件安全编程

应用软件安全编程顾名思义就是指在应用软件编码时充分考虑到安全性需求或要求,从而达到提升应用软件安全性的目标。为了提高软件开发人员的安全开发能力,国内有关机构推出了注册信息安全开发人员(CISD)、注册软件安全专业人员(CWASPCSSP)、注册软件安全开发人员(CWASPCSSD)等培训认证。

2应用软件编程常见安全问题

(1)身份鉴别方面在身份鉴别方面,通常容易忽视的一些问题主要有:没有对鉴别失败的次数进行限制;执行重要或者不可逆操作之前没有再次进行身份鉴别;一次身份鉴别后进行长时间的通话,没有周期性重新进行身份鉴别;身份鉴别过程可能会被绕过;依赖不可靠信息进行身份鉴别;验证数字证书不全面;处理身份鉴别的过程中泄露多余信息。(2)口令安全方面在口令安全方面,主要存在的一些问题主要有:虽然采用了强口令,但是口令的复杂度不满足安全策略要求;对于默认的初始口令,没有强制用户第一次登录时更改默认口令;对于一些关键核心系统没有做到要求定期更改口令;在源代码中写入口令;在不安全环境中进行口令传输。(3)日志安全方面在日志安全方面,主要存在的一些问题主要有:未能实现日志文件的安全存储;有些重要安全事件未能记入日志;未能做到日志记录的异常捕获处理;对日志中的特殊元素没有进行过滤和验证。(4)数据保护方面在数据保护方面,主要存在的一些问题有:未对敏感数据做到加密存储和传输;未对重要数据完整性检查;在错误消息、调试信息等中含有敏感数据;在客户端保存敏感数据;Web登录表单使用浏览器的全自动填充功能。(5)输入验证方面在输入验证方面,主要存在的一些问题有:验证输入数据的安全性时没有全覆盖;部分容易受到恶意攻击的场景下未做好数据验证;对输入数据验证前缺少过滤或标准化处理;关键业务操作的输入数据未验证数据发送方的数字签名。(6)输出净化方面在输出净化方面,主要存在的一些问题有:未对所有字符进行编码;编码规则没有参考有关标准;有些含有危险字符的命令没有进行语义净化;将URL重定向到不可信站点。

3应用软件编程常见安全问题的改进措施

(1)身份鉴别方面针对没有对鉴别失败的次数进行限制的问题,可以设定同一用户进行身份鉴别的频率和次数,设定鉴别失败次数的阈值,当鉴别失败次数达到阈值时对用户进行锁定,以防止暴力破解。针对执行重要或者不可逆操作之前没有再次进行身份鉴别的问题,可以梳理出重要或者不可逆操作清单,这些操作确认之前要再次进行身份鉴别,以减少不安全会话带来损失。针对一次身份鉴别后进行长时间的通话,没有周期性重新进行身份鉴别的问题,可以周期性进行身份鉴别,确保权限没有发生改变。如果发生改变,必须强制注销用户,重新进行身份鉴别。针对身份鉴别过程可能会被绕过的问题,严格控制用户访问系统的可选通道,确保用户只能通过指定通道访问系统。针对依赖不可靠信息进行身份鉴别的问题,要避免依赖不可靠信息进行身份鉴别,比如避免信任cookie中的数据、避免依赖反向DomainNameSystem解析获取的主机信息等等。针对验证数字证书不全面的问题,应该检查数字证书的状态和持有者,数字证书的状态必须是有效的而且未过期的,数字证书的实际持有者要和证书中声明的持有者一致。针对处理身份鉴别的过程中泄露多余信息的问题,做到处理任何一个认证请求所费时间一致,避免攻击者根据登录失败的时间来判断登录是否成功,安全处理失败的认证,确保鉴别反馈的信息中没有敏感数据。(2)口令安全方面针对口令的复杂度不满足安全策略要求的问题,可以设定满足安全策略要求的口令复杂度,对口令的组成、长度等做出具体的要求。针对初始口令为默认时没有强制用户第一次登录时更改口令的问题,可以采取强制用户第一次登录时更改默认口令或者随机生成用户的初始密码方式。针对一些关键核心系统没有做到定期更改口令的问题,可以结合安全策略要求设定口令的更改周期,强制定期更改口令。针对在源代码中写入口令的问题,必须做到不在源代码中出现口令,将加密后的口令存储在相关配置文件、Database或者其他外部数据源中。针对在不安全环境中进行口令传输的问题,首先要做到不允许明文传递口令,其次对于诸如Http、Ftp、POP等传统协议,必须要在使用安全传输协议的情况下才能传输口令。(3)日志安全方面针对未能实现日志文件的安全存储的问题,可以将日志文件单独存储于应用程序目录外,采取严格的访问控制措施确保日志文件的安全;针对有些重要安全事件未能记入日志的问题,做到系统发生重要安全事件创建日志,特别是一些失败的认证尝试、失败的访问控制、已过期的会话令牌尝试等。针对未能做到日志记录的异常捕获处理的问题,做到对日志记录进行完善的异常捕获处理,实现哪怕日志记录过程出现异常,日志记录仍然可以继续正确地执行。针对日志中的特殊元素没有进行过滤和验证的问题,做到对日志中的特殊元素进行过滤和验证,实现日志中的不可信数据不会在界面查看时或者运行软件时以代码的形式被执行。(4)数据保护方面针对未对敏感数据做到加密存储和传输的问题,做到明确应用软件中敏感数据的范围,对敏感数据加密存储和传输;针对未对重要数据完整性检查的问题,做到对重要数据开展完整性检查;针对在错误消息、调试信息等中含有敏感数据的问题,做到避免在错误消息、调试信息中含有敏感数据;针对在客户端保存敏感数据的问题,做到不允许在客户端保存敏感数据;针对Web登录表单使用浏览器的口令自动填充的问题,禁止浏览器的口令自动填充功能。(5)输入验证方面针对验证输入数据的安全性时没有全覆盖的问题,做到对所有输入数据进行安全验证,检测输入数据的数据类型、长度(最大和最小长度)、值(最大值和最小值);针对部分容易受到恶意攻击的场景下未做好数据验证的问题,重点关注Http请求,防止恶意数据通过表单域、Coookie、URL参数以及URL自身传入;重点关注来自重定向输入的数据,防止恶意攻击者避开有关验证向重定向目标直接提交恶意代码;针对输入数据验证前缺少过滤或标准化处理的问题,做到在对输入数据进行验证前先进行过滤或标准化处理;针对关键业务操作的输入数据未验证数据发送方的数字签名的问题,做到对关键业务操作的输入数据,验证数据的真实性和完整性,通过数据发送方的数字签名确认其身份。(6)输出净化方面针对未对所有字符进行编码的问题,做到除目标编译器安全外,对所有字符进行编码;针对编码规则没有参考有关标准的问题,做到在制定编码规则时参考国际国内行业标准,结合实际情况;针对有些含有危险字符的命令没有进行语义净化的问题,重点关注SQL、XML、LDAP查询语句、操作系统命令,对其进行语义净化;针对将URL重定向到不可信站点的问题,做到不允许将URL重定向到用户可控的不可信站点。

4结语

应用软件的安全性没有最好,只有更好。应用软件的安全性只有起点,没有终点。只要我们在包括编程实现在内的软件全生命周期内都充分考虑并且高度重视安全性需求或要求,应用软件的安全性就会不断得到提升。

参考文献:

[1]王磊,张玉清,王力.安全编程研究[J].计算机应用研究,2004(09):130-133.

[2]陈金茹.计算机软件安全问题的防范措施:[J].电子技术与软件工程,2019(19):196-197.

[3]朱泓鑫.计算机软件安全与防护[J].电子技术与软件工程,2019(09):212.

[4]梁利亭.计算机软件安全及防护对策[J].信息技术与信息化,2020(01):215-217.

作者:甘清云 单位:中国直升机设计研究所