操作系统十五安全

来源:互联网 发布:传奇物品数据库参数 编辑:程序博客网 时间:2024/05/21 17:03

1.安全问题

      入侵者和骇客代表那些试图违反安全的事

      威胁意味着对违反安全的潜在危险,如漏洞

      攻击是试图破坏安全

 

     攻击保密性:违反涉及未授权的读数据。从系统或数据流中捕获秘密数据,如信用卡、身份信息,可使入侵者得到直接经济回报

     攻击完整性:违反涉及未授权的数据修改。如将债务转给无辜的一方,或修改重要商业应用的源代码

     违反有用性:违反涉及未授权的数据破坏。如骇客为得到吹牛的 资本宁愿制造大量破坏

     偷窃服务:  违反涉及未授权的资源利用。如入侵者在一个系统安装后台程序作为文件服务器。

     拒绝服务:    违反涉及阻止合法使用系统。拒绝服务(DOS)攻击可能是一种意外。bug未能延缓他的传播速度时最初的因特网蠕虫变成DOS攻击

             

      攻击者在试图违反安全时采用几种例行方法。最为常见的是冒名顶替(masquerading),攻击者破坏证实身份的验证,然后获得不能以正常途径进入的特权。另一种常见的攻击方式是重放捕获的数据交换。重放攻击(reply attack)包括恶意或欺骗性的有效数据的重复传播。有时重放包括完整的攻击-------如请求重复转移金钱。当更为常见的是消息篡改(message modification),这也升级了特权。另一类攻击方式是中间人攻击,其中攻击者位于通信的数据流中,伪装成给接收方发信息的发送者,或反过来。网络通信中,中间人攻击之前可能发生会话劫持(session hijacking),其中活动的通信会被拦截。

      保护系统需要在4个层次上采取安全机制

            物理:采取物理措施保护计算机系统的站点。机房、终端、工作站必须是安全的

            人 :必须谨慎的授权给用户

            操作系统:一个失去控制的进程可能导致DOS;对服务的一次访问可能暴露密码

            网络:在数据传输间截取数据

2.程序威胁

2.1特洛伊木马

      许多系统允许程序作者之外的用户运行程序。如果这些程序运行时所在的域提供了用户的访问权限,那么其他用户就可能误用这些权限。一个误用自身环境的代码段称为特洛伊木马。较长的搜索路径如在UNIX中,常常会加剧特洛伊木马问题。

      例如,在搜索路径中使用字符“.”。字符“.”告诉shell在搜索中包含当前目录。因此,如果一个用户的当前目录被设置为另一个用户的目录,他在他的搜索路径中包含字符“."并输入一个系统命令,这个命令就可能从另一个用户的目录执行。程序在另一个用户的域中运行,程序就可以做该用户能做的任何事情,如删除该用户的文件。

      特洛伊木马有一个变种,就是模仿一个登陆程序。在用户登陆时,被告知输错密码,然后用户重新输入密码后成功登陆。于是入侵者在这个登陆模拟器偷走了该用户的验证密匙和密码。这个登陆模拟器保存好密码,发出登陆出错的消息后退出。windows操作系统中使用Ctrl+Alt+Delete组合键,可以击败模拟登陆程序的攻击。

      特洛伊木马的另一变种是间谍软件。间谍软件有时伴随用户安装的程序。其目的是下载广告显示到用户的系统上;访问特定站点时生成弹出浏览窗口;捕获用户的系统信息并反馈到一个中央战点,这被称为隐蔽通道,例如从系统得到信箱地址,将大量垃圾邮件发送给你。

2.2后门

      程序和系统设计者都可能在软件中留一个只有他自己能使用的漏洞。

      可以在编译器中包含一个巧妙的后门。不管编译的源码如何,编译器都可在产生目标代码的同时另外产生一个后门。这种行为极为可怕,因为检查程序的源代码发现不了任何问题。只有编译器的源码中有问题的相关信息。

      后门很是棘手,软件系统可能有上百万行代码,分析源码的事情谁都不会去做!!!

2.3逻辑炸弹

      考虑一个程序,他只在一定环境下开始一个安全事件。由于正常的操作下可能没有安全漏洞,因此很难被检测。但当一个预定义的参数集符合时,可能产生一个安全漏洞,这被称为逻辑炸弹

2.4栈和缓冲区溢出

      一个系统外的攻击者通过网络访问系统,他最可能采取的攻击方式是利用栈和缓冲区溢出。这种攻击利用程序中的一个错误,例如没有对输入域进行边界检查,攻击者发送比预期多得多的数据。

      例如,一个网页表格要求用户往其中一栏输入用户名,攻击者可以发送一个用户名并添加额外的字符,使缓冲区溢出并且写栈 ,往栈中添加一个新的返回地址和攻击者想要执行的代码。当读缓冲区的子程序从读缓冲区的操作中返回时,返回地址是攻击代码的地址,紧接着就开始执行攻击代码。

 

#include<stdio.h>                                该程序生成一个大小BUFFER_SIZE的字符数组,并复制命令行argv[1]提供的参数内容。          

#define BUFFER_SIZE 256                只要参数的长度小于BUFFER_SIZE(需要一个字节存放/0),该程序正常运行。

                                                       

int main(int argc, char *argv[])           但如果命令行提供的参数长度大于BUFFER_SIZE,strcpy()函数将从argv[1]开始复制,直到它

{                                                           遇到/0,或程序崩溃。

       char buffer[BUFFER_SIZE】       因此,该程序受到一个潜在的缓冲区溢出问题的困扰,其中复制的数据溢出了缓冲区的数组

        if(argc<2)

                  return -1;

        esle{

                  strcpy(buffer,argv[1]);

                  return 0;

         }

}

 

 

 

 现在考虑一个缓冲区溢出的安全攻击

      当在一个典型的计算机结构中调用一个函数时,为函数定义的本地变量,传递给函数的参数,以及一旦函数退出就返回控制的地址都被存储在一个栈帧中,。自顶向下检查栈,首先是参数与函数定义的自变量一起被传递给函数;接着是帧指针,它指向栈帧开始的地址。最后得到返回的地址,它指明一旦函数退出所返回控制的地址。帧指针必须保存在栈上,函数调用期间栈指针的值可以变化,所保存的帧指针允许对参数和自变量的相关访问。

 

      给出这个标准的内存分布,一个骇客可以执行一个缓冲区溢出攻击。他的目的是替代帧栈的返回地址,以使他现在指向包括攻击程序的代码段

      程序员先写了如下代码

        #include<stdio.h>                                                        

        int main(int argc, char *argv[ ])                                

        {

             execvp( '   '\bin\sh '   ', '   '\bin\sh '   ',MULL );

             return  0;

          }

      使用函数调用execvp(),此代码生成一个shell进程。如果正在被攻击的程序在整个系统的权限内运行,此新生成的shell将得到对系统的完全访问。然后代码段被编译,以使汇编语言指令可以被修改。其主要的修改是删除代码中不必要的特性,从而减短代码长度,使之适合放在栈帧内。现在此汇编代码是一个二进制序列,将位于攻击的中心。

      再看上面的C程序,假设程序中调用main()函数时,栈帧如a图所示,使用调试程序,程序员找到buffer【0】在栈中的地址。该地址是攻击者想要执行代码的地址,故此二进制序列被添加一定数量的NO_OP指令(空操作),以满足栈帧达到返回地址的位置,并加上buffer【0】的位置和新的返回地址。攻击者将此二元序列作为进程的输入后攻击完成。然后该进程从argv【1】将二进制序列复制到栈帧中的buffer【0】位置。现在当控制从main()返回时,并不返回到原先指定的返回地址,而是返回到修改的shell代码,它则允许具有访问权限的攻击程序!!!

      这个例子需要大量的知识和编程技能来识别可利用的代码并使用这些代码。他不需要程序员来发起攻击,而是任何一个骇客都能确定漏洞并编写一个攻击程序。

      利用缓冲区溢出攻击特么致命,因为他可以在系统间运行,也可在允许连接的信道间流窜。甚至可以绕过防火墙。

      最新的x86版本芯片可以利用NX特性来防止这种攻击

2.5病毒

      病毒是自我复制的,为的是感染其他计算机。病毒是内嵌到合法程序的代码段。对个人计算机用户,病毒是个大问题;而对UNIX等多用户计算机,操作系统不允许写可执行程序且防护措施较好,因此对多用户计算机的危害较小。

      病毒通常通过E-mail生成,垃圾邮件是最常见载体。当用户从Internet共享文件服务器下载带病毒的程序或交换感染病毒的磁盘时,就会将病毒扩散。

      另一种常见的病毒传播形式是通过Microsoft Office文件的使用进行的,例如Word文档。这些文档可能包括所谓的宏或Visual Basic程序,Office会自动执行这些宏,这些Visual Basic宏程序能恣意执行如随意删除文件。

      病毒如何工作呢?一个被称为病毒 dropper的程序将病毒内嵌到系统上。病毒 dropper通常是通过其他原因执行特洛伊木马从而安装病毒。

      病毒科分为几大类,很多病毒同属多种类型

            文件病毒:他感染文件,改变程序的开始地址以使程序跳转执行它的代码,之后将控制返回程序。隐蔽性好,又称为寄生病毒。

            启动病毒:感染系统启动区,每次启动程序时执行,又称为内存病毒

            宏病毒:大多数病毒用低级语言编写,宏病毒用高级语言编写如VB。当能够执行宏指令的程序运行时被触发。

            源代码病毒:寻找源代码并修改它们。

            多态病毒:改变签名躲避杀毒软件的检测。

            加密病毒:包括解密代码,先解密再执行以防杀毒软件的检测。

            隐形病毒:通过修改检测病毒的系统部分来避免检测

            隧道病毒:将自己装入中断处理链中,试图逃避病毒扫描

            复合病毒:感染系统多个部分,检测很难

            加壳病毒:被编码后,是自己很难被反病毒人员破解和理解,还可以被压缩以逃避检测

 

      病毒的种类仍不断增加,他是破坏性最强的安全攻击。计算机争议最大的问题是许多计算机运行相同的硬件,操作系统和应用程序。这种单一性将不断的增加安全威胁和破坏。争论在于是否存在着由微软组成的单一性。

3.系统和网络威胁

3.1蠕虫

      一种能够利用系统漏洞通过网络进行自我传播的进程。蠕虫大量产生自己的副本,耗尽系统资源,使整个系统瘫痪。1998年11月2日,康奈尔大学的学生Morris在若干台连到Internet上的UNIX主机上是放了一个蠕虫程序。导致了上百万美元的损失。

      这个蠕虫程序由两部分组成,一个挂钩和一个主程序。

 

      蠕虫在Internet上仍存在

3.2端口扫描

      端口扫描并不是攻击,而是骇客为了攻击而检测漏洞的方法。端口扫描采用工具来试图生成与一个或多个指定端口的TCP/IP连接。

3.3拒绝服务

      DOS攻击的目的不是获取信息或盗用资源。,但他会阻止系统或设备的合法使用。

      DOS攻击大都是基于网络的。分为两大类,一是占用许多设备资源而不做任何有用的工作,例如用户点击网页时,一个java小程序下载到本机上,并占有所有可用的cpu资源或无限制的跳出窗口。第二种是破坏网络设备,如攻击者发送标准协议的开始部分,用户将建立一个TCP链接但他不再发送标准协议的剩余部分   ,这将阻止合法用户使用目标设备。。

      很难预防DOS攻击,但更难的是阻止分布式拒绝攻击DDOS,这种攻击从多个站点同时开始,经常利用僵尸面向一个共同目标攻击。

      计算机课程学习班是偶然性系统DOS攻击恶名昭著的来源。考虑学生学习如何生成子进程的第一个编程练习。一个常见的漏洞是没完没了的衍生子进程。

4.作为安全工具的密码术

      无论网络的范围大小如何,建立包的可靠的源地址和目的地址的网络是不可行的。所以要减少对网络可靠性的依赖。密码术是用来限制一条消息的潜在发送者和接受者的。现代密码术是基于那些被称为密匙的密文。在密码术的帮助下,消息的接受者能确定消息是否来自持有特定密匙的计算机。。攻击者无法从密匙产生的消息中推测出密匙。

4.1加密

      在加密的约束下,消息的发送者可以做到只让拥有密匙的 计算机读取该消息。加密是一种约束消息的可能接收者的方法。

      加密算法由以下几部分构成:

          一个密匙集合K

          一个消息集合M

          一个密文集合C

          一个函数E:K→(M→C)

          一个函数D:K→(C→M)

      函数E是指,对于任意k∈K,E(k)是个根据消息产生密文的函数。E必须是高效可计算函数

      函数D是指,对于任意k∈K , D(k) 是个根据密文推算消息的函数。D必须是高效可计算函数

      加密算法必须提供的属性是:给定一个密文c∈C ,计算机只有在拥有D(k)时才能计算出满足条件E(k)(m)=c的m。因此,持有D(k)的计算机可以将密文解密,得到相应的明文。

      主要的加密算法有两种,对称加密算法和不对称加密算法

1.对称加密算法

      对称加密算法中,加密和解密用的是相同的密匙,即可以从D(k)推算出E(k),也可以从E(k)推算出D(k)。因此需要对E(k)和D(k)实施同等程度的安全保护。

     

2.非对称加密算法

      非对称加密算法具有不同的加密和解密密匙。RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。

       http://baike.baidu.com/view/7520.htm

      非对称算法是基于数学函数,这使得它的执行需要昂贵的计算。对于一个计算机,加密与解密文本信息,使用对称算法会更快。那么为什么非得使用非对称加密算法呢?

3.验证

      约束消息的潜在的发送者被称为验证,因此验证是加密的补充。实际上它们的功能有时重叠。一个加密的消息也能证明发送者的身份。验证也可以用来被证明消息没有被修该。这里讨论验证作为消息可能接收者的约束。

      验证算法由以下组件构成:

            一个密匙集合K

            一个消息集合M  

            一个验证者集合A

            一个函数S:K→(M→A)

            一个函数V:V→(M×A→{true,false})

      函数V,指的是,任意一个k∈K,V(k)是一个验证消息的验证者的函数,V必须是高效可计算函数

      验证算法必须有的关键属性是:对于一条消息m,当且仅当计算机拥有S(k)时,一台计算机能够产生一个属于A的验证者a使得V(k)(m,a)=true.因此,持有S(k)的计算机都能够产生消息的 验证者,这样其他持有V(k)的计算机就能验证这些验证者。

      验证算法也有两种,理解这些算法的第一步是探究hash函数。hash函数根据消息生成一个小的固定大小的数据块,被称为报文摘要或hash值,hash函数通过采取n位块的消息并处理这些块以产生n位的hash来工作。H必须是与m无碰撞的,即必须保证不能找到m'=m,以致H(m)=H(m').。常用的报文函数包括MD5,他能生成126位的hash;以及SHA-1,它输出160位 的hash。

      报文摘要对检测消息的改变很有用,但对于验证是无用的。验证算法需要对报文摘要加密。

      第一种验证算法使用对称加密方法。

      第二种验证算法是数字签名,所产生的验证者被称为数字签名。该算法,无法从V(k)推算出S(k),特别是V,它是一个单向函数。因此,将kv称为公开密匙,ks称为私有密匙。这里描述一个数字签名算法RSA。

4.密匙发布

      密码发明人与密码破译者之间的斗争都涉及密匙。根据对称算法,这两者都需要密匙,而其他人不应有密匙。对称密匙的传递是一个巨大挑战。且为了更安全,还需要不断的更换密匙。

      而对于非对称算法,不仅能公开的改变密匙,而且用户无论与多数人通话,仅需要一个密匙。由于公匙不需要保密,对密匙环进行简单的存储就可以了。然而,对于公钥的发布也要小心,攻击者也能够解密。这就是授权存在的问题之一,即需要证明谁拥有公匙。一种方法是采用数字证书。数字证书是由被信任的一方所签署的公钥

4.2密码术的实现

      密码术可以插到ISO模型的任意层,例如SSL协议在传输层提供安全。虚拟私有网络VPN普遍采用IPSec

5.用户验证

5.1密码

      验证用户身份最常用的方法是密码。用户登录时,会提示输入密码。密码可以看做密匙或者权限的特例。

5.2密码的脆弱

      一种破解方法是根据用户信息猜测。另一种是使用暴力方法:尝试枚举。

      密码可能被泄露

5.3密码加密

5.4一次性密码

5.5生物测定学

6.实现安全防御

6.1安全策略

      改进计算机安全性的第一步是需有一个安全策略。安全策略变化广泛,但通常包括保护内容的声明。

6.2脆弱性评估

      如何检测一个安全策略是否被正确执行呢?最后的方法是执行一个脆弱性评估。

6.3入侵检测

      入侵检测系统IDS和入侵防止系统IDP,IDS系统在检测到入侵时响起警报;IDP系统作为一个路由器,检测到入侵,阻塞交通。

6.4病毒防护

      要使计算机防止病毒感染,最好的方法是防御或实行安全计算。

7.保护系统和网络的防火墙

      防火墙是一台夹在可靠系统和不可靠系统的计算机、装置、路由器。

      网络防火墙限制两个安全域的网络访问,监控和记录所有的连接。

      个人防火墙是一个软件层,它包括在操作系统内或作为一个应用加上去。

 

原创粉丝点击