• 沒有找到結果。

資訊產品安全檢測技術整合型研究

N/A
N/A
Protected

Academic year: 2021

Share "資訊產品安全檢測技術整合型研究"

Copied!
426
0
0

加載中.... (立即查看全文)

全文

(1)

行政院國家科學委員會專題研究計畫 成果報告

資訊產品安全檢測技術整合型研究

研究成果報告(完整版)

計 畫 類 別 : 個別型 計 畫 編 號 : NSC 99-2623-E-009-005-D 執 行 期 間 : 99 年 01 月 01 日至 99 年 12 月 31 日 執 行 單 位 : 國立交通大學資訊工程學系(所) 計 畫 主 持 人 : 謝續平 共 同 主 持 人 : 游逸平 計畫參與人員: 碩士班研究生-兼任助理人員:羅世融 碩士班研究生-兼任助理人員:何柏瑲 碩士班研究生-兼任助理人員:田璨榮 碩士班研究生-兼任助理人員:王深弘 碩士班研究生-兼任助理人員:蔡羽軒 碩士班研究生-兼任助理人員:陳思倢 碩士班研究生-兼任助理人員:吳翰融 碩士班研究生-兼任助理人員:莊睦昂 碩士班研究生-兼任助理人員:林聖偉 碩士班研究生-兼任助理人員:劉晏如 碩士班研究生-兼任助理人員:劉芳瑜 碩士班研究生-兼任助理人員:王嘉偉 大專生-兼任助理人員:曾子建 博士班研究生-兼任助理人員:王繼偉 博士班研究生-兼任助理人員:許家維 博士班研究生-兼任助理人員:李秉翰 處 理 方 式 : 本計畫可公開查詢

(2)
(3)

1

行政院國家科學委員會補助專題研究計畫

■ 成 果 報 告

□期中進度報告

資訊產品安全檢測技術整合型研究案

計畫類別:□ 個別型計畫 ■整合型計畫 計畫編號: 執行期間: 2010 年 1 月 1 日至 2010 年 12 月 31 日 計畫主持人:謝續帄教授 共同主持人:游逸帄助理教授 計畫參與人員:王繼偉、蔡羽軒、田璨榮、李秉翰、許家維、朱信儒、王嘉偉、 朱慶峰、劉芳瑜、卓政逸、宋穎昌、施汎勳、游釗俊、蘇修醇、江孟寰、劉晏如、 鍾佳妤、曾子建、李介豪、饒彥章、馬志舜 成果報告類型(依經費核定清單規定繳交):□精簡報告 ■完整報告 本成果報告包括以下應繳交之附件: □赴國外出差或研習心得報告一份 □赴大陸地區出差或研習心得報告一份 □出席國際學術會議心得報告及發表之論文各一份 □國際合作研究計畫國外研究報告書一份 處理方式:除產學合作研究計畫、提升產業技術及人才培育研究計畫、列管計畫 及下列情形者外,得立即公開查詢 □涉及專利或其他智慧財產權,□一年□二年後可公開查詢 執行單位: 中華民國 2010 年 12 月 21 日

(4)

2

1 摘要

本計畫為兩年計畫,本報告為第二年的期末報告。本計畫於今年度實現下 列兩大階段性目標:(一)本系統對資安人員在面對未知的檔案目標進行鑑識判 別時,將能有效的提供判斷依據。(二)尋找軟體原始碼中的漏洞,以期軟體開 發人員在設計過程中能及早發現漏洞加以更正。 兩大計畫目標惡意程式動態分析與原始碼漏洞分析雖為軟體安全領域,但 在研究上有著不同的意義與難處。在思考的維度上,惡意程式動態分析透過直 接運行測詴樣本,利用虛擬機器與多項行為分析技術來協助鑑識人員推斷該樣 本是否為惡意檔案。本研究計畫利用運行時期的行為,觀測任何有關檔案系統、 程序呼叫等多種具代表性的行為模式。利用虛擬機器的最高權限的優勢,完全 地觀察目標檔案。另一方面,原始碼漏洞分析則直接將原始碼作掃描,檢查是 否含有不安全的程式語法或程式漏洞。因此,原始碼漏洞分析可被認為是事前 的預防,開發者在還沒運行其編譯程式之前,可藉由分析原始碼來避免往後被 攻擊的風險。原始碼靜態分析可分析所有行為流程以及完整的編譯資訊,但此 運算複雜度非常高,許多問題為 NP-Hard 或 Undecidable 問題,無法在 Polynomial 時間內解決,甚至無法判定是否有解。但由於原始碼取得之不易,且眾多的應 用程式早已流通在網路之中,所以大多數的情況皆屬於事後的分析與偵測。而 此部分可以利用目標(一)所開發的惡意軟體程式分析帄台來涵蓋。

(5)

3 範疇。在實作部分來看,原始碼漏洞分析以靜態分析為主要之手法,原始碼中 保留較多的資訊,而如何整理歸納這些資訊成為一個撰寫程式的規範,來協助 開發者和使用者復原修改其原始碼以達到程式安全之目標。而惡意程式行為分 析則利用動態分析來獲得資訊,由於編譯過的二進位檔少了許多抽象化的物件 資訊,如何利用靜態分析與動態分析達到互相補足其缺陷,將是本計劃的重點 之一。 為了達到目標(一),本計劃將研究如何取出所有檔案相關的資訊以提供使 用者參考。去年的研究成果已完成了針對二進位的可執行檔,透過虛擬機器內 外部分析的方式,找出其侵入行為與隱藏行為。但由於並非所有檔案皆可以被 執行。在今年度,本研究計畫加上了對普通檔案文件的分析方法。由於普通文 件無法直接利用去年成果之分析手法來獲得相關行為資訊,故開發了檔案文件 分析系統來互補與加強分析範圍。由於惡意文件檔案可能利用應用程式漏洞來 取得執行控制權,進一步入侵作業系統。但要模擬市面上全部有漏洞的應用程 式是一件極不可能達到的事情,所以,我們將針對檔案內所包含的字串、載入 的系統函式、資訊熵以及利用 x86 模擬器來偵測是否有偵測記憶體位置之行為, 來達到此目標。此方式結合了靜態與動態分析的技術,提供鑑識人員一些辨識 的依據。 在滿足目標(二)的部分,去年度已完成一原始碼漏洞分析系統,並且利 用國際知名之效能評估樣本來評估本系統。為了能夠客製化和快速地實作出該 系統,我們結合了目前的商業軟體 Fortify SCA,藉著添加自訂安全規則,並使

(6)

4

用相關 Shareware、Freeware 來增強 Fortify SCA。除了可以快速地且具有彈性地 將本研究之創新技術應用到實務上,也可以補完原本 Fortify SCA 所缺少的檢測 項目。今年度將擴大實作程式語言並且提出安全的程式設計原則,我們將針對 Java 與 VB.NET 兩種程式語言,提出了軟體資訊安全方面的程式設計原則,並 且將漏洞作七大類之分類,再從分類中的每個漏洞作以下幾點詳盡之介紹,包 含此漏洞出現之原因、漏洞在何種狀況出現、漏洞出現之相關條件、出現漏洞 之錯誤程式碼範例、此程式碼範例之解說、攻擊者可能之攻擊行為以及漏洞之 解決方法。接著我們收集現今軟體市場中,以此兩種語言寫成之應用程式,並 針對出現之重大漏洞之入侵方法做整理與研析,並對此應用程式之開發團隊提 出的相關修改作較完整的分析與討論。在不安全 Java 與 VB.NET 原始碼檢測工 具中,我們已經提出相對應的程式架構,相信在使用其程式架構完全實作後, 能夠針對原始程式碼作靜態分析上,能夠有更好的精準度。 本年度將延續上一年之研究,持續地在設計研究上有創新的想法。事後的 惡意程式偵測分析與事前的原始碼漏洞分析,除了能被動地避免惡意程式的攻 擊以外,還能主動地提供給開發人員一個良好的設計準則。透過新穎地軟體開 發技術,以及整合市面上數種頗具指標性的工具,在最短的時間內有效地完成 兩大目標。以上可知,本計劃所著重的兩大目標,不僅是有效地且完全地涵蓋 軟體安全的實作、思考層面。本計劃不僅投入了大量人力在研究實作的問題之 上,還專注於報告呈現之效果。本計劃書詳細地條列研究相關個例,完整地介 紹其背景知識以及相關說明,期許能夠有更豐富的研究成果供後人參考。

(7)

5

2 目錄

2.1 總目錄

1

摘要 ... 2

2

目錄 ... 5

2.1 總目錄. ... 5

2.2 圖目錄. ... 8

2.3 表目錄. ... 15

3

計畫簡介 ... 18

3.1 計畫緣起 ... 18

3.2 計畫時程(甘特圖) ... 19

3.3 計畫目標 ... 21

3.4 計畫內容(含工作項目) ... 22

3.5 計畫成果 ... 24

4

執行概要 ... 28

4.1

研究背景簡介 ... 28

4.1.1 檔案隱藏 ... 29 4.1.2 登錄機碼隱藏 ... 32 4.1.3 MBR磁區修改 ... 47 4.1.4 SSDT Hooking ... 61 4.1.5 IDT ... 72 4.1.6 可執行檔檔格式解析 ... 85

(8)

6

4.1.7 資訊熵 ... 103

4.1.8 偵測動態取得堆疊記憶體技術 ... 116

4.1.9 Input Validation and Representation (Java) ... 124

4.1.10 API Abuse (Java) ... 136

4.1.11 Security Features (Java) ... 140

4.1.12 Time and State (Java) ... 145

4.1.13 Errors (Java) ... 147

4.1.14 Code Quality (Java) ... 149

4.1.15 Encapsulation (Java) ... 152

4.1.16 Environment (Java) ... 159

4.1.17 Input Validation and Representation (VB.NET) ... 161

4.1.18 API Abuse (VB.NET) ... 173

4.1.19 Security Features (VB.NET) ... 176

4.1.20 Time and State (VB.NET) ... 183

4.1.21 Errors (VB.NET) ... 185

4.1.22 Code Quality (VB.NET) ... 190

4.1.23 Encapsulation (VB.NET) ... 192

4.1.24 Environment (VB.NET) ... 195

4.1.25 FCKeditor.Java 2.4 Denial of Service (Java) ... 199

4.1.26 Java Development Toolkit Command Injection (Java) ... 201

4.1.27 Apache MyFaces uses an ecncrypted View State without a MAC (Java) ... 204

4.1.28 Free Web chat 2.0 Denial of Service (Java) ... 206

4.1.29 Apache Tomcat Allows Remote Attackers to Cause Denial of Service (Java) ... 208

4.1.30 The PackageManagerService class in Android 1.5 through 1.5 CRB42 (Java) ... 210

4.1.31 Novell OpenSUSE Workflow Administration and Management platform XSS (Java) ... 212

4.1.32 Directory traversal vulnerability of Tomcat 6.0 (Java) ... 215

4.1.33 Java CMM readMabCurveData stack overflow (Java) ... 217

4.1.34 Ad Server Solutions Affiliate Software Java 4.0 SQL Injection (Java) 221 4.1.35 Microsoft VBE6.dll Stack Memory Corruption (VB.NET) ... 223

4.1.36 Microsoft Visual Basic for Applications Buffer Overflow (VB.NET) ... 224

(9)

7

4.1.38 Microsoft Visual Basic Buffer Overflow (VB.NET) ... 228

4.1.39 Microsoft Visual Basic T-SQL Object Buffer Overflow (VB.NET) ... 229

4.2 研究架構及方法 ... 230

4.2.1 檔案隱藏 ... 234 4.2.2 登錄機碼隱藏 ... 236 4.2.3 MBR磁區修改 ... 254 4.2.1 SSDT Hooking ... 257 4.2.2 IDT Hooking ... 268 4.2.3 文件檔隱藏 Shellcode ... 270 4.2.4 原始碼靜態分析模式 ... 278 4.2.5 原始碼靜態分析相關議題 ... 282 4.2.6 原始碼靜態分析整合帄台 ... 284 4.2.7 工具回報準確率與危險層級評估 ... 287 4.2.8 原始碼整合分析工具-各項工具介紹 ... 289

4.3 實驗設計(或模擬設計)及實作 ... 296

4.3.1 文件檔案測詴結果報告 ... 301 4.3.2 惡意程式樣本測詴結果報告 ... 317 4.3.3 原始碼靜態分析工具 - 效能評估 ... 339 4.3.4 原始碼靜態分析工具-回報準確率評估 ... 355

5

結論與建議 ... 358

6

參考文獻 ... 361

7 附錄 A-惡意帄台分析安裝及操作手冊 ... 367

8. 附錄 B –整合原始碼分析工具安裝及操作手冊 ... 384

(10)

8

圖目錄

圖表4-1

W

INDOWS

ADS內容顯示 ... 31

圖表4-2

W

INDOWS

登錄機碼截圖 ... 33

圖表4-3

W

INDOWS

登錄機碼

CELL

之資料結構 ... 38

圖表4-4

W

INDOWS

登錄機碼

BIN

之資料結構,在

BIN

的最前面也有一個

HEADE

R

,稱為HBIN ... 40

圖表4-5以實際在

REGEDIT

中看到的狀況 ... 41

圖表4-6登錄機碼

KEY

,

PATH

,和

VALUE

資料結構圖 ... 42

圖表4-7硬碟分割表(

PARTITION TABLE

)結構圖(引用自

HTTP

://

WWW

.

MSSERVE

RMAG

.

COM

.

TW

/

TECHNICWORDS

/020829.

ASPX

) ... 51

圖表4-8延伸硬碟分割表(E

XTEND PARTITION TABLE

)結構圖(引用自

HTTP

:

//

WWW

.

MSSERVERMAG

.

COM

.

TW

/

TECHNICWORDS

/020829.

ASPX

) ... 53

圖表4-9邏輯分割第一個磁區的資料結構圖(引用自

HTTP

://

WWW

.

MSSERVER

MAG

.

COM

.

TW

/

TECHNICWORDS

/020829.

ASPX

) ... 53

圖表4-104個主要分割(左)及3個主要分割和1個延伸分割(右)示意圖

(引用自

HTTP

://

WWW

.

MSSERVERMAG

.

COM

.

TW

/

TECHNICWORDS

/020829.

ASPX

) 5

4

圖表4-113個主要分割和

1

個延伸分割指標關係圖(引用自

HTTP

://

WWW

.

(11)

9

圖表4-12開機管理程式安裝在

MBR、開機磁區與作業系統的關係(引自

HTTP

://

LINUX

.

VBIRD

.

ORG

/

LINUX

_

BASIC

/0510

OSLOADER

.

PHP

圖1.2.1) 57

圖表4-13開機管理程式的選單功能與控制權轉交功能示意圖(引自於

H

TTP

://

LINUX

.

VBIRD

.

ORG

/

LINUX

_

BASIC

/0510

OSLOADER

.

PHP

圖1.2.2) .. 58

圖表4-14P

ROTECTION

R

ING

L

EVEL

與受保護的層級圖(圖表引用自:

HTTP

:/

/

EN

.

WIKIPEDIA

.

ORG

/

WIKI

/R

ING

_(

COMPUTER

_

SECURITY

)) ... 62

圖表4-15簡化後的W

INDOWS

NT

A

RCHITECTURE

簡圖(引用自:

HTTP

://

TECHNET

.

MICROSOFT

.

COM

/

EN

-

US

/

LIBRARY

/

CC

768129.

ASPX

) ... 63

圖表4-16W

IN

32

SUBSYSTEM

與N

ATIVE

API之間的相依關係(引用自:

U

NDOC

UMENTED

W

INDOWS

2000

S

ECRETS

C

HAP

2

F

IGURE

2-1

P.96) ... 64

圖表4-17D

EVICE

I

O

C

ONTROL

()

透過I

NT

2E

H

呼叫N

T

D

EVICE

I

O

C

ONTROL

()

(圖

表引用自U

NDOCUMENTED

W

INDOWS

2000

S

ECRETS

C

HAP

2

E

XAMPLE

2-1

P

.97)

.... 64

圖表4-18S

YSTEM

S

ERVICE

D

ESCRIPTOR

T

ABLE

結構(引用自:

U

NDOCUMENTED

W

IN

DOWS

2000

S

ECRETS

C

HAP

5

F

IGURE

5-1

P.267) ... 66

圖表4-19S

YSTEM

S

ERVICE

D

ESCRIPTOR

與S

YSTEM

S

ERVICE

T

ABLE

結構(引用自:

U

NDOCUMENTED

W

INDOWS

2000

S

ECRETS

C

HAP

5

L

ISTING

5-1

P.268) .. 66

圖表4-20Z

W PREFIX FUNCTION

內容(圖表引用自U

NDOCUMENTED

W

INDOWS

2000

(12)

10

圖表4-21在

WINDOWS

2000下存取非法的記憶體(圖表引用自U

NDOCUMENTED

W

INDOWS

2000

S

ECRETS

C

HAP

4

F

IGURE

4-5

P

.188) ... 70

圖表4-22P

AGING

是記憶體保護的方式之一(圖表引用自:

HTTP

://

EN

.

WIKI

PEDIA

.

ORG

/

WIKI

/V

IRTUAL

_

MEMORY

) ... 71

圖表4-23IDT對GDT(或LDT)及D

ESTINATION

C

ODE

S

EGMENT

的關係(圖表引用

自:

I

NTEL

®

64

AND

IA-32

A

RCHITECTURES

S

OFTWARE

D

EVELOPER

S

M

ANUA

L

V

OLUME

3A:

S

YSTEM

P

ROGRAMMING

G

UIDE

,

P

ART

1

,

F

IGURE

6-5) .. 74

圖表4-24

STACK USAGE WITHOUT PRIVILEGE

-

LEVEL CHANGE

(圖表引用自:

I

NTEL

®

64

AND

IA-32

A

RCHITECTURES

S

OFTWARE

D

EVELOPER

S

M

ANUAL

V

OLUME

3A:

S

YSTEM

P

ROGRAMMING

G

UIDE

,

P

ART

1

,F

IGURE

6-4) ... 75

圖表4-25

STACK USAGE WITH PRIVILEGE

-

LEVEL CHANGE

(圖表引用自:

I

NTEL

®

64

AND

IA-32

A

RCHITECTURES

S

OFTWARE

D

EVELOPER

S

M

ANUAL

V

OLUME

3A:

S

YSTEM

P

ROGRAMMING

G

UIDE

,

P

ART

1

,F

IGURE

6-4) ... 75

圖表4-26

GATE DESCRIPTOR

的格式

(圖表引用自:

I

NTEL

®

64

AND

IA-32

A

R

CHITECTURES

S

OFTWARE

D

EVELOPER

S

M

ANUAL

V

OLUME

3A:

S

YSTEM

P

ROGRAM MING

G

UIDE

,

P

ART

1

,F

IGURE

6-2) ... 77

圖表4-27CPU中的資料結構暫存器 ... 78

圖表4-28IDTR

STRUCTURE

... 79

(13)

IA-11

32

A

RCHITECTURES

S

OFTWARE

D

EVELOPER

S

M

ANUAL

V

OLUME

3A:

S

YSTEM

P

R

OGRAMMING

G

UIDE

,

P

ART

1

,F

IGURE

6-1) ... 79

圖表4-30IDTR中

LIMIT

BASE

與IDT的對應及IDT

VECTOR

的內容解析(圖表

引用自:

HTTP

://

LODA

.

HALA

01.

COM

/2009/04/

LINUX

圖(五),

X

86

IDT架

構) . 81

圖表4-31前32個

INTERRUPT VECTOR

的用途

(圖表引用自:

HTTP

://

EN

.

WIKIP EDIA

.

ORG

/

WIKI

/I

NTERRUPT

_

DESCRIPTOR

_

TABLE

) ... 82

圖表

4-32PE文件的結構 ... 86

圖表

4-33

載入函式呼叫流程 ... 95

圖表

4-34

重新寫入載入函式位址 ... 101

圖表

4-35

資訊熵的分部曲線圖 ... 104

圖表4-36公司尾牙抽獎的階層式機率事件 ... 107

圖表4-37公司尾牙抽獎的直接式機率事件 ... 107

圖表

4-38

N

OTEPAD

.

EXE

的每一個

BYTE

值出現頻率 ... 114

圖表

4-39

NOTEPAD

.

EXE

篩選過大值(00跟FF)的比較 ... 114

圖表

4-40

ROBERT

LYDA,

JAMES

HAMROCK

統計出來檔案類型的資訊熵

... 115

圖表

4-41錯誤顯示圖 ... 203

(14)

12

圖表

4-43產生S

TACK OVERFLOW

之程式碼 ... 219

圖表

4-44產生C

ORRUPT MEMORY

之程式碼 ... 219

圖表

4-45

惡意軟體程式分析帄台概念圖 ... 232

圖表

4-46

惡意軟體程式分析帄台分析差異流程圖 ... 232

圖表

4-47

檔案隱藏偵測流程 ... 235

圖表4-48登錄檔內外比對架構圖 ... 238

圖表4-49偵測登錄檔隱蔽式修改之流程圖 ... 239

圖表4-50取得內部登錄檔資訊之流程圖 ... 240

圖表4-51取得外部登錄檔資訊之流程圖 ... 252

圖表4-52實作流程圖 ... 255

圖表4-53程式碼<1> ... 255

圖表4-54程式碼<2> ... 255

圖表4-55程式碼<3> ... 255

圖表4-56撰寫D

RIVER

時,D

RIVER

的進入點相當於

MAIN

()

(圖表引用自U

NDO CUMENTED

W

INDOWS

2000

S

ECRETS

C

HAP

3

L

ISTING

3-1

P

.124) .... 259

圖表4-57常用的SCM

ANAGER

提供的

FUNCTION

(圖表引用自U

NDOCUMENTED

W

IN DOWS

2000

S

ECRETS

C

HAP

3

T

ABLE

3-3

P

.144) ... 259

圖表4-58

KERNEL

-

MODE

D

RIVER PART

1 ... 261

(15)

13

圖表4-60

USER

-

MODE

程式

PART

1 ... 263

圖表4-61

USER

-

MODE

程式

PART

2 ... 264

圖表4-62

USER

-

MODE

程式

PART

3 ... 265

圖表4-63

RETR

SSDT

WORKFLOW

... 266

圖表4-64

DUMPING THE

IDT

WORK FLOW

... 268

圖表4-65檔案文件檢測流程圖 ... 270

圖表

4-66FSA

M

ODEL

... 281

圖表

4-67系統架構圖 ... 285

圖表

4-68分析帄台介面 ... 286

圖表

4-69分析帄台書面報表 ... 286

圖表

4-70

檔案檢測系統開機 ... 296

圖表

4-71

使用選項 ... 297

圖表

4-72

檔案檢測系統使用者介面 ... 297

圖表

4-73

檔案檢測系統結果報告說明 ... 298

圖表

4-74對目錄進行處理的D

IR

F

ORENSER

.

SH

的使用方法 ... 299

圖表

4-75檔案檢測系統執行結果 ... 300

圖表4-76選擇"

START

_MBA.

SH

"開始執行分析程式。 ... 314

圖表4-77選擇在"終端機"執行該分析程式。 ... 314

圖表4-78選擇檔案按鈕。 ... 315

(16)

14

圖表4-79選擇檔案視窗。 ... 315

圖表4-80執行中的終端機顯示進度條 ... 316

圖表

4-81NIST

SAMATE

G

OOD CASE

分類 ... 341

圖表

4-82SAMATE

G

OOD CASE

檢測結果比較... 343

圖表

4-83NIST

SAMATE

B

AD CASE

分類 ... 343

圖表

4-84SAMATE

B

AD CASE

檢測結果比較 ... 345

圖表

4-85S

TANFORD

S

ECURI

B

ENCH

M

ICRO

G

OOD CASE

樣本分類 ... 346

圖表

4-86F

ORTIFY

SCA與YASCA檢測S

TANFORD

S

ECURI

B

ENCH

M

ICRO

G

OOD CASE

結果比較 ... 348

圖表

4-87S

TANFORD

S

ECURI

B

ENCH

M

ICRO

B

AD CASE

樣本分類... 349

圖表

4-88F

ORTIFY

SCA與YASCA檢測S

TANFORD

S

ECURI

B

ENCH

M

ICRO

B

AD CASE

結果比較 ... 350

圖表

4-89自訂VB.NET測詴樣本漏洞分類 ... 352

圖表

4-90F

ORTIFY

SCA與F

X

C

OP

檢測自訂VB.NET測詴樣本結果比較 . 353

圖表

4-91分析帄台GUI及報表 ... 355

(17)

15

2.2 表目錄

表格

3-1年進度甘特圖 ... 19

表格

4-1W

INDOWS

主要登錄機碼目錄名稱 ... 34

表格

4-2登錄機碼實際存放位置(

HIVE

檔) ... 35

表格

4-3本機登錄機碼主要子目錄 ... 36

表格

4-4HKEY_USERS中各

SUBKEY

簡介 ... 36

表格

4-5HKEY_CURRENT_USER

底下各子目錄簡介 ... 37

表格

4-6標準的MBR結構 ... 49

表格

4-7主要分割及延伸分割數量組合 ... 51

表格

4-8硬碟分割結構資訊 ... 51

表格

4-9CPU中的

SEGMENT REGISTER

... 78

表格

4-10IMAGE_FILE_HEADER

F

ILE

H

EADER

的名稱與意義對照表 .... 88

表格

4-11IMAGE_OPTIONAL_HEADER介紹 ... 88

表格

4-12

PE

SECTION

的介紹 ... 90

表格

4-13IMAGE_DATA_DIRECTORY

結構陣列 ... 96

表格

4-14每年新增安全漏洞數量 ... 197

表格

4-15資安漏洞統計分類 ... 197

表格

4-16F

X

C

OP

對.NET安全性議題 ... 291

(18)

16

表格

4-18F

ORTIFY

SCA誤判之SAMATE漏洞項目 ... 341

表格

4-19YASCA檢測SAMATE

G

OOD CASE

結果 ... 342

表格

4-20YASCA誤判之SAMATE漏洞項目 ... 342

表格

4-21F

ORTIFY

SCA檢測SAMATE

B

AD CASE

結果 ... 344

表格

4-22F

ORTIFY

SCA未檢出之SAMATE漏洞項目 ... 344

表格

4-23YASCA檢測SAMATE

B

AD CASE

結果 ... 344

表格

4-24YASCA未檢出之SAMATE漏洞項目 ... 344

表格

4-25F

ORTIFY

SCA檢測S

TANFORD

S

ECURI

B

ENCH

M

ICRO

G

OOD CASE

結果 347

表格

4-26F

ORTIFY

SCA誤判之S

TANFORD

S

ECURI

B

ENCH

M

ICRO

漏洞項目 . 347

表格

4-27YASCA檢測S

TANFORD

S

ECURI

B

ENCH

M

ICRO

G

OOD CASE

結果 .... 347

表格

4-28YASCA誤判之S

TANFORD

S

ECURI

B

ENCH

M

ICRO

漏洞項目 ... 347

表格

4-29F

ORTIFY

SCA檢測S

TANFORD

S

ECURI

B

ENCH

M

ICRO

B

AD CASE

結果 349

表格

4-30F

ORTIFY

SCA未檢出S

TANFORD

S

ECURI

B

ENCH

M

ICRO

漏洞項目 . 349

表格

4-31YASCA檢測S

TANFORD

S

ECURI

B

ENCH

M

ICRO

B

AD CASE

... 350

表格

4-32YASCA未檢出S

TANFORD

S

ECURI

B

ENCH

M

ICRO

漏洞項目 ... 350

表格

4-33F

ORTIFY

SCA檢測自訂VB.NET測詴樣本結果 ... 353

表格

4-34F

X

C

OP

檢測自訂VB.NET測詴樣本結果 ... 353

表格

4-35工具準確率公式代號 ... 355

(19)

17

表格

4-37VB.NET語言工具回報準確率結果 ... 356

(20)

18

3 計畫簡介

本章節中,分別敘述了計畫時程、計畫目標還有計畫成果。於下兩章節中, 依序描述惡意程式分析帄台與軟體原始碼漏洞分析之執行概要。

3.1 計畫緣起

在資訊安全研究領域中,為了快速因應駭客發起之攻擊以及新出現的惡意程 式,如何快速的對所遭受的進行分析,乃成為極重要的研究課題。首先,由於 目前的新型攻擊皆朝向所謂的 0-Day Vulnerability 發展,傳統以特徵碼為主要手 段的偵測保護程式,便無法在第一時間內偵測出攻擊的發生,也因此無法在攻 擊發生之初期立即開始分析程序。其次,目前專業的資安人員在鑑識分析時, 必頇倚賴自身的經驗法則做出假設,從以往的入侵攻擊手法,搭配各種彼此獨 立的分析程式,才能徹底得知該攻擊之特性,缺乏單一系統性的的分析程序與 工具,造成過程中的人力與時間的消耗。分析程序的被動與緩慢,乃威脅現今 資訊安全的主要原因之一。為了加速分析程序的進行,我們必頇先了解目前技 術的不足之處,以研發出更先進的分析系統。 為此,中山科學研究院與國立交通大學共同成立『交大中科院聯合研究中心

(NCTU & CSIST Joint Research Center)』,此研究中心同時為『國立交通大學資通安

全研究與教育中心(TWISC @ NCTU, Taiwan Information Security Center at NCTU)』,

(21)

19 使用產出之分析系統,實際分析惡意程式與駭客攻擊,因此將可對現今新型態 的網路攻擊或惡意程式技術有深刻的認知了解,提升其資訊安全維護概念。目 前資訊人員在資訊安全的概念培養仍嫌不足,許多資安事件並非因軟硬體上的 漏洞導致,而歸因於使用人員的大意疏忽,因此參與人員的資安意識提升,亦 在資安維護中佔同樣重要成分。此外,由於進行軟體原始碼漏洞分析時,過程 中將用到許多軟體開發中的安全規則,因此開發人員將可培養出完善的程式安 全設計理念。

3.2 計畫時程(甘特圖)

依據計畫時程,偵測文件類型檔案項目已順利在六月完成,將會有一份技 術報告繳交。剩下未完成之項目將會在下半年內完成。詳細實際執行時程甘特 圖如下: 表格 3-1 年進度甘特圖 工作項目 1 月 2 月 3 月 4 月 5 月 6 月 7 月 8 月 9 月 10 月 11 月 12 月 檔案系統修改偵測 修改 MBR Registry 檔修改偵測 系統核心結構修改偵測

(22)

20 惡意程式分析帄台整合 偵測文件類型檔案(不包 含 執 行 檔 ) 中 隱 藏 之 Shellcode 攻擊 Java 安全程式設計原則 與實務 不安全 Java 原始碼檢測 工具雛型 不安全 Java 程式設計與 入侵方法之案例蒐集與 研析 VB.Net 安全程式設計原 則與實務 不安全 VB.Net 程式設計 與入侵方法之案例蒐集 與研析 不安全 VB.Net 原始碼檢 測工具雛型 原始碼漏洞分析資料整 理

(23)

21

3.3 計畫目標

本資訊產品安全檢測技術整合型研究案(以下簡稱本研究案)為第二年度延 續性計畫。本計畫著重兩大目標:(一)本系統對資安人員在面對未知的檔案目 標進行鑑識判別時,將能有效的提供判斷依據。(二)尋找軟體原始碼中的漏洞, 以期軟體開發人員在設計過程中能及早發現漏洞加以更正。為了達成目標(一), 我們將實作出一未知惡意程式之入侵行為的分析系統,亦即由使用者輸入一待 檢測的目標檔案至系統後,本系統將自動進行分析出該目標對系統進行的隱藏 行為,例如程序模組隱藏、檔案隱藏或登錄機碼隱藏等等,並以這些資訊判別 該目標檔案是否為 Rootkit 程式。針對目標(二),此計畫使用靜態程式檢測工 具-Fortify,搭配相關 Shareware、Freeware,利用其不同的靜態分析檢驗方式 來彌補 Fortify SCA 相關檢測的不足。除了第一年度所提出的 C/C++/PHP 軟體原 始碼中的可能漏洞,本年度會加上 JAVA 與 VB .Net 的原始碼檢測,讓整體檢測 範圍更加全面。並提出 JAVA 與 VB .Net 的安全程式設計原則,使軟體開發人員 能在程式開發階段找出程式漏洞,並加以統整與修改,進而解少相對應之損失。 因此本報告於下兩章節分別列舉出兩大目標的相關背景、研究方法、執行概要、 研究成果,並在最後附上結論與參考文獻。

(24)

22

3.4 計畫內容(含工作項目)

本計劃已全數完成開發項目,其實程規劃的甘特圖在章節 3.2 有詳細列出。 今年度完成的所有項目。以下為分兩部分介紹之。

A. 在惡意軟體程式分析帄台

為了檢測非執行檔案的安全性,今年度開發之檔案文件檢測軟體,其檢測 功能將分為使用者端與專家端:在使用者端可安裝前端鑑識程式,對檔案進行 初步的掃描,程式將產生報告給使用者參考,並讓使用者選擇是否要將此程式 送至專家端進行進一步的鑑識工作。在專家端我們將建立虛擬機器以處理待檢 測的檔案,系統中包含的檢測軟體將能進行更深入的分析以供專家參考。 延續去年的開發系統,惡意軟體程式分析帄台今年著重在創新的開發,同 時也加強了偵測隱藏行為的功能。對於檔案隱藏的部分,我們利用 Windows ADS 的分析掃描,找出企圖利用 ADS 特色將自身相關檔案隱藏之行為。為了不漏掉 分析行為,上半年度擴大了登入機碼的分析範圍,將所有自動啟動或服務等相 關的登錄機碼加入觀測的清單當中。對於開機磁區病毒,這種可能造成重大破 壞的惡意軟體,我們監控了虛擬機器的開機磁區是否遭到修改,除了去年的 MBR 部分,今年增加了 VBR 的磁區位置。在系統內部,SSDT 的實作可以讓惡意程 式的行為無所遁形,透過觀察系統呼叫來得知該惡意程式的行為資訊。 以上將對應於計畫書中「檔案系統修改偵測」、「修改 MBR」、「Registry 檔 修改偵測」、「系統核心結構修改偵測」、「偵測文件類型檔案(不包含執行檔)中隱

(25)

23

藏之 Shellcode 攻擊」,此五大實作目標。目前已全數完成,並且有兩大系統產 出:一)惡意文件檢測系統、二)惡意軟體程式分析帄台。

B. 軟體原始碼漏洞分析

根據 Tsipenyuk 等人所提出的 Seven Pernicious Kingdoms 做分類,分析探討 各種程式安全漏洞發生原因、運作方式,分為 Java 與 VB.NET 二大方向各自探 討。 “不安全程式設計與入侵方法之案例蒐集與研析”這部分,目前整理數個已知 開放原始碼軟體漏洞,進行漏洞原因、攻擊手法探討。 “不安全 Java/VB.NET 原始碼檢測工具雛形原始碼檢測工具雛形”方面,探 討靜態分析問題本身的不可預測(undecidable)性質,而指出分析工具能力限制, 及可改進的方向。對於數個開放原始碼或免費工具和 Fortify SCA 相互比較分析 方法、適用範圍。蒐集了數個測詴程式集 (benchmark),對其進行初步檢測,以 了解各項工具的能力與限制點。 以上三項分別對應計畫書中列舉之「Java 安全程式設計原則與實務」、 「VB.NET 安全程式設計原則與實務」、「不安全 Java 原始碼檢測工具雛型」、「不 安全 VB.NET 原始碼檢測工具雛型」、「不安全 Java 程式設計與入侵方法之案例 蒐集與研析」、「不安全 Java 程式設計與入侵方法之案例蒐集與研析」等六大要 點,進度均按計畫時程進行。

(26)

24

3.5 計畫成果

本計劃是第二年度計劃,該負責的工作項目皆如期完成。接下來將總結目前 的計畫成果。 在惡意軟體程式分析帄台部分,預計以開發一分析帄台為主,藉由著整合 虛擬機器與程式行為分析來達成揭露隱藏行為的惡意程式。揭露方式主要以登 入檔、檔案系統、系統呼叫為主,利用去年開發的分析帄台繼續增強其功能性。 在年底計畫結束前,可以開發出一惡意程式分析系統,協助資安人員分析、擷 取惡意程式行為。以下為條列交付項目:  開發一惡意程式行為分析帄台包含下列功能 1. ADS 檔案掃描擴充 2. MBR、VBR 開機磁區修改偵測 3. 註冊機碼(Registry)掃描項目項目擴充 4. 系統呼叫表(SSDT)、中斷表(IDT)資料表修改偵測 5. 惡意檔案文件偵測系統開發  繳交數份技術文件報告 1. Registry 檔案修改偵測一份 2. 系統核心結構修改偵測一份 3. 可開機磁區修改偵測一份 4. 檔案系統修改偵測一份

(27)

25 5. 檔案文件檢測系統一份 6. 檔案文件檢測系統安裝及操作手冊一份 7. 與程式碼漏洞分析整合之期末報告一份 8. 動態惡意程式行為分析帄台 LiveCD 一片 9. 動態惡意程式行為分析帄台安裝及操作手冊一份 在 Java/VB.NET 軟體原始碼漏洞分析部分,計畫工作項目主要以建立整合 分析介面為主,支援 C/C++/PHP /Java/VB.NET 等程式原始碼,並撰寫整合工具 使用手冊,系統設計報告,對於相關工具也會撰寫測詴報告。入侵方法案例方 面,會持續蒐集 Java/VB.NET 相關案例,整理弱點原因、攻擊手法等等,以書 面報告呈現。至計畫結束時,已完成以上各項目。提供一套整合靜態分析工具 帄台,供使用者進行程式安全分析,及早在軟體開發階段找出潛在程式安全漏 洞,增加軟體可靠度 (reliability)與降低維護成本。以下為條列交付項目:  開發靜態程式碼漏洞分析帄台包含下列功能 1. 檢測功能 2. C 語言單一檔案檢測 3. C 語言批次檢測 4. C++單一檔案檢測 5. C++批次檢測 6. PHP 單一檔案檢測 7. PHP 批次檢測

(28)

26

8. Java 單一檔案檢測 9. Java 批次檢測

10. VB.NET 單一檔案檢測

 整合工具

1. Fortify SCA (Fortify Inc.) 2. YASCA (freeware)

3. CBMC (GPL)

4. Microsoft FxCop (Microsoft Inc.)

 報告產出 1. 互動圖形介面 2. HTML 書面報表  繳交數份技術文件報告 1. 整合分析帄台安裝與設定手冊 2. 整合分析帄台專案功能使用說明 3. 整合分析帄台檢測功能使用說明 4. 整合分析帄台原始碼管理說明文件 5. 不安全 Java 程式設計與入侵方法之案例蒐集與研析 6. 不安全 VB.NET 程式設計與入侵方法之案例蒐集與研析 7. Java 安全程式設計原則與實務 8. VB.NET 安全程式設計原則與實務

(29)

27 9. 與惡意程式分析整合之期末報告一份 10. 整合分析帄台程式原始碼 除了上述兩大系統的交付項目之外,本計畫已經在 2010 年 12 月 20 的上午 於中山科學研究院進行技術移轉,把兩大系統「惡意程式行為分析帄台」、「靜 態程式碼漏洞分析帄台」安裝於院內的機器上。同日下午,也在會議室內進行 期末展示,讓中山科學研究院的長官們給予建議指導,討論十分熱烈。而本校 參與研究計畫之同學們也獲益良多,日後將會繼續朝著建議方向深入地研究探 討。

(30)

28

4 執行概要

本章節中,分別詳列了研究背景簡介、研究架構及方法、與實驗設計(或模 擬設計)及實作。於下列章節中,依序分別描述惡意程式分析帄台與軟體原始碼 漏洞分析之研究執行概要。

4.1 研究背景簡介

此章節將介紹研究背景,依背景方向不同而分兩部分介紹。第一部分以惡 意程式分析帄台之相關背景介紹,第二部分以原始碼漏洞分析之相關背景介 紹。

A. 惡意程式分析帄台

本計畫之目的為提出一可針對未知惡意程式的入侵行為的分析系統,亦即 由使用者輸入一待檢測的目標檔案至系統後,本系統將自動進行分析出該目標 對系統進行的隱藏行為,例如程序模組隱藏、檔案隱藏或登錄機碼隱藏等等, 並以這些資訊判別該目標檔案是否為 Rootkit 程式。本系統對資安人員在面對未 知的檔案目標進行鑑識判別時,將能有效的提供判斷依據。 現今惡意程式為了達成其偷取資料或進行遠端控制的目的,多使用隱匿技 術(Rootkit)躲避偵測以延長自身壽命。Rootkit 技術發展至今,已延伸出多種 層次的侵入方式與運作機制,分別於不同的系統部件進行修改並插入自身程式 碼,達到更改程式流程及隱藏資訊的目的。於 98 年度中我們已對某些 Rootkit

(31)

29

的行為提出了分析偵測的方法,在 99 年度中我們將繼續對其餘的惡意程式行為 進行延伸研究。以下將對 99 年度中預期分析的惡意程式行為進行分類介紹。

4.1.1 檔案隱藏

惡意程式可能使用NTFS檔案系統的ADS功能來隱藏自身的存在。ADS全名 Alternate data streams,其起源必頇先追至Macintosh作業系統,Mac OS所採用的 檔案系統其檔案皆沒有副檔名的概念,然而系統卻可以正確的去判別該檔案的 擁有者以及是否可執行等屬性。這是由於每個檔案都有兩個fork。其一為resource fork,紀錄著該檔案上述的各種屬性。另一為data fork,紀錄真正的檔案內容。 微軟作業系統發展至Windows NT 3.1時,期望與AppleTalk相容互通,讓兩方的 使用者能夠輕易的交換彼此資料。但由於Mac OS檔案的resource fork存在另一獨 立的資料流中,直接複製Mac OS端之檔案至Windows端僅有檔案的data fork會被 複製而缺乏紀錄該檔案眾多屬性的resource fork。因此微軟實做了於NTFS檔案系 統上相容resource fork以及data fork之機制,即是為了相容Mac OS所採用的 HFS(Hierarchical File System)以提供SFM(Service For Macintosh)的ADS。

如此一來Windows NT也可以看見Mac OS上檔案的resource fork,並於複製檔 案時將resource fork以及data fork一併複製至Windows NT系統。然而由於該實做 為相當底層的作業系統核心修改,多數系統API以及程式皆無法得知ADS的存在, 因此ADS的使用起初並不盛行。

(32)

30

訊、hard link(源自於 Unix 環境,可將某一檔案完整映射到另一檔案)、 ACL(Access Control List)、加密檔案系統等機制的出現、以及微軟提供的 API 供使用者方便使用這些新的機制,使得 ADS 的使用達到高峰。系統利用 ADS 來 儲存上述這些資訊,如音樂檔案之專輯名、歌手、歌曲名等、部份防毒軟體將 檔案的 checksum 存於其中以維護該檔案的完整性,避免遭到非授權的修改、以 及瀏覽器會利用 ADS 去標記由外部網站下載至本地端的檔案為不安全,以便在 該檔案被執行或開啟時,二次詢問使用者是否確定要繼續該動作。

NTFS ADS 允許一個檔案名稱與多個資料流關聯,且 Windows Explorer 中不 會列出其存在,內容大小也不包含於檔案大小中。磁區的 Master File Table 紀錄著每個檔案擁有的所有資料流、以及在硬碟上的實體位址,一個典型的檔 案僅包含單一的資料流是為$DATA,此即為該檔案真正包含的內容,ADS 則是透 過 附 加 紀 錄 在 MFT 與 檔 案 做 關 聯 而 非 包 含 在 該 檔 案 內 。 ” filename.extension:alternate_data_stream:$DATA”為 Windows 檔案命名的 約 定 格 式 , 當 使 用 者 開 啟 檔 案 時 , 一 般 狀 況 下 為 開 啟 filename.extension::$DATA 。 若 要 存 取 ADS 的 內 容 , 則 必 頇 透 過 filename.extension:alternate_data_stream 來存取。下圖為一般檔案存取與 ADS 存取實際例子:

(33)

31

圖表 4-1Windows ADS 內容顯示

目前的 Windows Server 版本已不再包含 SFM,僅剩下少數第三方的軟體仍 在使用 NTFS 的 ADS 特色。多媒體播放軟體也改採用獨立的資料庫來儲存上述資 料,ADS 因而逐漸沒落。多數使用者也因為極少接觸而不知其存在。然而在 NTFS 成為 Windows 主流檔案系統,且眾多使用者未知 ADS 存在的狀況下,ADS 逐漸成 為惡意軟體隱藏自身的手段之一,其所能附加的資料流可以是各種檔案類型。 其中固然也包括了可執行檔.exe,使得惡意程式得以將自身隱藏於 ADS 中,若 非透過特殊的掃描工具,使用者難以察覺其存在。 在 NTFS 的檔案系統裡,ADS 可以被用來隱藏檔案,被隱藏的檔案將不會顯 示在資料夾的檔案目錄裡,且其大小不能被更改。ADS 亦經常被合法運用於儲存 即時性的資料與一系列追蹤的紀錄。可被 ADS 隱藏的檔案大小並沒有限制,而 ADS 只要輸入一行 DOS 指令即可輕鬆產生。 現今 ADS 的存在仍然是鮮為人知。ADS 已被安全領域社群,當作惡意的個體 討論一段時日了。當任何有利於駭客惡意行為的議題或是方法被提出,都會很 快的被駭客不肖運用。駭客應用 ADS 執行惡意行為已成為不可抵擋的趨勢,甚 至有些惡意程式會使用 ADS 將自己隱藏起來,不讓管理者監測到。

(34)

32

4.1.2 登錄機碼隱藏

目前會在登錄檔中註冊藉此達到特殊目的的木馬非常的多,例如 kavo 這隻 有名且流傳甚廣的隨身碟木馬就是一例。該木馬的症狀是會在各個磁碟機(包含 系統槽及外部隨身碟)中寫入一個隱藏的 autorun.inf 檔,使得使用者在檔案總管 中點選磁碟機想要開啟時,會觸發該檔案藉此執行惡意行為,並且阻止使用者 開啟磁碟機。此外還會在開機時啟動,以進行更多惡意行為。 為 了 達 到 這 個 目 的 , 他 會 在 登 錄 檔 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 中 註 冊,藉此讓自己在每次開機時都會自動執行。此外由於這個木馬主要的行為來 自於各個磁碟機下的 autorun.inf 檔案。因此為了保護這個檔案,該木馬會修改登 錄 檔 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Expl orer\Advanced\Folder\Hidden\SHOWALL 中的 CheckedValue 從 1 修改成 0。如此 一來,可以將檔案總管中的「隱藏保護的作業系統檔案」該選項鎖住,使得使 用者即使知道磁碟機下可能有 autorun.inf 也無法看到這個隱藏檔並刪除它。 由這個例子可以知道,登錄檔非常重要,一旦經過惡意程式修改,系統就會 變得非常的不安全,任何問題都有可能因此發生。故本計畫欲開發一套登錄檔 修改檢測的分析模組來幫助檢查系統的安全性。 (a) 登錄檔存取方式

(35)

33 一般人直覺上會認為,所有的登錄檔是儲存在一個檔案裡面,這個檔案裡就 包含了所有的登錄檔資料。在早期 Windows 3.x 系統上確實是以這種方式儲存。 然後在 Windows 95 之後,就開始採用將登錄檔分散儲存在多個檔案裡面的方式, 而這些檔案則被稱為 hive。 那麼為什麼在 regedit 中檢視時,顯示出來的會是一個完整的 Tree 的架構呢? UNIX 的使用者可以用 UNIX 的檔案系統架構來想像:regedit 會先虛擬出一個 tree root,接著把分散在各個檔案的 Registry 資訊一個一個 mount 上來,最後就變成 了我們在 regedit 看到的 Registry 架構。至於實際的做法則是透過類似捷徑的方 式將各個檔案連起來,讓使用者可以很方便的存取。 圖表 4-2Windows 登錄機碼截圖 接著看看上圖 regedit 的開啟時的情況,看到這張圖再配上之前提到的架構,也 許會認為目前登錄檔的架構就是儲存在 5 個檔案裡面,由 regedit 將他們連接起 來。事實上並不是這樣,例如 HKEY_CURRENT_USER 並不是一個檔案,只是連接 到 HKEY_USERS 中有關目前登入的使用者設定的一個捷徑。也就是說 regedit 顯

(36)

34 示出來的東西,並不一定會真的存在一個檔案裡面,有可能是一個捷徑,也有 可能是另一種檔案:volatile hive。 Volatile hive 是一種特別的資料格式,他並沒有存在任何一個檔案中,而是 每次系統啟動時才去產生這些資料並儲存在記憶體中,當系統結束時資料就跟 著 消 失 , 直 到 下 次 啟 動 時 才 重 新 產 生 。 最 好 的 例 子 就 是 儲 存 硬 體 資 訊 的 HKEY_LOCAL_MACHINE\HARDWARE,由於硬體隨時都有可能變更,因此這些資訊 並沒有儲存下來的必要,每次即時產生可以讓系統的硬體資訊保持在最新的狀 態。 (b) 重要路徑介紹 在現行 Windows 版本中,提供了 regedit 這隻登錄編輯程式供使用者使用,使 用者可藉此工具來編輯及瀏覽 Windows 登錄檔。目前 Windows 將登錄檔分為五 個分支,有關這五個分支的簡略說明如下: 表格 4-1Windows 主要登錄機碼目錄名稱 HKEY_CLASSED_ROOT 連接到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes HKEY_CURRENT_USER 連接到 HKEY_USERS 中屬於目前登入的使用者的設定

HKEY_LOCAL_MACHINE 有關 local 端的所有設定。HKEY_LOCAL_MACHINE 本身並不存在 於任何一個檔案,而是一個包含了很多 hive 的一個 key HKEY_USERS 儲存所有使用者的設定 HKEY_CURRENT_CONFIG 連 接 到 HKEY_LOCAL_MACHINE\SYSTEM CurrentControlSet\Control\IDConfigDB\Hareware,包含了目前的 硬體設定 由 上 表 可 以 知 道 , 在 regedit 中 顯 示 出 來 的 幾 個 分 支 , 實 際 上 只 有

(37)

35 HKEY_LOCAL_MACHINE 和 HKEY_USERS 兩個是真正的分支,其他都只 是連接到他們中的某個部分的一個捷徑。 各 hive 存放的路徑如下: 表格 4-2 登錄機碼實際存放位置(hive 檔) HKEY_LOCAL_MACHINE\SYSTEM \WINDOWS\system32\config\system HKEY_LOCAL_MACHINE\SAM \WINDOWS\system32\config\sam HKEY_LOCAL_MACHINE\SECURITY \WINDOWS\system32\config\security HKEY_LOCAL_MACHINE\SOFTWARE \WINDOWS\system32\config\software HKEY_LOCAL_MACHINE\HAREWARE 不存在。 Volatile hive

HKEY_LOCAL_MACHINE\SYSTEM\Clone 不存在。 Volatile hive

HKEY_USERS.DEFAULT \WINDOWS\system32\config\default

HKEY_LOCAL_MACHINE

這個分支中包含了電腦上會影響到所有使用者的設定,例如驅動程式和安全 性管理原則等。在其下有五個 subkey,在此簡述他們的功用:

(38)

36

表格 4-3 本機登錄機碼主要子目錄

HARDWARE 儲存系統偵測到的硬體裝置的資料,包含裝置本身資料及所需要的驅動程 式。這個 key 是 volatile hive,在系統啟動時才自動產生。

SAM Security Account Manager,儲存使用者和群組的資料,例如使用者的帳號密 碼。基於安全性的考量,就算是系統管理者也無法查閱他的內容。 SECURITY 儲存一些安全性的原則和設定。系統管理者除非擁有存取這個 key 的授權, 否則也無法查閱他的內容。 SOFTWARE 儲存電腦中應用程式的設定,一般的通用標準為 \SOFTWARE\程式開發商名稱\程式名稱\程式版本 SYSTEM 儲存系統的控制設定,包含驅動程式及服務的設定。系統會維持至少兩組以 上的設定來確保系統可以被啟動。 HKEY_USERS 儲存有關各使用者的資訊。在描述其下各 key 的內容之前,必頇先介紹一個 名詞:SID。SID(Security Identifiers)定義了安全性原則,SID 在同一台電腦中是 唯一的,每個帳戶都會有一個專屬的 SID,可以想像成帳戶的識別代碼或是身分 證,藉由 SID 可以對應到所屬的帳戶。SID 的格式大約是這種形式: S-1-5-21-2593218664-641331954-590486339-1001 SID 在登錄檔中很常見,用了表示某個特定的帳戶。 表格 4-4HKEY_USERS 中各 subkey 簡介 DEFAULT 在使用者在登入前,電腦顯示的桌面及其他相關的設定。 s-1-5-18 LocalSystem 的帳戶資料 s-1-5-19 LocalService 的帳戶資料 s-1-5-20 NetworkService 的帳戶資料

SID 這裡並不是指一個名為 SID 的 subkey,而是一個以 SID 為名的 key。這個 SID 就是目前登入的使用者的 SID,裡面包含了使用者的桌面設定及控制台設定 等資料。

SID_Classes 目前登錄的使用者的安全性驗證子,主要內容為檔案關聯性。

HKEY_CURRENT_USER

(39)

37 HKEY_USERS\{SID},內容包含了環境變數、桌面設定、網路、印表機及應用 程式等設定。其下包含的各項目分別簡述如下: 表格 4-5HKEY_CURRENT_USER 底下各子目錄簡介 AppEvents 與事件相關聯的音效,例如登出 Windows XP、縮小視窗等。 Console 有關命令提示字元的相關設定。 Control Panel 在控制台中的大部分設定都可以在此找到,也包含了一些在控制台中沒有 出現的設定可在此手動設定。 Environment 使用者的環境變數。

Identities Outlook Express 中每個使用者的身分。 Keyboard Layout 鍵盤的設定資訊。 Network 儲存網路驅動程式。 Printers 使用者對印表機的個人偏好設定。 Software 使用者對應用程式的個人偏好設定。 Volatile Environment 當使用者登入時定義的環境變數。 HKEY_CLASSES_ROOT 這 個 登 錄 的 內 容 是 由 HKEY_LOCAL_MACHINE\SOFTWARE\Classes 及 HKEY_CURRENT_USER\Software\Classes 兩者合併而成。若兩者有重複的內容, 會以 HKEY_CURRENT_USER 中的為優先。藉由這樣的方式,可以讓一台電腦 上的多個使用者互相分享檔案關聯的設定,並且當重複時會以自己的優先,不 會受到其他使用者的影響。 HKEY_CURRENT_CONFIG 連 結 到 儲 存 目 前 硬 體 資 訊 的 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware\Profiles\Current。內 容包含螢幕字型及解析度,以及隨插即用及目前可用的印表機的資訊。

(40)

38

(c) Registry 結構介紹

前面提過,hive 是真正儲存了登錄檔內容的檔案,接下來的章節則是有關這 個檔案內部的資料結構。hive 檔案是以 4096 bytes 為一個 block,以 block 當單 位,由多個 block 所組成。最前面的第一個 block 叫做 base block,而之後的 block 被稱為 bin。Base block 相當於是整個 hive 檔案的 header,裡面記錄了下列資訊:

• regf : 用來標明這是個 hive file 的 signature • 最後寫入時間

• hive format version (NT3.5, NT4.0) • checksum

• full name (SystemRoot\CONFIG\SAM)

在談 bin 之前,要先來介紹另一個資料結構叫作 Cell。Cell 是一個容器(container), 在 bin 中所有的資料,不管是 key、subkey 或 value 都被儲存在 cell 中。Cell 的 資料結構很簡單,前面有一個 header 紀錄 cell 的長度,標明了這個 cell 的範圍 有多長,接下來就是 cell 儲存的資料。 圖表 4-3Windows 登錄機碼 cell 之資料結構 Cell 根據儲存的東西不同,分成下列幾種: • Key cell (NK) • Value cell (VK) • Subkey-list cell

Cell length

Cell Data

(41)

39

• Value-list cell

• Security-descriptor cell (SK)

上面提到的 subkey-list,是因為一個 key 可以有多個 subkey,因此該 key 的 key cell 會指向一個 subkey-list cell,裡面記錄了該 key 全部的 subkey 的位置(即他們的 key cell 的位置),藉此來將 key 和多個 subkey 連在一起。Value-list 也是一樣的 形式。有關這些 cell 的詳細資料會在之後介紹。

接下來回到 bin,bin 是 hive 扣掉 base block 後的其他區塊,也就是真正存放 登錄資料的地方。前面提過在 hive 中所有的資料都被儲存在 cell 中,因此 bin 其實就是一個內部包含了許多 cell 的一個資料結構。

(42)

40

圖表 4-4 Windows 登錄機碼 bin 之資料結構,在 bin 的最前面也有一個 header,稱為 HBIN

由於 bin 包含了多個 cell,而 cell 記錄著登錄檔的資料,因此常常會有登錄 機碼被新增或刪除的情況發生,此時就會產生與記憶體管理一樣的 fragment 問 題。例如刪除中間的一個 cell,中間這段的位置就空了出來,當之後要新增一個 cell 時,將新的 cell 放到空出來的這段空間,但是若新的這個 cell 的空間比原本 的小,那麼這時候中間就會產生一些零碎的空間浪費。 此外為了盡可能的將空間做最大的利用,因此若有連續空出來的空間應該要 將他們整合在一起,藉此容納更大的 cell。因此當刪除一個 cell 時,系統會去檢 查這個 cell 的前後是不是空的,若是空的就將這些空間全部連在一起,並且在 這段空間的最前面的 cell 的 header 中標示這段空出來的空間的長度,藉此盡可 能的將空出來的空間連在一起,以利之後能容納盡可能大的 cell。

Cell LENGTH

Cell DATA

Cell LENGTH

Cell DATA

Cell LENGTH

Cell DATA

bin header

Cell 1

Cell 2

Cell 3

(43)

41

當新增 cell 時則是尋找有沒有空的空間可以放進去,如果發現目前的 bin 已 經無法容納時,就新增一個 bin,大小為 4096 bytes 的倍數。由於登錄機碼常常 會進行新增和刪除,因此一次 allocate 4096 bytes 可以不用每次新增時都去做 allocate 的動作及一直調整 hive file 的大小,直接對已經分配好的空間進行存取, 可以增進效率。

前面提過,cell 根據儲存的資料的不同,可以分為以下幾種:Key cell、Value cell、subkey-list cell、value-list cell 以及 security-descriptor cell 幾種。如下圖所示:

圖表 4-5 以實際在 regedit 中看到的狀況

在這張圖中,SOFTWARE 就是 key,7-Zip 則是他的 subkey,而 Path 則是 7-Zip 中的一個 value 的名字,而 value 的 data 則是 D:\Tool\7-Zip。若以圖形來表示其 結構則是這樣:

(44)

42

圖表 4-6 登錄機碼 key, path,和 value 資料結構圖

Subkey-list 記錄著 key 下的所有 subkey,value-list 則是記錄了 key 下所包含的 value,而 value 則是包含著名字以及存放 data 的 cell 的位置。至於各種 cell 包含 的詳細資訊如下:

※ Key cell • Signature • 最後更新時間

• Parent key 的 cell 的位置(index)

• 所包括的 subkey 的 subkey-list 的 cell 的 index • 所包括的 value 的 value-list 的 cell 的 index

SOFTWARE subkey-list 7-Zip value-list Path D:\Tools\7-Zip

(45)

43

• Security-descriptor cell 的 index • 自己(key)的名字

※ Subkey-list cell

包含了屬於同個 parent key 的所有 subkey 的 key cell 的 index

※ Value cell • Signature • Value 的名字 • Value 的型態

• 存放 data 的 cell 的位置

註:若 value 的長度小於 4 bytes,那麼 data 會直接存在本來放「儲存 data 的 cell 的位置」的位置,而不會再用一個 cell 來存值。即本來存放 cell index 的地方現在直接存 data。

※ value-list cell

包含了屬於同個 key 的所有 value 的 value cell 的 index ※ security-descriptor cell

Signature

(46)

44

(d) Hivetool 工具介紹

hivetool 是一套用來解析 windows 登錄機碼的工具軟體。由於 windows 系統 管理登錄機碼時,有一定的格式儲存在硬碟裡。該工具則是利用這些特定的格 式,來取出 windows 登錄機碼的值。此套件運行在 linux 環境底下,只要可以利 用虛擬機器拿到 windows 的登錄檔案,即可以針對該登錄檔做修改、取值。該 工具有數種資料夾,我們將一一解說: hivetool/lib 資料夾 這個資料夾用來存取低階的 hive 檔案。這些程式碼定義了讀取與釋放 hive 檔案,並且提供 windows-like 的讀寫函式(像是 RegSetValueEX, RegDeleteKey 等)。 其中像是重要的變數 放在 ntreg.c 內。 hivetool/hivetools 資料夾 char* hivepath[] = { NULL, "\\HKEY_LOCAL_MACHINE\\SAM", "\\HKEY_LOCAL_MACHINE\\SYSTEM", "\\HKEY_LOCAL_MACHINE\\SECURITY", "\\HKEY_LOCAL_MACHINE\\SOFTWARE", "\\HKEY_CURRENT_USER\\", NULL, "\\HKEY_USERS\\SID-RID_Classes", NULL, "\\" };

(47)

45 存放相依於 lib/libhive.c 的程式碼。這邊定義了一些存取登錄機碼的方式, 利用登錄機碼的 Key-Value 結構來實現一些功能。並不是針對其低階的二進位結 構作存取。 nstdreg.h/.c 提供了一個介面來供程式設計師使用,其定義了函式為 POSIX-like。作者認 為 windows 提供的函式不夠好,故自行定義了一些函式名稱來取代原有的 Windows 函式。 sam.h/.c

提供存取 Security Accounts Manager data (SAM),取得使用者列表,創造使 用者,改變密碼等。 hivetool/bin 資料夾 這個資料夾包含了所有可執行的檔案,我們可以利用這資料夾內的內容來存 取 windows 機碼。而其中 listhive 則是本計劃用來取出登錄檔資訊的檔案。 hivetool/misc 資料夾 其他的輔助套件。類似幫助印出除錯資訊,偵錯函式等。 利用上述的套件,我們開發出一 bin/listhive,並可以解析一個 windows 登錄碼 的檔案,並且提供修改,讀取,設定等動作。

(48)

46

(e) Sleuth Kit 工具介紹

The Sleuth Kit 是一套用來蒐集 Unix 或 Windows 檔案系統的取證工具集合, 可以讓鑑識人員從電腦系統中取出檔案,而不透過正常的檔案系統。它可以用 來調查許多電腦的映像檔,找出檔案的所在位置,並且完整的將檔案取出。以 下式幾個較為重要的功能:  ils 列出所有的附加資訊,像是 inode 資訊  blkls 顯示檔案系統內的資料區塊內容  fls 顯示所有在檔案系統中掛載跟非掛載的檔案名稱  fsstat 顯示檔案系統的統計資料資訊  ffind 找尋檔案名稱,並且指出該檔案的附加資訊的位置  mactime 創建所有 MAC 作業系統中檔案時光機器的時程表

(49)

47

4.1.3 MBR 磁區修改

MBR rootkit 透過載入自己的檔案系統驅動程式,做硬碟檔案的讀寫控制, 把想要修改的二進位檔,寫入開機磁區之中。由於有些防毒軟體為了保護開機 磁區,會定期備份並且還原。MBR rootkit 能針對要求的檔案名稱,回傳未被修 改的內容以躲避防毒軟體的偵測。而此技術也可以運於隱藏檔案;在 I/O 部分, rootkit 也可以做鍵盤的側錄,把蒐集到的敲鍵值寫到檔案中。針對 rootkit 對 MBR 攻擊舉例來說,IBM PC 第一支被正式記載的病毒名叫 Brain,採用 hook IDT 0x13 的方法感染 MBR 做破壞。

(a) MBR 介紹

開機磁區(boot sector)是硬碟、軟碟或類似資料儲存裝置的一個磁區,內含負 責啟動「存放在硬碟其它部份的程式」的 machine code。其中,開機磁區有兩種: 一、 Volume Boot Record(VBR)

VBR 又稱 volume boot sector 或 partition boot sector,是一種開機磁區,儲 存在硬碟或軟碟上的 disc volume、或資料儲存設備上,且含有用來 boot 的程式碼;在未分割的儲存設備上,它是設備的第一個磁區;而在已分割 的設備上,它是設備上各個 partition 的第一個磁區,而整個 device 的第一 個磁區為 MBR。也就是說,VBR 是磁碟未被分割的第一個磁區,或已分 割的 partition 的第一個磁區,包含了載入與喚起作業系統(放在這個分區之 內或放在這個磁碟上)的程式碼。

(50)

48

二、 Master Boot Record(MBR)

為磁碟已被分割的第一個磁區,包含定位 active partition 與喚起它的 VBR 的程式碼。在 VBR 中的程式碼可直接藉由機器的韌體、MBR 或 boot manager 來引發。在 IBM PC 相容機上,BIOS 並不在意 VBR 與 MBR 的 不同,甚至是分割區,而韌體只是載入並運行磁碟的第一個 sector,只有 在 MBR 裡的程式碼,才知道磁碟分割訊息,且負責載入啟動 active partition 的 VBR 程式碼。

如果從一個沒有灌作業系統的磁碟啟動,螢幕會顯示 Please Insert a bootable disc and press a key,這是由開機磁區顯示的,而不是機器的韌體。

MBR(Master Boot Record,主要啟動磁區)是位於硬碟的第一個磁區,大 小為 512 Bytes;是電腦開機後存取硬碟時所必頇要讀取的第一個磁區,它在硬 碟上的三維位址為(柱面,磁頭,磁區)=(0,0,1)。MBR 是由磁碟分割工 具(FDISK、SPFDISK、Partition Magic 等)在對硬碟做磁碟分割時所建立出來 的,MBR 的 512 Bytes 空間中總共分成了二個部份,第一部份為啟動程式(Boot

code),大小為 446 Bytes,另一部份即俗稱的硬碟分割表(Partition Table),大

小為 64 Bytes。

(b) MBR 的功能

MBR 的功能如下:

(51)

49

 在電腦的 BIOS 通過在 MBR 中 machine code instruction 的執行後,開機。  利用 32-bit 的 disk signature 來唯一性地辦認個別的 disk media,雖然硬碟在

running 時可能不會用到。 MBR 記錄著硬碟本身的相關資訊以及硬碟各個分割的大小及位置資訊,是 資料資訊的重要入口。如果受到破壞,硬碟上的基本資料結構資訊將會遺失, 需要利用很繁瑣的方式詴探性快重建資料結構資訊後才可能重新存取原先的資 料。MBR 內的資訊是透過 FDISK 寫入的,是低階格式化的產物,和作業系統沒 有任何關聯。相對而言,作業系統是建立在高階格式化的硬碟分割之上,是和 一定的檔案系統相聯繫的。 表格 4-6 標準的 MBR 結構 位址 描述 長度(BYTE) Hex Oct Dec

0000 0000 0 代碼區 440(最大 446) 01B8 0670 440 選用磁碟標誌 4 01BC 0674 444 一般為空值; 0x0000 2 01BE 0676 446 標準 MBR 分割表規劃 (四個 16 byte 的主分割表入口) 64 01FE 0776 510 55h MBR 有效標誌: 0xAA55 2 01FF 0777 511 AAh MBR, 總大小: 446 + 64 + 2 = 512 在 Boot code 部份的內容會因磁碟分割工具的不同而有所不同,但大小絕對不會 超過 446 Bytes,而且程式碼最後的目的都是一樣的。當電腦開機完成硬體的 POST(Power On Self Test)後,BIOS 會將開機硬碟之 MBR 中的 Boot code 載 至 memory 中執行,Boot code 是一讀取硬碟分割表的小程式,會從硬碟分割表

(52)

50 中找出啟動分割區(Active Partition),並將啟動分割區的第一個磁區中的資料載 入,此磁區的資料也是一小程式,用來載入分割區上的作業系統程式,以便啟 動欲開啟的作業系統進行資料處理。 硬碟分割表通常為了有效地利用硬碟空間會將硬碟做分割,每個分割過後的 區域,就稱為一個分割區(partition);由於每個分割的區域之起始位置及結束位 置都不一樣,所以必頇要有一個硬碟分割表來存放這些資訊,其結構圖如下圖:

(53)

51

圖表 4-7 硬碟分割表(partition table)結構圖(引用自 http://www.msservermag.com.tw/technicwords/020829.aspx)

由於每個分割資訊需要 16 個 bytes,所以對於採用 MBR 型分割結構的硬碟, 最多只能有 4 個主要分割(primary partition),若要得到 4 個以上的主要分割是 不可能的;為解決分割區數量的限制,便將分割區的種類分成主要分割及延伸 分割(extend partition),且主要分割和延伸分割的數量加起來不能超過四個,其 中,延伸分割也是主要分割的一種,但我們並無法直接使用延伸分割,必頇把 它再分成幾個邏輯分割(logical partition)才能用來存放資料,也就是說它與主 要分割的不同在於理論上可以劃分為無數個邏輯分割。 表格 4-7 主要分割及延伸分割數量組合 Primary partition 數量 1 2 3 1 2 3 4 Extend Partition 數量 1 1 1 0 0 0 0 表格 4-8 硬碟分割結構資訊 偏移 長度(位元組) 意義

(54)

52 00H 1 分割狀態:00-->非活動分割;80-->活動分割;其 它數值沒有意義 01H 1 分割起始磁頭號(HEAD),用到全部 8 位元 02H 2 分割起始磁區號(SECTOR),佔據 02H 的位 0-5; 該分割的起始磁柱號(CYLINDER),佔據 02H 的位 6-7 和 03H 的全部 8 位元 04H 1 檔案系統標誌位 05H 1 分割結束磁頭號(HEAD),用到全部 8 位元 06H 2 分割結束磁區號(SECTOR),佔據 06H 的位 0-5; 該分割的起始磁柱號(CYLINDER),佔據 06H 的位 6-7 和 07H 的全部 8 位元 08H 4 分割起始絕對磁區 0CH 4 分割總的磁區數 延伸分割中邏輯驅動器的引導記錄是鏈式的;每一個邏輯分割都有一個和 MBR 結構類似的延伸功能引導記錄(Extend Boot Record,EBR)。其中硬碟分割 表的第一項指向該邏輯分割本身的引導磁區,第二項指向下一個邏輯驅動器的 延伸功能引導記錄,分割表第三、第四項沒有用到;結構圖如下:

(55)

53

圖表 4-8 延伸硬碟分割表(Extend partition table)結構圖(引用自 http://www.msservermag.com.tw/technicwords/020829.aspx) 邏輯分割區域之起始位置及結束位置的相關資訊則記載在每個邏輯分割的 第一個磁區,該磁區的資料結構圖如圖(和 MBR 的結構很類似): 圖表 4-9 邏輯分割第一個磁區的資料結構圖(引用自 http://www.msservermag.com.tw/technicwords/020829.aspx) 最後,以一個硬碟切割了 3 個主要分割和 1 個延伸分割,延伸分割又切割 了 3 個邏輯分割為例,示意圖如下:

(56)

54

圖表 4-104 個主要分割(左)及 3 個主要分割和 1 個延伸分割(右)示意圖(引用自 http://www.msservermag.com.tw/technicwords/020829.aspx)

圖表 4-113 個主要分割和 1 個延伸分割指標關係圖(引用自 http://www.msservermag.com.tw/technicwords/020829.aspx)

(57)

55 (c) 硬碟分割注意要點 Windows 系統預設情況下,一般都是只劃分一個主要分割給系統,剩餘的部 分全部劃入延伸分割。這裡有下面幾點需要注意:  在 MBR 分割表中最多 4 個主分割或者 3 個主分割+1 個延伸分割,也就是 說延伸分割只能有一個,然後可以再細分為多個邏輯分割。

 在 Linux 系統中,硬碟分割命名為 sda1-sda4 或者 hda1-hda4(其中 a 表示

硬碟編號可能是 a、b、c 等等)。在 MBR 硬碟中,分割號 1-4 是主分割(或 者延伸分割),邏輯分割編號只能從 5 開始。  在 MBR 分割表中,一個分割最大的容量為 2T,且每個分割的起始柱面必頇 在這個硬碟的前 2T 內;若有一個 3T 的硬碟,根據要求,至少要把它劃分 為 2 個分割區,且最後一個分割的起始磁區需位於硬碟的前 2T 空間內。 系統開機或重開機 MBR 的讀取流程 1. 開機後,BIOS 開始測詴電腦硬體及周邊設備,再來執行內部記憶體位址為 FFFF:0000H 處的跳轉指令,跳轉到固化在 ROM 中的自檢程式處,對系統 硬體(包括內部記憶體)進行檢查。 2. 讀取 MBR。當 BIOS 檢查到硬體正常並與 CMOS 中的設定相符後,按照 CMOS 中對啟動裝置的設定順序檢測可用的啟動裝置;BIOS 將相應啟動裝 置的 MBR 磁區讀入內部記憶體位址為 0000:7C00H 處。 3. 檢查 0000:7DFEH-0000:7DFFH(MBR 的結束標誌位)是否等於 AA55H,若不

參考文獻

相關文件

 點擊按鈕「Rollover」,工作表便會剪下紅色線以下的資料並複 製至綠色線以下的儲存格。

社工樣本提供接受扶助之兒少樣本的福利服務)所進行的一項調查計畫。至目前為止,第 一波調查計畫於 2009 年共完成 5,593 位兒少樣本的資料蒐集,第二波調查計畫於 2011

I-STD 是在資料以漸進式增加的前提下進行資料探勘,在醫院的門診診斷紀 錄中,雖然每個月門診數量不盡相同但基本上仍有一固定總門診數量範疇,因此 由圖

[r]

五、依據保有資料之重要性,評估有備份必要時,予以備

審查整理呈現資料:蒐集到的資料應先審核 是否完整、正確、合理與一致,然後利用敘

sort 函式可將一組資料排序成遞增 (ascending order) 或 遞減順序 (descending order)。. 如果這組資料是一個行或列向量,整組資料會進行排序。

所以 10 個數字 個數字 個數字 個數字 pattern 就產生 就產生 就產生 就產生 10 列資料 列資料 列資料 列資料 ( 每一橫 每一橫 每一橫