1.古典密码体制的安全性在于保持算法本身的保密性,受到算法限制。
2.古典密码主要有以下几种:
代替密码(Substitution Cipher) 换位密码(Transposition Cipher) 代替密码与换位密码的组合
20世纪初到1949年:
加密:将明文变转未密文的过程。把课懂的语言变换称不可懂的语言,这里的语言指人类能懂的语言和机器能懂的语言
解密:加密的过程,即由密文恢复出原明文的过程。把不可懂的语言变成可懂的语言
加密和解密算法的操作通常都是在一组密钥的控制下进行的,分别称为加密密钥(Encryption Key) 和解密密钥(Decryption Key)
Shannon称:在理想密码系统中,密文的所有统计特性都与所使用的密钥独立
密码分析者知道一些消息的密文(加密算法相同),并且试图恢复尽可能多的消息明文,并进一步试图推算出加密消息的密钥(以便通过密钥得出更多的消息明文。
密码分析者不仅知道一些消息的密文,也知道与这些密文对应的明文,并试图推导出加密密钥或算法(该算法可对采用同一密钥加密的所有新消息进行解密。
密码分析者不仅知道一些消息的密文以及与之对应的明文,而且可以选择被加密的明文(这种选择可能导致产生更多关于密钥的信息),并试图推导出加密密钥或算法(该算法可对采用同一密钥加密的所有新消息进行解密)。(暂时控制加密机)
通过收集“外面”的信息来破解密码,而不是直接处理“里面”的东西。
检测加解密过程所消耗的能量,所释放的辐射来计算过程时间。
攻击者捕获了一些类型的数据并重新提交它,寄希望于欺骗接收设备误以为这些是合法信息。
时间戳和序列号是对付重放攻击的两个对策。
利用明文的已知统计规律进行破译的方法。密码破译者对截获的密文进行统计分析,总结出其统计规律,并与明文的统计规律进行对照比较,从中提取出明文和密文之间的对应或变换信息。
分组密码 VS 流密码
在一种安全策略指导下密钥的产生、存储、分配、删除、归档及应用。
处理密钥自产生到最终销毁的整个过程中的有关问题包括系统的初始化、密钥的产生、存储、备份/恢复、装入、分配、保护、更新、泄露、撤销和销毁等内容。
所有的密码技术都依赖于密钥。
密钥的管理本身是一个很复杂的课题而且是保证安全性的关键点。
密钥管理方法因所使用的密码体制对称密码体制和公钥密码体制而异。
授权使用该密钥的周期。一个密钥主要经历以下主要阶段:
产生、分配、使用、更新/替换、撤销、销毁。
原因:
1拥有大量的密文有助于密码分析一个密钥使用得太多了会给攻击者增大收集密文的机会.
2 假定一个密钥受到危及或用一个特定密钥的加密/解密过程被分析则限定密钥的使用期限就相当于限制危险的发生.密钥的生存期。
密钥使用
密钥存储
密钥更新
密钥备份
密钥销毁(撤销不同)
加密密钥和解密密钥相同,或实质上等同
典型算法:DES、3DES、AES、IDEA、RC5、Twofish、CAST-256、MARS
有点:高效
不足:安全交换密钥问题及密钥管理复杂
1973年5月15日,NBS开始公开征集标准加密算法,并公布了它的设计要求:
(1)算法必须提供高度的安全性
(2)算法必须有详细的说明,并易于理解
(3)算法的安全性取决于密钥,不依赖于算法
(4)算法适用于所有用户
(5)算法适用于不同应用场合
(6)算法必须高效、经济
(7)算法必须能被证实有效
(8)算法必须是可出口的
1974年8月27日,NBS开始第二次征集,IBM提交了算法LUCIFER。1975年3月17日,NBS公开了全部细节。
1976年,NBS指派了两个小组进行评价。
1976年11月23日,采纳为联邦标准,批准用于非军事场合的各种政府机构。1977年1月15日,“数据加密标准”FIPS PUB 46发布。
发明人:美国IBM公司 W.Tuchman和C.Meyer
1971—1972年研制成功
基础:1967年美国Horst Feistel提出的理论
1979年,美国银行协会批准使用DES。
1980年,美国国家标准局(ANSI)同意DES作为私人使用的标准,称之为DEA(ANSI X.392)
1983年,国际化标准组织(ISO)同意将DES作为国际标准,称之为DEA—1
1998年12月以后,美国政府不再将DES作为联邦加密标准
1.第一个发表的公开密钥算法,1976
2.用于通信双方安全地协商一个会话密钥
3.只能用于密钥交换
4.数学基础:有限域内计算离散对数的困难性为基础
5.主要是模幂运算:ap mod n
1977年由Ron Rivest、Adi Shamir和Len Adleman发明,1978年正式公布。
RSA是一种分组加密算法。明文和密文在0~n—1之间,n是一个正整数。
该算法的数学基础是初等数论中的Euler(欧拉)定理,并建立在分解大整数因子的困难性之上。
目前应用最广泛的公钥密码算法。
只在美国申请专利,且已于2000年9月到期。
1991年,NIST提出了数字签名算法(DSA),并把它用作数字签名标准(DSS),招致大量的反对,理由如下:
DSA不能用于加密或密钥分配
DSA是由NSA研制的,可能有后门
DSA的选择过程不公开,提供的分析时间不充分DSA比RSA慢(10-40倍)
密钥长度太小(512位)DSA可能侵犯其他专利RSA是事实上的标准
MD:Message Digest , 消息摘要
SHA(Secure Hash Algorithm,安全哈希算法)由美国国家标准基数研究所NIST开发,作为联邦信息处理标准于1993年发表(FIPS PUB 180),1995年修订,作为SHA-1(FIPS PUB 180-1),SHA-1 基于 MD4 设计
附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换能使数据单元的接收者确认数据单元来源和数据单元的完整性,并保护数据,防止被人伪造
作用
PKI/CA是一组建立在公开密钥技术基础上的硬件、软件、人员和应用程序的集合,它具备生产、管理、存储、核发和废止证书的能力,从运营、管理、规范、法律、人员等多个角度来解决网络信任问题。
PKI是一种遵循标准、利用公钥加密技术提供安全基础平台的技术和规范,是能够为网络应用提供信任、加密以及密码服务及的一种基本解决方案
PKI体系对象—四类实体
CA(认证权威)
RA(注册权威)
证书存放管理(目录服务)
证书持有者和应用程序
数字证书是一段电子数据,是经证书权威机构CA签名的、包含拥有者身份信息和公开密钥的数据体
数字证书格式
数字证书的生命周期
根证书
个人证书
代码签名证书
服务器证书
USB-KEY
CA数字证书的发放机构:
他是PKI的核心,其主要功能包括:
签发数字证书
管理数字证书
验证数字证书
证书注册权威
受理用户的数字证书申请
提供证书生命期的维护工作
目录服务简单地讲是信息的存储库,提供了证书的保存,修改,删除和获取的能力
CA采用LDAP标准的目录服务存放证书,其作用与数据库相同优点是在修改操作少的情况下,对于访问的效率比传统数据库要高
PPTP:微软、Ascend、3COM等公司支持。
L2F:Cisco、北方电信等公司支持,在Cisco路由器中有支持。
L2TP:由IETF起草,微软、Ascend、Cisco、3COM 等公司参 与,结合了上面两个协议的优点,成为有关二层隧道协议的的工业标准。
封装协议定义了ipsec数据包的封装结构,加密和认证结构。
Ipsec支持两种封装协议:ESP和AH
不同类型的VPN结构,IPSEC提供两种模式的封装:Tunnel和Transport
负载安全封装(ESP)
安全联盟(SA)是构成ipsec的基础。
SA是两个通信实体经协商建立起来的一种协定。他们决定了用来保护数据包安全的IPsec协议(esp或ah模式transport或tunnel),转码方式(加密方式md5、 aes、des),密钥及密钥(密钥的时间长度等等)的有效存在时间等等。
任何lpsec实施方案始终会构建一个sa数据库(SADB),由它来维护ipsec协议用来保障数据包安全的sa记录。
SA的创建可以由管理员人工的配置完成
但是,手工维护容易出错,而且手工建立的SA没有生存周期限制,永不过期,除非手工删除,因此有安全隐患。
SA的创建也可以通过某些协议来自动协商完成。
动态完成,可以解决手工配置的问题
IKE能够自动的实现密钥交换,简化了收购配置上的复杂性,同时也解决了IPsec难以扩展的特性。其主要功能:
ISAKMP (Internet Security Association Key Management Protocol, Internet安全联盟密钥管理协议):RFC2408。
定义了协商、建立、修改和删除SA的过程和包格式。
ISAKMP只是为协商、修改、删除SA的方法提供了一个通用的框架,并没有定义具体的SA格式。这个通用的框架是与密钥交换独立的,可以被不同的密钥交换协议使用。
ISAKMP报文可以利用UDP或者TCP,端口都是500,一般情况下常用UDP协议。
阶段一:
认证对等体、协商安全安联(安全联盟)两种工作模式:Main mode 和 aggressive mode
阶段二:
协商IPsec SAs/SPIs 单一工作模式:快速模式
IKE阶段一完成后会产生一个共享密钥,用于阶段二的数据加密使用.
SSL(Secure socket Layer),安全套接层协议,由netscape公司提出。
TLS (Transport Layer Security),是IETF的TLS工作组在SSL3.0基 础之上提出的安全通信标准。
使用公开密钥体制和X.509数字证书技术保护信息传输的机密性和完整性,适用于点对点之间的信息传输,常用Web Server方式。
位于TCP层之上、应用层之下,为上层应用在网络间建立一条安全通道。
提供:服务器认证、客户认证(可选)、链路上的数据完整性和数据保密性等保护功能。
在TCP/IP协议族中,SSL位于TCP层之上、应用层之下。
可以独立于应用层,从而使应用层协议可以直接建立在SSL之上。
包含: SSL记录协议、SSL握手协议、SSL更改密码说明协议和SSL警告协议。
SSL记录协议:所有的传输数据都被封装在记录中,提供机密性和完整性两种服务
SSL记录协议:包括记录头和记录数据格式
SSL握手协议:这个协议使服务器和客户端相互认证身份、协商加密和MAC算法以及用来保护在SSL记录中发送数据的加密应用,在传输任何数据前,都必须使用握手协议
保密性
完整性
可鉴别性
Ping是一个非常著名的程序,这个程序的目的是为了测试另一台主机是否可达。现在所有的操作系统上几乎都有这个程序,它已经成为系统的一部分。
Ping程序的目的是为了查看网络上的主机是否处于活动状态。
通过发送一份ICMP回显请求报文给目的主机,并等待返回ICMP回显应答,根据回显应答的内容判断目的主机的状况。
Ping之所以会造成伤害是源于早期操作系统在处理ICMP协议数据包存在漏洞。
ICMP协议的报文长度是固定的,大小为64KB,早期很多操作系统在接收ICMP数据报文的时候,只开辟64KB的缓存区用于存放接收到的数据包。一旦发送过来的ICMP数据包的实际尺寸超过64KB(65536B),操作系统将收到的数据报文向缓存区填写时,报文长度大于64KB,就会产生一个缓存溢出,结果将导致TCP/IP协议堆栈的崩溃,造成主机的重启动或是死机。
Ping程序有一个“—I”参数可指定发送数据包的尺寸,因此,使用Ping这个常用小程序就可以简单地实现这种攻击。例如通过这样一个命令:
Ping -I 65540 192.168.1.140
如果对方主机存在这样一个漏洞,就会形成一次拒绝服务攻击。这种攻击被称为“死亡之Ping”
现在的操作系统都已对这一漏洞进行了修补。对可发送的数据包大小进行了限制。
在Windows xp sp2操作系统中输入这样的命令:Ping -I 65535 192.168.1.140
系统返回这样的信息:
Bad value for option -l,valid range is from 0 to 65500.
Ping Of Death攻击的攻击特征、检测方法和反攻击方法总结如下:—攻击特征:该攻击数据包大于65535个字节。由于部分操作系统接收到长度大于65535字节的数据包时,就会造成内存溢出、系统崩溃、重启、内核失败等后果,从而达到攻击的目的。
检测方法:判断数据包的大小是否大于65535个字节。
反攻击方法:使用新的补丁程序,当收到大于65535个字节的数据包时,丢弃该数据包,并进行系统审计。
“泪滴”也被称为分片攻击,它是一种典型的利用TCP/IP协议的问题进行拒绝服务攻击的方式,由于第一个实现这种攻击的程序名称为Teardrop,所以这种攻击也被称为“泪滴”。
Smurf攻击是利用IP欺骗和ICMP回应包引起目标主机网络阻塞,实现DoS攻击。
Smurf攻击原理:在构造数据包时将源地址设置为被攻击主机的地址,而将目的地址设置为广播地址,于是,大量的ICMP echo回应包被发送给被攻击主机,使其因网络阻塞而无法提供服务。
比Ping of Death洪水的流量高出1或2个数量级。
TCP/UDP 通过16bit端口号来识别应用程序
现状
此时,目标主机再也收不到刚才那些正常的网络包,只有DoS包。
大家注意一下,这里所有的Syn Flood攻击包的源地址都是伪造的,给追查工作带来很大困难。
这时在被攻击主机上积累了多少Syn的半连接呢?用netstat来看一下:
1)大量UDP小包冲击应用服务器(DNS、Radius认证等)
2)利用系统服务形成流量(Echo chargen)
3)利用正常UDP服务发送大流量形成网络拥塞
UDP洪水(UDP flood)主要是利用主机能自动进行回复的服务(例如使用UDP协议的chargen服务和echo服务)来进行攻击。
很多提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认打开一些被黑客恶意利用的UDP服务。如echo服务会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符。
运用IP Spoofing技术送出一连串SYN数据包给目标主机,让目标主机系统误以为这些数据包是由自己发送的。由于目标主机在处理这些数据包的时候,它自己并无法回应给自己SYN—ACK数据包,因而造成系统当机。
Land是因特网上最常见的拒绝服务攻击类型,它是由著名黑客组织rootshell发现的。
原理很简单,向目标机发送大量的源地址和目标地址相同的包,造成目标机解析Land包时占用大量的系统资源,从而使网络功能完全瘫痪。
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文
典型的应用层协议
拒绝服务:超长URL链接
欺骗:跨站脚本、钓鱼式攻击、cookie欺骗窃听:数据泄漏
伪造:应用数据篡改
暴力破解:应用认证口令暴力破解等
标识的概念:标识是实体身份的一种计算机表达,每个实体与计算机内部的一个身份表达绑定
鉴别:确认实体是它所声明的,提供了关于某个实体身份的保证,某一实体确信与之打交道的实体正是所需要的实体
标识与鉴别的作用
鉴别系统的构成
验证者、被验证者、可信赖者
鉴别的类型
单向鉴别、双向鉴别、第三方鉴别
鉴别的方式
实现简单、成本低
提供弱鉴别
暴力破解
木马窃取
线路窃听
重放攻击
暴力破解防护
使用安全的密码(自己容易记,别人不好猜)
系统、应用安全策略(帐号锁定策略)
随机验证码
变形
干扰
滑块
图像识别
使用密码输入控件
安全的输入框,避免从输入框中还原密码软键盘,对抗击键记录
随机排列字符,对抗屏幕截图重现
一次性口令:每次鉴别中所使用的密码不同—有效应对密码嗅探及重放攻击
实现机制
两端共同拥有一串随机口令,在该串的某一位置保持同步
两端共同使用一个随机序列生成器,在该序列生成器的初态保持同步—使用时间戳,两端维持同步的时钟
挑战机制
客户端:请求登录
服务器:给出随机数作为挑战请求
将登录信息(用户名、密码)与随机数合并,使用单向函数(如MD5)生产字符串,作为应答返回服务器
服务认证后返还结果
使用用户所持有的东西来验证用户的身份用于鉴别的东西通常不容易复制
IC卡(Integrated Circuit Card)是将一个微电子芯片嵌入符合卡基,做成卡片形式的信息载体
难以复制、安全性高
损坏
封装应坚固耐用,承受日常使用中各种可能导致卡片损坏的行为
复制
保证IC卡中存储和处理的各种信息不被非法访问、复制、篡改或破坏PIN码甚至其他技术实现对数据的安全防护
确保逻辑安全措施得到落实
单点登录基本概念
单点登录概念
单一身份认证,身份信息集中管理,一次认证就可以访问其授权的所有网络资源—单点登录实质是安全凭证在多个应用系统之间的传递或共享
Kerberos协议
什么是Kerberos协议
Kerberos协议的优点
Kerberos体系构成
运行环境构成
其他概念
三次通讯
Kerberos 工作过程获取 TGT
Kerberos 工作过程获取 SGT
Kerberos 工作过程获取 活动服务
AAA协议
—对一系列访问控制规则集合的描述,可以是非形式化的,也可以是形式化的。组成
描述主体对客体所具有的控制权
定义了改变访问模式的能力或向其它主体传送这种能力的能力
描述主体对客体所具有的访问权
指明主体对客体可进行何种形式的特定访问操作:读/写/运行
每个客体设置一个拥有者(一般是客体的生成者),拥有者是唯一有权修改客体访问控制表的主体,拥有者对其客体具有全部控制权
访问控制表
访问能力表
优点:
根据主体的身份和访问权限进行决策
具有某种访问能力的主体能够自主地将访问权的某个子集授予其它主体
灵活性高,被大量采用
缺点:
安全性不高
信息在传递过程中其访问权限关系会被改变
主体和客体都有一个固定的安全属性,系统用该安全属性来决定一个主体是否可以访问某个客体
安全属性是强制的,任何主体都无法变更
安全性较高,应用于军事等安全要求较高的系统
1973年提出的多级安全模型,影响了许多其他模型的发展,甚至很大程度上影响了计算机安全技术的发展
1977年,Biba提出的一种在数学上与BLP模型对偶的完整性保护模型-Clark-Wilson模型
1987年,David Clark和David Wilson开发的以事务处理为基本操作的完整性模 型,该模型应用于多种商业系统
1989年,D.Brewer和M.Nash提出的同等考虑保密性与完整性的安全策略模型,主要用于解决商业中的利益冲突
安全级之间支配关系(密级高于或等于、范畴包含)
(一)BLP模型规则:机密性
(二)当一个高等级的主体必须与另一个低等级的主体通信,即高等级的主体写信息到低等级的客体,以便低等级的主体可以读
第一个安全策略形式化的数学模型多级安全模型,强调机密性
访问控制机制(两个重要规则)
不上读:主体不可读,安全级别高于它的课题;
不下写:主体不可将信息写入安全级别低于它的客体;优点:机密性高,有效的防止机密信息泄露
缺点:完整性缺乏,非法篡改、破坏成为可能
完整级:安全级和范畴
完整级存在支配关系
安全策略
强调完整性的访问控制策略模型
多级安全模型,数学上与BLP模型对偶访问控制机制(两个重要规则)
优点:完整性高,有效的防止非法篡改、破坏缺点:机密性缺乏,无法保护机密信息泄露
由计算机科学家David D.Clark和会计师David R.Wilson发表于1987年 确保商业数据完整性的访问控制模型,侧重于满足商业应用的安全需求
解决商业系统最关心的问题:系统数据的完整性以及对这些操作的完整性
一致性状态:数据满足给定属性,就称数据处于一个一致性状态
实例:
是一种等同考虑保密性与完整性的访问控制模型,主要解决商业应用中的利益冲突问题,它在商业领域的应用于BLP模型在军事领域的作用相当。
公司数据集CD:与某家公司相关的若干客体
利益冲突(COI)类:若干相互竞争的公司的数据集
若干有竞争关系数据集构成了利益冲突类
自主访问控制
强制访问控制
系统内置多个角色,将权限与角色进行关联用户必须成为某个角色才能获得权限
根据用户所担任的角色来决定用户在系统中的访问权限
用户必须成为某个角色,且还必须激活这一角色,才能对一个对象进行访问或执行某种操作
RBAC模型四种类型
RBACO,基本模型,规定了所有RBAC的基本内容,四种要素,用户(U)、角色(R)、会话(S)和权限(P)
RBAC1:包含RBACO,加入安全等级及角色继承关系
RBAC2:包含RBACO,加入约束条件,例如财务和会计不能为同一人
RBAC3:结合了RBAC1、RBAC2
基于规则的访问控制模型特点
模型类型
“你是谁”
身份与公钥绑定
身份鉴别(护照)
RCA-CA-RA, LDAP, CRL
“你能做什么”
身份(角色)与角色(属性、权限)绑定
授权管理(签证)
SOA-AA-ARA, LDAP, ACRL
用户与计算机硬件之间的接口
操作系统为用户提供了虚拟计算机,把硬件的复杂性与用户隔离计算机系统的资源管理者
标识与鉴别
访问控制
最小特权管理
理解Windows系统标识与鉴别、访问控制、用户账户控制、安全审计、文件系统的安全机制和安全策略
掌握Windows系统的安全配置方法
安全主体的代表(标识用户、组和计算机账户的唯一编码)
范例:S—1—5—21—1736401710—1141508419—1540318053—1000
账号信息存储(SAM:安全账号管理)
运行期锁定、存储格式加密
仅对system帐号有权限,通过服务进行访问控制
Windows用户身份鉴别:本地登录
GINA (Graphical Identification and Authentication:图形 化识别和验证)
LSA (Local Security Authority:本地安全授权)
SMB (Server Message Block) :口令明文传输
LM(LAN Manager):口令哈希传输,强度低
NTLM(NT LAN Manager):提高口令散列加密强度、挑战/响应机制
Kerberos:为分布网络提供单一身份验证
访问控制列表(Access Control List,ACL)
NTFS文件系统支持
权限存储流文件系统中自主访问控制
灵活性高,安全性不高
NTFS文件系统权限控制(ACL)
安全加密
Windows日志
应用程序和服务日志
应用访问日志
账户策略
本地策略
账户安全设置
系统账户策略设置
账户安全选项设置
默认管理账户 administrator 更名
设备“好”的口令
密码策略:避免系统出现弱口令
密码必须符合复杂性要求
密码长度最小值
密码最短使用期限
密码最长使用期限
强制密码历史
用可还原的加密来存储密码
账号锁定策略:应对口令暴力破解
账号锁定时间
账号锁定阀值
重置账号锁定计数器
出站规则
入站规则
连接安全规则
监视
-防火墙
连接安全规则
-安全关联
IPC$的安全问题(空会话连接导致信息泄露)管理共享风险(远程文件操作)
普通共享的风险(远程文件操作)
空会话连接控制
本地安全策略设置中对匿名访问的限制
关闭管理共享:修改注册表
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters
审核策略
用户权限分配
安全选项
管理工具→本地安全策略→安全设置→本地策略→安全选项
交互式登录:无须按Ctrl+Alt+Del,设置为已禁用
交互式登录:不显示最后的用户名,设置为已启用
设备:将CD—ROM的访问权限仅限于本地登录的用户,设置为已启用
Windows服务(windows service)
Windows服务程序是一个长时间运行的可执行程序,不需要用户的交互,也不需要用户登录
关闭不需要的服务
控制服务权限
系统日志类型
文件系统类型
文件系统安全
特权划分
特权保护:保护root账号
1、安全配置前置工作
2、账号和口令安全
3、系统服务配置
4、远程登录安全
5、文件和目录安全
6、系统日志配置
7、使用安全软件
系统安装
系统补丁
禁用root之外的超级用户
检查是否存在空口令账号
如果存在空口令账号,则对其进行锁定,或要求增加密码
要确认空口令账户是否和已有应用关联,增加密码是否会引起应用无法连接的问题
设置账户锁定登录失败锁定次数、锁定时间
修改账户超时值,设置自动注销时间
保护 root 账号
要求使用安全口令
口令修改策略
禁止危险的网络服务
关闭非必需的网络服务
确保最新版本
禁用telnet,使用SSH进行管理
限制能够登录本机的IP地址
AllowUsers [email protected]
AllowUsers @192.168..*
保护重要的文件目录,限制用户访问
临时文件不应该有执行权限
设置新创建文件的默认权限掩码
设置方法
SUID/SGID的程序在运行时,将有效用户ID改变为该程序的所有者(组)ID。因而可能存在一定的安全隐患
找出系统中所有含s“位的程序,把不必要的”s“位去掉,或者把根本不用的直接删除,这样可以防止用户滥用及提升权限的可能性,其命令如下:
查找SUID可执行程序
查找SGID程序
保护日志文件
审查日志中不正常情况
也被称为脆弱性,计算机系统天生的类似基因的缺陷,在使用和发展过程中产生意想不到的问题(冯·诺依曼)
漏洞本身随着信息技术的发展而具有不同的含义与范畴
基于访问控制的定义逐步发展到涉及系统安全流程、设计、实施、内部控制等全过程的定义
学者们对漏洞的定义
标准机构的定义
从生命周期的角度出发,信息技术、信息产品和信息系统在需求、设计、实现、配置、维护和使用等过程中,有意或无意产生的缺陷,这些缺陷一旦被恶意主体所利用,就会造成对信息产品或系统的安全损害,从而影响构建于信息产品或系统之上正常服务的运行,危害信息产品或系统及信息的安全属性
软件系统复杂性提高,质量难于控制,安全性降低
公用模块的使用引发了安全问题
“柠檬市场”效应
从传统的封闭、静态和可控变为开放、动态和难控
攻易守难
安全性缺陷是信息系统或产品自身“与生俱来”的特征,是其的固有成分
分类的目的
准确的区分和描述不同的漏洞
有助于漏洞的发布、存储和查询
漏洞分类实例
NVD:代码注入等21种类型
CNNVD:根据漏洞形成分成22种类型
在运行代码而直接对代码进行漏洞挖掘的方法
适用对象
方法
在代码运行的状态下,通过监测代码的运行状态或根据测试用例结果来挖掘漏洞的方法
特点
方法
安装补丁是漏洞消减的技术手段之一
补丁修复中存在两难问题:
Metasploit是一款开源的安全漏洞检测工具,安全工作人员常用Metasploit工具来检测系统的安全性。Metasploit Framework (MSF)在2003年以开放源 码方式发布,是可以自由获取的开发框架。它是一个强大的开源平台,供开发测试和使用恶意代码,这个环境为渗透测试、shellcode 编写和漏洞研究提供了一个可靠平台。
目前的版本收集了数百个实用的溢出攻击程序及一些辅助工具,让人们使用简单的方法莞成安全漏滴检测,即便一个不懂安全的人也可以轻松的使用它。
BT5/Kali中启动Metasploit的命令:msfconsole 升级命令:msfupdate
Windows平台启动的脚本:安装目录下的console.bat
数据库:长期储存在计算机内的、有组织的、可共享的数据集合
DBMS (DataBase Management System):一种操纵和管理数据库的大型软 件,用于建立、使用和维护数据库,它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性
数据结构化和共享性
数据独立性
数据的完整性约束
数据由DBMS统一管理和控制
SQL语句格式
用户鉴别
用户管理策略
设置用户对不同的数据对象允许的操作权限
数据加密方式
数据存储加密层级
数据库审计日志
数据库审计(也称标准审计)
细粒度审计
数据库完整性保证:完整性约束
完整性约束条件
完整性检查
违约处理机制
备份:数据冗余技术
恢复:从冗余数据中实施数据库恢复
过度的特权滥用
合法的特权滥用
特权提升
平台及数据库漏洞
SQL注入
不健全的审计
拒绝服务攻击
数据库通信协议漏洞
不健全的认证
数据泄露
安全配置
账号
存储过程
触发器
备份
1949:冯·诺依曼在《复杂自动机组织论》提出概念
1960:生命游戏(约翰·康维)磁芯大战(道格拉斯.麦耀莱、维特.维索斯基、罗伯.莫里斯)
1973:真正的恶意代码在实验室产生
1981年-1982年:在APPLE-II的计算机游戏中发现Elk cloner
1986年-第一个PC病毒:Brain virus
1988年-Morris Internet worm-6000多台
1990年-第一个多态病毒(躲避病毒查杀)
1991年-virus construction set-病毒生产机
1994年-Good Times(joys)
1995年一首次发现macro virus
1996年-netcat的UNIX版发布(nc)
1998年-第一个Java virus(StrangeBrew)
1986年-第一个PC病毒:Brain virus
1988年-Morris Internet worm-6000多台
1990年—第一个多态病毒(躲避病毒查杀)
1991年-virus construction set-病毒生产机
1994年-Good Times(joys)
1995年一首次发现macro virus
1996年-netcat的UNIX版发布(nc)
1998年-第一个Java virus(StrangeBrew)
1998年-netcat的Windows版发布(nc)
1998年-back orifice(BO)/CIH
1999年-melissa/worm(macrovirus by email)
1999年-back orifice(BO) for WIN2k
1999年-DOS/DDOS-Denial of Service TFT/trin00
1999年-knark内核级rootkit(linux)
2000年-love Bug(VBScript)
2001年-Code Red-worm(overflow for IIS)
2001年-Nimda-worm(IIS/ outlook/file share etc.)
2002年-setiri后门
2002年-SQL slammer(sqlserver)
2003年-hydan的steganography工具
2003年-MSBlaster/Nachi
2004年-MyDoom/Sasser
2006年-熊猫烧香
2010年-Stuxnet(工业蠕虫)
2012年-火焰病毒
从传播速度上来看
从攻击意图来看
从功能上来看
从实现技术来看
从传播范围来看
随系统启动而加载
随文件执行加载
其他
进程保护
检测对抗
恶意代码主程序
守护程序
为什么是设备驱动程序?
恶意代码通过将自身注册成为设备驱动,从而获得较高权限,阻止反病毒软件对它的查杀并干扰反恶意代码软件的正常运行
特点
非常高的权限
安全模式下可工作
无法直接查杀
动态调试的发现
反动态调试的实现
反静态调试的实现
加壳:对恶意代码的可执行二进制程序进行压缩,使其执行流程发生变化
加密:随着加密密钥的变化,恶意代码会产生不同的表现形式,进一步提高了其抗静态分析的能力
代码混淆:通过插入伪指令、混淆程序数据和控制流等方法,防止静态分析和检测
隐藏通常包括本地隐藏和通信隐藏
RootKit技术
本地隐蔽是指为了防止本地系统管理人员觉察而采取的隐蔽手段本地系统管理人员通常使用“查看进程列表“查看目录”“查着内核模块”查着系统网络连接状态”等管理命令莱检测系统是否被植入了恶意代码。
进程隐藏
网络隐藏
系统隐藏
1、用户使用通用的Web浏览器,通过接入网络(网站的接入则是互联网)连接到Web服务器上。用户发出请求,服务器根据请求的URL的地址连接,找到对应的网页文件,发送给用户,两者对话的“官方语言”是Http。网页文件是用文本描述的,HTML/Xml格式,在用户浏览器中有个解释器,把这些文本描述的页面恢复成图文并茂、有声有影的可视页面。
2、通常情况下,用户要访问的页面都存在Web服务器的某个固定目录下,是一些.html或.xml文件,用户通过页面上的“超链接”(即URL地址)可以在网站页面之间“跳跃”,这就是静态的网页。
后来人们觉得这种方式只能单向地给用户展示信息,信息发布还可以,但让用户做一些比如身份认证、投票选举之类的事情就比较麻烦,由此产生了动态网页的概念;所谓动态就是利用flash、Php、asp、Java等技术在网页中嵌入一些可运行的“小程序”,用户浏览器在解释页面时,看到这些小程序就启动运行它。
小程序的用法很灵活,可以展示一段动画(如Flash),也可以在你的PC上生成一个文件,或者接收你输入的一段信息,这样就可以根据你的“想法”,对页面进行定制处理。
3、“小程序”的使用让Web服务模式有了“双向交流”的能力,Web服务模式也可以象传统软件一样进行各种事务处理,如编辑文件、利息计算、提交表格等
这些“小程序”可以嵌入在页面中,也可以以文件的形式单独存放在Web服务器的目录里,如.asp、.php、jsp文件等,并且可以在开发时指定是在用户端运行,还是在服务器端运行;
这样功能性的小程序越来越多,形成常用的工具包,单独管理, Web业务开发时,直接使用就可以了,这就是中间件服务器,它实际上是Web服务器处理能力的扩展。
4、静态网页与“小程序”都是事前设计好的,一般不经常改动,但网站上很多内容需要经常的更新,如新闻、博客文章、互动游戏等,这些变动的数据放在静态的程序中显然不适合,传统的办法是数据与程序分离,采用专业的数据库。
Web开发者在Web服务器后边增加了一个数据库服务器,这些经常变化的数据存进数据库,可以随时更新。当用户请求页面时,“小程序”根据用户要求的页面,涉及到动态数据的地方,利用SQL数据库语言,从数据中读取最新的数据,生成“完整”页面,最后送给用户,如股市行情曲线,就是由一个不断刷新的小程序控制。
5、除了应用数据需要变化,用户的一些状态信息、属性信息也需要临时记录而Web服务器本来是不记录这些信息的,只管答复你的要求,后来Web技术为了“友好”互动,需要“记住”用户的访问信息,建立了一些“新”的通讯机制:Cookie:把一些用户的参数,如帐户名、口令等信息存放在客户端的硬盘临时文件中,用户再次访问这个网站时,参数也一同送给服务器,服务器就能识别身份。
Session:把用户的一些参数信息存在服务器的内存中,或写在服务器的硬盘文件中,用户是不可见的,Cookie与Session可以结合使用。
6、 Cookie在用户端,一般采用加密方式存放就可以了;Session在,服务器端,信息集中,被篡改问题将很严重,所以一般放在内存里管理,尽量不存放在硬盘上。
HTTP(超文本传输协议):
它于1990年提出,当前版本为HTTP/1.1
HTTP设计用来将超文本标记语言(HTML)文档从Web 服务器传送到Web浏览器
HTTP是一个请求和回应协议:客户机发送请求,服务器对请求给出回应
HTTP 使用可靠的TCP连接,默认TCP端口是80
1.支持客户/服务器模式
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content—Type加以标记
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP的一个会话,由Request和response组成
HTTP请求(Requests)由请求行、消息报头、请求正文三个部分组成
HTTP响应(Responses)也包含三个部分:状态行、消息报头、响应正文
HTTP URL(URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:
http://host[":"port][abs_path]
http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成
HTTP协议本身是无状态协议,HTTP不会记录前一次传输的数据信息,因此无法实现务器和客户端的交互。
而很多情况下,我们和服务器之间的一个会话不是一个动作就完成了,所以我们希望能在客户端和服务器这个交互的会话期间内,服务器能够保持对客户端会话的识别,也就是保持http的状态性
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
Cookie的动机:客户端在浏览多个页面时,提供事物(transaction)的功能,为服务器提供状态管理
购物车可以为每个用户实现购物统计
实现授权策略,用户不用每个页面都输入用户名/密码
每个cookie都有一定的URL范围,客户请求这个范围的URL,都要提供这个cookie
Cookie由服务器端向客户端写入,包含在http响应头中的setcookie字段,格式如下:
Set-cookie name |value | path |domain |expires
Set-Cookie:nolife=fromdomain%3Dwww;path=/;domain=.51job.com
Cookiename:cookie变量的名称
Value:赋予cookie的值
Path:请求页面的路径
Domain:cookie的作用范围(域名)
Expires:过期时间
Cookie会被写入到客户端的internet temporary files文件夹内,当客户端请求域 名范围内的URL时,会读取cookie文件,并在http请求头中的cookie字段
Cookie一般由服务器向客户端写入,可以包含个性化信息,有时候也会被web站点设计包含站点的认证信息。
Cookie分为永久性cookie和会话cookie。永久性cookie保存在客户端 的硬盘中,会话cookie在会话结束后,失效。
脚本语言,可以盗取cookie,当cookie中包含用户的敏感信息时,因此攻击者可以利用XSS技术,盗取cookie信息,这样会造成用户信息泄露,甚至重放攻击
Session机制,相对于cookie机制,就是将会话信息存储于服务器端,而非客户端,并且存储于服务器端内存中,会话结束而失效
Session机制的实现,是在服务器端保存状态。相比客户端cookie存储,安全性更高
定义:
注入攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者访问未被授权的数据。
注入漏洞通常能在SQL、LDAP、XPath或是NoSQL查询语句、OS命令、 XML解析器、SMTP包头、表达式语句及ORM查询语句中找到
常见类型有:SQL注入、OS命令注入、XML注入、LDAP注入
当应用程序将用户输入的内容,拼接到SQL语句中,一起提交给数据库执行时,就会产生SQL注入威胁。
由于用户的输入,也是SQL语句的一部分,所以攻击者可以利用这部分可以控制的内容,注入自己定义的语句,改变SQL语句执行逻辑,让数据库执行任意自己需要的指令。通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接获取数据库服务器的系统权限。
SQL注入防御:
其他思路:
Command Injection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。一个恶意黑客(也被称为破裂者cracker)可以利用这种攻击方法来非法获取数据或者网络资源。
对于命令注入最主要的办法还是对表单输入或者选择的内容进行验证
XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠 样式表(Cascading Style Sheets,CSS)的缩写混淆。故将跨 站脚本攻击缩写为XSS。
XSS (cross site scripting)跨站脚本,是一种迫使Web站 点回显可执行代码的攻击技术,而这些可执行代码由攻击者提供、最终为用户浏览器加载。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与网站。
这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。
跨站脚本攻击是到目前为止最受关注的、威胁最高的攻击手段
通过XSS攻击,攻击者可以窃取网页访问者保存在终端的各种帐号信息,并且可以通过脚本盗取用户的cookie,劫持用户写web服务器的会话
它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起
所谓存储跨站攻击是指用户提交给Web应用程序的数据首先就被永久的保存在服务器的数据库,文件系统或其他地方,后面且未做任何编码就能显示到Web页面,当其它用户浏览该链接时就会造成XSS攻击。最典型的就是2005年在MySpace发现的XSS漏洞以及利用该漏洞的Samy MySpace Worm
Xss攻击给web带来的威胁,主要体现在黑客所注入的脚本。这些脚本主要实现的目的有:
盗取用户的cookie,劫持会话
获取用户敏感信息
将访问重定向,重定向到钓鱼网站
1、对所有用户提交内容进行可靠的输入验证,进行编码替代。例如:<=&lt,>&gt
包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交
2、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascipt),去掉任何对远程内容的引用(尤其是样式表和javascipt),使用HTTP only的cookie
3、部署XSS攻击防御产品
身份认证:
最常见的是登录功能,往往是提交用户名和密码,在安全性要求更高的情况下,有防止密码暴力破解的验证码,基于客户端的证书,物理口令卡等等。
会话管理:
HTTP本身是无状态的,利用会话管理机制来实现连接识别。身份认证的结果往往是获得一个令牌,通常放在cookie中,之后对用户身份的识别根据这个授权的令牌进行识别,而不需要每次都要登陆。
常见身份认证漏洞与影响
漏洞
弱密码
配置文件中使用明文凭据
通过网络传递明文凭据
账户的特权过强
混用个性化数据的身份验个性化数据适于永久的cookie,而身份验证
影响
增加了破解密码和词典攻击的风险
可访问服务器的内部人员都能直接访问凭据
攻击者可通过监控网络来盗取身份验证凭据并窃取身份
与进程和账户泄漏相关的风险增加证数据cookie不应是永久的
超文本传输协议(HTTP)是无状态:一个客户端计算机上运行Web浏览器必须建立一个新的传输控制协议(TCP)的网络连接到每一个新的Web服务器的HTTP GET或POST请求。Web服务器,因此,不能依赖于建立的TCP比单个HTTP GET或POST较长的运作网络连接。
会话管理是由Web开发人员用来进行HTTP协议无状态会话状态支持的技术。例如,一旦用户验证自己的Web服务器,她的下一个HTTP请求
(GET或POST)不应导致Web服务器重新认证。
在“存储”的会话ID和相关的会话数据(用户名,账号等,在Web服务器上)目前使用了多种技术,包括但不限于:本地存储和数据库等。
2、重放攻击与cookie
我们监听http数据传输的截获的敏感数据大多数就是存放在cookie中的数据。其实在web安全中的通过其他方式(非网络监听)盗取cookie与提交cookie也是一种重放攻击。我们有时候可以轻松的复制别人的cookie直接获得相应的权限
跨站请求伪造(cross-site request forgery)通常缩写为CSRF,直 译为跨站请求伪造
即攻击者通过调用第三方网站的恶意脚本或者利用程序来伪造请求,当然并不需要向用户端伪装任何具有欺骗的内容,在用户不知情时攻击者直接利用用户的浏览器向攻击的应用程序提交一个已经预测好请求参数的操作数据包,利用的实质是劫持用户的会话状态,强行提交攻击者构造的具有“操作行为”的数据包
CSRF最关键的是劫持用户的会话状态,所以说,导致CSRF漏洞的主要原因是会话状态的保持没有唯一时间特征的标识,即是说在使用HTTPCookie传送会话令牌的过程中,应该更谨慎的判断当前用户,而不是简单的通过操作数据包的Cookie值来鉴别,简单的说是每次数据交互时,对提交的数据包实行唯一性标识。
访问控制权限错误,意指一个已经授权的用户,通过更改访问时的一个参数,从而访问到了原本其并没有得到授权的对象。
常见表现形式:水平权限、垂直权限
访问控制错误防御
预防
1.用户权限与身份严格管理,任何动作执行都需要检验身份。
2.检查访问。任何来自不可信源的直接对象引用都必须通过访问控制检测,确保该用户对请求的对象有访问权限。
敏感数据和这些数据的备份,包括静态数据、传输中的数据甚至是客户浏览器中的数据往往存在被泄露的可能
攻击者通常不直接攻击加密系统。他们往往通过诸如窃取密钥、发起中间人攻击或从服务器窃取明文数据等方式对传输中的或者客户浏览器中的数据进行破解。
在这个领域最常见的漏洞是应该加密的数据不进行加密。
在使用加密的情况下,常见的问题是不安全的密钥生成和管理和使用弱算法是很普遍的,特别是使用弱的哈希算法来保护密码。
浏览器的漏洞也很普遍,且可以很轻易的检测到,但是很难大规模的利用。
对于敏感数据,应当确保:
1.当这些数据被长期存储的时候,无论存储在哪里,它们是否都被加密,特别是对这些数据的备份?
2.无论内部数据还是外部数据,传输时是否是明文传输?在互联网中传输明文数据是非常危险的。
3.是否还在使用任何旧的或脆弱的加密算法?
4.加密密钥的生成是否是脆弱的,或者缺少恰当的密钥管理或缺少密钥回转?
5.当浏览器接收或发送敏感数据时,是否有浏览器安全指令或头文件丢失?
1.预测一些威胁,加密这些数据的存储以确保免受这些威胁。
2.对于没必要存放的、重要的敏感数据,应当尽快清除。
3.确保使用了合适的强大的标准算法和强大的密匙,并且密匙管理到位
4.确保使用密码专用算法存储密码,如:bcrypt、PBKDF2或者scrypt。
一些含有漏洞的组件(如:框架库)可以被自动化工具发现和利用。攻击者通过扫扫描或手动分析识别问题组件,然后根据需要定制攻击代码并实施攻击。
大多数的应用都存在这些问题。因为大多数的开发团队并不会把及时更新组件/库作为他们的工作重心。
在很多情况下,开发者都不了解他们所使用的全部组件,更不用说组件的版本了。组件的依赖性使情况更加糟糕。
使用最新版本的组件
软件项目应该有如下的流程:
1.标识您正在使用的所有组件及其版本,包括所有的组件(比如版本插件)。
2.在公共数据库(漏洞库),项目邮件列表和安全邮件列表中时刻关注这些组件的安全信息并保证它们是最新的。
3.建立组件使用的安全策略,比如需要某些软件开发实践,通过安全性测试和可接受的授权许可。
4.在适当的情况下,考虑增加对组件的安全封装,去掉不使用的功能和/或安全薄弱的或者组件易受攻击的方面。
为什么要收集信息
获取攻击目标大概信息
为下一步攻击做准备
利用收集的信息直接攻击
信息收集的概念
传统的信息收集
互联网时代的信息收集
目标系统的信息系统相关资料
域名、网络拓扑、操作系统、应用软件相关脆弱性
目标系统的组织相关资料组织架构及关联组织 地理位置细节
电话号码、邮件等联系方式近期重大事件 -员工简历
其他可能令攻击者感兴趣的任何信息
快速定位
信息挖掘
定点采集
隐藏信息
后台入口
密码破解方法
密码破解工具
密码破解防御
设置“好”的密码
系统及应用安全策略
其他密码管理策略
后门可以作什么
后门设置的类型
账号后门
漏洞后门