从事网络安全行业以来,我接触到的软件安全问题多是系统上线运行后,通过黑盒测试发现的,对于软件安全的本质问题了解并不深。通过CISAW软件安全开发全面系统的学习和备考,特别是以软件安全问题为导向的学习方式,让我对软件安全问题的成因及解决方式有了更直观和更深刻的理解,丰富了我在软件开发安全方面的知识、扩展了我分析软件安全问题的视角。

  对软件安全开发的理解在软件开发工作初期,业务部门通常更关注业务功能的实现,往往忽略对安全问题的考虑,加之没有足够的能力去顾及安全,导致在软件开发需求分析阶段缺乏足够的安全需求分析和设计,而开发人员侧重的是开发编码的能力,相对缺乏安全编码规范,致使开发者很难从攻击者的角度去审查开发的软件,存在安全隐患。整体来看,由于安全投入在整个软件生命周期中相对滞后,造成项目风险较大而且在后期开展安全测试和漏洞修复,需要投入的成本也比较大,消耗了较多的人力和时间,效果也理想。参加CISAW软件安全开发的备考,我更能理解软件的安全性是贯穿整个软件生命周期过程的,让我在今后软件开发生命周期中各个阶段、环节更注重安全需求分析及能力的培养,实现安全开发。

  通过CISAW软件安全开发的备考以及结合工作经验,我总结了在软件开发过程中常遇到的一些安全问题分享给大家:

      1、开源及第三方组件安全风险,开源软件安全是供应链安全中重要一环,要及时跟踪、评估、审查第三方组件存在的安全风险及风险级别,可建立组件黑名单库,在开发过程中禁用组件黑名单。典型的组件安全问题包括:log4j2 jndi注入漏洞、fastjson反序列化漏洞等。

  2、严格校验输入参数,通常在服务端采用白名单方式对输入的参数进行校验。

  3、对文件上传操作要求系统的一致性校验、判断上传文件类型;使用随机数改写文件名和文件路径进行保存,通常设置应用项目目录以外的目录作为单独文件的保存目录;在系统上线运行后,文件上传的目录设置为不可执行。

  4、访问控制常见问题,如垂直纵向越权、水平横向越权,可采用如下方法进行规避:基于URL的访问控制、基于方法(method)的访问控制、基于角色的访问控制等,例如spring中通过Spring Security配置实现基于角色的访问控制:

       <http auto-config="true"> <intercept-url pattern="/president_portal.do" access="ROLE_PRESIDENT" /> <intercept-url pattern="/manager_portal.do” access="ROLE_MANAGER" /></http>

  5、日志记录常出现的问题是记录敏感信息,如用户登录的凭证信息:登录密码、或者业务个人身份信息等。

  6、程序异常处理问题,禁止抛出异常,防止信息泄露,如java中printStackTrace()、getStackTrace()等。

  7、避免使用易受攻击的函数,如strcpy (), strcat (), sprintf ()等可能导致溢出问题。

  不同的开发语言,有不同的安全特性问题,当前软件安全问题包括上述内容但不限于缓冲区溢出、未初始化的内存使用、配置管理、NULL引用、强制类型转换、日志伪造、任意文件读取等问题,这些在软件开发过程中都需重点关注。

  收获与感悟近年来,随着云原生、开源中间件、应用容器化等技术的广泛应用,对软件、信息系统攻击逐步多元化。如何发现和避免软件在开发过程中出现安全问题,成为了各行业亟待解决的困境。

      通过考取CISAW软件安全开发证书,我对软件开发过程中安全需求分析、软件安全评估流程、方法论以及各种开发语言的安全问题有了更全面系统的认识,同时也提升了自身的软件安全分析能力,能够使我在工作中快速定位软件安全问题,并提出可交付性强的软件安全代码解决建议或方案。作为一名安全工程师,在以后的工作中将持续深耕对软件安全的学习研究,为护航数字中国网络安全建设贡献力量。

       关CISAW软件安全开发认证可以直接咨询赛虎学院客服。