威廉斯托林-计算机安全原理与实践
威廉斯托林-计算机安全原理与实践
口令
- 先验口令
- 工具: 开源软件pam_passwdqc(openwall.com/passwdqc/)
- 在进行口令设置时,执行各种规则,并可以由管理员进行配置
- 口令破解器
- 当用户在选择一个口令时候,将由破解器进行检查,确保这个口令不在破解器字典内。
- 问题是,随着人员的增多和时间,口令字典会变得越来越大,检查时间会越来越长
- Bloom过滤器
- spafford提出的基于Bloom的过滤器,是概率统计的技术。用于生成高效的后验证口令检查。
令牌
用户持有的,用于进行认证的一种物品。
- 存储卡: 只存储数据,而不处理数据,用于单独的物理访问
- 需要读卡器
- 会丢失或者被盗窃
- 用户的满意度不高
- 智能卡:带有微处理器,可以处理一些数据,有接触式和非接触式的,带有人机接口,按钮或者液晶显示。
- 有静态协议,或者动态口令生成器,也有的是挑战-应答协议
- 智能卡是完整的一套处理器,内存,输入输出部件组成的设备。
- 电子身份证
- 德国的新身份证使用的是电子身份证
- 包含个人信息,文档编号,卡片接入号,机器读卡区
-
用于epass,为政府部门所用,是离线功能;eid用于商业应用,既可以离线也可以在线;esign,用于生成持卡人的数字签名。
- 口令认证连接设施,用于确保非经过许可的情况下,任何设备不可以读取RFID这样的信息
生物特征
- 面部识别
- 常用的是对人的面部进行照相,然后基于相对位置和关键面部器官建立特征
- 还有一种就是使用红外摄像机对人脸内部隐含的血管系统生成面部温谱图
- 指纹
- 被认为是独一无二的
- 手型
- 手掌的特征,包括形状,大小,长度,宽度
- 视网膜:这个使用的比较少了
- 虹膜: 开始应用的比较广泛
- 签名: 银行会需要用,但是签名的比对非常复杂,因为一个人在不同的时间签名的样本也会发生很大的变化。
- 语音:这个很多app已经在使用
远程用户认证
本地认证是最简单的。复杂一些的是通过网络或者其他通讯线路进行认证。 远程认证的方式由于跨了设备和路线,所以相对存在较多的安全隐患。
- 使用口令协议 远程服务器存储的是口令的散列。 过程如下:
- 用户先发送自己的身份给远程主机
- 远程主机生成一个随机数r,通常称为nonce值,并返回这个值给用户
- 远程主机需要指定两个函数h和f,在响应过程中使用
- 从远程主机到用户的数据传输称为质询。用户响应的是函数f(r,h(p))=r的值。其中p是用户的口令。函数h是一个散列函数。
- 远程主机存储了每一个注册用户的口令的散列。对于用户u使用h(p(u))表示。 当收到用户应答时候,远程主机计算函数f(r,h(p(u)))的值和收到的f(r,h(p))的值进行比较。如果相等,那么用户就被许可。
-
使用令牌协议
-
使用静态生物特征认证
-
使用动态生物特征认证
- 远程主机提供一个随机序列x和一个随机数r作为质询。这个质询序列是由数字,字符或者单词组成的序列。 用户必须通过发音,打字或者手写来产证一个生物特征序列信号bs(x).之后,客户端对生物信号和随机数加密。 远程主机收到信息后进行解密,收到的随机数必须和最初作为质询的随机数r完全匹配才可以。 并且,远程主机根据输入的生物特征信号bs(x),已经存储的用户模版bt(u)以及原始信号x生成一个比较值,如果改比较值超过了预设的阈值,那么就可以通过验证。
潜在的安全问题
- 客户端攻击
- 主机攻击
- 窃听,盗窃和复制口令,令牌和生物特征
- 重放
- 特洛伊木马
- 拒绝服务
实际应用
- 阿联酋入境处使用虹膜生物特征认证系统。
- 特点:
- 海量人群识别
- 依赖于长期不变的生物特征
- 该生物特征容易提取
- 方便使用
- 可以实时响应
- 安全无伤害
- 能够在超大范围内进行区分并且性能很好
- 价格上面负担的起
- 实现
阿联酋入境处
- 阿联酋17个入境处均设有虹膜扫描仪
- 虹膜扫描仪会在距离眼球5-24英寸的地方拍摄黑白照片
- 使用近红外照明技术,不可见并且绝对安全
- 首先确定虹膜的内外边界以及眼睑的轮廓
- 将虹膜的纹理转化为数字编码
- 将编码与存在数据库中的编码进行匹配判断
- 利用分布式网络,所有入境乘客的虹膜编码都可以实时的与中央数据库进行比对
漏洞:依然有被禁止入境的人,使用滴眼液扩张虹膜,而导致虹膜识别不了,进入阿联酋的案例。因此算法还需要对虹膜的状态进行判断,是常态还是扩张后的。
ATM系统安全
- 禁止明文传输
- 分离网络
访问控制
概念:对于每个具体的系统资源,谁或者什么(比如应用进程)可以访问,以及每个实例允许的访问类型。
包括:
- 认证:验证用户或者其他系统实体声称的身份是有效的
- 授权:授予系统实体访问系统的权限和许可。确定谁对于给定的目的是可信的
- 审计:对系统记录和活动进行独立评审和检查,确保系统控制措施的充分性,既定策略和操作规程,安全违规,并推荐控制措施,策略等的优化
访问控制策略
- 自主访问控制:基于请求者的身份和访问规则控制访问,规定请求者可以或者不可以做什么
- 强制访问控制:通过比较具有安全许可的安全标记来控制访问
- 基于角色的访问:通过用户在系统中所具有的角色来控制访问
-
基于属性控制:基于用户,被访问资源以及当前环境条件来控制访问
- 实例
- UNIX文件访问控制
unix的文件都由操作系统通过inode管理。inode是index node的缩写。是操作系统对一个文件所需的关键信息的控制结构。几个文件名可以与一个inode关联 但是一个活动inode仅和一个文件关联,一个文件也仅被一个inode控制。文件的属性以及访问许可和其他 的控制信息都存储在inode中。在磁盘上有一个inode表,包含了文件系统中所有文件的inode。打开这个文件时, 它的inode被读进内存。
ICAM是一种用来管理和实现数字身份以及相关属性,凭证,和访问控制的综合性方法。 ICAM由美国政府开发,但是并不仅适用于政府机构,还可以由寻求访问控制统一方法的企业来部署。
数据库
这里主要讲关系型数据库。
- 注入攻击
利用数据库应用(一般是查询)中存在的安全漏洞而发起的攻击。攻击者可以提取或者操纵web应用的数据。 用户的输入被当作嵌入在sql语句中的字符串转义符而被错误的过滤或者执行。
– 实现过程
- 攻击者找到web应用的弱点,然后通过向web服务器发送命令来对数据库注入sql命令。这些命令会被传送到防火墙
- web服务器接收到恶意代码,然后发送给web应用服务器
- web应用服务器将代码发送给数据库服务器
- 数据库服务器在数据库上执行恶意代码,数据库从对应的表中返回数据
- web应用服务器动态的生成包含有数据的页面
- web服务器向攻击者提供页面
– 简单举例
- 参看下面的查询语句
var city;
city=request.from("city")
var sql="select * from ordertable where city='"+city+"'";
这个代码的意思是说从用户输入的城市中筛选出所有的订单。
但是如果用户输入的城市名变成这个 beijing‘;drop table ordertable–
那么查询语句就变成这样了: select * from ordertable where city =’beijing’;drop table ordertable–
这时候的操作就变成查询北京这个城市的订单,然后删除这个订单表。
sql注入的攻击途径和类型
- 用户输入:采用这一个方式的攻击者,通过精心构造用户输入来注入SQL命令。
- 服务器变量:包含http头部,网络协议头部,环境变量等数据的变量集合。如果这些变量不经过处理就直接记录在数据库中,则可能会产生sql注入漏洞。因为当攻击者能够构造http和网络报头来利用这些漏洞,将数据直接安排在报头中,挡在税局哭中执行对服务器变量的查询语句时,报头中的攻击语句将会被触发。
-
二阶注入:在二阶注入中,恶意用户可以利用系统或数据库中已存在的数据来触发一个sql注入攻击,因此当这种攻击出现时候,引发攻击的输入不是来自用户,而是来自系统本身。
-
cookie:当用户再次访问之前已访问过的web应用程序时候,cookie被用于存储用户的状态信息。由于cookie数据是在客户端控制的,在应用服务器利用cookie构造sql查询时,攻击者可以通过更改cookie的值来实现sql查询语句的构造和进行查询功能的修改。
- 物理用户输入:除了web页面请求,还有其他可以被用于sql注入的用户请求。常见的包括条形码,射频识别标签,甚至是能够利用图像识别技术扫描然后发送到数据库系统的纸质形式。 这种攻击方式大体上包含,带内,带外,和推理三种方式。
带内攻击是使用同样的通信信道来完成注入sql代码和返回。
比如,将代码注入一个或者多个永真的表达式中。
$query=”select info from user where name=’$_get[“name”]’ and pwd=’$_get[“pwd”]’”;
假如攻击者提交 “‘or 1=1 –'”作为名字字段,那么查询语句就变成这样:
select info from user where name=’ ‘ or 1=1 – and pwd = ‘ ‘
这样就导致口令检查失效,因为–会导致后面的查询变成不可执行的注释。
推理攻击: 没有实际的数据传输。但攻击者能够通过发送特定的请求和观察网站的数据库服务器的响应规律来重新构造信息。
- 非法/逻辑错误查询
- 盲sql注入:攻击者推测数据库系统的数据,利用错误页面的信息等获得结构
带外攻击: 返回数据使用不同的通信频道。比如一个带有查询结果的email生成和返回是在不同的信道进的。这一方式用于信息检索有限制但数据库服务器带外连接不严格的情况。
sql注入的应对措施
- 手动防御性编码: 如果是数值型的输入,应该检查是否只包含数字。一般采用模式匹配进行区分
- 参数化查询:指定sql查询结构,分离传递值参数
- sql dom:它将查询建立过程由使用字符串拼接的不规范过程变成为具有类型检查api的语义构建过程。
- 基于特征的攻击
- 基于异常的攻击
- 代码分析
云安全
恶意软件
定义: 被秘密的植入系统中,以损害受害者数据,应用程序或者操作系统的可信性,完整性或者可用性,抑或对用户实施骚扰或妨碍的程序。
传染的机制包括:病毒,蠕虫和木马。
有效负载包括:系统损坏,僵尸网络,网络钓鱼,间谍软件rootkit等
类型:
- APT:商业性或者政治性的目标,使用多种入侵技术和恶意软件并在长期持续有效的攻击目标
- 广告软件
- 攻击工具包
- auto-rooter:用于远程入侵到新的机器上的恶意攻击工具
- 后门:能够绕过正常安全检查的机制,并允许未经授权的访问
- 下载器:在被攻击的机器上面安装其他的内容的程序
- 夹带式下载:利用被俘虏的网站,当该网站被访问时候,被植入的恶意代码可以利用浏览器漏洞攻击访问者的系统
- 漏洞攻击:针对某个漏洞进行攻击的代码
- 泛洪式攻击: 通过联网的计算机发起大量的数据包,实现拒绝服务攻击的程序
- 键盘记录器: 捕获侵入系统的键盘输入
- 逻辑炸弹: 潜伏在正常的软件程序中。当满足预定义的某些条件时候,逻辑炸弹触发,执行恶意操作
- 宏病毒: 使用宏或者脚本语言写的病毒,通常植入到文档中,当浏览或编辑文档时候被触发,复制自身到其他的文档
- 移动代码:能够不加修改的移植到不同类型的系统平台并执行
- rootkit:攻击者成功入侵计算机并获得root访问权限
- 垃圾邮件
- 间谍软件:通过监听键盘输入,显示器数据,网络流量或搜素系统文件获取敏感资源信息,并传送到其他的设备的软件
- 木马:看上去有作用,但是还具备其他隐藏的潜在的恶意功能,并且用来避开安全机制
- 病毒
- 蠕虫:能够独立执行,并且可以将自己完整的复制到其他网络主机的程序
- 僵尸: 在被感染的计算机中运行,激活后向其他的计算机发送攻击的程序
点击劫持:就是在一个按钮或者输入框上面或者下面蒙一层新的透明不可见的按钮或者输入框,当用户输入或者点击按钮的时候,触发隐藏的操作。
bot: 最开始使用的是irc,所有受控机器加入一个irc频道,控制机在频道内进行指令发送给受控机。后来专用http协议实现隐蔽通道,避免单一控制节点的问题,再后来使用p2p的方式,也是避免控制节点单一失效的问题。
由于固定ip地址很容易被找到和进行封锁。所以现在的恶意软件使用这样的技术:自动生成大量的服务器域名并令恶意软件尝试与所有的这些域名进行连接。即使其中一个服务器名称被破坏,攻击者依然可以用某个域名来重新建立服务器,获得控制。这样要想解决问题,需要技术人员逆向工程以分析其域名生成的算法,然后对所有(大量)的域名进行封锁,这个是很消耗时间和精力的。
还有一种隐藏服务器的技术是使用快速变迁域名(fast-flux dns)技术。它使得与给定服务器域名相关联的ip地址频繁的变动(每隔几分钟),并在大量的服务器代理中轮转,而这些代理往往是僵尸网络的其他成员。这么做会阻止执法机构有效的对他们的威胁采取措施。
键盘记录器,由于大量的使用https和TLS的方式进行数据的传输,所以黑客使用键盘记录器来降低这个收集信息的难度,这里利用软件工具包制作的Zeus网银木马是其中最有名的代表。
rootkitrevealer, 这个工具是mark大神在sysinternal工具包里面包含的一个用于检测rootkit的工具,面向windows,它将使用api的系统扫描结果与不实用api的指令所获得的实际存储视图进行对比。因为rootkit通过修改系统管理员调用所能看到的视图来隐藏自己,而rootkitrevealer刚好利用这个差异来进行判断。
如果检查出一个系统级别的rootkit,那么唯一可靠的方式就是彻底的重新安装新的操作系统。
边界管理
- 入口扫描
所有进入企业的流量都需要进行防火墙或入侵检测的探查。这样在入口的时候就屏蔽掉一些入侵和恶意的行为。
- 出口扫描
可以部署在企业内部网络中的各个独立的局域网出口点上,也可以安装在内外网之间。
拒绝服务攻击
- 源地址欺骗
大部分的DoS攻击中,所使用数据包的一个共同的特征是所采用伪造的源地址。这个比较容易使用许多操作系统上的原始套接字接口来实现。
操作系统设计者是为了进行某些自定义的网络测试或网络协议的研究而引入原始套接字接口的,并不是用于正常的网络操作。但是由于兼容性和继承性的问题,在如今的操作系统中依然保留原始套接字接口。攻击者可以利用这个标准接口很容易的制造具有伪造属性的数据包。
- SYN欺骗
通过造成服务器上用于管理TCP连接的连接表的溢出,从而攻击网络服务器响应TCP连接请求的能力。这意味着即使合法的用户TCP的请求也得不到服务器的响应。
SYN欺骗是针对系统资源的DoS攻击,就是针对操作系统上网络处理程序的攻击。 大量的伪造源地址的主机向服务器申请TCP握手,正常的话,服务器会响应SYN-ACK包到正常的源地址。通讯完成后,源主机会发送RST信号给服务器,关闭连接。但是伪造的主机没有这样的源地址,也就不会有RST信号发出,服务器就会将这个信息保存在连接表中,而连接表的大小是有限度的,这个表一旦被填满,那么后来来的请求就不会得到服务器的响应。正常情况下,超时的TCP连接请求会立即被清理出TCP连接表,但是攻击者是不断的发送足量的欺骗TCP连接给服务器的,也就是这个TCP连接表会一直被填满,从而无法响应大多数合法的连接请求。
SYN泛洪攻击与SYN欺骗攻击的方式类似,只是泛洪攻击的是数据包的总量,像洪水一样冲垮对方,而SYN欺骗则是用小部分的数据包消耗目标系统上的网络处理程序。
泛洪攻击既使用UDP也可以使用TCP,虽然TCP会很容易被目标服务器拒绝,但是攻击者已经成功的消耗了服务器的网络链路。
一些抵御SYN欺骗的方法:
- 对于TCP连接,把请求连接的关键信息加密编码存放于cookie中,然后将这个cookie作为服务器的初始序号封装在syn-ack响应包中发送给客户端。当合法用户返回ack应答包时候,要求在ack的应答包中包含序号+1的cookie,然后服务器根据这个cookie来重构那些曾经在tcp连接表中存储的相关信息。
- 这个技术一般用于防止TCP连接表溢出。
- 缺点是服务器要消耗一定的计算资源来计算cookie。还有就是限制了一些tcp的扩展功能。比如large window。
这个技术最著名的方法的实现者是: SYN cookie。发明者是Daniel Bernstein。
- 修改TCP/IP网络处理程序中所使用的参数。包括连接表的大小,当未收到响应时删除表项目的超时时间。虽然这样增加了攻击的难度,但是并不能从根本上预防攻击。
- 最好的措施是屏蔽IP定向广播的使用。
- 还有就是判断连接来自人还是机器,增加captcha这样的限制
- 增加站点的镜像在多个不同的地方,也能增加稳定性和容错能力。
多机系统的间接攻击:
- 分布式拒绝服务攻击
- 分层的控制体系: 攻击者将攻击指令下发给执行者僵尸机器,执行者僵尸机器联系它所能管控的代理僵尸机器,代理僵尸机器根据执行者发过来的指令对目标机器进行攻击。这里的指令和通讯很大程度上都是加密的。而且从目标机器上反向查找攻击者变得极其困难。
- 反射攻击
举个例子,我要攻击的对象是a,我做一些带有a的源地址的数据包给某些网络服务器,网络服务器会响应这些数据包,会将响应的数据包发给a的源地址。当攻击者发送的数量足够大,那么响应包的数据将占满目标系统的网络链路。这些网络服务器成了DDoS攻击的中间媒介,而且他们做的都是正常的反应。这也使得攻击者可以更容易的发起攻击和躲避跟踪。
实现的方式:
- 发起一个小的请求,产生较大的响应数据包的服务。通常UDP服务可以实现这样的目的。比如dns,snmp,isakmp,chargen等
- 中间媒介有较高的网络服务器性能和较好的链接速度。
- 还有就是可以使用tcp sync进行握手攻击。攻击者发送带有虚假源地址的syn数据包给中间媒介,中间媒介会响应一个syn-ack包给这个源地址的主机,而这个主机是真实存在的目标系统。大量的syn-ack包就能产生泛洪的效果。
改进型的,但容易被切断的攻击方式:
一般dns客户端会通过自身的一个端口利用udp协议向dns服务器的53端口发送域名解析请求。 但是攻击者会利用一个虚假的源地址A向dns发送域名解析请求,攻击者使用端口7,这个端口是echo应答协议的端口。dns服务器稍后会向该攻击的受害者A的端口7发送一个响应。如果受害者的机器提供应答服务,它就可能创建一个网络包将收到的数据返回给DNS服务器。如果DNS服务器响应了A的这个包,那么在A和DNS服务器之间就会产生循环。
- 放大攻击
- 标准的dns协议,一个60字节的udp请求包会生成一个512字节的udp响应包。而ipv6以及其他扩展dns特性,则可以让这个响应包超过4000字节。
- 攻击者构造使用源地址为攻击目标的dns请求包,然后发送给网络上大量的域名服务器,这些域名服务器就会将响应包发送给攻击目标。看起来都是合法的,但是就是这样被利用了。
国际组织希望安装过滤器在路由器或者网关旁边,以用于过滤伪造的源地址,但是ISP以这样会消耗路由器的性能为说法,不支持这样的提议。从而大量的家庭客户端的电脑被用于制造虚假的源地址。
基于应用的攻击
- SIP泛洪
IP电话使用的是SIP协议,语法和http类似。有请求和响应两种形式。它的实现方式是这样的:
A的客户端首先向自己所在的代理服务器发起invite请求,目标是B。此时A的代理服务器会经过DNS查询B的代理服务器的地址,然后A的代理服务器会将invite请求发给B的代理服务器,B的代理服务器在接受到这个请求后,将消息转发给B的客户端。B的客户端就会响铃了。
攻击者利用伪造的IP地址向一个SIP代理发送大量的invite请求,或者使用僵尸网络生成大量的invite请求,就会造成DoS攻击。这种攻击第一可以让服务器的资源被无效的invite消耗,第二可以让服务器的网络容量被占用。
- 基于HTTP的攻击
比如当大量的http请求来自不同的bots,就可以消耗相当大的资源。 比如从目标服务器下载大文件的请求会导致web服务器从硬盘中读取文件,然后将文件存在内存中,再将其转化为网络包流,再进行传输,这个过程消耗内存,cpu,网络资源。
这种攻击的变种称为递归http泛洪。bots从给定的http链接触发,通过递归的方式遍历给定的web服务器的所有的链接。也就是爬虫。
Slowloris攻击,利用多线程支持多个到同一个服务器应用程序的请求进行攻击。它不断的发送不完整的http请求,试图独占服务器所有可用的请求处理线程。 Slowloris 背后的关键是它能够以很少带宽消耗引起很大麻烦。
这是使用了HTTP协议规范(RFC2616):一个空白行必须用来说明请求报头的末尾或者载荷的开始,如果有的话。一旦接收到完整的请求,web服务器便会响应。但是slowloris不发送这个信号给web服务器。
Slowloris 攻击分为 4 个步骤:
- 攻击者首先通过发送多个部分 HTTP 请求标头来打开与目标服务器的多个连接。
- 目标为每个传入请求打开一个线程,目的是在连接完成后关闭该线程。为提高效率,如果连接花费时间太长,服务器将使非常长的连接超时,从而为下一请求释放线程。
- 为了防止目标使连接超时,攻击者会定期向目标发送部分请求标头,以使请求保持活动状态。本质上说:“我还在这里!我很慢,请等我。”
- 目标服务器在等待请求终止时永远无法释放任何打开的部分连接。一旦所有可用线程都被使用,服务器将无法响应来自常规流量的其他请求,从而导致拒绝服务。
减轻slowloris攻击的方式:
- 增加服务器在任何时间允许的最大客户端数量
- 限制传入请求的速率,限制单个ip允许建立的最大连接数,限制慢速传输速度以及限制客户端允许保持连接的最长时间
- 使用反向负载均衡代理服务,保护源站服务器
负载均衡会对http请求报头做完整性检查,除非http客户端发送报头的最后两个回车和换行,否则该请求是不会被送至web服务器的。要说明的是,企业级的入侵检测和入侵防护系统,对与slowloris没有什么效果,因为它走的是合法的http流量。
入侵检测
一种监控并分析系统事件的安全服务,目标是发现未经授权而访问系统资源的尝试活动,并提供实时或者近似实时的报警。
包括三个组件:
- 传感器:收集数据,包括网络数据包,日志文件和系统调用记录。收集后转发给分析器
- 分析器:从接受的数据中进行分析,确定是否发生了入侵。如果发生入侵,则输出入侵的证据信息。分析器可以提供指导,用于判断什么活动是入侵导致的。
- 用户接口:用户可以通过这个来查看系统输出以及控制系统的行为。
IDS可以分为下面几类:
- 基于主机的IDS: 检测一台主机的特征和该主机发生的或参与的可疑活动的事件。例如进程识别器,系统调用等
- 基于网络的IDS:监测特定网段或者设备的流量,传输和应用协议等进行分析。
- 分开或混合式IDS:将主机和网路的传感器收集的信息相结合,汇总到中央分析器
身份验证,访问控制和防火墙在阻断入侵方面都有一定的作用。但是入侵检测有下面的表现:
- 能够不间断的运行,较少需要人的参与
- 具有容错功能,系统崩溃时,必须能够较快的恢复和重新初始化
- 抵御破坏。IDS必须能够检测自身,检测是否自己被攻击者修改
- 对于正运行的系统增加较小的开销
- 能够根据被检测系统的安全策略进行配置
- 能过自动适应系统和用户变化
- 能够扩展用于监控更多的主机
- 能够提供降级服务,如果某些组件失效,其余部分将最少受到影响
- 允许动态配置,不需要变更后重启
NIDS检测网络上流向潜在的易受攻击的计算机系统的数据包流量。而HIDS是基于主机的,检测主机上用户和软件的活动。
NIDS通常是企业外围安全防御架构的一部分。通常通过监控流量模式和数据包的内容来检测入侵企图。但是随着加密技术的使用,NIDS已经无法看到数据包内部的有效内容了。这也妨碍了它的作用的发挥。
蜜罐
入侵检测技术中一个特别的组件,是用来引诱潜在的攻击者远离关键系统而设计的。作用包括:
- 转移攻击者的目标
- 收集有关攻击者活动的信息
- 引诱攻击者在系统中逗留足够长的时间,以便管理员对攻击做出反应
防火墙
针对包过滤防火墙的攻击方式:
- IP地址欺骗: 入侵者从外部向内部发送数据包,使用的源地址包含内部主机地址。应对措施是,丢弃那些到达外部接口而源地址为标记内部主机地址的包。
- 源路由攻击:源端指定包通过internet使用的路由,希望可以绕过对源路由信息的安全检查。
- 细小分段攻击:入侵者利用IP分段来产生特别小的数据分段,并强制将TCP头信息装入分散的分段中。这种攻击主要是为了绕过基于TCP头信息的过滤规则。应对措施:包的第一个分段必须包含最少的预定传输头。如果第一个分段被否决,那么过滤器将记住这个包,并丢弃后继的所有分段。
状态检测防火墙:
状态检测防火墙通过建立一个出战TCP连接目录来强制执行TCP流量规则。只有当数据包符合这个目录中的某项时,才允许通过。状态检测和包检测检查相同的包信息,但是不同的是状态检测防火墙还会记录TCP连接信息。一些状态检测防火墙还跟踪TCP包的序号,以阻止基于序号的攻击。比如会话劫持。
应用级网关(也叫应用代理):用于应用级流量中继。
用户使用tcp/ip应用程序连接网关,网关要求用户提供要访问的远程主机名。当用户提供了有效的身份验证后,网关会联系远程主机并在远程主机和用户计算机间中继包含应用程序数据的tcp分段。网关可以被设置为只支持某种应用程序的中继。
VPN
IPSec VPN是建立在客户端与防火墙之间的一种虚拟网络。 因为IPSec包,除了IP头和载荷数据外,还需要有IPSec头,如果放在网络内部,防火墙无法识别加密流量,也就失去了保护的意义。
分布式防火墙:
外部数据包经过边界路由器后,进入外部防火墙,这里有外部DMZ区。穿过外部防火墙后,进入内部DMZ,再往下有内部防火墙,保护内部的网络,然后各个内部的主机上面还有主机级别的防火墙。
IPS:
基于主机的IPS,用于避免对系统资源的修改,避免提权攻击和缓冲区溢出攻击,以及访问电子邮件通讯录,以及文件目录遍历。
IBM数字免疫系统
一体化的威胁管理产品,UTM。主要的问题是吞吐量和延迟的,现在商业设备普遍的吞吐量损失是50%,客户被建议使用高性能,大吞吐量的设备以避免性能问题。
软件安全与可信系统
缓冲区溢出
大量的输入被放置到缓冲区或者数据存储区,超过了它所分配的存储能力,覆盖了其他的信息。攻击者利用这样的情况破坏系统或者插入特别编制的代码,以获取系统的控制权。
这是编程错误的结果导致的。发生缓冲区溢出后,会导致程序使用的数据受到破坏,在程序中发生意外的控制权转移,可能的内存非法访问,以及很可能导致程序终止。
当缓冲区溢出被用于攻击系统时,系统的控制权会被转移到攻击者的代码中,此时攻击者可以执行任意的代码在系统中。
缓冲区溢出非常常见,越是靠近底层的语言,比如C,越要靠开发者的技能和细心来避免出现漏洞的语句。建议在可能的情况下,使用高级语言进行开发,减少考虑底层内存和指针的问题。 但是为了提高效率,比如硬件驱动的开发,C语言是不可避免使用的。
linux系统由于有大量的迭代操作,C语言沉积下来的会有比较多的缓冲区溢出攻击面,后来人们使用OpenBSD这样的系统,在操作系统层面进行了加固。
防御,针对栈stack溢出
目前有2中防御方法,一种就是在程序运行时候,首先程序会申请地址,我们在对变量分配地址空间之前,在旧的桢指针下写入一个不可预知的值。当程序运行结束前,我们检查这个值是否有变化。如果有变化,我们就让这个程序异常终止。如果没有变化,我们就正常退出。 问题是,这样的程序需要用带有扩展的gcc编译器重新编译才有效果。
还有一种就是在函数的入口处,将返回地址的一个副本写到内存的某个安全区。在函数的出口处,我们检查帧里的返回地址与保存的副本,如果两者有差异,那就终止程序。
以上的两种防御都需要重新编译。人们开始想办法当程序运行时进行监控,也就是运行时防御。
- 可执行地址空间保护:在stack区禁止代码执行。可执行代码仅能在进程的地址空间找到。
- 地址空间随机化:这样攻击者无法预测目标缓冲区的大致位置。这样即使他们的代码有问题,程序也会由于引用无效的内存而导致终止,不会产生破坏。当前提供的内存地址动态分配就是这样的防御措施。攻击者又开始转向对程序的标准库进行攻击,这个时候有一些安全扩展,随机的选择程序装载标准库的顺序,然后随机它的虚拟内存地址位置,也可以避免攻击。
- guard页:因为一个进程的有效虚拟内存比它通常需要的多很多。地址空间的每一个部分所使用的一系列地址之间都设置了gap。这些gap叫做guard页。它被当作非法地址进行标记。任何企图对其进行访问的进程都会导致终止。这对于全局数据溢出攻击,有效。因为它企图改写进程的地址空间的相邻区域。
heap堆溢出
堆一般设置在程序代码和全局数据之上。堆溢出的可能目标是从堆中动态分配的内存缓冲区。使用动态数据结果的程序是从堆中请求内存的。例如记录的链表。
与栈不一样,堆空间中没有容易引起控制权转移的返回地址。但是如果分配的空间包含一个指向函数的指针,而这个函数代码随后就要被调用,攻击者能够安排改变这个地址指向被改写的缓冲区的shellcode。
通常,处理输入/输出或者解码一个压缩图像/视频文件时候,程序使用记录列表保存大块数据。这样的攻击就可能发生。
防御堆溢出的方法:
- 使堆区的代码成为不可执行的。
- 堆区内存分配采取随机选择,这样堆目标缓冲区地址的预测变得极其困难
- 内存的分配和回收函数包含了堆管理数据是否是到破坏的检查,可以帮助检测和终止使一个已分配的内存发生溢出的任何企图
全局数据区溢出
全局数据从程序文件中被装载,并设置在程序代码区之上。如果使用不安全的缓冲区操作,数据可以溢出到一个全局数据的缓冲区,并改变相邻的内存地址,包括可能随后要调用的函数的指针。
防御的方法:使全局数据区成为不可执行的。将函数指针设置在其他类型数据之下,以及在全局数据区和任何其他管理区之间使用guard页。
软件安全
- 软件安全和防御性程序设计
- 很多计算机安全漏洞都是由于不良的编程习惯造成的
- 组件之间的不安全交互
- 高风险的资源管理
- 脆弱的防御
- 在web安全方面有5个与代码安全有关
- 未经验证的输入
- 跨站点脚本
- 缓冲区溢出
- 注入攻击
- 不恰当的错误处理
- 很多计算机安全漏洞都是由于不良的编程习惯造成的
提高软件质量通常的方法:
- 采用结构化的设计,通过测试来识别和消除程序中的bug
- 包括对可能输入变化和常见的错误测试
软件安全关心的不是程序中bug的数量,而是这些bug是如何被触发而导致程序失败的。
软件安全不同与软件质量和可靠性,攻击者的目的是找到可利用的bug,造成程序失败。而这些bug需要通过一些特殊构造的方法被触发,一般的检测较难发现。
无论何时,只要一个程序调用一些服务,而这个服务来自于另一个程序,服务或者函数,就可能发生注入攻击。给一个程序传递来自外部的一些不可信,没有充分检查和验证的信息时候,也可能发生注入攻击。
fuzzing测试用于进行常规的,更普遍的测试。 主要就是按照模版生成大量的测试输入,然后输入到程序中,检查输出。但是这样的测试对于需要构造复杂结构而触发的漏洞,没有效果。而这样的漏洞一般而言是最重要的。
操作系统安全
许多报告指出,使用少量的基本加固措施就能抵御大量的已知攻击。
这四条策略是:
- 白名单许可的应用
- 给第三方应用和操作系统漏洞打补丁
- 限制管理员的权限
- 创建深度防御系统
这里也可以看看网络上著名的20 critical security control
在创建和部署一个系统的时候应该有一个预案,并运行于整个系统的生命周期:
- 评估风险和规划系统部署
- 加固系统底层操作系统和关键应用程序
- 确保任何关键内容是安全的
- 确保使用了合适的网络保护机制
- 确保应用了合适的流程保证系统安全
系统安全规划
宗旨: 以最小的代价获得最大化的安全。
设计相关内容:
- 系统的目的,存储信息的类型,提供的应用和服务以及安全需求
- 系统用户的分类,以及拥有的权限,以及可以访问的信息类型
- 用户怎样获得认证
- 以什么方式访问系统内的信息应该被监管
- 系统对存储在其他主机,如文件服务器或者数据库服务器上的信息可以进行访问,对这些访问怎么样进行管理
- 谁来管理系统,以何种方式管理
- 系统需要的其他附加安全措施,包括主机防火墙,发病毒软件或其他恶意代码防护机制以及日志
加固操作系统的建议
- 安装操作系统并打补丁
- 移除不需要的服务,应用,协议
- 配置用户,组以及权限
- 配置资源控制
- 安装安全工具
- 测试基本操作系统的安全性
安全维护
- 监控和分析日志信息
- 定期备份
- 从安全损坏中恢复
- 定期测试系统安全性
- 使用合适的软件流程来更新关键软件和补丁,并进行监控和修改相关配置
可信计算与多级安全
BLP模型,核心是保密性。关心信息的非授权泄漏。
不能上读,不能下写。
这两个特性规定了强制访问控制的保密性形式。并且还规定了自主访问控制。
模型的三元组:主体,客体,访问方式
BLP的困难:
- 保密性与完整性互斥,要么追求权限,要么追求机密。
- 出现隐蔽通道的问题,比如合谋
Biba模型:关注完整性,关心数据的非授权修改。针对军事应用。
clark-wilson:关注完整性,针对商业应用。 基础是:良形事务,和用户职责分离。
chinese-wall:完整性和保密性。为了可能发生利益冲突的商业应用开发的,利用了自主和强制访问概念。是金融界和法律界的一个思想。
可信计算TC
可信计算提供三个基本服务:
- 鉴别引导
- 认证
- 加密
IT安全管理和风险评估
- 哪些资产需要保护
- 这些资产受到哪些威胁
- 如何应对这些威胁
IT安全管理概念:
-
实现和保持适当级别的保密性,完整性,可用性,可核查性,真实性和可靠性的过程。
-
职能包括:
- 确定组织的IT安全目标,战略和方针
- 确定组织的IT安全要求
- 识别和分析组织内IT资产面临的安全威胁
- 识别和分析的风险
- 规定适当的安全防护措施
- 监视必要的安全防护措施的实施和运行,以便为组织内部的信息和服务提供最经济的保护
- 开发和实施安全意识项目
- 检测和响应事件
CSO信息安全官的职责:
- 监督信息安全管理过程
- 与主管信息安全的高级管理层联络
- 维护组织的信息安全目标,战略和方针
- 协调对信息安全事件的响应
- 管理整个组织的信息安全意识和培训计划
- 与IT项目安全官相互沟通
IT安全控制,计划和规程
- 控制措施:通过一些方法减少风险。包括消除或者预防违规的现象。将违规造成的损害减到最小。发现违规现象进而启动纠正措施。
管理问题
物理和基础设施安全
信息系统安全的三要素:
- 逻辑安全:保护数据免受基于软件和基于通信的威胁
- 物理安全:保护存储数据的信息系统和使用,操作,维护这些系统的人员的安全。
- 整体安全:也叫做公司或者工厂安全。保护一个完整区域的人和财产,设施和建筑的安全。
相对湿度 40%-60%
物理安全破坏的恢复
- 使用冗余。在理想情况下,系统中所有的重要的数据在站点外都是可以访问的。并且在成本/收益的基础上对其进行近乎实时的更新。
人力资源管理
- 安全意识,培训和教育
- 改善员工的行为
- 提升员工为自己的行为负责的能力
- 减轻组织为员工的行为所负的责任
- 遵守法规和合同的义务
教育是为了让人知道“为什么”,培训是为了让人知道“怎么做”,而意识是让人知道“什么是”
教育要求理解背景知识。培训要动手实践,意识可以通过看视频了解。
人员安全的原则:
- 最小特权:根据员工所做的工作给予他最小的访问权限
- 责任划分:对责任细分,减少职员对自己的权限进行不恰当的使用机会。
- 对关键员工有限的依赖:确保在机构中没有人是不可替代的。对于系统来说,员工结构中应该建立冗余机制。专门的技能或者知识不能仅有一人掌握。
把所有的安全和审计责任放在一个人身上是危险的。
员工离职过程安全:
- 将其账户从授权访问列表清除
- 明确通知保安,该人在没有内部人员陪同的情况下不许进入办公区域
- 清除离职人员的访问pin
- 修改必要的安全锁
- 收回员工文档,设备,硬盘,工牌等
- 通知该信息给适当的部门
ISO27002
安全审计
目的:
- 为与安全相关的正当的计算机操作提供一定级别的保证
- 无论攻击是否成功,都为其生成可用于事后分析的数据
- 提供一种可用于评估安全服务中存在的不足的工具
- 提供能够用于定义异常行为的数据
- 维护对计算机取证有用的记录
审计模型:
- 事件鉴别器
- 审计记录器
- 报警处理器
- 安全审计迹:记录器将每个事件创建格式化的记录存储于此处
- 审计分析器
- 审计存档器
- 存档
- 审计提供器
- 审计迹检查器
- 安全报告
SIEM
法律与道德问题
密码编码算法
攻击类型:
- 唯密文攻击:需要知道加密算法和要解密的密文
- 已知明文攻击:需要知道加密算法,要解密的密文,以及用同一个密钥加密的一个或多个明文-密文对
- 选择明文攻击:需要知道加密算法,要解密的密文,以及分析者任意选择的明文和用同一个密钥加密的密文
- 选择密文攻击:需要知道加密算法,要解密的密文,分析者有目的选择的一些密文和用同一个密钥解密的明文
- 选择文本攻击:加密算法,要解密的密文,分析者任意选择的明文和用统一密钥加密的对应的明文,还需要知道分析者有目的选择的一些密文和用同一个密钥解密的对应的密文
3DES的有效密钥长度为168位。如果令k1=k3,那么密钥长度就是112位。如果k1=k2=k3,那么3DES就和DES一样了,密钥长度为56了。
在DES和3DES中,分组长度为64位。
AES中,分组长度为128位。密钥长度可以被指定为128,202或者256位。
AES,字节的最左边4位作为行,右边4位作为列,然后按照行列取出表中对应的值。
流密码和RC4
RC4作为SSL/TLS标准。该标准为网络浏览器和服务器间通信而制定。
分组密码的工作方式:
- ECB:用相同的密钥分别对64位明文组进行加密
- CBC:加密算法的输入是上一个64位密文组和下一个64位的明文组异或
- CFB:一次处理位。上一个分组密文作为产生一个伪随机数输出的加密算法的输入,该输出与明文异或,作为下一个分组的输入
- OFB:与CFB基本相同,只是加密算法的输入是上一次DES的输出
- CTR:每个明文组是与加密的计数器的异或。对每个后续的组,计数器是增加的
公钥密码和消息认证
RSA是一种分组密码,其明文和密文均是0~n-1之间的整数。
RSA算法的详细解法 密钥交换的详细解法
网络安全
internet安全协议
- email,S/MIME
符合rfc822的规范,定义了一个简单报头,包括to,from,subject以及其他域。mime定义了一些内容格式,用于支持多媒体email进行标准化表示,包括文本,图像,音频,视频等。
s/mime提供签名和加密消息的能力。
TLS协议中的两个概念:
- TLS连接:对TLS来说,这样的连接是点到点的连接关系,而且这些连接是瞬态的,暂时的。每个连接都与一个会话关联。
- TLS会话:一个客户端与一个服务器之间的关联。由握手协议创建。会话可以用来便面每个连接需要进行的,代价高昂的新的安全参数的协商过程。
SSL记录协议支持两种服务,机密性和消息完整性。
心跳的目的:
- 向发送者确保接收端存活,即使在底层tcp连接上已经有一段事件没有任何活动
- 心跳生成了空闲时间段中的活动连接,以避免被不容忍空闲连接的防火墙关闭掉
IPsec的两种模式:
- 传输模式:保护扩展到IP包的载荷,针对上层协议提供保护。一般用于主机端到端的通信。该模式下会对载荷进行加密和有选择性的进行认证。但是对IP头不进行处理。
- 隧道模式:对整个IP包提供保护。新生成的包是和原来的包不同的源地址和目标地址,增加了安全性。ESP在隧道模式下会对整个IP包,包括IP头进行加密和认证。
Internet认证应用
主要是kerberous的方面
协议的安全主要依赖于参加者对时间的松散同步和短周期的叫做Kerberos票据的认证声明。 下面是对这个协议的一个简化描述,将使用以下缩写:
AS(Authentication Server)= 认证服务器 KDC(Key Distribution Center)= 密钥分发中心 TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据 TGS(Ticket Granting Server)= 票据授权服务器 SS(Service Server)= 特定服务提供端 客户端用户发送自己的用户名到KDC服务器以向AS服务进行认证。KDC服务器会生成相应的TGT票据,打上时间戳,在本地数据库中查找该用户的密码,并用该密码对TGT进行加密,将结果发还给客户端用户。该操作仅在用户登录或者kinit申请的时候进行。 客户端收到该信息,并使用自己的密码进行解密之后,就能得到TGT票据了。这个TGT会在一段时间之后失效,也有一些程序(session manager)能在用户登陆期间进行自动更新。 当客户端用户需要使用一些特定服务(Kerberos术语中用”principal”表示)的时候,该客户端就发送TGT到KDC服务器中的TGS服务。当该用户的TGT验证通过并且其有权访问所申请的服务时,TGS服务会生成一个该服务所对应的ticket和session key,并发还给客户端。客户端将服务请求与该ticket一并发送给相应的服务端即可。具体的流程请看下面的描述。
其在網路通訊協定中屬於顯示層。
简单地说,用户先用共享密钥从某认证服务器得到一个身份证明。随后,用户使用这个身份证明与SS通信,而不使用共享密钥。
网络访问控制和云安全
- NAC
- 访问请求者
- 策略服务器
- 网络接入服务器(媒体网关)
网络访问实施方法:
- IEEE802.X
- VLAN
- Firewall
- DHCP
EAP:EAP(Extensible Authentication Protocol)为可扩展身份验证协议,是一系列验证方式的集合,设计理念是满足任何链路层的身份验证需求,支持多种链路层认证方式。EAP协议是IEEE 802.1x认证机制的核心,它将实现细节交由附属的EAP Method协议完成
EAPOL:EAP over LAN。比如在PC和NAS之间,EAP报文用这个格式进行封装。
EAPoR:EAP over Radius。在NAS和AAA之间的封装格式。
EAP的四种认证方法:
- EAP-MD5:容易受到字典攻击,不支持密钥生成
- LEAP:cisco的专用认证方法,在EAP-MD5的基础上增加了动态的WEP密钥和互验证(客户端和Radius服务器之间)
- EAP-TLS:基于TLS的EAP,是WPA和WPA2的行业标准。优点是安全性较高。缺点是需要PKI体系,还有客户端认证时候负载较高,证书的管理有难度
- EAP-TTLS:基于隧道TLS的EAP.目的是解决EAP-TLS需要PKI系统的问题。这样不需要PKI,而是直接在TLS隧道内使用原有的认证方法。
- PEAP:将EAP封装到TLS隧道。由cisco,microsoft和RSA共同开发的。也是WPA,WPA2的标准
- EAP-FAST:cisco提出的,用于代替LEAP。
传输层安全
使用HTTPs时候,下面的通信元素是加密的:
- 请求文档的URL
- 文档的内容
- 浏览器格式的内容
- 在浏览器和服务器之间传输的cookies
- HTTP报头的内容
无线网络安全
无线网络的关键因素:
- 信道:容易窃听和干扰
- 移动性
- 资源:手机和平板的处理能力较低,比较容易受到拒绝服务攻击和恶意软件
- 易接近性
包括终端,无线媒介,接入点
保护措施:
- 信号隐藏
- 加密
- 绑定mac地址的访问