【摘 要】 本文采用HFACS模型分析得到影响代码编码安全的21个人为影响因素,并分别采用AHP法、熵权法获得21个人为影响因素的主观权重、客观权重,进而获得综合权重。“信息安全需求不明确”和“未正确实现”是权重值最高的2个人为影响因素,加强信息安全需求分析和建立严格的信息安全功能审查机制是减少代码编码安全问题、提升代码编码质量的关键环节。
【关键词】 代码编码安全 HFACS AHP 熵权法
1 引言
当前社会处于信息时代,信息安全问题愈演愈烈,其中大部分信息安全问题都由应用系统自身的安全问题造成。美国国家标准技术研究院(NIST)对信息安全事件的跟踪调查显示,超过九成的信息安全事件都与软件代码有关。
当前学术界和产业界对于代码安全的研究主要集中于代码编码安全,主流观点认为在软件编码阶段的主要问题集中在代码自身缺陷、用户恶意输入和不期望的内存占用等,对于整个软件而言其缺陷主要在于输入验证与表示、应用程序接口(API)误用、安全特征、时间与状态、错误处理、代码质量、封装和环境等安全漏洞。本文认为虽然代码需要基于软硬件系统才能真正发挥作用,即代码编码安全显然受到软硬件系统环境的约束,但代码由人来编写,编码安全主要受到人为因素影响。当前的研究主要关注代码编码自身的问题,却缺乏对造成代码编码安全的人为影响因素的相关研究。
本文首先采用人为因素分析与分类系统(Human Factors Analysis and Classi-fication System, HFACS)模型分析得到影响代码编码安全的人为因素指标体系,然后采用AHP-熵权法获得各人为影响因素的影响权重,从而获得对代码编码安全影响最大的人为影响因素,为提高代码编码质量提供有价值的参考。
2 基础知识
2.1 HFACS模型
HFACS模型是一种被工业界广泛使用的事故致因分析模型,在“瑞士奶酪”模型基础上发展而来,最早被用于对航空事故中的人为因素分析建立系统、科学的分类体系。HFACS将导致事故发生的原因划分为不安全行为、不安全行为的前提条件、不安全监督、组织文化4个维度并分别予以细化。目前,HFACS模型已经被广泛应用于航空、航海、铁路、医疗等领域。
代码编码安全主要受到人为因素影响,如果将代码编码视为业务执行的过程,则编码人员产生不安全代码的行为即可视为发生事故,因此本文采用HFACS模型进行事故致因分析。
2.2 AHP-熵权法
2.2.1 AHP法
层次分析法(Analytic Hierar-chy Process, AHP)是将与决策相关元素分解后进行定性、定量分析的一种层次权重决策分析方法。经典的AHP法采用1~9标度法,具体步骤如下。
步骤1:确立指标体系的目标层、准则层、记忆方案层,规定下层因素影响上层因素,且相同层级间元素相互独立。
步骤2:构造判断矩阵。对受到n个因素影响的对象,对其采用1~9标度法进行重要程度赋值,由此形成判断矩阵A。
步骤3:计算各因素权重,根据矩阵理论计算各因素权重系数就是计算判断矩阵的特征向量。
2.2.2 熵权法
熵的概念来源于热力学,它可以表示系统的无序程度,当用于信息系统时,评价指标值越大,熵值越小,则该指标所携带信息越多,可对其赋予较大权重,反之亦然。熵权法具体步骤如下。
步骤1:对数据进行标准化处理。对具有n个被评价对象的矩阵X,每个评价对象有m个评价值,从而获得n行 列的矩阵m,对矩阵Y的各元素进行标准化处理。
步骤2:对矩阵进行归一化处理。
步骤3:根据归一化后的矩阵计算各评价指标熵值。
2.2.3 AHP-熵权法
AHP法属于主观赋权法,更多体现评价专家的个人意志;而熵权法更注重获得客观信息,更多地体现信息系统客观信息。为避免评价结果过于主观或过于客观,将AHP法和熵权法获得的权重值取算数均值,以获得各指标的组合权重,有效避免采用单一方法确定指标权重的局限性问题。
计算AHP法获得权重值、熵权法获得权重值的算数均值,将其做为AHP-熵权法获得的最终权重值。
3 基于HFACS模型的人为影响因素
本文在对多个应用系统开发项目进行分析研究后,通过询问一线编码人员和项目管理人员、提请相关领域专家进行补充等方式获得影响代码编码安全的典型人为因素,并采用HFACS模型将其划分层次,将其定义为不良的组织管理、不良的监管、不安全行为的前提条件和不安全行为4个层级,并将不良的组织管理和不安全的监管合称为管理层,将不安全行为的前提条件和不安全行为合称为实施层,且将不安全行为的前提条件又细分为人的因素和环境因素2部分,HFACS模型及相应指标体系如图1所示。
图1 代码编码安全的致因分析HFACS模型
根据典型HFACS模型,将影响代码编码安全的影响因素划分为不良的组织管理、不良的监管、不安全行为的前提条件和不安全行为4个层级。
不良的组织管理指项目管理层在项目实施中存在管理漏洞、管理人员未履行相应安全管理责任,本文将其细化为选择技术路线不合理、未落实安全责任、违规外包、信息安全需求不明确、信息安全设计不足等具体因素,如果项目管理层选择技术路线不合理,会导致项目实施过程中出现延期、返工等问题,最终影响代码编码质量;如果项目管理人员未落实安全责任,则会忽视项目实施中的众多安全问题;如果项目管理层将项目违规外包,则难以保证承包方能够保证代码编码质量,极有可能在代码中引入安全缺陷;如果信息安全需求不明确或信息安全设计不足,则极有可能导致最终实现的功能模块中信息安全功能不完备。
不良的监管指管理人员在项目实施技术、环境等方面存在决策失误,以及对实施过程中的不安全行为、已知错误监管不到位。如果最终制定不合理的工作计划,则据此对项目实施的监管最终会对代码编码质量产生负面影响;如果监管不到位,则可能导致信息安全缺陷不能被及时发现;如果监管违规,将合理的情况视为不合理或将不合理的情况视为合理,均会在代码编码过程中引入缺陷;如果不纠正已经发现的缺陷,则该缺陷将一直存在直至被重新发现处理。
不安全行为的前提条件指一切引起不安全行为最终导致事故的先兆因素,可将其划分为人的因素和环境因素2大类。人的因素中,如果从业人员技术水平不足,则可能会在代码中引入缺陷;如果信息安全意识薄弱,则代码编码人员和项目管理人员可能会忽视部分信息安全问题;如果人员身体状况不佳或工作压力过大,则可能导致人员技术发挥不稳定。环境因素中,设备故障、气候不佳和工作氛围差,都可能导致项目实施困难或在某重要节点出错。
不安全行为指项目参与人员在项目实施过程中存在违规、违法行为。遗忘是非常有可能发生的不安全行为,因为一线编码人员遗忘处理某信息安全问题,则势必在代码中遗留缺陷;未正确实现是指一线编码人员认识到应当在代码中实现安全功能,但因为技术能力不足或粗心等原因导致未能正确实现,从而在代码中引入缺陷;判断失误是指当需在某处实现特定功能时,受技术水平或其他原因影响,未能选择正确的实现方式甚至未予处理,从而在代码中遗留缺陷;违规操作是指应采取合规、合理的实现方式,但受工期、技术等方面影响,采取了违反规定的实现方式,从而在代码中遗留缺陷。
4 人为影响因素权重分析
4.1 AHP法获得权重值
本文邀请专家根据1~9标度法对表1所示人为影响因素赋权,依次获得影响代码编码安全的各级指标的判断矩阵,按照上文所述计算步骤最终得到各指标的权重值如表1所示。
表1 依据AHP法获得的各人为影响因素权重值
4.2 熵权法获得权重值
本文通过邀请7位代码编码安全领域专家进行打分获得各人为影响因素权重信息,如表2所示。
对表2中信息按照上文所述步骤,采用熵权法计算最终得到各指标权重值,如表3所示。
表2 人为影响因素的专家打分权重情况表
表3 各指标熵权值
4.3 AHP-熵权法获得权重值
对表1和表3中各因素的权重值分别取算数均值得到如表4所示综合权重值。
表4 人为影响因素的主观权重、客观权重和综合权重值
AHP法获得的权重值主要体现评价专家的主观看法,因此称为主观权重;熵权法获得的权重值主要体现信息的客观信息,因此称为客观权重;综合二者能够避免评价结果过于主观或过于客观,因此称为综合权重。主观权重、客观权重和综合权重的对比如图2所示。
图2 主观权重、客观权重和综合权重对比
5 结果分析与防护对策
在“不良的组织管理”层级中,致因因素“信息安全需求不明确”的主观权重、客观权重和综合权重分别为0.1325、0.0695和0.1010,其权重值位居第一;致因因素“信息安全设计不足”的主观权重、客观权重和综合权重分别为0.0343、0.0748和0.0546,仅次于“信息安全需求不明确”因素;其他致因因素与“信息安全需求不明确”和“信息安全设计不足”相比,权重值相差较远。因此,在组织管理中,明确信息安全需求和充分考虑信息安全需求的软件设计是确保代码编码安全的重要前提条件,确保后续代码编码能够顺利进行,同时在代码编码过程中,项目负责人和其他利益相关人员应认真履职,全过程落实安全责任,不违规外包且选择合理的技术路线,减少信息安全风险。
在“不安全的监管”层级中,致因因素“未纠正已知错误”的主观权重、客观权重和综合权重分别为0.0493、0.0681、0.0587,其权重值最大;余下的“不合理的任务计划”“监管不到位”和“监管违规”相互之间差值不大,且均与“未纠正已知错误”有较大差值。这说明在该层级中“未纠正已知错误”是造成监管失效的主要因素。因此在项目实施过程中,需要加强对已知信息安全问题的纠正能力,如果不能及时纠正已发现的问题,则势必将越来越多的信息安全问题留在代码中,导致代码质量严重下降。
在“不安全行为的前提条件”层级中,致因因素“从业人员技术水平不足”“信息安全意识薄弱”和“信息安全培训不足”的综合权重值分别为0.0541、0.0517和0.0428,余下致因因素的权重值与上述致因因素权重值相比差距较大,因此在该层级中“从业人员技术水平不足”“信息安全意识薄弱”和“信息安全培训不足”是导致不安全行为的主要前提条件。挑选技术水平高的从业人员、加强人员信息安全意识并强化信息安全培训,是增强代码编码安全的有效途径。
在“不安全行为”层级中,致因因素“未正确实现”的主观权重、客观权重和综合权重分别为0.2449、0.0690和0.1570,显著高于其他致因因素。因此该层级主要致因因素为“未正确实现”,即能够认识到应实现必要的信息安全功能,但因种种原因最终未能正确实现相关功能。因此需要建立严格的功能审查机制,积极开展信息安全功能测试,督促从业人员重视对信息安全功能的研发工作。
以某软件项目管理系统为例,其在代码中存在文件上传漏洞、不安全的加解密算法、暴力破解漏洞和远程代码执行漏洞等典型高危漏洞与缺陷。
经访问项目管理人员和一线编码人员可知,因为“信息安全需求不明确”导致存在文件上传漏洞等高危漏洞,因“信息安全设计不足”导致采用不安全的DES加密算法保护敏感信息;一线编码人员懒惰而未纠正用户身份鉴别模块的暴力破解漏洞,因而存在“未纠正已知错误”的情况;项目管理人员和一线编码人员均认为,经过信息安全培训或具有较强信息安全意识的软件需求分析人员和软件设计人员可提出更完备的信息安全设计需求和设计方案,经过信息安全培训或具有较强信息安全意识的一线编码人员编码质量显著高于未经培训人员和信息安全意识薄弱人员;从安全需求、软件设计等方面都确认需在代码中避免出现远程代码执行的高危漏洞,一线编码人员在编码过程中知晓应在正确的区域避免远程代码执行漏洞,然而因编码不正确,最终远程代码执行漏洞可被执行,存在“未正确实现”的情况。
6 结语
本文有别于以往从代码实现层次分析代码编码安全的研究方法,探索造成代码编码安全问题的人为因素,找出影响代码编码安全的21个典型人为影响因素。而后分别采用AHP法、熵权法获得各人为影响因素的主观权重和客观权重,由此获得各人为影响因素的综合权重,能够避免评价结果过于主观或过于客观。在各人为影响因素中,“信息安全需求不明确”和“未正确实现”是其中权重值最高的因素,因此加强信息安全需求分析和建立严格的信息安全功能审查机制是减少代码编码安全问题、提升代码编码质量的关键工作。
(原载于《保密科学技术》杂志2023年2月刊)