82
软软软软软软 软软软软软软 1 1/82 软软软软软软 软 软 软 软 软 软 软软软软软软 软软软软软软

第 七 讲 软件质量概述

  • Upload
    wilmer

  • View
    92

  • Download
    0

Embed Size (px)

DESCRIPTION

第 七 讲 软件质量概述. 内 容. 一、软件面临的问题 二、问题分析 三、从质量到可信 四、设计质量 五、安全漏洞. 一、软件面临的问题. 从与软件相关的一些重大事故谈起. CSDN 网站 600 万用户密码泄露. 2011 年 12 月 21 日早晨,新浪微博爆出 CSDN 网站 600 多万用户的账户明文密码库泄露,当天出现迅雷快传链接 12 月 22 日晚, CSDN 发表声明: 向公安机关正式报案 临时关闭用户登录 并要求“ 2009 年 4 月以前注册的帐号,且 2010 年 9 月之后没有修改过密码”的用户立即修改密码. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 七 讲 软件质量概述

软件质量概述软件质量概述 11/82高级软件工程

第 七 讲第 七 讲

软件质量概述软件质量概述

Page 2: 第 七 讲 软件质量概述

软件质量概述软件质量概述 22/82高级软件工程

内 容 一、软件面临的问题二、问题分析三、从质量到可信四、设计质量五、安全漏洞

Page 3: 第 七 讲 软件质量概述

软件质量概述软件质量概述 33/82高级软件工程

一、软件面临的问题

从与软件相关的一些重大事故谈起

Page 4: 第 七 讲 软件质量概述

软件质量概述软件质量概述 44/82高级软件工程

CSDN CSDN 网站 网站 600 600 万用户密码泄露万用户密码泄露

继 CSDN 后,天涯、开心网、多玩、世纪佳缘、珍爱网、美空网、百合网、 178 、 7K7K 等知名网站也被网友爆出采用明文密码,用户数据资料被放到网上公开下载

2011 年 12 月 21 日早晨,新浪微博爆出 CSDN 网站 600 多万用户的账户明文密码库泄露,当天出现迅雷快传链接12 月 22 日晚, CSDN 发表声明:

向公安机关正式报案临时关闭用户登录并要求“ 2009 年 4 月以前注册的帐号,且 2010 年 9 月

之后没有修改过密码”的用户立即修改密码

Page 5: 第 七 讲 软件质量概述

软件质量概述软件质量概述 55/82高级软件工程

2012 年 3 月 20 日,北京警方宣布成功侦破了曾在互联网上造成巨大影响的CSDN网站用户数据泄露案,涉案犯罪嫌疑人已经被刑事拘留。

2012 年 2 月 4 日,专案组在浙江温州将网民曾某抓获,曾某承认, 2010 年 4 月利用 CSDN 网站漏洞,非法侵入服务器获取用户数据。在审查中,犯罪 嫌疑人曾某交代,他曾经入侵过某充值平台及某股票系统。警方介绍,在追查 CSDN 数据库泄露源头的过程中,侦查员又破获了另外4起网络泄密案,先后抓获 4 名“黑客”。

关键线索:” 2010 年 9 月,一网民发帖自称掌握 CSDN 数据库,要求与公司进行合作”。

Page 6: 第 七 讲 软件质量概述

软件质量概述软件质量概述 66/82高级软件工程

黑客入侵深圳福彩 黑客入侵深圳福彩 篡改数据欲骗篡改数据欲骗 33053305 万巨奖万巨奖

事件: 2009 年 6 月 9 日,双色球 2009066 期开奖,全国共中出一等奖 9 注,其中深圳有 5 注。深圳市福彩中心在开奖(程序)结束后发现系统出现异常。经多次数据检验,工作人员判断,福彩中心销售系统 疑被非法入侵,中奖彩票数据记录被人为篡改, 5 注一等奖中奖数据系伪造。 6 月 10 日凌晨 2 时,福彩中心工作人员报案

结果:经调查,这是一起企图利用计算机网络信息系统技术诈骗彩票奖金的案件,所涉金额高达 3305 万元

原因:深圳市某信息技术公司软件开发工程师程某,利用在深圳福彩中心实施其它技术合作项目的机会,通过木马攻击程序,恶意篡改彩票数据,以达到伪造双色球一等奖中奖事实

Page 7: 第 七 讲 软件质量概述

软件质量概述软件质量概述 77/82高级软件工程

2007 年 10 月 30 日,奥运门票第二阶段阶段预售首日……

科技奥运?

Page 8: 第 七 讲 软件质量概述

软件质量概述软件质量概述 88/82高级软件工程

2007 年 8 月 14 日 14 时,美国洛杉矶国际机场电脑发生故障, 60 个航班的 2 万旅客无法入关。直至次日凌晨3时50分,所有滞留旅客才全部入关。

原因分析: 包含旅客姓名和犯罪记录的部分数据系

统 (海关和边境保护系统:决定旅客是否可以进入美国领土 )瘫痪

2004 年 9 月发生过类似问题

Page 9: 第 七 讲 软件质量概述

软件质量概述软件质量概述 99/82高级软件工程

2006 年 3 月 2 日 14 点 10 分,沪深大盘忽然发生罕见大跳水, 7 分钟之内上证指数跌去近 20 点。

原因分析: 当日下午刚上市的招商银行认股权证成交量巨大,导致其行情显示时总成交量字段溢出,使其价格在股票分析软件上成为一条不再波动的直线,让市场产生了恐慌。

Page 10: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1010/82高级软件工程

2005 年 4 月 20 日上午 10 时 56 分,中国银联系统通信网络和主机出现故障,造成辖内跨行交易全部中断。这是 2002 年中国银联成立以来,首次全国性因系统故障造成的跨行交易全面瘫痪。

原因:银联新近准备上线的某外围设备的隐性缺陷诱发了跨行交易系统主机的缺陷,使主机发生故障

软件能否提供支持 ?

Page 11: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1111/82高级软件工程

2003 年 8 月 14 日下午 4 时 10 分,美国及加拿大部分地区发生历史上最大的停电事故。 15日晚逐步恢复

后果:经济损失 250亿到 300亿之间

原因分析 俄亥俄州的第一能源( FirstEnergy)公司 x 下属的电力监测与控制管理系统软件 XA/21 出现错误,系统中重要的预警部分出现严重故障,负责预警服务的主服务器与备份服务器连接失控,错误没有得到及时通报和处理,最终多个重要设备出现故障,导致大规模停电

2003 年国际十大

Page 12: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1212/82高级软件工程

1996 年 6 月 4 日,欧洲空间局的阿丽亚娜火箭,发射后 37秒爆炸。损失 6亿美元

原因分析: ADA语言编写的一段程序,将一个 64位浮点整数转换为 16位有符号整数时,产生溢出,导致系统惯性参考系统完全崩溃

Page 13: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1313/82高级软件工程

1994 年 12 月 3 日,美国弗吉尼亚州 Lynchburg 大学的 T.R.Nicely 博士使用装有 Pentium 芯片的计算机时发现错误:

( 4195835/3145727)*3145727-4195835==0?后果: Intel 花费 4亿多美元更换缺陷芯片

原因: Pentium 刻录了一个软件缺陷(浮点除法)

Page 14: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1414/82高级软件工程

2002 年 6 月 28 日美国商务部的国家标准技术研究所( NIST)发布报告:

“据推测,(美国)由于软件缺陷而引起的损失额每年高达 595 亿美元。这一数字相当于美国国内生产总值的 0.6%” 。

“据推测,(美国)由于软件缺陷而引起的损失额每年高达 595 亿美元。这一数字相当于美国国内生产总值的 0.6%” 。

Page 15: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1515/82高级软件工程

二、问题分析二、问题分析从质量谈起

1 、什么是质量?2 、什么是软件质量?33 、为什么软件质量保障困难?、为什么软件质量保障困难?

Page 16: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1616/82高级软件工程

1 、什么是“质量”

– “ 好坏程度”

– ISO 9000(2000 版 ) 质量是

(产品)的 一组固有特性满足要求的程度

Page 17: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1717/82高级软件工程

特性:可区分的特征 物理特征:机械运动、温度、电流等 化学特征:成分组合、合成、分解等

固有特性:某事物中本来就有的、持久的特征直径、硬度、高度、频率

赋予特性:对事物增加的特性 价格、位置

二者有一定的相对性

Page 18: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1818/82高级软件工程

要求:

显式要求: 有明确规定的要求(行业标准或用户指定)计算机屏幕尺寸

隐式要求: 约定成俗的要求大楼要有楼梯

产品质量特性:内部特性、外部特性

满足的 程度!满足的 成本 !

Page 19: 第 七 讲 软件质量概述

软件质量概述软件质量概述 1919/82高级软件工程

22 、什么是软件质量?、什么是软件质量?

软件质量是:

软件产品满足规定的和隐含的与需求能力有关的全部特征和特性

Page 20: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2020/82高级软件工程

来源于 Barry Boehm 的软件质量模型形成了 ISO-9126ISO-9126 的软件质量模型框架的软件质量模型框架影响了 影响了 软件生存周期中的不同阶段

…………

区分不同的软件 !

Page 21: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2121/82高级软件工程

Barry Boehm 的软件质量模型阐述性

互用性互用性 数据公开性

正确性正确性

可靠性可靠性

效率效率

完整性完整性

可用性可用性

可维护性可维护性

可测试性可测试性

灵活性灵活性

可移植性可移植性

重复性重复性

连贯性容错性执行效率 /储存效率存取控制 /存取检查

可训练沟通良好 简单性易操作的工具自我操作性扩展性一般性模块性软件系统独立性机器独立性通讯公开性

正确性

可操作性

Page 22: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2222/82高级软件工程

ISO-9126ISO-9126 的软件质量模型框架的软件质量模型框架

外部测量

内部质量属性

外部质量属性

使用质量属性

过程

质量

过程

过程测量

内部测量

使用质量的测量

软件产品 软件产品的效用

使用条件

影响 影响 影响

依赖 依赖 依赖

过程质量 有助于提高 产品质量产品质量 有助于提高 使用质量过程质量 有助于提高 产品质量产品质量 有助于提高 使用质量

Page 23: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2323/82高级软件工程

用户质量要求

用户质量要求

使用质量使用质量

内部质量需求

内部质量需求

内部质量内部质量

外部质量需求

外部质量需求

外部质量外部质量

使用和反馈

确认

验证

有助于确定 指示

指示有助于确定

软件生存周期中的质量

Page 24: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2424/82高级软件工程

外部和内部质量外部和内部质量

功能性功能性 可靠性可靠性 易用性易用性 效率效率 维护性维护性 可移植性可移植性

适合性准确性互操作性保密安全性

功能性的依从性

成熟性容错性易恢复性

可靠性的依从性

易理解性易学性易操作性吸引性

易用性的依从性

时间特性资源利用性

效率的依从性

易分析性易改变性稳定性易测试性

维护性的依从性

适应性易安装性共存性易替换性

可移植性的依从性

*** 的依从性:软件产品遵循与 *** 相关的标准、约定或法规以及类似规定的能力

Page 25: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2525/82高级软件工程

使用质量使用质量

有效性有效性 生产率生产率 安全性安全性 满意度满意度

Page 26: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2626/82高级软件工程

33 、为什么软件质量保障困难?、为什么软件质量保障困难?

( 1 )软件产品与需求符合的程度( 2 )软件的本质( 3 )软件度量困难

Page 27: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2727/82高级软件工程

( 1 )软件产品与需求符合的程度

需求与成本之间的矛盾需求是永无止境的成本是永远有限的

微软:质量只要好到能使大量的产品卖给客户

NASA :可靠性要达到 99.999%

Motorola : 6 Σ

软件产品属性完全满足用户需求是不现实的

Page 28: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2828/82高级软件工程

( 2 )软件的本质– 规模、复杂性、演化性– 网络环境– 软件研发过程缺乏基础理论支撑– 软件产品的验证缺乏基础理论支持

Page 29: 第 七 讲 软件质量概述

软件质量概述软件质量概述 2929/82高级软件工程

( 3 )软件度量困难 “You can't control what you don't measure”

Tom DeMarco, 1982

对比物理属性:尺子、秤、时钟、温度计、测速仪

它们的发展过程 !

代码、过程、组织

度量无处不在!

Page 30: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3030/82高级软件工程

三、从质量到可信

1 、什么是可信?2 、什么样的软件是可信的?

Compaq 、 HP 、 IBM 、 Intel 和 Microsoft 等发起 (1999): Trusted Computing Platform Alliance

后来增加软件: Trusted Computing Group ( 2003)微软倡导 (2002):

Trustworthy Computing

Page 31: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3131/82高级软件工程

11 、什么是可信?、什么是可信?

– Trusted– Trustworthy– Dependability– Confidence– Assurance

一个实体在实现给定目标时,其行为与结果总是可以预期的

Page 32: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3232/82高级软件工程

可信软件可信软件

软件是可信的 , 如果 : 其服务总是与用户的预期相符

(质量 ?)

即使在运行过程中出现一些特殊情况

Page 33: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3333/82高级软件工程

1 、硬件环境(计算机、网络)发生故障2 、低层软件(操作系统、数据库)出现错误 3 、其它软件(病毒软件、流氓软件)对其产生影响4 、出现有意(攻击)、无意(误操作)的错误操作

什么特殊情况 ?

Page 34: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3434/82高级软件工程

22 、什么样的软件是可信的?、什么样的软件是可信的?

可用功能:正确、不少、不多可靠性(容错):高安全性(机密性、完整性):高响应时间(从输入到输出):小维护费用(监测、演化):小……

Page 35: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3535/82高级软件工程

质量与可信(质量与可信( 11))可信更多关主体与客体的关系

– 是系统“承诺”与实际表现的符合程度。存在这样一种情形,质量不是很高,但有具体的说明,仍然有高的可信性。

– 同一个系统的质量是确定的,但对不同主体的可信度可能不一样:一个受侵害的系统,对于实际用户是不可信的,对于黑客是可信的

– 对于同一个系统,当用户对其信息掌握得有限时,可信度低,掌握了较多的正面信息时,可信度提升

Page 36: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3636/82高级软件工程

质量与可信(质量与可信( 22))质量主要是针对客体自身而言的

质量与可信之间的关系 类似于 软件与服务之间的关系

服务、可信 更多地关注 主体:最终用户

软件、质量 更多地关注 客体:软件自身

Page 37: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3737/82高级软件工程

1 、例子2 、模型检测概述3 、模型检测算法概览4 、模型检测工具

四、设计质量四、设计质量

Page 38: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3838/82高级软件工程

Needham-Schroeder 身份认证协议

[N, S1]Z

[S1, S2]N

[S2]Z

通信过程可能被窃听!加密可以防止窃听!如何约定加密数字?每人 有自己的标识: N每人 公布自己的公钥 : 只有 N 才能解开的消息: [****]N

每个对话过程 用一对数字对内容加密 : S1, S2

每次对话前 需要首先建立这对数字

该协议于 1978 年被提出并得到广泛应用

N Z

1 、例子

Page 39: 第 七 讲 软件质量概述

软件质量概述软件质量概述 3939/82高级软件工程

[N, S1]W

[S1, S2]N

[S2]W

[N, S1]Z

[S1, S2]N

[S2]Z

1996 年,发现该协议存在设计缺陷:

攻击者可以伪装一方的身份

利用模型检测方法!

被欺骗!不可信!

开始伪装 ZWN

Page 40: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4040/82高级软件工程

In 1992 Clarke and his students at CMU used SMV to

verify the IEEE Future+ cache coherence protocol.

• They found a number of previously undetected errors in

the design of the protocol.

• This was the first time that formal methods have been

used to find errors in an IEEE standard.

• Although the development of the protocol began in 1988,

all previous attempts to validate it were based entirely

on informal techniques.

Page 41: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4141/82高级软件工程

In 1992 Dill and his students at Stanford used Murphito

verify the cache coherence protocol of the IEEE Scalable

Coherent Interface.

• They found several errors, ranging from uninitialized

variables to subtle logical errors.

• The errors also existed in the complete protocol, although

it had been extensively discussed, simulated, and even

implemented.

Page 42: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4242/82高级软件工程

In 1995 researchers from Bull and Verimag used LOTOS

to describe the processors, memory controller, and bus

Arbiter of the Power Scale multiprocessor architecture.

• They identified four correctness requirements for proper

functioning of the arbiter.

• The properties were formalized using bisimulation

relations between finite labeled transition systems.

• Correctness was established automatically in a few

minutes using the CÆSAR/ ALDÉBARAN toolbox.

Page 43: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4343/82高级软件工程

A High-level Data Link Controller was being designed at AT&T in Madrid in 1996 • Researchers at Bell Labs offered to check some

properties of the design using the Formal Check verifier.

• Within five hours, six properties were specified and five were verified.

• The sixth property failed, uncovering a bug that would

have reduced through put or caused lost transmissions!

Page 44: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4444/82高级软件工程

Richard Raimi used Motorola’s Verdict model

checker to debug a hardware laboratory failure.

•Initial silicon of the PowerPC 620 microprocessor

Crashed during boot of an operating system.

•In a matter of seconds, Verdict found a BIU deadlock

causing the failure.

Page 45: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4545/82高级软件工程

In 1994 Bosscher, Polak, and Vaandrager won a best-

paper award for proving manually the correctness of a

control protocol used in Philips stereo components.

• In 1995 Ho and Wong-Toi verified an abstraction of this

protocol automatically using HyTech.

• Later in 1995 Daws and Yovine used Kronos to check all

the properties stated and hand proved by Bosscher, et al.

Page 46: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4646/82高级软件工程

The NewCoRe Project (89-92) was the first application

of formal verification in a software project within

AT&T.

• A special purpose model checker was used in the

development of the CCITT ISDN User Part Protocol.

• Five “verification engineers” analyzed 145

requirements.

• A total of 7,500 lines of SDL source code was verified.

• 112 errors were found; about 55%of the original

design requirements were logically inconsistent.

Page 47: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4747/82高级软件工程

In 1995 the Concurrency Workbench was used to analyze

an active structural control system to make buildings

more resistant to earthquakes.

• The control system sampled the forces being applied to

the structure and used hydraulic actuators to exert

countervailing forces.

• A timing error was discovered that could have caused

the controller to worsen, rather than dampen, the

vibration experienced during earthquakes.

Page 48: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4848/82高级软件工程

ACM 2007ACM 2007 年度图灵奖(年度图灵奖( Turing Turing AwardAward))

Edmund M. Clarke, E Allen Emerson, Joseph Sifakis

1981 年,美国的 Edmund Clarke 和 Allen Emerson以及在法国的 Sifakis 分别提出了模型检测( Model Checking )的最初概念

他们开发了一套用于判断硬件和软件设计的理论模型是否满足规范的方法

当系统检测失败时,还能利用它确定问题存在的位置

Page 49: 第 七 讲 软件质量概述

软件质量概述软件质量概述 4949/82高级软件工程

软件设计模型? •Statecharts……

用于软件?

软件代码?Use static analysis to extract a finite state synchronization skeleton from the program. Model check the result. •Bandera --Kansas State •Java PathFinder --NASA Ames •Slam Project (Bebop) --Microsoft

Page 50: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5050/82高级软件工程

22 、模型检测概述、模型检测概述1 )基本情况2 )什么是模型检测3 )基本思想4 )过程描述

Page 51: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5151/82高级软件工程

产生– 20 世纪 80 年代初, Clarke, Emerson 等提出了

用于并发系统性质的 CTL逻辑,设计了检测有穷状态系统是否满足给定 CTL 公式的算法

特性– 能给出反例– 自动化程度高

应用– 计算机硬件、通信协议、控制系统、安全认证协议、软件安全 等

11 )基本情)基本情况况

Page 52: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5252/82高级软件工程

定义 [Clarke & Emerson 1981]“Model checking is an automated technique that, given a finite-state model of a system and a logical property, systematically checks whether this property holds for (a given initial state in) that model.”

给定一个系统的有限状态模型,和一个逻辑性质,系统地检测:这个模型(含初始状态)满足该性质

2 )什么是模型检测

Page 53: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5353/82高级软件工程

3 )基本思想

( 1)用状态迁移系统 (S) 表示系统的行为,用模态 / 时序逻辑公式 (F)描述系统的性质。 ( 2)“系统是否具有某种期望的性质”就转化数学问题“状态迁移系统 S是否是公式 F 的一个模型?” 公式表示: S |= F? 对于有限状态迁移系统,这个问题是可以判定的。

Page 54: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5454/82高级软件工程

4 )过程描述

OK

Error trace

or1 、建立模型Finite-state model

2 、描述系统性质Temporal logic formula

3 、输入工具Model Checker

Line 5: …Line 12: …Line 15:…Line 21:…Line 25:…Line 27:… …Line 41:…Line 47:…

Page 55: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5555/82高级软件工程

3 、模型检测算法概览

1 )系统的表示2 )属性的表示3 )搜索状态空间

2 个例子: CTL 与 LTL

Page 56: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5656/82高级软件工程

例子例子 ::微波炉系微波炉系统统

~Start~Close~Heat~Error

Start~Close~HeatError

~StartClose~Heat~Error

~StartCloseHeat~Error

StartClose~HeatError

StartClose~Heat~Error

StartCloseHeat~Error

1

32 4

6 75

start ovenopen door

open door

close door

open door

cook

warmup

start ovenreset

start cooking

close door

1 )系统的表示

Page 57: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5757/82高级软件工程

2 )属性表示 (Property Specification)

用各种模态 / 时序逻辑表示:•计算树逻辑( CTL: Computation Tree Logic )•线性时序逻辑 ( LTL: Linear Temporal Logic )•模态命题 u --演算( u-Calculus )

For any reachable state: if “Start” holds, then along all outgoing paths, “Heat” eventually holds.

AG( Start → AF Heat )AG( Start → AF Heat )

主要检测属性类型:安全性( safety ):坏的事情不会发生。例如:无死锁活性( liveness ):好的事情终会发生。例如:请求响应公平性( fairness ):一致性( consistency ):

Page 58: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5858/82高级软件工程

33 )搜索状态空)搜索状态空间间逻辑表达式转换:

E(Exist): 对于某一个分支U(Until): 直到某一状态G(Global): 现在和以后所有状态 A(Always):对所有分支F(Future): 现在和以后某一状态X(Next-Time):

¬EF( Start Λ EG ¬ Heat )¬EF( Start Λ EG ¬ Heat )

AG α = ¬EF(¬α)AF α = A(true Uα)A(α Uβ)= ….

AG( Start → AF Heat )AG( Start → AF Heat )

Page 59: 第 七 讲 软件质量概述

软件质量概述软件质量概述 5959/82高级软件工程

~Start~Close~Heat~Error

Start~Close~HeatError

~StartClose~Heat~Error

~StartCloseHeat~Error

StartClose~HeatError

StartClose~Heat~Error

StartCloseHeat~Error

1

32 4

6 75

start oven open dooropen door

close door

open door

cook

warmup

start ovenreset

start cooking

close door

¬EF( Start Λ EG ¬ Heat ) 1.S(Start) ={2,5,6,7}2.S(¬Heat)={1,2,3,5,6}3.S’=S(¬Heat)={1,2,3,5,6} SCC={1,2,3,5}T={1,2,3,5} =>S(EG ¬Heat)={1,2,3,5}4.S={2,5}5.S={1,2,3,4,5,6,7}6.S=Ø

Page 60: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6060/82高级软件工程

Needham-Schroeder 身份认证协议

mtype = {msg1, msg2, msg3, alice, bob, intruder, nonceA, nonceB, nonceI, keyA, keyB, keyI, ok};

typedef Crypt { /* the encrypted part of a message */ mtype key, d1, d2;}

chan network = [0] of {mtype, /* msg# */ mtype, /* receiver */ Crypt};

mtype partnerA, partnerB;mtype statusA, statusB;

/* Knowledge about nonces gained by the intruder. */bool knowNA, knowNB;

(http://www.loria.fr/~merz/papers/NeedhamSchroder.spin)

利用 Promela ( protocol meta language)语言描述系统模型:

Page 61: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6161/82高级软件工程

active proctype Alice() { /* honest initiator for one protocol run */ mtype partner_key, partner_nonce; Crypt data;

if /* nondeterministically choose a partner for this run */ :: partnerA = bob; partner_key = keyB; :: partnerA = intruder; partner_key = keyI; fi;

d_step { /* Construct msg1 and send it to chosen partner */ data.key = partner_key; data.d1 = alice; data.d2 = nonceA; } network ! msg1(partnerA, data);

Page 62: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6262/82高级软件工程

/* wait for partner to send back msg2 and decipher it */ network ? msg2(alice, data); end_errA: /* make sure the partner used A's key and that the first nonce matches, otherwise block. */ (data.key == keyA) && (data.d1 == nonceA); partner_nonce = data.d2;

d_step { /* respond with msg3 and declare success */ data.key = partner_key; data.d1 = partner_nonce; data.d2 = 0; } network ! msg3(partnerA, data); statusA = ok;} /* proctype Alice() */

Page 63: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6363/82高级软件工程active proctype Bob() { /* honest responder for one run */ mtype partner_key, partner_nonce; Crypt data; network ? msg1(bob, data); end_errB1: (data.key == keyB); partnerB = data.d1; d_step { partner_nonce = data.d2; if :: (partnerB == alice) -> partner_key = keyA; :: (partnerB == bob) -> partner_key = keyB; /* shouldn't happen */ :: (partnerB == intruder) -> partner_key = keyI; fi; /* respond with msg2 */ data.key = partner_key; data.d1 = partner_nonce; data.d2 = nonceB; } network ! msg2(partnerB, data); /* wait for msg3, check the key and the nonce, and declare success */ network ? msg3(bob, data); end_errB2: (data.key == keyB) && (data.d1 == nonceB); statusB = ok;}

Page 64: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6464/82高级软件工程

active proctype Intruder() { mtype msg; Crypt data, intercepted; mtype icp_type; /* type of intercepted message */ do :: /* Send msg1 to B (sending it to anybody else would be foolish). May use own identity or pretend to be A; send some nonce known to I.*/ if /* either replay intercepted message or construct a fresh message */ :: icp_type == msg1 -> network ! msg1(bob, intercepted); :: data.key = keyB;

if:: data.d1 = alice;:: data.d1 = intruder;fi;if:: knowNA -> data.d2 = nonceA;:: knowNB -> data.d2 = nonceB;:: data.d2 = nonceI;fi;

network ! msg1(bob, data); fi;……

Page 65: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6565/82高级软件工程network ? msg (_, data) -> if /* Perhaps store the data field for later use */ :: d_step {

intercepted.key = data.key; intercepted.d1 = data.d1; intercepted.d2 = data.d2;

icp_type = msg;}

:: skip; fi; d_step {

if /* Try to decrypt the message if possible */:: (data.key == keyI) -> /* Have we learnt a new nonce? */ if :: (data.d1 == nonceA || data.d2 == nonceA) -> knowNA = true;

:: else -> skip; fi; if :: (data.d1 == nonceB || data.d2 == nonceB) -> knowNB = true; :: else -> skip; fi;:: else -> skip;fi;

} od;}

Page 66: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6666/82高级软件工程

检验性质:

G( (statusA = ok Λ statusB = ok) => (partnerA = bob partnerB = alice) )

模型检测缺点(用于软件模型检测):

空间爆炸:值域太泛

Page 67: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6767/82高级软件工程

1 ) SMV

2 ) SPIN

3)其它工具

4 、模型检测工具

Page 68: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6868/82高级软件工程

1 ) SMV美国 CMU 计算机学院的 L.McMillian 博士于 1992 年开发基于“符号模型检验”( Symbolic Model Checking )技术SMV早期是为了研究符号模型检测应用的可能性而开发的一种对硬件进行检测的一种实验工具

一个 SMV 程序由两部分组成: 一个有限状态转换系统和一组 CTL 公式

把初始状态和转换关系表示成二叉决策树图 BDDs(Binary Diciding Diagrams)

属性也就是 CTL 公式,也表示成 BDDs ,通过模型检测算法搜索系统状态空间,给出结果:一个声明的属性是正确的,

或者是不正确的并给出一个反例

Page 69: 第 七 讲 软件质量概述

软件质量概述软件质量概述 6969/82高级软件工程

2 ) SPIN

由贝尔实验室的形式化方法与验证小组于 1980 年开始开发的模型检测工具

建模方式:使用 Promela语言建模,整个系统可以看作是一组同步的可扩展的有限状态机

模型检测器:可当做一个完整的 LTL ( Linear Temporal Logic )模型检验系统来使用,支持所有的可用的线性时态逻辑表示的正确性验证要求,也可以在有效的 on-the-fly 检验系统中用来检验协议的安全特征

其他的特征:将偏序简约( partial order reductions )技术、 Bit State Hashing方法和线性时序逻辑有效的结合使用

适合用于:通信协议的检测和线性时序逻辑模型检测

Page 70: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7070/82高级软件工程

3 )其它工具

•PROD•建模方式:基于 Pr/T Petri 网,有自己的对 Pr/T Petri 网的描述语言• 分析方式:实现可达图的 CTL模型检测以及基于 on-the-fly 方法的 LTL验证

Perti 网工具: INA 、 Lola 、 PEP 、 Design/CPN…

Uppaal 和 Kronos :是用于时控系统的模型检测工具

Caesar Aldebaran(CADP) :是基于 LTSs 的一组模型检测工具

Java Pathfinder 2 :是 Java 程序检测器

Slam :一个检测 C 程序的检测工具

Page 71: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7171/82高级软件工程

五、五、安全漏洞安全漏洞

1 ) SQL 注入 2)脚本注入 3)跨站点攻击 4)代码分析

让正确的人得到正确的服务!

黑暗的利益!

Page 72: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7272/82高级软件工程

11 )) SQLSQL 注入注入 SQL 注入的成因主要是因为向数据库提供的

SQL 查询语句是用字符串拼装的方式生成的最经常遭受 SQL 注入的页面通常是管理员 / 用

户登陆点。不论是 asp 或是 jsp ,如果不正确的编码,都会出现这个漏洞

Page 73: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7373/82高级软件工程

假设我们有一个 JSP 页面 login.jsp ,它会把用户名与密码提交到指定的模块Controller 调用 chekAdminLogin(String userName, String passWord) 进行登陆验证如果从表中找到匹配的记录,则表示验证成功。否则返回 Null 表示登陆验证失败。

checkAdminLogin 将收集到的用户名和密码信息拼装出 SQL 字符串,供 DAO 下层使用,以从数据库中的管理员记录表中读取数据

Page 74: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7474/82高级软件工程

如果有人试图在这里进行恶意攻击:在登陆名输入框中输入 123 (任意值 ) 而在密码输入框中输入 ’ OR ’1’=’1那么由于我们的 SQL 是靠拼出来的,所以最终提交给数据库的将是 :

SELECT * FROM TD_ADMIN AS A WHERE A.USERNAME=’123’ AND A.PASSWORD=’’ OR ’1’=’1’

很显然,这句 SQL 由于后面被加上了永真条件,登陆是一定成功的。那么不论登陆者是否是管理员,输入 ‘ OR ‘1’=’1 ,他都将能够登陆系统。

public Admin checkAdminLogin(String userName, String password){String strSQL =”SELECT * FROM TD_ADMIN AS A WHERE A.USERNAME=’” + userName + ”’ AND A.PASSWORD=’” + password + ”’”;

对策之一:Java 中对该模式的实现有 PreparedStatment或者 NamingQuery 一类的技术,实现了参数与逻辑的分离,可以从根本上杜绝 SQL 注入。

Page 75: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7575/82高级软件工程

2)脚本注入 这里所说的脚本,通常指的是 JavaScript脚本,虽然

JavaScript 运行于客户端,并且有安全沙箱的保护,但是放任恶意 JavaScript脚本是十分危险的

一个网站,如果对输入未做合理的验证或过滤,在显示输出的时候又未做合适的格式化,那么便存在这种漏洞

与 SQL 注入不同,脚本注入没有直接攻击服务端,实际上是攻击了客户端 – 窃取信息!

Page 76: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7676/82高级软件工程

假设我们有一个新闻站点,每个新闻允许浏览者进行评论浏览者提交的评论将被存储在数据据库专门的表中,并显示在新闻的下边

如果开发者除了字符长度外没有做任何输入合法验证,那么这个站点的评论输入,就存在安全漏洞。

假设我们在评论中输入如下内容 :

<script language=”javascript”>alert(“ 这里存在脚本注入漏洞 .”);</script>

那么,这句话将被存储在数据库评论表中。以后,每一个浏览者打开这个新闻页面是,都将会弹出这样一个消息框。

上面的攻击者很仁慈,没有做过多的破坏。但是如果输入 :

<script language=”javascript”>window.location.href=”www.baidu.com”;</script>

那么打开这个新闻页面,该页面将被从定向到 baidu 的页面上。如果目标页面一个有恶意代码的页面,那么每个浏览者的机器都可能中毒。

Page 77: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7777/82高级软件工程

如果输入 :

好文 ! 顶  <iframe src=”带病毒的页面” width=”0” height=”0”></iframe>

那么在新闻页面上看不到任何异状但点击该信息的浏览器会悄悄下载病毒

WEB2.0 的流行使页面效果更加绚丽,同时也使脚本注入的攻击力提高不少

对策之一:提供合理的过滤或者转换程序,在输入存放于数据库前,或者是显示在页面前对数据进行处理。尽一切可能,避免用户的输入有执行的可能。

Page 78: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7878/82高级软件工程

3 )跨站点攻击

跨站攻击和脚本注入非常相似,但必须要诱使受害者点击链接才能得以执行

与脚本注入的不同– 用于脚本注入的恶意脚本提交后,将存储在服务器数据库中,导致每个访问问题页面的浏览者都将遭到恶意脚本的攻击

– 而跨站攻击多数情况是将恶意脚本构造于 url参数中,通过欺骗的方式去诱使受害者点击链接,使得恶意脚本执行

虽然 Web 站点上存在安全漏洞,但是 Web 站点从未受到直接伤害

漏洞难于查找,特别容易被忽略

cross-site scripting ,简称 XSS

Page 79: 第 七 讲 软件质量概述

软件质量概述软件质量概述 7979/82高级软件工程

恶意攻击者(这里使用 Evil.org 表示)通过 E-mail 或 HTTP 将某银行的网址链接发给用户(银行用 bank.com 表示),该链接中附加了恶意的脚本(上图步骤 1 )

用户访问发来的链接,进入银行网站,同时,嵌在链接中的脚本被用户的浏览器执行(上图步骤 2 、 3 )

用户在银行网站的所有操作,包括用户的 cookie 和 session 信息,都被脚本收集到,并且在用户毫不知情的情况下发送给恶意攻击者(上图步骤 4 )

恶意攻击者使用偷来的 session 信息,伪装成该用户,进入银行网站,进行非法活动(上图步骤 5 )

Page 80: 第 七 讲 软件质量概述

软件质量概述软件质量概述 8080/82高级软件工程

4 )代码分析

找出所有的系统输入位置,确定可能的攻击界面 用户输入 数据库 配置文件 网络服务 命令行 注册表 ……..

目标系统

Page 81: 第 七 讲 软件质量概述

软件质量概述软件质量概述 8181/82高级软件工程

对所有的输入进行验证 语法检查:格式是否正确,特殊字符过滤

白名单、黑名单 语义检查:输入是否恰当

分析污染传播 使用数据流分析判断攻击者能控制的值

污染传播模式

源: read(), getenv(); getpass() 等

接收器: Statement.executeQuery(), strcpy();

传递: trim();

……

Page 82: 第 七 讲 软件质量概述

软件质量概述软件质量概述 8282/82高级软件工程

National Vulnerability Database (国家漏洞数据库)