20179311《網絡攻防實踐》第九周做業

網絡攻防課本第九章總結

1.惡意代碼定義

惡意代碼指的是使計算機按照攻擊者的意圖執行以達到惡意目標的指令集。首先惡意代碼是一組指令集,惡意代碼的實現方式能夠多種多樣,如二進制執行文件、腳本語言代碼、宏代碼,或是寄生在其餘代碼或啓動扇區中的一段指令流。其次,惡意代碼的執行目標是由編寫者所決定的,知足他們心理上或利益上的一些需求。典型的攻擊目標包括但不侷限於:單純的技術炫耀,或惡做劇、遠程控制被攻擊主機,使之能爲攻擊者的傀儡主機,知足其實施跳板攻擊或進一步傳播惡意代碼的須要、竊取私人信息或機密信息、竊取計算、存儲、帶寬資源、拒絕服務、進行破壞活動。python

2.惡意代碼類型

惡意代碼能夠根據其執行方式、傳播方式和對攻擊目標的影響分爲計算機病毒、蠕蟲、惡意移動代碼、特洛伊木馬、後門、殭屍程序、內核套件等。計算機病毒是最先出現的惡意代碼類型。計算機病毒:一種可以自我複製的代碼,經過將自身嵌入其餘程序進行感染,而感染過程一般須要人工干預才能完成。蠕蟲:是一類自主運行的惡意代碼,並不須要將自身嵌入到其餘宿主程序中。惡意移動代碼:屬於移動代碼的範疇,移動代碼是指能夠從遠程主機下載並在本地執行的輕量級程序。後門:一類可以繞開正常的安全控制機制,從而爲攻擊者提供訪問途經的一類惡意代碼。特洛伊木馬:一類假裝成有用的軟件,但隱藏其惡意目標的惡意代碼。僵屍網絡:攻擊者出於惡意目的,傳播殭屍程序控制大量主機,並經過一對多的命令與控制信道所組成的攻擊網絡。殭屍程序:用於構建僵屍網絡以造成一對多控制攻擊平臺的惡意代碼形態。內核套件:在用戶態經過替換或修改系統關鍵可執行文件,或者在內核態經過控制操做系統內核,用以獲取並保持最高控制權的一類惡意代碼,又分爲用戶態Rootkit和內核態Rootkit兩種。git

3.惡意代碼的命名規則與分類體系

反病毒業界廣泛採用「三元組命名」規則來對所發現的惡意代碼新樣原本進行命名,這裏的「三元組」是指惡意代碼的類型、家族名稱和變種號,通常形式爲:[惡意代碼類型.]惡意代碼家族名稱[變種號]。web

4.惡意代碼的發展趨勢

①惡意代碼的複雜度和破壞力不斷加強②惡意代碼技術的創新愈來愈頻繁③關注重點從計算機病毒轉移到蠕蟲和內核級的攻擊工具。算法

5.計算機病毒

計算機病毒的概念在1983年由Fred Cohen首次提出。我國對計算機病毒的具備法規效力的定義:計算機病毒是指編制或者在計算機程序中插入的,破壞計算機功能或數據、影響計算機使用,並能自我複製的一組計算機指令或者程序代碼。sql

6.計算機病毒基本特性

(1)感染性(2)潛伏性(3)可觸發性(4)破壞性(5)衍生性。shell

7.計算機病毒的感染及引導機制

計算機病毒須要將自身嵌入到一個宿主程序上才能運行,而感染的方式也決定了計算機病毒如何從宿主程序上被引導運行的方式,所以計算機病毒的感染和引導機制是緊密相關的。計算機病毒潛在的感染目標可分爲可執行文件(三種對可執行文件的感染方式包括前綴感染機制、後綴感染機制和插入感染機制)、引導扇區和支持宏指令的數據文件三大類。編程

8.計算機病毒的傳播機制

計算機病毒的傳播渠道包括移動存儲、電子郵件及下載、共享目錄等。數組

9.網絡蠕蟲

一種經過網絡自主傳播的惡意代碼。從定義本質分析,網絡蠕蟲是一種能夠自我複製的代碼,而且經過網絡傳播,一般無須人爲干預就能傳播。蠕蟲正是由於具備快速主動傳播的定義特性,於是可以對整個互聯網形成癱瘓性的危害後果,也被稱爲「互聯網時代的瘟疫」。1988年11月的Morris蠕蟲因爲其普遍的知名度和影響力,被譽爲「第一個互聯網蠕蟲」。SQL Slammer蠕蟲是有史以來傳播速度最快的網絡蠕蟲。瀏覽器

10.網絡蠕蟲的基本特性

網絡蠕蟲的定義特性在於經過網絡的自主傳播,若是一個代碼不經過網絡傳播,那麼它就不是蠕蟲。安全

11.網絡蠕蟲的組成結構

蠕蟲的內部組件相似於導彈這種戰爭武器中的一些部件,彈頭用來穿透目標,傳播引擎驅動導彈飛向它的目標,目標選擇算法和掃描引擎很像導彈中的小型迴轉儀,能夠引導導彈發現和指向它的目標,有效載荷倉中則攜帶了執行真正破壞性攻擊的惡性材料。

12.蠕蟲獲取目標系統訪問權最經常使用的技術以下

(1)緩衝區溢出攻擊(2)文件共享攻擊(3)利用電子郵件傳播(4)利用其餘廣泛錯誤配置。

13.傳播引擎

傳播引擎一般利用的網絡傳輸機制包括文件傳輸協議FTP、小文件傳輸協議TFTP、超文本傳輸協議HTTP、服務信息塊協議SMB以及原始SOCKET套接字等。

14.蠕蟲能夠選擇以下所列的多種不一樣目標選擇算法

電子郵件地址、主機列表、被信任的系統、網絡鄰居主機、域名服務、經過特定規則任意選擇IP目標地址。

15.有效載荷

蠕蟲的有效載荷就是附加的攻擊代碼。蠕蟲經常攜帶的有效載荷包括以下:植入後門、安裝分佈式拒絕服務攻擊代理、組建僵屍網絡、執行一個複雜的計算。

16.後門與木馬

從定義特性上分析,後門是容許攻擊者繞過系統常規安全控制機制的程序,可以按照攻擊者本身的意圖經過訪問通道;而木馬是指一類看起來具備某個有用或善意目的,但實際掩蓋着一些隱藏惡意功能的程序。

17.後門工具可以爲攻擊者提供多種不一樣類型的訪問通道包括

(1)本地權限提高和本地帳號(2)單個命令的遠程執行(3)遠程命令行解釋器訪問(4)遠程控制GUI(5)無故口後門。後門工具每每都利用了系統的自啓動功能,將自身加入到系統重啓機制中。在Windows平臺中,後門工具能夠利用自啓動文件夾、註冊表自啓動項及預約計劃任務這三種主要方法來達到自啓動的效果。

18.特洛伊木馬

特洛伊木馬的命名起源於《荷馬史詩》中描述的特洛伊戰爭。特洛伊木馬程序能夠用於如下目的:(1)欺騙用戶或系統管理員安裝特洛伊木馬程序,這樣木馬程序就經過毫無戒備的用戶進入到計算機系統中;(2)隱藏在計算機的正常程序中,將本身假裝成看起來屬於該系統,使得用戶和管理員不會察覺到它的存在,一般與後門工具結合,成爲木馬後門。命名假裝經常使用的攻擊技巧有混淆文件擴展名,模仿Windows系統文件或服務命名等。攻擊軟件發佈站點可使得攻擊者可以將官方站點上的軟件進行木馬化,從而使下載者都安裝一個植入了惡意代碼的版本,可以對成千上萬甚至是數百萬的用戶構成威脅。代碼下毒是指攻擊者在軟件廠商的開發和測試軟件的過程當中植入一些與軟件功能無關的程序邏輯,甚至於惡意代碼。

19.殭屍程序與僵屍網絡

僵屍網絡是在網絡蠕蟲、特洛伊木馬、後門工具等傳統惡意代碼形態的基礎上發展融合而產生的一種新型攻擊方式。僵屍網絡是指攻擊者出於惡意目的,傳播殭屍程序控制大量主機,並經過一對多的命令與控制信道所組成的網絡。僵屍網絡區別於其餘攻擊方式的基本特性是使用一對多的命令與控制機制,另外,僵屍網絡還具備惡意性和網絡傳播性。

20.僵屍網絡的功能結構

最先出現的IRC僵屍網絡由僵屍網絡控制器和殭屍程序兩部分組成。殭屍程序的功能組成結構能夠分爲主體功能模塊和輔助功能模塊,主體功能模塊包括實現僵屍網絡定義特性的命令與控制模塊和實現網絡傳播特性的傳播模塊,而包含輔助功能模塊(由信息竊取模塊、主機控制模塊、下載更新模塊和防分析檢測模塊構成)的殭屍程序則具備更強大的攻擊功能和更好的生存能力。主體功能模塊中的命令與控制模塊是整個殭屍程序的核心。殭屍程序能夠按照傳播策略分爲自動傳播型殭屍程序和受控傳播型殭屍程序兩大類,而殭屍程序的傳播方式包括經過遠程攻擊軟件漏洞傳播、掃描NetBIOS弱密碼傳播、掃描惡意代碼留下的後門進行傳播、經過發送郵件病毒傳播、經過文件系統共享傳播等。輔助功能模塊是對殭屍程序除主題功能外其餘功能的概括,主要包括信息竊取、殭屍主機控制、下載與更新和躲避檢測與對抗分析等功能模塊。

21.殭屍程序的命令與控制機制

僵屍網絡的基本特性是使用一對多的命令與控制機制,所以,理解命令與控制機制的實現是深刻了解僵屍網絡機理的必要前提。當前主流使用的僵屍網絡命令與控制機制包括:基於IRC協議的命令與控制機制、基於HTTP協議的命令與控制機制和基於P2P協議的命令與控制機制這三大類。IRC網絡中最爲廣泛使用的一種通訊方式是羣聊方式。基於IRC協議,攻擊者向受控殭屍程序發佈命令的方法有三種:設置頻道主題命令,使用頻道或單個殭屍程序發送PRIVMSG消息,經過NOTICE消息發送命令。IRC僵屍網絡中發送的命令按照殭屍程序對應實現的功能模塊能夠分爲僵屍網絡控制命令、擴散傳播命令、信息竊取命令、主機控制命令和下載與更新命令。其中主機控制命令還能夠細分爲發動DDoS攻擊、架設服務、發送垃圾郵件、單擊欺詐等。使用HTTP協議構建僵屍網絡命令與控制機制的優點有兩方面:首先,使用HTTP協議構建控制信道可讓僵屍網絡控制流量湮沒在大量的互聯網Web通訊中,從而使得基於HTTP協議的僵屍網絡活動更難被檢測;另外,使用HTTP協議構建控制信道通常均可以繞過防火牆。基於IRC協議和HTTP協議的命令與控制機制均具備集中控制點,這使得這種基於客戶端-服務器架構的僵屍網絡容易被跟蹤、檢測和反制。

22.Rootkit

Rootkit的定義是一類特洛伊木馬後門工具,經過修改現有的操做系統軟件,使攻擊者得到訪問權並隱藏在計算機中。Rootkit須要由衆多的功能組件所組成,包括替換操做系統軟件用於隱藏自身的惡意程序,實現隱藏性後門訪問的後門程序,還有各類輔助工具,這些工具容許攻擊者調整那些被替換程序的特徵,另外,正是因爲Rootkit一般是一個惡意程序工具包,所以被命名爲「Root」+「kit」,即用來得到Root後門訪問的kit工具包。根據操做系統的分層,Rootkit能夠運行在兩個不一樣的層次上,即用戶模式和內核模式。

23.大部分UNIX用戶模式Rootkit中集成的工具能夠被分爲以下五種不一樣的類型

提供後門訪問的二進制替換程序、隱藏攻擊者的二進制替換程序、用於隱藏但不替換的二進制程序、另一些零散的工具、安裝腳本。Windows爲了支持第三方工具擴展Windows的內置功能特性,提供了一些開發接口。Windows使用了WFP機制來防止操做系統關鍵文件被修改或替換。用戶模式Rookit還可使用DLL注入和API掛鉤技術把惡意代碼直接加入運行程序的內存空間中。

24.攻擊者之因此選擇對內核動手具備如下幾方面緣由

首先,因爲內核做爲操做系統的核心,可以獲取更爲全面更加真實的底層信息,並對系統有着全面的控制能力,這有助於提高Rootkit的後門控制;其次,一旦控制內核以後,能夠經過修改內核使得內核對上層正常程序的信息查詢和請求時,返回已經隱藏攻擊者信息的虛假情報,這使得用戶和管理員即使使用外部的可信應用軟件,也沒法找出攻擊者植入的後門,使用文件完整性檢測工具也難以發現被修改的操做系統文件;最後,控制內核有助於Rootkit利用內核權限對抗一些反病毒軟件,甚至能夠在反病毒軟件檢測出Rootkit以前就使之無效化。

25.大多數內核模式Rootkit採用以下技術手段

文件和目錄隱藏、進程隱藏、網絡端口隱藏、混雜模式隱藏、改變執行方向、設備截取和控制。Linux操做系統中利用LKM機制實現的內核模式Rootkit有Adore、Adore-ng、KIS等。在Windows操做系統內核中實現Rootkit也擁有多種技術方法,包括:利用惡意設備驅動程序、修改內存中當前運行的內核、覆蓋硬盤上的內核鏡像、在虛擬系統中配置一個內核來愚弄用戶以及試圖在內核級運行用戶模式代碼。

26.惡意代碼分析技術概述

代碼分析,或稱程序分析,是按需求使用必定的規則、方法和工具對計算機程序進行分析,以推導出其程序結構、數據流程和程序行爲的處理過程。程序分析技術在程序理解、程序測試、程序優化和程序重構等方面都有着重要的做用。惡意代碼的分析與針對良性代碼和軟件的程序分析均可以採用通用的代碼分析技術來做爲基礎,主要包括靜態分析和動態分析方法,來對代碼進行逆向工程來肯定其功能。

27.與分析良性代碼相比,分析惡意代碼的主要差異在於

①你一般不能提早知道惡意代碼的目的是什麼,你須要像偵探同樣找出惡意代碼裏隱藏的真相②惡意代碼具備惡意的攻擊目的,會對所運行的環境進行惡意的破壞,所以在惡意代碼分析時須要一個受控、可恢復的環境③惡意代碼分析在絕大多數狀況下不會擁有待分析程序的源代碼,於是需涉及二進制代碼分析,其難度要比源碼分析要高不少。④惡意代碼目前都會引入大量各類各樣的對抗分析技術,對惡意代碼分析帶來了不少困難和挑戰。惡意代碼分析的技術方法主要包括靜態分析和動態分析兩大類。

28.基於虛擬化構建惡意代碼分析環境

虛擬化技術可讓實驗環境可以按需啓動惡意代碼的運行平臺虛擬機鏡像,並支持快速地運行鏡像設置和恢復,這將大大提高資源的利用效率,以及惡意代碼分析的效率。在進行惡意代碼分析時,必定要保證這臺包含分析環境的宿主計算機不要鏈接業務網絡和互聯網。

29.用於研究的惡意代碼自動分析環境

在惡意代碼分析網段中,包括了系統主要的四類惡意代碼自動化分析組件,分別爲靜態分析機、動態分析機、網絡分析機和綜合分析機。

30.惡意代碼靜態分析技術

利用靜態分析方法,可以對惡意代碼的特性和目的有一個大致的瞭解,甚至可以識別出惡意代碼的各個組成部分;然而利用動態分析,其實是激活一個受控分析實驗環境中的代碼,當一個代碼在實際系統中運行時,咱們可以更加迅速地瞭解其行爲。惡意代碼靜態分析的主要技術手段,具體包括反病毒軟件掃描、文件格式識別、字符串提取分析、二進制結構分析、反彙編、反編譯、代碼結構與邏輯分析、加殼識別與代碼脫殼等。進行惡意代碼分析最直接的方法是使用現成的反病毒軟件來掃描待分析的樣本,以肯定反病毒軟件是否可以識別該樣本,以及所識別的類型、家族、變種等信息。在面對一個未知的惡意代碼樣本文件時,第一步要作的工做就是對它的文件格式進行識別。在Windows平臺上,二進制可執行文件EXE和DLL都是以PE文件格式組織的,而在Linux平臺上,可執行文件格式則是ELF。在提取的字符串中,可能得到的用信息內容包括以下:惡意代碼實例名、幫助或命令行選項、用戶會話、後門口令、相關的URL信息E-mail地址、包含庫文件和函數調用。在類UNIX平臺上進行字符串提取的命令工具是strings。利用Strip工具來刪除全部不可執行的標記性信息

31.反彙編與反編譯

反彙編與反編譯是對二進制程序編譯連接的逆過程,反彙編是把二進制程序的目標代碼從二進制機器指令碼轉換爲彙編代碼的處理過程,而反編譯則更進一步,指望將彙編代碼再進一步還原成高級編程語言形式的源代碼。經常使用的反彙編軟件有IDA Pro、Ollydbg、W32Dasm、VC++等。反編譯工具則是一般針對不一樣高級編程語言進行單獨設計和實現的。

32.代碼與邏輯分析

函數調用關係圖定義爲一個表示計算機程序中例程之間調用關係的有向圖,每一個節點表示程序內的函數,而有向邊表示有向邊源節點函數的調用。程序控制流圖CFG是對程序代碼執行過程所有路徑的一種圖形化表示方法。

33.加殼識別與代碼脫殼

惡意代碼一般使用的加殼混淆機制包括加密、多樣性、多態和變形等,加密機制通常採用固定的代碼加密器來對二進制程序進行處理,而在混淆代碼中通常會包含一個固定格式的解密器。加密##、多態和變形等惡意代碼混淆技術一般是以惡意代碼加殼的方式進行實施的。加殼工具根據所使用的技術不一樣,又分爲壓縮殼、加密殼、多態殼、變形殼和假裝殼等。

34.惡意代碼動態分析技術

惡意代碼動態分析的主要技術手段具體包括快照比對、系統動態行爲監控、網絡協議棧監控、沙箱、動態調試等。快照比對是監控惡意代碼動態運行行爲最簡單的方法,進行快照比對的工具軟件包括RegSnap、完美卸載等。

35.系統動態行爲監控方法

系統動態行爲監控是目前惡意代碼動態行爲分析中最爲核心和經常使用的技術步驟,針對惡意代碼對文件系統、運行進程列表、註冊表、本地網絡棧等方面的行爲動做,進行實時監視、記錄和顯示。系統動態行爲監控一般基於行爲通知機制或者API劫持技術實現。根據所監控的行爲類別,系統動態行爲監控軟件包括以下幾類:(1)文件行爲監控軟件(2)進程行爲監控軟件(3)註冊表監控軟件(4)本地網絡棧行爲監控軟件。

36.網絡協議棧監控方法

對於惡意代碼的網絡行爲,除了從惡意代碼運行平臺本地的網絡協議棧進行監控以外,更爲全面有效的監控視圖是從本地網絡上其餘一臺主機來進行。惡意代碼的有些網絡行爲只有在分析環境符合特定條件下才可以被觸發;特定的IRC殭屍程序只有鏈接到有效地IRC控制服務器上,並接受控制者指令後,纔會實施相應的攻擊動做。對於這些特定條件才能觸發的網絡行爲,一種解決思路是使用靜態分析方法對相應關注的代碼段進行細緻審查,理解代碼中蘊含的網絡行爲;另外一種解決思路是經過構建一個模擬網絡,來包含大部分惡意代碼一般所使用的網絡服務和環境。

37.沙箱技術

沙箱技術提供了受限制的執行環境,使得在沙箱中運行的代碼不可以修改用戶系統,從而提供了一個用於運行不可信任程序的安全環境。

38.動態調試技術

動態調試是在程序運行時刻對它的執行過程進行調試的技術過程,惡意代碼的執行過程取決於其類型。惡意代碼的一個特色是運行得很是快,只能在全部活動發生之後逐個來分析記錄下來的行爲。而動態調試器可以以單步模式來調試惡意代碼,可以一行代碼接着一行代碼,一個函數調用接着一個函數調用地進行惡意代碼行爲分析的過程,並也能夠中斷或者快進程序運行流程,觀察惡意代碼中發生的一切。

網絡攻防課本第十章總結

1.軟件安全概述

攻擊者可以輕易地對系統和網絡實施攻擊,很大程度上是由於安全漏洞在軟件中的大規模存在,攻擊者能夠利用這些漏洞來違背系統和網絡的安全屬性。大多數成功攻擊都是利用和破解已公佈但未被修改的軟件安全漏洞或不安全的軟件配置。

2.軟件安全漏洞威脅

軟件自從誕生之日起,就和bug如影隨行,而其中能夠被攻擊者利用並致使危害的安全缺陷被稱爲軟件安全漏洞。安全漏洞的範疇則不限於軟件安全漏洞,還包括硬件、我的與組織管理中存在的、可以被攻擊者利用來破壞安全策略的弱點。軟件安全漏洞被定義爲在軟件的需求規範、開發階段和配置過程當中引入的缺陷實例,其執行會違反安全策略。

3.安全漏洞

在系統安全流程、設計、實現或內部控制中所存在的缺陷或弱點,可以被攻擊者所利用並致使安全侵害或對系統安全策略的違反,包括三個基本元素:系統的脆弱性或缺陷攻擊者對缺陷的可訪問性,以及攻擊者對缺陷的可利用性。

4.軟件安全困境三要素

複雜性、可擴展性、連通性。源代碼行數是目前衡量軟件規模的一個重要度量指標。每千行代碼中的bug數量會在5~50個之間。正是現代可擴展軟件自己的特性使得安全保證更加困難,首先,很難阻止攻擊者和惡意代碼以不可預測的擴展方式來入侵軟件和系統,其次,分許可擴展性軟件的安全性要比分析一個徹底不能被更改的軟件要困可貴多。

5.軟件安全漏洞類型

MITRE是軟件安全漏洞標準目錄CVE的維護機構。軟件安全漏洞類型從技術上主要包括以下幾類:內存安全違規類(是在軟件開發過程當中在處理RAM內存訪問時所引入的安全缺陷,主要出如今C/C++等編程語言所編寫的軟件程序中,JAVA等更現代的編程語言則經過禁用指針計算與轉換,實施內存垃圾跟蹤與收集等機制可以有效解決此類安全漏洞。不安全指針是指在計算機程序中存在的並無指向適當類型對象的非法指針)、輸入驗證類(是指軟件程序在對用戶輸入進行數據驗證存在的錯誤,沒有保證輸入數據的正確性、合法性和安全性,從而致使可能被惡意攻擊與利用輸入驗證類安全漏洞根據輸入位置、惡意輸入內容被軟件程序的使用方式不一樣,又包含格式化字符串、SQL注入、代碼注入、遠程文件包含、目錄遍歷、XSS、HTTP Header注入、HTTP響應分割錯誤等多種安全漏洞技術形式)、競爭條件類(是指處理進程的輸出或者結果沒法預測,並依賴於其餘進程事件發生的次序或時間時,所致使的錯誤)、權限混淆與提高類(是指計算機程序因爲自身編程疏忽或被第三方欺騙,從而濫用其權限,或賦予第三方不應給予的權限。權限混淆與提高類漏洞的具體技術形式主要有Web應用程序中的跨站請求僞造、Clickjacking、FTP反彈攻擊、權限提高、越獄等。越獄是指在類UNIX系統中破解chroot和jail機制,從而訪問系統管理員經過chroot設置限制目錄以外的文件系統內容的一種技術)。

6.緩衝區溢出的基本概念

緩衝區溢出是計算機程序中存在的一類內存安全違規類漏洞,在計算機程序向特定緩衝區內填充數據時,超出了緩衝區自己的容量,致使外溢數據覆蓋了相鄰內存空間的合法數據,從而改變程序執行流程破壞系統運行完整性,一般多見於C/C++語言程序中的memcpy()、strcpy()等內存與字符串複製函數的引用位置。緩衝區溢出攻擊發生的根本緣由,能夠認爲是現代計算機系統的基礎構架——馮諾伊曼體系存在本質的安全缺陷,即採用了「存儲程序」的原理,計算機程序的數據和指令都在同一內存中進行存儲,而沒有嚴格的分離。

7.編譯器與調試器的使用

使用C/C++等高級編程語言編寫的源碼,須要經過編譯器和鏈接器才能生成可直接在操做系統平臺上運行的可執行程序代碼。而調試器則是程序開發人員在運行時刻調試與分析程序行爲的基本工具。對於一般使用的C/C++編程語言,最著名的編譯與鏈接器是GCC,開源的GUN Ansi C/C++編譯器,GCC最基本的用法是執行「gcc –c test.c」命令進行源碼編譯,生成test.o,而後執行「gcc –o test test.o」進行鏈接,生成test可執行程序,可使用「gcc test.c –o test」同時完成編譯和鏈接過程。對於處理多個源碼文件、包含頭文件、引用庫文件等多種狀況,程序開發人員一般編寫或自動生成Makefile,來控制GCC的編譯和鏈接過程。類UNIX平臺上進行程序的調試常用GDB調試器,GDB調試器提供程序斷點管理、執行控制、信息查看等多種類型的功能指令。

8.彙編語言基礎知識

彙編語言,尤爲是IA32構架下的彙編語言,是理解軟件安全漏洞機理,掌握軟件滲透攻擊代碼技術的底層基礎。從應用的角度通常將寄存器分爲4類,即通用寄存器、段寄存器、控制寄存器和其餘寄存器。通用寄存器主要用於普通的算術運算,保存數據、地址、偏移量、計數值等。。段寄存器在IA32構架中是16位的,通常用做段基址寄存器。控制寄存器用來控制處理器的執行流程。其餘寄存器中值得關注的是「擴展標誌」eflags寄存器,由不一樣的標誌位組成,用於保存指令執行後的狀態和控制指令執行流程的標誌信息。在IA32構架彙編語言中,又分爲Intel和AT&T兩種具備不少差別的彙編格式。在類UNIX平臺下,一般使用AT&T彙編格式,而在DOS/Windows平臺下,則主要使用Intel彙編格式。

9.進程內存管理

程序在執行時,系統在內存中會爲程序建立一個虛擬的內存地址空間,在32位機上即4GB的空間大小,用於映射物理內存,並保存程序的指令和數據。Linux的集成內存空間3GB如下爲用戶態空間,3GB-4GB爲內核態空間,操做系統將可執行程序加載到新建立的內存空間中,程序通常包含.text、.bss和.data三種類型的段。Windows操做系統的進程內存空間2GB-4GB爲內核態地址空間,用於映射Windows內核代碼和一些核心態DLL,並用於存儲一些內核態對象,0GB-2GB爲用戶態地址空間。

10.函數調用過程

棧結構與函數調用過程的底層細節是理解棧溢出攻擊的重要基礎,由於棧溢出攻擊就是針對函數調用過程當中返回地址在棧中的存儲位置,進行緩衝區溢出,從而改寫返回地址,達到讓處理器指令寄存器跳轉至攻擊者指定位置執行惡意代碼的目的。棧是一種最基本的LIFO後進先出抽象數據結構,主要被用於實現程序中的函數或過程調用,在棧中會保存函數的調用參數、返回地址、調用者棧基址、函數本地局部變量等數據。在IA32構架寄存器中,兩個與棧密切相關的寄存器爲ebp和esp,分別保存當前運行函數的棧底地址和棧頂地址,而兩個密切相關的指令爲push和pop,分別是將數據壓入棧,及將棧頂數據彈出至特定寄存器。程序進行函數調用的過程有以下三個步驟:①調用②序言③返回。

11.緩衝區溢出攻擊原理

緩衝區溢出漏洞根據緩衝區在進程內存空間中的位置不一樣,又分爲棧溢出、堆溢出和內核溢出這三種具體技術形態。Linux系統可能會採起對抗緩衝區溢出的防範措施,所以,咱們須要把這些措施取消後,才能重現基礎的緩衝區溢出過程:①取消「棧上數據不可執行」保護:echo 0 > /proc/sys/kerne/exec-shield②取消「地址空間隨機化」保護:echo 0 > /proc/sys/kernel/randomize_va_space③編譯時取消「/GS」保護:加上gcc編譯選項 –fno-stack-protecto。緩衝區溢出安全漏洞的根本問題在於用戶輸入可控制的緩衝區操做缺少對目標緩衝區的邊界安全保護,這其中包含兩個要素,首先是程序中存在着缺少邊界安全保護的緩衝區操做,其次是這個緩衝區操做必須是用戶輸入能夠控制的,也就是說用戶的輸入能夠直接或者間接地影響到這個不安全的緩衝區操做函數。

12.Linux平臺棧溢出攻擊技術

Linux平臺中的棧溢出攻擊按照攻擊數據的構造方式不一樣,主要有NSR、RNS和RS三種模式。在Linux平臺中,本地棧溢出攻擊,即滲透攻擊代碼的攻擊目標對象是本地的漏洞程序,能夠用於特權提高

13.NSR模式

NSR模式主要適用於被溢出的緩衝區變量比較大,足以容納Shellcode的狀況,其攻擊數據從低地址到高地址的構造方式是一堆Nop指令以後填充Shellcode,再加上一些指望覆蓋RET返回地址的跳轉地址,從而構成了NSR攻擊數據緩衝區。

14.RNS模式

通常用於被溢出的變量比較小,不足於容納Shellcode的狀況。攻擊數據從低地址到高地址的構造方式是首先填充一些指望覆蓋RET返回地址的跳轉地址,而後是一堆Nop指令填充出「着陸區」,最後再是Shellcode。

15.RS模式

在這種模式下可以精確地定位出Shellcode在目標漏洞程序進程空間中的起始地址,所以也就無需引入Nop空指令構建「着陸區」。這種模式是將Shellcode放置在目標漏洞程序執行時的環境變量中,因爲環境變量是位於Linux進程空間的棧底位置,於是不會受到各類變量內存分配與對齊因素的影響,其位置是固定的。能夠經過以下公式進行計算:ret=0xc0000000-sizeof(void*)-sizeof(FILENAME)-sizeof(Shellcode)。

16. Linux平臺上的遠程棧溢出與本地棧溢出

Linux平臺上的遠程棧溢出攻擊的原理與本地棧溢出是同樣的,區別在於用戶輸入傳遞的途徑不一樣,以及Shellcode的編寫方式不一樣。本地棧溢出的用戶輸入途徑主要爲argv命令行輸入、文件輸入等,而遠程棧溢出攻擊的用戶輸入傳遞途徑則是經過網絡,存在遠程棧溢出漏洞每每是一些網絡服務進程或網絡應用程序。NSR和RNS模式也都適用於遠程棧溢出,使用場景也主要取決於被溢出的目標緩衝區大小是否足夠容納Shellcode。

17:Linux平臺的Shellcode實現技術

Shellcode是一段機器指令,對於咱們一般接觸的IA32構架平臺,Shellcode就是符合Intel 32位指令規範的一串CPU指令,被用於溢出以後改變系統正常流程,轉而執行Shellcode以完成滲透測試者的攻擊目的,一般是爲他提供一個訪問系統的本地或遠程命令行訪問。在Linux操做系統中,程序經過「int 0x80」軟中斷來執行系統調用,而在Windows操做系統中,則經過核心DLL中提供的API接口來完成系統調用。

18.Linux本地Shellcode實現機制

Linux系統本地Shellcode一般提供的功能就是爲攻擊者啓動一個命令行Shell。在得到彙編語言實現的Shellcode以後,咱們能夠經過查找Intel opcode指令參考手冊,便可得到opcode二進制指令形式的Shellcode。

19.Linux系統中一個最簡單的本地Shellcode的產生過程,即Shellcode的通用方法

①先用高級編程語言,一般用C,來編寫Shellcode程序②編譯並反彙編調試這個Shellcode程序③從編譯語言代碼級別分析程序執行流程④整理生成的彙編代碼,儘可能減少它的體積並使它可注入,並經過嵌入C語言進行運行測試和調試⑤提取彙編代碼所對應的opcode二進制指令,建立Shellcode指令數組。在Linux本地Shellcode中,每每還會在運行execve()啓動shell以前,調用setreuid(0)將程序運行權限提高至Root用戶,這樣才能利用本地溢出攻擊來提高權限,在執行execve()函數以後還須要執行exit()函數,從而在溢出攻擊以後可以使程序正常退出。

20.Linux遠程Shellcode實現機制

經過執行一系列的系統調用來完成指定的功能。實現方法步驟也是首先給出高級語言的功能代碼實現,而後經過反彙編調試編譯後的二進制程序,特權、優化和整理所得到的彙編代碼,並最終產生opcode二進制指令代碼。Linux遠程Shellcode須要讓攻擊目標程序建立socket監聽指定的端口等待客戶端鏈接,啓動一個命令行Shell,並將命令行的輸入輸出與socket綁定,這樣攻擊者就能夠經過socket客戶端鏈接目標程序所在初級的開放端口,與服務端socket創建起通訊通道,並得到Shell。在Linux系統中,dup2()函數可以將標準輸入輸出與socket的網絡通訊通道進行綁定,使得socket的遠程輸入鏈接至命令行標準輸入,將命令行標準輸出鏈接至遠程網絡輸出,於是完成遠程Shell的功能。

21.Windows操做系統平臺在不少方面與Linux操做系統具備顯著不一樣的實現機制與成功攻擊應用程序中棧溢出漏洞密切相關的主要有以下三點

①對程序運行中廢棄棧的處理方式差別②進程內存空間的佈局差別(Linux進程內存空間中棧指針在0x0000000之下,即通常棧中變量的位置都在0xbfff****地址附近,在這些地址中沒有空字節。Windows平臺的棧位置處於ox00FFFFFF如下的用戶內存空間,通常爲0x0012****地址附近,er這些內存地址的首字節均爲0x00空字節)③系統功能調用的實現方式差別(Linux系統中經過「int80」中斷處理來調用系統功能,而Windows系統則是經過操做系統中更爲複雜的API及內核處理例程調用鏈來完成系統功能調用,對應用程序直接可見的是應用層中如Kernel32.dll、User32.dll等系統動態連接庫中導出的一些系統API接口函數)。

22.Windows平臺Shellcode實現技術

因爲Windows操做系統並不提供直接的系統調用,而是提供一系列的API接口函數,所以Windows平臺上的Shellcode實現較Linux系統具備一些差別,編寫也更難一些。

23.Windows本地Shellcode

在Windows平臺上,典型的本地Shellcode一樣也是啓動一個命令行Shell,即「command.com」或Windows32的系統API中提供了system()函數調用,能夠用於啓動指定程序或運行特定命令,在調用system(「command.com」)以後便可啓動命令行程序。編寫Shellcode最簡單的方式就是使用硬編碼的函數地址,好比system()函數在Windows XP特定版本的目標程序內存空間中的加載地址爲0x77bf93c7,那麼咱們就能夠在Shellcode中使用「Call 0x77bf93c7」指令,讓EIP指令寄存器跳轉至硬編碼的函數入口地址執行。System()函數是由msvcrt.dll動態連接庫所導出的API函數,而攻擊目標並不必定加載了該DLL,爲了確保Shellcode可以正確地調用所需函數,通常須要將所需函數的動態連接庫裝載至目標程序內存中,而後再查詢得到該函數的加載地址。

24.Windows遠程Shellcode

大體過程以下:①建立一個服務器端socket,並在指定的端口上監聽②經過accept()接受客戶端的網絡鏈接③建立子程序,運行「cmd.exe」,啓動命令行④建立兩個管道,命令管道將服務器端socket接收(recv)到的客戶端經過網絡輸入的執行命令,鏈接至cmd.exe的標準輸入;而後輸出管道將cmd.exe的標準輸出鏈接至服務器端socket的發送(send),經過網絡將運行結果反饋給客戶端。

25.堆溢出攻擊

一個典型的Linux程序在其進程內存空間中一般有以下一些數據區:包含已初始化全局函數的.data段、包含未經初始化數據的.bss段、運行時刻動態分配內存的數據區heap等。而這些內存數據區有着共同的特色,即數據分配與增加方向是從低地址向高地址,而非棧從高地址向低地址的增加方向。所以,在.data、.bss和heap中緩衝區溢出的情形,都被稱爲堆溢出。堆溢出之因此較棧溢出具備更高的難度,更重要的緣由在於堆中沒有能夠直接覆蓋並修改指針寄存器指針的返回地址,所以每每須要利用在堆中一些會影響程序執行流程的關鍵變量,如函數指針、C++類對象中的虛函數表。或者挖掘出堆中進行數據操做時可能存在的向指定內存地址改寫內容的漏洞機會。

26.緩衝區溢出攻擊的防護技術

①嘗試杜絕溢出的防護技術(解決緩衝區溢出攻擊最根本的辦法是編寫正確的、不存在緩衝區溢出安全漏洞的軟件代碼)②容許溢出但不讓程序改變執行流程的防護技術③沒法讓攻擊代碼執行的防護技術。

kali視頻第36~38集總結

kali視頻第36集Kali壓力測試工具總結

壓力測試經過肯定一個系統的瓶頸或者不能接受的性能點,來得到系統可以提供的最大的服務級別的測試。通俗地講,壓力測試是爲了測試應用程序的性能會變得不可接受。
Kali下壓力測試工具包含VoIP壓力測試、Web壓力測試、網絡壓力測試及無線壓力測試。

一、Voip壓力測試工具

包括iaxflood和inviteflood

二、web壓力測試工具

THC-SSL-DOS
藉助THC-SSL-DOS攻擊工具,任何人均可以把提供SSL安全鏈接的網站攻擊下線,這種攻擊方法稱爲SSL拒絕服務攻擊(SSL-DOS)。德國黑客組織發佈THC SSL DOS,利用SSL中已知的弱點,迅速耗費服務器資源,與傳統DDoS工具不一樣的是,它不須要任何帶寬,只須要一臺執行單一攻擊的電腦。
漏洞存在於協議的renegotiation過程當中,renegotiation被用於瀏覽器到服務器之間的驗證。

三、網絡壓力測試工具

dhcpig :耗盡DHCP資源池的壓力測試

四、ipv6攻擊工具包

五、Inundator

IDS/IPS/WAF 壓力測試工具

六、Macof

可作泛洪攻擊

七、Siege

Siege是一個壓力測試和評測工具,設計用於Web開發,評估應用在壓力下的承受能力,能夠根據配置對一個Web站點進行多用戶的併發訪問,記錄每一個用戶全部請求過程的響應時間,並在必定數量的併發訪問下重複進行:

八、T50壓力測試

功能強大,且具備獨特的數據包注入工具,T50支持*nix系統,可進行多種協議數據包注入,實際上支持15種協議。

九、無線壓力測試

包括MDK3和Reaver

kali視頻第37集數字取證工具總結

數字取證技術將計算機調查和分析技術應用於潛在的、有法律效力的電子證據的肯定與獲取,一樣他們都是針對黑客和入侵的,目的都是保障網絡安全。

一、PDF取證工具

pdf-parser和peepdf
peepdf是一個使用python編寫的PDF文件分析工具,它能夠檢測到惡意的PDF文件。其設計目標是爲安全研究人員提供PDF分析中可能用到的全部組件。

二、反數字取證chkrootkit

Linux系統下查找rootkit後門工具。判斷系統是否被植入Rootkit的利器。

三、內存取證工具

Volatility是開源的Windows、Linux、Mac、Android的內存取證分析工具,由python編寫成,命令行操做,支持各類操做系統。

四、取證分析工具binwalk

Binwalk是一個固件的分析工具,旨在協助研究人員對固件分析,提取及逆向工程。簡單易用,徹底自動化腳本,並經過自定義簽名,提取規則和插件模塊,更重要的一點是能夠輕鬆擴展。
藉助binwalk中的一個很強大的功能——提取文件(壓縮包)中的隱藏文件(或內容文件)。亦可分析文件格式。
分析壓縮包 binwalk .zip
binwalk -e 
.zip 將文件所有解壓,產生新的目錄_zip.zip.extracted,
還能夠做爲文件格式分析的工具

五、取證哈希驗證工具集

md5deep是一套跨平臺的方案,能夠計算和比較MD5等哈希加密信息的摘要MD5,SHA-1,SHA-256,Tiger,Whirlpool。

六、取證鏡像工具集

針對鏡像文件的取證工具,如mmsstat與mmls等命令。

七、數字取證套件

數字取證工具

數字取證套件
autopsy

DFF(Digital Forensics Framework)是一個簡單但強大的數字取證工做輔助工具,它具備靈活的模塊系統,具備多種功能,包括:回覆錯誤或崩潰致使的文件丟失,證據的研究和分析。DFF提供了一個強大的體系結構和一些列有用的模塊。而autopsy則是提供了一個瀏覽器平臺。

反數字取證chkrootkit

kali視頻第38集Kali報告工具與系統服務總結

一次完整的滲透測試,最後要完成一份報告做爲一個小結。相應的,Kali Linux爲安全工程師準備了報告工具集:
系統服務

一、Dradis

Dradis用於提升安全檢測效率的信息共享框架(協做平臺)。Dradis提供了一個集中的信息倉庫,用於標記咱們目前已經作的工做和下一步計劃。基於瀏覽器的在線筆記。



二、keepnote

精簡的筆記本軟件,特色以下:
富文本格式:彩色字體、內置圖片、超連接,能保存網頁圖片文字等完整內容。
樹形分層組織內容,分門別類,一目瞭然。
全文搜索
綜合截圖
文件附件
集成的備份和恢復
拼寫檢查(經過gtkspell)
自動保存
內置的備份和恢復(zip文件存檔)

三、媒體捕捉工具Cutycapt

曾經介紹過的工具,將網頁內容截成圖片保存。

四、Recordmydesktop

屏幕錄像工具

五、證據管理

Maltego Casefile

六、MagicTree

是一個面向滲透測試人員的工具,能夠幫助攻擊者進行數據合併、查詢、外部命令執行(好比直接調用nmap)和報告生成。全部數據都會以樹形結構存儲,很是方便。

七、Truectypt

免費開源的加密軟件,同時支持Windows,OS,Linux等操做系統。

八、系統服務介紹



BeEF:對應XSS測試框架BeEF的啓動與關閉;
Dradis:對應筆記分享服務Dradis的啓動與關閉;
HTTP:對用Kali本機Web服務的啓動與關閉;
Metasploit:對應Metasploit服務的啓動與關閉;
Mysql:對應Mysql服務的啓動與關閉;
Openvas:對應Openvas服務的啓動與關閉;
SSH:對應SSH服務的啓動與關閉;(遠程鏈接最好不要開啓)

本週學習進度

完成了課本第九章第十章的學習,完成了kali視頻第36~38集的學習。

相關文章
相關標籤/搜索