• 查询稿件
  • 获取最新论文
  • 知晓行业信息
官方微信 欢迎关注

铁路应用系统源代码安全检测方案研究

郑军

郑军. 铁路应用系统源代码安全检测方案研究[J]. 铁路计算机应用, 2024, 33(10): 73-77. DOI: 10.3969/j.issn.1005-8451.2024.10.13
引用本文: 郑军. 铁路应用系统源代码安全检测方案研究[J]. 铁路计算机应用, 2024, 33(10): 73-77. DOI: 10.3969/j.issn.1005-8451.2024.10.13
ZHENG Jun. Security detection scheme for source code of railway application system[J]. Railway Computer Application, 2024, 33(10): 73-77. DOI: 10.3969/j.issn.1005-8451.2024.10.13
Citation: ZHENG Jun. Security detection scheme for source code of railway application system[J]. Railway Computer Application, 2024, 33(10): 73-77. DOI: 10.3969/j.issn.1005-8451.2024.10.13

铁路应用系统源代码安全检测方案研究

基金项目: 中国国家铁路集团有限公司系统性重大项目(P2022S007)
详细信息
    作者简介:

    郑 军,工程师

  • 中图分类号: U29 : TP39

Security detection scheme for source code of railway application system

  • 摘要:

    针对铁路应用系统源代码工具检测中普遍存在的安全缺陷误报率与漏报率偏高等问题,提出一种基于自动化工具检测和人工检测相结合的铁路应用系统源代码安全检测方案。文章详细阐述了铁路应用系统源代码安全检测的流程,采用自动化检测工具从代码结构、词法、数据流、控制流和安全规则匹配等多维度对源代码进行检测,并引入人工检测机制,利用关键字检测和业务逻辑检测等方法,对自动化检查结果进行补充分析,实现了对铁路应用系统源代码安全缺陷的高效、精确识别。实验结果表明,该方案能够显著提升铁路应用系统源代码的安全检测质量与效率,为铁路应用系统的安全防护提供技术支撑。

    Abstract:

    This paper proposed a security detection scheme for source code of railway application system based on a combination of automated tool detection and manual detection to address the common issues of high false positive and false negative rates in the detection of security defects in railway application system source code tools. The paper elaborated on the process of source code security detection in railway application systems, used automated detection tools to detect source code from multiple dimensions such as code structure, vocabulary, data flow, control flow, and security rule matching. It also introduced manual detection mechanisms and used methods such as keyword detection and business logic detection to supplement and analyze the automated inspection results, achieving efficient and accurate identification of source code security defects in railway application systems. The experimental results show that this scheme can significantly improve the quality and efficiency of security detection of railway application system source code, provide technical support for the security protection of railway application systems.

  • 近年来,应用系统安全形势日趋严峻,国家信息安全漏洞共享平台(CNVD,China National Vulnerability Database)发布的最新统计数据显示,当前应用系统(涵盖Web应用和应用程序)的漏洞占比已超过70%[1]。源代码的安全缺陷是应用系统漏洞产生的核心原因,开展源代码安全检测可以全面、精确地挖掘出应用系统中的安全漏洞。因此,亟需实施高效、全面的源代码安全检测。

    刘嘉勇等人[2]提出了动态检测、静态检测和动静态结合检测等漏洞检测方法;李炯彬[3]提出源代码漏洞自动化检测模型;黄显果等人[4]提出基于工具检测的源代码静态测试方案。然而,在铁路领域,应用系统源代码安全检测研究却相对滞后,缺乏针对性的铁路应用系统源代码安全检测方案及实践。

    为解决上述问题,本文依据国家标准《GB/T 34944-2017 Java语言源代码漏洞测试规范》[5]中明确的源代码漏洞测试内容,提出基于自动化工具检测和人工检测相结合的铁路应用系统源代码安全检测方案,旨在实现对铁路应用系统源代码安全缺陷的高效、精确识别,为铁路应用系统的安全防护提供技术支撑。

    近些年,在OWASP(Open Web Application Security Project) 发布的Top 10安全威胁列表中,失效的访问控制始终占据显著位置,成为最为常见的安全漏洞之一[6]。这一漏洞的核心根源在于应用系统设计错误、功能缺陷或配置不当,导致未能实施正确的访问控制策略,使攻击者具有未授权的功能/资源的访问或使用权限。

    该漏洞最常见的症状是敏感信息泄漏,主要包括:采用超文本传输协议(HTTP,Hypertext Transfer Protocol)、简单邮件传输协议(SMTP,Simple Mail Transfer Protocol) 和文件传输协议(FTP,File Transfer Protocol)等进行敏感信息明文传输;硬编码密钥或密码;使用已经被破解或已被证明有漏洞的加密算法;使用弱密钥、容易被破解的密码,以及由于技术缺陷等导致的信息泄漏等。

    常见的注入漏洞包括SQL( Structured Query Language )注入、代码注入和命令注入等。有关研究表明,94%的应用系统可能会遭遇注入类网络攻击,注入成功的概率最高可达到19%。其原因主要是应用系统在处理用户输入数据时,未进行充分的安全校验,而是将用户输入直接拼接至源代码中执行。

    该漏洞产生的核心原因是缺失控制机制或控制机制失效。通常是在系统设计或架构设计过程中,对身份验证、访问控制、业务逻辑和数据流等关键环节的设计不合理或不安全,导致不安全的设计漏洞。

    (1) 实施完整身份验证和会话管理,严格限制资源访问权限,对敏感操作和数据进行额外保护。

    (2) 应用系统开发时,敏感数据不存储在本地,所有 Cookie 数据加密存储;进入生产环境时,去除调试代码或接口;对于失败的身份校验请求,采取安全措施处理,避免返回包含调试信息、程序异常堆栈等可能引发安全风险的敏感内容;对重要敏感信息采取脱敏措施,确保重要敏感或隐私得到保护。

    (3) 对外部提交的用户数据,通过使用过滤函数或类进行过滤;对数据库的查询语句,采用预编译的方式进行处理。

    (4) 在身份验证、访问控制、业务逻辑和关键流程等关键环节,建立能够抵御威胁的安全设计模型或组件,并进行单元测试、集成测试和验证,确保关键环节能够抵御威胁,将安全开发理念贯彻到整个应用系统安全开发生命周期中。

    渗透测试、安全评估测试和源代码安全检测是铁路应用系统常见安全测试方法,测试方法比对结果如表1所示。

    表  1  铁路应用系统常见安全测试方法
    测试方法比对项目 渗透测试 安全评估测试 源代码安全检测
    测试对象 运行状态的应用系统 运行状态的应用系统 应用系统源代码
    测试介入时间 代码开发完成后开展。 代码开发完成后开展。 代码开发阶段即可以开展。
    测试周期 代码开发完成后开展。测试周期短,工期紧张。 代码开发完成后开展。测试周期短,工期紧张。 代码开发阶段到系统上线后均可开展。测试周期长,工期充裕。
    代码覆盖率 不能完全覆盖源代码。 不能完全覆盖源代码。 能够完全覆盖源代码。
    漏洞定位能力 不能精准定位到漏洞代码位置。 不能精准定位到漏洞代码位置。 能够定位到漏洞代码位置。
    漏洞修复成本 修复成本较高。 修复成本较高。 修复成本较低。
    漏洞检测能力 从程序外部,发现应用系统可利用的安全漏洞,但存在漏报。 从程序外部,发现应用系统可利用的安全漏洞,但存在较高的漏报和误报。 从程序内部,较全面地发现编码引起的安全问题。
    下载: 导出CSV 
    | 显示表格

    渗透测试通过精准模拟黑客的攻击策略和入侵路径,探索、尝试渗透目标系统,全面揭露目标系统存在的安全缺陷和潜在安全风险[7]。该方法能够精准发现应用系统中可利用的安全漏洞,但是,存在介入测试时间晚、漏洞修复成本较高等缺点。

    安全评估测试侧重于利用现有的安全缺陷与漏洞数据库作为知识支撑,通过检测工具对目标应用系统进行深度剖析,发现可利用的安全漏洞[8]。该方法的检测结果依赖检测工具的漏洞库数据,存在漏洞的误报和漏报、介入测试时间较晚及漏洞修复成本高等缺点。

    源代码安全检测不依赖于应用系统的执行,通过对代码结构、词法、数据流、控制流及潜在的安全风险进行剖析,识别、查找被测代码可能存在的安全缺陷[9]。相对于渗透测试和安全评估测试,源代码安全检测具有代码覆盖面广、安全缺陷定位精确、测试介入时间早及安全缺陷修复成本低等优点。

    基于源代码安全检测国家标准相关要求,结合铁路实际工作情况,制定铁路应用系统源代码安全检测流程,如图1所示。

    图  1  铁路应用系统源代码安全检测流程

    包括确定检测对象和制定检测计划。确定检测对象需要明确被测源代码、检测环境及检测内容;制定检测计划依据用户需求制定,包含检测内容、检测时间安排、人员安排、检测条件、检测方法、以及检测过程中可能存在的风险和应对措施。

    包括编制检测用例和部署检测环境。编制检测用例主要是依据检测计划中明确的检测内容进行检测用例的设计,检测用例应包含检测内容、检测过程、检测方法及预期结果;部署检测环境包括自动化检测工具和代码编译环境的部署。

    包括工具检测和人工检测。

    (1)工具检测:自动化检测工具对被测源代码进行预处理。对预处理后的源代码进行词法解析,提取代码中的关键信息,将提取后的信息与已知的安全缺陷规则库进行安全规则匹配[10]。运用控制流和数据流分析技术对预处理后的源代码进行安全风险检查。将安全规则匹配、控制流分析、数据流分析等分析结果数据汇总形成工具检测结果。

    (2)人工检测:对工具检测结果进行逐条验证、分析,排查误报缺陷,并对安全缺陷进行归类。利用关键字检测方法对源代码进行分析,重点对涉及用户数据输入、文件操作、数据库访问等模块代码或配置文件进行分析。例如,检索关键词“new File”,对相关函数/方法代码进行上下文分析,追溯参数传递过程,判断是否存在诸如路径遍历,文件上传、下载及信息泄漏等安全缺陷。对包括用户登录、账户注册、密码找回、修改账户及资金等涉及用户交互业务场景的源代码开展业务逻辑检测,利用人工代码走查方式结合数据流、业务流对业务场景的功能关系、权限关系进行逻辑分析,查找可能存在的安全缺陷。最后,将人工检测结果数据和工具检测结果数据汇总形成源代码安全检测结果。

    包括检测结果分析和检测报告编制。检测结果分析是通过对源代码安全检测结果数据汇总分析,提出安全缺陷整改建议,明确缺陷产生位置和跟踪路径,形成安全缺陷列表;检测报告编制是根据检测结果分析内容,编制源代码安全检测报告,检测报告主要包括检测条件、检测过程及方法、检测内容、检测结果等。

    本文选取3款当前市场上广受好评的源代码自动化检测工具进行比对分析,结果如表2 所示。

    表  2  常见源代码自动化检测工具
    检测工具对比项 Fortify SCA COBOT 代码卫士
    厂商 美国 中国 中国
    检测语言 支持主流编程语言代码检测 支持主流编程语言代码检测 支持主流编程语言代码检测
    检测效率 80万行/小时 百万行/小时 百万行/小时
    编译环境 部分依赖 不依赖 部分依赖
    规则库 900余条 1600余条 2000余条
    检测标准 支持 OWASP、CERT、CVE 漏洞库中严重等级较高的安全漏洞的检测;支持国际相关安全编码标准的检测。 支持 OWASP、CERT、CVE 漏洞库中的安全漏洞的检测;支持国际、国内相关安全编码标准的检测;支持国军标的检测。 支持 OWASP、CERT、CVE漏洞库中的安全漏洞的检测;支持国际、国内相关安全编码标准的检测;支持GB/T 34943-2017、GB/T 34944-2017[11]和GB/T 34946-2017[12]等标准的检测。
    下载: 导出CSV 
    | 显示表格

    表2对比结果可知,代码卫士具有较强检测能力和较高检测效率,支持主流编程语言的检测,检测结果满足GB/T 34943-2017[11]、GB/T 34944-2017、GB/T 34946-2017[12]等源代码安全检测国家标准中的漏洞测试内容要求。

    (1)安全缺陷检测:将GB/T 34943-2017、GB/T 34944-2017和GB/T 34946-2017等国家标准中的源代码漏洞测试内容作为安全缺陷检测内容,开展检测。

    (2)代码规范检测:验证源代码对编程规范的遵循情况,提升源代码的整体品质,确保源代码结构清晰,易于理解,并促进长期的代码维护和扩展功能。

    (3)代码质量检测:源代码质量对软件的稳定性、可靠性和安全性有着非常重要的影响,代码质量检测是源代码安全检测的重要内容。

    (1)硬件配置:检测服务器硬件配置为高性能计算机1台,CPU配置为14核20线程,内存64 GB,硬盘1 TB。

    (2)软件配置:检测服务器操作系统为 Windows 11,源代码编译环境 Java 1.8,本次实验自动化检测工具为代码卫士。

    (1) 检测对象:本次被测试源代码为某应用系统核心源代码V1.0,开发语言为 Java ,代码规模26658行。

    (2) 检测内容:本实验依据《GB/T 34944-2017 Java语言漏洞安全测试规范》源代码漏洞测试内容,从安全功能、时间和状态、Web问题以及用户界面错误等9个方面开展检测。代码规范性问题不作为本实验检测内容。

    (3) 检测方法:本实验分别自动化工具检测、自动化工具检测和人工检测相结合对同一源代码开展检测。

    (4) 检测结果评价指标:本次实验通过正确率、误报率和漏报率进行实验结果评价。正确率是指检测出真实存在的安全缺陷数占被测试源代码全部安全缺陷数的比例;误报率是指检测出实际上并不存在的安全缺陷占被测试源代码全部安全缺陷数的比例;漏报率是指已存在但未被检测出的安全缺陷占被测试源代码全部安全缺陷数的比例。

    采用自动化工具检测、自动化工具检测和人工检测相结合的方法对同一源代码分别开展安全缺陷检测。

    (1) 自动化检测工具发现命令注入、跨站脚本、路径遍历等问题共计61个,检测结果如图2所示。

    图  2  工具检测结果

    (2) 通过人工对工具检测结果进行分析,发现重复缺陷12个,误报缺陷5个,代码规范性问题20个,安全缺陷24个。

    (3) 利用关键字、典型业务场景等方法对源代码进行人工分析,发现安全缺陷5个。检测结果数据汇总如表3所示。

    表  3  检测结果数据汇总
    检测方法
    对比项
    正确缺陷数/个 误报缺陷/个 漏报缺陷/个
    自动化工具检测 24 5 9
    自动化工具检测与
    人工检测相结合
    29 1 4
    下载: 导出CSV 
    | 显示表格

    表3检测结果数据进行实验结果评价,评价结果如表4所示。

    表  4  实验结果评价
    检测方法
    评价指标
    正确率 误报率 漏报率
    自动化工具检测 73% 15% 27%
    自动化工具检测与
    人工检测相结合
    88% 3% 12%
    下载: 导出CSV 
    | 显示表格

    表4实验结果评价数据表明,使用自动化工具检测和人工检测相结合的检测方法可以有效提高检测结果的正确率,降低误报率和漏报率。

    本文提出了自动化工具检测与人工检测相结合的铁路应用系统源代码安全检测方案。该方案采用自动化检测工具从代码结构、词法、数据流、控制流和安全规则匹配等多维度对源代码进行检测;引入人工检测机制,结合关键字检测和业务逻辑检测等方法进行补充分析,有效提高了安全缺陷检测结果正确率,降低了安全缺陷的误报和漏报。下一步,将基于Java/C/C++/C#等编程语言,在不同规模源代码条件下验证该方案的可行性和适用性,不断提高铁路应用系统源代码安全检测质量和效率。

  • 图  1   铁路应用系统源代码安全检测流程

    图  2   工具检测结果

    表  1   铁路应用系统常见安全测试方法

    测试方法比对项目 渗透测试 安全评估测试 源代码安全检测
    测试对象 运行状态的应用系统 运行状态的应用系统 应用系统源代码
    测试介入时间 代码开发完成后开展。 代码开发完成后开展。 代码开发阶段即可以开展。
    测试周期 代码开发完成后开展。测试周期短,工期紧张。 代码开发完成后开展。测试周期短,工期紧张。 代码开发阶段到系统上线后均可开展。测试周期长,工期充裕。
    代码覆盖率 不能完全覆盖源代码。 不能完全覆盖源代码。 能够完全覆盖源代码。
    漏洞定位能力 不能精准定位到漏洞代码位置。 不能精准定位到漏洞代码位置。 能够定位到漏洞代码位置。
    漏洞修复成本 修复成本较高。 修复成本较高。 修复成本较低。
    漏洞检测能力 从程序外部,发现应用系统可利用的安全漏洞,但存在漏报。 从程序外部,发现应用系统可利用的安全漏洞,但存在较高的漏报和误报。 从程序内部,较全面地发现编码引起的安全问题。
    下载: 导出CSV

    表  2   常见源代码自动化检测工具

    检测工具对比项 Fortify SCA COBOT 代码卫士
    厂商 美国 中国 中国
    检测语言 支持主流编程语言代码检测 支持主流编程语言代码检测 支持主流编程语言代码检测
    检测效率 80万行/小时 百万行/小时 百万行/小时
    编译环境 部分依赖 不依赖 部分依赖
    规则库 900余条 1600余条 2000余条
    检测标准 支持 OWASP、CERT、CVE 漏洞库中严重等级较高的安全漏洞的检测;支持国际相关安全编码标准的检测。 支持 OWASP、CERT、CVE 漏洞库中的安全漏洞的检测;支持国际、国内相关安全编码标准的检测;支持国军标的检测。 支持 OWASP、CERT、CVE漏洞库中的安全漏洞的检测;支持国际、国内相关安全编码标准的检测;支持GB/T 34943-2017、GB/T 34944-2017[11]和GB/T 34946-2017[12]等标准的检测。
    下载: 导出CSV

    表  3   检测结果数据汇总

    检测方法
    对比项
    正确缺陷数/个 误报缺陷/个 漏报缺陷/个
    自动化工具检测 24 5 9
    自动化工具检测与
    人工检测相结合
    29 1 4
    下载: 导出CSV

    表  4   实验结果评价

    检测方法
    评价指标
    正确率 误报率 漏报率
    自动化工具检测 73% 15% 27%
    自动化工具检测与
    人工检测相结合
    88% 3% 12%
    下载: 导出CSV
  • [1] 国家信息安全漏洞共享平台. 2024年CNVD漏洞周报26期[EB/OL]. (2024-07-01)[2024-07-15]. https://www.cnvd.org.cn/webinfo/show/10161.
    [2] 刘嘉勇,韩家璇,黄 诚. 源代码漏洞静态分析技术[J]. 信息安全学报,2022,7(4):100-113.
    [3] 李炯彬. 源代码安全和质量缺陷静态检测技术研究[J]. 质量与认证,2021(8):66-68.
    [4] 黄显果,王 鹏,刘静静,等. 基于工具检测的源代码静态测试技术研究[J]. 电脑编程技巧与维护,2019(5):17-20. DOI: 10.3969/j.issn.1006-4052.2019.05.007
    [5] 中华人民共和国国家质量监督检验检疫总局,中国国家标准化管理委员会. Java语言源代码漏洞测试规范:GB/T 34944-2017[S]. 北京:中国标准出版社,2017.
    [6]

    OWASP Top Ten Project[EB/OL].[2024-07-15]. https://owasp.org/www-project-top-ten/.

    [7] 肖芫莹,游耀东,向黎希. 代码审计系统的误报率成因和优化[J]. 电信科学,2020,36(12):155-162.
    [8] 田立军. 渗透性测试技术及方法研究[J]. 铁路计算机应用,2015,24(2):8-12. DOI: 10.3969/j.issn.1005-8451.2015.02.006
    [9] 吴海燕,苗春雨,刘启新,等. Web应用系统安全评测研究[J]. 计算机安全,2008(4):44-46. DOI: 10.3969/j.issn.1671-0428.2008.04.013
    [10] 魏姗姗,吴 越,张浩生. 源代码安全审计研究[J]. 保密科学技术,2023(2):4-14.
    [11] 中华人民共和国国家质量监督检验检疫总局,中国国家标准化管理委员会. C/C++语言源代码漏洞测试规范:GB/T 34943-2017[S]. 北京:中国标准出版社,2017.
    [12] 中华人民共和国国家质量监督检验检疫总局,中国国家标准化管理委员会. C#语言源代码漏洞测试规范:GB/T 34946-2017[S]. 北京:中国标准出版社,2017.
图(2)  /  表(4)
计量
  • 文章访问数:  42
  • HTML全文浏览量:  8
  • PDF下载量:  13
  • 被引次数: 0
出版历程
  • 收稿日期:  2024-07-14
  • 刊出日期:  2024-10-24

目录

/

返回文章
返回