信息安全 - 软件开发安全

一、SDLC中集成安全

系统开发生命周期        

    1. 开发过程中的核心活动

        尽管各开发周期模型不同,但都会包含这些核心活动

       概念定义(项目用途和系统大致需求) -- 需求确定 --  设计及评审 - 编码 - 编码评审 - 测试 - 维护与变更管理       

    2. SDLC模型

图1-常见软件开发过程模式

3. 项目管理工具

        甘特图: 能清晰地描述每个任务从什么时候开始,到什么时候结束,以及任务之间的并行关系。但它不能清晰地反应出任务之间的依赖关系

        PERT:描绘出项目包含的各种活动的先后次序,标明每项活动的时间或相关的成本,能清晰地描述子任务之间的依赖关系

图2- PERT与甘特图对比

4. 变更与配置管理

软件发布到生产环境后,用户必然要求增加新需求,这类变更需要一个变更管理流程来支持

图3-变更与配置管理流程

5. DevOps

通过将软件开发、质量保证和IT运维职能集中到一个操作模型中,防止不同职能人员之间踢皮球,进而大幅缩短软件开发、测试和部署所需的时间。

    使用DevOps模型和CI/CD,组织希望实现连续部署目标,每日部署几十到几百次(这么高的频率真的有必要?)

二、开发环境安全

代码仓库-code repository

    代码仓库存储代码并支持协作,常见的有GitHub, GitLab, SourceForge, SVN等。代码仓库需要实现合适的访问控制。如果是公开代码库,必须注意不能包含敏感信息。

真实故事:前同事因为将公司数据库配置文件拷贝到个人在GitHub上的公开库,被安全人员扫描发现,隔天就被解除了合同。

三、软件测试

代码审查-Code Review

代码审查也被称为同行评审-peer review, 开发人员编写的代码交给其他开发人员检查是否有缺陷。

最正式的代码审查是 范根检查法-Fagan inspection, 它有严格的审查和测试过程。步骤为: 1-规划, 2-概述, 3-准备,4-审查, 5-返工, 6-追查。

其他代码审查方式: 1)会议上团队走查-walk through代码; 2)资深人员手动代码审查,并批准代码; 3)使用自动化代码审查工具。

测试

1. 静态测试

    在不运行代码的情况下,对源代码或编译后的程序进行检查, 一般使用自动化检测工具

2. 动态测试

    在软件运行环境下进行检测,比如常规的功能测试,也包含漏洞扫描,渗透测试。

3. 模糊测试- Fuzz Testing

    动态测试的一种,向软件提供不同类型的输入来测试软件功能与性能

    突变模糊测试-Mutation/Dumb:通过实际操作作为输入,然后自动生成模糊输入,进行功能测试

    智能模糊测试: 设计数据模型来创建新的输入值

    工具: zzuf, 可以实现突变模糊测试的自动化     

4. 接口测试

    包括三类: API测试,UI测试,物理接口测试。 请注意 网络接口测试不属于该系列。

5. 误用例测试

    测试错误的使用场景

6. 白盒测试

    检查代码内部逻辑结构,并逐行执行代码,发现缺陷

7. 黑盒测试

    从用户角度来检查程序,不访问内部代码。 用户验收测试与回归测试都是黑盒测试的一种

    回归测试:验证新引入的功能或修改是否导致原有功能出现缺陷

8. 灰盒测试

    结合源代码从用户角度进行软件测试

9. 测试覆盖率

    测试覆盖率 = 已完成测试的用例数量 / 全部测试用例的数量

    1)分支覆盖率-branch:每个If语句都有被执行。并不包含满足if条件下的具体逻辑,只要验证了if条件语句有行。

    2)条件覆盖率-condition:每个输入条件下的逻辑都有被测试到

    3)函数覆盖率-function: 每个函数都有被调用和执行

    4)循环覆盖率-Loop: 代码中的循环都有被执行,一次或多次

    5)语句覆盖率-statement: 每行代码都有被执行

网站监测

 1. 被动监测: 捕获网站的实际流量进行分析。 RUM-Real User Monitoring 真实用户监控 追踪单个用户与网站的互动

2. 综合监测(主动监测): 执行复杂的脚本来对网站执行伪造的事务活动,评估其性能

四、评估软件安全

保证流程-Assurance

用于确保在系统的整个生命周期内都能通过构建的安全控制机制正确实现安全策略

通用标准(CC-Common Criteria)是一种适用于政府采购的标准化保证方法

SLA-服务水平协议

采购外部服务时,需要通过SLA约定关键组件的服务能力,通常包括: 系统正常运行时间,最大连续停机时间,性能负载,故障切换时间等

五、编码指南

避免系统故障的方法

1. 输入验证(Input Validation): 对用户输入进行检查,合适是否符合系统期望,并且可改变输入替换成安全值。 输入验证应该在服务器端进行,用户端的验证代码可被用户轻易绕过。输入验证可用于缓解 SQL注入,XSS,CSRF,缓冲区溢出等攻击风险

2. 身份验证与会话管理(Authentication and Session Management):利用身份验证来确保用户只能执行被授权的操作,针对敏感信息和关键业务活动,需要使用MFA。会话管理要满足1-通过只在安全加密信道传输Cookie,2-使用随机且足够长的标识符,3-会话令牌有过期机制

3. 错误处理(Error Handling): 错误信息对调试代码很重要,调试模式的详细信息不能对外公开提供,避免暴露给攻击者。如下几种事件应该被记录并发送到SIEM: 1-输入验证失败; 2-认证尝试失败; 3-访问控制失败;4-篡改尝试; 5-使用无效或过期的会话令牌; 6-操作系统或应用程序异常; 7-特权账号的使用; 8-TLS错误; 9-加密错误

 4. 系统故障保护计划: 有两种选择,1-故障防护(fail-secure/fail-closed) 将系统锁住或禁用,知道管理员修复系统, 比如Windows蓝屏机制。 2-应急开放(fail-safe/fail-open) 故障情况下允许用户绕过失败的安全控制,比如火灾报警触发后所有门禁系统自动失效,用户可以自由进出。

API & SDK安全    

API接口可以实现不同服务间的交互。 API需要用安全密钥来实现身份验证和授权,并且需要象Web应用一样在上线前执行安全测试。    

SDK是软件开发工具包,一般是就是第三方服务商提供的实现产品软件某项功能的工具包,它可以包括多个API,功能更齐全

数据库安全

1. 关系数据库

候选键:可用于唯一标识表中记录的字段及字段组合

主键:从候选键中选中用来做当前数据表的唯一标识。每个表都只有一个主键,主键唯一性会被强制检查

外键:一个表的外键对应的是另一个表的主键,通过这个方式来建立表之间的关系(参照完整性)。

元组-tuple:数据表的行

基数-cardinality: 数据表中行的数量

度-degree:数据表中列的数量

域-domain:一组属性可用的允许值

2. 数据库事务

    所有数据库事务都要满足ACID模型

        原子性:事务满足“要么全有,要么全无”

        一致性: 所有事务都必须在与数据库所有规则一致的环境中操作

        隔离性:事务之间彼此隔离

        持久性:事务一旦提交给数据库,就会被保留下来

3. 数据库安全性

1) 使用数据库视图限制访问,允许用户只与受限的视图交互,而非原始表

2) 并发控制 - 更新时锁定数据库表。否则,多进程同时更新数据库会导致更新丢失;进程从未成功提交的事务中读取数据会导致 脏读

3)通过添加时间戳维护数据的完整性和可用性

4)细粒度的对象控制: 包括单元抑制(对数据库字段或单元进行隐藏或masking)和上下文相关的访问控制

5)数据库分区:将数据分拆到多个数据库实例,防止聚合和推理攻击

6)多实例-polyinstantiation: 对同一个cell,在不同的安全分级下使用不同的值,防止推理攻击。比如员工薪资字段,HR看到的是真实值,而数据库运维人员看到的是虚假值。

7)噪音添加与扰动:在数据表中使用错误或欺骗性的数据,保护机密性。有影响业务正常使用的风险。

4. NoSQL

1)保存键值类(key-value)的数据库: Redis, Memcached. 适合于有大量写操作需求的场景。

2)图数据库: Neo4j,NebulaGraph, 存储实体和实体间的关系,适合知识图谱类的数据

3)文档数据库,保存xml或JSON,能提供快速查询。常见的有MongoDB, Azure Cosmos, AWS DynamoDB。




参考资料:

CISSP Official Study Guide - 第九版英文版 及 第八版中文版

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容