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

冯诺依曼体系结构理解

当前计算机主要是基于冯诺依曼体系结构设计的,下面就简单分析一下冯诺依曼体系结构的计算机是如何工作的,首先下面的## 图就是冯诺依曼体系结构图。

主要由五大部件组成

1.存储器用来存放数据和程序
2.运算器主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中
3.控制器主要用来控制和指挥程序和数据的输入运行,以及处理运算结果
4.输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式,常见的有键盘,鼠标等
5.输出设备可以将机器运算结果转换为人们熟悉的信息形式,如打印机输出,显示器输出等

冯诺依曼体系结构的指令和数据均采用二进制码表示;指令和数据以同等地位存放于存储器中,均可按地址寻访;指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数所在存储器中的位置;指令在存储器中按顺序存放,通常指令是按顺序执行的,特定条件下,可以根据运算结果或者设定的条件改变执行顺序;机器以运算器为中心,输入输出设备和存储器的数据传送通过运算器。然而现在的计算机基本以存储器作为中心。但是由于运算器和控制器在逻辑关系和电路结构上联系十分紧密,通常将它们合起来统称为中央处理器,简称CPU,把输入输出设备简称为I/O设备,这样现代计算机可以认为由三大部分组成:CPU与主存储器可以称为主机,I/O设备称为外部设备。ALU叫做算数逻辑运算单元,用来完成算术逻辑运算。CU(Control Unit)叫做控制单元,用来解释存储器中的指令,并发出各种操作命令来执行指令。ALU和CU是CPU的核心部件。I/O设备也受CU控制,用来完成相应的输入,输出操作。

特点:
与两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线可允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,提高了数据的吞吐率。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠。处理器有两个明显的特点:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输。两条总线由程序存储器和数据存储器分时共用。

冯·诺依曼结构:
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。
特点:
1.必须有一个存储器
2.必须有一个控制器
3.必须有一个运算器,用于完成算术运算和逻辑运算
4.必须有输入设备和输出设备,用于进行人机通信
5.另外,程序和数据统一存储并在程序控制下自动工作

图灵机的理解

图灵介绍

艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、逻辑学家,被称为计算机科学理论之父,人工智能之父。
1931年,图灵考入剑桥大学国王学院,由于成绩优异而获得数学奖学金。
1936年5月,年仅24岁的图灵发表一篇题为《论数字计算在决断难题中的应用》的论文,论文中提出一种计算装置,后被称为“图灵机”,图灵机不是具体的计算机,而是一种计算概念、计算理论。
1938年在普林斯顿获博士学位,其论文题目为“以序数为基础的逻辑系统”,在数理逻辑研究中产生了深远的影响;同年图灵回到英国,在剑桥大学国王学院任研究员。
第二次世界大战期间,1939年图灵到英国外交部通信处从事军事工作,主要是破译敌方密码的工作。由于破译工作的需要,他参与了世界上最早的电子计算机的研制工作。他的工作取得了极好的成就,破译了德国人Enigma密码,于1945年获政府的最高奖——大英帝国荣誉勋章。
1945年,图灵结束了在外交部的工作,他试图恢复战前在理论计算机科学方面的研究,具体研制出新的计算机来。
1950年他发表论文《计算机器与智能》( Computing Machinery and Intelligence),为后来的人工智能科学提供了开创性的构思。提出著名的图灵测试。
1950年,1950年10月,图灵发表论文《机器能思考吗》。这一划时代的作品,使图灵赢得了“人工智能之父”的桂冠。此时,人工智能也进入了实践研制阶段。随着这几年AI技术的不断成熟,人们越来越认识到图灵思想的深刻性:它们至今仍然是人工智能的主要思想之一。
1954年6月7日,年仅41岁的图灵被发现死于家中的床上,床头还放着一个被咬了一口的苹果。这就是现在大名鼎鼎的苹果电脑公司logo的来源。

从图灵的生平中,我们知道,他出生在20世纪初,1912年在世界国家格局上,这个时候刚刚爆发第一次世界大(1913~1921),紧接着1939年至1945年第二次世界大战,大家知道,这两次世界大战倒逼了很多科技的发展,二战期间恰好是图灵青年时代。
在科技文明发展上,由于逻辑的数学化,促使了数理逻辑学科的诞生和发展。但同时这个时期数学上发生了第三次数学危机,具体介绍在下方。图灵在剑桥读大学期间,修读了“数学基础”课程,授课人是纽曼,纽曼整个课程包含对哥德尔不完备性定理的证明和尚未解决的判定性问题。这些科技事件的背后,其实是人们在认知上,对可计算性理论的研究,图灵正是这个问题终结者。
随便提一下,爱因斯坦1905年提出狭义相对论,1927年年仅15岁的图灵为了帮助母亲理解相对论,还写过论文的摘要。

在20世纪以前,人们普遍认为,所有的问题类都是有算法的,人们的计算研究就是找出算法来。1900年,当时著名的大数学家希尔伯特在世纪之交的数学家大会上给国际数学界提出了著名的23个数学问题。

从人类科技发展的历史上来看,19世纪末到20世纪中期,是第二次工业革命和第三工业革命过渡的时期。第二次工业革命主要电和磁、内燃机的发明和使用,发展到这个时候科学家对世界的认知越来越多,越来越清晰,物理学和数学等自然科学发展迅速。这个时候的数学家发现很多现象可以用数学模型来表示,从物体的运动到星球的运动、从热能到动能的转换、从电到磁的转换等等。那问题来了是否所有的现象都可以用数学模型来表达呢?真是这个问题,让人们对数学很多根本性问题进行思考和研究。

中国有句古话说:乱世出英雄。在图灵的时代,在科学历史上出了很多的科学英雄,包括爱因斯坦、冯诺依曼、图灵、哥德尔等等,一方面是时代背景使然,一方面真是他们的天赋和努力让以信息化为代表的第三次工业革命的进程大大加快了

程序=指令+数据

我们知道图灵机首次提出在图灵的一篇论文《论数字计算在决断难题中的应用》中提出,原论文题目为《On Computable Numbers, with an Application to the Entscheidungsproblem》

一.组成

网上有一张经典的图片来表达图灵机的构成,如下图所示:

逻辑结构上图灵机有四个部分组成:

  • 一个无限长的存储带,带子有一个个连续的存储格子组成,每个格子可以存储一个数字或符号
  • 一个读写头,读写头可以在存储带上左右移动,并可以读、修改存储格上的数字或符号
  • 内部状态存储器,该存储器可以记录图灵机的当前状态,并且有一种特殊状态为停机状态
  • 控制程序指令,指令可以根据当前状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作(左移还是右移),并改变状态存储器的值,令机器进入一个新的状态或保持状态不变。

二.基本思想

图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:

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

三.基本图灵机

一台图灵机是一个七元组(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject}),其中Q, \Sigma, \Gamma都是有限集合,且满足
Q:有限的状态集合;

A:有限的输入字母表(不包含空白符B);

R:代表无限长度的纸带,纸带上可能出现A里的任意字母,也可能是空白符B(可以把纸带看做是一个磁盘);

t:代表图灵机的读写头,可以在纸带上左右移动并进行读写操作;

f:转移函数(f:Q × A -> Q × A × {L,R} 转移函数实际上是定义在图灵机的有限控制机里的一张状态转换图的表,我理解的是,在根据当前控制机的状态q以及读写头t读取的当前输入a,在表里找到其对应的新的状态q',在当前纸带的格子上写入的a',以及读写头下一步应该往哪边移动{Left,Right});

Q0:Q0∈Q,图灵机的初始状态(读写头t的初始位置一般都是纸带的第一格);

Qaccept:接受状态(有限的状态集合);

Qreject:拒绝状态,且Qreject≠Qaccept.

安全问题

缓冲区溢出

缓冲区溢出的基本原理就是,计算机程序向特定缓冲区内填充数据时,超出了缓冲区本身的容量,导致溢出的数据覆盖了相邻内存空间的合法数据,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。
缓冲区溢出攻击发生的根本原因在于,现代计算机系统的基础架构冯诺依曼体系本质存在的安全问题,即采用了“存储程序”的原理。因为数据和程序都存储在同一内存中,所以可以通过缓冲区溢出漏洞,通过溢出与存储程序内存相邻的存储数据的内存,达到覆盖存储程序的内存的效果,从而把这部分被覆盖的程序内容注入了恶意的攻击指令,达到攻击的目的。

XSS攻击

XSS攻击的原理是,利用了WEB应用程序对用户输入内容的安全验证与过滤不够完善,导致用户的输入内可以包含HTML、JavaScipt及其他脚本代码,可能会让恶意代码逻辑包含在服务器动态产生和更新的网页中,导致其他用户访问网页时下载并执行了恶意脚本,受到攻击。黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。

SQL注入攻击

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

共同点

由上面三部分对缓冲区溢出、XSS攻击、SQL注入攻击的原理的分析,可以发现共同点,它们都是利用了漏洞,将恶意代码通过某种方式注入了目标,然后执行恶意代码达到攻击的目的。因此防范的方法,应该在于,如何防止这些代码被注入,应该有一个更安全的检查机制,杜绝这些代码的注入。比如对于XSS攻击,针对编译器可以引入缓冲区的边界保护机制,杜绝溢出的发生,也就杜绝了恶意代码的注入。比如XSS攻击,对于用户的输入检查,过滤掉可能的脚本代码,对于SQL,同样增强过滤掉可能的SQL语法。

抽象出统一的防范方法

加入一个检查过滤机制,杜绝对于可能发生代码注入情况的发生。

posted @ 2019-04-29 19:12  John_Lzf  阅读(438)  评论(0编辑  收藏  举报