20189222 《网络攻防技术》第十周作业

一、冯·诺依曼体系结构和图灵机

1.1 冯·诺依曼体系结构


美籍匈牙利数学家冯·诺依曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系结构冯·诺依曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。

发展背景

  • 电子计算机的问世,奠基人是英国科学家艾兰· 图灵(Alan Turing)和美籍匈牙利科学家冯· 诺依曼(John Von· Neumann)。图灵的贡献是建立了图灵机的理论模型,奠定了人工智能的基础。而冯· 诺依曼则是首先提出了计算机体系结构的设想。

  • 1946年美籍匈牙利科学家冯·诺依曼提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式存储,并确定了存储程序计算机的五大组成部分和基本工作方法。

  • 半个多世纪以来,计算机制造技术发生了巨大变化,但冯· 诺依曼体系结构仍然沿用至今,人们总是把冯· 诺依曼称为“计算机鼻祖”。

体系结构

  • 采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,数据和程序在内存中是没有区别的,它们都是内存中的数据,当EIP指针指向哪 CPU就加载那段内存中的数据,如果是不正确的指令格式,CPU就会发生错误中断. 在现在CPU的保护模式中,每个内存段都有其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行).这就变相的指定了哪些内存中存储的是指令哪些是数据)
    指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。

  • 存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。

  • 指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。

  • 通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。

  • 以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。

  • 数据以二进制表示。

特点

  • 计算机处理的数据和指令一律用二进制数表示

  • 顺序执行程序
    计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行,这一概念称作顺序执行程序。

  • 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

影响

  • 冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯.诺依曼也因此被人们称为“计算机之父”。然而由于传统冯.诺依曼计算机体系结构天然所具有的局限性,从根本上限制了计算机的发展。

  • 根据冯·诺依曼体系结构构成的计算机,必须具有如下功能:把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。能够按照要求将处理结果输出给用户。

  • 将指令和数据同时存放在存储器中,是冯·诺依曼计算机方案的特点之一 计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成 冯·诺依曼提出的计算机体系结构,奠定了现代计算机的结构理念。

1.2 图灵机


图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。

基本思想

图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:
在纸上写上或擦除某个符号;
把注意力从纸的一个位置移动到另一个位置;
而在每个阶段,人要决定下一步的动作,依赖于 (a) 此人当前所关注的纸上某个位置的符号和(b) 此人当前思维的状态。
为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:
1.一条无限长的纸带 TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号 表示空白。纸带上的格子从左到右依此被编号为 0,1,2,... ,纸带的右端可以无限伸展。
2.一个读写头 HEAD。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
3.一套控制规则 TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
4.一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。参见停机问题。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。

形式化表达

一台图灵机是一个七元组,{Q,Σ,Γ,δ,q0,qaccept,qreject},其中 Q,Σ,Γ 都是有限集合,且满足
1.Q 是状态集合;
2.Σ 是输入字母表,其中不包含特殊的空白符 □;
3.Γ 是带字母表,其中 □∈Γ且Σ∈Γ ;
4. δ:Q×「→Q×Γ×{L,R}是转移函数,其中L,R 表示读写头是向左移还是向右移;
5.q0∈Q是起始状态;
6. qaccept是接受状态。
7.qreject是拒绝状态,且。qreject≠qaccept
图灵机 M = (Q,Σ,Γ,δ,q0,qaccept,qreject) 将以如下方式运作:
开始的时候将输入符号串 从左到右依此填在纸带的第 号格子上, 其他格子保持空白(即填以空白符)。M 的读写头指向第 0 号格子, M 处于状态 q0。机器开始运行后,按照转移函数 δ 所描述的规则进行计算。例如,若当前机器的状态为 q,读写头所指的格子中的符号为 x, 设 δ(q,x) = (q',x',L), 则机器进入新状态 q', 将读写头所指的格子中的符号改为 x', 然后将读写头向左移动一个格子。若在某一时刻,读写头所指的是第 0 号格子, 但根据转移函数它下一步将继续向左移,这时它停在原地不动。换句话说,读写头始终不移出纸带的左边界。若在某个时刻 M 根据转移函数进入了状态 qaccept, 则它立刻停机并接受输入的字符串; 若在某个时刻 M 根据转移函数进入了状态 qreject, 则它立刻停机并拒绝输入的字符串。
注意,转移函数 δ 是一个部分函数, 换句话说对于某些 q,x, δ(q,x) 可能没有定义, 如果在运行中遇到下一个操作没有定义的情况, 机器将立刻停机。

停机问题

停机问题(halting problem)是目前逻辑数学的焦点,和第三次数学危机的解决方案。其本质问题是: 给定一个图灵机 T,和一个任意语言集合 S,是否 T 会最终停机于每一个。其意义相同于可确定语言。显然任意有限 S 是可判定性的,可数的(countable) S 也是可停机的,在使用 oracle 输入的帮助下。
通俗的说,停机问题就是判断任意一个程序是否会在有限的时间之内结束运行的问题。如果这个问题可以在有限的时间之内解决,可以有一个程序判断其本身是否会停机并做出相反的行为。这时候显然不管停机问题的结果是什么都不会符合要求。所以这是一个不可解的问题。
停机问题本质是一阶逻辑的不自恰性和不完备性。类似的命题有理发师悖论、全能悖论等。
证明:
设停机问题有解,即:存在过程H(P,I)可以给出程序P在输入I的情况下是否可停机。假设若P在输入I时可停机,H输出“停机”,反之输出“死循环”,即可导出矛盾:
显然,程序本身可以被视作数据,因此它可以被作为输入,故H应该可以判定当将P作为P的输入时,P是否会停机。所以我们设过程K(P)的流程如下:首先,它调用H(P,P),如果H(P,P)输出“死循环”,则K(P)停机,反之K(P)死循环。即K(P)做与H(P,P)的输出相反的动作。
现在假设求K(K),则若H(K,K)输出停机,K(K)死循环,但由定义知二者矛盾。反之,H(K,K)输出死循环,则K(K)停机,两者一样矛盾。
因此,H不是总能给出正确答案,故而不存在解决停机问题的方法。

通用机型

对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。我们用 表示图灵机 M 的编码。
我们可以构造出一个特殊的图灵机,它接受任意一个图灵机 M 的编码 ,然后模拟 M 的运作,这样的图灵机称为通用图灵机(Universal Turing Machine)。现代电子计算机其实就是这样一种通用图灵机的模拟,它能接受一段描述其他图灵机的程序,并运行程序实现该程序所描述的算法。但要注意,它只是模拟,因为现实中的计算机的存储都是有限的,所以无法跨越有限状态机的界限。

二、根据你的程序设计经验谈谈对“程序=指令+数据”的理解

指令:人为输入计算机,由计算机识别并执行一步步操作的命令的形式称为指令。
程序:一系列指令的有序集合称为程序。

程序在计算机中是按序执行的,CPU通过程序计数器PC控制程序的执行顺序,一般情况下程序是按序执行的,当执行转移、调用、返回等指令时,程序转移到相应的目的地址处执行。CPU根据程序计数器PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC配合下对ID译码后的信号进行分时,产生执行本条指令所需的全部信号,完成本条指令的执行。

三、缓冲区溢出、XSS攻击和SQL注入攻击

共同点、统一防范

这些安全问题的共同点是都进行了越界访问,访问了他们本不该访问到的内存空间,从而执行了本不该被执行的代码。

对于缓冲区溢出攻击来说,这种说法非常好理解,就是缓冲区溢出字面的意思。

对于XSS攻击,XSS攻击被认为是“新型的缓冲区溢出攻击”,其本质也是利用缓冲区溢出实现。

SQL注入是一种针对数据库的攻击方式,攻击者在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。在设计的意图中,接受这些恶意的sql指令的地方本不应该执行该种类型的代码,也就是说本来应该没有权限进行该种类型的操作,查询就应该只是查询,而且只能是在该针对用户的查询或者说是针对数据库中某个表的某一项的查询,用户的输入本来只能是参数而非指令,而当用户的输入变成指令后,访问的内存就不是原来指令所在的内存了。

统一的防范措施,实际上是不存在的,很难同时对三种攻击进行有效的防御。严格的内存边界检查,对每一条指令的访问内存范围都进行检查,应该是能对三种攻击都进行一定的防御,但这会大大拖慢程序的运行效率。

posted on 2019-05-05 23:19  20189209郑炜  阅读(166)  评论(0编辑  收藏  举报