文章目錄
- 第一章 軟件安全概述
- 1.1 信息定義
- 1.2 信息的屬性
- 1.3 信息安全
- 1.4 軟件安全
- 1.5 軟件安全威脅及其來源
- 1.5.1 軟件缺陷與漏洞
- 1.5.1.1 軟件缺陷
- 1.5.1.2 漏洞
- 1.5.1.3 軟件漏洞
- 1.5.1.4 軟件缺陷和漏洞的威脅
- 1.5.2 惡意軟件
- 1.5.2.1 惡意軟件的定義
- 1.5.2.2 惡意軟件的威脅
- 1.5.3 軟件破解
- 1.6 如何加強軟件安全防護
- 1.6.1 安全設計
- 1.6.2 保障運行環境
- 1.6.3 加強軟件自身行為認證
- 1.6.4 惡意軟件檢測與查殺
- 1.6.5 黑客攻擊與防護
- 1.6.6 系統還原
- 1.6.7 虛擬隔離
- 1.7 本章小結
- 第二章 軟件安全基礎
- 2.1 計算機磁盤的管理
- 2.1.1 磁盤結構簡介
- 2.1.2 主引導扇區結構
- 2.1.3 文件系統
- 2.1.3.1 FAT32文件系統
- 2.1.3.2 NTFS文件系統
- 2.2 計算機系統引導過程
- 2.2.1 BIOS的定義
- 2.2.2 BIOS引導模式
- 2.2.2.1 傳統BIOS引導
- 2.2.2.2 UEFI BIOS引導
- 2.3 PE文件格式
- 2.4 本章小結
- 第三章 軟件漏洞利用與防護
- 3.1 軟件漏洞
- 3.2 漏洞分類及其標準
- 3.2.1 漏洞分類
- 3.2.2 軟件漏洞產生的原因
- 3.2.2.1 技術因素
- 3.2.2.2 非技術因素
- 3.3 軟件漏洞的利用方式
- 3.3.1 本地攻擊模式
- 3.3.2 遠程主動攻擊模式
- 3.3.3 遠程被動攻擊模式
- 第四章 典型軟件漏洞機理分析
- 4.1 緩沖區溢出漏洞
- 4.1.1 棧溢出
- 4.1.2 堆溢出
- 4.1.3 格式化串漏洞
- 4.2 Web應用程序漏洞
- 4.2.1 Web應用安全概述
- 4.2.2 SQL注入漏洞
- 4.2.3 跨站腳本(XSS)
- 4.2.4 跨站請求偽造(CSRF)
- 4.2.5 其他Web漏洞
- 第五章 軟件漏洞的利用和發現
- 5.1 Exploit 結構
- 5.2 漏洞利用的具體技術
- 5.3 Shellcode開發
- 5.4 軟件漏洞挖掘技術及工具
- 第六章 Windows 系統安全機制及漏洞防護技術
- 第七章 構建安全的軟件
- 第八章 惡意代碼及其分類
第一章 軟件安全概述
1.1 信息定義
香農提出“信息是用來消除隨機不確定性的其他東西”,其他相關觀點:
- 信息是主體相對于客體的變化。
- 信息是確定性的增加。
- 信息是反應客觀世界中各種事物特征和變化的知識,是數據加工的結果,信息是有用的數據。
- 信息是有價值的消息。
信息的主要特點:
- 信息是有價值的:信息的價值是相對的;
- 信息是流動的:信源→信道→信宿。
1.2 信息的屬性
①真實性:對信息來源進行判斷,能對偽造來源的信息予以鑒別;
②保密性:保證機密信息不被竊聽,或竊聽者不能了解信息的真實含義;
③完整性:保證數據的一致性,防止數據被非法用戶篡改;
④可用性:保證合法用戶對信息和資源的使用不會被不正當地拒絕;
⑤不可抵賴性:建立有效的責任機制,防止用戶否認其行為;
⑥可控制性:對信息的傳播及內容具有控制能力;
⑦可審查性:對出現的網絡安全問題提供調查的依據和手段。
1.3 信息安全
信息安全是對信息的保密性、完整性和可用性的保持。
1.4 軟件安全
軟件安全是使軟件在受到惡意攻擊的情形下依然能夠繼續正確運行的工程化軟件思想。
1.5 軟件安全威脅及其來源
1.5.1 軟件缺陷與漏洞
1.5.1.1 軟件缺陷
軟件缺陷,常常又被稱作Bug,是指計算機軟件或程序中存在的某種破壞正常運行能力的問題、錯誤,或者隱藏的功能缺陷。缺陷的存在會導致軟件產品在某種程度上不能滿足用戶的需要。
1.5.1.2 漏洞
漏洞,是在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,從而使攻擊者能夠在未授權的情況下訪問或破壞系統。
1.5.1.3 軟件漏洞
軟件漏洞,是指軟件在設計、實現、配置策略及使用過程中出現的缺陷,其可能導致攻擊者在未授權的情況下訪問或破壞系統。
1.5.1.4 軟件缺陷和漏洞的威脅
①軟件正常功能被破壞:如原有軟件功能無法正常運行;
②系統被惡意控制:攻擊者獲得對目標系統的控制權;
③信息泄露:重要信息被攻擊者獲取到。
1.5.2 惡意軟件
1.5.2.1 惡意軟件的定義
“惡意軟件”是指那些設計目的是為了實施特定惡意功能的一類軟件程序。最典型的惡意軟件包括:計算機病毒、特洛伊木馬、后門、僵尸、間諜軟件、勒索軟件等。
1.5.2.2 惡意軟件的威脅
①已有軟件的功能被修改或破壞:
- 惡意軟件運行之后,可對同一運行環境中的其他軟件進行干擾和破壞,從而修改或破壞其他軟件的行為。
②目標系統中的重要數據被竊取:
- 惡意軟件運行之后,可以瀏覽、下載目標系統磁盤中的所有文件,甚至對目標系統的鍵盤擊鍵(如各類系統的登錄用戶名和口令)進行記錄和回傳。
③目標系統中的用戶行為被監視:
- 對目標系統進行屏幕監視、視頻監視、語音監聽等,這也是目前絕大部分特洛伊木馬所擁有的基本功能。
④目標系統被控制:
- 在屏幕監視的基礎上操控目標系統的鍵盤和鼠標輸入,從而達到對目標進行屏幕控制的目的。
1.5.3 軟件破解
軟件破解,即通過軟件自身程序進行逆向分析,發現軟件的注冊機制,對軟件的各類限制實施破解,從而使得非法使用者可以正常使用軟件。
1.6 如何加強軟件安全防護
1.6.1 安全設計
強化軟件工程思想,將安全問題融入到軟件的開發管理流程之中,在軟件開發階段盡量減少軟件缺陷和漏洞的數量。
- 微軟:信息技術安全開發生命周期流程(Secure Development Lifecycle for Information Technology,縮寫為SDL-IT)。
1.6.2 保障運行環境
保障軟件自身運行環境,加強系統自身的數據完整性校驗。
- 軟件完整性校驗:目前很多安全軟件在安裝之初將對系統的重要文件進行完整性校驗并保存其校驗值。
- 系統完整性校驗:目前有些硬件系統從底層開始保障系統的完整性。
1.6.3 加強軟件自身行為認證
加強系統自身軟件的行為認證——軟件動態可信認證:
- 在確保系統數據完整性的前提下,如何確保軟件的行為總是以預期的方式,朝著預期的目標運行,這就是軟件動態行為可信問題。
1.6.4 惡意軟件檢測與查殺
- 惡意軟件是軟件安全的一個主要安全威脅來源,針對系統的外來入侵通常都離不開外來惡意軟件的支撐。
- 反病毒軟件主要用來對外來的惡意軟件進行檢測。通常采用病毒特征值檢測、虛擬機、啟發式掃描、主動防御、云查殺等幾種方法來對病毒進行檢測。
1.6.5 黑客攻擊與防護
- 防火墻:網絡,主機防火墻(如天網、OutPost等)可依據黑客防護策略對進出主機的網絡流量進行有效攔截。
- 入侵檢測系統IDS
- 入侵防護系統IPS:基于網絡、基于主機(HIPS)
基于主機的漏洞攻擊阻斷技術:EMET
1.6.6 系統還原
系統還原技術的核心思想是將關鍵系統文件或指定磁盤分區還原為之前的備份狀態,從而將已有系統中的惡意程序全部清除,以保護系統安全。
- Windows自帶的“系統還原”功能
- Ghost還原軟件
- 還原卡、影子系統(PowerShadow)
1.6.7 虛擬隔離
虛擬機(如VmWare)
- 隔離風險:用戶可以通過在不同的虛擬機中分別進行相關活動(如上網瀏覽、游戲或網銀等重要系統登錄),從而可以將危險行為隔離在不同的系統范圍之內,保障敏感行為操作的安全性。
沙箱,也叫沙盤或沙盒(如SandBoxIE)
- 隔離風險:在沙箱之中的軟件行為及其產生的系統修改是被隔離起來的
- 常用于運行一些疑似危險樣本,從而可以隔離安全威脅,也可用于惡意軟件分析。
1.7 本章小結
1.什么是信息安全?信息為什么會存在安全問題?
2.什么是軟件安全?軟件為什么會存在安全問題?
3.軟件面臨的具體安全威脅有哪些?
4.什么是軟件缺陷和軟件漏洞?軟件缺陷和漏洞有何區別?軟件漏洞是否有可能轉變為軟件后門,為什么?
5.什么是惡意軟件?其對系統安全的具體影響包括哪些?
6.什么是軟件逆向工程?請舉例分析軟件逆向工程的積極意義,以及可能帶來的安全隱患。
7.為了保障軟件安全,目前典型的防護手段有哪些?
- 什么是沙箱與虛擬機?其在軟件安全領域有哪些具體應用?
第二章 軟件安全基礎
2.1 計算機磁盤的管理
硬盤是
- 控制代碼的靜態存儲倉庫:系統引導代碼、各類程序與數據等
- 惡意軟件進行控制權爭奪的中心
2.1.1 磁盤結構簡介
磁盤的三個基本參數:
- 磁頭數(Headers):表示目標扇區所在的硬盤磁頭編號,硬盤是由多個盤片組成的,而每個盤片上都有一個讀寫磁頭負責該盤片的讀寫操作,磁頭數最大為255(8個二進制位存儲)。每個盤片有兩個面,每個面有一個讀寫磁頭。
- 柱面數(Cylinders):表示目標扇區所在盤片的磁道號,最大為1023(10個二進制存儲)。每個盤片的半徑均為相同值R的同心圓(磁道)。
- 扇區數(Sectors):表示目標扇區所在的在磁道扇區號,最大為63(6個二進制存儲),每個扇區一般是512個字節。每個磁道被劃分為幾十個扇區。
硬盤尋址方式:
- 老式硬盤:每個磁道的扇區數相等,外道的記錄密度要遠低于內道
- 當前硬盤:采用“等密度結構”提高硬盤容量,尋址方式采用線性邏輯塊尋址,即以扇區為單位進行線性尋址
2.1.2 主引導扇區結構
主引導扇區也就是硬盤的第一個扇區(0面0磁道1扇區):
- 主引導記錄(MBR):前446個字節,存放著系統主引導程序(負責從活動分區中裝載并運行系統引導程序)
- 硬盤主分區表(DPT):占64個字節,記錄了磁盤的基本分區信息,四個分區項,每項16字節,分別記錄了每個主分區的信息(最多四個主分區)
- 引導扇區標記(ID):占2個字節,對于合法引導區,它等于0xAA55,判別引導區是否合法。
2.1.3 文件系統
文件系統是操作系統在計算機硬盤存儲和檢索數據的邏輯方法
2.1.3.1 FAT32文件系統
FAT32文件系統:文件分配表FAT是32位的,邏輯盤被劃分為三部分:引導區(BOOT區)、文件分配表(FAT區)、數據區(DATA區)
2.1.3.2 NTFS文件系統
NTFS是一個功能強大、性能優越的文件系統,它是以簇作為磁盤空間分配和回收的基本單位
2.2 計算機系統引導過程
2.2.1 BIOS的定義
BIOS(Basic Input and Output System):基本輸入輸出系統
- 存儲在主板BIOS Flas(或ROM)芯片
- 為計算機提供最底層的、最直接的硬件設置于控制
2.2.2 BIOS引導模式
2.2.2.1 傳統BIOS引導
開機→BIOS初始化→POST自檢→MBR→DBR→bootmgr(或NTLDR)→讀取BCD(或boot.ini)→啟動對應的系統
2.2.2.2 UEFI BIOS引導
UEFI(Unified Extensible Firmware Interface):統一可擴展固件接口,類似于一個低階操作系統,取消了POST自檢,速度快
開機→BIOS初始化→啟動管理器(EFI分區bootxxx.efi)→讀取BCD→啟動對應的系統
2.3 PE文件格式
PE就是Portable Executable(可移植的執行體),它是Win32可執行文件的標準格式
2.4 本章小結
1.硬盤主引導區由哪幾個部分構成?fdisk/mbr命令會重寫整個主引導扇區嗎?
2.打開一臺計算機,描述從按下Power 鍵開始計算機每一步所做的具體工作。
6.請比較“刪除文件到回收站”與“永久刪除文件”的具體技術區別,對于后者,如何手工恢復?請實踐。
7.快速格式化、普通格式化以及低級格式化的具體技術區別有哪些?請具體實踐和分析。
8.在使用某些數據恢復軟件進行數據恢復時,為何恢復.jpg和.doc類文件的成功率要高于.txt類文件?
第三章 軟件漏洞利用與防護
3.1 軟件漏洞
漏洞,通常也稱脆弱性(vulnerability),RFC2828將漏洞定義為“系統設計、實現或操作管理中存在的缺陷或者弱點,能被利用而違背系統的安全策略”。軟件漏洞的要素:
- 受影響的軟件版本
- POC(驗證漏洞存在的代碼,Proof of Concept)
- 漏洞觸發的條件
- 攻擊能力
3.2 漏洞分類及其標準
3.2.1 漏洞分類
按漏洞可能對系統造成的直接威脅,可分為:
- 獲取訪問權限漏洞
- 權限提升漏洞
- 拒絕服務攻擊漏洞
- 惡意軟件植入漏洞
- 數據丟失或泄露漏洞
按漏洞的成因,可分為:
- 輸入驗證錯誤
- 訪問驗證錯誤
- 競爭條件錯誤
- 意外情況處理錯誤
- 設計錯誤
- 配置錯誤
- 環境錯誤
按漏洞的嚴重性的分級,可分為:
- A類漏洞(高):遠程和本地管理員極限。威脅性最大的漏洞,往往有較差的系統管理或錯誤設置造成。
- B類漏洞(中):普通用戶權限、權限提升、讀取受限文件,以及遠程和本地拒絕服務。較為嚴重的漏洞,例如允許本地用戶獲得增加的和未授權的訪問。
- C類漏洞(低):遠程非授權文件存取、口令恢復、欺騙,以及服務器信息泄露。嚴重性不是很大的漏洞,例如允許拒絕服務的漏洞。
按照對漏洞被利用方式的分類,可分為:
- 主動攻擊
- 遠程主動攻擊
- 遠程被動攻擊
3.2.2 軟件漏洞產生的原因
3.2.2.1 技術因素
1.輸入驗證錯誤:缺少輸入驗證或輸入驗證存在缺陷,是造成許多嚴重漏洞的主要原因。這些漏洞包括緩沖區溢出、SQL注入以及、跨站點執行腳本,常見于web上的動態交互頁面,比如ASP頁面等。產生輸入驗證錯誤漏洞的原因是未對用戶提供的輸入數據的合法性做充分的檢查。原因主要有:
- 沒有在安全的上下文環境中進行驗證
- 驗證代碼不集中
- 不安全的組件邊界
2.訪問驗證錯誤:訪問驗證錯誤漏洞的產生是由于程序的訪問驗證部分存在某些可利用的邏輯錯誤或用于驗證的條件不足以確定用戶的身份而造成的。可分為:
- 會話管理薄弱或缺失
- 身份鑒別薄弱或缺失
- 授權薄弱或缺失
3.競爭條件:競爭條件攻擊是一種異常行為,是對事件相對緊湊的依賴關系的破壞而引發的,多線程并發訪問破壞事件間的依賴關系引發狀態的不一致。具備兩個必要條件:
- 有兩個或兩個以上的事件發生:兩個事件間有一定的時間間隔并且有一定的依賴關系
- 攻擊者可以改變兩個事件間的依賴關系
4.意外情況處置錯誤:意外情況處置錯誤漏洞的產生是由于程序在它的實現邏輯中沒有考慮到一些本應該考慮到的意外情況。
5.邏輯設計錯誤:包含了系統設計和系統實現上的錯誤,如整數溢出,密碼找回。
6.配置錯誤:配置錯誤漏洞的產生是由于系統和應用的配置有錯誤,或者是軟件安裝在錯誤的位置,或是參數配置錯誤,或是訪問權限配置錯誤等。
7.環境錯誤:是一些由于環境變量的錯誤或惡意設置而造成的漏洞。
3.2.2.2 非技術因素
- 缺乏軟件開發規范
- 缺乏進度控制
- 缺乏安全測試
- 缺乏安全維護
- 不穩定的開發團隊
3.3 軟件漏洞的利用方式
3.3.1 本地攻擊模式
本地攻擊模式的攻擊者是系統本地的合法用戶或已經通過其他攻擊方法獲得了本地權限的非法用戶,它要求攻擊者必須在本地擁有訪問權限,才能發起攻擊。
3.3.2 遠程主動攻擊模式
攻擊者通過網絡連接目標,利用工具掃描目標,發現漏洞,利用漏洞工具自動植入攻擊代碼。
3.3.3 遠程被動攻擊模式
攻擊者通過網絡給目標發送郵件或者超鏈接,用戶打開網頁,點擊郵件附件或網頁中的文檔,觸發漏洞。
- 網頁掛馬是結合瀏覽器或瀏覽組件的相關漏洞來觸發第三方惡意軟件下載執行的,也是目前危害最大的一種遠程被動攻擊模式。攻擊者通過在正常的網頁中插入一段漏洞利用代碼。瀏覽者在打開該頁面的時候,漏洞被觸發,惡意代碼代碼被執行然后下載并運行某木馬的服務器端程序,進而導致瀏覽器的主機被控制。
第四章 典型軟件漏洞機理分析
4.1 緩沖區溢出漏洞
“緩沖區”是指內存空間中用來存儲程序運行時臨時數據的一片大小有限并且連續的內存區域。 根據程序中內存的分配方式和使用目的,緩沖區一般可分為棧和堆兩種類型。