您的位置:首页 > 其它

软件安全部分复习总结——《软件安全:使安全成为软件开发必需的部分》

2017-08-07 14:31 162 查看

软件安全部分复习总结

软件安全部分复习总结
第一部分 第四章 代码审计

第一部分 第五章 软件渗透测试

第一部分 第九章 软件安全的万全之策

第一部分 第四章 代码审计

代码审核在接触点体系中的位置是什么?

最重要的部分

代码审核的作用是什么?有什么优劣势?

在程序发布前发现安全弱点。

能尽早发现程序的脆弱性。

如何进行代码审核?

代码审核过程主要是采用源代码静态分析工具队程序进行分析并输出报告;审核人员对报告进行甄别和过滤,踢出误报(假阳性),并确认所发现的安全缺陷。

工具在代码审核中发挥什么作用?有什么局限性

代码扫描工具的定位:计算机辅助人工代码审核。可以代替人工记住所有过滤规则,更快的对代码进行审核。

局限性:较高的误报率和漏报率,需要人工队审核结果进行检查,同时规则也需要人工维护。

第一部分 第五章 软件渗透测试

什么是(软件)渗透测试?

一种针对制定计算机系统,在有合法授法的前提下,模拟黑客进行的漏洞攻击

比较:漏洞评估 vs 渗透测试

漏洞评估:检查系统或服务是否存在潜在安全问题

渗透测试:模拟黑客,并提供攻击载荷,因此比漏洞评 估更进一步。

比较:软件渗透测试 vs 渗透测试

软件渗透测试:针对单一软件或软件系统进行渗透测试

渗透测试:针对任何信息设备或系统,包括硬件、大型 信息系统等

如何做渗透测试?

侦察–>扫描–>渗透–>驻留–>报告

渗透测试常用工具及作用?

HTTrack:获得授权进行测试的ip主机列表

Ping,nmap:端口扫描,得到目标系统开放的端口号及其开放的服务

Nuesse:漏洞扫描,根据开放的端口号和服务扫描可能存在的漏洞

John the Ripper(JtR):密码破解工具

Metasploit:漏洞攻击

Wireshark:流量嗅探

netcat:驻留回连

netbus:远控肉鸡

web服务器扫描工具:Nikto2,Websecurity(为测试者提供交互页面,快速便捷地对web漏洞进行扫描,包括SQl注入、跨站脚本、文件包含、跨站请求伪造等)

漏洞利用(Exploitation):测试者通过目标系统漏洞, 绕过系统防护机制,获取系统控制权限。

漏洞利用程序,漏洞攻击程序(Exploit):预先打包发 送到目标系统中的代码集,引发异常行为,以使我们能 够执行攻击载荷。

攻击载荷(Payload):一段代码,用于完成安装新软件、 创建新用户、开启后门等任务。

示例: 创建一个滥用案例(Cigital提供)

一个处理敏感财务数据库的C/S应用程序

服务器端依靠客户端管理所有的数据访问许可

服务器端不再检查用户的真实证书,就直接授权

客户端存储有敏感数据库的一份完整的拷贝

客户端程序运行在普通PC上

滥用案例

根据“伪装客户端(make the client invisible)”攻击模式

通过嗅探网络数据流构建一个恶意客户端

通过该恶意客户端与服务器端通信,骗取服务器授权,帮助恶意用户成功读取服务器数据库中信息

5.1 安全风险分析方法中的共同主题

分析对象(深入了解待分析的软件对象)

阅读和理解规范、体系结构文档及其他设计材料

进行讨论和头脑风暴

确定系统便捷和数据敏感度/重要程度

实际使用软件

研究代码和其他的软件工作(包括代码分析工具)

分析环境(讨论围绕软件对象的安全问题)

对软件的运行情况展开讨论,确定有异议或含糊的地方

识别可能的安全弱点,可借助工具和常见弱点列表

给出安全弱点利用程序(POC),并讨论可能的修补方法

理解当前的和规划的安全控制(留意它们可能引入的新风险)

识别危害(确定被入侵的概率)

制定利用安全缺点攻击的脚本

综合平衡与防御能力,确定入侵的可能性

分析影响(分析风险影响)

确定风险对资产及商业目标的影响

考虑风险对安全状态(posture)的影响

风险评级

降低风险(制定消除风险的策略)

推荐一些可以消除风险的应对措施(countermeasure)

形成报告(报告风险分析的结果)

依据影响大小,仔细说明主要和次要风险

提供一些基本信息,说明如何使用消除风险的有效资源

第一部分 第九章 软件安全的万全之策

软件构建与安全接触点

需求(滥用案例)

滥用案例是对软件的故意无用,并研究由此导致的后果

滥用案例的作用:引导编制软件的安全需求以及相应的安全测试计划

设计(商业风险分析)

安全分析必须与商业风险联系起来才有价值

软件构建的背后的决策者是软件风险咨询的key man/key woman

必须用商业决策者能够明白的语言来表述安全风险

设计(体系结构风险分析)

体系结构风险分析首先要面对商业人员和决策者,运用他们能够理解的术语来描述风险

然后针对软件系统总体设计、子系统及模块设计内容,分析安全风险,并形成软件体系结构安全状态的总提示图(“森林级视图”)

安全测试

体系结构风险分析评测软件设计方案中的技术安全问题,并与商业影响联系起来

重点发现系统级获组件及设计瑕疵

在体系结构风险分析的结果指导下,形成两类测试计划:功能安全测试计划、对抗性测试计划

代码审核

代码审核时发现实现级缺陷的有效方法

审核人员应用丰富的编程开发经验

静态分析工具对发现易出安全问题的脆弱点十分有用

渗透测试

关注点:软件配置和部署中的认为错误或过程错误

好的渗透测试是由先前识别出的风险驱动,并设计成直接探测这些风险,以确认可渗透的程度

网络渗透测试 vs 应用程序渗透测试:前者由外而内,后者应利用其它接触点结果,实现内外结合的高效

实际应用(部署和操作)

仔细配置软件并部署在安全防护环境中,将有效增强软件及系统的安全性

运行中针对威胁时间进行安全操作及应急响应,并将累积的安全风险与威胁知识运用到新的软件构造过程中

SDCL + BSI –> SDL

几个术语

COTS 商业现货软件

MSA(Master Service Agre
4000
ement) 主要服务合同

SoW (Statement of Work) 工作说明

SLA (Service Level Agreement) 服务水平合同

QoS 服务质量

编码错误分类:

输入确认和表示

由元字符、交替出现的编码和数字表示引起的。应使用白名单进行输入确认。轻信输入导致的问题包括:缓冲区溢出、SQL注入、缓存中毒(Cache Poisoning) 等 。

API滥用

API是调用者与被调用者之间的一种契约。API调用者未能遵守契约。例如:没有在调用chroot()之后调用chdir()。

安全特性

软件安全不等于具有安全性的软件。例如:用SSL保护数据

时间与状态

在分布式计算环境中,为让多个组件互相通信,就需要共享状态。用传统的程/序执行模型描述并行化执行操作,就容易产生与线程、过程、时间和信息之间的意外交互相关的错误。

错误处理

现代程系统异常处理机制在一程度上与使用goto语句相似。错误和错误处理程序是一类编程契约。

代码质量

安全性是可靠性的子集。

封装

封装是在事物之间划清界线并在其间设置屏障。

*_环境

环境包含位于你的代码之外,但对软件的安全至关重要的所有事物。应跳到软件之外,从外向内看。



判断对错:

我的系统安装了杀病毒软件、防火墙、IDS(入侵 检测系统) 等产品,因此是安全的。

即使安装了网络安全防护产品,但如果所防护的软件(比如浏览器)存在漏洞或后门,攻击者仍然可以通过浏览器穿透防护而入侵系统。

如果软件自身存在安全缺陷,就存在穿透外围的网络安全防护的风险,系统就不是安全的。

微软的Windows10是最安全的Windows操作系统。 我的电脑预装win10,因此我的系统就安全了。

预装系统如果没有及时升级和修补漏洞,就无法保证是安全的。

软件的随时在线升级和模块(插件)动态装在,使软件动态化。安全也必须是动态安全。

我的系统中采用最好的加密算法,难以破解。因此是安全的。

虽然采用最好地加密算法,但如果在编程实现上存在缺陷,系统也是不安全的。

只有(算法)涉及和开发实现都是安全的,才能确保最终安全。

我的系统采用了可信计算体系,因此是安全的。

可信计算依靠环环相扣的信任链,如果其中的软件存在安全缺陷,就有可能被攻击者利用来骗取信任。

只有(算法)涉及和开发实现都是安全的,才能确保最终安全。

我的系统是自己开发的,因此是安全的。

系统虽然是自己开发的,但难免调用第三方构建库;或者没有遵循安全的开发过程,都可能导致系统存在安全隐患。

当今商业软件的开发依赖于全球供应链,开发过程需要有一套行之有效的安全保障方法。

网络攻防就是黑客的那些事儿。

当今的网络入侵事件既有脚本小子的捣鼓,也有国家级高水平、有组织的体系化网络攻击。

网络战已悄然打响。

什么是软件安全?

软件安全是网络空间安全的重要部分,主要研究软件自身的安全问题 、防护及评估技术,以及软件安全的工程化保障方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息