0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

梳理下SDL一些相对核心的理论基础

哆啦安全 来源:小道安全 作者:小道安全 2022-10-13 09:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

背景

安全性在软件开发过程中是一个极其重要和深刻的话题。当安全性受到损害时,会发生非常糟糕的事情。我们在软件开发生命周期的各个阶段都必须记住这一点。

不同于一些其他非功能性要求,一般不能在之后才在系统中考虑到安全性。开发一个相对安全的项目离不开一个安全规则的指导,一个好用的开发工具,一套安全的编码规范。

下面就从开发安全规则、开发工具的安全利用,安全编码这三方面进行分析。降低软件中的漏洞,包括但不限于缓冲区溢出、边界外的数组访问、未初始化的内存使用、类型混淆等安全漏洞。

安全开发规则

一个好的安全开发指导规则,能够在开发软件过程中挖掘出漏洞的。这个好的安全规则首选推荐微软的SDL(安全开发生命周期)。下面就梳理下这个SDL的一些相对核心的理论基础。

它主要侧重于软件开发的安全保证过程。SDL致力于减少软件中漏洞的数量和严重性。

SDL的核心理念是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。

SDL基于三个核心概率:培训教育、持续过程改善和责任。

SDL的一个主要目标:安全和隐私。

SDL在开发过程的所有阶段进行安全和隐私保护

3d3917cc-4a8f-11ed-a3b6-dac502259ad0.png

安全开发生命周期 (SDL)由一组支持安全保证和合规性要求的实践组成。SDL 通过减少软件中漏洞的数量和严重性,同时降低开发成本,帮助开发人员构建更安全的软件。

SDL详细步骤

3d7310da-4a8f-11ed-a3b6-dac502259ad0.png

SDL安全设计核心原则主要包括:攻击面最小化、基本隐私、权限最小化、默认安全、纵深防御、威胁建模。下面就这对这些原则展开做个简单解析。

攻击面最小化(Attack Surface Reduction):

指尽量减少暴露恶意用户可能发现并试图利用的攻击面数量。软件产品的受攻击面是一个混合体,不仅包括代码、接口、服务,也包括对所有用户提供服务的协议。尤其是那些未被验证或者远程的用户都可以访问到的协议,安全人员在攻击面最小化时首先要对攻击面进行分析,攻击面分析就是枚举所有访问入库、接口、协议一剂可执行代码的过程,从更高层次来说,攻击面分析着重于如下4点:

1、降低默认执行的代码量

2、限制可访问到代码的人员范围

3、限定可访问到代码的人员身份

4、降低代码执行所需权限

基本隐私(Basic Privacy):

指用户在使用软件时无可避免个人信息被收集、使用甚至分发,企业则有责任和义务建立保护个人信息的保护措施,抵御敌对攻击行为,确保用户基本隐私的安全性。

权限最小化(Least Privilege):

指如果一个应用程序或网站被攻击、破坏,权限最小化机制能够有效的将潜在损害最小化。常见的权限最小化实践如:

1、普通管理员/系统管理员等角色管理

2、文件只读权限/文件访问权限等访问控制

3、进程/服务以所需最小用户权限运行

默认安全(Secure Defaults):

默认安全配置在客户熟悉安全配置选项之前不仅有利于更好的帮助用户掌握安全配置经验,同时也可以确保应用程序初始状态下处于较安全状态。

纵深防御(Defense in Depth):

纵深防御包含两层含义:首先,要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;其次,要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。

威胁建模(Threat Modeling):

威胁建模是一种分析应用程序威胁的过程和方法。这里的威胁是指恶意用户可能会试图利用以破坏系统。

工具安全

下面就以visual studio工具进行展开,利用工具上的几个配置进行提高软件安全性。使用这些工具和做法并不会使应用程序免受攻击,但能降低攻击成功的可能性。

1、代码分析功能

3d7ff6ce-4a8f-11ed-a3b6-dac502259ad0.png

此编译器选项将激活报告潜在安全问题(比如缓冲区溢出、未初始化的内存、null指针取消引用和内存泄漏)的代码分析。此选项默认已关闭。建议开启这个开关。

2、/GS(缓冲区安全检查)

3d8609e2-4a8f-11ed-a3b6-dac502259ad0.png

这个的安全检查主要处理:函数调用的返回地址;函数的异常处理程序的地址;易受攻击的函数参数。导致缓冲区溢出是黑客用来利用不强制实施缓冲区大小限制的代码的技术。

指示编译器将溢出检测代码插入到面临被利用风险的函数中。检测到溢出时,则停止执行。默认情况下,此选项处于启用状态。

传递到函数中的易受攻击的参数。易受攻击的参数是指针、C++ 引用、C 结构 (C++ POD 类型) 包含指针或 GS 缓冲区。

3、/DYNAMICBASE(使用地址空间布局随机化)

3d8b7f9e-4a8f-11ed-a3b6-dac502259ad0.png

使用 Windows 的地址空间布局随机化 (ASLR) 功能,指定是否生成可在加载时随机重新设定基址的可执行文件映像。

通过使用此链接器选项,可以生成一个在执行开始时可在内存的不同位置加载的可执行映像。此选项还使内存中的堆栈位置更加不可预测。

编码安全

当前软件中都可能存在相同类别的内存安全漏洞,也可能存在于推理且无序的执行路径中,包括但不限于缓冲区溢出、边界外的数组访问、未初始化的内存使用、类型混淆等漏洞。

一个套规范的安全开发可以大大降低软件漏洞的风险,安全开发通常需要我们在编码过程中做到

1、不要使用那些易受攻击的API函数;

2、要做好对输入参数做校验;

3、慎重使用强制类型转换;

4、防止算术溢出和下溢;

5、异常捕获是定时炸弹;

6、多用安全工具进行检查代码;

7、文件操作过程中要做好路径和权限管控。

1、系统函数

系统函数的使用可以大大降低代码的开发工作量,但使用不安全的系统函数那就得不偿失了。

在开过过程中许多旧CRT函数具有持续更新、更安全的版本。如果存在安全函数,则较旧的、安全性更低的版本将标记为已弃用,并且新版本具有 _s(“安全”)后缀。

安全函数不会阻止或更正安全错误。相反,它们会在发生错误时捕获错误。它们对错误情况执行其他检查。如果出现错误,则调用错误处理程序。

3d93c8f2-4a8f-11ed-a3b6-dac502259ad0.png

上图中函数strcpy 无法判断正在复制的字符串对于目标缓冲区而言是否太大。其安全对应项 strcpy_s 会将缓冲区大小作为参数。因此,可以确定是否会发生缓冲区溢出。如果你使用 strcpy_s 将 11 个字符复制到 10 个字符缓冲区中,则这是你方造成的错误;strcpy_s 无法更正错误。

2、SafeInt库

SafeInt它是可以与 MSVC、GCC或 Clang 结合使用的可移植库,有助于防止在应用程序执行数学运算时可能会出现的整数溢出而被利用。SafeInt库包括 SafeInt 类、SafeIntException 类和几个SafeInt 函数。

SafeInt 类可防止整数溢出和被零除攻击。可以通过使用它处理不同类型的值之间的比较。它提供了两种错误处理策略。默认策略是针对引发 SafeInt 类异常的 SafeIntException 类,以报告无法完成数学运算的原因。第二个策略针对 SafeInt 类,用以停止程序的执行。还可以定义自定义策略。

每个 SafeInt 函数各保护一个数学运算免于出现可被利用的错误。使用两种不同的参数,而不必将它们转换为相同类型。若要保护多个数学运算,请使用 SafeInt 类。

3、信任边界

信任边界存在于应用程序可能与信任度较低的上下文提供的数据进行交互的位置,例如系统上的另一个进程,或者内核模式设备驱动程序中的非管理用户模式进程。

3df6ca6a-4a8f-11ed-a3b6-dac502259ad0.png

4、类型转换

类型强制转换使用尽可能用C++的风格static_cast<>,dynamic_cast<>,它允许允许更多编译器检查,并且更为显式,相对更安全。

3dff9942-4a8f-11ed-a3b6-dac502259ad0.png

5、接口应用

无论是C还是C++的编程范式,从实用的角度,最终对面向接口编程,好的代码接口具备下述特性:

1、Self-describing,即自描述性,设计清晰简洁的API接口名称,一眼就能知道是什么功能。

2、Clear hierarchy,即清晰的层级性,API的接口大类不能与小类相混淆。

3、Granularity sex,即粒度性,掌控好粒度性的API接口,不能太过于粗糙,尽量细分化,容易后续的扩展。

6、外部可控函数

尽量减少使用外部可控数据作为启动函数的参数例如:system、WinExec、ShellExecute、CreateProcess、execv、ececvp ,popen;如果外部可控作为这些函数的参数,就会有导致被注入的风险。如果确实需要使用这些函数,可以使用白名单机制验证其参数,确保这些函数的参数不受到外来数据的命令注入影响。

7、文件操作

对文件操作的时候可以几个降低安全风险

1、当文件路径来自外部数据时候,需要先将文件路径规范化,这个没处理攻击者就会有机会通过恶意构造文件路径进行文件的越权访问。

2、创建文件时候必须做好指定文件的访问权限

int open( const char * pathname, int flags);

int open( const char * pathname, int flags, mode_t mode);

尽可能使用第二个模式。

小结

以上知识的梳理更多从基础理论出发,并且很多详细细节还有待在后续实践进行进一步的完善。

软件安全和二进制漏洞是一个永恒的对抗话题,基于一套安全的开发规范,指导在开发安全生命周期内进行推进软件开发。并且加强开发中的安全意识的培养,又助于降低减少软件的漏洞的出现。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51083
  • SDL
    SDL
    +关注

    关注

    0

    文章

    18

    浏览量

    7919
  • POD
    POD
    +关注

    关注

    0

    文章

    18

    浏览量

    6267

原文标题:浅谈软件安全开发

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    贴片电容精度J±5%的一些详细知识

    贴片电容精度J±5%表示电容的实际值与标称值之间的偏差范围在±5%以内 ,以下是关于贴片电容精度J±5%的一些详细知识: 、精度等级含义 J±5% :字母“J”在贴片电容的标识中通常表示标称精度
    的头像 发表于 11-20 14:38 148次阅读
    贴片电容精度J±5%的<b class='flag-5'>一些</b>详细知识

    E203 代码结构梳理

    、队伍介绍 本篇为蜂鸟E203系列分享第五篇,本篇介绍的内容是E203 代码结构梳理。 二、层次图 三、模块具体功能
    发表于 10-30 06:56

    当不同的数据放在同个Flash页面上时,请问如何在不影响其他数据的情况更改一些单独的数据?

    当不同的数据放在同个Flash页面上时,如何在不影响其他数据的情况更改一些单独的数据?
    发表于 08-22 06:25

    信号完整性(SI)/ 电源完整性(PI)工程师的核心技能树体系

    信号完整性(SI)和电源完整性(PI)工程师在高速电子设计领域扮演着关键角色,其核心技能树体系需覆盖从理论基础到工程实践的全流程。以下是该岗位的核心技能框架,结合技术深度与应用场景进行系统化
    的头像 发表于 06-05 10:11 3008次阅读

    MySQL简介与理论基础

    MySQL是世界上最流行的开源关系型数据库管理系统之,广泛应用于网站、应用程序和企业级系统。它采用客户端/服务器架构,支持多用户环境,并基于SQL(结构化查询语言)标准。
    的头像 发表于 05-21 10:43 499次阅读

    Debian和Ubuntu哪个好一些

    兼容性对比Debian和Ubuntu哪个好一些,并为您揭示如何通过RAKsmart服务器释放Linux系统的最大潜能。
    的头像 发表于 05-07 10:58 856次阅读

    电机理论基础

    纯分享帖,需要者可点击附件获取完整资料~~~ 【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第时间告知,删除内容!
    发表于 04-17 23:01

    树莓派在自动化控制项目中的一些潜在应用

    自动化控制项目中的一些潜在应用。之前,我们已经为Arduino平台探讨了相同的话题。我们确定Arduino是个出色的教育工具,但由于一些限制,它无法在工业环境中完全
    的头像 发表于 03-25 09:45 479次阅读
    树莓派在自动化控制项目中的<b class='flag-5'>一些</b>潜在应用

    收藏的一些库存,直流无刷技术+源码+论文(建议打包)

    这也是我网络上淘过来收藏的一些资料,免费跟大家起分享一下,建议下载哦,收藏不易
    发表于 03-17 20:17

    电源完整性理论基础

    随着 PCB 设计复杂度的逐步提高,对于信号完整性的分析除了反射,串扰以及 EMI 之外,稳定可靠的电源供应也成为设计者们重点研究的方向之。尤其当开关器件数目不断增加,核心电压不断减小的时候,电源
    发表于 03-10 17:15

    独立服务器和云服务器哪个快一些

    独立服务器和云服务器哪个快一些?在数字服务部署中,独立服务器与云服务器的速度差异并非绝对,需结合资源配置与应用场景综合判断。以下是UU云对独立服务器和云服务器的核心维度对比分析:
    的头像 发表于 02-05 10:08 802次阅读

    AN-202: IC放大器用户指南:去耦、接地及其他一些要点

    电子发烧友网站提供《AN-202: IC放大器用户指南:去耦、接地及其他一些要点.pdf》资料免费下载
    发表于 01-13 15:16 3次下载
    AN-202: IC放大器用户指南:去耦、接地及其他<b class='flag-5'>一些</b>要点

    不同频率相对介电常数变化

    相对介电常数是描述介质对电场的响应能力的物理量,通常随频率的变化而发生变化。以下是不同频率下相对介电常数变化的分析: 、低频区域 在低频区域,相对介电常数通常与频率的关系呈现以下特点
    的头像 发表于 01-10 10:12 4078次阅读

    AN29-关于DC-DC转换器的一些想法

    电子发烧友网站提供《AN29-关于DC-DC转换器的一些想法.pdf》资料免费下载
    发表于 01-08 13:57 0次下载
    AN29-关于DC-DC转换器的<b class='flag-5'>一些</b>想法

    赛灵思低温失效的原因,有没有别的方法或者一些见解?

    赛灵思低温失效的原因,有没有别的方法或者一些见解。就是芯片工作温度在100°--40°区间,然后呢我们到了0°以下就不工作了,然后在低温的情况监测了电流和电压都正常,频率也都正常,频率不是FPGA的频率是晶振的频率,焊接的话七台都不行都是这个,0°
    发表于 12-30 16:28