网络攻防第十周作业
冯诺依曼体系结构与图灵机
冯诺依曼体系结构
美籍匈牙利数学家冯·诺依曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系结构冯·诺依曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。
其体系结构:
(1).采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,数据和程序在内存中是没有区别的,它们都是内存中的数据,当EIP指针指向哪 CPU就加载那段内存中的数据,如果是不正确的指令格式,CPU就会发生错误中断. 在现在CPU的保护模式中,每个内存段都有其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行).这就变相的指定了哪些内存中存储的是指令哪些是数据)指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。
(2).存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
(3).指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
(4).通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
(5).以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。
(6).数据以二进制表示。
特点:(1)计算机处理的数据和指令一律用二进制数表示。(2)顺序执行程序,计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序。(3)计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
作用:冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯.诺依曼也因此被人们称为“计算机之父”。然而由于传统冯.诺依曼计算机体系结构天然所具有的局限性,从根本上限制了计算机的发展。根据冯·诺依曼体系结构构成的计算机,必须具有如下功能:把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。能够按照要求将处理结果输出给用户。将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特点之一 计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成 冯·诺依曼提出的计算机体系结构,奠定了现代计算机的结构理念。
图灵机
图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。
图灵机基本思想:
图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:
在纸上写上或擦除某个符号;
把注意力从纸的一个位置移动到另一个位置;
而在每个阶段,人要决定下一步的动作,依赖于 (a) 此人当前所关注的纸上某个位置的符号和(b) 此人当前思维的状态。
为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:
(1).一条无限长的纸带 TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号 表示空白。纸带上的格子从左到右依此被编号为 0,1,2,... ,纸带的右端可以无限伸展。
(2).一个读写头 HEAD。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
(3).一套控制规则 TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
(4).一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。参见停机问题。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。
程序=指令+数据
数据结构就是计算机存储、组织数据的方式,它是人们为了实现各种各样的算法和程序而设计出来的,具有一定性质或规律。比如栈可以用来实现递归算法的非递归化,图可以用来处理网络问题。
算法你可以理解为用程序解决实际问题的方法。比如排序算法,查找算法等。
程序就是基于某种或某几种数据结构,采用某种算法或某几种算法去解决问题的过程。
在偏向软件领域的一个完整程序中,拥有合理的算法,算法是具有一定的时限性与确定性的,程序在没有数据前,可以说就是一个算法,在某种或几种数据结构的结合中,去执行和完成一个或几个问题的解决过程,是一个程序走完的过程。
安全问题以及防范方法
缓冲区溢出
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。同时,缓冲区溢出是一种最为基础的软件安全漏洞与利用技术,计算机程序中存在的一类内存安全违规类漏洞,在计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致外溢数据覆盖了相邻内存空间的合法数据,从而改变了程序执行流程破坏系统运行完整性。
在Linux与windows平台中,都有栈溢出与Shellcode:
Linux平台栈溢出攻击技术:NSR、RNS、RS三种模式。NSR和RNS模式适用于本地缓冲区溢出和远程栈溢出攻击,而RS模式只能用于本地缓冲区溢出攻击。
Linux平台的Shellcode实现技术:Linux本地Shellcode实现机制、Linux远程Shellcode实现机制
Windows平台栈溢出攻击技术:Windows平台栈溢出攻击技术机理(对程序运行过程中废弃栈的处理方式差异、进程内存空间的布局差异、系统功能调用的实现方式差异)、远程栈溢出攻击示例、野外Windows栈溢出实例
Windows平台Shellcode实现技术:Windows本地Shellcode、Windows远程Shellcode
SQL注入攻击
利用web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。SQL注入攻击的原理是WEB应用程序提供的用户输入接口(如一个动态页面的输入参数、变淡的输入框等)输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,是的注入代码得以执行完成非预期的攻击操作行为。
XSS攻击
XSS跨站脚本攻击的最终目标是使用web应用程序的用户。XSS攻击的根源同样是WEB应用程序对用户输入内容的安全验证与过滤不够完善。现有两种主要的XSS漏洞类型,持久性XSS漏洞和非持久性XSS漏洞。对XSS的防范措施可以分为服务器端和客户端。服务器端防范措施包括输入验证、输出净化、消除危险的输入点。
缓冲区溢出:https://www.cnblogs.com/jsjliyang/p/10779174.html#_label1_1
SQL注入:https://www.cnblogs.com/jsjliyang/p/10626863.html#_label2_0
XSS攻击:https://www.cnblogs.com/jsjliyang/p/10626863.html#_label2_1
共同点
三种攻击都是通过越界访问,访问到本不应该访问到的内存空间,从而获得执行代码的条件。
(1)对缓冲区溢出来说是计算机对接收的输入数据没有进行有效的检测(理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。
(2)SQL注入攻击是针对数据库的攻击方式,本来提供的输入框只能传入数据或者参数,但是攻击者可以在输入中注入SQL指令,设计不良的程序忽略了输入检查,从而使得数据库服务器可以运行攻击者注入的SQL指令。
(3)XSS攻击是新型的“缓冲区溢出攻击“,本质也是利用缓冲区溢出实现。
统一的防范措施
要针对这三种攻击制定统一的防范措施,具体的细节会有不同,但是相同的思想是进行严格的检查机制,对边界数据和输入数据进行更安全的检测,但是对于程序的运行效率可能会有一定的影响