安全编程方法

  • 格式:docx
  • 大小:74.87 KB
  • 文档页数:13

《安全性编程方法》课程论文 论文题目: 计算机安全漏洞研究 专 业: XXX 班 级: XX 级X 班 学 号: XXXXXXXXXX 姓 名: XXXXXX 指导教师: XXXXXX 成 绩:

2012年 6 月19日

目 录 2

1 计算机漏洞的主要表现………………………………………………………………4

2 计算机系统安全防范技术…………………………………………………………..5 3 安全编程实例分析………………………………………………………………………6

4 总结与体会………………………………………………………………………………….12

摘 要 3 从操作系统、应用软件、软件服务三方面分析了计算机系统漏洞的主要表现,论文探讨了主要的计算机安全防范技术,对计算机系统安全进行探索。 计算机系统漏洞也称为计算机系统的脆弱性、缺陷等,是指计算机系统的软件、硬件或策略上的不安全因素。计算机系统漏洞可以分为两类:软漏洞和硬漏洞。软漏洞是由计算机系统配置不当引起的;硬漏洞是软件或硬件厂商的生产过程造成的。计算机系统的脆弱性是计算机安全评估的测试对象,评估者对其的理解和测试方法是影响评估结果的决定因素。

关键词:计算机;系统漏洞;安全

1、计算机系统漏洞的主要表现。

计算机信息系统由硬件和软件组成。由于软件程序的复杂性和编程的多样性,在计算机信息系统的软件中很容易有意或无意地留下一些不易被发现的安全漏 4

洞。软件安全漏洞主要有以下几个方面: 1.1应用软件的安全漏洞

所谓应用软件的安全漏洞,是指应用软件在逻辑设计上的缺陷或在编写时产生的错误,该缺陷或错误可以被不法者或计算机黑客利用,通过植入木马、病毒等方式来攻击或控制整个计算机,从而窃取用户计算机中的重要资料和信息,甚至破坏用户的系统。 1.2操作系统的安全漏洞

操作系统是整个计算机信息系统的核心控制软件,直接影响整个系统的信息安全。操作系统的安全漏洞主要有输入/输出的非法访问和操作系统陷门两大类。 1.3比较常见的计算机软件与计算机服务的安全漏洞

1.3.1 finger漏洞。 在tcp/ip协议中,finger只需一个ip地址便可以提供许多关于主机的信息,例如谁正在登录、登录时间、登录地点等。对于一个训练有素的计算机黑客来说,finger无疑是其入侵目标主机的一把利器。 1.3.2匿名ftp。 匿名ftp即匿名文件传输协议。系统管理员建立了一个特殊的用户id,名为anonymous,intemet上的任何人在任何地方都可使用该用户id登录远程计算机,将公共文件传输到用户的本地计算机。 1.3.3远程登录。 在大型计算机环境下,远程登录可以给用户带来很大方便,但在方便的背后却潜藏着很大的安全隐患。在计算机上运行诸如rlogin、rcpmxec等远程命令时,由于要跨越一些计算机传输口令,而tcp/ip对所传输的信息又不进行加密,所以计算机黑客只要在所攻击的目标主机的ip数据包所经过的一条路由上运行“嗅探器”(sniffer)程序,就可以截取目标口令,给计算机安全和信息保密带来很大威胁。 1.3.4电子邮件。 内部网用户进行电子邮件发送和接收时存在被黑客跟踪或收到一些恶意程序(例如特洛伊木马、蠕虫等)、病毒程序等的可能,由于许多用户的安全意识比 5

较淡薄,对一些来历不明的邮件警惕性不高,这就给了入侵者以可乘之机,直接威胁到系统安全。 1.3.5密码设置漏洞。 服务系统登录和主机登录使用的是静态口令,口令在一定时间内是不变的,且在数据库中有存储记录,可重复使用。这样,非法用户通过计算机窃听、非法数据库访问、穷举攻击、重放攻击等手段很容易得到这种静态口令,然后利用口令即可对资源进行非法访问和越权操作。 2、计算机系统安全防范技术

2.1实时防治病毒 实时防治病毒技术能够作用于计算机工作的整个过程,可以随时防止病毒入侵计算机系统,全面提高计算机系统整体的防护水平。实时防治病毒技术不但可以时刻检测和清除各种病毒,而且还可以自动对压缩文件的内部进行查毒和杀毒。目前,国内常用的杀毒软件有金山毒霸、瑞星杀毒软件等。 2.2防火墙安全技术 防火墙技术是建立在现代通信网络技术和信息安全技术基础上的应用性安全技术,是目前最为流行也是使用最为广泛的一种网络安全技术。所谓防火墙,其实就是把互联网与内部网隔开的屏障。“防火墙”是一种形象的说法,它是一种由计算机硬件和软件的组合,使互联网与内部网之间建立起一个安全网关(seurity gateway),从而,保护内部网免受非法用户的侵入。 2.3身份验证 身份认证是指计算机及网络系统确认操作者身份的过程。信息技术领域的身份验证是通过将一个证据与实体身份绑定来实现的。实体可能是用户、主机、应用程序甚至是进程。证据与身份之间是一一对应的关系,双方通信过程中,一方实体向另一方提供这个证据证明自己的身份,另一方通过相应的机制来验证证据,以确定该实体是否与证据所宣称的身份一致。 2.4数据加密 为了保护数据在传输的过程中不被窃取和修改,必须对网络中的数据采用加密的方法以保证其安全。加密就是把数据和信息转换为不可辨识的密文的过程,使不应了解该数据和信息的人不能够识别。欲知密文的内容,需将其转换为明文, 6

这就是解密过程。 3 安全性编程实例分析。

3.1 缓冲区溢出漏洞研究 所谓换中去溢出攻击,就是一种利用不表程序的缓冲区溢出漏洞,通常操作目标程序堆栈并暴力改写其返回地址,从而获得目标控制权的攻击手段。结合一个简单的例子介绍在本机的栈溢出。 请看下面一段溢出程序: #include "stdafx.h" #include "TestOverflow.h"

#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CWinApp theApp; using namespace std; // 测试溢出 void TestOverflow(char *buf) { CFile file; CFileException er; // 打开文件 if(!file.Open(_T("TestOverflow.txt"),CFile::modeRead,&er)) { er.ReportError(); // 输出错误信息 return; } int x = file.GetLength(); 7

file.Read(buf,x); // 将读出的文件内容写入buf中 } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { char buf[10]; // 定义10个字节长度的缓冲区 TestOverflow(buf); // 将文件内容写入buf中 } return nRetCode; } 上面程序定义了一个函数TestOverflow,这个函数功能是读出TestOverflow.txt文件的内容并写入变量buf中。主函数_tmain首先定义了10个字节的数据buf,最后调用TestOverflow函数将指定文件内容写入缓冲区buf中。 主函数中的变量buf只有10个字节,如果文件内容大于10个字节,就会在堆栈上发生缓冲区溢出。利用这个漏洞,可以进行恶意代码的植入。下面开始讲解具体过程。  步骤一 向TestOverflow.txt不断写入字母“a”,当写入18个字母时,发生缓冲区溢出,程序崩溃。但这个崩溃用处不大,继续填充文件。当写入24个“a”时,系统提 8

示如图4-11所示的错误信息。 缓冲区溢出错误报告 0x61代表的就是ASCII码中的字母“a”,说明找到溢出点。这时点击取消,Visual C++ 6.0会自动启动进行调试。进入调试环境后,选择“view”菜单→“debug windows” →“registers”,可打开寄存器窗口。在寄存器窗口里会看到EAX、EBS和EIP等寄存器的内容。EIP当然是最重要的了。EIP的内容就是程序下一步所要执行指令的地址。可以看到ESP寄存器的值未被破坏,而且离buf变量不远。下一步需要找出ESP的值是从如何处理得到的。  步骤二 在main函数的最后一行代码处设置断点,因为需要在程序退出时执行恶意代码。启动调试器,并让程序无故障运行到该断点。然后切换到反汇编窗口(按Alt+8,或单击“View” →“debug windows”→“disassembly”)。另外打开内存窗口和寄存器窗口。从disassembly窗口可以看到: 0040155B pop edi

0040155C pop esi 0040155D pop ebx 0040155E add esp,50h 00401561 cmp ebp,esp 00401563 call _chkesp (004015e6) 00401568 mov esp,ebp 0040156A pop ebp 0040156B ret 第一行是“pop edi”。指令pop用于将仅次于堆栈顶端的数据移到其后的指定寄