2018-2019-2 20189212 《網絡攻防技術》第十週做業

馮·諾依曼體系結構和圖靈機


綜述:電子計算機的問世,奠定人是英國科學家艾蘭· 圖靈(Alan Turing)和美籍匈牙利科學家馮· 諾依曼(John Von· Neumann)。圖靈的貢獻是創建了圖靈機的理論模型,奠基了人工智能的基礎。而馮· 諾依曼則是首先提出了計算機體系結構的設想。sql

馮·諾依曼體系結構

馮·諾依曼於1946年提出存儲程序原理,把程序自己看成數據來對待,程序和該程序處理的數據用一樣的方式儲存。 人們把馮·諾依曼的這個理論稱爲馮·諾依曼體系結構

要點:計算機的數制採用二進制;計算機應該按照程序順序執行。
shell

 體系結構

  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.一個狀態寄存器。它用來保存圖靈機當前所處的狀態。圖靈機的全部可能狀態的數目是有限的,而且有一個特殊的狀態,稱爲停機狀態。參見停機問題。
注意這個機器的每一部分都是有限的,但它有一個潛在的無限長的紙帶,所以這種機器只是一個理想的設備。圖靈認爲這樣的一臺機器就能模擬人類所能進行的任何計算過程。
安全


在某些模型中,讀寫頭沿着固定的紙帶移動。要進行的指令(q1)展現在讀寫頭內。在這種模型中「空白」的紙帶是所有爲 0 的。有陰影的方格,包括讀寫頭掃描到的空白,標記了 1,1,B 的那些方格,和讀寫頭符號,構成了系統狀態。bash

二者之間的區別和聯繫

  圖靈機本質上是一個理論模型,主要工做放到數學計算上,於是數學計算是焦點。可是,圖靈的指令系統單一不夠完善,總結起來主要有兩條。第一,沒能將指令存儲起來重複使用。第二,沒能造成實現程序結構設計。","圖靈機欠缺的這兩點恰被馮諾依曼提出的程序數據存儲的思想解決了。"
  圖靈機是抽象理論計算機,馮諾依曼計算機是實際計算機的抽象。服務器

淺談「程序=指令+數據」


程序:是指一組指示計算機每一步動做的指令,一般用某種程序設計語言編寫,運行於某種目標體系結構上。
指令:指揮機器工做的指示和命令,控制器靠指令指揮機器工做,人們用指令表達本身的意圖,並交給控制器執行。一般一條指令包括兩方面的內容: 操做碼和操做數,操做碼決定要完成的操做,操做數指參加運算的數據及其所在的單元地址。
數據:指對客觀事件進行記錄並能夠鑑別的符號,是對客觀事物的性質、狀態以及相互關係等進行記載的物理符號或這些物理符號的組合。它是可識別的、抽象的符號。
dom

綜上所述,程序是由一條條指令集合而成並由程序設計語言編寫的,而每條指令又包括對數據的操做。因此能夠理解爲程序=指令+數據。

安全問題


緩衝區溢出

初始配置

在已經配置好的 Ubuntu 鏡像上執行本實驗任務。 Ubuntu 和其它一些 Linux 系統都適用了地址空間隨機化機制(ASLR)來隨機變化堆棧的起始地址。 這將使猜想精確的地址很是困難,猜想地址是緩衝區溢出攻擊中關鍵的一步。在這個實驗中,咱們使用下面的命令關閉xss

$ su root
  Password: (enter root password)
#sysctl -w kernel.randomize_va_space=0

發現漏洞

程序有一個緩衝區溢出漏洞。它一開始從一個叫「badfile」的文件讀了一個輸入,而後將這個輸入傳遞給了另外一個 bof()功能裏的緩衝區。原始輸入最大長度爲 517 bytes,然而 bof()的長度僅爲 12 bytes。因爲 strcpy()不檢查邊界,將發生緩衝區溢出。因爲此程序有效執行用戶爲 root,若是一個普通用戶利用了此緩衝區溢出漏洞,他有可能得到 root shell。應該注意到此程序是從一個叫作「badfile」的文件得到輸入的,這個文件受用戶控制。如今咱們的目標是爲「badfile」建立內容,這樣當這段漏洞程序將此內容複製進它的緩衝區,便產生了一個 shell.函數

攻擊漏洞

利用exploit函數攻擊漏洞

/bin/bash 中的保護

$ su root
Password: (enter root password)
# cd /bin
# rm sh
# ln -s bash sh // link /bin/sh to /bin/bash
# exit
$./stack // launch the attack by running the vulnerable program

XSS跨站腳本攻擊

  XSS攻擊的根源一樣是Web應用程序對用戶輸入內容的安全驗證與過濾不夠完善,在許多流行的Web論壇、博客、留言本及其餘容許用戶交互的Web應用程序中,用戶提交內容中能夠包含HTML、JavaScript及其餘腳本代碼,而一旦Web應用程序沒有對這些輸入的合法性進行有效檢查與過濾,就頗有可能讓這些惡意代碼邏輯包含在服務器動態產生或更新的網頁中。
  而與代碼注入不一樣的是,XSS攻擊的最終目標並不是Web服務器,Web服務器上的應用程序在XSS攻擊場景中發揮的角色是「幫兇」,而非「受害者」,真正的「受害者」則是訪問這些Web服務器的其餘用戶。攻擊者能夠利用Web應用程序中的安全漏洞,在服務器端網頁中插入一些惡意的客戶端腳本代碼,在Web服務器上產生一些惡意攻擊頁面。
XSS攻擊類型:持久性XSS攻擊和非持久性XSS攻擊
XSS攻擊步驟:
(1)攻擊者構造出一個包含惡意腳本的bank.com登陸請求連接,並經過Email/HTTP等方式將該攻擊連接發送給其餘bank.com網站用戶;
(2)受害用戶點擊攻擊連接後,將會把惡意連接中包含的惡意腳本當作用戶名參數提交給bank.com的登陸處理網頁;
(3)因爲bank.com登陸處理頁面存在XSS漏洞,將會在反饋的歡迎頁面中包含惡意客戶端腳本;
(4)攻擊者的惡意客戶端腳本在受害用戶瀏覽器中執行,一般會驅動瀏覽器向攻擊者發送會話令牌,如會話ID、Cookie信息等;
(5)攻擊者得到用戶會話令牌以後,就能夠劫持用戶會話,或者僞造用戶登陸bank.com,並可實施進一步攻擊。

 XSS攻擊防範措施

  • 輸入驗證
  • 輸出淨化
  • 消除危險的輸入點

SQL注入

代碼注入根據攻擊目標的不一樣又分爲:

  • 惡意讀取、修改與操縱數據庫的SQL注入攻擊;
  • 在Web服務器端安裝、執行Webshell等惡意腳本的PHP注入或ASP注入攻擊;
  • 在Web服務器惡意執行操做系統命令的Shell注入攻擊;
  • 其餘多種多樣的注入攻擊,如LDAP注入、郵件命令注入、空字節注入、SSI注入、XPath注入、XML注入、XQuery注入等。
    在這多種類型的代碼注入攻擊中,SQL注入是目前最多見的,也是較爲直觀的一種攻擊技術。

SQL注入攻擊原理

  SQL注入是利用Web應用程序數據層存在的輸入驗證不完善型安全漏洞實施的一類代碼注入攻擊技術。這類被攻擊的漏洞被稱爲SQL注入漏洞,是因爲用於輸入沒有被正確地過濾以消除SQL語言中的字符串轉義字符,如引號(')、雙引號(")、反引號(`)、分號(;)、百分號(%)、井號(#)、雙減號(--)、雙下畫線(__)等,或者沒有進行嚴格的類型判斷,如未判斷輸入參數是否合法整數類型等,從而使得用戶能夠輸入並執行一些非預期的SQL指令代碼。
  SQL注入攻擊的原理是向Web應用程序提供的用戶輸入接口輸入一段精心構造的SQL查詢命令,攻擊和利用不完善的輸入驗證機制,使得注入代碼得以執行完成非預期的攻擊操做行爲。

SQL注入攻擊步驟和過程

  在攻擊者真正對萬維網的一些Web應用站點實施SQL注入攻擊等,每每是按照以下的攻擊步驟與過程。
(1)發現SQL注入點
(2)判斷後臺數據庫類型

  • 利用數據庫服務器的系統變量進行判斷
  • 利用數據庫服務器的系統變量進行判斷
  • 利用數據庫服務器的系統表進行判斷

(3)後臺數據庫中管理員用戶口令字猜解

  • 猜解表名
  • 猜解字段名
  • 用戶名與口令猜解

(4)上傳ASP後門,獲得默認帳戶權限
(5)本地權限上升
(6)利用數據庫擴展存儲過程執行Shell命令

SQL注入工具

國外工具:
  Wposion可以在動態Web文檔中找出SQL注入漏洞;wieliekoek.pl可以以並以網站鏡像工具生成的輸出爲輸入,找出含有表單頁面,容許在配置文件中對注入字符串進行修改,進行SQL注入漏洞探測;SPIKE Proxy工具容許使用則對待注入的字符串進行定製,並執行自動化的SQL注入測試;SPI Tooklit工具包中也包含一個名叫「SQL Injector」的自動化SQL注入測試工具。
國內工具:
  CSC、NBSI、HDSI、阿D注入工具、WED、Domain、Pangolin等

SQL注入攻擊防範措施

(1)使用類型安全的參數編碼機制
(2)凡是來自外部的用戶輸入,必須進行完備檢查
(3)將動態SQL語句替換爲存儲過程、預編譯SQL或ADO命令對象
(4)增強SQL數據庫服務器的配置與鏈接

參考資料


圖靈機與馮·諾伊曼機的區別

相關文章
相關標籤/搜索