![北邮软件安全期末复习整理_第1页](http://file4.renrendoc.com/view/f20ff661d14c9ae34c9abb413078e18a/f20ff661d14c9ae34c9abb413078e18a1.gif)
![北邮软件安全期末复习整理_第2页](http://file4.renrendoc.com/view/f20ff661d14c9ae34c9abb413078e18a/f20ff661d14c9ae34c9abb413078e18a2.gif)
![北邮软件安全期末复习整理_第3页](http://file4.renrendoc.com/view/f20ff661d14c9ae34c9abb413078e18a/f20ff661d14c9ae34c9abb413078e18a3.gif)
![北邮软件安全期末复习整理_第4页](http://file4.renrendoc.com/view/f20ff661d14c9ae34c9abb413078e18a/f20ff661d14c9ae34c9abb413078e18a4.gif)
![北邮软件安全期末复习整理_第5页](http://file4.renrendoc.com/view/f20ff661d14c9ae34c9abb413078e18a/f20ff661d14c9ae34c9abb413078e18a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——北邮软件安全期末复习整理软件安全
2023.6
1.1概述
1.1.1信息安全的六性***
①保密性(C,confidentiality):信息不泄漏给非授权的用户、实体或者过程的特性,。②完整性(I,integrity):数据未经授权不能进行改变的特性,即信息在存储或传输过程中保持不被修改、不被破坏和丢失的特性。
③可用性(A,availability):可被授权实体访问并按需求使用的特性,即当需要时应能存取所需的信息。④真实性:内容的真实性。
⑤可核查性:对信息的传播及内容具有控制能力,访问控制即属于可控性。⑥可靠性:系统可靠性。
信息安全根源:繁杂性、开放性(系统、标准、业务)信息安全特性:攻防特性、相对性、配角特性、动态性
1.1.2软件安全要挟分类(GaryMcgraw)
①输入验证与表示:输入信任→特别字符、编码和数字表示②API误用:调用者没有理解约定的目的
③安全特征:主要指认证,访问控制,机密性,密码,权限管理等方面的内容④时间与状态:死锁、会话固定、竞争条件、担忧全临时文件⑤错误处理:没有完全处理错误⑥代码质量⑦封装⑧环境
OWASP的WEB安全风险分类:认证、授权、客户端攻击、命令执行、信息泄露、规律攻击
1.1.3软件安全加固模型***
1.2缓冲区溢出原理
1.2.1缓冲区溢出原理***
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上。由于缓冲区溢出,相邻的内存地址空间被覆盖,造成软件出错或崩溃。假使没有采取限制措施,可以使用精心设计的输入数据使缓冲区溢出,从而导致安全问题。
1.2.2缓冲区溢出预防
静态保护:不执行代码,通过静态分析来发现代码中可能存在的漏洞.静态的保护技术包括编译时参与限制条件,返回地址保护,二进制改写技术,基于源码的代码审计等.
动态保护:通过执行代码分析程序的特性,测试是否存在漏洞,或者是保护主机上运行的程序来防止来自外部的缓冲区溢出攻击.
1.2.3系统栈的工作原理***
内存的栈区实际上指的就是系统栈。系统栈由系统自动维护,它用于实现高级语言中函数的调用。对于类似C语言这样的高级语言,系统栈的PUSH/POP等堆栈平衡细节是透明的。
每一个函数独占自己的栈帧空间。当前正在运行的函数的栈帧总是在栈顶。Win32系统提供两个特别的寄放器用于标识位于系统栈顶端的栈帧。
(1)ESP:栈指针寄放器(extendedstackpointer),其内存放着一个指针,该指针永远指向系统栈最上面的一个栈帧的栈顶。
(2)EBP:基址指针寄放器(extendedbasepointer),其内存放着一个指针,该指针永远指向系统栈最上面的一个栈帧的底部。
在函数栈帧中,一般包含以下几类重要信息。(1)局部变量:为函数局部变量开拓的内存空间。
(2)栈帧状态值:保存前栈帧的顶部和底部(实际上只保存前栈帧的底部,前栈帧的顶部可以通过堆栈平衡计算得到),用于在本帧被弹出后恢复出上一个栈帧。
(3)函数返回地址:保存当前函数调用前的“断点〞信息,也就是函数调用前的指令位置,以便在函数返回时能够恢复到函数被调用前的代码区中继续执行指令。
函数调用大致包括以下几个步骤。
(1)参数入栈:将参数从右向左一次压入系统栈中。
(2)返回地址入栈:将当前代码区调用指令的下一跳指令地址压入栈中,供函数返回时继续执行。
(3)代码区跳转:处理器从当前代码区跳转到被调用函数的入口处。
(4)栈帧调整:保存当前栈帧的状态值,以备后面恢复本栈帧时使用(EBP入栈);将当前栈帧切换到新栈帧(将ESP值装入EBP,更新栈帧底部);给新栈帧分派空间(把ESP减去所需空间的大小,抬高栈帧);
1.2.4基于邻接变量修改的缓冲区溢出的原理
略
1.3缓冲区溢出利用
1.3.1什么是shellcode
shellcode:缓冲区溢出攻击中植入进程的代码。
1.3.2如何定位shellcode
①栈帧移位与jmpesp②获取“跳板〞的地址③使用“跳板〞定位的exploit
1.3.3缓冲区的组织
①缓冲区的组成:填充物、吞噬返回地址的数据、shellcode②抬高栈顶保护shellcode③函数返回地址移位
1.3.4shellcode编码
首先,所有的字符串函数都会对NULL字节进行限制。
其次,有些函数还会要求shellcode必需为可见字符的ASCII或Unicode的值。最终,在进行网络攻击时,基于特征的系统往往会对常见的shellcode进行拦截
1.4漏洞挖掘方法
1.4.1什么是漏洞挖掘技术
1.4.2简单的fuzzing过程
Fuzz的主要目的是〞崩溃crash〞,〞中断break〞,〞销毁destroy〞。
Fuzz技术的思想就是利用“暴力〞来实现对目标程序的自动化测试,然后监视检查其最终的结果,假使符合某种状况就认为程序可能存在某种漏洞或者问题。
1.4.3文件类型漏洞挖掘
攻击者往往会在约定的数据格式进行稍许修改,观测软件在解析这种“畸形文件〞时是否会发生错误,缓冲区是否会溢出等。
(1)以一个正常的文件模板作为基础,依照一定规则产生一批畸形文件。(2)将畸形文件逐一送入软件进行解析,并监视软件是否会抛出异常。(3)记录软件产生的错误信息,如寄放器状态、栈状态等。
(4)用日志或其他UI形式向测试人员展示异常信息,以进一步鉴定这些错误是否能被利用。
Blindfuzz:即寻常所说的“盲测〞,就是在随机位置插入随机的数据以生成畸形文件。然而现代软件往往使用十分繁杂的私有数据结构。产生测试用例的策略缺少针对性,生成大量无效测试用例,难以发现繁杂解析器深层规律的漏洞等。
SmartFuzz:面向规律(测试前首先明确要测试的目标是解析文件的程序规律,而不是文件本身)、面向数据类型(面向数据类型测试是指能够识别不同的数据类型,并
且能够针对目标数据的类型依照不同规则来生成畸形数据)、基于样本(要求在测试前构造一个能够包含几乎所有数据结构的文件来作为样本)。
1.4.4FTP漏洞挖掘
它的基本原理就是通过对FTP协议中的命令及命令参数进行脏数据替换,构造畸形的FTP命令并发送给被测试FTP服务程序。
2.1线程/进程安全
2.1.1线程、进程机制***进程:
程序在计算机上的一次执行活动。运行一个程序,相当于启动了一个进程。进程是操作系统进行资源分派的单位,通俗地讲,是一个正在执行的程序。进程的安全主要表达在线程安全,同时涉及进程的应用级别、其对系统的要挟性等。线程:
进程中的一个实体,是被系统独立调度和分派的基本单位,它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创立和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程的安全性主要来源于其运行的并发性和对资源的共享性。线程有创立、可运行、运行中、阻塞、死亡五种状态。
2.1.2线程同步安全
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。
2.1.3线程协作安全
多个线程合作完成一件事情的几个步骤,此时线程之间实现了协作。由于线程随时都有可能抢占CPU,可能在前面一个步骤没有完成时,后面的步骤线程就已经运行,该安全隐患造成系统得不到正确结果。
解决:在运行一个线程时,命令其他线程等待该线程运行完毕,才能抢占CPU进行运行。
2.1.4线程死锁问题***
死锁:是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种相互等待的现象。
条件:互斥、请求等待、不抢占、循环等待解决:可以撤消陷于死锁的全部线程。
可以逐个撤消陷于死锁的进程,直到死锁不存在。
从陷于死锁的线程中逐个强迫放弃所占用的资源,直至死锁消失。
2.1.5线程控制安全
线程控制主要是对线程生命周期的一些操作,如暂停、继续、消亡等。线程生命周期中的安全问题主要表达在:
线程暂停或者终止时,可能对某些资源的锁并没有释放,它所保持的任何资源都会保持锁定状态;
线程暂停之后,我们无法预计它什么时候会继续(一般和用户操作有关),假使对某个资源的锁长期被保持,其他线程在任何时候都无法再次访问该资源,极有可能造成死锁。解决:
1:当需要暂停时,干脆让线程的run()方法终止运行以释放资源(实际上就是让该线程永久终止);继续时,新开拓一个线程继续工作。怎样让run()方法终止呢?一般可用一个标志告诉线程什么时候通过退出自己的run()方法来中止自己的执行。
2:将线程暂停或继续,不使用suspend()和resume(),可在Thread类中置入一个标志,指出线程应当活动还是挂起。若标志指出线程应当挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。
3:不推荐使用stop()来终止阻塞的线程,而应换用由Thread提供的interrupt()方法,以便中止并退出堵塞的代码
2.1.6隐蔽信道问题、客体重用问题
2.2输入输出安全
2.2.1典型的输入安全问题及预防***
①数字输入安全:确定数字格式、负数验证、判断数值溢出
②字符串输入安全:正则表达式、明确匹配数据的开始和终止、在输入中拒绝特别字符
③环境变量输入安全:环境变量在同一个交互环境下只有一个实例。不同的交互环境有不同的实例,互不干扰。其功能是用于影响该环境下进程的行为。环境变量的内容、存储格式给攻击者以机遇。
解决:限制环境变量的使用权限、可适当破坏环境变量在shell之间的共享、用户定义的环境变量,需要进行严格的检查。
④文件名安全:不让用户自己来输入文件名、限制文件名字符种类、不允许命名可能和物理设备冲突的文件名。
2.2.2数据库输入安全
①恶意输入:攻击者通过对数据库的恶意输入,可以将信息注入正在运行的流程,获取敏感数据,甚至危害进程的运行状态。攻击者通过这种技术,可以完成以下攻击活动:改变一条SQL语句的具体条件、添加并且运行额外的SQL的语句、机要调用函数和存储过程。
②账户和口令:解决问题的方法主要有:
不到万不得已,不使用管理员账户;使用最小特权账户,不给以额外的权限;
不允许使用空口令连接数据库,防止管理员疏忽而创立了空口令;
数据库连接字符串存放在配置文件中,最好可以加密,而不是代码中以明文显示;发生错误时,仅给客户端通知信息,不给具体原因,防止攻击者利用这些通知信息进行数据库猜测。
2.2.3什么是国际化安全
国际化的主要目的,是调整软件,使之能适用于不同的语言及地区。三个部分:资源文件、读取工具、应用程序。
目标程序所支持的字符集和源数据属于的字符集可能不一致。此种状况下,可能造成系统显示出错。
1:当目标程序所支持的字符集和源数据属于的字符集完全不兼容时,数据无法显示(或者以乱码形式显示)。
2:当目标程序所支持的字符集是源数据属于的字符集的子集时,信息会部分丢失。
2.3面向对象编程安全
面向对象编程概念和基本特征***
面向对象强调人类在日常的思维规律中经常采用的思维方法与原则,其中的重要概念如抽象、分类、继承、聚合、多态等,都和我们的生活息息相关,这也成为面向对象思想流行的原因。
1:对象(Object)。对象构成客观世界的一个个实体,从最简单的字符串到繁杂的软件系统等,均可看作对象,广义上,对象不仅能表示具体的实体,还能表示抽象的规则或事件等。
对象具有两个方面的特点:能够保存一定的状态,由“属性〞来表达;能执行一定的动作,“方法〞来表达。
2:类(class)。类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所应具有的属性和方法。多个对象的抽象成为类,类的具体化就是对象,寻常的说法,创立一个对象实际上就是将类实例化。
3:消息和方法。消息是指对象之间进行通信的数据或者数据结构。在通信的过程中,一个消息发送给某个对象,实际上相当于调用另一个对象的方法,消息可以是这个方法的参数。
4:继承(Inheritance)。继承性是指子类自动共享父类属性和方法的机制。继承的思想来源于:在定义和实现一个新的类时,可以将一个已经存在的类作为父类,新类的定义在这个父类的基础之上进行,把这个父类中的属性和方法作为自己的属性和方法,并可参与若干新的属性和方法。继承性是面向对象程序设计语言不同于其它语言的重要特点,是其他语言所没有的。
5:多态(Polymorphism)。多态,是指不同类型对象,收到同一消息(调用同一个函数等),根据其类型,可以产生不同的结果。在面向对象语言中,一般具有两种形式的
多态:静态多态,一般指函数重载;动态多态,一般利用继承和函数覆盖。
有了多态性,不同对象可以以适合自身的方式,去响应一致的消息,加强了软件的可扩展性和和重用性。
6:封装(Encapsulation)。封装,保证了软件的每个组成部分具有优良的模块性,通过定义外部接口使模块之间的耦合性达到最小。在面向对象的语言中,对象是封装的最基本单位,增加了程序结构的明了性,防止了程序相互依靠性而带来的变动影响。
面向对象编程的异常捕获机制***
在面向对象的语言中,可以有两种方法进行异常的捕获:就地捕获异常;将异常向前端(调用方)抛出。
2.3.1对象内存分派与释放***
分派:对象分派内存,一般叫做对象的实例化。声明不同于创立,声明对象,只分派了存储地址的存储器位置,还没有为其分派内存。给对象分派内存也称为实例化对象。C++中,和对象释放内存相关的,一般是析构函数。析构函数的作用是释放对象申请的资源。
释放:析构函数寻常由系统自动调用,在以下几种状况下系统会调用析构函数:全局对象在进程终止时;堆中对象进行delete/free操作时;栈中对象生命周期终止时:包括离开作用域、函数正常正常跳出或者抛出异常等。
Java去除了析构函数,取而代之的是:finalize()方法。当Java虚拟机已确定尚未终止的任何线程无法再通过任何方法访问此对象时,由对象的垃圾回收器调用此方法。对于任何给定对象,Java虚拟机最多只调用一次finalize()方法。
2.3.2静态成员安全***
静态成员变量存储在全局数据区,为该类的所有对象共享,不属于任何对象的存储空间,规律上所有对象都共享这一存储单元,对静态成员变量的任何的任何操作影响这一存储单元的所有对象。
静态成员附属于一个类,不是某对象的一部分,非静态成员可以直接访问类中静态的成员,但是静态成员不可以访问非静态成员。
静态成员的优点是:消除传统程序设计方法中的全局变量,为真正实现封装性提供了必要手段。
由于静态成员的共享性,就必需考虑其数据安全。
1:静态成员的初始化操作先于对象的实例化而进行,所以在它们的初始化中不要启动线程,以免造成数据访问的问题。同时静态成员的初始化操作中也不应当有依靠关系;
2:不用静态变量保存某个对象的状态,而应当保存所有对象应当共有的状态;
3:不用对象来访问静态变量,而用类名来访问静态变量。
2.3.3异常/错误的基本机制
编译错误、运行错误、规律错误
当系统底层出现异常,实际上是将异常用一个对象包装起来,传给调用方(客户端),俗称抛出(throw)。抛出给函数的调用者;假使调用者具有对异常处理的代码,则将异常进行处理;否则将异常继续向前抛出;假使直到用户端还没有对异常进行处理,异常将会在标准输出(如控制台)上打印。
代码中出现异常,在该作用域内,出现异常代码后面的其他代码将不会执行。
2.3.4异常捕获中的安全
当一个模块中可能出现异常时,一般状况下,可以就地捕获异常,过程如下:1:用try块将可能出现异常的代码包起来;2:用catch块来捕获异常并处理异常;
3:假使有一些工作是不管异常是否出现都要执行的,则将相应的代码用finally块将其包起来。
由于try块后面可以接多个catch块,因此,可以用某一个catch用于捕获某种异常。当try中出现异常,程序将在catch中寻觅是否有相应的异常类型的处理代码,假使有,就处理,假使没有,继续向下找。
1:将大量代码放入try块,虽然可以保证安全性,但是系统开销较大,程序员务必在系统开销和安全性之间找到一个平衡。
2:以上代码的catch块中,是简单的打印提醒信息,实际的系统中,你可能要根据实际需求来使用不同的异常处理方法。
2.3.5异常处理中的安全
finally最大的特点就是:在try块内即使跳出了代码块,甚至跳出函数,finally内的代码依旧能够运行。
异常寻常有两种处理方法:就地处理和向客户端传递。
1:就地处理方法可以很便利地定义提醒信息,对于一些比较简单的异常处理,可以选用这种方法。
2:向客户端传递的方法,其优势在于可以充分发挥客户端的能力,假使异常的处理依靠于客户端,或者某些处理过程在本地无法完成,就必需向客户端传递。举一个例子,如数据库连接代码,可能出现异常,但是异常的处理最好传递给客户端,由于客户端在调用这块代码的同时,可能要根据实际状况,获取环境参数,进行比较繁杂的处理。这样做的好处是:在客户端可以进行更为丰富的异常处理,不仅增加了可扩展性,也可以做到更加安全的代码保障。所以,一般状况下,模块中的异常,假使确定可以就地处理
则可,否则就应当向客户端抛出。不过,异常不断向客户端抛出,会增加系统开销。
2.4WEB安全编程
2.4.1WEB页面数据交换的四种方法***
在HTTP协议中一共有4种方法来完成这件事情:URL传值;表单传值;Cookie方法;session方法。
2.4.2避免URL操作攻击
1:为了避免非登陆用户进行访问,对于每一个只有登录成功才能访问的页面,应当进行session的检查(session检查的内容在下一个章节提到);
2:为限制用户访问未被授权的资源,可在查询时将登录用户的用户名也考虑进去。
2.4.3页面状态值安全
URL传值:简单性和平台支持的多样性
1:传输的数据只能是字符串,对数据类型具有一定限制;2:传输数据的值会在浏览器地址栏里面被看到。
表单传值:1:和URL方法类似,该方法传输的数据,也只能是字符串,对数据类型具有一定限制;
2:传输数据的值虽然可以保证在浏览器地址栏内不被看到,但是在客户端源代码里面也会被看到。
Cookie方法:Cookie是一个小的文本数据,由服务器端生成,发送给客户端浏览器,客户端浏览器假使设置为启用cookie,则会将这个小文本数据保存到其某个目录下的文本文件内。在客户端的浏览器上,我们看不到任何的和传递的值相关的信息,说明在客户端浏览器中,Cookie中的数据是安全的。
由于Cookie是以文件形式保存在客户端的,客户端存储的Cookie文件就可能敌方获知。
利用跨站脚本技术,将信息发给目标服务器;为了隐蔽跨站脚本的URL,甚至可以结合Ajax(异步Javascript和XML技术)在后台窃取Cookie;通过某些软件,窃取硬盘下的Cookie;利用客户端脚本盗取Cookie。
1:Cookie的值能够持久化,即使客户端机器关闭,下次开启还是可以得到里面的值。
2:Cookie可以帮助服务器端保存多个状态信息,但是不用服务器端专门分派存储资源,减轻了服务器端的负担。
3:Cookie可以持久保持一些和客户相关的信息。解决方法:替代、及时删除、禁用
Session方法:本质上讲,会话(session)的含义是指某个用户在网站上的有始有终的一系列动作的集合。session中的数据可以被同一个客户在网站的一次会话过程共享。
session机制最大的担忧全因素是sessionId可以被攻击者截获,假使攻击者通过一些手段知道了sessionId,由于sessionId是客户端寻觅服务器端session对象的唯一标识,攻击者就有可能根据sesionId来访问服务器端的session对象,得知session中的内容,从而实施攻击。
客户在关闭浏览器时,一般不会通知服务器。由于关闭浏览器不会导致session被删除,因此,客户端关闭之后,session还未失效的状况下,就给了攻击者以机遇来获取session中的内容。
为了防止以上由于sessionId泄露而造成的安全问题,可以采用如下方法:1:在服务器端,可以在客户端登陆系统时,尽量不要使用单一的sessionId对用户登陆进行验证。可以通过一定的手段,不时地变更用户的sessionId;
2:在客户端,应当在浏览器关闭时删除服务器端的session,也就是说在关闭时必需通知服务器端。
2.4.4WEB跨站脚本攻击***
跨站脚本,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码,一般需要以下几个条件:客户端访问的网站是一个有漏洞的网站,但是他没有意识到;在这个网站中通过一些手段放入一段可以执行的代码,吸引客户执行(通过鼠标点击等);客户点击后,代码执行,可以达到攻击目的。
2.4.5XSS攻击及防范***
XSS属于被动式的攻击。
XSS可以诱使Web站点执行本来不属于它的代码,而这些行代码由攻击者提供、为用户浏览器加载,攻击者利用这些代码执行来获取信息。XSS涉及到三方,即攻击者、客户端与客户端访问的网站。XSS的攻击目标是盗取客户端的敏感信息。从本质上讲,XSS漏洞终究原因是由于网站的Web应用对用户提交请求参数未做充分的检查过滤。
XSS跨站脚本的触发条件有以下四种:1)完整无错的脚本标记2)访问文件的标记属性3)触发事件4)请求失败
利用XSS跨站脚本漏洞可以实施这些攻击1)获取Cookie2)Session欺骗3)恶意链接4)其它利用
XSS攻击的主要危害包括:盗取用户的各类敏感信息,如账号密码等;读取、篡改、添加、删除企业敏感数据;读取企业重要的具有商业价值的资料;控制受害者机器向其它网站发起攻击防范:
网站开发者:对于任意的输入数据应当进行验证,以有效检测攻击(易被绕过);对于任意的输出数据,要进行进行适当的编码,防止任何已成功注入的脚本在浏览器端运行。
网站用户:开启一些Email或附件、浏览论坛帖子时,做的操作时一定要特别提防,否则有可能导致恶意脚本执行;加强安全意识,只信任值得信任的站点或内容,不要信任别的网站发到自己信任的网站中的内容;使用浏览器中的一些配置。
2.4.6SQL注入攻击原理与危害***SQL注入攻击的主要危害包括:
①非法读取、篡改、添加、删除数据库中的数据;②盗取用户的各类敏感信息,获取利益;③通过修改数据库来修改网页上的内容;④私自添加或删除账号;⑤注入木马。
2.4.7如何实现SQL注入攻击***
2.4.8SQL注入攻击防范***
1:将输入中的单引号变成双引号。
2:使用存储过程。
3:认真对表单输入进行校验,从查询变量中滤去尽可能多的可疑字符。
4:在程序中,组织SQL语句时,应当尽量将用户输入的字符串以参数的形式来进行包装,而不是直接嵌入SQL语言。
5:严格区分数据库访问权限。6:多层架构下的防治策略。
7:对于数据库敏感的、重要的数据,不要以明文显示,要进行加密。关于加密的方法,读者可以参考后面的章节。
8:对数据库查询中的出错信息进行屏蔽,尽量减少攻击者根据数据库的查询出错信息来猜测数据库特征的可能。
9:由于SQL注入有时伴随着猜测,因此,假使发现一个IP不断进行登录或者短时间内不断进行查询,可以自动拒绝他的登陆;也可以建立攻击者IP地址备案机制,对曾经的攻击者IP进行备案,发现此IP,直接拒绝。
10:可以使用专业的漏洞扫描工具来寻觅可能被攻击的漏洞。
11:一个传统的防止SQL注入攻击的方法是针对输入进行验证,或只接受白名单中的安全字符,或鉴别和排除黑名单中的恶意字符。
2.4安全特征编程
2.4.1安全认证
1:用户名/口令:用户名/口令,是最简单,也是最常用的用户认证方法。大量的系统中都是采用这种方法。
用户名可以由每个用户自己设定,也可由系统给出;
用户的口令(或者密码)由用户自己设定的,理论上只有用户自己才具有读取和修改权;
对于某一用户名,只要能够正确输入口令,计算机就认为持该用户名的操就是合法用户。
安全性依靠于口令,大量用户为了防止忘掉口令,经常采用很简单的口令(如用自己的生日)或者将口令简单存放(如简单地保存在邮箱或者自己机器的硬盘上),造成口令简单猜测和泄露;
口令是静态的数据,而大量的口令验证是远程的,在验证过程中要在计算机内存中和网络中传输,简单被攻击者通过各种手段(如木马程序或网络监听程序)截获。
口令保存在数据库中,可能被管理员得知;等等。
2:智能卡认证:智能卡是一种内置集成电路的芯片,由专门的厂商通过专门的设备生产,芯片中存有与用户身份相关的数据。是不可复制的硬件,由合法用户随身携带;假使用户想要进行认证,必需将智能卡插入专用的读卡器,读取其中的信息,再通过一定的手段,以验证用户的身份。
不过,和前面一种方法类似,由于存在于智能卡中的数据是静态的,在验证过程中也可能要在计算机内存中和网络中传输,攻击者也可以通过各种手段(如木马程序或网络监听程序)截获。因此还是存在一定的安全隐患。
3:动态口令技术:动态口令技术采用专门硬件,每次根据一定的密码算法生成不同的密码,显示出来告诉用户,每个密码只能使用一次。用户使用时,将显示的当前密码提交给服务器,当密码传输到服务器端,认证服务器采用一致的算法计算当前的有效密码,判断两个密码是否吻合,即可实现身份认证。
由于每次使用的密码动态产生,用户每次使用的密码不一致,即使黑客通过一定手段截获了一次密码,也无法利用这个密码来仿冒合法用户的身份。
不过,假使客户端与服务器端的密码不能保持良好的同步,就可能发生合法用户无法登录的问题。因此,此方法对技术要求较高。
单点登录:各个子系统账号同步、统一存储、用户映射;Session机制、Cookie机制
多因子口令认证:恶意添加、恶意查询:验证码技术
2.4.2口令安全
1.执行统一的口令策略:2.安全的存储口令:3.需要一个安全的口令传输:4.允许用户改变其口令:
5.当用户信息改变时,使用单独的通道通知:6.执行口令重置策略:7.一致化重置口令的过程;8.保护口令重置信息;9.不要使口令过期:10.使用强口令:11.替换默认口令;
12.其他:不要相信网络标识符、使用SSL认证信息、一个帐号对应一个人而不是一个组、提防给出认证和注册的错误信息、处理每一个认证请求的时间一致、提防给出认证和注册的错误信息、处理每一个认证请求的时间一致、对认证尝试的频率进行限制
2.4.3访问控制
权限控制模块和业务规律模块分开,可以单独开发;可以很便利地对权限控制模块进行修改,具有良好的可维护性
代理模式:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。虽然代理模式可能使得请求的处理速度会变慢,但是能够将代理模块的功能从整个系统中分开出来。
代理类和工作类实现同样的接口;客户端和代理类打交道;代理类假使通过验证,则将请求发给工作类;客户和代理类打交道,其感觉就好像在调用工作类一样,也就是说,代理类实际上对客户透明。
AOP:通过预编译方式和运行期动态代理,给程序动态统一添加功能的一种技术,但是不需要不修改程序源代码。
权限控制管理:矩阵模型、任务模型、角色模型、综合模型
控制安全:集中访问控制、对每个用户交互都要检测访问控制状态、使用细粒度的访问控制、对关键操作需要再次认证
2.4.4密码安全
使用可信的密码算法、好的密钥应当满足以下特性:
1:不可怜况下生成的密钥应是独立的、互不相关的,即每次生成的密钥和其他密钥无关。
2:密钥值应是不可预计的。
3:密钥值在某个范围内实现均匀分布。
随机数也应有三个特性:均匀分布;数值不可预计;互不相关。使用安全的随机数生成器、创立攻击者不能进行猜测的随机数
2.4.5隐私保护
①最小化无用的私密信息的存活时间②尽量少的共享私密信息③不要暴露隐私信息
④在用户之间建立比较强的边界
3.1软件版权保护
3.1.1软件认证方式***
序列号**、KeyFile、网络验证、CD-check、只运行一个实例、
软件验证序列号的合法性过程就是验证用户名和序列号之间的换算关系,即数学映射关系是否正确的过程。映射关系越繁杂,越不简单破解。
3.1.2软件认证破解
攻击序列号保护:通过跟踪输入注册码之后的判断,从而找出注册码;跟踪程序启动时对注册码的判断。
拆解KeyFile保护网络验证破解:分析发送的数据包、l分析接受的数据包、解除网络验证
拆解光盘保护:为了能有效地防止光盘盗版,从技术来说要解决三个问题:(1)要防止光盘之间的拷贝;(2)要防止破解和跟踪加密光盘;(3)要防止光盘与硬盘的拷贝。目前防止光盘盗版技术有:(1)特征码技术(2)非正常导入区(3)非正常扇区(4)修改文档结构(5)使用光盘保护软件
3.1.3软件限制机制
窗口限制、时间限制、功能菜单限制
3.1.4软件限制机制破解
窗口:去除警告窗口常用3种方法:(1)修改程序资源;(2)静态分析;(3)动态分析。
时间限制:静态分析、API断点、监视法
3.1.5PE文件结构及软件水印***
PE文件由五部分组成:1.DOSMZHeader2.DOSStub3.PEHeader4.SectionTable
5.Sections:Sections是存放软件信息的地方。所有的代码、初始化数据、未初始
化数据、资源、引入函数、引出函数、调试信息等各类信息,最终都按各自的特点存放在各个不同的节中。
软件水印:利用PE文件的冗余空间隐蔽信息:PE文件的冗余可分为两类:一类是PE文件本身存在的;另一类是对PE文件进行扩展,人为构造的。将信息嵌入到PE文件冗余空间中实现信息隐蔽,不会影响PE文件的正常执行。
通过调整PE文件结构隐蔽信息:软件源代码经编译后产生的PE文件,其部分结构存在一些特点,例如:资源节具有类似树型的多层结构,定位节完成定位后成为无用节可以覆盖等。基于PE文件的这些结构特点,用重构的结构表示隐蔽信息。这种信息隐蔽思想不是在PE文件中添加冗余信息,因此和前一种思想相比,具有更好的隐蔽性。
PE文件信息隐蔽的嵌入过程如下:(1)选择作为载体的PE文件。(2)检验载体PE文件的有效性。(3)对所选有效PE文件的属性进行分析。
(4)根据所选PE属性和实际需求选择适合的嵌入算法嵌入信息。
3.1.6软件完整性保护
完整性检查又包括磁盘文件检查和内存映像的检查。完整性检查的实现原理是用散列函数计算文件的散列值,并将该值放在某处,以后文件每次运行时,重新计算文件的散列值,并与原散列值比较,以判断文件是否被修改。
内存映像的检查:
(1)从内存映像得到PE相关数据,入代码区块的RVA值和内存大小等。(2)根据得到的代码区块的RVA值和内存大小,计算其内存数据的散列值。(3)读取自身文件从前存储的散列值。(4)比较两个散列值。
3.2软件加壳脱壳
3.2.1软件反汇编
目前主要的两类反汇编算法是线性扫描算法(Linearsweep)和递归行进算法(Recursivetraversal)。
线性扫描:线性扫描是一种十分基础的反汇编算法。线性扫描算法这种方法的技术含量并不高,反汇编器只是依次逐个地将整个模块中的每一条指令都反汇编成汇编指令。并没有对反汇编的内容进行任何判断,而是将遇到的机器码都作为代码来处理。因此无法正确地将代码和数据区分开,数据也将被作为代码来进行解码,从而导致反汇编出现错误。而这种错误将影响下一条指令正确识别,会使得整个反汇编都错误。
递归行进算法:递归行进算法依照代码可能的执行顺序来反汇编程序,对每条可能的路径都进行扫描。当解码出分支指令后,反汇编器就把这个地址记录下来,并分别反汇编各个分支中的指令。采用这种算法可以避免将代码中的数据作为指令来解码,比较灵活。
3.2.2壳的加载过程***
(1)保存入口参数
(2)获取壳自己所需要使用的API地址(3)解密原程序的各个区块的数据(4)IAT的初始化(5)重定位项的处理(6)HOOK—API
(7)跳转到程序原入口点(OEP)
3.2.3加壳工具简介
3:确定系统可能面临的要挟,将要挟进行分类,可以画出要挟树;4:选择应付要挟或者缓和要挟的方法;5:确定最终解决这些要挟的技术
测试过程:1:基于前面设计阶段制定的要挟模型,设计测试计划。
2:将安全测试的最小组件单位进行划分,并确定组件的输入格式。
3:根据各个接口可能遇到的要挟,或者系统的潜在漏洞,对接口进行分级。4:确定输入数据,设计测试用例。5:攻击应用程序,查看其效果。6:总结测试结果,提出解决方案。
5.2.3渗透测试
定义:渗透测试(PenetrationTest)是指安全工程师尽可能完整地模拟黑客使用的漏洞发现技术和攻击手段,对目标网络/系统/主机/应用的安全性作深入的探测,发现系统最脆弱的环节的过程。渗透测试能够直观的让管理人员知道自己网络所面临的问题。
意义:协助用户发现组织中的安全最短板,协助企业有效的了解目前降低风险的初始任务;一份文档齐全有效的渗透测试报告有助于组织IT管理者以案例说明目前安全现状,从而加强信息安全的认知程度,甚至提高组织在安全方面的预算;
信息安全是一个整体工程,渗透测试有助于组织中的所有成员意识到自己的岗位同样可能提高或降低风险,有助于内部安全的提升;
渗透测试并不能保证发现目标网络中的“所有〞弱点,因此我们不宜片面强调它的重要性。
阶段:
实施:攻击路径(内网、外网、网段间渗透)、实施流程(制定方案、信息收集分析、计划制定和确认、取得和提升权限、生成报告)、风险规避措施
5.2.4模糊测试
主要思路就是用大量的测试用例一个一个试,尽可能多的找出有可能出问题的地方。过程:
(1)要生成大量的测试用例。
(2)将构造好的数据发送或传递给特定的程序,观测其反应(3)捕获由于这些异常输入导致的程序日志及异常(4)对捕获的结果进行深度分析,判读其中是否存在问题
5.2.5安全审查
安全审查是指对软件产品进行安全方面的人工检查,是软件质量保证的一个重要环节,主要包括:代码的安全审查;配置复查;文档的安全审查。
(1)压缩壳:减小程序体积,如UPX、ASPacK和PECompact等。(2)加密壳:保护程序不被调试、脱壳等,如ASProtect、Armadillo等。
3.2.4脱壳基本手段***
脱壳机
手动脱壳:分三步:1.查找程序的真正入口点(OEP);2.抓取内存映像文件;3.输入表重建
3.2.5花指令技术***
巧妙构造代码和数据,在指令流中插入好多“数据垃圾〞,干扰反汇编软件的判断,从而使得它错误地确定指令的起始位置,这类代码数据称之为“花指令〞。
可执行式花指令顾名思义,可执行式花指令指的是能够正常运行的但又不改变原始程序规律性的一组无用指令。这类花指令有如下特点:①可以正常运行;②不改变任何寄放器的值;③反汇编器可以正确反汇编该指令。
不可执行式花指令(垃圾指令)是指被插入到原始代码中但又不改变原始程序规律性的一组无用字节。这类花指令有如下特点:①不可以正常运行;②不改变任何寄放器的值;③反汇编器可能会错误反汇编这些字节。
代码与数据结合技术一般程序的代码和数据是分开的。现提出一个将序列号与程序代码结合的防护方案设想,在未知正确注册码的状况下,很难被破解。
3.2.6SMC技术
所谓SMC(SelfModifyingCode)技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具(譬如一些常见的反汇编工具)对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解密,从而正常运行程序和访问数据。计算机病毒寻常也会采用SMC技术动态修改内存中的可执行代码来达到变形或对代码加密的目的,从而躲过杀毒软件的查杀或者迷惑反病毒工对代码进行分析。
4.1有害程序原理
4.1.1有害程序原理***
侵入计算机系统、破坏系统、信息的机密性、完整性和可用性等的程序。包括计算机病毒、特洛伊木马、僵尸程序、蠕虫、恶意脚本等。
4.1.2典型有害程序举例
CIH、ILOVEU、CodeRed、灰鸽子
4.1.3有害程序防范手段***
恶意代码特征扫描、系统检测、完整性检查、行为阻断、启发式分析
4.2特洛伊木马
4.2.1木马定义
特洛伊木马程序是这样一种程序,它提供了一些有用的,或仅仅是有意思的功能。但是寻常要做一些用户不希望的事,诸如在你不了解的状况下拷贝文件或窃取你的密码。
特性:程序性、隐蔽性、有效性、顽固性、易植入性
4.2.2木马分类
密码发送型、按键记录型、屏幕截取型、文件控制型、后门型EXE伪装型、传统DLL/D型、DLL关联型、DLL注入型
传统C/S通信型、端口寄生型、端口反弹型、ICMP型、电子邮件型、网卡/Modem直接编程型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木工包清工合同
- 高层建筑装修安全合同范例
- 2025年度包装咨询行业集体劳动合同(含员工培训)
- 二零二五年度办公室智能化改造劳动合同模板
- 房屋买卖委托代理合同年
- 电子支付领域的风险控制与安全管理
- 农业产业链智能化改造与升级指南
- 合同转包协议书
- 商品房买卖合同发布
- 劳务承包合同书样本
- 2025年山东商务职业学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 2025年个人合法二手车买卖合同(4篇)
- 2025年山西国际能源集团限公司所属企业招聘43人高频重点提升(共500题)附带答案详解
- 青海省海北藏族自治州(2024年-2025年小学六年级语文)统编版随堂测试(上学期)试卷及答案
- 农业行政执法现状及相关法律法规课件
- 泥水盾构简介
- 简单娱乐yy频道设计模板
- 防止机组非计划停运措施(锅炉专业)
- 最常用汉字个
- 慢性硬膜下血肿 ppt课件
- 变电站综合自动化系统课程自学指导
评论
0/150
提交评论