首页 软件开发安全之道(全)

软件开发安全之道(全)

举报
开通vip

软件开发安全之道(全)nullnull软件开发安全性设计 王宝会 wangbh@buaa.edu.cn课前说明课前说明本课为必修课,学分1分,两天 关注软件构件内部的安全性,白盒思路。 考试是结合你所在的实际项目,写一篇不少于10页的论文,要求论文有一定的深度。禁止从网络上抄袭! 两天没露面的同学没有成绩 课程有些地方会有点难度,大家不要灰心。 软件安全问题是一个过程软件安全问题是一个过程软件开发对于安全,需要考虑,需要贯穿整个开发过程,需要在每一个里程碑结束时检验。 在开发的整个过程中,始终不停地寻找安全漏洞。 现实中的一些...

软件开发安全之道(全)
nullnull软件开发安全性设计 王宝会 wangbh@buaa.edu.cn课前说明课前说明本课为必修课,学分1分,两天 关注软件构件内部的安全性,白盒思路。 考试是结合你所在的实际项目,写一篇不少于10页的论文,要求论文有一定的深度。禁止从网络上抄袭! 两天没露面的同学没有成绩 课程有些地方会有点难度,大家不要灰心。 软件安全问题是一个过程软件安全问题是一个过程软件开发对于安全,需要考虑,需要贯穿整个开发过程,需要在每一个里程碑结束时检验。 在开发的整个过程中,始终不停地寻找安全漏洞。 现实中的一些安全问题现实中的一些安全问题我的口令就是我的用户名后加上123 我的口令是Q47pY!3,每隔90天就更换一次 黑客攻击清华网站 捏造校长批评教育制度新闻黑客攻击清华网站 捏造校长批评教育制度新闻null被入侵站点的截图null部分国外网站被黑截图网站“挂马式”攻击网站“挂马式”攻击中国招商引资网 http://www.china228.com/ 站点最下方被填加恶意连接,是一次典型的挂马式攻击。 http://www.gowuyi.com/about_us/image/icyfox.htm“当当网”也没有幸免“当当网”也没有幸免跨站点脚本攻击 跨站点脚本攻击 在浏览器框中输入:javascript:aviod(document.cookie="uc1=12345zzlsecuritytest ") 在浏览器框中输入:javascript:aviod(document.cookie="uc1=12345zzlsecuritytest ") Cookie 捕获攻击Cookie 捕获攻击Web欺诈的实施过程Web欺诈的实施过程nullnullSkulls.D 手机病毒Skulls.D 手机病毒来源: TUOMAS TONTERI企业信息内容企业信息内容账目、凭证、采购销售、资金使用、生产 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 、人事信息、机密文件、客户、品牌 软件安全的根源软件安全的根源软件安全问题的根源分为内因、外因、外部环境以及内部环境四个方面。 内因指软件自身的错误,包括设计层的缺陷、实现层的Bug和软件开发 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 存在问题; 外因有软件的运行环境――网络; 外部环境有黑客、恶意代码; 内部环境有误操作、报复、经济犯罪。 软件里面的安全漏洞软件里面的安全漏洞漏洞是指硬件、软件或策略上的缺陷,从而可使攻击者能够在未经授权的情况下访问系统。软件漏洞是指在计算机程序、系统或 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 中存在的安全漏洞,它已成为被攻击者用来非法侵入他人系统的主要渠道。 程序中存在的危害本地安全策略的问题或弱点 大多数是指那些会导致程序强制执行一些不同于作者本来意图的行为 通常情况下99.99% 无错的程序很少会出问题,利用那0.01% 的错误导致100% 的失败 基于软件的漏洞包括故意错误、意外包含和拙劣设计,从黑客攻击的角度:利用软件漏洞的攻击软件,如隐藏代码、逻辑炸弹、检查时间(Time of Check)到使用时间(Time of Use)(TOC/TOU)木马、病毒、逻辑炸弹、后门程序、NAK攻击或中断、伪出错等。Windows的输入法漏洞Windows的输入法漏洞程序师的软件后门程序师的软件后门著名的郑金龙利用职务之便,盗取金融卡的资料,并自己制作金融卡偷取客户的存款。这个问题的根本不单是个人遵守的问题,而在于并未确实执行文件存取的规范,让程序设计师有权限阅读到他不该看的资料 另类的一些安全事件…另类的一些安全事件…2006年南航登记牌系统出现问题,导致2000多架飞机延误 2007年奥运门票购买系统出现崩溃 2008年伦敦证券系统出现崩溃…… 软件三高软件三高高安全,高可靠、高稳定双刃剑--攻击性软件双刃剑--攻击性软件DDoS软件 病毒 木马 后门 暴力破解软件 流氓软件拒绝服务DOSTCP SYN Attack Ping of Death消耗系统资源(带宽、内存、队列、CPU…) 当机…… 阻止授权用户正常访问服务(慢、不能连接、没有响应……)CPU拒绝服务DOS分布式拒绝服务DDOS分布式拒绝服务DDOS攻击者攻击者主控端主控端主控端代理端代理端代理端代理端代理端代理端攻击目标常见的分布式拒绝服务DDOS常见的分布式拒绝服务DDOS病毒泄露信息病毒泄露信息Slammer软件在全球的11分钟Slammer软件在全球的11分钟268110Infections doubled every 8.5 seconds Infected 75,000 hosts in first 11 minutes Caused network outages, cancelled airline flights and ATM failures Cisco Responded in 10At Peak, Scanned 55 Million Hosts per SecondMinutes after ReleaseCode Red v 1扩展速度(7.19-7.20)Code Red v 1扩展速度(7.19-7.20)计算机病毒编制技术的新迹象计算机病毒编制技术的新迹象操作系统:单一平台->跨平台(Winux) 人员:单兵作战->团队协作(Matrix、29a) 区域:地区化->国际化、全球化(Email) 技术:单一->全面(Magistr) 危害:恶作剧->危及国家、信息安全(BO、冰河) 速度:24小时内感染全球 Unix/Linux常用帐号后门Unix/Linux常用帐号后门检查 /etc/passwd 查看 UID=0 查看 shell 字段Unix/Linux rhosts++后门Unix/Linux rhosts++后门 检查 /etc/hosts.equiv 查看每个用户的$HOME/.rhosts 查看是否增加了“信任”主机Unix/Linux二进制木马后门Unix/Linux二进制木马后门 将可执行文件替换,检查时间戳或者检查校验和 strings 输出可打印字符串 如果 “strings /bin/login | grep crypt” 有输出,一定是 trojan 了的 login 如果 strings ls | grep “/dev/pty” 有输出,或者直接 strings ls发现可疑路径和文件名,说明已经 trojan 了。对 dir、vdir 也一样 如果 strings du | grep “/dev/pty” 有输出,或者直接 strings du 发现可疑路径和文件名,说明已经中了 trojan ifconfig 后门就是把下面一行代码注释掉 if (ptr->flags & IFF_PROMISC) printf("PROMISC "); 以去掉网卡混杂模式显示。 如果 “strings /sbin/ifconfig | grep PROMISC” 没有输出,肯定 ifconfig 已被中了trojanUnix/Linux二进制木马后门Unix/Linux二进制木马后门 netstat 木马程序的不支持 “-p” 选项,而系统自身的 netstat 支持 “-p” 选项。因此如果发现 netstat 不支持 “-p” 选项,肯定 netstat 被换成木马程序 Linux 系统的 “-p” 选项表示打印出进程号(pid)和程序名(program name)信息,而 Solaris 系统上 “-p” 表示打印出网络接口的协议信息。如果发现与这一点不符,netstat 就被换成木马程序 tcpd 中有一段代码,这段代码对远程主机名进行查询和双重检查,拒绝可疑连接。trojan 的目的是使这段代码失效 sshd 后门把 ssh 发行包里的 login.c 作了修改,加入了内置的用户名和口令。执行 “strings sshd”,发现诸如 “hax0r3d” 串,说明 sshd 已被 trojan Unix/Linux daemon 服务后门Unix/Linux daemon 服务后门 TCP 后门。诸如 bdoor.c 之类的小程序。执行 “netstat -l -p -na | grep tcp” 查看这类后门是否在活动 Raw socket 后门。这类后门打开一个 raw socket,通过发 ICMP 包来进行网络通讯通过RC检测后门通过RC检测后门Solaris。在 /etc 目录下,有这样一些 rc 脚本:rcS、rc0、rc1、rc2、rc3、rc5、rc6 Linux。rc 脚本在 /etc/rc.d 目录下,它们是:rc、rc.local、rc.sysinit 对 Solaris 系统,rc[S-6] 脚本名最后一个数字或字母表示运行级别 /etc 目录下另有 rc0.d、rc1.d、rc2.d、rc3.d、rcS.d 五个目录,目录名中‘.’前面的数字 或字母同样是表示运行级别 rc[S-6] 脚本的作用是:按运行级别,对相应的 rc[S-6] 目录下文件名以‘S’打头的脚本文件,赋给参数 start,启动相应的服务守护进程;以‘K’打头的脚本文件,赋给参数 stop,关闭相应的服务守护进程 其中的例外是,rc5 和 rc6 脚本启动或关闭的是 rc0.d 中的服务守护进程 rcS、rc0、rc1、rc5、rc6 脚本还进行文件系统安装或拆卸工作。特别是 rcS,它是系统启动时必须执行的,它对文件系统进行检查和安装,进行各项系统配置通过RC检测后门通过RC检测后门对 Linux 系统,/etc/rc.d 目录下有 rc0、rc1、rc2、rc3、rc4、rc5、rc6 这七个目录 /etc/rc.d/rc 脚本依据运行级别象 Solaris 上一样按 rc[0-6] 目录中的脚本启动或关闭服务守护进程 同时,对每个运行级别,rc.local 脚本都将执行。rc.sysinit 脚本系统启动时必须执行,它检查和安装文件系统,进行各项系统配置通过RC检测后门通过RC检测后门仔细检查这些 rc[?].d 目录,如果发现某个脚本文件不是到 /etc/rc.d/init.d 或 /etc/init.d 目录中某个脚本文件的符号连接,或者出现与上面文件名规则不相符的脚本文件,或者增加了某个脚本文件,它很可能是用来启动后门进程的,必须仔细检查这些脚本启动的程序 确信 rc[?].d 目录中脚本文件都是到 /etc/rc.d/init.d 或 /etc/init.d 目录中某个脚本文件的符号连接后,再 cd 到 /etc/rc.d/init.d 或 /etc/init.d 目录下。检查 init.d 目录下的脚本文件,如果某个脚本启动的服务进程与名称不符,或者脚本文件的内容被修改,加有别的什么东西启动了别的进程,必须仔细检查,极可能是被用来启动后门进程了 除此之外,与二进制木马后门相交叉,对 init.d 目录下脚本文件启动的每一个程序本身,都要仔细检查,运行起来看看有没有什么不正常的现象,防止它有可能被换成 trojan 木马了。对于 init.d 目录中的脚本文件启动的程序,它们的二进制文件大都在/usr/bin、/usr/local/bin、/sbin、/usr/sbin 目录下通过 /etc/inetd.conf 检测后门通过 /etc/inetd.conf 检测后门注意 /etc/inetd.conf 中如下的语法: # telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd 特别是最后两个字段, 检查 /etc/inetd.conf,特别是最后两个字段,查看是否除通常的服务外新加有一行启动了别的服务。如果有的话,仔细检查这项服务,很可能是在启动后门程序 同样,与二进制木马后门相交叉,对 inetd.conf 所列的每项服务,都要对程序的二进制文件进行检查,很有可能它们被换成木马程序作为后门使用 netstat 和 lsof 命令检测后门使用 netstat 和 lsof 命令检测后门如果后门程序作为守护进程启动,通常它侦听某个端口,通过该端口与外部网连接。攻击者借此获取对系统的访问 对 Linux 系统,用 netstat -pna 列出网络状态信息,特别注意 这两栏Cronjob 后门Cronjob 后门在系统中置入后门程序,通过系统的 cron 守护进程启动它 检测后门时,相应地就是检查 /var/spool/cron/crontabs 或 /var/spool/cron 目录中的 crontab 文件。查看是否有可疑程序被作为任务执行了,如果有,仔细检查它是否是后门程序。与“二进制木马后门”相交叉,还要仔细检查原有的任务,防止有可能它们被换成木马程序作为后门了 如果 cronjob 后门有网络通讯,与守护进程后门一样,可以结合 netstat 和 lsof 命令来检测LKM 后门LKM 后门修改系统调用 chkrootkit kstat基于内核的rootkit基于内核的rootkitAdore 核心部分就是做adore.o的LKM,还有一个用于隐藏 adore.o的模块cleaner.o,一个控制工具ava,以及一个启动脚本startadore ava是adore rootkit的控制程序 Usage: ./ava {h,u,r,R,i,v,U} [file, PID or dummy (for U)] h 隐藏文件(hide file) u 重现文件(hide file) r 以root的权限运行一个程序(execute as root) R 永远删除一个进程(remove PID forever) U 卸载adore模块(uninstall adore) i 隐藏一个进程(make PID invisible) v 让一个进程重现(make PID visible)利用kstat检测LKM利用kstat检测LKM使用/dev/kmem文件获得信息 安装与使用 tar ;make kstat;make install Usage: kstat [-i iff] [-P] [-p pid] [-M] [-m addr] [-s] -i iff may be specified as 'all' or as name (e.g. eth0) displays info about the queried interface -P displays all processes -p pid is the process id of the queried task -M displays the kernel's LKMs' linked list -m addr is the hex address of the queried module displays info about the module to be found at addr -s displays info about the system calls' table Kstat –s的正常输出和运行过adore之后的kstat –s输出Kstat –s的正常输出和运行过adore之后的kstat –s输出SysCall Address sys_exit 0xc0117ce4 sys_fork 0xc0108ebc sys_read 0xc012604c sys_write 0xc0126110 sys_open 0xc0125c10 sys_close 0xc0125d60 sys_waitpid 0xc0117ff8 sys_creat 0xc0125ca4 sys_link 0xc012de60 sys_unlink 0xc012dc90 sys_execve 0xc0108f18 sys_chdir 0xc01254a0 sys_time 0xc01184b4 sys_mknod 0xc012d77c sys_chmod 0xc01256e4sys_fork 0xc4051428 WARNING! Should be at 0xc0108c88 sys_write 0xc4051590 WARNING! Should be at 0xc01269b8 sys_close 0xc405163c WARNING! Should be at 0xc01264a4 sys_kill 0xc40514d0 WARNING! Should be at 0xc011060c sys_mkdir 0xc405172c WARNING! Should be at 0xc012e540 sys_clone 0xc405147c WARNING! Should be at 0xc0108ca4 sys_getdents 0xc40512a4 WARNING! Should be at 0xc013022cSniffer 后门Sniffer 后门Sniffer 后门用来监听主机或网络,以获取敏感数据,比如说用户名和口令。对于网络监听,可以通过查看网络接口是否处于混杂(promisc)模式来查看是否有 Sniffer 后门存在 对Linux 系统,在命令行执行 ifconfig 命令,如果发现 PROMISC 这个字符串标志,说明网络接口处于混杂(promisc)模式,排除合法用户运行 Sniffer 程序后,意味着有 Sniffer 后门程序在运行。如果是这样,立即执行命令 lsof | grep sock,对第五列 TYPE 字段为 sock 那些输出行仔细检查,定出哪一个程序在 Sniffer。删除该程序消除后门常见的Trojans软件常见的Trojans软件木马木马一种未经授权的程序,或在合法程序中有一段未经授权的程序代码,或在合法程序中包含有一段用户不了解的程序功能。 Trojan对用户来说具有恶意的行为。 Client/Server程序 控制系统 Server端一般安装在被控主机上,字节较小,常使用较让人迷惑的名字,如patch.exe Client端一般是图形化界面; 常存在配置程序,可以按需要生成server程序。常见的木马程序常见的木马程序Back Orifice(2K) 平台:9x 最新版本:BO2k 名称: .exe;boserver.exe; bo2k.exe;UMGR32.exe 缺省端口 31337(UDP) 54320、54321(BO2K) 常见的木马程序常见的木马程序Netbus 常见版本:1.7; 2.01pro 名称: Path.exe NBSvr.exe 缺省端口 12345(TCP) 20034(TCP) 常见的木马程序常见的木马程序冰河 名称: G_clind G_server 缺省端口 7626(TCP) 阻击一个木马的全过程阻击一个木马的全过程第一步:发现可疑现象 RUNDLL32 不会连接网络分析网络地址分析网络地址 注册信息表明这是一个非法网站!网络访问验证网络访问验证 网站没有公开的网页,更加可疑分析RUNDLL32.EXE分析RUNDLL32.EXE 根据进程利用冰剑来看分析可疑线程分析可疑线程分析启动服务分析启动服务注册表验证注册表验证分析病毒体IRJIT.dll分析病毒体IRJIT.dll存在系统调用,还有编码数据,解码后,为加密数据,说明病毒保护 措施 《全国民用建筑工程设计技术措施》规划•建筑•景观全国民用建筑工程设计技术措施》规划•建筑•景观软件质量保证措施下载工地伤害及预防措施下载关于贯彻落实的具体措施 拒绝服务软件拒绝服务软件应用层攻击软件直接跨越跨越防火墙应用层攻击软件直接跨越跨越防火墙防火墙、入侵检测、主机安全加固可以有效防御针对主机和网络的攻击, 但是对应用层却几乎束手无策应用层直接暴露在威胁之下流氓软件流氓软件“流氓软件”是介于病毒和正规软件之间的软件。   计算机病毒指的是:自身具有、或使其它程序具有破坏系统功能、危害用户数据或其它恶意行为的一类程序。这类程序往往影响计算机使用,并能够自我复制。   正规软件指的是:为方便用户使用计算机工作、娱乐而开发,面向社会公开发布的软件。   “流氓软件”介于两者之间,同时具备正常功能(下载、媒体播放等)和恶意行为(弹广告、开后门),给用户带来实质危害。软件中隐藏代码软件中隐藏代码在一个经核准的软件程序中插入代码。代码管理如果不完善,代码复查就不严格,开发组的成员就很容易实施这种手段。此外,还可以使用某些特别技术。 一种是NT文件系统(NTFS)或其它使用文件流的文件系统。这是一种众所周知的技术,它可以很容易地被用来隐藏代码。尽管很容易被发现,只要你知道它在哪里,但要找到哪个文件使用了文件流的却不是很容易的事情。 另一种技术是病毒的开发和使用,它可以在现有代码中隐藏代码。典型的病毒可以将自己附着在现有代码中以便隐藏。为此,应该诊断核查可信性、应用程序开发组并审计他们的工作,扫描那些使用了文件流的代码、病毒等。软件中的逻辑炸弹软件中的逻辑炸弹这是一种处于休眠状态的程序,它可以被某种事件激活,例如时间或者一个特殊程序的使用,通常都是被病毒植入到计算机中的。当然,更常见的情况是某些心怀不满的职员在经核准的程序中隐藏代码,该炸带被设置成一旦职员(或前职员)离开就“爆炸”或让软件失效。代码维护、生产和服务器访问要有审计活动的参与,为了发现逻辑炸弹,可以使用病毒检查程序。(此类程序对已知病毒代码有效,可以延迟“逻辑炸弹”的行动。病毒检查程序并不能防止职员编写自己代码的活动)软件陷门软件陷门在程序开发期间,程序员经常要通过编程来访问操作系统的调试设施(程序的断点调试)。当程序转入生产使用时或商业销售时,这些“trap door”或入口会规避系统的保护机制,应该被去除。某些陷门可以通过敲击键盘而激活。这种概念很像后门(back door)或者取得系统未授权入口的方式。如果编程调试工具不被去除,就可能被利用来危害系统。在生产性代码中仍然存在突破点,这或者是有意为之,或者是不谨慎的开发惯例造成的结果。为了防止由于陷门可能引起的危害,一定要进行插入代码复查,力求去除突破点和其他编程调试技术,也包括那些异常的代码。函数组装之前也应该进行测试。检查时间(Time of Check)到使用时间(Time of Use)(TOC/TOU)检查时间(Time of Check)到使用时间(Time of Use)(TOC/TOU)如果指令执行需要多步,在执行步之间实施攻击就可能危害到系统安全。TOC/TOU是一种特殊的条件竞争(race condition)的名字,它的脆弱性可被某种攻击利用。IBM的OS 360(一种老式的主机系统)对文件施行访问控制,它首先读取并检查许可权限,如果许可权限正确,再去读取文件。如果许可权限不正确,用户的访问请求会被拒绝。不过,如果再返回拒绝之前能够中断系统,文件就有可能被读取甚至被修改。最近的条件竞争(因为软件时钟问题而存在)包括Linux中rm命令的漏洞。因为该命令编写方式的问题,它可能会在完成之前被再次发出,对非特权用户来说,这会引起DoS,如果是root用户,就可能移动整个文件系统。这种错误在最新版的操作系统中已经没有了。软件中NAK攻击或中断软件中NAK攻击或中断中断是设备用来提醒操作系统注意其需求的方式。例如按下键盘上的一个键,或者modem端口有数据到达。软件中断也经常被使用。当请求某服务时,典型的响应是带一个确认应答(acknowledgement,ACK)或者一个否定应答(negative acknowledgement,NAK)。如果系统没有很好地编程处理这些中断,系统就可能处于曝光的状态,NAK攻击利用的就是这一点。软件伪出错软件伪出错你曾经努力在Internet上做些什么但失败了吗?你被告知再试一次。如果你这样做了,你成功了吗?你可能会成为伪出错的牺牲者。这种攻击可能在真实代码之前或周围插入自己的代码。在一次登陆伪出错(logon pseudoflaw)中,受害者输入自己的ID和口令,但得到的提示是输入错误,如果再输入一次,他成功了,他可能认为这只是简单的拼写错误,但事实上伪出错记录了他的用户ID和口令,然后向他返回了合法的登陆屏幕。 为什么存在诸多软件安全问题?为什么存在诸多软件安全问题?现代软件开发周期短,工作量大,无暇顾及安全 从认识论的高度看,人们往往首先关注对系统的需要、功能,然后才被动地从现象注意系统应用的安全问题 。 操作人员、编程人员和系统分析人员的失误或缺乏经验都会造成系统的安全功能不足。 强而有效的不可破解的加密技术随处均可得 到(尽管有各种各样的进出口限制) 不攻击加密技术,攻击其应用的底层基础设施 不攻击加密技术,攻击其实现 不攻击加密技术,而从用户方面入手一些经典的结论一些经典的结论公理1 摩菲定理 所有的程序都有缺陷。所有软件都是有错的 通常情况下99.99%无错的程序很少会出问题 同安全相关的99.99%无错的程序可以确信会被人利用那0.01%的错误 0.01%安全问题等于100%的失败一些经典的结论一些经典的结论定理1 大程序定律 大程序的缺陷甚至比它包含的内容还多。 证明:通过调查统计。 推理1-1 一个安全相关程序有安全性缺陷。 定理2 只要不运行这个程序,那么这个程序是否有缺陷,也无关紧要。 证明:在所有逻辑系统中,均有(假→真)=真。 推理2-1 只要不运行这个程序,即使这个程序有安全性漏洞,也无关紧要。 定理3 对外暴露的计算机,应尽可能少地运行程序,且运行的程序也应尽可能小。 证明:直接从推理1-1和推理2-1导出。软件防范软件防范从软件安全防范角度:操作系统、中间件、应用服务器、数据库及数据、进程线程、应用软件(B/S,C/S,桌面)等方面来考虑。传统操作系统的问题传统操作系统的问题传统的网络设备所用的操作系统中各进程相互关联共用资源,任何一个进程的故障必然导致整体失效Segmentation Fault (core dumped)Microsoft Windows LSA漏洞Microsoft Windows LSA漏洞LSASS DCE/RPC末端导出的Microsoft活动目录服务存 在一个缓冲区溢出,远程攻击者可以利用这个漏洞以 SYSTEM权限在系统上执行任意指令。 一些活动目录服务在Windows目录中在“debug”子目 录里生成调试日志文件,在LSASRV.DLL实现的记录函数写信息条目到日志文件中,这里的vsprintf()函数用于建立日志条目。由于对提供给这个函数的字符串参数缺少正确的边界缓冲区检查,超长字符串可导致缓冲区溢出。部分RPC函数接收此字符串作为参数并尝试写调试日志文件,利用这些RPC函数,可能以SYSTEM权限在系统上执行任意指令。 Microsoft Windows LSA漏洞防范Microsoft Windows LSA漏洞防范使用防火墙对UDP端口135、137、138、445及TCP端口135、139、445、593进行过滤 安装scriptSecurity Update for Microsoft Windows (835732) http://www.microsoft.com/technet/security/bulletin/MS04-011.mspx操作系统脆弱性操作系统脆弱性操作系统结构体制本身的缺陷。如输入/输出(I/O)非法访问和操作系统陷门 在网络上传输文件,加载与安装程序,包括可执行的文件。 在于创建进程,甚至可以在网络的节点上进行远程的创建和激活。 操作系统中有一些守护进程,实际上是一些系统进程,它们总是在等待一些条件的出现。 操作系统都提供远程过程调用(RPC)服务,而提供的安全验证功能却很有限。 操作系统提供网络文件系统(NFS)服务,NFS系统是一个基于RPC的网络文件系统。 操作系统的debug和wizard功能。 操作系统安排的无口令入口,是为系统开发人员提供的边界入口,但这些入口也可能被黑客利用。 操作系统还有隐蔽的信道,存在着潜在的危险。 尽管操作系统的缺陷可以通过版本的不断升级来克服,但系统的某一个安全漏洞就会使系统的所有安全控制毫无价值。 网络协议的安全问题网络协议的安全问题协议也是软件,也存在安全问题。 TCP/IP层次结构图 TCP/IP层次结构图 网络层的安全威胁网络层的安全威胁IP 欺骗 Internet 控制信息协议(ICMP) 碎片攻击 IP 欺骗IP 欺骗黑客经常利用一种叫做IP欺骗的技术,把源IP 地址替换成—个错误的IP 地址。接收主机不能判断源IP地址是不正确的 使用IP 欺骗的一种攻击很有名的一种是Smurf攻击 Smurf 攻击是—种拒绝服务攻击 一个Smurf 攻击向大量的远程主机发送一系列的ping 请求命令。黑客把源IP 地址换成想要攻击目标主机的IP 地址。所有的远程计算机都响应这些ping 请求,然后对目标地址进行回复而不是回复给攻击者的IP 地址用。目标IP 地址将被大量的ICMP 包淹没而不能有效的工作。 防御:为了防止黑客利用你的网络攻击他人,关闭外部路由器或防火墙的广播地址特性。为防止被攻击,在防火墙上设置规则,丢弃掉ICMP包。Internet 控制信息协议(ICMP)Internet 控制信息协议(ICMP)当用户ping 一台主机想看它是否运行时,用户端就正在产生了一条ICMP 信息。远程主机将用它自己的ICMP 信息对ping 请求作出回应。这种过程在多数网络中不成问题。然而,ICMP 信息能够被用于攻击远程网络或主机 碎片的产生碎片的产生链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度 如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU 每一IP分片都各自路由,到达目的主机后在IP层重组 碎片攻击碎片攻击IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字节 如果有意发送总长度超过65535的IP碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者拒绝服务 如果分片之间偏移量经过精心构造,一些系统就无法处理,导致死机 如何阻止IP碎片攻击如何阻止IP碎片攻击Windows系统打上最新的Service Pack 目前的Linux内核已经不受影响 在网络边界上禁止碎片包通过 用IP tables限制每秒通过碎片包的数目 如果防火墙有重组碎片的功能,请确保自身的算法没有问题,否则被DoS攻击就会影响整个网络 传输层的安全威胁传输层的安全威胁SYN-flood攻击 会话劫持SYN-flood攻击SYN-flood攻击这种拒绝服务攻击利用了TCP建立连接时三方握手的弱点 攻击者可以建立很多半开连接。在这个过程中,当服务器要跟攻击者建立连接时,攻击者却终止了连接。攻击者再建立其它的连接然后再终止,直到目标服务器打开成百上千的半开连接 会话劫持攻击会话劫持攻击会话,就是两台主机之间的一次通讯。 在每一个数据包中,都有两段序列号,它们分别为: SEQ:当前数据包中的第一个字节的序号 ACK:期望收到对方数据包中第一个字节的序号 假设双方现在需要进行一次连接: S_SEQ:将要发送的下一个字节的序号 S_ACK:将要接收的下一个字节的序号 S_WIND:接收窗口 //以上为服务器(Server) C_SEQ:将要发送的下一个字节的序号 C_ACK:将要接收的下一个字节的序号 C_WIND:接收窗口 //以上为客户端(Client) 会话劫持的关键是预测正确的序列号,攻击者可以采取嗅探技术获得这些信息。 会话劫持攻击会话劫持攻击它们之间必须符合下面的逻辑关系,否则该数据包会被丢弃,并且返回一个ACK包(包含期望的序列号)。 C_ACK <= C_SEQ <= C_ACK + C_WIND S_ACK <= S_SEQ <= S_ACK + S_WIND A向B发送一个数据包 SEQ (hex): X ACK (hex): Y FLAGS: -AP--- Window: ZZZZ,包大小为:60 B回应A一个数据包 SEQ (hex): Y ACK (hex): X+60 FLAGS: -AP--- Window: ZZZZ,包大小为:50 A向B回应一个数据包 SEQ (hex): X+60 ACK (hex): Y+50 FLAGS: -AP--- Window: ZZZZ,包大小为:40 B向A回应一个数据包 SEQ (hex): Y+50 ACK (hex): X+100 FLAGS: -AP--- Window: ZZZZ,包大小为:30 会话劫持攻击会话劫持攻击攻击者C冒充主机A给主机B发送一个数据包 SEQ (hex): X+100 ACK (hex): Y+80 FLAGS: -AP--- Window: ZZZZ,包大小为:20 B向A回应一个数据包 SEQ (hex): Y+80 ACK (hex): X+120 FLAGS: -AP--- Window: ZZZZ,包大小为:10 主机B执行了攻击者C冒充主机A发送过来的命令,并且返回主机A一个数据包;但是,主机A不能识别主机B发送过来的数据包,所以主机A会以期望的序列号返回给主机B一个数据包,随即形成ACK风暴。如果成功的解决了ACK风暴,就可以成功进行会话劫持了。 应用层攻击应用层攻击DNS欺骗则是,目标将其DNS请求发送到攻击者这里,然后攻击者伪造DNS响应,将正确的IP地址替换为其他IP,之后你就登陆了这个攻击者指定的IP,而攻击者早就在这个IP中安排好了恶意网页 DNS欺骗的原理和攻击技术DNS欺骗的原理和攻击技术hack.haha.com主机请求解释 www.usa.comns.haha.com域名服务器ns.haha.com请问com域 服务器IP地址?ns.internic.netcom域服务器IP 地址是22.1.2.3ns.haha.com请问usa.com 子域DNSns.internic.comusa.com子域DNS 是199.6.6.122.1.2.3null ns.haha.com请问www.usa.com 的IP地址usa.com子域DNSwww.usa.com 的IP地址是199.6.6.9199.6.6.1hack.haha.com主机www.usa.com 的IP地址是199.6.6.9返回查询结果nullns.haha.com请问www.usa.com 的IP地址usa.com子域DNSwww.usa.com 的IP地址是199.6.6.9199.6.6.1hack.haha.com主机www.usa.com 的IP地址是199.6.6.9返回查询结果冒充一个假IP地址: 202.109.2.2www.usa.com 的IP地址是202.109.2.2超文本传输协议 HTTP 超文本传输协议 HTTP WEB用户可能下载有破坏性的ActiveX控件或JAVA applets 这些程序在用户的计算机上执行并含有某种类别的代码,包括病毒或特洛伊木马 HTTP服务器也必须要小心保护,HTTP服务器在很多基础上类似FTP服务器 应用层的安全防护应用层的安全防护实施强大的基于用户的身份认证 实施数据加密,访问控制的理想位置 加强数据的备份和恢复措施 对资源的有效性进行控制,资源包括各种数据和服务 网络协议的安全问题网络协议的安全问题GPRS核心网技术标准从最初的R99到现在的R4/5/6,技术仍旧处在不断的完善发展之中。目前的GPRS核心网主要指SGSN和GGSN部分。 当前移动通讯核心数据网络主要提供IP为基础的用户业务服务,即GPRS(通用分组无线业务)。是一种对GSM网进行改进的数据传输标准,在GSM上提供分组交换和分组传输。无线应用协议(WAP)等高层协议可以基于GPRS来实现移动互联。 SGSN-Service GPRS Support Node,SGSN主要和BSS亦即移动基站相连,负责移动用户的移动性管理,接入控制、鉴权、路由选择、地址翻译和映像、数据包的中转、流量控制、QoS管理等功能。 GGSN则主要与外部数据网相连,作为GPRS的外部数据网关,它主要负责用户和网络间分组数据包的封装和中转、消息的传递、地址翻译和映像和部分移动性管理工作,也就是作为GPRS的核心网网关。 某省的GPRS系统拓扑某省的GPRS系统拓扑网络协议的安全问题网络协议的安全问题GTP作为SGSN和GGSN之间的一种Tunnel协议,它的发展也经历了不同的阶段。GTP是建立在UDP之上的一种应用层协议,分为GTPv0和GTPv1不同的版本。网络协议的安全问题网络协议的安全问题终端用户的数据业务通路如上,图中浅蓝色区域为移动通讯核心数据网区域。 网络协议的安全问题网络协议的安全问题GPRS服务节点(Serving GPRS Support Node,SGSN),用于在其工作区域内转发移动设备的数据,并进行相关的数据路由与传输。它服务的GPRS用户(预约者)皆在某个地理区域内,它提供的服务包括:加密、认证、会话管理与流动性管理(漫游)等功能。 GPRS网关节点(GGSN Gateway GPRS Support Node,GGSN),用于中转GPRS核心网与用户企业网(或Internet)通信的数据。它也负责会话管理、协调预约者(用户)与SGCN协商、计费信息管理等功能。 认证服务器(The Radius Server),用于为接入指定APN的移动设备分配IP地址等网络信息。当用户通过GPRS接入特定APN时IP地址将要被接入方机构预先设定的地址池进行分配,致使移动设备可以通过网络中的其它设备进行通信。 HLR/VLR,是由ISP维护的用户记录数据库。HLR数据库中包含附加的服务信息、认证证明、APN(Access Point Name)与ISP预约信息。在GPRS中ISP的预约信息用于HLR与SGSN之间的交互。而VLR则用于为漫游用户提供临时的记录数据库(内容与HLR相同)。GTP协议安全漏洞GTP协议安全漏洞GTP 数据包包头含有Sequence Number字段,Sequence Number向GGSN(接收GTP数据包的GGSN) 指示数据包的顺序。 在PDP环境激活阶段,发送端GGSN向接收端GGSN发送的第一个G-PDU 的序列号值是零(0),发送端GGSN为其随后发送的每个G-PDU增加序列号值,G-PDU序列号值达到65535时,重置为零。 一般情况下,接收端GGSN会校验所接收的数据包中的序列号,接受端GGSN拿自身的计数器序列号和所接收的数据包中的序列号进行比较,如果这两个序号匹配上了,则 GGSN 转发该数据包,如果它们不匹配,则GGSN 丢弃该数据包。 GTP内部封装的IP就是用户的手机IP,外部的IP是GTP寻址IP。这样的多层IP封装带来了协议的安全应用漏洞。GTP协议栈与用户之间协议分层模型GTP协议栈与用户之间协议分层模型应用软件的安全漏洞及对策应用软件的安全漏洞及对策在软件程序员开发应用软件时,常插入一些小段程序,其目的是测试某个模块,或为了连接将来的更改和升级程序,或是在维护维修时为程序员提供方便。这些小程序也叫陷门(陷阱或后门)。虽然它们一般不为人们所知,但一旦这些“后门”洞开,黑客们就会长驱直入,造成不可避免的损失。这些陷门程序就是应用软件漏洞。 加强程序开发阶段和使用过程中的安全控制,制定规范的软件开发标准,加强管理,对相关人员的职责进行有效监督等措施对付这些漏洞。 OA系统:SSL+表单签名nullWeb程序安全性1.DoS攻击(拒绝服务攻击) 2.SQL注入 3.Cookie欺骗 4.木马程序 5.CGI程序的安全性 6.Web欺骗 7.Java与JavaScript攻击 8. ActiveX的安全性 Web程序常见问题Web程序常见问题 信息泄漏 泄漏web路径信息 泄漏系统文件内容 泄漏数据库内容 覆盖、重写系统或者数据库数据 执行系统命令 拒绝服务攻击如何写一个安全的CGI程序如何写一个安全的CGI程序防止缓冲区溢出 小心调用外部命令 特殊字符的过滤 正确使用隐藏变量 使用cookie应注意的问题 提防拒绝服务攻击 使用正确的错误处理机制CGI – 缓冲区溢出CGI – 缓冲区溢出什么是缓冲区溢出? 当向一个固定大小的缓冲区(buffer)中储存超量数据时,就会发生缓冲区溢出(Buffer Overflow) 缓冲区溢出的后果 如果使用随机数据,可能导致程序崩溃 如果精心构造溢出数据,可能改变程序执行 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 ,允许攻击者执行任意指令 影响语言: C/C++ 典型案例:count.cgi缓冲区溢出漏洞CGI – 外部命令CGI – 外部命令尽可能不调用外部命令 如果不得不调用,必须检查传递给外部命令的参数是否合法。只允许那些完全符合要求的参数通过。一些常见调用外部命令的函数 表1. C和Perl中可以调用shell的函数. Perl 函数 C 函数 system('...') system() open('| ...') popen() exec('...') eval('...') CGI – 特殊字符CGI – 特殊字符只让我们需要的字符通过检测 不是剔除非法字符而是检查是否在合法字符集内 不止是在调用外部命令时,在任何时候你都应该检查你页面的输入是否合法,当然这种检测没有一定的规律,要视你的CGI功能而定。要特别注意以下这些字符: ; < > * | ` & $ ! # ( ) [ ] : { } ' “ ../ ..\ NULLCGI – 特殊字符CGI – 特殊字符一个非常著名的例子:phf 这个CGI程序在以前NCSA和APACHE WEB服务器中是默认安装的。phf程序通过popen()函数来传递数据到程序中剔除了一些已知的不良的字符,但是,它遗漏了其中一个字符:换行符(\n),当在远程主机使用SHELL解释程序解析的时候,换行符扮演了命令分隔符,把分行符前字符串作为一个命令,而把换行符后面的字符串作为一个新命令,通过请求下面的ULR,就可能在主机上执行"cat /etc/passwd"的命令: /cgi-bin/phf?Qalias=hell%0acat%20/etc/passwd%0aCGI - 隐藏变量CGI - 隐藏变量 尽量不要使用隐藏变量传递数据 如果必须使用,应当在每个CGI中对所有的隐藏变量都进行检查。 在很多CGI程序中,人们喜欢用隐藏变量来传递信息,这容易给一些不怀好意的人以可乘之机,因为隐藏变量可以通过查看html源码看到。因此,在用隐藏变量来传递信息时,一定要小心,审核你的程序流程,看看是否会带来问题。 CGI - 隐藏变量CGI - 隐藏变量隐藏变量 隐藏变量的值是用户可修改的 程序员可能忽视对隐藏变量的检查 在多个连续页面中传递隐藏变量时,中间页面可能忽略了对隐藏变量的检查 一个隐藏变量B a1.asp -> a2.asp -> a3.asp a2.asp可能会忘记对其进行检查CGI–Cookie的使用CGI–Cookie的使用很多人喜欢使用Cookie在客户端存储信息。 Cookie的特点 明文保存 用户可控制 原则 尽量不要使用Cookie保存敏感信息, 设置Cookie的有效时间CGI – 拒绝服务攻击CGI – 拒绝服务攻击拒绝服务攻击是使应用程序或操作系统停止为合法访问提供服务的一种攻击。 对于CGI程序的拒绝服务来说,通常是指利用CGI程序实现上的弱点来大量占用系统资源(CPU或内存) 例如,在数据库搜索时,使用简单的select语句对整个数据库进行搜索。当数据库比较庞大时,会占用较多的系统资源。攻击者如果发送大量搜索查询请求,系统可能瘫痪 原则:处理请求时,使响应时间和占用资源尽可能少。 CGI – 错误处理机制CGI – 错误处理机制如果没有好的错误处理机制,你的CGI程序会在出错时泄露一些有用的信息。 泄漏CGI程序所在物理路径 泄漏数据库结构信息 泄漏一些其他的有用信息,例如用户有效性 当输入错误用户名时,返回”该用户不存在”信息 原则:尽量不要泄漏任何不必要的信息 只要用户名和口令有一样不正确,都显示同样的错误信息。攻击者无法识别有效用户名。 PHP安全编程PHP安全编程PHP是一种非常容易上手的脚本语言,在web上应用十分广泛。 PHP的开发者已经考虑到了很多安全问题,但是在默认安装下,由于程序员的不小心,还是会给服务器造成很大的危险。 我们将以攻击者、脚本程序员、网站管理员三种角度讨论PHP的安全。PHP变量滥用PHP变量滥用PHP默认register_globals = On,对于GET, POST, Cookie, Environment, Session的变量可以直接注册成全局变量。它们的注册顺序是variables_order = “EGPCS”,同名变量右边的覆盖左边,所以变量的滥用极易造成程序的混乱。而且脚本程序员往往没有对变量初始化的习惯,像如下的程序片断就极易受到攻击: 攻击者只需用如下的请求就能绕过检查: http://victim/test_1.php?auth=1 PHP变量滥用PHP变量滥用这虽然是一个很低级的错误,但一些著名的程序也有犯过这种错误,比如phpnuke的远程文件拷贝漏洞:http://www.securityfocus.com/bid/3361 PHP-4.1.0发布的时候建议关闭register_globals ,并提供了7个特殊的数组变量来使用各种变量。对于从GET, POST, COOKIE等来的变量并不会直接注册成变量,必需通过数组变量来存取。这使得程序使用PHP自身初始化的默认值,一般为0,避免了攻击者控制判断变量。 解决方法 程序员: 对作为判断的变量在程序最开始初始化一个值。永远不要相信客户提交的数据。 管理员: 在配置文件设置register_globals = Off。PHP文件打开PHP文件打开 极易受攻击的代码片断: \n"); exit; } else { echo $str; } ?> 由于攻击者可以指定任意的$filename,攻击者用如下的请求就可以看到/etc/passwd: http://victim/test_2.php?filename=../etc/passwd 如下请求可以读php文件本身: http://victim/test_2.php?filename=../正确目录/tes
本文档为【软件开发安全之道(全)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_385901
暂无简介~
格式:ppt
大小:24MB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2011-05-24
浏览量:50