ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ

Bùi Ngọc Linh

NGHIÊN CỨU HỆ THỐNG

CỤM MÁY TÍNH XỬ LÝ SONG SONG

ROCKS

VÀ ỨNG DỤNG

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công nghệ thông tin

HÀ NỘI - 2010

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ

Bùi Ngọc Linh

NGHIÊN CỨU HỆ THỐNG

CỤM MÁY TÍNH XỬ LÝ SONG SONG

ROCKS

VÀ ỨNG DỤNG

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công nghệ thông tin

Cán bộ hƣớng dẫn: TS. Nguyễn Trí Thành

HÀ NỘI - 2010

LỜI CẢM ƠN

Trƣớc hết, tôi xin bày tỏ lòng kính trọng và biết ơn sâu sắc tới Tiến sỹ Nguyễn Trí Thành,

ngƣời đã trực tiếp giảng dạy và tận tình giúp đỡ tôi trong quá trình làm khóa luận.

Tôi xin chân thành cảm ơn toàn thể các thầy cô giáo trƣờng Đại học Công nghệ - Đại học Quốc gia Hà Nội đã tận tình chỉ bảo, dạy dỗ tôi trong suốt 4 năm học vừa qua.

Tôi xin chân thành cảm ơn thƣ viện Đại học Quốc gia Hà Nội, thƣ viện Hội sinh viên

trƣờng Đại học Công nghệ - Đại học Quốc gia Hà Nội đã giúp đỡ tôi rất nhiều tài liệu

quý báu trong quá trình học tập và nghiên cứu.

Cuối cùng, tôi xin chân thành cảm ơn gia đình và bạn bè, những ngƣời đã luôn động viên,

i

giúp đỡ tôi trong học tập cũng nhƣ trong cuộc sống.

TÓM TẮT NỘI DUNG

Tài liệu này giới thiệu sơ lƣợc về công nghệ xử lý song song nói chung và công

nghệ xử lý song song phân cụm nói riêng, sau đó tập trung nghiên cứu một hệ thống cụm

máy tính xử lý song song tiêu biểu: Rocks. Các nội dung chính đƣợc trình bày là: Các

kiến trúc xử lý song song SISD, SIMD, MISD, MIMD (theo phân loại của Flynn), cùng

các hệ thống tính toán đa nhân, các hệ thống đa xử lý đối xứng, các hệ thống tính toán lƣới, tính toán cụm và các hệ thống xử lý song song cực lớn (Chƣơng 2); giới thiệu tổng

quan về kiến trúc và thành phần của hệ thống Rocks, hƣớng dẫn cài đặt, nghiên cứu kiến

trúc hệ thống và cách quản trị (Chƣơng 3); hƣớng dẫn lập trình MPI căn bản, phƣơng pháp xây dựng ứng dụng MPI để đạt hiệu quả cao, tận dụng đƣợc tài nguyên hệ thống

(Chƣơng 4);

Chƣơng 5 của khóa luận trình bày chi tiết một ứng dụng xử lý song song tiêu biểu,

cùng cách thức thiết lập môi trƣờng và hƣớng dẫn biên dịch.

Phần cuối của tài liệu có trình bày 4 phụ lục, xem nhƣ là các nội dung mở rộng cho

ii

những phần đã trình bày trong các chƣơng.

MỤC LỤC

LỜI CẢM ƠN ........................................................................................................................................ i

TÓM TẮT NỘI DUNG ........................................................................................................................ii

MỤC LỤC ........................................................................................................................................... iii

DANH MỤC BẢNG BIỂU ...............................................................................................................vii

DANH MỤC HÌNH VẼ ................................................................................................................... viii

CHƢƠNG 1. GIỚI THIỆU .................................................................................................................. 1

CHƢƠNG 2. CÁC KIẾN TRÚC VÀ CÁC HỆ THỐNG XỬ LÝ SONG SONG ........................... 4

2. 1.

Các kiến trúc xử lý song song ........................................................................................... 4

2. 1. 1.

SISD ............................................................................................................................ 6

2. 1. 2.

SIMD .......................................................................................................................... 7

2. 1. 3. MISD .......................................................................................................................... 7

2. 1. 4. MIMD ......................................................................................................................... 8

2. 2.

Các hệ thống xử lý song song ........................................................................................... 8

2. 2. 1.

Các hệ thống tính toán đa nhân ................................................................................. 8

2. 2. 2.

Các hệ thống đa xử lý đối xứng ................................................................................ 9

2. 2. 3.

Các hệ thống tính toán phân tán .............................................................................. 10

2. 2. 3. 1. Các hệ thống tính toán lƣới ............................................................................... 10

2. 2. 3. 2. Các hệ thống xử lý song song cực lớn ............................................................. 12

2. 2. 3. 3. Các hệ thống tính toán cụm .............................................................................. 12

iii

CHƢƠNG 3. HỆ THỐNG ROCKS .................................................................................................. 16

3. 1.

Giới thiệu.......................................................................................................................... 16

3. 1. 1.

Tổng quan ................................................................................................................. 16

3. 1. 2.

Kiến trúc của HPC Cluster sử dụng Rocks ............................................................ 17

3. 1. 3.

Rocks và Rolls.......................................................................................................... 18

3. 2.

Cài đặt............................................................................................................................... 20

3. 2. 1.

Cấu hình .................................................................................................................... 20

3. 2. 2.

Cài đặt frontend ........................................................................................................ 20

3. 2. 3.

Cài đặt hàng loạt các compute node ....................................................................... 24

3. 3.

Kiến trúc hệ thống ........................................................................................................... 25

3. 3. 1.

Quy tắc đặt tên của Rocks ....................................................................................... 25

3. 3. 2.

Về cơ sở dữ liệu cluster ........................................................................................... 28

3. 3. 3.

Về sơ đồ cơ sở, file cơ sở và quá trình cài đặt một compute node ....................... 34

3. 4.

Quản trị ............................................................................................................................. 39

3. 4. 1.

Tổng quan ................................................................................................................. 39

3. 4. 2.

Frontend quản trị cluster nhƣ thế nào? ................................................................... 40

3. 4. 3.

Các tác vụ quản trị cơ bản ....................................................................................... 43

3. 4. 3. 1. Cài đặt lại một compute node trong lần boot PXE tiếp theo .......................... 43

3. 4. 3. 2. Xem và thay đổi các cấu hình mạng ................................................................ 48

CHƢƠNG 4. LẬP TRÌNH SONG SONG VỚI MPI ....................................................................... 50

4. 1.

Các mô hình lập trình song song .................................................................................... 50

4. 1. 1. Mô hình bộ nhớ chia sẻ ........................................................................................... 50

4. 1. 2. Mô hình đa luồng ..................................................................................................... 51

iv

4. 1. 3. Mô hình truyền thông điệp ...................................................................................... 52

4. 1. 4. Mô hình song song dữ liệu ...................................................................................... 53

4. 2.

Các ƣu điểm của mô hình truyền thông điệp ................................................................. 54

4. 2. 1.

Phổ biến .................................................................................................................... 54

4. 2. 2.

Khả năng mô tả ........................................................................................................ 54

4. 2. 3.

Dễ gỡ lỗi hơn ............................................................................................................ 55

4. 2. 4.

Hiệu năng.................................................................................................................. 55

4. 3.

Giới thiệu về MPI ............................................................................................................ 55

4. 4. Mục tiêu của MPI ............................................................................................................ 56

4. 5.

Các đặc điểm của MPI .................................................................................................... 56

4. 6.

Khác biệt giữa các bản cài đặt bằng C và C++ của MPI............................................... 58

4. 7. MPI trên Rocks ................................................................................................................ 58

4. 8.

Viết chƣơng trình Hello World ....................................................................................... 59

4. 9.

Các hàm MPI cơ bản ....................................................................................................... 64

4. 8. 1.

Hàm MPI_Init ...................................................................................................... 64

4. 8. 2.

Hàm MPI_Finalize ............................................................................................ 65

4. 8. 3.

Hàm MPI_Comm_size ......................................................................................... 65

4. 8. 4.

Hàm MPI_Comm_rank ......................................................................................... 65

4. 10. Giá trị trả về của các hàm MPI ....................................................................................... 66

4. 11. Về các khái niệm Nhóm, Ngữ cảnh và Bộ liên lạc........................................................ 66

4. 12. Liên lạc giữa các tiến trình .............................................................................................. 67

4. 13. Xây dựng một ứng dụng tự trị ........................................................................................ 70

v

4. 14. Về mối quan hệ giữa kích thƣớc bài toán và chi phí tính toán ..................................... 75

4. 15.

Phƣơng hƣớng xây dựng một ứng dụng MPI ................................................................ 77

CHƢƠNG 5. CÀI ĐẶT THỬ NGHIỆM ỨNG DỤNG TRÊN HỆ THỐNG ROCKS.................. 78

5. 1.

Thiết lập môi trƣờng ........................................................................................................ 78

5. 2. Mã nguồn ứng dụng......................................................................................................... 79

5. 3.

Biên dịch và chạy ứng dụng ............................................................................................ 86

5. 4.

Kết quả thử nghiệm ......................................................................................................... 86

CHƢƠNG 6. KẾT LUẬN.................................................................................................................. 89

PHỤ LỤC 1. SƠ LƢỢC VỀ CÁCH PHÁT TRIỂN ROLL MỚI ................................................... 90

PHỤ LỤC 2. LIÊN LẠC GIỮA CÁC TIẾN TRÌNH MPI .............................................................. 99

PHỤ LỤC 3. SỬ DỤNG MPI ĐỂ TÍNH TÍCH PHÂN ................................................................. 102

PHỤ LỤC 4. SỬ DỤNG MPI ĐỂ TÍNH TOÁN SỐ PI ................................................................ 104

TÀI LIỆU THAM KHẢO ................................................................................................................ 109

vi

DANH MỤC BẢNG BIỂU

Bảng 2 – Các hằng số toán tử .......................................................................................................... 106

vii

Bảng 1 – Tƣơng ứng các hàm MPI trong C và C++ ........................................................................ 58

DANH MỤC HÌNH VẼ

Hình 2 - SISD........................................................................................................................................ 4

Hình 3 - SIMD ...................................................................................................................................... 5

Hình 4 - MISD ...................................................................................................................................... 5

Hình 5 - MIMD ..................................................................................................................................... 6

Hình 6 – Xử lý đƣờng ống 5 giai đoạn ................................................................................................ 6

Hình 7 – Mô hình bộ xử lý 2 nhân....................................................................................................... 9

Hình 8 - SMP ........................................................................................................................................ 9

Hình 9 – Mô hình lƣới tính toán ........................................................................................................ 11

Hình 10 - MPP .................................................................................................................................... 12

Hình 11 – Thống kê về kiến trúc của 500 siêu máy tính .................................................................. 13

Hình 12 – Mô hình của HPC Cluster................................................................................................. 14

Hình 13 – Rockstar cluster ................................................................................................................. 15

Hình 14 – Kiến trúc của Rocks .......................................................................................................... 17

Hình 15 – Một báo cáo sinh bởi Ganglia .......................................................................................... 19

Hình 16 – Màn hình khởi động .......................................................................................................... 21

Hình 17 – Lựa chọn Roll (1) .............................................................................................................. 22

Hình 18 – Lựa chọn Roll (2) .............................................................................................................. 23

Hình 19 - Phân chia ổ ......................................................................................................................... 24

Hình 20 – Lựa chọn appliance type ................................................................................................... 25

Hình 21 – Vai trò trung tâm của cơ sở dữ liệu SQL ......................................................................... 29

viii

Hình 1 – Các lĩnh vực ứng dụng của xử lý song song........................................................................ 2

Hình 22 – Thao tác trực tiếp với cơ sở dữ liệu cluster ..................................................................... 32

Hình 23 – Minh họa trực quan một phần của sơ đồ cơ sở ............................................................... 35

Hình 24 – Quá trình sinh file cơ sở ................................................................................................... 36

Hình 25 – Nhận diện appliance mới .................................................................................................. 37

Hình 26 – Đã thêm appliance vào cơ sở dữ liệu ............................................................................... 37

Hình 27 – Đã yêu cầu thành công file cơ sở ..................................................................................... 38

Hình 28 – File cơ sở ........................................................................................................................... 39

Hình 29 – Các node trong cluster ...................................................................................................... 40

Hình 30 – Tạo cặp khóa private, public trong lần đầu khởi động terminal .................................... 41

Hình 31 – SSH tới compute-0-0 ........................................................................................................ 42

Hình 32 – Giá trị tham số action với các node trong cluster............................................................ 43

Hình 33 – Các bootaction hiện có...................................................................................................... 44

Hình 34 – Thêm bootaction................................................................................................................ 45

Hình 35 – Các thuộc tính của node compute-0-0 ............................................................................. 46

Hình 36 – Thay đổi giá trị tham số installaction............................................................................... 46

Hình 37 – Giá trị tham số installaction thay đổi ............................................................................... 47

Hình 38 – Loại bỏ một bootaction ..................................................................................................... 48

Hình 39 – Xem các cổng ethernet...................................................................................................... 49

Hình 40 – Mô hình bộ nhớ chia sẻ..................................................................................................... 51

Hình 41 – Mô hình đa luồng .............................................................................................................. 52

Hình 42 – Mô hình truyền thông điệp ............................................................................................... 53

Hình 43 – Mô hình song song dữ liệu ............................................................................................... 54

Hình 44 – MPI trên Rocks ................................................................................................................. 59 ix

Hình 45 – Output của chƣơng trình Hello World (1) ....................................................................... 61

Hình 46 – Output của chƣơng trình Hello World (2) ....................................................................... 62

Hình 47 – Output của chƣơng trình Hello World (3) ....................................................................... 63

Hình 48 – Output của chƣơng trình Hello World (4) ....................................................................... 64

Hình 49 – Trƣớc khi chạy ứng dụng.................................................................................................. 87

Hình 50 – Sau khi chạy ứng dụng ..................................................................................................... 88

Hình 51 – Output của hg clone .......................................................................................................... 90

Hình 52 – Repository cục bộ.............................................................................................................. 91

Hình 53 – Thƣ mục scratch của các Roll .......................................................................................... 92

Hình 54 – Thƣ mục scratch của Roll java ......................................................................................... 93

Hình 55 – Một phần sơ đồ cơ sở ........................................................................................................ 95

Hình 56 – Minh họa việc liên lạc giữa các tiến trình ..................................................................... 101

Hình 57 – Tính tích phân.................................................................................................................. 103

Hình 58 – Tính toán số PI ................................................................................................................ 104

x

CHƢƠNG 1. GIỚI THIỆU

“Đạt tới tốc độ tính toán 1 teraflop là bài toán lớn nhất trong khoa học máy tính

trong 2 thập kỷ qua. Chỉ mới 10 năm trước đây, những nhà lãnh đạo đáng tin cậy nhất

trong ngành công nghiệp tính toán còn nói rằng điều đó là không thể.” (Gil Weigand)

[45]

Nếu chúng ta đã từng dùng Google để tìm kiếm thông tin trên Internet, thì hẳn sẽ có lúc chúng ta phải ngạc nhiên trƣớc tốc độ xử lý của cỗ máy tìm kiếm này. Mỗi một giây

qua đi, Google tiếp nhận tới hàng nghìn yêu cầu tìm kiếm, và mỗi yêu cầu tìm kiếm đó

cần phải đƣợc xử lý qua hàng chục tỷ phép tính với lƣợng dữ liệu truy cập lên đến hàng

trăm Megabytes. Ngoài một hệ thống cơ sở dữ liệu đƣợc thiết kế đặc biệt, cùng với

những thuật toán khai phá dữ liệu đƣợc tối ƣu hóa, thì bí mật đằng sau tốc độ xử lý của

Google chính là hệ thống các cluster với tổng cộng khoảng 15000 máy tính trên toàn thế

giới. Google tối thiểu hóa thời gian xử lý đối với mỗi yêu cầu tìm kiếm bằng cách tiến

hành xử lý song song mỗi yêu cầu đó. Điều này cũng có nghĩa là Google sẽ xử lý đƣợc

nhiều yêu cầu tìm kiếm hơn trong cùng một khoảng thời gian [6].

Google chính là một ví dụ điển hình về vai trò và sự thành công của xử lý song song

trong ngành công nghiệp tính toán nói riêng và trong cuộc sống nói chung. Trong thời đại

thông tin bùng nổ, con ngƣời càng ngày càng trở nên bận rộn thì nhu cầu của xử lý song

song ngày càng đƣợc nâng cao nhằm xử lý đƣợc một lƣợng dữ liệu lớn nhất trong thời

gian nhanh nhất có thể. Xử lý song song ngày càng đƣợc quan tâm trên thế giới vì 2 lý do

chính sau đây:

 Đạt đƣợc hiệu năng cao hơn trong khi tiết kiệm đƣợc thời gian và tiền bạc. Về lý thuyết, càng đầu tƣ nhiều tài nguyên cho một nhiệm vụ nào đó thì càng rút ngắn

 Khả năng xử lý các bài toán lớn. Nhiều bài toán trong thực tế đòi hỏi tài nguyên tính toán lớn đến mức không một máy tính đơn lẻ nào có thể đáp ứng nổi. Chẳng

1

đƣợc thời gian thực hiện nhiệm vụ đó, đồng thời tiết kiệm đƣợc càng nhiều chi phí. Hơn nữa, nhiều hệ thống xử lý song song có thể đƣợc xây dựng từ những thành phần rẻ tiền và phổ biến.

hạn, các bài toán dạng "Grand Challenge" (Thách Thức Lớn) [16] nhƣ dự báo thời tiết, giải mã bộ gene ngƣời, ... yêu cầu những tài nguyên tính toán đƣợc tính bằng

Hình 1 – Các lĩnh vực ứng dụng của xử lý song song

Nguồn: [4]

PetaFlops và PetaBytes [23].

Những nhu cầu này đã dẫn tới những cơ hội lớn cho xử lý song song, song những

thách thức đi kèm cũng không hề nhỏ. Cụ thể, sẽ khó khăn hơn trong việc phát triển các

phần mềm phục vụ cho xử lý song song do thiếu các môi trƣờng phát triển và các mô

hình lập trình thống nhất và hiệu quả. Việc phát triển thuật toán cũng khó khăn hơn do sự

phức tạp của việc xử lý các tác vụ đồng thời. Đó là chƣa kể đến sự phát triển nhanh chóng của công nghệ phần cứng dẫn tới sự lạc hậu nhanh chóng của các kiến trúc xử lý song song. Hệ quả gián tiếp của điều này chính là khả năng mở rộng của hệ thống bị giới

hạn, do các thuật toán xử lý song song hiện hành có thể không còn phù hợp với các kiến trúc phần cứng của tƣơng lai.

2

Tại Việt Nam, đã có một vài hệ thống xử lý song song đƣợc nghiên cứu thành công và đƣa vào ứng dụng, đem lại hiệu quả bƣớc đầu, nhƣ hệ thống máy tính bó song song do CADPRO thiết kế cho Trung tâm Quốc gia dự báo khí tƣợng thủy văn [2], hoặc các trung

tâm dữ liệu của FPT Telecom, CMC Telecom, Ngân hàng Sài Gòn Thƣơng tín – Sacombank, Ngân hàng Đông Nam Á [3], … Tuy nhiên, số lƣợng không nhiều các hệ

thống xử lý song song kiểu này đã chứng tỏ xử lý song song chƣa thực sự phát triển mạnh

mẽ ở Việt Nam.

Xét về mặt công nghệ, việc xây dựng, quản trị và ứng dụng một hệ thống xử lý song

song cũng không phải dễ dàng. Thông thƣờng, chi phí phải trả cho việc quản trị một hệ

thống xử lý song song trong 1 năm còn cao hơn nhiều so với chi phí bỏ ra để mua cả hệ

thống. Ví dụ, một cluster có tốc độ tính toán 1 TeraFlops có chi phí vào khoảng 100

nghìn US$, gần bằng chi phí phải trả cho một ngƣời quản trị hệ thống trong một năm

[39].

Nghiên cứu về xử lý song song vì vậy không chỉ mang ý nghĩa khoa học, mà còn có

ý nghĩa thực tiễn rất lớn. Việc nghiên cứu về xử lý song song, từ lý thuyết cho đến ứng

dụng, không chỉ giúp chúng ta nắm đƣợc nền tảng công nghệ, mà còn giúp chúng ta nhìn

thấy tiềm năng to lớn của xử lý song song trong công nghệ nói riêng và các lĩnh vực kinh

tế quốc dân nói chung.

Khóa luận này tập trung nghiên cứu tổng quan về xử lý song song nói chung và

nghiên cứu cách thức cài đặt, quản trị, kiến trúc hệ thống và ứng dụng của hệ thống cụm

máy tính xử lý song song Rocks nói riêng. Ngoài ra, tài liệu còn đƣợc đi kèm với một số

ứng dụng MPI tiêu biểu, trong đó có ứng dụng chuyển đổi video mà nội dung chƣơng 5

3

chính là mô tả chi tiết.

CHƢƠNG 2. CÁC KIẾN TRÚC VÀ CÁC HỆ THỐNG XỬ LÝ SONG SONG

2. 1. Các kiến trúc xử lý song song

Vào năm 1966, Michael Flynn đã đƣa ra cách phân loại các kiến trúc xử lý song

song dựa trên sự khác nhau về các dòng trong tiến trình tính toán. Một dòng là một chuỗi các đối tƣợng (nhƣ dữ liệu), hoặc hành động (nhƣ các chỉ dẫn). Các dòng là độc lập với

nhau. Mỗi một phần tử trong dòng có thể chứa một hoặc nhiều đối tƣợng hoặc hành

động. Trên cơ sở 2 dòng chính là dữ liệu và chỉ dẫn, Flynn đã đƣa ra 4 tổ hợp, đại diện

cho 4 kiểu kiến trúc xử lý song song khác nhau [8]:

 SISD (Single Instruction, Single Data Stream - Đơn dòng chỉ dẫn, đơn dòng

Hình 2 - SISD

Nguồn: [22]

dữ liệu). Đây thực chất chính là kiến trúc Von Neumann [1, 43].

4

 SIMD (Single Instruction, Multiple Data Stream - Đơn dòng chỉ dẫn, đa dòng dữ liệu). Kiến trúc này bao gồm các bộ xử lý vectơ cũng nhƣ các bộ xử lý song song cực lớn (MPP).

Hình 3 - SIMD

Nguồn: [22]

 MISD (Multiple Instruction, Single Data Stream - Đa dòng chỉ dẫn, đơn

Hình 4 - MISD

Nguồn: [22]

dòng dữ liệu).

 MIMD (Multiple Instruction, Multiple Data Stream - Đa dòng chỉ dẫn, đa dòng dữ liệu). Kiến trúc này bao gồm các hệ đa vi xử lý truyền thống cũng

5

nhƣ các mạng máy trạm.

Hình 5 - MIMD

Nguồn: [37]

Mỗi một tổ hợp trên đây đặc trƣng cho một lớp kiến trúc máy tính, đồng thời tƣơng

ứng với một hình thức xử lý song song.

2. 1. 1. SISD

Kiến trúc SISD là kiến trúc quen thuộc nhất, cũng là kiến trúc ít song song nhất.

Các hệ thống kiểu này chủ yếu xử lý theo kiểu đƣờng ống, trong đó các giai đoạn khác

nhau của tiến trình xử lý một chỉ dẫn đƣợc thực thi song song (kiến trúc này không song

Hình 6 – Xử lý đường ống 5 giai đoạn

Nguồn: [37]

song hóa các tiến trình mà song song hóa các giai đoạn của việc thực thi tiến trình).

Công nghệ cài đặt song song hóa các tiến trình xử lý chỉ dẫn đƣợc gọi là song song hóa mức chỉ dẫn (ILP – Instruction Level Parallelism). Hai trong số các kiến trúc bộ xử lý sử dụng phƣơng pháp này là superscalar (siêu thang bậc) và VLIW (Very Long

Instruction Word - Kích thƣớc word lớn). Các kiến trúc này lập lịch cho các tác vụ khác nhau để thực thi một cách song song bằng cách phân tích sự phụ thuộc lẫn nhau giữa các

tác vụ trong cùng một dòng chỉ dẫn. Với kiến trúc superscalar, việc phân tích đƣợc thực 6

hiện động vào thời điểm chạy, còn với VLIW, việc phân tích là tĩnh vào thời điểm biên dịch. Cả hai kiến trúc này đều có sự cân bằng giữa độ linh động (adaptability) và độ phức

tạp (complexity) – các bộ xử lý superscalar linh động nhƣng phức tạp, còn các bộ xử lý

VLIW không linh động nhƣng cũng không phức tạp. Cả 2 kiến trúc đều sử dụng các

phƣơng pháp biên dịch nhƣ nhau nhằm đạt đƣợc hiệu năng cao.

Xu hƣớng hiện tại đối với các bộ xử lý SISD là hƣớng tới kiến trúc superscalar

nhằm tận dụng các công nghệ ILP sẵn có.

2. 1. 2. SIMD

Lớp kiến trúc SIMD của các bộ xử lý bao gồm các bộ xử lý mảng (Array Processors) và bộ xử lý vectơ (Vector Processors). Các bộ xử lý này là câu trả lời tự

nhiên cho việc sử dụng các cấu trúc dữ liệu thƣờng gặp nhƣ vectơ và ma trận.

Một bộ xử lý mảng bao gồm nhiều khối xử lý (PU - Processor Unit) hoạt động song

song trên nhiều thành phần dữ liệu. Một bộ xử lý vectơ bao gồm một khối xử lý hoạt

động tuyến tính trên nhiều thành phần dữ liệu. Cả 2 loại bộ xử lý đều sử dụng một phép

toán (operation) để thực thi nhiều hành động (action). Một bộ xử lý mảng phụ thuộc vào

kích thƣớc lớn của tập dữ liệu đầu vào để đạt đƣợc hiệu năng cao (vì vậy thƣờng các bộ

xử lý này thƣờng đƣợc gọi là các bộ xử lý song song cực lớn (Massively Parallel

Processors)). Một bộ xử lý mảng đặc trƣng bao gồm từ hàng trăm đến hàng chục nghìn

khối xử lý hoạt động cùng nhau. Một bộ xử lý vectơ cũng phụ thuộc vào sự đơn điệu của

các hành động tƣơng tự nhƣ bộ xử lý mảng, nhƣng trên một tập dữ liệu nhỏ hơn, đồng

thời dựa vào phƣơng pháp đƣờng ống (pipelining) và nhịp đồng hồ cao nhằm giảm độ trễ

của các phép toán.

Trên thị trƣờng hiện nay chƣa có nhiều bộ xử lý đƣợc phát triển theo kiến trúc mảng do nhu cầu không cao và hạn chế về số lƣợng ứng dụng. Trong khi đó rất nhiều bộ xử lý

theo kiến trúc vectơ đã đƣợc phát triển, đồng thời các bộ xử lý vectơ hiện đại là các bộ xử lý có hiệu năng cao, có thể tuân theo các kiến trúc SIMD hoặc MIMD.

2. 1. 3. MISD

7

Theo Flynn thì không tồn tại máy tính theo kiến trúc này [1].

2. 1. 4. MIMD

Kiến trúc MIMD là kiến trúc song song quen thuộc nhất, cũng là hình thức cơ bản

nhất của các bộ xử lý song song. Các bộ xử lý MIMD bao gồm nhiều khối xử lý đƣợc kết

nối với nhau. Không giống nhƣ các bộ xử lý SIMD, mỗi khối xử lý trong bộ xử lý MIMD

thực thi hoàn toàn độc lập (mặc dù cùng một chƣơng trình).Mặc dù về lý thuyết các khối

xử lý không cần phải giống nhau, nhƣng thực tế hầu hết các hệ thống MIMD bao gồm

các khối xử lý giống nhau.

Việc liên lạc giữa các khối xử lý đƣợc thực hiện thông qua một không gian địa chỉ dùng chung (không gian địa chỉ này có thể là toàn cục, cũng có thể đƣợc phân chia giữa

các khối xử lý, khi đó nó có tên gọi là bộ nhớ chia sẻ phân tán (Distributed Shared

Memory) để phân biệt với bộ nhớ phân tán (Distributed Memory)). Cách xử lý này dẫn

đến 2 vấn đề: Một là tính ổn định (consistency) và hai là tính thống nhất (coherence) của

dữ liệu. Tính ổn định nói đến việc tham chiếu bộ nhớ – trên cả 2 phạm trù là trong một

khối xử lý và giữa các khối xử lý. Tính thống nhất yêu cầu tất cả các khối xử lý đều phải

“nhìn thấy” cùng 1 giá trị đối với cùng 1 địa chỉ vùng nhớ. Tính ổn định là hiện, trong khi

tính thống nhất là ẩn đối với ngƣời lập trình. Thƣờng thì tính ổn định có thể giải quyết

bằng một sự phối hợp giữa các kỹ thuật về phần cứng và phần mềm, trong khi tính thống

nhất lại đƣợc giải quyết bằng các kỹ thuật về phần cứng.

Các hệ thống tuân theo kiến trúc MIMD bao gồm từ các bộ xử lý truyền thống đến

các bộ xử lý độc lập hoạt động thông qua một mạng máy tính. Sự khác nhau giữa các hệ

thống này chủ yếu là giữa cách kết nối giữa các khối xử lý trên một bộ xử lý và cách kết

nối giữa các bộ xử lý trên một mạng WAN. Tuy nhiên, cả 2 kiểu hệ thống đều có sự cân

bằng giữa độ trễ trong liên lạc và giới hạn kích thƣớc của hệ thống.

2. 2. Các hệ thống xử lý song song

2. 2. 1. Các hệ thống tính toán đa nhân

Vi xử lý đa nhân (Multicore Processor) là vi xử lý bao gồm nhiều khối chức năng

(Functional Unit, Execution Unit, hay “nhân”). Các vi xử lý đa nhân khác các vi xử lý siêu thang bậc (Superscalar Processor) ở chỗ, các vi xử lý đa nhân có thể thực thi nhiều

8

chỉ dẫn từ nhiều nguồn trong một chu kỳ tính toán, còn các vi xử lý siêu thang bậc có thể

thực thi nhiều chỉ dẫn từ một nguồn trong một chu kỳ tính toán. Mỗi nhân trong vi xử lý đa nhân có thể là một vi xử lý siêu thang bậc con, theo nghĩa mỗi nhân này có thể thực thi

Hình 7 – Mô hình bộ xử lý 2 nhân

Nguồn: [36]

nhiều chỉ dẫn từ một nguồn trong một chu kỳ tính toán.

2. 2. 2. Các hệ thống đa xử lý đối xứng

Hình 8 - SMP

Nguồn: [1]

9

Các hệ thống đa xử lý đối xứng (SMP - Symmetric Multiprocessing) thuộc mô hình song song kiểu bộ nhớ dùng chung (Shared Memory). Một hệ thống SMP có từ 2 bộ xử

lý giống nhau trở lên, các bộ xử lý này dùng chung bộ nhớ và hệ thống vào – ra, đồng thời đƣợc điều khiển bởi một hệ điều hành duy nhất.

Tính đối xứng của các hệ thống SMP thể hiện ở chỗ, thời gian truy cập bộ nhớ là bằng nhau với các bộ xử lý, quyền truy cập (read / write) tới bộ nhớ của các bộ xử lý

cũng là nhƣ nhau.

Các hệ thống SMP có nhiều ứng dụng trong khoa học, công nghiệp và kinh doanh. Tuy nhiên, những ứng dụng phổ biến nhất nhƣ các hệ xử lý văn bản hoặc các trò chơi

trên máy tính thì lại đƣợc viết theo cách không tận dụng đƣợc lợi thế từ các hệ thống xử lý đồng thời. Chẳng hạn, với các trò chơi trên máy tính, nếu nhƣ đƣợc viết để có thể chạy

tốt trên các hệ thống SMP, thì lại khiến hiệu năng giảm sút trên các hệ thống đơn vi xử lý

(uniprocessor).

Các hệ thống đơn vi xử lý và các hệ thống SMP yêu cầu hai phƣơng pháp lập trình

khác nhau để đạt đƣợc hiệu năng cao nhất. Vì thế nhà phát triển có thể sẽ phải phát triển

và bảo trì cả 2 phiên bản của cùng 1 ứng dụng. Các ứng dụng chạy trên các hệ thống

SMP có thể đạt đƣợc hiệu năng cao hơn so với khi chạy trên các hệ thống đơn vi xử lý,

ngay cả khi chúng đƣợc viết ra dành cho các hệ thống đơn vi xử lý. Nguyên nhân là vì

các ngắt phần cứng thƣờng tạm dừng việc thực thi ứng dụng, trong khi ứng dụng có thể

tiếp tục đƣợc thực thi trên một bộ xử lý rỗi. Đối với một số ứng dụng, đặc biệt là các trình

biên dịch và các dự án tính toán phân tán, hiệu năng của ứng dụng đƣợc tăng lên khi thêm

mới một bộ xử lý.

Trong trƣờng hợp có nhiều ứng dụng cùng chạy một lúc, một hệ thống SMP có thể cho hiệu năng tốt hơn một hệ thống đơn vi xử lý, do các ứng dụng có thể đƣợc đồng thời

thực thi trên các bộ xử lý một cách đồng thời.

2. 2. 3. Các hệ thống tính toán phân tán

Các hệ thống tính toán phân tán (Distributed Computing) là các hệ thống trong đó các đơn vị xử lý đƣợc kết nối với nhau qua một mạng. Các hệ thống kiểu này có khả năng

mở rộng rất cao.

10

2. 2. 3. 1. Các hệ thống tính toán lƣới

Các hệ thống tính toán lƣới (Grid Computing) là hình thức “phân tán” nhất của tính toán song song. Các hệ thống này bao gồm các máy tính hoàn chỉnh (có đầy đủ CPU, bộ

nhớ, nguồn nuôi, card mạng) kết nối với một mạng (có thể là mạng riêng, mạng chung

hoặc thậm chí là mạng internet), sử dụng các giao diện mạng truyền thống nhƣ Ethernet.

Đây là điểm khác biệt so với các siêu máy tính: Một siêu máy tính bao gồm nhiều bộ xử

Hình 9 – Mô hình lưới tính toán

Nguồn: [44]

lý đƣợc kết nối với nhau bởi một mạng cục bộ bao gồm các bus máy tính tốc độ cao.

Ƣu điểm lớn nhất của tính toán lƣới đó là các điểm lƣới (các máy tính tham gia tính

toán) có thể là các máy tính phổ biến, cấu hình trung bình, giá thành rẻ. Sau khi đƣợc nối với nhau thành một lƣới tính toán thì hệ thống lƣới này có thể cung cấp một hệ thống tài

nguyên tính toán tƣơng đƣơng với một siêu máy tính nhƣng giá rẻ hơn nhiều.

Trong khi đó, nhƣợc điểm lớn nhất của tính toán lƣới lại nằm ở kết nối giữa các điểm lƣới. Tuy nhiên, các ứng dụng đƣợc xử lý song song trên nhiều điểm lƣới một cách

độc lập có thể đạt hiệu năng cao trên lƣới, do mỗi điểm lƣới không yêu cầu các kết quả

11

trung gian từ các điểm lƣới khác.

2. 2. 3. 2. Các hệ thống xử lý song song cực lớn

Các hệ thống xử lý song song cực lớn (MPP – Massive Parallel Processing) là các

hệ thống lai giữa 2 mô hình bộ nhớ chia sẻ (Shared Memory) và bộ nhớ phân tán (Distributed Memory). Các hệ thống MPP khắc phục nhƣợc điểm của mô hình bộ nhớ

chia sẻ: Các CPU có bộ đệm (Cache) và bộ nhớ (Memory) riêng nên tránh đƣợc xung đột

bộ nhớ. Đồng thời, MPP cũng khắc phục nhƣợc điểm của mô hình bộ nhớ phân tán:

Đƣờng mạng kết nối có tốc độ cao hơn, độ trễ thấp, các bộ đệm cũng đƣợc kết nối với

Hình 10 - MPP

Nguồn: [1]

nhau và sử dụng phần cứng hỗ trợ.

Cách đây một vài năm, các siêu máy tính mạnh nhất đều là các hệ thống MPP [30],

nhƣ Earth Simulator, Blue Gene, ASCI,… với số bộ xử lý lên tới hàng nghìn [1].

2. 2. 3. 3. Các hệ thống tính toán cụm

12

Cụm (Cluster) là khái niệm dùng để chỉ các máy tính độc lập đƣợc kết nối với nhau thành một hệ thống thống nhất thông qua việc sử dụng các phần mềm và các công nghệ

kết nối mạng thích hợp. Ở mức độ đơn giản nhất, khi hai hoặc nhiều hơn máy tính đƣợc sử dụng cùng với nhau để giải quyết một vấn đề nào đó, hệ thống hai hoặc nhiều máy

tính này đƣợc xem nhƣ một cluster. Ở mức độ tổng quát, ta có thể định nghĩa cluster nhƣ

là một nhóm các máy tính độc lập có khả năng làm việc cùng nhau nhƣ một máy tính duy

nhất, nhằm mục tiêu tăng cƣờng sức mạnh tính toán, khả năng đáp ứng và giảm rủi ro khi

xảy ra lỗi cục bộ cho các ứng dụng hoặc các dịch vụ.

Trong số 500 siêu máy tính (danh sách cập nhật mới nhất là vào tháng 11 / 2009) thì

Hình 11 – Thống kê về kiến trúc của 500 siêu máy tính

Nguồn: [45]

hầu hết đều là các hệ thống cluster.

HPC Cluster, viết tắt của High Performance Computing Cluster, là loại cluster đƣợc

sử dụng để tăng cƣờng hiệu năng cho các ứng dụng tính toán phức tạp bằng cách "chia nhỏ" các tác vụ tính toán này ra các máy con trong cluster. Các cluster kiểu này thƣờng chạy các chƣơng trình đƣợc thiết kế đặc biệt để tận dụng khả năng tính toán song song

của hệ thống. Chúng đƣợc tối ƣu hóa cho các tiến trình đƣợc thực thi đồng thời trên các máy con trong cluster, nhƣng có "liên lạc" trong quá trình thực thi; các tiến trình này bao

13

gồm cả những tác vụ tính toán phụ thuộc lẫn nhau (kết quả tính toán từ máy con này có tác động đến kết quả tính toán tiếp theo của máy con khác).

HPC Cluster thƣờng đƣợc dùng cho các bài toán khoa học nên còn có tên khác là Scientific Cluster. Ngoài ra, có một loại HPC Cluster đặc thù sử dụng Linux làm hệ điều

hành và các phần mềm miễn phí để cung cấp khả năng tính toán song song. Loại HPC

Cluster này đƣợc gọi là Beowulf Cluster. "Các phần mềm miễn phí" nói đến ở đây bao

gồm cả các API messaging phổ biến nhƣ Message Passing Interface (MPI) hoặc Parallel

Hình 12 – Mô hình của HPC Cluster

Nguồn: [5]

Virtual Machine (PVM) [29].

Các hệ thống HPC Cluster đạt đƣợc hiệu năng cao là nhờ tăng cƣờng đƣợc băng

thông và giảm đƣợc độ trễ trên đƣờng truyền. Sở dĩ nhƣ vậy là vì chúng thƣờng không sử dụng những giao thức mạng nhƣ TCP/IP. Mặc dù TCP/IP rất lý tƣởng cho mạng Internet, nhƣng nó không thực sự phù hợp khi áp dụng cho một hệ thống các máy tính rất gần

nhau, đặc biệt là khi các máy tính trong cluster đƣợc biết về sự hiện diện của nhau. Thay vì đó, nhiều hệ thống HPC tiến hành truy cập bộ nhớ trực tiếp (DMA - Direct Memory

14

Access) giữa các máy con trong cluster. Các máy con trong cluster có thể sử dụng chung

một hệ thống bộ nhớ phân tán, đồng thời sử dụng một hệ thống truyền thông điệp đƣợc tối ƣu hóa nhằm liên lạc giữa các máy trong cluster.

MPI (Message Passing Interface) là một trong những hệ thống truyền thông điệp phổ biến nhất trong các cluster, đƣợc dùng nhƣ tầng liên lạc giữa các hệ thống cluster

song song. MPI có nhiều biến thể nhƣng sử dụng chung một API nhằm giúp các

developer dễ dàng phát triển các ứng dụng tính toán song song mà không cần phải quan

tâm đến chi tiết cài đặt của hệ thống. Các hệ thống Beowulf đƣợc nói bên trên là một

trong nhiều hệ thống HPC sử dụng MPI làm tầng liên lạc trong cluster.

Một trong số các hệ thống cluster tiêu biểu chính là Rocks. Rocks ra đời tại Đại học California với mục tiêu đơn giản hóa quá trình xây dựng một cluster [18]. Rocks là một

hệ thống tính toán cụm hết sức mạnh mẽ đã có lịch sử 10 năm phát triển [18] và 1632

cluster đã đăng ký [41]. Sử dụng Rocks, các nhà phát triển có thể xây dựng một HPC

Cluster hết sức nhanh chóng (cluster Rockstar (đứng thứ 201 trong danh sách 500 siêu

máy tính, số liệu tháng 11/2003) đƣợc xây dựng trong vòng dƣới 2 giờ [39]). Đây cũng là

Hình 13 – Rockstar cluster

Nguồn: [39]

15

lý do khóa luận nàyxem Rocks nhƣ một hệ thống xử lý song song tiêu biểu.

CHƢƠNG 3. HỆ THỐNG ROCKS

3. 1. Giới thiệu

3. 1. 1. Tổng quan

Rocks là một trong những giải pháp mã nguồn mở tốt nhất hiện nay để xây dựng một HPC cluster. Rocks do Đại học California phát triển dựa trên CentOS với một mục

tiêu đơn giản: "Make Clusters Easy" [18].

Một cluster đƣợc xây dựng bởi Rocks sẽ bao gồm 2 thành phần: Thành phần

frontend (frontend node), đƣợc dùng để quản lý các gói phần mềm và các tác vụ tính toán

trên cluster, và thành phần compute (compute node), cung cấp sức mạnh tính toán cho

cluster.

Quá trình xây dựng một cluster bằng Rocks có rất nhiều thuận lợi nhƣ dƣới đây:

 Tất cả các máy con (frontend node hoặc các compute node) đều yêu cầu tài nguyên ở mức trung bình, có thể dễ dàng đáp ứng đƣợc bởi một máy tính có cấu

hình phổ biến hiện nay. Rocks yêu cầu tối thiểu 30GB ổ cứng và 1GB bộ nhớ cho

mỗi máy con. Ngoài ra, đối với máy frontend, Rocks yêu cầu 2 cổng ethernet.

 Việc cài đặt máy frontend có thể thực hiện gần tƣơng tự nhƣ cài đặt một máy Linux thông thƣờng, toàn bộ các package cần cho quá trình cài đặt đƣợc chứa gọn

trong một DVD không quá lớn về kích thƣớc nếu nhƣ so với các DVD phân phối

của các distro nổi tiếng nhƣ Fedora hay CentOS.

 Việc cài đặt các máy compute đƣợc thực hiện gần nhƣ tự động, do đó cho phép cài

đặt hàng loạt các compute node, rút ngắn quá trình xây dựng cluster.

Ngoài những thuận lợi về quá trình cài đặt, Rocks đem lại nhiều lợi thế trong việc

xây dựng một cluster HPC, bao gồm:

 Rocks có thể tùy biến. Rocks không lệ thuộc vào các giải pháp của một nhà cung cấp cụ thể nào. Trong quá trình cài đặt, có thể sửa lại cấu trúc ổ đĩa cho phù hợp

16

với nhu cầu. Thậm chí, ngƣời dùng còn có thể tùy biến kernel của Rocks để sử

dụng. Nếu ngƣời dùng muốn thay đổi nhiều hơn nữa, chỉ cần chỉnh sửa một file XML, build lại và sau đó cài đặt lại các máy con.

 Rocks sử dụng các Roll với mỗi Roll nhƣ là một tập các package cần thiết để thi

hành một loại hình tính toán hay tiện ích cụ thể.

 Rocks làm giảm tải sự khó khăn trong việc quản lý cluster bằng cách cung cấp sẵn nhiều công cụ khác nhau để trợ giúp cho ngƣời quản trị hệ thống, chẳng hạn, mỗi cluster sẽ có một trang web cho biết trạng thái hiện tại của cluster.

3. 1. 2. Kiến trúc của HPC Cluster sử dụng Rocks

Xem xét sơ đồ dƣới đây, chúng ta có thể thấy frontend node đóng vai trò nhƣ là

Hình 14 – Kiến trúc của Rocks

Nguồn: [5]

17

giao diện giữa cluster và ngƣời sử dụng.

Frontend node yêu cầu 2 kết nối: Một kết nối private, nối với mạng các compute node (qua switch chẳng hạn), một kết nối public, cho phép các máy tính từ ngoài cluster

có thể truy cập đến.

3. 1. 3. Rocks và Rolls

Một Roll thực chất là một hoặc một tập các gói phần mềm nhằm thực thi một loại

tác vụ nhất định nào đó, bao gồm các tác vụ truyền thống của một HPC Cluster (các tác

vụ tính toán), và các tác vụ chung cho tất cả các cluster (các tác vụ quản lý cluster). Một

hệ thống cluster Rocks cơ bản bao gồm 4 roll: Kernel, OS, Web Server và Base. Các roll khác cung cấp các tác vụ nâng cao về tính toán, quản trị các tác vụ tính toán và quản trị

cluster, nhƣ:

 Roll SGE (SUN Grid Engine): Đây là một trong những Roll quan trọng nhất đƣợc phân phối kèm theo Rocks [7]. Roll này chịu trách nhiệm lập lịch, điều hƣớng và

quản lý các tác vụ của ngƣời dùng trên toàn cluster. SGE đƣợc sử dụng rất rộng rãi

trong các cluster hoặc các hệ thống tính toán lƣới. SGE giúp tận dụng tối đa sức

mạnh xử lý song song trong hệ thống. Việc quản lý SGE đƣợc thực hiện hoàn toàn

bằng command line, nhƣng cũng có thể đƣợc hiển thị dƣới dạng hình ảnh, chẳng

hạn thông qua Roll Ganglia.

 Roll Ganglia cho phép ngƣời quản trị và ngƣời dùng hệ thống có thể quản trị hiệu năng của cluster thông qua giao diện web trên máy frontend. Các báo cáo sinh bởi

Ganglia bao gồm số lƣợng node đang hoạt động và tỉ lệ CPU và bộ nhớ đƣợc sử

dụng. Ngoài ra Ganglia cũng cho phép ngƣời dùng xem các tác vụ đang nằm trong

18

hàng đợi của cluster.

Hình 15 – Một báo cáo sinh bởi Ganglia

19

3. 2. Cài đặt

3. 2. 1. Cấu hình

Phiên bản Rocks đƣợc khóa luận sử dụng là 5.2 (phiên bản mới nhất là 5.3). Để

thuận tiện cho quá trình cài đặt, ta nên download file ISO DVD (2.27GB) từ website

chính thức của Rocks (http://www.rocksclusters.org). File này chỉ cần thiết cho quá trình cài đặt frontend.

Cấu hình yêu cầu tối thiểu để cài đặt frontend node là:

 Ổ cứng: 30GB  RAM: 1GB  Ethernet: 2 cổng

Cấu hình yêu cầu tối thiểu để cài đặt compute node là:

 Ổ cứng: 30GB  RAM: 1GB  Ethernet: 1 cổng

Lƣu ý rằng trong 2 cổng ethernet của frontend node thì một cổng là private, một

cổng là public. Cổng private đƣợc dùng để liên lạc với các máy compute node, do đó cần

thiết lập sao cho các máy compute node và máy frontend node cùng nằm trong một mạng

LAN.

Do hạn chế về độ dài tài liệu nên ở đây chỉ lƣu ý những bƣớc cài đặt cơ bản.

3. 2. 2. Cài đặt frontend

Khởi động frontend. Mặc định frontend sẽ boot từ ổ DVD.

Màn hình tùy chọn cài đặt hiện ra. Gõ build rồi nhấn Enter. Lƣu ý màn hình này

20

chỉ hiện ra trong một thời gian ngắn, vì thế cần thao tác nhanh.

Hình 16 – Màn hình khởi động

Sau khi nạp các dữ liệu cần thiết cho quá trình cài đặt, Rocks sẽ yêu cầu ngƣời dùng

21

chọn các Roll cần thiết.

Hình 17 – Lựa chọn Roll (1)

Lƣu ý chọn CD/DVD-based Roll, và ở màn hình tiếp theo, chọn 4 Roll: Base, OS,

22

Kernel và Web Server. Có thể chọn thêm các Roll khác nếu muốn.

Hình 18 – Lựa chọn Roll (2)

Sau khi nhấn Submit, tất cả các thông tin để mặc định. Ở bƣớc Disk Partitioning,

23

chọn Auto.

Hình 19 - Phân chia ổ

Rocks sẽ tiến hành cài đặt trong một thời gian tƣơng đối lâu. Sau khi cài đặt xong

Rocks sẽ tự khởi động lại, sau đó ta có thể đăng nhập với tài khoản root để bắt đầu sử

dụng.

3. 2. 3. Cài đặt hàng loạt các compute node

Khởi động Root Terminal trên frontend và gõ insert-ethers. Chọn Compute và

24

nhấn OK.

Hình 20 – Lựa chọn appliance type

Thiết lập chế độ PXE Boot đối với tất cả các compute node và khởi động các máy

này. Rocks sẽ tự động cài đặt hàng loạt trên các máy compute node. Sau khi tất cả các

compute node đều đã bắt đầu quá trình cài đặt (để an toàn, có thể chờ cho đến khi tất cả

các máy cài đặt xong), ta có thể thoát insert-ethers bằng cách nhấn F8. Nhƣ vậy chúng ta

đã có một cluster Rocks sẵn sàng sử dụng.

3. 3. Kiến trúc hệ thống

3. 3. 1. Quy tắc đặt tên của Rocks

Một cluster thƣờng đƣợc tổ chức thành các Rack, trong mỗi Rack lại có một hoặc nhiều máy con (Rank). Các Rack này thƣờng đƣợc đặt thành một hàng trên sàn. Nếu nhƣ

cluster là rất lớn, thì số lƣợng Rack trở nên khá nhiều, khi đó các Rack có thể đƣợc sắp thành nhiều hàng, tuy nhiên, bằng cách áp dụng quy tắc đếm từ trên xuống dƣới, từ trái

sang phải, ta luôn luôn có thể quan niệm các Rack trong trƣờng hợp này đƣợc sắp thẳng

hàng. Còn các Rank trong mỗi Rack thì thƣờng đƣợc xếp thành hàng dọc từ dƣới lên. Do

đặc điểm này, chúng ta có thể quan niệm mỗi compute node trong cluster nhƣ một điểm

trên hệ tọa độ Oxy mà Oy là trục ứng với các Rack, còn Ox là trục ứng với các Rank. Đi 25

từ trái sang phải (theo quy tắc đếm bên trên) chỉ số Rack tăng dần từ 0. Đi từ dƣới lên trên, chỉ số Rank tăng dần từ 0. Áp dụng quan niệm này, Rocks mặc định đặt tên các

compute node theo định dạng -- với

compute-0-0 là máy ở Rack đầu tiên tính từ bên trái và Rank đầu tiên (của Rack đó) tính từ bên dƣới).

đƣợc định nghĩa là compute (do đó định dạng sẽ là compute--, ví dụ

Do Rocks lƣu thông tin của các compute node vào cơ sở dữ liệu, nên số lƣợng các Rack và Rank của một cluster là có giới hạn. Tuy nhiên, con số này là rất lớn, vì Rocks

dùng đến 11 chữ số để đánh chỉ số cho các node, vì thế về lý thuyết có thể coi nhƣ số

lƣợng compute node là vô hạn. Có thể khẳng định điều này bằng cách xem xét mô tả

+---------------+-----------------------+------+-----+---------+ | Field | Type | Null | Key | Default | +---------------+-----------------------+------+-----+---------+ | ID | int(11) | NO | PRI | NULL | | Name | varchar(128) | YES | | NULL | | Membership | int(11) | YES | | 2 | | CPUs | int(11) | NO | | 1 | | Rack | int(11) | YES | | NULL | | Rank | int(11) | YES | | NULL | | Arch | varchar(32) | YES | | NULL | | OS | enum('linux','sunos') | NO | | linux | | RunAction | varchar(64) | YES | | os | | InstallAction | varchar(64) | YES | | install | +---------------+-----------------------+------+-----+---------+

bảng nodes nhƣ dƣới đây:

mysql> select Name, Membership, Rack, Rank, RunAction, InstallAction from nodes; +-------------+------------+------+------+-----------+---------------+ | Name | Membership | Rack | Rank | RunAction | InstallAction | +-------------+------------+------+------+-----------+---------------+ | cluster | 1 | 0 | 0 | os | install |

26

Các giá trị lƣu trong bảng nodes:

| compute-0-0 | 2 | 0 | 0 | os | install | | compute-0-1 | 2 | 0 | 1 | os | install | +-------------+------------+------+------+-----------+---------------+ 3 rows in set (0.00 sec)

Thông thƣờng khi cài đặt một cluster, ngƣời quản trị sẽ cài đặt hàng loạt các

compute node theo từng Rack, nghĩa là, đầu tiên cài đặt hàng loạt các compute node

trong Rack số 1 (index là 0) bằng cách bật các máy trong Rack theo thứ tự từ dƣới lên, sau khi cài xong tiếp tục cài đặt các compute node trong rack số 2, ... Mặc dù về lý thuyết

Rocks hỗ trợ việc cài đặt hàng loạt, nên ta có thể cài đặt một cluster hàng nghìn máy tính

chỉ trong một thời gian không quá dài so với thời gian cài đặt một compute node thông

thƣờng, nhƣng việc cài đặt theo từng rack giúp công việc quản trị và bảo trì các máy tính

trong cluster dễ dàng hơn, vì nó cho phép ánh xạ một cách chính xác chỉ số Rack và Rank

của từng compute node trong cơ sở dữ liệu với vị trí vật lý của compute node đó trong

khu vực đặt cluster. Để làm nhƣ vậy, ngƣời quản trị thực thi command sau để cài đặt các

insert-ethers -rack n

compute node cho Rack thứ n + 1:

insert-ethers -rack 0

Ví dụ, để cài đặt hàng loạt các compute node cho rack thứ nhất, thực thi:

compute-0-0, compute-0-1, ...

Với command này thì các compute node trong rack số 1 sẽ đƣợc đặt tên lần lƣợt là

Lƣu ý rằng, Rocks đánh số các compute node theo thứ tự request DHCP mà nó nhận đƣợc, nên nếu muốn ánh xạ một cách chính xác chỉ số rank trong cơ sở dữ liệu với vị trí vật lý của nó, thì ngƣời quản trị cần bật các compute node theo thứ tự từ dƣới lên.

Nếu nhƣ không có tham số -rack thì Rocks sẽ hiểu các compute node đang gửi yêu cầu là các compute node trong Rack số 0, và do đó tên của các

27

compute node sẽ là compute-0-0, compute-0-1, ... bất kể Rack đang cài đặt là Rack bao nhiêu.

Giá trị của trong định dạng bên trên đƣợc định nghĩa là compute, nên

insert-ethers --basename mybasename

các compute node sẽ có tên bắt đầu bằng compute. Để thay đổi giá trị này ta thực thi command:

Tên đƣợc đặt của các compute node sẽ đƣợc dùng trong các tác vụ tính toán và quản

trị về sau. Chúng ta có thể kể ra đây 2 ví dụ về việc sử dụng tên này:

Ví dụ 1: Khi tính toán, để chỉ ra các compute node sẽ tham gia vào tác vụ tính toán,

chúng ta sử dụng một file trong đó ghi tên của các compute node (có thể bao gồm cả

compute-0-0 compute-0-1 localhost

frontend node mặc dù không khuyến khích điều này), mỗi tên một dòng:

(có thể dùng tham số -hosts để thay thế file danh sách cũng đƣợc)

Ví dụ 2: Khi quản trị, ta dùng tên đã đặt của compute node để quản trị node đó. Ví

rocks remove host compute-0-0

dụ, muốn xóa một compute node là compute-0-0 khỏi cluster ta thực thi command:

rocks sync config

Sau đó update các file cấu hình nhờ lệnh

3. 3. 2. Về cơ sở dữ liệu cluster

Rocks sử dụng một cơ sở dữ liệu MySQL để lƣu giữ các thông tin về cluster. Các thông tin này bao gồm: Các máy con (node), thông tin về các phân vùng, các tham số

khởi động và một số thông tin khác. Từ các thông tin này, một số file cấu hình liên quan sẽ đƣợc sinh và sử dụng khi cần thiết. Quá trình sinh file cấu hình diễn ra khi có bất kỳ

28

máy con nào đƣợc thêm vào hay xóa khỏi cluster.

Hình 21 – Vai trò trung tâm của cơ sở dữ liệu SQL

Nguồn: [40]

Đối với bản 5.2, cơ sở dữ liệu đƣợc sử dụng có tên là cluster. Dƣới đây là danh

aliases app_globals appliance_attributes appliance_routes appliances boot bootaction bootflags distributions global_attributes

29

sách các bảng đƣợc phiên bản 5.2 sử dụng:

global_routes memberships networks node_attributes node_rolls node_routes nodes os_attributes os_routes partitions rolls subnets

Nếu chúng ta query bảng nodes, ta sẽ nhận đƣợc danh sách các máy con hiện có

mysql> select Name, Membership, Rack, Rank, RunAction, InstallAction from nodes; +-------------+------------+------+------+-----------+---------------+ | Name | Membership | Rack | Rank | RunAction | InstallAction | +-------------+------------+------+------+-----------+---------------+ | cluster | 1 | 0 | 0 | os | install | | compute-0-0 | 2 | 0 | 0 | os | install | | compute-0-1 | 2 | 0 | 1 | os | install | +-------------+------------+------+------+-----------+---------------+ 3 rows in set (0.00 sec)

trong cluster:

Cơ sở dữ liệu cluster đóng vai trò là xƣơng sống của cluster, tuy nó không trực tiếp tham gia vào quá trình vận hành của cluster, nhƣng lại đóng vai trò dữ liệu nguồn trong việc sinh ra các file cấu hình giúp cluster hoạt động nhƣ ý muốn. Trong các phiên

bản trƣớc 5.2, Rocks cho phép ngƣời quản trị có thể thao tác với cơ sở dữ liệu này thông qua công cụ MySQL nhƣ thao tác với một cơ sở dữ liệu thông thƣờng. Sự cho phép này

ẩn chứa những nguy hiểm tiềm tàng, vì những lý do sau:

30

 Để thao tác đƣợc một cách an toàn với cơ sở dữ liệu này, ngƣời quản trị cần phải hiểu hoàn toàn kiến trúc của cơ sở dữ liệu, nội dung từng bảng, từng trƣờng trong

bảng, ...; đồng thời trong quá trình thao tác phải hết sức cẩn thận, nhất là khi thao tác có liên quan đến các ràng buộc giữa các bảng trong cơ sở dữ liệu hoặc các

trƣờng có sự dƣ thừa dữ liệu. Chúng ta có thể đƣa ra một ví dụ chung chung nhƣ

sau: Có một bảng với một trƣờng thống kê số lƣợng máy tính trong cụm, một bảng

khác liệt kê mỗi máy tính một bản ghi, khi đó giá trị trƣờng thống kê trong bảng 1

phải bằng số lƣợng bản ghi trong bảng 2. Khi đó nếu muốn thêm 1 máy tính vào cơ sở dữ liệu, ngƣời dùng phải thao tác trên 2 bảng thay vì 1.

 Khi cập nhật hệ thống (yum update chẳng hạn!), ngƣời quản trị có thể vô hình

phá hủy cả cơ sở dữ liệu!

Chúng ta có thể xem xét ảnh chụp màn hình của một slide chính thức giới thiệu về Rocks bên dƣới đây [40]. Hình ảnh này cho thấy Rocks 4.x vẫn xem việc sử dụng SQL

31

trực tiếp để thao tác với cơ sở dữ liệu trung tâm là một phƣơng pháp hiệu quả!

Hình 22 – Thao tác trực tiếp với cơ sở dữ liệu cluster

Bản 5.2 giải quyết vấn đề trên bằng cách cô lập cơ sở dữ liệu này, theo nghĩa không

cho phép thao tác trực tiếp bằng công cụ MySQL. Tác dụng của nó là:

 Giải quyết đƣợc trƣờng hợp ràng buộc giữa các bảng, hoặc dƣ thừa dữ liệu.

 Tăng ngữ nghĩa của câu lệnh.

 Không đòi hỏi ngƣời quản trị phải hiểu về cơ sở dữ liệu này, thậm chí, không đòi

hỏi ngƣời quản trị phải biết đến sự tồn tại của cơ sở dữ liệu này!

 Giới hạn những thay đổi mà ngƣời dùng (kể cả root!) có thể tác động đến cơ sở dữ

liệu.

 Bảo vệ cơ sở dữ liệu khỏi tác động của những thao tác hết sức thông thƣờng nhƣ

32

update hệ thống.

Để thao tác với cơ sở dữ liệu, ngƣời dùng phải tiến hành thông qua một giao diện,

mysql> describe bootaction; +---------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Action | varchar(256) | YES | | NULL | | | Kernel | varchar(256) | YES | | NULL | | | Ramdisk | varchar(256) | YES | | NULL | | | Args | varchar(1024) | YES | | NULL | | +---------+---------------+------+-----+---------+----------------+ 5 rows in set (0.01 sec)

đó là hệ thống các câu lệnh. Ví dụ, chúng ta xem xét bảng bootaction có cấu trúc nhƣ sau:

mysql> describe bootaction; +---------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Action | varchar(256) | YES | | NULL | | | Kernel | varchar(256) | YES | | NULL | | | Ramdisk | varchar(256) | YES | | NULL | | | Args | varchar(1024) | YES | | NULL | | +---------+---------------+------+-----+---------+----------------+ 5 rows in set (0.12 sec)

mysql> select Action, Kernel, Ramdisk from bootaction; +------------------+-----------------------+---------------------+ | Action | Kernel | Ramdisk | +------------------+-----------------------+---------------------+ | install | vmlinuz-5.2-i386 | initrd.img-5.2-i386 | | os | localboot 0 | NULL | | memtest | kernel memtest | NULL | | install headless | vmlinuz-5.2-i386 | initrd.img-5.2-i386 |

33

Bảng này lƣu các giá trị bootaction trong hệ thống.

| rescue | vmlinuz-5.2-i386 | initrd.img-5.2-i386 | | pxeflash | kernel memdisk bigraw | pxeflash.img | +------------------+-----------------------+---------------------+ 6 rows in set (0.00 sec)

rocks add bootaction action="install headless noacpi" kernel="vmlinuz- 5.2-i386" ramdisk="initrd.img-5.2-i386 ks ramdisk_size=150000 lang= devfs=nomount pxe kssendmac selinux=0 noipv6 headless vnc acpi=off"

Để thêm một bootaction, ngƣời dùng có thể dùng câu lệnh:

insert into bootaction (Action, Kernel, Ramdisk, Args) values ('install headless noacpi', 'vmlinuz-5.2-i386', 'initrd.img-5.2-i386', 'ks ramdisk_size=150000 lang= devfs=nomount pxe kssendmac selinux=0 noipv6 headless vnc acpi=off');

Thay vì dùng công cụ MySQL:

3. 3. 3. Về sơ đồ cơ sở, file cơ sở và quá trình cài đặt một compute node

Trái tim của Rocks là một "sơ đồ cơ sở" (Kickstart Graph). Sơ đồ cơ sở này là một

cấu trúc cây dựa trên XML, biểu diễn kiến trúc bên trong và các thiết bị đang tồn tại

trong cluster. Cạnh nối giữa các nút trong sơ đồ cơ sở cho biết package nào cần cài đặt trên thiết bị nào. Các cạnh nối này có thể đƣợc tạo bằng cách chỉnh sửa các file XML của

34

Rocks, nhờ đó có thể thay đổi đƣợc các package cần cài đặt trên mỗi thiết bị.

Hình 23 – Minh họa trực quan một phần của sơ đồ cơ sở

Sơ đồ cơ sở đóng vai trò nhƣ DNA của toàn cluster. Một cluster có thể bao gồm

nhiều loại node khác nhau nhƣ compute node, fontend node, …. Mỗi một loại node này

lại yêu cầu một tập hợp phần mềm đặc thù. Tập hợp các phần mềm đặc thù này đƣợc mô

tả trong “file cơ sở” (Kickstart File), file này đƣợc sinh từ sơ đồ cơ sở và đƣợc yêu cầu

bởi các node trong quá trình cài đặt.

Việc sử dụng sơ đồ cơ sở để mô tả cluster giúp Rocks định nghĩa một cách hiệu quả

từng loại node mà không cần khai báo lặp các thành phần giống nhau (tƣơng tự nhƣ cơ

thể các động vật có vú giống nhau đến 80% bộ gene, các loại node khác nhau của Rocks

cũng giống nhau ở phần lớn các phần mềm đƣợc dùng). Sơ đồ cơ sở có thể mô tả đƣợc sự khác nhau giữa các loại node mà không cần khai báo lặp những thành phần giống nhau.

Sơ đồ cơ sở và file cơ sở giúp Rocks thay đổi hoàn toàn cách thức cài đặt hệ thống thông thƣờng, do nó giúp trừu tƣợng hóa sự khác nhau về phần cứng của các node, cho phép tự động nhận diện các module phần cứng cần phải dùng (nhƣ các loại hệ thống đĩa

SCSI, IDE, RAID; các cổng ethernet và các cổng mạng tốc độ cao) [47]. Có thể nói đây

là một nhân tố quan trọng giúp Rocks đạt mục tiêu ban đầu – Làm cho cluster trở nên dễ

35

dàng.

Hình 24 – Quá trình sinh file cơ sở

Nguồn: [12]

Về quá trình sinh file cơ sở, ta có thể xem xét sequence diagram dƣới đây:

Chúng ta sẽ xem lại quá trình cài đặt một compute node diễn ra nhƣ thế nào. Khi

36

máy frontend nhận đƣợc request DHCP đầu tiên, thì một thông báo hiện ra cho biết Rocks đã phát hiện đƣợc một computer appliance mới.

Hình 25 – Nhận diện appliance mới

Tiếp đó, thông báo hiện thị cho biết Rocks đã thêm các thông tin về computer

Hình 26 – Đã thêm appliance vào cơ sở dữ liệu

appliance mới vào database và update tất cả các file cấu hình:

37

Một lát sau, ta sẽ thấy có một thay đổi nhỏ trong thông báo trên:

Hình 27 – Đã yêu cầu thành công file cơ sở

Dấu (*) bên cạnh tên compute node cho biết compute node đã request thành công

file cơ sở. Tới đây, nhiệm vụ của insert-ethers xem nhƣ kết thúc, mặc dù quá trình cài đặt trên compute node vẫn còn tiếp diễn [42].

File cơ sở là một file text ASCII thông thƣờng, chứa các thông tin về tên của các

package cần cài đặt và các command cần thực thi. File này đƣợc mã hóa và gửi đến

compute node đã yêu cầu. Hơn thế nữa, chỉ có các compute node đã đƣợc frontend nhận

diện mới có thể gửi yêu cầu file này.

File cơ sở không tồn tại trên frontend mà nó đƣợc sinh bởi frontend khi nhận đƣợc yêu cầu từ compute node. File này không tuân theo một định dạng có thể lập trình đƣợc

list và post-configuration trong đó phần phức tạp nhất là post-configuration.

38

[13], tuy nhiên vẫn có cấu trúc cụ thể, bao gồm 3 phần là pre-configuration, package

Hình 28 – File cơ sở

Nguồn: [13]

Dƣới đây là hình ảnh minh họa thành phần của file cơ sở.

3. 4. Quản trị

3. 4. 1. Tổng quan

Nếu nhƣ không kể đến phƣơng pháp quản lý cluster trực quan bằng Ganglia, thì

phƣơng pháp hiệu quả nhất và cũng là duy nhất để quản trị một cluster Rocks chính là thao tác bằng dòng lệnh. Thực chất, hệ thống các dòng lệnh mà Rocks cung cấp này

chính là giao diện giữa ngƣời dùng và cơ sở dữ liệu cluster. Bằng cách này, Rocks giới hạn các thay đổi mà ngƣời quản trị có thể tác động đến cơ sở dữ liệu, nhờ đó bảo đảm an toàn cho các thông tin đƣợc xem là tối quan trọng đối với hoạt động của cluster.

Trên thực tế quá trình update các thông tin cấu hình của cluster diễn ra qua 2 giai

39

đoạn:

 Sử dụng một lệnh trong hệ thống lệnh do Rocks cung cấp để thao tác với cơ sở dữ

liệu (ví dụ rocks set host).

 Sinh các file cấu hình dựa trên các thông tin vừa đƣợc cập nhật trong cơ sở dữ liệu

(ví dụ rocks sync config).

Các lệnh ứng với các giai đoạn (1) và (2) nêu trên không nhất thiết phải đi kèm với nhau. Ngƣời quản trị có thể dùng nhiều lệnh dạng (1) để cập nhật cơ sở dữ liệu và sau đó

dùng lệnh dạng (2) để sinh các file cấu hình.

Dƣới đây là output khi thực thi lệnh rocks list host. Thực chất đây là một phần

Hình 29 – Các node trong cluster

nội dung của bảng nodes trong cơ sở dữ liệu cluster.

3. 4. 2. Frontend quản trị cluster nhƣ thế nào?

Để có thể mở kết nối SSH tới một máy mà không cần gõ password, khóa public của

ngƣời dùng trên máy cục bộ cần đƣợc thêm vào file $HOME/.ssh/authorized_keys trên

$HOME/.ssh/id_rsa chƣa tồn tại thì ngƣời dùng sẽ đƣợc yêu cầu tạo mới cặp khóa SSH. Điều này đúng với tất cả ngƣời dùng trên hệ thống, kể cả root. Chính vì vậy, trong lần

máy cần kết nối. Đối với Rocks, khi ngƣời dùng đăng nhập lần đầu tiên, nếu file

40

đầu tiên khởi động terminal, ngƣời dùng sẽ gặp một màn hình nhƣ sau:

Hình 30 – Tạo cặp khóa private, public trong lần đầu khởi động terminal

Một điều chú ý quan trọng: khi hệ thống yêu cầu nhập passphrase, ngƣời dùng chỉ

cần nhấn Enter để bỏ qua (không nhập bất kỳ ký tự nào khác).

$HOME/.ssh/authorized_keys.

Sau khi cặp khóa SSH của ngƣời dùng đƣợc tạo, khóa public sẽ đƣợc copy vào file

Trên máy frontend, thƣ mục home của root không đƣợc mount bằng NFS trên tất cả

các máy compute nên file $HOME/.ssh/authorized_keys sẽ đƣợc đưa vào file cơ sở và đƣợc phân phối tới các máy compute trong quá trình cài đặt.

cluster-fork poweroff phân phối lệnh poweroff tới tất cả các máy trong cluster thông qua SSH.

41

Đối với ngƣời dùng root trên frontend, việc thiết lập cặp khóa SSH là rất quan trọng do các tác vụ quản trị của root đều yêu cầu SSH đến các compute node. Chẳng hạn, lệnh

Hình 31 – SSH tới compute-0-0

Trong phần dƣới đây, chúng ta sẽ tìm hiểu 2 tác vụ quản trị cơ bản và quan trọng

42

nhất đối với cluster Rocks.

3. 4. 3. Các tác vụ quản trị cơ bản

3. 4. 3. 1. Cài đặt lại một compute node trong lần boot PXE tiếp theo

Kể từ phiên bản Rocks 4.3, thứ tự boot ƣu tiên set trong BIOS đƣợc khuyến cáo là:

 CDROM

 PXE boot

 Hard disk

Do PXE boot đứng trƣớc Hard disk, nên chúng ta có thể cho rằng thiết lập nhƣ thế

này trong BIOS sẽ khiến các compute node liên tục cài lại mỗi lần reboot. Tuy nhiên, giá

trị mặc định ứng với tham số action (sẽ mô tả dƣới đây) cho phép hệ thống bỏ qua quá trình PXE boot và thực thi quá trình boot trên thiết bị tiếp theo trong danh sách kể trên (ở

đây là Hard disk) (cũng từ đây ta có thể thấy vai trò của insert-ethers: Nhận diện các thiết

bị (bao gồm máy con, thiết bị mạng, ..., gọi chung là appliance) và thêm các thông tin cần

thiết vào database, chứ không có vai trò gì trong quá trình cài đặt của từng máy con. Chính vì vậy khi cài đặt lại các máy con ta không cần thiết phải khởi động insert-ethers do các thông tin cần thiết đã có trong cơ sở dữ liệu rồi.).

Các thuộc tính của quá trình boot PXE có thể đƣợc thiết lập nhờ thay đổi giá trị 2

tham số: boot và bootaction. Tham số boot định nghĩa hành động nào sẽ đƣợc thực thi

(ví dụ, os để bỏ qua quá trình boot PXE và boot trên thiết bị tiếp theo trong danh sách do

BIOS định nghĩa, install để cài đặt lại). Đối với tất cả các máy con đang hoạt động ổn

Hình 32 – Giá trị tham số action với các node trong cluster

43

định, giá trị của tham số action là os.

Tham số bootaction "bind" (tham chiếu) một action cụ thể tới một số tham số

Hình 33 – Các bootaction hiện có

cần thiết để thực thi action đó.

Ví dụ, để bắt buộc máy compute-0-0 phải cài đặt lại trong lần boot PXE tiếp theo,

rocks set host boot compute-0-0 action=install

ta thực thi command:

os thành install nên quá trình boot PXE đƣợc thực thi và máy compute-0-0 đƣợc cài

Khi máy compute-0-0 đƣợc khởi động lại, do tham số action đã thay đổi giá trị từ

đặt lại. Sau khi cài đặt thành công, compute-0-0 yêu cầu máy frontend thiết lập giá trị

tham số action của quá trình boot PXE của nó thành os. Để kiểm chứng, ta có thể yêu

ssh compute-0-0 "shutdown -r now"

cầu máy compute-0-0 khởi động lại:

Lƣu ý rằng ta cũng có thể sử dụng wildcard để thực thi hàng loạt lệnh trên. Cụ thể,

rocks set host boot % action=install

44

để yêu cầu tất cả các node cài đặt lại trong lần boot tiếp theo, ta thực thi lệnh:

rocks set host boot compute action=install

Còn để bắt buộc cài đặt lại tất cả các compute node, ta thực thi lệnh:

Để thay đổi tham số bootaction, trƣớc hết ta cần định nghĩa bootaction mới (nếu

chƣa có). Ví dụ, ta sẽ định nghĩa một bootaction là install headless noacpi với các tham số nhƣ sau:

 Kernel: vmlinuz-5.2-i386

 Ramdisk: initrd.img-5.2-i386

selinux=0 noipv6 headless vnc acpi=off

 Args: ks ramdisk_size=150000 lang= devfs=nomount pxe kssendmac

rocks add bootaction action="install headless noacpi" kernel="vmlinuz- 5.2-i386" ramdisk="initrd.img-5.2-i386 ks ramdisk_size=150000 lang= devfs=nomount pxe kssendmac selinux=0 noipv6 headless vnc acpi=off"

Hình 34 – Thêm bootaction

Command là:

45

Trạng thái compute-0-0 trƣớc khi thay đổi giá trị bootaction

Hình 35 – Các thuộc tính của node compute-0-0

rocks set host installaction compute-0-0 action="install headless noacpi"

Hình 36 – Thay đổi giá trị tham số installaction 46

Thực hiện lệnh:

Hình 37 – Giá trị tham số installaction thay đổi

Ta sẽ thấy giá trị tham số bootaction của compute-0-0 bị thay đổi:

rocks remove bootaction action="install headless noacpi"

47

Để xóa bỏ bootaction vừa thêm, thực thi lệnh:

Hình 38 – Loại bỏ một bootaction

bootaction của các compute node mà thực thi xóa luôn từ cơ sở dữ liệu. Do đó ngƣời

Lƣu ý rằng khi thực thi lệnh này, Rocks không kiểm tra giá trị các tham số

quản trị cần phải thật cẩn thận khi thực thi lệnh này, kiểm tra giá trị bootaction của các

computenode trƣớc khi xóa bỏ một bootaction nào đó.

3. 4. 3. 2. Xem và thay đổi các cấu hình mạng

Rocks cung cấp một số command để xem và thay đổi các cấu hình mạng của các

48

node trong cluster. Ví dụ, để liệt kê các interface:

Hình 39 – Xem các cổng ethernet

Để thay đổi các thông tin về mạng, sử dụng lệnh rocks set host interface. Ví

rocks set host interface mac cluster iface=eth1 mac=00:0c:29:6b:1b:48 rocks set host interface mac cluster iface=eth0 mac=00:0c:29:6b:1b:52

dụ, thực thi các command sau đây ta sẽ hoán đổi các ethernet 0 và 1 cho nhau.

(Thực ra cần hoán đổi cả module (rocks set host interface module) nhƣng vì

49

module giống nhau nên không cần).

CHƢƠNG 4. LẬP TRÌNH SONG SONG VỚI MPI

4. 1. Các mô hình lập trình song song

Có nhiều mô hình lập trình song song, tuy nhiên phổ biến nhất là 4 mô hình: Mô hình bộ nhớ chia sẻ (Shared Memory), mô hình đa luồng (Threads), mô hình truyền thông

điệp (Message Passing) và mô hình song song dữ liệu (Data Parallel). Các mô hình lập

trình song song tồn tại nhƣ một tầng giao diện giữa ứng dụng xử lý song song và kiến

trúc phần cứng / bộ nhớ. Trên thực tế, các mô hình lập trình kể ra trên đây có thể đƣợc cài

đặt trên bất kỳ kiến trúc phần cứng nào [4]. Chẳng hạn:

 Mô hình chia sẻ bộ nhớ có thể đƣợc cài đặt trên các máy có bộ nhớ phân tán. Theo hƣớng này, bộ nhớ của máy là phân tán về mặt vật lý nhƣng thống nhất về mặt

logic. Hƣớng tiếp cận này thƣờng đƣợc mô tả bằng khái niệm bộ nhớ chia sẻ ảo.

 Mô hình truyền thông điệp có thể đƣợc cài đặt trên các máy có bộ nhớ chia sẻ, là các máy mà các tác vụ tính toán có thể truy cập trực tiếp vào không gian bộ nhớ

chung.

Việc sử dụng mô hình nào tùy thuộc vào các tài nguyên hiện có và sự lựa chọn của

ngƣời dùng. Không có mô hình nào là tốt nhất, mặc dù vẫn có những mô hình đƣợc cài

đặt tốt hơn những mô hình còn lại [4].

4. 1. 1. Mô hình bộ nhớ chia sẻ

Trong mô hình bộ nhớ chia sẻ, các tác vụ tính toán dùng chung một không gian địa chỉ trong đó các thao tác đọc và ghi đƣợc thi hành một cách bất đồng bộ. Việc truy cập

tới vùng nhớ chia sẻ đƣợc quản lý bởi các công cụ nhƣ khóa (lock), cờ hiệu (semaphore). Do không có khái niệm tác vụ nào sở hữu dữ liệu nào, nên hầu nhƣ ngƣời lập trình không

cần quan tâm đến việc cài đặt liên lạc giữa các tác vụ. Tuy nhiên, đây cũng chính là điểm yếu lớn nhất của mô hình này, vì việc giữ cho một cụm dữ liệu nào đó là cục bộ đối với một tác vụ cụ thể là rất khó khăn, nhất là trong hoàn cảnh mô hình này không cung cấp

50

một phƣơng tiện / quan niệm nào giúp quản lý tính cục bộ của dữ liệu.

Hình 40 – Mô hình bộ nhớ chia sẻ

Nguồn: [38]

4. 1. 2. Mô hình đa luồng

Trong mô hình đa luồng, một tiến trình đơn lẻ có thể có nhiều luồng thực thi song song. Các luồng liên lạc với nhau thông qua vùng nhớ toàn cục. Điều này khiến việc cài

đặt trở nên khó khăn do cần phải đảm bảo không có hai luồng cùng sửa đổi giá trị của

51

một vùng nhớ toàn cục nào đó vào một thời điểm bất kỳ. Nói chung mô hình đa luồng thƣờng đƣợc dùng với kiến trúc bộ nhớ chia sẻ.

Hình 41 – Mô hình đa luồng

Nguồn: [4]

4. 1. 3. Mô hình truyền thông điệp

Mô hình truyền thông điệp thƣờng đƣợc dùng với kiến trúc bộ nhớ phân tán. Mô

hình này có những đặc điểm sau đây:

 Các tác vụ tính toán sử dụng các vùng nhớ cục bộ của chúng trong quá trình thực thi. Các tác vụ này có thể đƣợc thực thi trên cùng một máy tính hoặc (phổ biến

hơn) trên nhiều máy tính.

 Các tác vụ này trao đổi dữ liệu bằng cách gửi và nhận thông điệp.

 Việc truyền dữ liệu giữa các tác vụ cần phải đồng bộ hóa giữa tác vụ gửi và tác vụ nhận, theo nghĩa, khi có một tác vụ truyền thông điệp thì phải có một tác vụ khác

52

nhận thông điệp đó.

Hình 42 – Mô hình truyền thông điệp

Nguồn: [4]

4. 1. 4. Mô hình song song dữ liệu

Mô hình song song dữ liệu làm việc tốt với cả kiến trúc bộ nhớ chia sẻ lẫn kiến trúc

bộ nhớ phân tán. Mô hình này có những đặc điểm sau đây:

 Hầu hết các công việc cần xử lý song song đều tập trung vào việc thực thi các tác vụ trên tập hợp dữ liệu. Nói chung tập hợp dữ liệu này đƣợc tổ chức theo một cấu

trúc phổ biến, chẳng hạn một dãy các dữ liệu.

 Các tác vụ tính toán cùng làm việc trên một cấu trúc dữ liệu, nhƣng mỗi tác vụ làm

việc trên một phần riêng biệt của cấu trúc dữ liệu đó.

 Các tác vụ thực thi các công việc giống nhau trên những phần dữ liệu riêng của

53

chúng, ví dụ "Cộng thêm 4 vào tất cả các phần tử".

Hình 43 – Mô hình song song dữ liệu

Nguồn: [4]

4. 2. Các ƣu điểm của mô hình truyền thông điệp

4. 2. 1. Phổ biến

Mô hình truyền thông điệp rất phù hợp với hệ thống gồm các bộ xử lý riêng rẽ đƣợc kết nối với nhau thành một mạng cục bộ. Vì thế mô hình này phù hợp một cách tự nhiên

với các siêu máy tính song song đang thịnh hành.

4. 2. 2. Khả năng mô tả

Mô hình truyền thông điệp đƣợc xem nhƣ một mô hình hoàn chỉnh để diễn tả các

thuật toán xử lý song song. Mô hình này cung cấp khả năng quản lý tính cục bộ dữ liệu –

lƣu ý rằng đây chính là thiếu sót trong mô hình song song dữ liệu. Mô hình truyền thông điệp rất phù hợp với các thuật toán tự trị (Adaptive Algorithm, loại thuật toán có khả

năng thay đổi tính chất tùy vào tài nguyên đƣợc cung cấp, chẳng hạn khi có thêm bộ nhớ

thì độ phức tạp thuật toán giảm xuống [31]), hoặc các chƣơng trình có khả năng tiếp tục

54

hoạt động ngay cả khi có sự không cân bằng về tốc độ tính toán [9].

4. 2. 3. Dễ gỡ lỗi hơn

Bẫy lỗi và gỡ lỗi cho các chƣơng trình xử lý song song hiện nay vẫn là một lĩnh vực

nghiên cứu đầy thách thức. Nói chung việc viết các bộ bẫy / gỡ lỗi cho các chƣơng trình

xử lý song song là dễ dàng hơn đối với mô hình chia sẻ bộ nhớ. Tuy nhiên, có lý do để

nói rằng quá trình bẫy / gỡ lỗi diễn ra dễ dàng hơn trong mô hình truyền thông điệp. Đó

là vì một trong những nguyên nhân phổ biến nhất dẫn đến lỗi trong các chƣơng trình xử

lý song song là developer vô tình ghi đè lên vùng nhớ đã tồn tại. Mô hình truyền thông điệp quản lý việc truy cập bộ nhớ chặt chẽ hơn so với các mô hình khác (chỉ có một tiến

trình duy nhất đƣợc phép truy cập trực tiếp tới một vùng nhớ cụ thể) nên tạo điều kiện để

developer dễ dàng tìm ra những thao tác đọc / ghi gây lỗi. Một số trình gỡ lỗi thậm chí

còn có thể hiển thị hàng đợi các thông điệp, điều mà các developer thƣờng không thể biết

đƣợc.

4. 2. 4. Hiệu năng

Nguyên nhân cơ bản nhất khiến cho truyền thông điệp là mô hình không thể thiếu trong môi trƣờng tính toán song song chính là hiệu năng. Các CPU hiện đại càng ngày

càng nhanh hơn, do đó việc quản lý bộ nhớ cache của chúng (và bộ nhớ nói chung) đã trở

thành chìa khóa để tận dụng đƣợc khả năng của phần cứng. Mô hình truyền thông điệp

cung cấp một phƣơng tiện để các developer liên kết các dữ liệu cụ thể với các tiến trình,

và do đó, cho phép bộ biên dịch và bộ quản lý bộ nhớ cache hoạt động ở hiệu suất tối đa.

Lƣu ý rằng trong thực tế, một trong những nguyên nhân khiến hệ thống các máy tính

riêng rẽ có thể vƣợt qua khả năng tính toán của những cỗ máy chỉ có một vi xử lý chính

là vì chúng có dung lƣợng bộ nhớ chính và bộ nhớ cache lớn hơn. Các ứng dụng phụ

thuộc vào tài nguyên nhớ (Memory Bound Application, [31]) có thể đƣợc tăng tốc nếu đƣợc viết lại cho các hệ thống kiểu này. Thậm chí đối với các hệ thống máy tính dùng chung bộ nhớ, việc sử dụng mô hình truyền thông điệp cũng có thể giúp tăng hiệu năng vì

developer có khả năng quản lý tính cục bộ dữ liệu.

4. 3. Giới thiệu về MPI

55

MPI (Message Passing Interface) không phải là một cuộc cách mạng trong lập trình cho các máy tính song song. MPI là tập hợp của những tính năng tốt nhất của rất nhiều hệ

thống truyền thông điệp đã tồn tại trƣớc nó. Các tính năng này, khi đƣợc đƣa vào MPI, sẽ đƣợc chuẩn hóa và nếu nhƣ phù hợp thì sẽ đƣợc phát triển thêm.

MPI là một bản mô tả (specification), không phải một bản cài đặt (implementation). Tính tới thời điểm năm 1999 (chƣa rõ con số thống kê cho thời điểm hiện tại), tất cả các

nhà cung cấp các hệ thống máy tính song song đều cung cấp các bản cài đặt chuyên biệt

hóa của MPI. Ngoài ra, nhiều bản cài đặt MPI miễn phí có thể đƣợc download từ nhiều

nguồn trên internet. Do là một bản mô tả không phụ thuộc vào một cài đặt cụ thể nào, nên

một chƣơng trình MPI đúng nghĩa phải có khả năng chạy trên tất cả các bản cài đặt mà

không cần thay đổi gì. MPI có các phiên bản dành cho các ngôn ngữ khác nhau nhƣ C,

C++, Fortran.

MPI là một thƣ viện, không phải một ngôn ngữ. Nó định nghĩa tên, các chuỗi lời gọi

và kết quả của các tiến trình con đƣợc gọi từ một chƣơng trình Fortran; các hàm sẽ đƣợc

gọi từ một chƣơng trình C; và các lớp và phƣơng thức tạo nên thƣ viện MPI cho C++.

Các chƣơng trình MPI đƣợc viết bằng Fortran, C hoặc C++ đƣợc biên dịch bằng công cụ

biên dịch thông thƣờng của các ngôn ngữ này và đƣợc liên kết tới thƣ viện MPI tƣơng

ứng.

4. 4. Mục tiêu của MPI

Mục tiêu chính của MPI là để giúp các developer không cần thỏa hiệp giữa tính hiệu quả (efficiency), linh động (portability) và khả năng hoạt động (functionality). Cụ

thể hơn, ngƣời dùng có thể viết các chƣơng trình có tính linh động cao trong khi vẫn tận

dụng đƣợc khả năng từ các phần cứng và phần mềm đƣợc chuyên biệt hóa từ những nhà

cung cấp khác nhau. Lƣu ý rằng một lớp ngƣời dùng quan trọng của MPI chính là những

nhà phát triển các thƣ viện xử lý song song, đối với lớp ngƣời dùng này thì nhu cầu về tính hiệu quả, linh động và khả năng hoạt động là rất lớn.

4. 5. Các đặc điểm của MPI

MPI hỗ trợ việc lập trình song song: MPI là hệ thống cho phép các máy con trong cụm có thể xử lý song song và giải quyết chung một vấn đề. Nếu một cluster bao gồm 1000 máy con, thì một chƣơng trình MPI lý tƣởng sẽ cho phép tăng tốc tính toán lên gấp

56

1000 lần. Tuy nhiên, tốc độ tính toán thực sự thì phụ thuộc vào nhiều yếu tố, bao gồm

loại hình vấn đề đang phải giải quyết, đặc điểm của thuật toán sử dụng, và kỹ năng của ngƣời lập trình.

MPI làm việc trên hệ thống bộ nhớ phân tán: Để tăng tính hiệu quả, MPI thƣờng chạy trên các cluster gồm các máy tính cùng loại, sử dụng các kết nối mạng tốc độ cao.

Tuy nhiên, MPI sử dụng một hệ thống bộ nhớ phân tán, theo nghĩa mỗi máy con trong

cluster có một bộ nhớ riêng rẽ, dữ liệu cần thiết cho tác vụ đang giải quyết đƣợc chia ra

cho tất cả các máy trong cluster. Điều này có nghĩa là trƣớc hoặc trong quá trình xử lý,

một máy con trong cluster có thể yêu cầu các dữ liệu hoặc kết quả tính toán từ các máy

khác trong cluster.

MPI là một giao diện lập trình, không phải một hệ thống đã cài đặt sẵn: Các bản cài đặt MPI có thể đƣợc viết bằng nhiều ngôn ngữ, nhƣ C, C++, Fortran, .. Việc biên dịch

một chƣơng trình MPI giống hệt nhƣ biên dịch một chƣơng trình thông thƣờng. Chẳng

hạn, nếu chƣơng trình đƣợc viết bằng C, thì ngƣời lập trình chỉ đơn giản include thƣ viện

MPI và biên dịch sử dụng gcc.

Các máy con trong cluster thực thi cùng một chƣơng trình: Ngƣời lập trình viết một

chƣơng trình duy nhất. Tại thời điểm biên dịch, bản thực thi của chƣơng trình đƣợc tạo và

tồn tại duy nhất tại máy biên dịch. Thông thƣờng, khi ngƣời quản trị yêu cầu thực thi một

chƣơng trình MPI, bản thực thi này sẽ đƣợc tự động copy đến tất cả các máy con đƣợc

ngƣời quản trị yêu cầu tham gia tính toán, và sau đó bắt đầu thực thi đồng thời trên các

máy này. Tuy nhiên, đối với các chƣơng trình đƣợc thực thi nhiều lần, hoặc để giảm thời

gian không cần thiết, việc copy bản thực thi đến các máy con trong cụm có thể đƣợc tiến

hành thủ công bởi ngƣời quản trị. Do mỗi máy con trong cụm đƣợc phân biệt bởi một số

nhận dạng tƣơng ứng và duy nhất, nên mỗi máy có thể xử lý một công việc khác nhau,

mặc dù chúng cùng thực thi một chƣơng trình. Theo thông lệ, máy con với mã số 0 (nhƣ ví dụ dƣới đây) sẽ chịu trách nhiệm thu thập kết quả tính toán từ các máy con khác và xử lý tiếp.

Các đoạn mã có sẵn cần phải đƣợc chuyển đổi phù hợp để có thể sử dụng MPI hiệu quả: Ngƣời lập trình cần nghĩ đến một phƣơng án để có thể chia nhỏ bài toán hiện tại

thành các bài toán con có độ phức tạp tƣơng đƣơng nhau sao cho các máy tham gia tính toán có thể hoàn thành đƣợc trong khoảng thời gian phù hợp. Nói cách khác, ngƣời lập

57

trình phải "tƣ duy lại theo kiểu lập trình song song".

4. 6. Khác biệt giữa các bản cài đặt bằng C và C++ của MPI

Một khác biệt quan trọng trong cách cài đặt MPI sử dụng C và C++ nằm ở cách xử

lý các giá trị trả về. Trong C, giá trị trả về thực sự đƣợc truyền nhƣ tham số (ví dụ, tham

số size trong MPI_Comm_size thực ra là biến lƣu kết quả), còn giá trị trả về thông thƣờng

thực chất lại là mã lỗi. Nếu mã lỗi trả về không phải là MPI_SUCCESS, thì mặc định tất cả các tiến trình sẽ dừng thực thi. Nếu các tiến trình vẫn tiếp tục thực thi, thì giá trị trả về của các hàm khi đó sẽ là mã lỗi tƣơng ứng. Trong C++, giá trị trả về thông thƣờng chính

là giá trị trả về thực sự (ví dụ, MPI::Comm::Get_size()). Khi có lỗi xảy ra, mặc định tất

cả các chƣơng trình cũng sẽ dừng thực thi giống nhƣ C, nhƣng trong trƣờng hợp các tiến

trình vẫn tiếp tục thực thi, thì thay vì trả về mã lỗi, chƣơng trình sẽ ném ra một exception.

Bảng 1 – Tương ứng các hàm MPI trong C và C++

Dƣới đây là bảng tƣơng ứng các hàm MPI trong C và C++.

int MPI_Init(int *argc, char ***argv)

void MPI::Init(int& argc, char**& argv)

int

comm,

MPI_Comm_size(MPI_Comm

void MPI::Init( ) int MPI::Comm::Get_size( ) const

int

comm,

MPI_Comm_rank(MPI_Comm

int MPI::Comm::Get_rank( ) const

*sendbuf,

MPI_Reduce(void int

count,

int *size) int *rank) int MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) void int *recvbuf, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) int MPI_Finalize( )

void MPI::Intracomm::Bcast(void* buffer, int count, const Datatype& datatype, int root) const void MPI::Intracomm::Reduce(const void* sendbuf, void* recvbuf, int count, const Datatype& datatype, const Op& op, int root) const void MPI::Finalize( )

C C++

Lƣu ý rằng, từ đây trở đi, chúng ta chỉ xét thƣ viện MPI đƣợc cài đặt bằng C.

4. 7. MPI trên Rocks

58

Thƣ viện MPI đƣợc hỗ trợ mặc định trên Rocks là OpenMPI.

Hình 44 – MPI trên Rocks

Khi một ứng dụng MPI đƣợc gọi, các ứng dụng MPI trên các máy compute đƣợc sử dụng

trong quá trình tính toán sẽ lần lƣợt đƣợc gọi thông qua SSH. Đây chính là một lý do

khiến mỗi ngƣời dùng đều phải tạo cặp khóa private – public ngay lần đầu khởi động

terminal trên máy frontend.

4. 8. Viết chƣơng trình Hello World

#include "mpi.h" #include int main(int argc, char* argv[]) { int processId; int noProcesses; int nameSize; char computerName[MPI_MAX_PROCESSOR_NAME]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &noProcesses); MPI_Comm_rank(MPI_COMM_WORLD, &processId); MPI_Get_processor_name(computerName, &nameSize);

59

Dƣới đây là mã nguồn chƣơng trình viết bằng C.

fprintf(stderr, "Hello from process %d on %s\n", processId, computerName); MPI_Finalize(); return 0; }

Lƣu mã nguồn trên thành file hello.c, và biên dịch bằng mpicc. Command biên

mpicc -o hello hello.c

dịch là:

Dƣới đây là kết quả khi chạy với các tham số khác nhau.

Chạy trên local (máy frontend)

mpirun -np 5 hello

Từ thƣ mục chứa file hello (output của quá trình biên dịch bên trên), thực thi lệnh

60

Ta nhận đƣợc output nhƣ hình dƣới.

Hình 45 – Output của chương trình Hello World (1)

Mặc định, khi ngƣời quản trị không chỉ định sẽ sử dụng máy nào trong cluster để

thực thi chƣơng trình, thì chƣơng trình sẽ thực thi ngay trên local (máy frontend). Tham

số np cho biết số tiến trình sẽ đƣợc khởi động. Do ta xác định số tiến trình là 5, nhƣng lại

chỉ có một máy thực thi (máy local) nên các tiến trình sẽ chia sẻ thời gian CPU (trong

trƣờng hợp máy thực thi có đủ 5 bộ xử lý thì mỗi tiến trình sẽ chạy trên một bộ xử lý).

Chạy trên các máy compute

compute-0-0 compute-0-1

Ta tạo mới một file là machines trên cùng thƣ mục với file hello, với nội dung là:

Khởi động các máy compute-0-0 và compute-0-1 trong cluster, sau đó thực thi

scp ~/hello root@compute-0-0:~

61

các lệnh sau để copy file hello đến tất cả các máy này:

scp ~/hello root@compute-0-1:~

mpirun -np 2 -machinefile machines hello

Thực thi bằng lệnh:

Hình 46 – Output của chương trình Hello World (2)

Khi đó output sẽ là:

localhost compute-0-1

Nếu sửa lại file machines thành

62

Thì output sẽ là:

Hình 47 – Output của chương trình Hello World (3)

compute-0-1

Nếu sửa file machines thành:

63

Thì output sẽ là:

Hình 48 – Output của chương trình Hello World (4)

Ở trƣờng hợp đầu, số lƣợng tiến trình bằng số lƣợng máy con tham gia thực thi

(thực chất là bằng số lƣợng bộ xử lý tham gia tính toán, nhƣng vì mỗi máy có một bộ xử

lý nên ta dùng khái niệm "máy con" thay cho khái niệm "bộ xử lý"), nên mỗi máy sẽ thực

thi một tiến trình.

Ở các trƣờng hợp sau, do số lƣợng tiến trình nhiều hơn số lƣợng máy con nên sẽ có

máy phải xử lý nhiều hơn một tiến trình.

4. 9. Các hàm MPI cơ bản

4. 8. 1. Hàm MPI_Init

Hàm này đƣợc sử dụng để bắt đầu một phiên làm việc MPI. Tất cả các chƣơng trình

MPI_Init có thêm các lời gọi hàm khác nhƣng các lời gọi hàm này không trực tiếp hoặc 64

MPI đều phải gọi đến hàm này nhƣng chỉ gọi duy nhất 1 lần. Nói chung, hàm MPI_Init cần đƣợc gọi trƣớc tất cả các hàm MPI khác (điều đó có nghĩa là nếu trƣớc lời gọi

MPI_Initialized. Hàm này đƣợc sử dụng để kiểm tra xem hàm MPI_Init đã đƣợc gọi

gián tiếp gọi đến một hàm MPI_Init thì cũng không sao). Ngoại lệ duy nhất là hàm

đến hay chƣa. Lƣu ý rằng hàm MPI_Init không nhất thiết phải đƣợc gọi trực tiếp trong

hàm main: Nó có thể đƣợc gọi gián tiếp thông qua một hoặc nhiều hàm khác. Trong các

chƣơng trình C, có thể truyền các tham số địa chỉ argc và argv để có thể tận dụng các

tham số đƣợc truyền vào từ dòng lệnh, tuy nhiên điều này không bắt buộc: Các địa chỉ

này có thể đƣợc thay thế bởi hằng NULL.

4. 8. 2. Hàm MPI_Finalize

Hàm này đƣợc dùng để đóng một phiên làm việc MPI. MPI_Finalize phải là lời

gọi hàm MPI cuối cùng trong chƣơng trình. MPI_Finalize đƣợc sử dụng để giải quyết các phần việc nhƣ giải phóng bộ nhớ, ... Tuy nhiên, ngƣời lập trình cần phải đảm bảo

MPI_Finalize, và hàm MPI_Finalize phải đƣợc gọi bởi tất cả các tiến trình.

rằng tất cả các giao tiếp giữa các tiến trình có liên quan đều đã kết thúc trƣớc khi gọi hàm

4. 8. 3. Hàm MPI_Comm_size

Hàm này đƣợc dùng để lấy số lƣợng tiến trình đang chạy trong nhóm làm việc chứa

tiến trình hiện tại. Lƣu ý rằng kết quả trả về là số lƣợng tiến trình đang chạy chứ không

phải số lƣợng máy con trong cluster đang đƣợc sử dụng. Hàm này chấp nhận 2 tham số,

tham số đầu là tên của bộ liên lạc (Communicator) (mặc định là MPI_COMM_WORLD) (khái niệm bộ liên lạc sẽ đƣợc giải thích bên dƣới), tham số địa chỉ thứ 2 là biến để lƣu kết quả

trả về. Bộ liên lạc MPI_COMM_WORLD bao gồm tất cả các tiến trình sẵn có trong quá trình

khởi tạo. Bộ liên lạc đƣợc sử dụng để phân biệt cũng nhƣ giao tiếp giữa các tiến trình, do

đó nó cung cấp một phƣơng tiện để "đóng gói" phần hạ tầng giao tiếp của MPI. Mặc dù có thể tạo ra một bộ liên lạc khác nhƣng điều này nói chung không cần thiết, do bộ liên

lạc mặc định đã đáp ứng đủ nhu cầu của chúng ta.

4. 8. 4. Hàm MPI_Comm_rank

Hàm này đƣợc dùng để xác định rank (hạng) của tiến trình hiện tại trong bộ liên lạc.

65

Ý nghĩa của các tham số tƣơng tự nhƣ MPI_Comm_size. Khi khởi tạo các tiến trình, mỗi tiến trình sẽ đƣợc gán một rank tƣơng ứng trong bộ liên lạc, đó là một con số nằm trong

khoảng từ 0 đến n - 1, với n là số lƣợng tiến trình. Chẳng hạn trong ví dụ trên ngƣời quản trị yêu cầu 5 tiến trình, do đó rank của các tiến trình sẽ là 0, 1, 2, 3, 4. Do mỗi tiến trình

thực chất là việc thực thi của cùng một chƣơng trình trên các máy con khác nhau, nên để

biết đƣợc tiến trình hiện tại là tiến trình nào, tiến trình hiện tại cần phải dựa vào rank

tƣơng ứng của nó. Theo thông lệ, tiến trình ứng với rank 0 sẽ chịu trách nhiệm lấy kết

quả trả về từ các tiến trình khác và tiếp tục xử lý. Việc kết quả trả về từ mỗi tiến trình là nhanh hay chậm nói chung không hoàn toàn đồng nghĩa với sức mạnh xử lý của mỗi máy

con tƣơng ứng, vì nó còn phụ thuộc vào tốc độ của các kết nối giữa các máy con.

4. 10. Giá trị trả về của các hàm MPI

Hầu hết các hàm MPI đều trả về một số nguyên, cho biết trạng thái thực thi của hàm

đó. Giá trị trả về là gì và ý nghĩa của chúng nhƣ thế nào phụ thuộc vào các bản cài đặt

MPI_SUCCESS, cho biết hàm thực thi thành công. Nếu giá trị trả về của một hàm không

khác nhau của MPI [24]. Tuy nhiên, có một giá trị trả về đƣợc chuẩn hóa, đó là

phải là MPI_SUCCESS thì đó là một mã lỗi. Từ mã lỗi này, ngƣời lập trình có thể lấy đƣợc

thông tin lỗi nhờ hàm MPI_Error_string.

4. 11. Về các khái niệm Nhóm, Ngữ cảnh và Bộ liên lạc

Một nhóm (Group) là một tập có thứ tự của các tiến trình [10]. Mỗi tiến trình trong nhóm có một chỉ số duy nhất gọi là rank (hạng). Rank của một tiến trình có giá trị từ 0

đến p – 1, với p là số tiến trình trong nhóm.

Ngữ cảnh (Context) là một khái niệm trừu tƣợng, hàm ý mỗi thông điệp “biết” về

bộ liên lạc của nó [32]. Ngữ cảnh ra đời nhằm chia tách các họ thông điệp, tránh tình

trạng một thông điệp đƣợc gửi với một bộ liên lạc này lại đƣợc nhận với một bộ liên lạc khác. Nếu một thông điệp đƣợc truyền từ tiến trình thứ nhất và đƣợc nhận bởi tiến trình thứ hai, thì hai tiến trình này phải thuộc cùng một bộ liên lạc; khi đó ta nói rằng thông

điệp đó đã đƣợc gửi và nhận trong cùng ngữ cảnh.

66

Một bộ liên lạc (Communicator) bao gồm một nhóm các tiến trình và một ngữ cảnh [32]. Các tiến trình nếu muốn gửi và nhận thông điệp của nhau thì bắt buộc phải thuộc cùng một bộ liên lạc, và ngƣợc lại, khi 2 tiến trình thuộc cùng một bộ liên lạc thì chúng

có thể truyền thông điệp cho nhau. Trong môi trƣờng MPI, mỗi tiến trình phải thuộc ít nhất một bộ liên lạc nào đó. Một tiến trình có thể thuộc nhiều hơn một bộ liên lạc.

Mỗi bộ liên lạc có một ngữ cảnh duy nhất tƣơng ứng với nó, và mỗi ngữ cảnh chỉ

tƣơng ứng với duy nhất một bộ liên lạc [10].

Khi một chƣơng trình MPI bắt đầu chạy, có một nhóm sơ cấp đƣợc khởi tạo bao

gồm tất cả các tiến trình. Tƣơng ứng với nó là bộ liên lạc sơ cấp MPI_COMM_WORLD. Sau

MPI_COMM_SELF [20]. Đây là bộ liên lạc chỉ chứa duy nhất 1 tiến trình hiện tại.

khi ngƣời dùng gọi hàm MPI_Init, có một bộ liên lạc đặc biệt khác đƣợc tạo là

MPI_COMM_NULL, …, tuy nhiên đây không phải là các bộ liên lạc đặc biệt ([21, 34, 35]).

Ngoài MPI_COMM_WORLD và MPI_COMM_SELF còn có một số object đặc biệt khác nhƣ

Về khái niệm liên lạc trong (inter-communication), liên lạc ngoài (intra-

communication), bộ liên lạc trong (inter-communicator), bộ liên lạc ngoài (intra-

communicator), tham khảo [27, 28].

4. 12. Liên lạc giữa các tiến trình

Có thể liên lạc giữa các tiến trình trong MPI theo 2 cách: Liên lạc 2 điểm (Point –

To – Point Communication) và liên lạc đa điểm (Collective Communication). Liên lạc

điểm nối điểm lại đƣợc phân chia thành liên lạc đồng bộ (Blocking Communication) và

liên lạc bất đồng bộ (Non – Blocking Communication).

Có rất nhiều hàm MPI đƣợc cài đặt để phục vụ cho việc liên lạc giữa các tiến trình.

Do tài liệu chỉ tập trung vào việc giới thiệu về MPI để phục vụ cho lập trình song song

ứng dụng cho Rocks, nên ở đây ta chỉ bàn đến 2 hàm liên lạc phổ biến nhất của MPI,

thuộc loại liên lạc đồng bộ là MPI_Send và MPI_Recv.

int MPI_Send(void *address, int count, MPI_Datatype dataType, int destination, int tag, MPI_Comm communicator)

Hàm MPI_Send

67

Trong đó:

dataType bắt đầu từ địa chỉ address.

 (address, count, dataType) định nghĩa count lần xuất hiện của dữ liệu dạng

communicator.

 destination là rank của tiến trình nhận trong nhóm tƣơng ứng với

 tag là một số nguyên sử dụng để phân loại thông điệp

 communicator định nghĩa một nhóm các tiến trình và ngữ cảnh của chúng.

int MPI_Recv(void *address, int maxCount, MPI_Datatype dataType, int source, int tag, MPI_Comm communicator, MPI_Status *status)

Hàm MPI_Recv

Trong đó:

MPI_Send. Toán tử này cho phép một lƣợng ít hơn hoặc bằng maxCount dữ liệu

 (address, maxCount, dataType) định nghĩa bộ đệm nhận tƣơng tự nhƣ trong

dạng dataType đƣợc nhận. Các tham số tag và communicator có ý nghĩa tƣơng

tự nhƣ trong MPI_Send, tuy nhiên có một điểm khác biệt là chấp nhận giá trị đại diện.

communicator, hoặc một giá trị đại diện cho bất kỳ nguồn nào.

 source là hạng của nguồn gửi thông điệp trong nhóm tƣơng ứng với

 status lƣu giữ thông tin về kích thƣớc thực sự của thông điệp, nguồn gửi thông điệp thực sự và thẻ thông điệp thực sự. Sở dĩ cần có một biến lƣu giữ các giá trị

“thực sự” là vì thông điệp nhận đƣợc có thể có kích thƣớc nhỏ hơn kích thƣớc xác

định bởi maxCount, và các tham số source và tag có thể chấp nhận giá trị đại diện.

Chúng ta có nhận xét:

tag và communicator xác định ngữ cảnh của cả 2 tiến trình gửi và nhận.

 3 giá trị source, destination và communicator xác định nhóm, còn 2 giá trị

 Bộ tham số (address, maxCount, dataType) xác định thông điệp cần gửi. Sự linh

hoạt của bộ tham số này thể hiện trong tham số thứ 3, dataType. Tham số này

MPI_REAL) định nghĩa một vectơ A bao gồm 300 thành phần là các số thực trong

68

nhận giá trị là các kiểu dữ liệu cơ sở của ngôn ngữ cài đặt. Ví dụ, (A, 300,

Fortran, không cần biết đến chiều dài hay định dạng của các số này. Một bản cài đặt MPI dành cho các mạng hỗn tạp đảm bảo rằng máy tính chủ của tiến trình

nhận phải nhận đƣợc chính xác 300 thành phần thực này mà ngữ nghĩa hay giá trị

không thay đổi, mặc dù máy tính chủ của tiến trình nhận có thể có kiến trúc khác

(và do đó, khác nhau về định dạng số thực) với máy tính chủ của tiến trình nhận. Ở

mức cao nhất, sức mạnh của mô hình mới này nằm ở khả năng ngƣời dùng có thể định nghĩa các kiểu dữ liệu mới và các kiểu dữ liệu này có thể mô tả các dữ liệu

không liên tục.

MPI linh hoạt trong việc định nghĩa thông điệp cần gửi là do các lý do sau đây:

 Thƣờng thì dữ liệu cần gửi là dữ liệu rời rạc, theo nghĩa không tồn tại trong một hoặc nhiều vùng nhớ liên tiếp. Một ví dụ đơn giản chính là khi ta cần gửi đi dữ

liệu về một cột của ma trận, nhƣng ma trận lại hướng hàng, nghĩa là các phần tử

của ma trận đƣợc lƣu trữ theo hàng. Tổng quát hơn, dữ liệu cần gửi có thể là tập

hợp của các cấu trúc dữ liệu có kích thƣớc khác nhau. Các thƣ viện cổ điển cung

cấp các phƣơng pháp để “đóng gói” dữ liệu trong bộ đệm một cách liên tục tại đầu

gửi và “tháo gói” tại đầu nhận. Tuy nhiên, sẽ tốt hơn về mặt hiệu năng nếu nhƣ

việc đóng gói đƣợc thực hiện trong quá trình gửi, thay vì phải có thêm một bƣớc

trƣớc khi gửi để đóng gói dữ liệu.

 Sự phát triển của tính toán hỗn tạp (Heterogeneous Computing, [25, 26]). Tính toán hỗn tạp phát triền do nhu cầu cần phân bố các thành phần của các tác vụ tính

toán ra các máy tính bán chuyên biệt nhƣ các dòng máy SIMD, vectơ hay

graphics; và nhu cầu sử dụng các mạng máy trạm (Workstation Network) nhƣ các

máy song song. Các mạng máy trạm thƣờng bao gồm các máy tính đƣợc tích hợp

qua thời gian, do đó thƣờng không đồng nhất về kiến trúc. Khi xuất hiện nhu cầu trao đổi thông điệp giữa các máy tính khác nhau về mặt kiến trúc, thì cần phải có một bộ tham số tổng quát để mô tả phù hợp cho ngữ nghĩa của thông điệp cần gửi.

Ví dụ, với một vectơ gồm các số dấu chấm động, không chỉ định dạng mà ngay cả chiều dài của các số dấu chấm động cũng khác nhau với các kiến trúc máy khác

69

nhau. Tƣơng tự, điều này cũng đúng trong trƣờng hợp các số nguyên. Trong quá trình gửi và nhận thông điệp, thƣ viện đƣợc sử dụng có thể tiến hành các chuyển

đổi cần thiết nhƣng chỉ khi chúng xác định đƣợc một cách chính xác cái gì đang đƣợc gửi đi.

Một trong những điểm cần lƣu ý khi sử dụng cặp hàm MPI_Send và MPI_Recv đó là tính chất đồng bộ. Tác vụ gửi đƣợc xem là hoàn thành nếu nhƣ thông điệp gửi đi đã

đƣợc nhận bởi một tiến trình nào đó. Tác vụ nhận đƣợc xem là hoàn thành nếu nhƣ có

một thông điệp đến phù hợp với ngữ cảnh của tiến trình nhận, và tiến trình nhận nhận

thành công thông điệp đó. Các hàm này không kết thúc cho đến khi các tác vụ gửi và

nhận tƣơng ứng của chúng hoàn thành. Vì thế, nếu tất cả các tiến trình đều gọi cặp hàm

MPI_Send(data, destination); MPI_Recv(newdata, source);

này theo thứ tự:

Thì ứng dụng sẽ bị rơi vào trạng thái deadlock (treo). Nguyên nhân là không có tiến

trình nào nhận các thông điệp đƣợc gửi đi, vì vậy tất cả các tác vụ gửi đều chƣa hoàn

thành, ứng dụng sẽ không thoát đƣợc.

Để tránh trƣờng hợp ứng dụng bị rơi vào trạng thái deadlock, nên thiết kế sao cho

mỗi tác vụ gửi phải có một tác vụ nhận tƣơng ứng, giống nhƣ tính chất đồng bộ của cặp

if (rank % 2) { MPI_Send(data, (rank + 1) % size); MPI_Recv(newdata, (rank - 1) % size); } else { MPI_Recv(newdata, (rank - 1) % size); MPI_Send(data, (rank + 1) % size); }

hàm MPI_Send và MPI_Recv.

Về phần này, có thể xem thêm phụ lục 2.

4. 13. Xây dựng một ứng dụng tự trị

Một trong những vấn đề khó khăn khi thiết kế các ứng dụng tính toán song song là phân chia công việc giữa các tiến trình nhƣ thế nào để tận dụng đƣợc tài nguyên tính

toán. Một ứng dụng ở mức đơn giản sẽ đƣợc thiết kế sao cho các tiến trình tham gia tính 70

toán biết trƣớc về phần công việc mà mình cần làm. Chẳng hạn, với ứng dụng tính tích

phân (xem mã nguồn đi kèm), thì mỗi máy sẽ đảm nhiệm khối lƣợng công việc, với n

là số lƣợng máy tham gia tính toán. Trên thực tế các ứng dụng xử lý song song không gặp thuận lợi nhƣ vậy. Máy chủ (là máy truyền dữ liệu đến các máy con và thu thập kết quả

tính toán từ các máy con) thƣờng không tham gia tính toán, nó chịu trách nhiệm điều phối

công việc giữa các máy con. Các máy con lại có thể có tài nguyên phong phú ở mức độ

khác nhau, thời điểm nhận các dữ liệu đầu vào cũng khác nhau, nên sẽ có máy hoàn

thành công việc trƣớc các máy còn lại. Khi đó, máy này sẽ ở trạng thái “rỗi”. Để tận dụng tài nguyên từ những máy nhu thế này, các ứng dụng xử lý song song thƣờng đƣợc thiết kế

sao cho máy chủ sẽ giao cho mỗi máy con một phần việc nhƣ nhau; mỗi khi có một máy

con thông báo cho máy chủ về kết quả phần việc của mình, thì máy chủ lại tiếp tục gửi

một phần việc khác cho nó…

Ứng dụng dƣới đây sẽ tính tích của một ma trận với một vectơ. Do chỉ mang tính

minh họa, các phần tử của ma trận và vectơ đều đƣợc gán là 1. Mỗi tiến trình con chịu

trách nhiệm tính toán một phần tử của ma trận kết quả. Khi một tiến trình con hoàn thành

công việc, nó thông báo cho tiến trình chủ biết. Tiến trình chủ tiếp tục giao phần việc tiếp

theo cho nó, cho đến khi toàn bộ tác vụ tính toán hoàn thành. Do tính chất “giao việc khi

#include "mpi.h" #include "stdio.h" /* * Ung dung nhan ma tran - vecto */ int main(int argc, char* argv[]) { // So hang, so cot toi da int MAX_ROWS = 1000; int MAX_COLS = 1000; // Dau hieu ket thuc int END_TAG = MAX_ROWS * MAX_ROWS + 1;

71

rỗi” này mà ta sẽ đặt tên cho ứng dụng là “tự trị”.

// So hang, so cot thuc te int rows, cols; // Ma tran double a[MAX_ROWS][MAX_COLS]; // Mot hang cua ma tran. May con su dung bien nay de luu gia tri // hang ma tran nhan duoc. double b[MAX_COLS]; // Ket qua double c[MAX_ROWS]; // Bo nho dem. May chu dung de luu hang sap gui, may con dung de // luu vecto. double buffer[MAX_COLS]; double ans; int myid, master, numprocs, ieer; MPI_Status status; int i, j, numsent, sender; int anstype, row; // So hang cua ma tran se duoc gui di moi lan for. int roundsize; MPI_Init(&argc, &argv); ieer = MPI_Comm_size(MPI_COMM_WORLD, &numprocs); ieer = MPI_Comm_rank(MPI_COMM_WORLD, &myid); // Khoi tao ma tran va vecto. master = 0; rows = 100; cols = 100; roundsize = numprocs - 1; if (roundsize > rows) { roundsize = rows;

72

} if (myid == master) { // --------------------------------------------------------------- // Phan code may chu // --------------------------------------------------------------- for (j = 0; j < cols; ++j) { b[j] = 1; for (i = 0; i < rows; ++i) { a[i][j] = 1; } } numsent = 0; // Gui vecto ieer = MPI_Bcast(b, cols, MPI_DOUBLE, master, MPI_COMM_WORLD); // Gui lan luot cac hang, cho den khi khong con hang nao de // gui, hoac khong con may con nao de gui. for (i = 1; i <= roundsize; ++i) { for (j = 0; j < cols; ++j) { buffer[j] = a[i][j]; } ieer = MPI_Send(buffer, cols, MPI_DOUBLE, i, numsent, MPI_COMM_WORLD); ++numsent; } for (i = 0; i < rows; ++i) { // Ket qua ieer = MPI_Recv(&ans, 1, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); sender = status.MPI_SOURCE; anstype = status.MPI_TAG; c[anstype] = ans;

73

// Co mot may con gui ket qua => Them 1 may con roi. Neu // con du lieu => Gui cho may con roi nay. if (numsent < rows) { for (j = 0; j < cols; ++j) { buffer[j] = a[numsent][j]; } ieer = MPI_Send(buffer, cols, MPI_DOUBLE, sender, numsent, MPI_COMM_WORLD); ++numsent; } else { // Tin hieu ket thuc. ieer = MPI_Send(MPI_BOTTOM, 0, MPI_DOUBLE, sender, END_TAG, MPI_COMM_WORLD); } } // In ket qua for (i = 0; i < rows; ++i) { fprintf(stdout, "c[%d]=%f\n", i, c[i]); } } else { // --------------------------------------------------------------- // Phan code may con // --------------------------------------------------------------- ieer = MPI_Bcast(b, cols, MPI_DOUBLE, master, MPI_COMM_WORLD); while (1) { ieer = MPI_Recv(buffer, cols, MPI_DOUBLE, master, MPI_ANY_TAG, MPI_COMM_WORLD, &status); if (status.MPI_TAG != END_TAG) { row = status.MPI_TAG; ans = 0.0; for (i = 0; i < cols; ++i) {

74

ans += buffer[i] * b[i]; } ieer = MPI_Send(&ans, 1, MPI_DOUBLE, master, row, MPI_COMM_WORLD); } else { break; } } } MPI_Finalize(); return 0; }

4. 14. Về mối quan hệ giữa kích thƣớc bài toán và chi phí tính

toán Có thể chia các tác vụ đƣợc tiến hành bởi một ứng dụng MPI ra làm 2 loại chính: Tác vụ tính toán (computation) và tác vụ liên lạc (communication). Tổng thời gian dành

để thực thi các tác vụ này có thể coi nhƣ chi phí của bài toán. Do chi phí thay đổi khi kích

thƣớc bài toán hoặc số lƣợng tiến trình tham gia tính toán thay đổi, nên dẫn đến nhu cầu

cần phải phân tích mối quan hệ tƣơng đối giữa kích thƣớc bài toán và chi phí tính toán.

Ta sẽ thử xét đến mối quan hệ này từ ví dụ tính toán tích của ma trận và vectơ, sau

đó có thể mở rộng ra bài toán tích của ma trận và ma trận. Giả sử ma trận A có kích thƣớc

nxn, khi đó vectơ B phải có kích thƣớc nx1. Để tính toán mỗi hàng của ma trận kết quả C

(nx1), ta cần thực hiện n phép nhân và n – 1 phép cộng. C có n hàng, nên tổng số phép tính (dấu chấm động) cần thực hiện là:

( ( ))

Để đơn giản, có thể giả sử mỗi phép toán nhân và cộng đều tốn thời gian calc bằng

nhau. Khi đó tổng thời gian cần để thực hiện các phép toán này là:

75

( )

Để tính toán chi phí thực hiện các tác vụ liên lạc, ta sẽ bỏ qua công đoạn gửi vectơ B đến các tiến trình. Mỗi hàng của ma trận B cần 2 lần liên lạc: 1 lần gửi n số thực đến

các tiến trình, 1 lần gửi kết quả đến tiến trình chủ. Do đó nếu gọi chi phí để gửi một thông

điệp gồm 1 số thực là comm thì tổng chi phí là:

( ) ( )

Tỷ lệ tổng chi phí giữa các tác vụ liên lạc và các tác vụ tính toán:

( ) ( )

Do chi phí để tính toán trên các số dấu chấm động thƣờng nhỏ hơn nhiều so với chi

phí để truyền đi / nhận về một số dấu chấm động, nên chúng ta sẽ tìm cách để tỷ lệ trên

càng nhỏ càng tốt. Do tỷ lệ comm/calc không phụ thuộc vào n, mà:

Nên bằng cách tăng kích thƣớc của bài toán, ta không làm giảm đƣợc tỷ lệ này.

Cũng áp dụng cách phân tích này đối với bài toán nhân ma trận – ma trận, chúng ta sẽ thu đƣợc một kết quả khả quan hơn. Khi đó, ma trận A có kích thƣớc mxn, ma trận B

có kích thƣớc nxp, ma trận kết quả C có kích thƣớc mxp. Để đơn giản, giả sử m = n = p. Mỗi phần tử của C cần 2n – 1 phép tính dấu chấm động. Có phần tử trong C, do đó tổng chi phí tính toán là:

( )

Khác với bài toán ma trận – vectơ, để tính đƣợc kết quả một hàng của C, ta cần gửi

n số thực (là mỗi hàng của A) đi, nhận n số thực (là mỗi hàng tƣơng ứng của ma trận kết quả C) về (lƣu ý do tính chất “tự trị” nên B sẽ đƣợc gửi trƣớc và cố định trong quá trình tính toán, do đó ở đây ta bỏ qua chi phí gửi B đi, tƣơng tự nhƣ trên). Tổng chi phí liên lạc

là:

Khi đó tỷ lệ các tổng chi phí liên lạc và tính toán là:

76

Với tỷ lệ này, thì bằng cách tăng kích thƣớc của bài toán, chúng ta có thể giảm chi

phí tƣơng đối của các tác vụ liên lạc so với các tác vụ tính toán.

4. 15. Phƣơng hƣớng xây dựng một ứng dụng MPI

Rất nhiều bài toán của xử lý song song đều đã từng đƣợc đặt ra cho xử lý tuyến tính, vì thế nhiệm vụ cơ bản khi xây dựng một ứng dụng xử lý song song bằng MPI là

việc chuyển đổi các thuật toán tuyến tính sang song song. Mặc dù MPI tuân theo mô hình

lập trình truyền thông điệp, nhƣng ngƣời lập trình không nên dựa quá nhiều vào các tác

vụ truyền / nhận thông điệp khi thiết kế thuật toán. Một thuật toán tốt cần phải xử lý phần lớn công việc trên các dữ liệu cục bộ. Điều này cũng sẽ giúp ta dễ dàng tìm và sửa lỗi cho

ứng dụng [17].

Không phải mọi thuật toán tuyến tính đều có thể song song hóa hoàn toàn. Câu hỏi

dặt ra là mối quan hệ giữa tỉ lệ các thành phần tuyến tính của thuật toán và chi phí tính

toán là nhƣ thế nào? Nếu chúng ta gọi s là tỉ lệ các công việc đƣợc xử lý tuyến tính, thì tỉ

lệ các công việc có thể xử lý song song sẽ là 1 - s. Một hệ thống gồm p bộ xử lý sẽ có thể

tăng tốc tính toán lên một số lần là:

speedup(p) =

=

( )

với là thời gian xử lý trên hệ thống tuyến tính, còn là thời gian xử lý trên hệ

thống gồm p bộ xử lý song song.

Từ đẳng thức này ta thấy, nếu tỉ lệ các công việc tuyến tính trong hệ thống càng lớn

thì thời gian tiết kiệm đƣợc sẽ càng ít.

Đối với các hệ thống cluster, do đƣợc xây dựng từ nhiều thành phần đơn lẻ, các thành phần này lại thƣờng khác nhau về tài nguyên tính toán và thƣờng đƣợc thêm / bớt theo thời gian, nên tốc độ xử lý có thể rất khác nhau. Vì vậy cần phải thiết kế thuật toán

77

sao cho tận dụng đƣợc tài nguyên nhàn rỗi của hệ thống.

CHƢƠNG 5. CÀI ĐẶT THỬ NGHIỆM ỨNG DỤNG TRÊN HỆ THỐNG ROCKS

Khóa luận đã cài đặt thử nghiệm một số ứng dụng trên nền Rocks:

 Nhân Ma trận – Vectơ (đã trình bày trong chƣơng 4)

(mpimatrixvectormultiplication.c)

 Liên lạc giữa các tiến trình (sẽ trình bày trong phụ lục 2)

(mpiringcommunication.c)

 Tính diện tích hình thang cong nằm bên dƣới parabol (sẽ trình bày trong

phụ lục 3) (mpiintegralx2.c).

 Tính toán số PI (sẽ trình bày trong phụ lục 4) (mpipi.c)

 Chuyển đổi video (sẽ trình bày dƣới đây) (mpivideoconverter.c)

Tất cả các ứng dụng này đều có mã nguồn kèm comment đầy đủ đi kèm theo khóa

luận.

Do giới hạn của khóa luận nên chƣơng này chỉ trình bày về ứng dụng tiêu biểu nhất - ứng dụng chuyển đổi video. Ứng dụng này đƣợc viết nhằm mục tiêu minh họa cho khả

năng ứng dụng của Rocks trong thực tế. Dƣới đây là mã nguồn ứng dụng cùng với cách

thức thiết lập môi trƣờng để sử dụng.

5. 1.

Thiết lập môi trƣờng

http://www.ffmpeg.org/download.html

Download FFMPEG từ địa chỉ:

http://opencvlibrary.svn.sourceforge.net/svnroot/opencvlibrary/tags/la test_tested_snapshot

Checkout OpenCV về thƣ mục opencv từ địa chỉ:

cd ffmpeg

78

Cài đặt FFMPEG:

./configure –enable-shared make make install mkdir /usr/local/include/ffmpeg cp /usr/local/include/libavcodec/*.h /usr/local/include/ffmpeg cp /usr/local/include/libavdevice/*.h /usr/local/include/ffmpeg cp /usr/local/include/libavformat/*.h /usr/local/include/ffmpeg cp /usr/local/include/libavutil/*.h /usr/local/include/ffmpeg

CPPFLAGS=-I/usr/local/include

./configure --enable-apps --enable-shared --with-ffmpeg --with-gnu-ld --with-x --without-quicktime CXXFLAGS=-fno-strict-aliasing CFLAGS=- I/usr/local/include LDFLAGS=- L/usr/local/lib make make install

Cài đặt OpenCV

5. 2. Mã nguồn ứng dụng

Dƣới đây chỉ trình bày mã nguồn cùng giải thích sơ lƣợc. Chi tiết hơn có thể xem

#include #include #include #include #include "mpi.h" #include "cv.h" #include "highgui.h" #define END_TAG 99 #define MASTER 0 #define PREFIX "out-" /** * In ra mot thong bao loi.

79

trong mã nguồn ứng dụng đi kèm tài liệu này.

* @param error Ma loi * @param rank Rank cua tien trinh xay ra loi * @param functionName Ham xay ra loi */ void ErrorMessage(int error, int rank, char* functionName) { fprintf(stderr, "Process %d: Error %d in %s\n", rank, error, functionName); MPI_Abort(MPI_COMM_WORLD, -1); } /** * Convert video * @param in Ten file dau vao * @param out Ten file dau ra */ void convert(char* in, char* out) { CvCapture* capture = 0; // Mo file de bat dau doc capture = cvCreateFileCapture(in); if (!capture) { return; } // Input frame. IplImage* bgr_frame = cvQueryFrame(capture); // Lay cac properties quan trong double fps = cvGetCaptureProperty( capture, CV_CAP_PROP_FPS ); // Kich thuoc cua video output. O day ta giu nguyen kich thuoc // cua video input. CvSize size = cvSize( (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT) );

80

// Tao mot object CvVideoWriter de bat dau ghi file. // Tham so out la ten file de ghi, tham so thu 2 cho biet CODEC // cua video muon ghi, tham so thu 3 la thoi gian delay giua 2 // frame (delay frame rate), tham so cuoi cung la kich thuoc cua // moi frame. CvVideoWriter* writer = cvCreateVideoWriter( out, CV_FOURCC('M', 'J', 'P', 'G'), fps, size ); // Output frame. IplImage* logpolar_frame = cvCreateImage( size, IPL_DEPTH_8U, 3 ); // Doc lan luot cac frame while((bgr_frame = cvQueryFrame(capture)) != NULL) { // Nen frame vua doc duoc theo codec moi cvLogPolar( bgr_frame, logpolar_frame, cvPoint2D32f( bgr_frame -> width / 2, bgr_frame -> height / 2 ), 40, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS ); // Ghi frame sau khi nen cvWriteFrame(writer, logpolar_frame); } // Release cac tai nguyen cvReleaseVideoWriter(&writer);

81

cvReleaseImage(&logpolar_frame); cvReleaseCapture(&capture); } /** * Ham chinh */ int main(int argc, char* argv[]) { int numProcs;// So luong tien trinh int myRank; // Rank cua tien trinh hien tai int error = 0;// Ma loi int i; MPI_Status status;// Trang thai thuc hien ham MPI char* buffer; // Bo nho tam char* fileToSend; // Ten file gui di char* fileReceived; // Ten file nhan duoc char* fileToWrite; // Ten file output DIR *d;// Thu muc chua cac video // can convert struct dirent *dir;// Mot file / thu muc con // trong thu muc chua cac video int inFileNameLength;// Kich thuoc thuc su cua ten file input // Master quan niem mot tien trinh da "finished" theo nghia tien // trinh do hien o trang thai "roi" va khong con video nao can // convert de gui cho tien trinh do nua int numFinished = 0;// So luong tien trinh roi. MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numProcs); MPI_Comm_rank(MPI_COMM_WORLD, &myRank);

82

MPI_Send((void*)fileToSend,

128,

MPI_CHAR,

buffer = (char*) malloc (256 * sizeof(char)); if (buffer == NULL) { ErrorMessage(-1, myRank, "malloc"); } if (myRank == MASTER) { d = opendir("."); if (d) { // Nhan dien cac file trong thu muc roi gui cho // cac slave convert. for (i = 1; i < numProcs; ++i) { if ((dir = readdir(d)) != NULL) { fileToSend = dir -> d_name; error= strlen(fileToSend) + 1, MPI_CHAR, i, MASTER, MPI_COMM_WORLD); if (error != MPI_SUCCESS) { ErrorMessage(error, myRank, "MPI_Send"); } } else { break; } } // Nhan ket qua tra ve & tiep tuc gui video convert // neu con while (numFinished < numProcs - 1) { error MPI_Recv(buffer, = MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); if (error != MPI_SUCCESS) { ErrorMessage(error, myRank, "MPI_Recv"); } if ((dir = readdir(d)) != NULL) { // Neu con video de convert

83

+

1,

status.MPI_SOURCE,

= MPI_CHAR,

MPI_Send((void*)fileToSend, MASTER,

=

0,

MPI_CHAR,

MPI_Send(fileToSend,

MPI_Get_count(&status,

MPI_CHAR,

fileToSend = dir -> d_name; error strlen(fileToSend) MPI_COMM_WORLD); if (error != MPI_SUCCESS) { ErrorMessage(error, myRank, "MPI_Send"); } } else { // Neu het ++numFinished; fileToSend = ""; error status.MPI_SOURCE, END_TAG, MPI_COMM_WORLD); if (error != MPI_SUCCESS) { ErrorMessage(error, myRank, "MPI_Send"); } } } } } else { // Slave lien tuc nhan yeu cau tu server while (1) { error = MPI_Recv(buffer, 128, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); if (error != MPI_SUCCESS) { ErrorMessage(error, myRank, "MPI_Recv"); } if (status.MPI_TAG != END_TAG) { // Lay kich thuoc thuc su cua ten file = error &inFileNameLength);

84

if (inFileNameLength == MPI_UNDEFINED) { ErrorMessage(error, myRank, "MPI_Get_count"); } // Tao moi ten file input va ten file output tu // du lieu nhan duoc fileReceived = (char*) malloc((inFileNameLength + 1) * sizeof (char)); fileToWrite = (char*) malloc((inFileNameLength + strlen(PREFIX) + 1) * sizeof (char)); strncpy(fileReceived, buffer, inFileNameLength); strcpy(fileToWrite, PREFIX); strcat(fileToWrite, fileReceived); // Chi convert cac file co phan mo rong la avi if (strstr(buffer, "avi") != NULL) { convert(fileReceived, fileToWrite); } // Xong fileToSend = ""; error = MPI_Send(fileToSend, 0, MPI_CHAR, MASTER, END_TAG, MPI_COMM_WORLD); if (error != MPI_SUCCESS) { ErrorMessage(error, myRank, "MPI_Send"); } } else { break; } } } MPI_Finalize(); return 0; }

85

5. 3.

Biên dịch và chạy ứng dụng

Giả sử ta đặt tên ứng dụng là mpivideoconverter, khi đó để biên dịch ta dùng

mpicxx -I/usr/local/include/opencv -lcv -lhighgui -o mpivideoconverter mpivideoconverter.cpp

lệnh:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Thiết lập biến môi trƣờng:

mpirun –np 5 mpivideoconverter

Chạy với 2 tiến trình trên máy hiện tại:

scp ~/mpivideoconverter root@compute-0-0:~ scp ~/mpivideoconverter root@compute-0-1:~ mpirun -np 2 -machinefile machines mpivideoconverter

Chạy với 2 tiến trình trên 2 máy compute (compute-0-0 và compute-0-1):

compute-0-0 compute-0-1

Trong đó file machines chứa 2 dòng:

5. 4. Kết quả thử nghiệm

Nếu video đầu vào có tên là myfile thì video kết quả sẽ có tên là out-myfile. Với

86

4 video ban đầu, ứng dụng cho kết quả là 4 video khác trong cùng thƣ mục.

Hình 49 – Trước khi chạy ứng dụng

87

Hình 50 – Sau khi chạy ứng dụng

88

CHƢƠNG 6. KẾT LUẬN

Khóa luận đã trình bày những kiến thức cơ bản nhất về xử lý song song nói chung

và xử lý song song phân cụm nói riêng. Về Rocks, khóa luận đã có hƣớng dẫn cài đặt chi

tiết, cùng các nghiên cứu từ mức tổng quan đến mức kiến trúc hệ thống. Khóa luận cũng

đã hƣớng dẫn chi tiết về các tác vụ quản trị căn bản và quan trọng nhất với cluster Rocks.

Về mặt ứng dụng, khóa luận đã trình bày cách thức lập trình song song sử dụng MPI và phƣơng hƣớng xây dựng một ứng dụng MPI hiệu quả, tận dụng đƣợc tài nguyên

hệ thống, đồng thời xây dựng cụ thể một vài ứng dụng MPI và thử nghiệm thực tế thành

công.

Việc cài đặt và quản trị thành công một cụm máy tính Rocks, cũng nhƣ xây dựng

thành công các ứng dụng xử lý song song bằng MPI đã cho thấy nghiên cứu và triển khai

Rocks trong thực tế là hoàn toàn khả thi, đặc biệt trong điều kiện các doanh nghiệp Việt

Nam còn chủ yếu làm gia công phần mềm thay vì cung cấp các dịch vụ tính toán hƣớng

ngƣời dùng.

Rocks cung cấp kèm theo rất nhiều Roll, nhƣng do thời gian có hạn nên khóa luận

chƣa thể nghiên cứu hết về các Roll này. Mặt khác, việc không triển khai đƣợc Rocks

trong điều kiện thực tế cũng là một hạn chế khác của khóa luận.

Trong thời gian tới, chúng tôi dự kiến sẽ tiếp tục nghiên cứu sâu hơn đề tài theo các

hƣớng nhƣ:

 Nghiên cứu phát triển một Roll mới từ đầu.

 Nghiên cứu về các Roll khác mà Rocks cung cấp kèm theo.

 Nghiên cứu cách giải quyết các bài toán kinh điển bằng MPI, nhƣ bài toán ngƣời

đƣa hàng, bài toán tìm kiếm trên một cơ sở dữ liệu đủ lớn, …

 Nghiên cứu sâu hơn về lý thuyết xử lý song song và các công nghệ xử lý song

89

song.

PHỤ LỤC 1. SƠ LƢỢC VỀ CÁCH PHÁT TRIỂN ROLL MỚI

Phần trình bày dƣới đây sẽ bàn sơ lƣợc về cách phát triển một Roll mới từ mã

nguồn / package có sẵn. Công cụ để minh họa chính là mã nguồn của Rocks 5.2.

Download mã nguồn Rocks 5.2

hg clone http://fyp.rocksclusters.org/hg/rocks-5.2

Để lấy mã nguồn của Rocks 5.2, khởi động root terminal và thực thi command:

Toàn bộ mã nguồn của Rocks 5.2 nặng cỡ khoảng 2GB, nếu đây là lần đầu tiên thực

clone là command dùng để tạo một bản copy của một repository nào đó bằng cách cập nhật các thay đổi từ repository đó vào bản copy cục bộ. Vì vậy trong những lần thực thi

thi command thì quá trình thực thi sẽ rất lâu, từ vài chục phút đến vài tiếng. Thực chất, hg

sau, thời gian thực thi sẽ ngắn hơn nhiều, do cập nhật các thay đổi nhanh hơn nhiều so

Hình 51 – Output của hg clone

với việc cập nhật toàn bộ repository. Output của command trên có dạng:

90

Sau khi command thực thi xong, repository cục bộ của ta sẽ có dạng:

Hình 52 – Repository cục bộ

91

Thƣ mục scratch của các Rolls:

Hình 53 – Thư mục scratch của các Roll

92

Thƣ mục scratch của Roll Java:

Hình 54 – Thư mục scratch của Roll java

Thƣ mục Nodes

Thƣ mục Nodes chứa các file XML, đây là các file cấu hình của Roll. Các file này

định nghĩa các package cần cài đặt và các service tƣơng ứng của chúng. Ví dụ, dòng sau

jdk

đây quy định package jdk sẽ đƣợc cài đặt:

Thẻ quy định cách các package này đƣợc cấu hình sau khi chúng

/usr/sbin/useradd -M -u405 -c "JBoss" -d /opt/jboss jboss /usr/sbin/useradd -M -u412 -c "Tomcat" -d /opt/tomcat tomcat chown -R 405.405 /opt/jboss chown -R 412.412 /opt/tomcat

93

đƣợc cài đặt. Ví dụ:

chown -R 412.412 /opt/tomcat-* rm -f /usr/bin/java MANPATH /usr/java/jdk1.5/man LoadModule jk_module modules/mod_jk.so JkWorkersFile /etc/httpd/conf/workers.properties # Where to put jk logs JkLogFile /var/log/httpd/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" workers.java_home=/usr/java/jdk1.5 ps=/

94

Thƣ mục graphs

Thƣ mục graphs chứa file graphs/default/.xml. Với Roll java bên trên,

file này là graphs/default/java.xml. File này định nghĩa cách các file trong thƣ mục nodes đƣợc liên kết với nhau trong sơ đồ cơ sở (Kickstart Graph). Ví dụ, với phần sơ đồ

Hình 55 – Một phần sơ đồ cơ sở

cơ sở dƣới đây:

.xml:

intel

Cạnh nối đi từ nút frontend đến nút intel là kết quả của đoạn mã dƣới đây trong file

Thêm một package nhƣ thế nào

Giả sử Roll ta đang cần phát triển có tên là myroll. Ta cần add thêm 4 package cho

Roll là: pkg-one, pkg-two, pkg-three, pkg-four. Giả sử cần add pkg-one và pkg-two

vào máy frontend và pkg-three và pkg-four vào các máy compute.

95

Trƣớc hết, tạo file myroll/nodes/myroll-frontend.xml. File này có dạng:

My customized roll. pkg-one pkg-two

My customized roll. pkg-three pkg-four

96

Sau đó tạo file myroll/nodes/myroll-compute.xml:

Cuối cùng là tạo file myroll/graphs/default/myroll.xml để nối các file node

My customized roll. myroll-frontend myroll-compute

vào sơ đồ cơ sở:

Sơ lƣợc hoạt động

File graph và các file node là cơ sở để hình thành nên sơ đồ cơ sở. Trong quá trình

cài đặt, trình cài đặt sẽ dựa vào sơ đồ cơ sở của từng Roll để sinh ra file cơ sở. Từ file cơ

sở này, trình cài đặt sẽ biết đƣợc cần phải cài đặt những package nào cho từng máy đối

với Roll hiện hành.

Quá trình duyệt sơ đồ cơ sở diễn ra nhƣ sau:

 Trình cài đặt đọc file graph để duyệt trên sơ đồ cơ sở,

97

 Từ sơ đồ cơ sở, trình cài đặt sẽ xem xét các file node cần thiết cho máy đang cài đặt hiện hành, từ đó đọc đƣợc các thông tin cần thiết về các package cần cài đặt cho máy đó để sinh ra file cơ sở.

Với roll myroll bên trên, trong quá trình cài đặt máy frontend, file graph và file

compute, file graph và file nodes myroll-compute.xml sẽ đƣợc duyệt.

98

node myroll-frontend.xml sẽ đƣợc duyệt. Tƣơng tự, trong quá trình cài đặt các máy

PHỤ LỤC 2. LIÊN LẠC GIỮA CÁC TIẾN TRÌNH MPI

Nhƣ đã giới thiệu trong chƣơng 4, cặp hàm MPI_Send và MPI_Recv là cặp hàm cơ bản để liên lạc giữa các tiến trình MPI. Do tính chất đồng bộ của cặp hàm này nên các nhà phát triển phải cẩn thận khi thiết kế các ứng dụng MPI để tránh tình trạng deadlock.

Ứng dụng dƣới đây đƣợc dùng để minh họa cho việc liên lạc giữa các tiến trình

MPI sử dụng MPI_Send và MPI_Recv. Tiến trình có rank i sẽ gửi một số nguyên đến tiến

trình có rank (i + 1) % size, với size là số lƣợng tiến trình. Khi số nguyên đƣợc nhận bởi tiến trình có rank 0, giá trị của nó đƣợc giảm đi 1 rồi đƣợc tiếp tục gửi đi theo quy tắc

trên. Nếu giá trị của số nguyên là 0 thì tiến trình tƣơng ứng sẽ thoát sau khi gửi và nhận

thành công.

#include #include "mpi.h" int main(int argc, char* argv[]) { int myRank, numProcs; int num, tag, next, from; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numProcs); MPI_Comm_rank(MPI_COMM_WORLD, &myRank); tag = 201; next = (myRank + 1) % numProcs; from = (myRank + numProcs - 1) % numProcs; if (myRank == 0) { num = 2; fprintf(stdout, "Process %d sending %d to %d\n", myRank, num, next); MPI_Send(&num, 1, MPI_INT, next, tag, MPI_COMM_WORLD);

99

Dƣới đây là mã nguồn ứng dụng.

} do { MPI_Recv(&num, 1, MPI_INT, from, tag, MPI_COMM_WORLD, &status); fprintf(stdout, "Process %d received %d\n", myRank, num); if (myRank == 0) { --num; printf("Process 0 decremented num\n"); } fprintf(stdout, "Process %d sending %d to %d\n", myRank, num, next); MPI_Send(&num, 1, MPI_INT, next, tag, MPI_COMM_WORLD); } while (num > 0); fprintf(stdout, "Process %d exiting\n", myRank); if (myRank == 0) { MPI_Recv(&num, 1, MPI_INT, from, tag, MPI_COMM_WORLD, &status); } MPI_Finalize(); return 0; }

Do tính chất đồng bộ của MPI_Send và MPI_Recv nên cách thử nghiệm ứng dụng

tốt nhất là chạy với n tiến trình (n ≥ 2) trên cùng một máy.

100

Dƣới đây là kết quả chạy với số tiến trình là 3.

Hình 56 – Minh họa việc liên lạc giữa các tiến trình

101

PHỤ LỤC 3. SỬ DỤNG MPI ĐỂ TÍNH TÍCH PHÂN

Dƣới đây là một ứng dụng MPI đƣợc viết nhằm giải quyết bài toán tính diện tích của hình thang cong nằm dƣới parabol với . Mỗi máy con tham gia tính toán sẽ chịu trách nhiệm tính diện tích của một hình thang cong con. Kết quả sau đó sẽ đƣợc cộng lại để cho

ra đáp số cuối cùng.

#include "mpi.h" #include #define NUM_RECTS 50 #define LOWER_BOUND 2.0 #define UPPER_BOUND 5.0 int main(int argc, char* argv[]) { int numProcs, myRank; int destination, source, tag; MPI_Status status; int i; double area, at, height, lower, width, total, range; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numProcs); MPI_Comm_rank(MPI_COMM_WORLD, &myRank); range = (UPPER_BOUND - LOWER_BOUND) / numProcs; width = range / NUM_RECTS; lower = LOWER_BOUND + range * myRank; area = 0.0; for (i = 0; i < NUM_RECTS; i++) { at = lower + i * width + width / 2.0; height = at * at; area = area + width * height;

102

1,

source,

MPI_DOUBLE,

tag,

destination,

MPI_DOUBLE,

tag,

1,

} tag = 0; if (myRank == 0) { total = area; for (source = 1; source < numProcs; source++) { MPI_Recv(&area, MPI_COMM_WORLD, &status); total = total + area; } fprintf(stdout, "The area from %f to %f is: %f\n", LOWER_BOUND, UPPER_BOUND, total); } else { destination = 0; MPI_Send(&area, MPI_COMM_WORLD); } MPI_Finalize(); return 0; }

Lƣu với tên mpiintegralx2.c, biên dịch và chạy ta sẽ có output:

Hình 57 – Tính tích phân

Nếu chúng ta tính bằng công thức tính tích phân, thì giá trị diện tích của hình thang cong

trong đoạn [2, 5] sẽ là

|

.

103

PHỤ LỤC 4. SỬ DỤNG MPI ĐỂ TÍNH TOÁN SỐ PI

Trong phần dƣới đây chúng ta sẽ nghiên cứu thêm về MPI qua ví dụ về tính toán số

PI. Tính toán số PI không chỉ là bài toán mang tính thực tế cao, nó còn là một trong

những ví dụ kinh điển để minh họa cho các công nghệ tính toán song song. Nguyên nhân

là với một chƣơng trình tính toán số PI, ngƣời phát triển không cần quan tâm đến vấn đề

“cân bằng tải”, lại giảm thiểu đƣợc việc liên lạc giữa các tiến trình và kiểm tra đƣợc kết

quả mà không cần dùng máy vi tính. Để tính PI có nhiều công thức khác nhau. Hiện tại

có những công thức có thể giúp tính ra số PI với hàng chục nghìn chữ số đáng tin trong

khoảng thời gian tính bằng giờ [15]. Trong chƣơng trình sẽ trình bày bên dƣới, chúng ta

sẽ sử dụng công thức tích phân:

( ) ( ) ( ) ( )|

do đó công việc còn lại của ta chỉ là tính tích phân bên trái. Công thức này rất dễ

trong đoạn từ 0 đến 1 ra làm các đoạn con, và tính diện tích của các hình chữ nhật ứng với các đoạn con này. Diện

tính nhờ định nghĩa của tích phân. Ta sẽ chia đƣờng cong

đƣợc coi nhƣ xấp xỉ bằng tổng diện tích của các hình chữ nhật. Số lƣợng các đoạn con càng nhiều, độ chính xác của kết quả càng cao.

Hình 58 – Tính toán số PI

Nguồn: [11]

104

tích của hình thang cong giới hạn bởi

Để thấy đƣợc mối quan hệ giữa số lƣợng các đoạn con n và độ chính xác của kết quả, chúng ta sẽ thiết kế chƣơng trình sao cho tiến trình chủ (master) chấp nhận một tham

số từ phía ngƣời dùng, truyền tham số này đến các tiến trình con (slave). Kết quả cuối

cùng này sẽ đƣợc so sánh với số 3.141592653589793238462643 để biết độ chính xác.

Chƣơng trình bên dƣới có một số điểm cần lƣu ý nhƣ sau:

MPI_Bcast gửi một thông điệp đến tất cả các tiến trình khác trong nhóm. Signature của hàm này là:

int MPI_Bcast(void *address, int count, MPI_Datatype dataType, int root, MPI_Comm communicator)

Sử dụng phƣơng pháp gửi thông điệp hàng loạt nhờ hàm MPI_Bcast.

Trong đó, 3 tham số đầu tiên xác định thông điệp cần truyền đi (địa chỉ bắt đầu của

thông điệp trong bộ đệm (address), kiểu dữ liệu của thông điệp (dataType) và số lƣợng

thành tố có kiểu dữ liệu đã xác định trong bộ đệm (count). Tham số root cho biết rank

của tiến trình truyền. Tham số cuối cùng xác định bộ liên lạc chứa các tiến trình nhận.

MPI_Bcast, tƣơng tự nhƣ hàm nhận tƣơng ứng của hàm gửi MPI_Send là MPI_Recv.

Lƣu ý rằng, hàm nhân tƣơng ứng của hàm gửi MPI_Bcast cũng chính là

Sử dụng hàm MPI_Reduce để tính toán kết quả cuối cùng, thay vì truyền thủ công giá trị tính toán từ các tiến trình con (slave) về tiến trình cha (master) rồi tính tổng.

int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype dataType, MPI_Op op, int root, MPI_Comm communicator)

Signature của hàm này là:

Trong đó, 3 tham số sendbuf, count và dataType định nghĩa thông điệp mà mỗi tiến trình con cần truyền đến tiến trình cha (ý nghĩa tƣơng tự nhƣ trên). Tham số recvbuf

định nghĩa địa chỉ bộ đệm sẽ đƣợc dùng để nhận. Tham số op định nghĩa toán tử thao tác

communicator ý nghĩa tƣơng tự nhƣ trên.

trên các thông điệp. Tham số root định nghĩa rank của tiến trình cha. Tham số

105

Tham số op nhận giá trị là các hằng số toán tử đƣợc định nghĩa nhƣ bảng dƣới đây.

Bảng 2 – Các hằng số toán tử

MPI_MAX

Hằng số Ý nghĩa

MPI_MIN

Tìm số lớn nhất

MPI_SUM

Tìm số nhỏ nhất

MPI_PROD

Tính tổng

MPI_LAND

Tính tích

MPI_BAND

Tính AND (logic)

MPI_LOR

Tính AND (trên bit)

MPI_BOR

Tính OR (logic)

MPI_LXOR

Tính OR (trên bit)

MPI_BXOR

Tính XOR (logic)

MPI_MINLOC

Tính XOR (trên bit)

Tính giá trị nhỏ nhất của phần tử thứ nhất của một struct (minimum), đồng

thời trả về phần tử thứ 2 tƣơng ứng

(location). Nếu tất cả các phần tử thứ nhất

đều bằng nhau thì location đƣợc tính bằng

giá trị nhỏ nhất trong số các phần tử thứ

MPI_MAXLOC

hai. Xem [33] để rõ hơn.

Tính maximum và location, tƣơng

tự nhƣ trên.

Mỗi tiến trình sẽ tính toán một số lƣợng gần nhƣ nhau các hình chữ nhật con “rời rạc”, nghĩa là các hình chữ nhật con này không nằm liên tiếp. Cụ thể, nếu có 2 tiến

106

trình tính diện tích của 10 hình chữ nhật con, thì tiến trình 1 sẽ tính diện tích của các hình chữ nhật số 1, 3, 5, 7, 9, và tiến trình thứ 2 sẽ tính diện tích của các hình chữ nhật số 2, 4, 6, 8, 10. Mục đích là để tránh các phép toán nhân chia không cần thiết để tính “khoảng”

#include "mpi.h" #include #include /* * Ung dung tinh toan so PI */ int main(int argc, char *argv[]) { int myRank, numProcs; int n, i; // Gia tri PI voi 25 chu so double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numProcs); MPI_Comm_rank(MPI_COMM_WORLD, &myRank); while (1) { if (myRank == 0) { fprintf(stderr, "Enter the number of intervals (0 quits): "); scanf("%d", &n); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) { break; } else { h = 1.0 / (double) n;

107

tính toán cho mỗi tiến trình, đồng thời tránh việc sử dụng thêm biến trung gian để lƣu lại các giá trị “khoảng” này.

sum = 0.0; for (i = myRank + 1; i <= n; i += numProcs) { x = h * ((double) i - 0.5); sum += (4.0 / (1.0 + x * x)); } mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myRank == 0) { fprintf( stdout, "pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT)); } } } MPI_Finalize(); return 0; }

108

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Nguyễn Phú Bình. Kiến trúc các hệ thống tính toán. Chƣơng 1.http://www.ebook.edu.vn/?page=1.39&view=1250.

[2] Siêu máy tính “Made In Vietnam”. http://www.pcworld.com.vn/articles/quan-ly/giai-phap- cong-cu/2004/01/1185707/sieu-may-tinh-made-in-vietnam/.

[3] Từ tính toán lƣới đến tính toán mây. http://www.pcworld.com.vn/articles/quan-ly/trao-

doi/2010/01/1195081/tu-tinh-toan-luoi-den-tinh-toan-may/.

Tiếng Anh

[4] Blaise Barney. Introduction to Parallel Computing.

https://computing.llnl.gov/tutorials/parallel_comp/.

[5] Guntis Barzdins và Girts Folkmanis. Unix Clusters.http://www.ltn.lv/~unix/cluster.ppt.

[6] Rajkumar Buyya. High Performance Cluster Computing. Prentice Hall PTR, 1999. http://www.gridbus.org/papers/ic_cluster.pdf.

[7] Cesar Covarrubias. Rocks clusters make sense for educational environments. Linux.com,

August 18, 2008. http://www.linux.com/archive/feature/143260.

[8] Michael J. Flynn và Kevin W. Rudd. Parallel Architectures. http://public.clunet.edu/~reinhart/CSC521MSCS/Week5/FlynnTaxonomies.pdf.

[9] William Gropp, Ewing Lusk và Anthony Skjellum. Using MPI Portable Parallel Programming With the Message-passing Interface Scientific and Engineering Computation. The

MIT Press, 2 edition, November 26, 1999. tr. 1 – 58.

[10] Ned Nedialkov. Communicators.

http://www.cas.mcmaster.ca/~nedialk/COURSES/mpi/Lectures/lec3_1.pdf.

[11] Peter S. Pacheco. Parallel Programming with MPI.Morgan Kaufmann Publishers, Inc. 1997.

tr. 1 – 9.

[12] Philip M. Papadopoulos. Introduction to the Rocks Cluster Toolkit – Design and Scaling. http://prius.ics.es.osaka-u.ac.jp/class/pdf/20051130-philip-PRIUSlecture.pdf.

[13] Philip M. Papadopoulos. Managing Configuration of Computing Clusters with Kickstart and

XML.http://astro.xmu.edu.cn/rocks-documentation/4.3/talks/Rocks-MSR.ppt.

[14] Matthew Sacks. Rocks offers an easy solution for clustering with virtual machines. http://www.linux-magazine.com/w3/issue/98/038-041_rockclusters.pdf.

[15] Daniel Shanks, John W. Wrench, Jr. Calculation of PI to 100,000 Decimals - Mathematics of Computation, Volume 16, Issue 77 (Jan., 1962), 76-99.

[16] Joseph D. Sloan. High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and

MPI. O'Reilly. November 2004.

[17] L.A. Smith. Mixed Mode MPI / OpenMP Programming. http://www.cslab.ntua.gr/courses/pps/files/Mixed_Mode_MPI-OpenMP_Programming-

Tutorial.pdf.

[18] About. http://www.rocksclusters.org/wordpress/?page_id=57.

[19] Adaptive Algorithm. http://en.wikipedia.org/wiki/Adaptive_algorithm.

[20] Communication Domains. http://www.netlib.org/utk/papers/mpi-book/node129.html.

[21] Constants. http://www.mcs.anl.gov/research/projects/mpi/www/www3/Constants.html.

[22] Flynn’s Taxonomy. http://en.wikipedia.org/wiki/Flynn%27s_taxonomy.

[23] Grand Challenge. http://en.wikipedia.org/wiki/Grand_Challenge.

[24] Handling MPI Errors. http://beige.ucs.indiana.edu/I590/node85.html.

[25] Heterogeneous Computing. http://en.wikipedia.org/wiki/Heterogeneous_computing.

[26] Heterogeneous Computing. http://www.sintef.no/Projectweb/Heterogeneous-Computing/.

[27] Inter-Communication. http://www.mpi-forum.org/docs/mpi-11-html/node111.html.

[28] Inter-Communication Examples. http://www.mcs.anl.gov/research/projects/mpi/mpi- standard/mpi-report-1.1/node114.htm.

[29] Linux clustering cornucopia. http://www.ibm.com/developerworks/linux/library/l-lw-

clustering.html.

[30] Massive Parallel Processing. http://en.wikipedia.org/wiki/Massive_parallel_processing.

[31] Memory bound function. http://en.wikipedia.org/wiki/Memory_bound_function.

[32] MPI – Context, Communicator, Group. http://www.mofeel.net/535-comp-parallel-

mpi/278.aspx.

[33] MINLOC and MAXLOC. http://www.mpi-forum.org/docs/mpi-11-html/node79.html.

[34] MPI_COMM_PARENT and MPI_Comm_get_parent. http://www.cs.uiuc.edu/homes/wgropp/projects/parallel/MPI/mpi-

errata/discuss/commparent/commparent-1-clean.txt.

[35] MPI_Comm_get_name. http://mpi.deino.net/mpi_functions/MPI_Comm_get_name.html.

[36] Multicore Processor. http://en.wikipedia.org/wiki/Multi-core_(computing).

[37] Parallel Computing. http://en.wikipedia.org/wiki/Parallel_computing.

[38] Programming on Multi-Core Processors Using Pthreads (POSIX Threads).

http://www.cdac.in/html/events/beta-test/PEEP-2008-web-page/peep-2008-handson-webpage-

mode-1/pthreads-peep-2008/pthreads-peep-2008-overview.html.

[39] Rocks A Palooza 2007, session 1.http://www.rocksclusters.org/rocksapalooza/2007/user- session1.pdf.

[40] Rocks A Palooza 2007, session 2.http://www.rocksclusters.org/rocksapalooza/2007/user- session2.pdf.

[41] Rocks Cluster Register . http://www.rocksclusters.org/rocks-register/.

[42] Rocks Clusters. http://www.rocksclusters.org/wordpress/.

[43] SISD. http://en.wikipedia.org/wiki/SISD.

[44] The Story of Multiple Cores. http://www.nusacm.org/newsletter/vol11.html.

[45] Top500 Supercomputing Sites. http://www.top500.org/.

[46] Types of Parallel Computers. http://www.scl.ameslab.gov/Projects/parallel_computing/para_types.html.

[47] What's in NPACI Rocks and How Do I Use It? http://stommel.tamu.edu/~baum/npaci.html.

Mục lục

2.2.3.

Mở đầu ................................................................................................................................. 0 Lời cảm ơn............................................................................................................................ 2 Chương 1. TỔNG QUAN AN NINH MẠNG MÁY TÍNH ................................................. 3 1.1. TÌNH HÌNH AN NINH MẠNG HIỆN NAY ....................................................... 3 1.1.1. An ninh mạng trên thế giới ................................................................................ 4 1.1.2. An ninh mạng tại Việt Nam ................................................................................ 5 1.2. NGUYÊN NHÂN KỸ THUẬT GÂY MẤT AN TOÀN MẠNG ............................ 11 1.2.1 Nguyên nhân có sẵn trong hệ thống .................................................................. 11 1.2.1.1 Các lỗi phần mềm ........................................................................................ 11 1.2.1.2. Lỗi cấu hình hệ thống ..................................................................................... 11 1.2.1.3. Các điểm yếu trong phần mềm hệ thống ..................................................... 12 1.2.2 Nguyên nhân cố ý ............................................................................................... 12 1.2.2.1. Bẻ khóa mật khấu ....................................................................................... 12 1.2.2.2. Nghe lén lưu thông trên mạng .................................................................... 13 1.2.2.3. Các kỹ thuật khai thác lỗ hổng bảo vệ ........................................................ 13 1.3. MỘT SỐ DẠNG TẤN CÔNG VÀO HỆ THỐNG THÔNG TIN .......................... 14 Chương 2. VIRUS TIN HỌC ............................................................................................. 16 2.1. GIỚI THIỆU VỀ VIRUS TIN HỌC ....................................................................... 16 2.1.1. Khái niệm .......................................................................................................... 16 2.1.2. Các tính chất của Virus máy tính..................................................................... 16 2.1.3. Lịch sử phát triển của virus tin học ................................................................ 17 2.1.4. Sự nguy hiểm của virus tin học ............................................................................ 20 2.1.5. Tên của virus ..................................................................................................... 20 2.2. CÁC LOẠI VIRUS TIN HỌC ............................................................................... 21 2.2.1. Phân loại virus tin học ..................................................................................... 21 Boot Virus .................................................................................................. 24 2.2.2. 2.2.2.1. Phương pháp lây lan ................................................................................... 24 2.2.2.2. Phân loại Boot Virus ................................................................................... 25 2.2.2.3. Cấu trúc chương trình B-Virus ................................................................... 27 Virus File ..................................................................................................... 28 2.2.3.1.Phương pháp lây lan .................................................................................... 28 2.2.3.2 . Phân loại F-Virus ...................................................................................... 29 2.2.3.3. Cấu trúc chương trình F-Virus ................................................................... 29 2.2.4. Virus Macro ...................................................................................................... 30 2.2.5. Trojan ............................................................................................................... 31 2.2.5.1. Định nghĩa Trojan ...................................................................................... 31 2.2.5.2. Phương pháp lây nhiễm Trojan .................................................................. 31 2.2.5.4. Phân loại Trojan ......................................................................................... 33 2.2.5.5. Mục đích của Trojan .................................................................................. 34 2.2.5.6. Phương thức hoạt động của Trojan ........................................................... 34 2.2.5.7. Cổng của một số Trojan thông dụng........................................................... 35 2.2.6. Internet Worm .................................................................................................. 36 2.2.6.1. Giới thiệu chung ......................................................................................... 36 2.2.6.2. Các giai đoạn phát triển của sâu Internet ................................................... 38 Chương 3. PHÒNG CHỐNG VIRUS ................................................................................ 46

0

3.2.1. 3.2.2.

3.1. KỸ THUẬT NHẬN DẠNG VIRUS ........................................................................ 46 3.1.1. Nhận dạng chính xác mẫu (Signature based delection) .................................. 46 3.1.2. Nhận dạng theo mã đại diện ............................................................................. 47 3.1.2.1. Lấy đại diện theo toàn file .......................................................................... 47 3.1.2.2. Lấy đại diện theo một phần thông tin quan trọng ....................................... 47 3.1.3. Scan theo string................................................................................................. 48 3.1.3.1. Xét theo offset tĩnh hoàn toàn ..................................................................... 48 3.1.3.2 Xét theo vị trí offset tương đối ...................................................................... 48 3.1.4. Nhận dạng hành vi đáng ngờ ........................................................................... 50 3.1.5. Kiểm soát liên tục ............................................................................................. 50 3.1.6. Kết hợp các phương thức ................................................................................. 50 3.2. CÁC BƯỚC TIẾN HÀNH TÌM VÀ DIỆT VIRUS ................................................ 51 Dò tìm .......................................................................................................... 51 Diệt virus và khôi phục dữ liệu ................................................................... 52 3.2.2.1. B-Virus ........................................................................................................ 52 3.2.2.2. F- Virus ....................................................................................................... 53 3.2.2.3. Trojan ......................................................................................................... 54 3.2.2.4. Sâu Worm ................................................................................................... 56 3.3. THỬ NGHIỆM MỘT SỐ CHƯƠNG TRÌNH ....................................................... 56 3.3.1. Thử nghiệm chương trình tạo virus ................................................................. 56 3.3.2. Sử dụng chương trình diệt virus ...................................................................... 58 Kết luận .............................................................................................................................. 59

1

Các cụm từ viết tắt

AV: Anti Virus

Dos: Denial of Server.

B-Virus: Boot Virus.

F- Virus: File Virus.

KAV: Kakworm.

2

Mở đầu

Hiện nay mạng Internet tại Việt Nam đang phát triển mạnh, số lượng các cá nhân, tập thể tham gia vào hoạt động Internet ngày càng nhiều. Cùng với sự phát triển đó, nguy cơ về các cuộc tấn công thông qua mạng Internet tới những người sử dụng cũng gia tăng nhanh chóng. Công cụ chủ yếu được sử dụng để thực hiện những cuộc tấn công là virus. Đứng trước sự tấn công đó, để đảm bảo được an ninh mạng tại Việt Nam, chúng ta cấp thiết phải thực hiện việc phòng chống virus một cách có hiệu quả.

Để phòng chống virus hiệu quả cần phải thực hiện việc khảo sát virus đặc biệt là phương thức hoạt động của chúng. Về nguyên tắc, virus thường bao gồm hai chức năng chính là: lây truyền và phá hoại. Sâu Internet được coi như một thế hệ mới của virus

hoạt động trên môi trường mạng và trong nhiều trường hợp, tác hại do chúng gây ra là rất to lớn. Việc nghiên cứu và đề xuất các giải pháp phòng chống sâu Internet, góp phần đảm bảo an ninh mạng là vấn đề nghiên cứu thời sự hiện nay.

Khóa luận này định hướng tới việc triển khai thi hành biện pháp trên về cả mặt

công nghệ và ứng dụng.

Chương thứ nhất trình bày tổng quan về tình hình an ninh mạng trên thế giới và tại Việt Nam, những nguyên nhân kỹ thuật mà virus có thể sử dụng để thực hiện tấn

công vào máy tính tạo ra tình trạng mất an ninh trên máy tính.

Chương thứ hai trình bày quá trình tiến hóa của virus, phân loại virus và đặc điểm, cấu trúc của từng loại virus. Trải qua một quá trình tiến hóa từ các loại virus có

trước, sâu Internet đã trở nên tinh vi hơn và gây ra những hậu quả nặng nề hơn.

Dựa trên việc phân tích về phương thức hoạt động của từng loại virus đã được trình bày trong chương thứ hai, chương thứ ba trình bày về quy trình chung các bước tiến hành tìm kiếm nhận dạng và diệt một số virus điển hình. Xây dựng chương trình

thử nghiệm, chương trình làm mất các biểu tượng trên màn hình desktop và chương trình hiển thị lại các biểu tượng ấy.

1

Lời cảm ơn

Em xin bày tỏ lòng kính trọng và biết ơn sâu sắc tới PSG.TS Trịnh Nhật Tiến, bộ

môn các hệ thống thông tin, khoa công nghệ thông tin, Đại học Công Nghệ, ĐHQG Hà Nội đã hướng dẫn và động viên em trong quá trình làm luận văn này.

Em xin cảm ơn các thầy cô giáo trong trường đã tạo điều kiện giúp đỡ em hoàn thành luận văn này. Em xin gửi lời cảm ơn tới gia đình bạn bè đã giúp đỡ động viên tạo

điều kiện cho em trong quá trình làm luận văn.

Vì điều kiện về thời gian không nhiều, kinh nghiệm còn hạn chế, không tránh

khỏi các thiếu sót. Em mong nhận được các ý kiến đóng góp của các thầy cô và bạn bè

Em xin chân thành cảm ơn!

2

Chương 1. TỔNG QUAN AN NINH MẠNG MÁY TÍNH

1.1. TÌNH HÌNH AN NINH MẠNG HIỆN NAY

Hiện nay với sự phát triển vượt bậc về khoa học công nghệ và truyền thông, thông tin thành một nguồn tài nguyên quan trọng. Mạng Internet ra đời đem lại giá trị rất cao cho thông tin có được trên máy tính. Cùng với sự phát triển nhanh chóng và các tác động tích cực của mạng Internet đã dần chuyển đổi nền kinh tế công nghiệp đơn

thuần sang nền kinh tế thông tin và kinh tế trí thức, trong đó thông tin vừa là phương tiện truyền tải tri thức vừa là hàng hóa để trao đổi giữa người bán và người mua. Mạng Internet với các cơ chế truyền tải, giao dịch thông tin trên mạng hiện nay là các phương tiện nhanh chóng và hữu hiệu để kết nối thế giới lại với nhau, xoá nhòa đi khoảng cách về không gian và thời gian. Xét về đặc tính của thông tin, bản thân nó phải luôn mang tính nhất quán, được cập nhật, có độ chính xác cao và hữu ích cho con người. Đó là yêu cầu cần thiết trong thời đại thông tin ngày nay, đặc biệt khi hệ thống Internet phát triển

mạnh. Tuy nhiên do diễn biến phức tạp về nguy cơ bị tấn công, xâm nhập, phá hoại, đánh cắp thông tin trên mạng, từ đó nảy sinh ra các yêu cầu về an ninh mạng lưới, an toàn thông tin của các giao dịch trên mạng mà người ta gọi đó là Cybersecurity. Sự cần thiết phải có một tổ chức chịu trách nhiệm thường trực, giám sát an ninh thông tin trên mạng lưới viễn thông và không gian điện tử nói riêng, phản ứng nhanh trước các sự cố gắng là vấn đề được quan tâm.

An ninh hệ thống, an toàn thông tin nhằm bảo vệ được hệ thống, có khả năng chống lại các sự cố, lỗi và tác động không mong đợi, các biến động liên quan đến độ an toàn của hệ thống phải được giảm thiểu xuống mức thấp nhỏ nhất. An ninh hệ thống, an toàn thông tin phải được xây dựng trên cơ sở là các yêu cầu về tính tin cậy, tính toàn vẹn, tính sẵn sàng – không bỏ cung cấp dịch vụ.

Việc các hacker tấn công làm tê liệt một hệ thống, một website hoặc sự lan truyền của các virus máy tính làm phá huỷ toàn bộ hệ thống cơ sở dữ liệu trở thành thường xuyên hơn trên toàn thế giới cũng như tại Việt Nam. Trong vài năm gần đây,

người sử dụng Internet tại Việt Nam đã liên tiếp chịu sự tấn công của virus, làm vô hiệu hoá các dịch vụ, nạn ăn cắp mật khẩu, lợi dụng trang Web, lợi dụng hệ thống nhắn tin để đe doạ các thuê bao di động…

3

Số liệu thống kê những sự cố được biết đến tại Việt Nam còn rất ít, nhưng trong tương lai các sự cố sẽ phát triển mạnh. Để loại trừ những hành vi gây tổn hại cho xã hội, đặc biệt là để đảm bảo an ninh hệ thống, an toàn thông tin cần thực hiện các cơ chế phù hợp để có phản ứng một cách hiệu quả với các sự cố hoặc tình trạng mất an toàn. Phản ứng có hiệu quả được hiểu là khả năng ngăn chặn sự cố, khả năng khắc phục sự cố với tiêu điểm là yếu tố thời gian được đảm bảo nhanh nhất có thể được.

1.1.1. An ninh mạng trên thế giới

Theo CERT (Computer Emegency Response Team) [1], qua báo cáo thống kê

nhận được về số vụ tấn công, truy nhập trái phép mạng thì từ năm 1989 có 200 vụ, năm 1991 có 400 vụ, năm 1993 có 1400 vụ, năm 1994 có 2241 vụ. Từ năm 2000 trở lại đây mỗi năm có tới hàng chục nghìn vụ (theo báo cáo).

Theo ước tính của Mi2g, một công ty an ninh mạng, thiệt hại kinh tế thế giới do những cuộc tấn công mạng máy tính là khoảng 37 tỷ - 45 tỷ USD trong năm 2002 và 135 tỉ USD trong năm 2003.

Trong năm 2003, có tới 77% công ty tại Brazil thừa nhận đã bị tấn công vào

mạng máy tính (năm 2002 con số này là 43%). Tại Nga, tội phạm Internet làm người sử dụng mất 6 tỉ USD trong năm 2002, tăng gấp 3 lần so với năm 2001. Tại Mỹ, một công ty bị hacker thâm nhập 30 lần/ tuần, khoảng 15% số công ty bị tấn công chịu những thiệt hại lớn.

Tại Trung Quốc, theo báo cáo về an ninh mạng tháng 7/2001 có tới 63% số người sử dụng Internet đã nhân được thư rác, 50% số người sử dụng Internet bị tấn công. Đối với biện pháp phòng chống, 75% số người cho rằng phần mềm diệt virus có hiệu quả, 68% cho firewall, 37% cho mã bảo mật khẩu.

Tại Anh, một số thông tin sau đây về tình hình an ninh mạng. 72% số công ty khảo sát cho biết đã bị dính virus, đối với các công ty lớn thì 83% bị nhiễm virus. 93% công ty có hệ thống phòng ngừa virus, tỷ lệ này ở những công ty lớn là 99%. Sâu Blaster đến nay vẫn là thủ phạm lây lan lớn nhất, chiếm tới một phần ba số vụ lây nhiễm, trong đó hơn một nửa tập trung vào các công ty lớn. Trong số những công ty thừa nhận có lỗ hổng hệ thống, hai phần ba cho rằng virus có nguy cơ lớn nhất.

Thiệt hại do các sự cố virus rất đa dạng, hệ thống có thể bị gián đoạn một ngày,

một tháng hoặc lâu hơn.

4

Theo công ty Mi2g, 18 trong số 20 tổ chức hacker phát triển nhất hiện nay có trụ sở tại Brazil. Tuy nhiên, các tổ chức an ninh mạng tại Mỹ và trên thế giới cảnh báo cá tổ chức này đang có xu hướng phát triển dần ở Châu Á đặc biệt ở Hàn Quốc, Trung Quốc, Nga, nơi các hacker có độ tuổi trẻ nhất từ 20 đến 30. Điều đó có nghĩa các tổ chức hacker có dụng ý xấu có xu hướng di chuyển gần đến Việt Nam hơn.

Cuối tháng 12/2002 một tổ chức tội phạm Hàn Quốc đã tổ chức một cuộc thi tuyển mộ hacker. Số lượng hacker dự thi đã tăng lên đến 4.400 người, cảnh sát Hàn Quốc đã phát hiện và huỷ bỏ cuộc thi. Các hacker này đã xâm nhập vào 90 trang web của chính phủ, các công ty lớn tại Hàn Quốc và đánh cắp thẻ tiến dụng của 2,6 triệu người dùng Internet. Số vụ hacker phạm tội ở Hàn Quốc lên đến 14.065 vụ năm 2002.

1.1.2. An ninh mạng tại Việt Nam

Toàn cảnh an ninh mạng Việt Nam 2007 [6]

An ninh mạng 2007 vẫn đang trên đà bất ổn, được coi là “báo động đỏ” của an ninh mạng Việt Nam khi giới hacker mũ đen đã phân hóa, một số bộ phận ẩn mình, trở nên chuyên nghiệp nguy hiểm.

Các cuộc tấn công chủ yếu vì mục đích trục lợi, các cuộc tấn công có nguồn gốc nước ngoài cũng ngày một gia tăng, nhiều hoạt động phạm pháp chuyển sang lợi dụng Internet làm môi trường hoạt động mới. Tình trạng phát tán thư rác, virus tăng theo cấp

số nhân.

- Số các website Việt Nam bị hacker trong nước tấn công: 118

- Số các website Việt Nam bị hacker nước ngoài tấn công:

224

Tổng số:

342

- Số website Bkis phát hiện có lỗ hổng nghiêm trọng: 140

- Số máy tính bị nhiễm virus:

33.646.000 lượt máy tính

- Số virus mới xuất hiện trong năm:

6.752 virus mới

- Số virus xuất hiện trung bình trong 1 ngày:

18,49 virus/ngày

- Virus lây lan nhiều nhất trong năm: W32.Winib.Worm: Lây nhiễm

511.00 máy tính.

5

Vấn đề an ninh các website

Như vậy trong năm 2007, đã có 342 website của Việt Nam bị hack bởi các hacker trong nước và nước ngoài, có những website bị hack tới hai lần. Nghiêm trọng hơn, một số website tên miền .gov.vn đã bị hacker nước ngoài kiểm soát và gắn mã độc

phán tán virus. Nếu tình trạng này còn tiếp diễn thì an ninh quốc gia có thể bị ảnh hưởng.

Tháng 3/2007 trong số 22 Website của các công ty chứng khoán có tới 12 Website (chiếm tới 54%) tồn tại lỗ hổng nghiêm trọng dễ bị hacker lợi dụng tấn công

chiêm quyền kiểm soát. Đến cuối năm 2007, khi kiểm tra, khảo sát lại, kết quả vẫn còn 40% website có lỗi trên tổng số 60 website. Hacker có thể lợi dụng các lỗ hổng này để thay đổi thông tin kết quả giao dịch, sửa đổi chỉ số chứng khoán, đưa các thông tin thất thiệt về thị trường. Nếu không phát hiện kịp thời hacker có thể gây sự biến động trên thị trường chứng khoán để trục lợi và nhiều nhà đầu tư phải chịu thiệt hại.

Vấn đề an ninh mật khẩu người dùng cá nhân

Tháng 5/2007, trong số gần 10.000 thuê bao của 3 nhà cung cấp dịch vụ ADSL

lớn nhất Việt Nam thì có hơn 14% (1.400) nằm trong tình trạng nguy hiểm, kẻ xấu dễ dàng kiểm soát hệ thống.

Tháng 11/2007, xuất hiện hiện tượng lừa đảo người sử dụng Internet ăn theo sự

kiện Yahoo mới khai trương dịch vụ Yahoo!Mask. Kẻ xấu đã khai thác sự nhẹ dạ của người sử dụng để thực hiện hành vi lừa đảo. Lợi dụng nhu cầu chuyển đổi từ dịch vụ blog Yahoo! 360 sang Yahoo! Mash, kẻ lừa đảo gửi email tiếng Việt tới các nạn nhân “hướng dẫn” cách chuyển đổi blog sang dịch vụ mới này là không mất dữ liệu. Thực chất, chúng dụ họ cung cấp mật khẩu tài khoản của Yahoo!360.

Vấn đề lừa đảo trực tuyến

Năm 2007, hầu hết các hình thức lừa đảo trực tuyến phổ biến trên thế giới đều

đã xuất hiện ở Việt Nam. Các hình thức này gồm:

- Lừa đảo qua diễn đàn trên mạng.

- Lừa đảo qua email mà điển hình nhất là lừa đảo trúng thưởng xổ số.

- Lừa đảo qua website

- Ngoài ra, còn có lừa đảo qua tin nhắn di động, chat, qua game online, mạng xã hội ảo.

6

Sâu máy tính – Worm nhường chỗ cho virus lây qua USB

95,72% thiết bị nhớ USB tại Việt Nam từng bị nhiễm virus. Virus lây qua USB đã thay thế vị trí của virus lây qua email (worm), trở thành loại virus lây nhiều nhất tại Việt Nam. Đồng thời, rất nhiều virus lây file mới đã xuất hiện với tốc độ lây lan nhanh

và phá hoại cao. Chúng bám theo các virus lây qua USB, lợi dụng tốc độ phát tán của các virus này để “bò” từ máy này sang máy khác, công việc mà trước đây những virus lây file cũng phải mất hàng tuần, hàng tháng để làm.

Malware lây theo bầy đàn

Malware là cách gọi chung các phần mềm độc hại, bao gồm virus, trojan, spyware, adware…Khi bị nhiễm malware loại này, nếu không được bảo vệ kịp thời, máy tính của nạn nhân sẽ nhanh chóng bị lây nhiễm thêm hàng loạt malware khác từ

Internet. Malware lây theo bầy đàn trở thành những mối nguy hiểm cho an ninh mạng Internet tại Việt Nam.

Năm 2007, có đến 10,6 triệu lượt máy tính bị nhiễm trojan, spyware, adware. Đây là một con số không nhỏ bởi trojan, spyware, adware là các loại mã độc hại không

tự lây truyền từ máy này sang máy khác. Có rất nhiều người sử dụng máy tính đã tự mình tìm đến các “ổ dịch”. Đó là các website không rõ nguồn gốc, thể hiện xu hướng mới của malware: tấn công vào từng nhóm đối tượng cụ thể, không “đánh” trên diện rộng – là xu hướng của malware trong thời gian tới.

Có tới 768.000 máy tính tại Việt Nam đã bị nhiễm rootkit (phần mềm độc hại chuyên dùng để che dấu sự tồn tại của virus), trong khi năm 2006 chỉ khoảng vài chục nghìn.

Virus phá hoại bùng phát trên diện rộng

Năm 2007, các virus phá hoại xuất hiện và bùng phát trên diện rộng. Trong khi đó năm 2006 không có nhiều virus phá hoại xuất hiện nên nhiều người đã mất cảnh

giác, nhầm tưởng virus chỉ “ trêu đùa” chứ không phá hoại. Tuy nhiên, kẻ xấu vẫn dùng nó với mục đích để phá hoại an ninh mạng.

Trung tuần tháng 7/2007, đã có tới 50.500 máy tính tại Việt Nam bị nhiễm virus W32.Ukuran.Worm (xuất xứ từ Indonesia), đã phá hủy toàn bộ các file dữ liệu .DBF,

.LDF, .MDF của FoxPro và SQL trên máy tính nạn nhân.

7

Thiệt hại do virus gây ra lớn hơn 2 nghìn tỷ đồng (trung bình khoảng 591.000 đồng /1PC). Trong khi đó ở nước ta có ít nhất 4 triệu PC đang được sử dụng thường xuyên trên cả nước

4.000.000 (PC) * 519.000 (vnđ) = 2.076.000.000.000 (vnđ)

Nếu nhìn dưới góc độ bảo vệ thì có thể kể ba nguyên nhân chính gây ra mất an

ninh mạng tại Việt Nam:

- Nhận thức chưa đúng và chưa đủ về bảo vệ thông tin

- Vấn đề thiếu đội ngũ chuyên gia bảo vệ hệ thống.

- Lỗi bảo vệ của các công ty cung cấp phần mềm và giải pháp.

Nhận thức về bảo vệ thông tin

Vấn đề nhận thức chưa đầy đủ hoặc nhận thức chưa đúng về bảo vệ thông tin có

ảnh hưởng lớn đến chính sách của bảo vệ thông tin. Đây là nguyên nhân cốt lõi nhất, bởi nhận thưc chưa đầy đủ, chưa đúng thì hệ thống sẽ không có được độ bảo vệ cao. Tuy nhiên có nhận thức được song lại đặt ra một chính sách sai lầm khi xây dựng hệ thống bảo vệ thì đó cũng là một hệ thống không an toàn.

Các công ty Việt Nam đang trong giai đoạn đầu trong việc tham gia vào mạng Internet. Do đó vấn đề an ninh mạng đã không được các công ty coi trọng, không có chính sách và kế hoạch rõ ràng về việc xây dựng hệ thống thông tin bảo vệ. Kết quả là máy chủ của nhiều công ty không chống đỡ được các cuộc tấn công của hacker, ngay cả các kiểu tấn công đơn giản nhất.

Mặt khác, tuy nhận thức được tầm quan trọng của các công tác an toàn thông tin song do không có chính sách an ninh đúng thì công tác này cũng không được đảm bảo thực sự. Đa số những người quản lý mạng nhận định việc mua các thiết bị và phần mềm và phần mềm hỗ trợ bảo vệ sẽ giúp dữ liệu của họ được an toàn. Việc công ty được trang bị các sản phẩm tường lửa, các thiết bị mạng đắt tiền (ví dụ như của hàng bảo vệ

nổi tiếng Cisco) không có nghĩa là tránh được hết các vụ tấn công không được lập trình có sẵn trong bộ nhớ. Ngoài ra, một số điều kiện trong chức năng lọc gói tin của các phần mềm đã được cấu hình không đúng dẫn đến việc kẻ tấn công có thể dễ dàng xâm nhập và vô hiệt hoá hệ thống bảo vệ.

8

Một nhận thức sai lầm nữa là các công ty xác định bảo vệ là trách nhiệm của cá nhân. Tuy nhiên đây không phải là trách nhiệm của một người, đó phải là trách nhiệm của cả một hệ thống, tập hợp nhiều mắt xích các phòng ban, nhân viên toàn công ty. Bất cứ nhân viên, bộ phận nào có tham gia vào hệ thống thông tin thì nhân viên, bộ phận đó phải có ý thức và có trách nhiệm đối với sự bảo vệ cuả hệ thống. Vì vậy nhận thức này phải được mọi thành viên trong hệ thống nhận rõ.

Tóm lại, nhận thức về bảo vệ thông tin là điều kiện hết sức quan trọng để có thể xây dựng hệ thống thông tin toàn vẹn, thực sự đảm bảo nhiệm vụ bảo vệ đạt hiệu quả cao nhất.

Thiếu chuyên gia bảo vệ hệ thống

Một trong những nguyên nhân trực tiếp là không có nhân viên chuyên trách bảo

vệ. Công việc của một quản trị mạng hiện nay phần lớn tập trung vào thiệt lập, quản trị và theo dõi hệ thống máy tính, hỗ trợ cho người dùng công ty, giao dịch với nhà cung cấp… việc kiêm nhiệm bảo vệ cho hệ thống là vượt quá khả năng của một nhà quản trị bình thường.

Có nhiều ý kiến cho rằng một nhà quản trị mạng phải kiêm nhiệm cả bảo vệ hệ thống. Tuy nhiên việc bảo vệ hệ thống rất nặng nề do hệ thống thông tin ngày càng phức tạp, tinh vi và cũng do tầm quan trọng của nó đối với những hoạt động của một công ty. Ngoài ra, kiến thức về bảo vệ cũng ngày một nhiều hơn, những mối đe dọa phá hoại thông tin ngày càng tăng, những lỗ hổng bảo vệ liên tục được tìm thấy, một nhà quản trị kiêm nhiệm vai trò chuyên gia bảo vệ hệ thống thì trách nhiệm của nặng nề.

Điều này kéo theo tính bảo vệ của hệ thống không cao, an toàn hệ thống không được đảm bảo. Như vậy, vấn đề có nhân viên chuyên trách vai trò của một chuyên gia bảo vệ trong hệ thống nhằm chuyên môn hoá việc bảo vệ ở các công ty là hết sức cân thiết. Tất nhiên, các nhân viên này cần phải được huấn luyện, đào tạo sâu về bảo vệ thì mới đảm nhiệm được vai trò khó khăn, đòi hỏi nhiều kiến thức và kinh nghiệm này.

Lỗi bảo vệ gốc.

Một hệ quả quan trọng dẫn đến thực trạng bảo vệ kém của công ty còn từ phía

nhà cung cấp giải pháp và sản phẩm cho công ty.

Ví dụ: Công ty A tốn khá nhiều chi phí thuê viết phần mềm kế toán nhằm phát triển hệ thống kế toán của họ. Để đảm bảo an toàn thông tin, những ai có mật khẩu mới được sử dụng và khai thác thông tin từ chương trình này.

9

Tuy nhiên, thực tế kiểm tra lỗ hổng chương trình cho thấy nó được viết bằng ngôn ngữ Visual Basic 6.0 với tất cả mật khẩu đều được lưu trong một tập tin định dạng trong văn bản trơn (plain text) mà bất cứ một ai chịu khó tìm hiểu một chút đều có thể dễ dàng biết được tất cả các mật khẩu chương trình mà nó chứa đựng.

Như vậy, bảo vệ thông tin là một chuỗi mắt xích liên tục từ phía các nhà sản xuất đến việc được sử dụng trong công ty. Nhưng hơn hết là từ phía công ty bán sản phẩm, họ phải có giải pháp bảo vệ và chuyên nghiệp hoá bảo vệ. Các lập trình viên của họ phải được cập nhật các lỗi bảo vệ, cách viết chương trình an toàn. Những nhân viên bảo vệ thông tin trong các công ty phần mềm phải chịu trách nhiệm đưa ra các yêu cầu về bảo vệ thông tin ngay từ khâu thiết kế, truyền đạt cho các lập trình viên về cách viết mã nguồn bảo vệ thông tin cho chương trình, kiểm tra, phát hiện lỗi trong quá trình

kiểm nghiệm. Ngoài ra phải tiếp tục hỗ trợ người dùng sau khi phần mềm được chuyển giao bao gồm các hướng dẫn cài đặt, sử dụng, đưa ra các bản sửa lỗi bảo vệ nếu có trong lúc sử dụng…

Phía công ty sử dụng nên có các chính sách bảo vệ (security policy) trong đó quy

định rõ về việc mua các sản phẩm, giải pháp…để tìm đối tác cung cấp thích hợp. Việc không có những chính sách bảo vệ này cũng là một nguyên nhân dẫn đến sự bảo vệ kém của công ty.

Tóm lại thực trạng bảo vệ kém hiện nay ở các công ty là rất rõ ràng, với vô vàn những nguyên nhân, đáng kể nhất là do ba nguyên nhân đã nói ở trên. Đây là vấn đề quan trọng của công nghệ thông tin Việt Nam hiện nay, việc chưa được quan tâm, chưa có ý thức đầu tư xây dựng hệ thống theo định hướng bảo vệ vẫn còn tồn tại trong rất nhiều những tổ chức, công ty lớn. Thực hiện việc xây dựng công nghệ thông tin theo định hướng bảo vệ thông tin là điều hết sức cần thiết.

10

1.2. NGUYÊN NHÂN KỸ THUẬT GÂY MẤT AN TOÀN MẠNG

1.2.1 Nguyên nhân có sẵn trong hệ thống

1.2.1.1 Các lỗi phần mềm

Lỗi phần mềm được phân ra thành các loại:

Lỗi tràn bộ đệm (buffer overflows)

Lỗi do lập trình không kiểm tra độ dài của dữ liệu nhập vào các biến dẫn tới bộ đệm tràn. Khi hacker cố tình đưa ra các giá trị lớn hơn vào các biến này, phần dữ liệu chứa các mã lệnh tấn công của hacker sẽ tràn sang phần mã của một tiến trình khác

đang chạy với đặc quyền cao sẽ chiếm quyền quản trị hệ thống.

Lỗi do tập hợp các lệnh điều khiển không lường trước được

Các chương trình thường được xây dựng trên nhiều lớp mã, trong đó lớp mã thấp nhất là hệ điều hành. Các hacker có thể gửi đến các ứng dụng bị lỗi các lớp dữ liệu có thể không hợp lệ với lớp mã này nhưng là câu lệnh điều khiển với lớp mã khác.

Lỗi xử lý hợp lệ đầu vào

Đa số các chương trình đều có phần xử lý hợp lệ dữ liệu vào, nhưng sẽ có lỗi

nếu có người nào đó nhập vào dữ liệu không đúng với đặc tả của dữ liệu được quy định bởi chương trình.

Lỗi do các điều kiện tranh chấp

Thường xảy ra trên các hệ thống đa tiến trình /đa luồng khi có nhiều hơn một tiến

trình xử lý một tài nguyên hệ thống dẫn đến xảy ra tranh chấp.

1.2.1.2. Lỗi cấu hình hệ thống

Sử dụng cấu hình hệ thống mặc định là một sơ hở

Một số hệ thống sử dụng cấu hình mặc định cho dễ sử dụng, do đó hệ thống có

tính an toàn không cao, tạo điều kiện cho sự xâm nhập dễ dàng.

Vô hình tạo ra các lỗ hổng

Một số chương trình được cấu hình để chạy trong chế độ không bảo vệ, và như vậy vô tình tạo ra các lỗ hổng trên máy tính. Cần gỡ bỏ các phần mềm không sử dụng và tắt những dịch vụ không cần thiết trên máy tính để loại bỏ mọi lỗ hổng ngẫu nhiên vô tình xuất hiện.

11

Điểm yếu do quá tin tưởng vào các quan hệ tin cậy (trust relationships)

Hacker có thể thâm nhập vào một hệ thống yếu sau đó dùng mối quan hệ tin cậy của hệ thống này vươn tới một hệ thống bảo vệ cao hơn (do có mối quan hệ tin cậy giữa hai hệ thống này nên sẽ không có nhiều thủ tục xác nhận người dùng) để tấn công hệ

thống đó.

1.2.1.3. Các điểm yếu trong phần mềm hệ thống

Điểm yếu trong giao thức TCP/IP

Giao thức TCP/IP được ra đời sớm, khi hacker không có nhiều kinh nghiệm tấn

công với quy mô lớn như ngày nay, kết quả là nó có nhiều điểm yếu trong thiết kế mà có thể dẫn đến các vấn đề bảo vệ.

Điểm yếu trong thiết kế UNIX

Có một số điểm yếu cố hữu trong hệ điều hành UNIX thường xuyên dẫn đến các

xâm nhập trái phép.

Điểm yếu trong thiết kế mạng WLAN

Chuẩn wifi được dùng phổ biến cho mạng WLAN, do công nghệ chưa hoàn thiện

nên bảo vệ của mạng WLAN vẫn chỉ ở mức độ nhất định.

Thiết bị dùng chung (share medium)

Với mạng ethernet truyền thông dùng hub thì việc nghe lén đơn giản chỉ cần một

chương trình Sniffer trên một máy trên mạng.

1.2.2 Nguyên nhân cố ý

1.2.2.1. Bẻ khóa mật khấu

Bẻ khóa mật khẩu kiểu tấn công từ điển

Sử dụng một danh sách các mẫu tự, chữ số và ký hiệu mà người dùng thường dùng để đặt mật khẩu. Phương pháp này dựa trên tốc độ và mẹo sắp xếp các từ một cách khôn ngoan để thử lần lượt từng từ với tốc độ cao cho đến khi tìm thấy từ hay tập ký hiệu trùng với mật khẩu.

12

Bẻ khóa mật khẩu bằng cách thử hàng loạt

Phương pháp này dựa trên năng lực tính toán và sự lặp lại được gọi là thử hàng loạt. Thử hàng loạt là dạng bẻ mật khẩu dựa trên so sánh mọi khả năng tổ hợp và hoán vị có thể có của các ký tự sẵn có đến khi tìm thấy mật khẩu. Phương pháp này rất mạnh

và chắc chắn cuối cùng sẽ tìm thấy mật khẩu, tuy nhiên tốc độ cực kỳ chậm do phải thử tất cẩ mọi tổ hợp ký tự có thể có.

1.2.2.2. Nghe lén lưu thông trên mạng

Nghe lén Server (server Sniffing)

Nếu trong mạng ethernet dùng switch có thể cài đặt được một chương trình nghe lén trên máy chủ (đặc biệt là trên một thiết bị như rounter), thì có thể nghe lén được tất cả thông tin lưu thông trên mạng.

Nghe lén từ xa (remote sniffing)

Có nhiều thiết bị trên mạng có khả năng RMON (Remote Network Monitoring)

với những xâu community public có thể dùng để theo dõi các thông tin từ xa.

1.2.2.3. Các kỹ thuật khai thác lỗ hổng bảo vệ

Khai thác lỗi Script CGI

Các Script CGI có mức độ an toàn rất thấp. Các lỗ hổng bảo vệ điển hình bao gồm đầu vào lỗi kết thúc trực tiếp đến shell lệnh sử dụng cá siêu ký tự của shell, sử

dụng các biến ẩn chỉ ra tên file nào đó của hệ thống, và còn tiết lộ thông tin về hệ thống webserver NCSA httpd, nó được sử dụng để xử lý các HTML, nhưng nó có thể được khai thác để trả lại một file nào đó. Các script CGI được biết đến mà một hacker có thể dùng để khai thác là TextCounter, GuestBook, EWS, info2www, Count.cgi, handler, webdist.cgi…

Tấn công web server

Trong web server tồn tại một số lỗ hổng như tràn bộ đệm trong trong trường

Request hoặc các trường khác của giao thức HTTP/1.0. Bản thân web server thường có các lỗi liên quan đến sự tương tác của chúng dưới hệ điều hành.

Tấn công web browser

Các phần mềm web brower của Microsoft hay của Netcape có chứa các lỗi bảo

vệ liên quan tới xử lý URL, HTTP, HTML, JavaScript, Frames, Java, ActiveX.

13

SendMail với SMTP

SendMail là một chương trình được sử dụng rộng rãi và rất phức tạp, nên nó thường xuyên có các lỗ hổng bảo vệ. Trước đây hacker dựa vào lỗ hổng trong lệnh DEBUG hoặc đặc trưng ẩn để tấn công trong SMTP. Gần đây chúng có thể bị khai thác

lỗi tràn bộ đệm.

IP Spoofing (giả mạo gói tin IP)

Smurf: là dạng tấn công DoS tận dụng directed broadcast, gửi gói dữ liệu ICMPECHO giả đến địa chỉ broadcast của mạng khuyếch đại với địa chỉ nguồn là máy tính nạn nhân, sau đó mọi máy tính trong mạng khuyếch đại cùng gửi gói trả lời đến máy nạn nhân gây ra từ chối dịch vụ.

Fraggle: về cơ bản giông như tấn công smurf nhưng dù gói UDP gửi đến cổng 7

(echo) thay cho ICMP, và các hệ thống kích hoạt echo sẽ đáp trả lại.

Tấn công tràn bộ đệm

Ngoài việc sử dụng tấn công tràn bộ đệm do lỗi chương trình, kẻ tấn công có thể

dùng một số hình thức tấn công tràn bộ đệm khác như:

DNS overflow: khi một tên DNS dài quá mức được gửi đến 1 server. Các tên

DNS hạn chế đến 64byte/thành phần con và tổng cộng toàn bộ là 256 byte .

Statd overflow: xảy ra khi có một tên file dài quá mức được cung cấp.

1.3. MỘT SỐ DẠNG TẤN CÔNG VÀO HỆ THỐNG THÔNG TIN

Bước 1: Tìm dấu vết (FootPrinting)

Đây là cách hacker làm khi muốn lấy một lượng thông tin về máy chủ của người

dùng. Các thông tin bao gồm địa chỉ IP, tên người dùng, DNS…. là những thông tin chính thức có liên quan đến mục tiêu. Trong nhiều trường hợp, hacker có thể sử dụng các công cụ tìm kiếm trên mạng để tìm thông tin đó.

Bước 2: Quét tìm thông tin (Scanning)

Khi đã có những thông tin đó rối, tiếp đến là đánh giá và định danh những dịch vị mà mục tiêu có. Việc này bao gồm: quét cổng, xác định hệ điều hành, banner của máy chu dịch vụ, quét ICMP, dò vết email, Ping ….Các công cụ được sử dụng ở đây có thể là nmap, WS pingPro…

14

Bước 3: Liệt kê thông tin (Enumeration)

Bước thứ ba bây giờ là tìm kiếm những tài nguyên được bảo vệ kém, tài khoản người dùng mà có thể sử dụng để xâm nhập, nó bao gồm các mật khẩu mặc định, các script và các dịch vụ mặc định. Rất nhiều nhà quản trị mạng không biết đến hoặc không

sửa đổi lại giá trị này.

Bước 4: Giành quyền truy cập (Gaining Access)

Bây giờ hacker sẽ tìm cách truy cập vào mạng bằng những thông tin có được từ ba bước trên. Phương pháp được sử dụng ở đây có thể là tấn công vào lỗi tràn bộ đệm, lấy và giải mã password. Các công cụ thường dùng là: NAT, podium, lopht…

Bước 5 : Leo thang đặc quyền (Escalating Privileges)

Đầu tiên, hacker xâm nhập vào hệ thống với tài khoản guest do nhiều hệ thống

ngầm định có tài khoản guest theo mật khẩu là guest với quyền rất thấp. Sau đó, hacker sẽ tìm cách chiếm mật khẩu của người quản trị, hoặc sử dụng lỗi hổng hệ thống để làm tăng đặc quyền của mình nhằm kiểm soát toàn bộ hệ thống.

Bước 6: Đánh cắp thông tin, sửa đổi, phá hoại

Tới lúc này hacker đã gần như làm chủ hệ thống, các dữ liệu, thông tin quý, các

file text chứa mật khẩu là những thứ mà hacker có thể lấy đi.

Bước 7: Xóa dấu vết (Convering Tracks)

Sau khi đã có những thông tin cần thiết, hacker tìm cách xóa dấu vết, xóa các file nhật ký của hệ điều hành làm cho người quản lý không nhận ra hệ thống đã bị xâm nhập hoặc có biết cũng không tìm ra kẻ xâm hại.

Bước 8: Tạo cửa sau (Creating BackDoor)

Hacker để lại cửa sau, là cơ chế cho phép hacker truy cập trở lại bằng con đường bảo vệ không phải tốn nhiều công sức, bằng việc cài đặt Trojan hay tạo ra một người sử dụng mới.

Bước 9: Tấn công từ chối dịch vụ (Denial of Server –DoS)

Nếu không thành công trong việc xâm nhập, thì DoS là phương tiện cuối cùng để tấn công vào hệ thống. Với một hệ thống không được cấu hình đúng đắn, nó sẽ bị phá vỡ và cho phép hacker truy cập. Hoặc trong trường hợp khác thì DoS sẽ làm cho hệ thống không hoạt động được nữa.

15

Chương 2. VIRUS TIN HỌC

Để diệt được virus tin học thì trước hết phải hiểu rõ bản chất của chúng. Về nguyên tắc chung, công việc diệt virus tin học đa phần là làm ngược lại những gì mà virus đã làm. Vì vậy, chương này tập trung nghiên cứu những nội dung liên quan đển cơ chế hoạt động của virus để làm rõ bản chất của virus tin học. Từ đó có thể xây dựng chương trình tìm và diệt virus.

2.1. GIỚI THIỆU VỀ VIRUS TIN HỌC

2.1.1. Khái niệm

Virus máy tính nói chung là một chương trình máy tính được thiết kế dưới dạng một trò chơi khăm, hoặc một sự phá hoại ngầm, có thể tự lây lan bằng cách gắn vào các chương trình khác và tiến hành các thao tác vô ích, vô nghĩa, đôi khi là thao tác phá hoại. Khi một virus nhiễm vào đĩa, nó tự lây lan bằng cách gắn vào các chương trình

khác trong hệ thống, kể cả phần mềm hệ thống. Giống như virus ở người, tác hại của virus máy tính có thể chưa phát hiện được trong thời gian vài ngày hay vài tuần. Trong thời gian đó mọi đĩa (có thể ghi) đưa vào hệ máy đều mang theo một bản sao ẩn của virus đó - các đĩa này đều bị nhiễm virus.

Khi virus phát tác, chúng gây ra nhiều hậu quả: từ những thông báo bậy bạ đến những tác động làm lệch lạc khả năng thực hiện của phần mềm hệ thống, hoặc xóa sạch mọi thông tin trên đĩa cứng.

2.1.2. Các tính chất của Virus máy tính

 Tính lây lan: đây là tính chất quan trọng nhất đối với tất cả các loại virus. Khả năng lây lan thể hiện sức mạnh của virus. Đây là điểm phân biệt virus với một số chương trình “xấu” khác cũng có khả năng phá hoại dữ liệu và máy tính nhưng không tự lây lan được.

 Tính ẩn: tính chất này làm cho virus tránh được sự phát hiện của các chương trình anti-virus và tăng tốc độ lây nhiễm, đảm bảo sự tồn tại của nó. Virus có thể giảm tối đa kích thước của mình bằng cách tối ưu hoá mã lệnh của nó hoặc sử dụng một số giải thuật tự nén và giải nén. Tuy nhiên, điều này cũng có nghĩa là virus phải giảm độ phức tạp của nó, dễ dàng cho các lập trình viên phân tích mã

lệnh.

16

 Tính phá hoại: tính chất này có thể không có ở một số loại virus vì đơn giản chúng chỉ được viết ra để “thư giản” hoặc kiểm nghiệm khả năng lây lan mà thôi.

Tuy nhiên, nhiều loại virus có khả năng phá hoại rất cao.

2.1.3. Lịch sử phát triển của virus tin học

Virus máy tính có một quá trình phát triển khá dài, nó luôn song hành cùng những chiếc máy tính. Khi mà công nghệ phần mềm cũng như phần cứng phát triển thì virus máy tính cũng phát triển theo. Hệ điều hành thay đổi thì virus máy tính cũng tự thay đổi mình để phù hợp với hệ điều hành đó.

Có nhiều tài liệu khác nhau nói về xuất xứ của virus máy tính [1,2,3,4]. Tuy nhiên, đa số các tài liệu nói về xuất xứ của virus máy tính đều liên quan đến sự kiện trò chơi Core War.

1983 – Nguyên lý của trò chơi Core War

Core War là một cuộc đấu trí giữa hai đoạn chương trình máy tính do hai lập trình viên viết ra. Mỗi đấu thủ sẽ đưa một chương trình có khả năng tự tái tạo gọi là Orgnaism vào bộ nhớ máy tính. Khi bắt đầu cuộc chơi, mỗi đấu thủ sẽ cố gắng phá hủy Organism của đối phương và tái tạo Organism của mình. Đấu thủ thắng cuộc là đấu thủ tự nhân bản được nhiều nhất.

Trò chơi Core War được giữ kín đến năm 1983, Ken Thompson người đã viết phiên bản đầu tiên cho hệ điều hành UNIX, đã để lộ ra khi nhận một trong những giải thưởng danh dự của giới điện toán- giải thưởng A.M Turing. Trong bài diễn văn của mình ông đã đưa ra một ý tưởng về virus máy tính dựa trên trò chơi core war. Cũng năm 1983, tiến sỹ Frederik Cohen đã chứng minh được sự tồn tại của virus máy tính.

Tháng 5 năm 1984 tờ báo Scientific America có đăng mô tả về “core war” và cung cấp cho độc giả nhưng thông tin hướng dẫn về trò chơi này, kể từ đó virus máy tính xuất hiện và đi kèm theo nó là cuộc chiến giữa những viết ra virus và những người diệt virus.

1986 – Virus Brain

Có thể coi đây là virus máy tính đầu tiên trên thế giới, Brain bí mật thâm nhập từ Pakistan vào nước Mỹ với mục tiêu đầu tiên là trường đại học Delaware. Một nơi khác trên thế giới cũng đã mô tả sự xuất hiện của virus, đó là trường đại học Hebrew – Israel.

17

1987 – Virus Lehigh

Lehigh là tên của virus xuất hiện năm 1987 tại trường đại học cùng tên. Trong thời gian này cũng có một số virus khác xuất hiện, đặc biệt là WORM virus (sâu virus), cơn ác mộng với các hệ thống máy chủ xuất hiện. Virus Jerusalem đã gây thiệt hại cho

công ty IBM với tốc độ lây lan đáng nể: 500000 nhân bản trong 1 giờ.

1988 – Virus lây lan trên mạng

Ngày 2/11/1988, Robert Morris đưa virus vào mạng máy tính quan trọng nhất của Mỹ, gây thiệt hại lớn. Từ đó trở đi người ta bắt đầu thấy được tính nguy hại của virus máy tính.

1989 – AIDS Trojan

Xuất hiện Trojan hay còn gọi là “con ngựa thành Tơ – roa ”, chúng không phải là

virus máy tính, nhưng luôn đi cùng với khái niệm virus. Những con Trojan này khi đã gắn vào máy tính thì nó sẽ lấy cắp một số thông tin vệ trên đó và gửi đến một địa chỉ mà chủ của chú ngựa này muốn vận chuyển đến, hoặc đơn giản chỉ là phá hủy dữ liệu trên máy tính đó.

1991 – Virus Tequila

Đây là loại virus đầu tiên mà thế giới chuyên môn gọi là virus đa hình. Đây thực sự là loại virus gây đau đầu cho những người diệt virus và quả thật không dễ dàng gì để

diệt chúng. Chúng có khả năng tự thay đổi hình dạng sau mỗi lần lây nhiễm, làm cho việc phát hiện ra chúng rất khó khăn.

1992- Virus Michelangelo

Tiếp nối sự ra đời của virus đa hình năm 1991, trong năm, 1992 sức mạnh cho các loại virus máy tính tăng nhanh chóng mặt, những người viết virus đã tạo ra sự đa hình cực phức tạp cho mỗi virus.

1995 – Virus Concept

Sau gần 10 năm kể từ ngày virus máy tính đầu tiên xuất hiện, đây là loại virus

đầu tiên có nguyên lý hoạt động gần như thay đổi hoàn toàn so với virus trước đây.

Sau này những virus theo nguyên lý của virus Concept được gọi chung là macro, chúng tấn công vào các hệ soạn thảo văn bản của Microsoft (Word, Excel, Powerpoint)

.

18

1996 – Virus Boza

Khi hãng Microsoft chuyển sang hệ điều hành Window95 và họ cho rằng virus không thể tấn công được, thì năm 1996 xuất hiện virus Boza lây nhiễm được trên hệ điều hành Windows.

1999 – Virus Melissa, Bubbleboy

Một bước phát triển mới của virus, sâu Mellisa không những kết hợp các tính năng của sâu Internet và virus marco mà nó còn khai thác được một công cụ thường sử dụng hàng ngày là Microsoft Outlook Express. Khi một máy tính bị nhiễm sâu Mellisa, nó sẽ tự phát tán mình đi mà chủ nhân máy tính không hề hay biết.

Trong bốn ngày, sâu Mellisa đã lây nhiễm 250 ngàn máy tính trên thế giới thông qua Internet, trong đó có Việt Nam, gây thiệt hại hàng trăm triệu USD. Sâu Mellisa đã chứng minh Internet là một phương tiện hữu hiệu để virus máy tính có thể lây lan trên toàn cầu trong vài tiếng đồng hồ.

Năm 1999, ngoài sâu Mellisa, virus Chernobyl hay còn gọi là CIH đã phá hủy dữ

liệu của hàng triệu máy tính trên thế giới, gây thiệt hại gân 1 tỷ USD vào ngày 26/4.

Năm 2000 – Virus Dos, Love Letter

Có thể coi đây là vụ việc virus phá hoại lớn nhất từ trước tới nay, Love Letter có xuất xứ từ Philippines do một sinh viên nước này tạo ra, chỉ trong vòng sáu tiếng đồng

hồ đã lây nhiễm tới 20 nước trên thế giới trong đó có Việt Nam, lây nhiễm 55 triệu máy tính gây thiệt hại 8,7 tỷ USD.

Còn Dos (Denial of Service), những virus này phát tán đi khắp nơi, nằm vùng ở

những nơi nó lây nhiễm. Cuối cùng chúng đồng loạt tấn công theo kiểu từ chối dịch vụ (Denial of Service – yêu cầu liên tục, từ nhiều máy tính đồng thời, làm cho các máy chủ bị tấn công không thể phục vụ được nữa và dẫn đến từ chối các yêu cầu mới) vào các hệ thống máy chủ khi người điều hành nó ra lệnh, hoặc vào cùng một thời điểm định trước. Một hệ thống điện thoại của Tây Ban Nha là nơi bị tấn công đầu tiên.

19

2001 – Virus Winux Windows/Linux, Nimda, Code Red

Winux Windows/Linux virus đánh dấu những virus có thể lây được trên hệ điều

hành Linux.

Nimda, Code Red là những virus tấn công các đối tượng của nó bằng nhiều con đường khác nhau (từ máy chủ sang máy chủ hoặc từ máy chủ sang máy trạm…), cho đến tháng 9/2002 ở Việt Nam vẫn còn những cơ quan với mạng máy tính có hàng trăm máy tính vẫn bị nhiễm virus Nimda. Chúng chỉ ra một xu hướng mới của các loại virus máy tính là tất cả trong một, trong một virus bao gồm nhiều virus.

2002 – Sự đời của hàng loạt loại virus mới

Tháng 1/2002, virus lây nhiễm những file .SWF. Tháng 3/2002 sâu SharpA (viết bằng ngôn ngữ C# ra đời). Tháng 5/2002 SQLSpider ra đời và chúng tấn công các chương trình dùng SQL. Perrun lây những file ảnh .JPEG. Scalper tấn công các FreeBSD/Apache Web server.

2.1.4. Sự nguy hiểm của virus tin học

Virus tin học tuy chỉ là một đoạn mã nhỏ nhưng cũng đủ nguy hiểm cho bất kỳ

hệ thống máy tính nào bị lây nhiễm. Chúng có thể phá hủy toàn bộ dữ liệu trên đĩa cứng, phá hỏng ROM-BIOS hoặc là làm tê liệt cả một hệ thống mạng máy tính.

Tuy nhiên, không phải tất cả các virus đều nguy hiểm ví dụ có những loại virus chỉ

đưa ra những câu chào đùa hay tự chúc mừng mình…Tuy nhiên, sự có mặt của những virus kiểu này cũng làm giảm độ tin cậy, tốn bộ nhớ, ảnh hưởng đến tốc độ làm việc của hệ thống.

2.1.5. Tên của virus

Tên của virus nói chung thường được đặt bởi nhà nghiên cứu đầu tiên gặp virus đó. Vấn đề là nhiều nhà nghiên cứu có thể cùng gặp những virus mới giống nhau nhưng cách đặt tên của mỗi người thì lại khác nhau.

Việc các công ty phần mềm an ninh cạnh tranh nhau để được là đơn vị đầu tiên đặt tên cho một loại virus mới đã dẫn đến tình trạng phổ biến hiện nay, virus thường được gọi bằng nhiều danh tính khác nhau.

Bất đồng về tên và cách đặt tên những loại virus đã tạo ra những điều khó hiểu trong lĩnh vực này, từ đó dẫn đến những khó khăn trong biện pháp đối phó và góp phần giúp cho virus dễ dàng phát tán. Đây cũng là chủ đề được đưa ra thảo luận tại hội nghị toàn cầu về chống virus (Virus Bulletin 2003) tổ chức tại Toronto-Canada cuối tháng 9/2003.

20

Vào đầu thập kỷ 1990 đã có một hệ thống quy ước cách đặt tên do Tổ chức nghiên cứu virus máy tính (CARO) đề xuất. Chính thức được đưa ra năm 1991 và thỉnh thoảng được bổ sung thêm vào, hệ thống này đã đề ra những nguyên tắc về những gì có thể và không thể sử dụng trong việc đặt tên cho virus, đồng thời thiết lập một hệ thống các đặc trưng của virus như mức độ nguy hiểm, nền bị tác động, họ hàng của nó… Nick Fitzgerald, đại diện của CARO, khi phát biểu về hệ thống đặt tên hiện nay cho biết những nguyên tắc của họ vẫn có hiệu lực.

Kiểu đặt tên mang tính kỹ thuật thì quan trọng đối với các chuyên gia virus, họ có thể biết được con virus đó thuộc loại nào, phiên bản thứ mấy,… thông qua tên gọi của virus. Những điều đó lại không qua trọng với hầu hết những người sử dụng máy tính, những người thường có xu hướng nhớ tên virus như: I Love You và Mellisa (nhớ

tên theo những sự kiện) thay vì VBS.LoveLetter.A và W97.Mellisa.A. Tóm lại: bất đồng trong việc đặt tên cho virus của những nhà nghiên cứu hay công ty phần mềm an ninh mạng tạo ra cho virus cùng loại nhiều tên khác nhau. Điều đó tạo ra sự lẫn lộn cho mọi người nhưng đối với phần mềm diệt virus chỉ xem xét những đặc điểm, dấu hiệu nhận biết của virus mà không hề quan tâm đến tên của chúng trong việc diệt virus.

2.2. CÁC LOẠI VIRUS TIN HỌC

2.2.1. Phân loại virus tin học

Một cách tương đối, Virus tin học được chia ra thanh năm loại [1]:

Loại 1:Virus Boot (B-Virus)

Vì môi trường lây nhiễm của chúng ở trên Boot Record của đĩa mềm và Master

Boot Record hoặc Boot Record của đĩa cứng, vùng chứa một đoạn mã dùng để khởi động máy tính. Virus loại này được kích hoạt mỗi khi máy tính khởi động từ một đĩa từ bị nhiễm chúng. Khi được đánh thức dậy thì chúng sẽ tiến hành thường trú trong bộ nhớ, lặng lẽ chờ cơ hội lây lan sang các đĩa khác thông qua quá trình truy nhập đĩa.

Loại 2: Virus File(F-Virus)

Thường lây nhiễm các file khả thi .EXE, .COM, .DLL, .BIN, .SYS....Loại virus này hoạt động khi các file khả thi bị nhiễm virus được thi hành và ngay lập tức chúng sẽ tìm cách lây nhiễm hoặc tiến hành thường trú trong bộ nhớ và chờ cơ hội lây nhiễm

sang các file khả thi khác.

21

Loại 3: Virus Marco

Loại này khác với loại virus F-Virus truyền thống ở chỗ đối tượng lây nhiễm của chúng không phải là chương trình khả thi mà là các file văn bản, bảng tính…của các phần mềm ứng dụng có trang bị ngôn ngữ marco phức tạp tạo ra như Microsoft Excel

nằm trong bộ phần mềm Office của hãng Microsoft. Khi các tập tin văn bản (hoặc các tập tin Excel) này được xử lý bởi Microsoft Word (hoặc Microsoft Excel), Marco Virus sẽ được kích hoạt, tìm cách lây lan sang các file Word, Excel khác.

Loại 4: ngựa Troa (Trojan Horses)

Thuật ngữ này dựa vào một điển tích cổ, đó là cuộc chiến giữa người Hy Lạp và người thành Tơ-roa. Thành Tơ-roa là một thành trì kiên cố, quân Hy Lạp không sao có thể đột nhập vào được. Người ta đã nghĩ ra một kế, giả vờ giảng hoà, sau đó tặng thành

Tơ-roa một con ngựa gỗ khổng lồ. Sau khi ngựa được đưa vào trong thành, đêm xuống những quân lính từ trong bụng ngựa xông ra và đánh chiếm thành từ bên trong

Phương pháp trên cũng chính là cách mà các Trojan máy tính áp dụng. Đầu tiên hacker bằng cách nào đó lừa cho nạn nhân sử dụng chương trình của mình. Khi chương

trình này chạy thì vẻ bề ngoài cũng giống như những chương trình bình thường. Tuy nhiên, song song với quá trình đó, một phần của Trojan sẽ bí mật cài lên máy nạn nhân. Đến một thời điểm định trước nào đó chương trình này thực hiện việc xóa dữ liệu, hay gửi những thông điệp mà hacker muốn lấy đến một địa chỉ đã định trước ở trên mạng.

Khác với virus, Trojan là một đoạn mã chương trình hoàn toàn không có tính chất lây lan. Nó chỉ có thể được cài đặt khi được kích hoạt và lây nhiễm được sang máy tính khác khi có người cố ý gửi đi, còn virus thì tự động tìm kiếm nạn nhân để lây lan.

Thông thường các phần mềm có chứa Trojan được phân phối như là các phần

mềm tiện ích, phần mềm mới hấp dẫn, nhằm dễ thu hút người sử dụng.

Bên cạnh các Trojan ăn cắp thông tin truyền thống, một số khái niệm mới cũng

được sử dụng để đặt tên cho các trojan mang tính chất riêng biệt như sau:

BackDoor: Loại trojan sau khi đã cài đặt vào máy nạn nhân sẽ tự mở ra một cổng dịch vụ cho phép kẻ tấn công (hacker) có thể kết nối từ xa tới máy nạn nhân, từ đó nó sẽ

nhận lệnh và thực hiện lệnh mà kẻ tấn công đưa ra.

22

Phần mềm quảng cáo bất hợp pháp - Adware và phần mềm gián điệp - Spyware: Gây khó chịu cho người sử dụng khi chúng cố tình thay đổi trang web mặc định (home page), các trang tìm kiếm mặc định (search page)..hay liên tục tự động hiện ra (pop up) các trang web quảng cáo khi bạn đang duyệt web. Chúng thường bí mật xâm nhập vào máy của bạn khi bạn vô tình “ghé thăm” những trang web có nội dung không lành mạnh, các trang web bẻ khóa phần mềm…hoặc đi theo các phần mềm miễn phí không đáng tin cậy, các phần mềm bẻ khóa (crack, keygen).

Loại 5: Sâu Internet (Internet Worm)

Sâu Internet là một bước tiến đáng kể của virus. Sâu Internet kết hợp cả sự phá hoại của virus, sự bí mật của Trojan và việc lây lan nhanh chóng qua đường mạng Internet. Với tốc độ lây lan nhanh chóng chúng đã làm tê liệt hàng loạt các hệ thống máy chủ, làm đường truyền trên mạng quá tải.

Sâu Internet thường được tán phát bằng cách tìm các địa chỉ trong sổ địa chỉ (Address book) của máy mà nó đang lây nhiễm, ở đó thường là địa chỉ của người thân, khách hàng…Tiếp đến, nó tự gửi bản sao của nó cho những địa chỉ mà nó tìm thấy, địa chỉ người gửi thường là chủ nhân của máy tính đó. Điều nguy hiểm là những việc này diễn ra mà người sử dụng không hề hay biết, chỉ nhận được thông báo là đã gửi virus cho người khác thì mới biết rằng máy tính của mình bị nhiễm virus. Với cách hoàn toàn

tương tự trên những máy tính nạn nhân, sâu Internet có thể nhanh chóng lây lan trên toàn cầu theo cấp số nhân, điều đó giải thích tại sao chỉ trong vòng vài tiếng đông hồ mà sâu Mellisa và sâu Love Letter lại có thể lây lan tới hàng chục triệu máy tính trên toàn cầu. Cái tên sâu Internet thể hiện việc những con sâu có thể “bò” từ máy tính này qua máy tính khác trên các cành cây Internet

Với sự lây lan nhanh và rộng lớn như vậy, sâu Internet thường được kẻ viết ra chúng cài thêm nhiều tính năng đặc biệt, chẳng hạn như chúng có thể định cùng một ngày giờ và đồng loạt từ các máy tính nạn nhân tấn công vào một địa chỉ nào đó, rất khó để chống đỡ và khắc phục được hậu quả của những cuộc tấn công như vậy. Ngoài ra, những con sâu Internet còn có thể cho phép chủ nhân của chúng truy cập vào máy tính của nạn nhân và làm mọi thứ như ngồi trên máy tính đó một cách hợp pháp.

23

Khái niệm Sâu Internet còn bao gồm các virus lây lan qua mạng chia sẻ ngang hàng peer to peer, các virus lây lan qua các dịch vụ chatting và đặc biệt là các virus khai thác các lỗ hổng phần mềm để lây lan. Các phần mềm (nhất là hệ điều hành và các dịch vụ trên đó) luôn chứa đựng những lỗi tiềm tàng (ví dụ: lỗi tràn bộ đệm…) mà không phải lúc nào cũng có thể dễ dàng phát hiện ra. Khi một lỗ hổng phần mềm được phát hiện, không lâu sau đó sẽ xuất hiện các virus có khả năng khai thác các lỗ hổng này để lây nhiễm lên các máy tính từ xa một cách âm thầm mà người chủ máy hoàn toàn không hay biết. Từ các máy này, Worm sẽ tiếp tục “bò” qua các máy tính khác trên mạng Internet với một

cách thức tương tự.

Phân loại virus sẽ cung cấp cho chúng ta một cách nhìn nhận đúng đắn về virus

máy tính, để từ đó xây dựng phương pháp hữu hiệu ngăn chặn chúng.

2.2.2. Boot Virus

2.2.2.1. Phương pháp lây lan

Sau quá trình POST (Power On Self Test – Tự kiểm tra khi khởi động) sector đầu tiên trên đĩa khởi động được đọc vào bộ nhớ tại địa chỉ 0:07C00h, một tác vụ kiểm

tra xem có phải là phần Boot hợp lệ không bằng cách kiểm tra mã nhận dạng 0AA55h tại cuối sector. Tuy nhiên việc kiểm tra này không tránh khỏi sơ hở nếu ai đó thay đoạn mã Boot bằng một chương trình khác với ý đồ xấu. Và đây cũng chính là cách lây lan của một B- Virus.

Đối với đĩa mềm, sector đầu tiên luôn là Boot sector, do đó việc lây lan chỉ đơn

giản là tiến hành thay thế sector này bằng mã của virus.

Đối với đĩa cứng có chia Partition, việc lây lan lại phức tạp hơn vì đầu tiên Master Boot sector được đọc vào, sau quá trình kiểm tra Partition hoạt động, Boot sector tương ứng mới được đọc vào. Chính vì vậy người viết ra virus có thể chọn một trong hai nơi để cất mã virus: lưu trữ tại Master Boot sector và Boot sector.

Đối với B-Virus được lưu trữ tại Master thì có ưu điểm là nó luôn được nạp và bộ nhớ đầu tiên, cho dù sau đó hệ điều hành nào được sử dụng và do đó nó khả năng lây lan rất rộng. Tuy nhiên có một vấn đề đặt ra là những con virus này phải bảo toàn Partition table vì một xâm phạm dù là nhỏ đến vùng này cũng dẫn đến những trục trặc về đĩa cứng.

Đối với Boot sector thì có thuận lợi hơn trong việc sử dụng bảng tham số của đĩa nằm

trong vùng này, đoạn mã lây lan cho đĩa mềm cũng sẽ được dùng tương tự cho đĩa cứng.

24

Hai phương pháp trên đều đã được các B-Virus áp dụng , tuy nhiên hiện nay hầu

hết chúng đều áp dụng phương pháp lây vào Master Boot sector.

Vấn đề then chốt mà loại virus này cần giải quyết là Boot sector (Master Boot sector) cũ của đĩa. Virus sẽ thực hiện việc thay thế một Boot sector mới, tuy nhiên virus

không thể thực hiện được hết công việc cho Boot sector (Master Boot sector) cũ vì trong sector này có chứa thông tin về đĩa và thực sự virus không thể biết một cách đầy đủ sector này sẽ phải làm những gì. Chính lý do này mà đa số cách B-Virus không bỏ Boot sector cũ mà virus sẽ cất Boot sector cũ vào một vùng nào đó trên đĩa và sau khi tiến hành xong tác vụ cài đặt của mình, nó sẽ đọc và trao quyền điều khiển cho đoạn mã của sector này (tuy nhiên có một số con virus đã thực hiện đè mà của mình lên đoạn mã của Boot sector cũ chỉ chừa thông tin về đĩa mà không cất sector này đi). Mọi việc lại

được Boot sector cũ tiếp tục thi hành như bình thường. Tuy nhiên việc lựa chọn nơi cất dữ Boot sector cũng là một điều khó khăn vì mọi nơi trên đĩa đều có thể bị sửa đổi: FAT, Root Directory và nhất là vùng Data. Dựa vào cách giải quyết việc cất dấu Boot sector cũ này B-Virus có thể phân thành hai loại là SB-Virus và DB-Virus.

2.2.2.2. Phân loại Boot Virus

Việc cất giữ Boot sector được B-Virus giải quyết theo hai hướng:

Hướng thứ nhất là virus cất Boot sector cũ vào một vị trí xác định trên mọi đĩa và chấp nhận rủi ro có thể bị mất sector này do ghi đè, dù chỗ cất dấu này có khả năng bị ghi đè thấp nhất. Hướng giải quyết này đơn giản và do đó chương trình thường không lớn. Chỉ dùng một sector thay thế Boot sector cũ và do đó loại này được gọi là SB-Virus

(Single Boot Virus).

Hướng giải quyết thứ hai là virus có thể cất Boot sector này vào một vị trí an toàn trên đĩa tránh mọi mất mát có thể xảy ra. Vì kích thước vùng an toàn có thể định bất kỳ, nên virus thường chiếm trên nhiều sector và được chia làm hai phần: một phần

trên Boot sector và một phần trên vùng an toàn. Vì đặc điểm như vậy, loại virus này được gọi là DB-Virus (Double Boot sector).

SB-Virus

Do tính chấp nhận mất mát dữ liệu nên chương trình ngắn gọn chỉ chiếm một sector. Thông thường SB-Virus chọn những nơi mà khả năng ghi đè lên là ít nhất để cất Boot sector cũ.

25

Đối với đĩa mềm, các nơi thường chọn là:

- Những sector cuối cùng của Root Directory vì ít khi người sử dụng khai thác

hết số entry của thư mục gốc.

- Những sector cuối cùng của đĩa vì khi phân phối liên cung cho một tập tin nào đó, DOS bắt đầu tìm liên cung trống từ đầu vùng dữ liệu căn cứ vào entry của nó trên FAT.

Đối với đĩa cứng thì đơn giản hơn vì hầu hết các đĩa track 0 chỉ chứa Master Boot record trên một sector, còn lại các sector khác trên track này là bỏ trống không dùng đến. Do đó, các SB-Virus và hầu hết các DB-Virus đều chọn những sector trống trên track này làm nơi ẩn náu.

DB-Virus

- Đối với đa số các virus thì kích thước 512 byte (thông thường kích thước của một sector là 512 bytes) không phải là quá rộng rãi. Do đó họ đã giải quyết bằng cách thay thế Boot sector cũ bằng một Boot sector giả. Boot sector giả này làm nhiệm vụ tải tiếp phần mã virus còn lại trên đĩa vào bộ nhớ rồi trao quyền điều khiển. Sau này đã cài đặt xong phần này mới tải Boot sector thật vào bộ nhớ. Phần mã virus còn lại này có thể được nằm ở một trong những nơi :

- Đối với đĩa mềm: qua mặt DOS bằng cách dùng những liên cung còn trống. Những entry tương ứng với các liên cung này trên FAT sẽ bị đánh dấu là hỏng để cho DOS sẽ không sử dụng đến nữa. Phương pháp thứ hai ưu điểm lớn hơn là vượt ra khỏi tầm kiểm soát của DOS bằng cách tạo thêm một track mới tiếp theo track cuối cùng mà

DOS có thể quản lý (điều này chỉ áp dùng với đĩa mềm). Tuy nhiên phương pháp này có nhược điểm là có một số loại ổ đĩa mềm không có khả năng quản lý, khi track mới được thêm sẽ gây lỗi khi virus tiến hành lây lan. Do vậy phương pháp thứ nhất vẫn được các virus áp dụng nhiều hơn.

- Đối với đĩa cứng: mã virus có thể được cất dữ tại những sector sau Master Boot record hoặc những sector cuối của Partition sau khi đã giảm kích thước của Partition đi hoặc giải quyết tương tự như trên đĩa mềm (sử dụng những liên cung còn trống và đánh dấu những liên cung này trong bảng FAT là hỏng để cho DOS không sử dụng nữa) .

Tuy nhiên dù là SB-Virus hay DB-Virus thì cấu trúc chương trình của chúng vẫn

là như nhau.

26

2.2.2.3. Cấu trúc chương trình B-Virus

Do đặc điểm chỉ được trao quyền điều khiển một lần khi khởi động máy, virus phải tìm mọi cách để tồn tại và được kích hoạt lại khi cần thiết , nghĩa là nó giống như một chương trình “pop up” TSR(Terminate and Stay Resident – Kết thúc và thường trú). Do vậy , chương trình virus được chia làm hai phần:phần khởi tạo và phần thân.

Phần khởi tạo

Đầu tiên virus tiến hành thường trú bằng cách tự chép mình vào vùng nhớ cao.

Sau đó để đảm bảo tính “pop up” của mình nó luôn chiếm ngắt 13h. Ngoài ra, để phục vụ cho công tác phá hoại, gây nhiễu…virus còn có thể chiếm các ngắt 8,9….Sau khi đã khởi tạo xong, Boot sector cũ được trả lại đúng vị trí và trao quyền điều khiển.

Phần thân

Là phần quan trọng đối với virus, chứa các đoạn mã mà phần lớn sẽ thay thế cho

các ngắt mà nó chiếm. Có thể chia phần này thành bốn phần chính.

Phần lây lan: là phần chính của thân virus, thay thế cho ngắt 13h, có tác dụng lây

lan bằng cách tự sao chép mình vào bất kỳ một đĩa nào chưa bị nhiễm.

Phần gây nhiễu và ngụy trang: khi bản chất virus được khảo sát một cách tường tận thì việc phát hiện và diệt virus không còn là vấn đề phức tạp nữa. Việc gây nhiễu tạo nhiều khó khăn cho những nhà chống virus trong việc tìm, diệt virus và phục hồi dữ liệu. Việc ngụy trang làm cho virus có một vẻ bề ngoài như bình thường để người diệt virus và sử dụng máy tính không phát hiện ra chúng.

Phần phá hoại: không nhất thiết phải có. Tuy nhiên đa số các virus đều có phần này, hiền thì chỉ gây trục chặc nhỏ, trêu chọc người sử dụng…còn ác thì phá hủy dữ liệu máy tính. Virus có thể phá hoại một cách ngẫu nhiên hoặc được định thời.Đối với loại virus được định thời, virus sẽ kiểm tra một giá trị (có thể là virus sẽ xác định ngày, giờ,

tháng, năm, số lần lây, số giờ máy đã chạy…). Khi giá trị này bằng hoặc vượt qua ngưỡng cho phép nó sẽ tiến hành phá hoại .

Phần dữ liệu: để cất giữ thông tin trung gian, những biến nội tại dùng riêng cho

virus và Boot sector cũ.

27

2.2.3. Virus File

2.2.3.1.Phương pháp lây lan

Virus file nói truyền thống nói chung chỉ tiến hành lây lan trên những file thi hành được (thường là file .com hoặc là file .exe). Khi tiến hành lây lan F-Virus truyền thống cũng phải tuân theo nguyên tắc: quyền điều khiển phải nằm trong tay virus trước khi virus trả nó lại cho file bị nhiễm (tuy nhiên cũng có một số ít virus lại nắm quyền điều khiển sau một số lệnh nào đó của file bị nhiễm). Tất cả các dữ liệu của file phải được bảo toàn sau khi quyền điều khiển thuộc về file.

Cho đến nay F-Virus có một số phương pháp lây lan cơ bản sau:

Chèn đầu:

Thông thường, phương pháp này chỉ áp dụng đối với các file dạng .COM nghĩa

là chương trình luôn ở PSP:100h. Lợi dụng điểm này, virus sẽ chèn đoạn mã của nó vào đầu file bị lây và đẩy toàn bộ file này xuống phía dưới ngay sau nó.

Ưu điểm: mã virus bị dễ viết vì nó dạng file .COM. Mặt khác, sẽ gây khó khăn cho người diệt trong vấn đề khôi phục file vì phải đọc toàn bộ file bị nhiễm vào bộ nhớ

rồi tiến hành nghi lại.

Nhược điểm: trước khi trả quyền điều khiển lại cho file phải đảm bảo đầu vào là

PSP:100h, do đó phải chuyển toàn bộ chương trình lên địa chỉ này.

Nối đuôi:

Phương pháp này được thấy trên hầu hết các loại F-Virus vì phạm vi lây lan của nó rộng hơn phương pháp trên. Theo như tên của phương pháp này mã virus sẽ được gắn vào ngay sau file bị lây. Và do mã của virus không nằm đúng đầu vào chương trình cho nên nó sẽ định vị lại file bị lây bằng cách thay đổi một số dữ liệu của file sao cho đầu vào chỉ đúng vào mã của nó.

Ưu điểm: lây lan trên mọi loại file khả thi, thường là file .COM,.EXE, .BIN, .OVL… mặt khác, sự thay đổi dữ liệu trên file bị lây là không đáng kể và việc đoạt quyền điều khiển không mấy khó khăn.

Nhược điểm: dễ dàng cho người diệt trong việc khôi phục dữ liều và khó định vị

mã virus khi lây nhiễm vào file vì kích thước file đối tượng là bất kỳ.

28

Đè vùng trống

Phương pháp này được ra đời nhằm khắc phục nhược điểm làm tăng kích thước file bị lây nhiễm (một sơ hở mà từ đó virus dễ bị phát hiện) của hai phương pháp trên. Theo phương pháp này virus sẽ tìm những vùng trống trong file đề ghi đè mã của nó

vào đấy.

Ưu điểm: gây khó khăn trong việc phát hiện và diệt virus.

Nhược điểm: khó khăn trong việc viết mã virus và khả năng lây lan hẹp vì rất ít

file có đủ vùng trống cho virus ghi đè.

2.2.3.2 . Phân loại F-Virus

TF Virus (Transient File Virus)

Virus loại này không thường trú, không chiếm các ngắt, khi file bị lây nhiễm được thi hành nó sẽ chiếm quyền điều khiển và tranh thủ tìm cách lây lan sang các file khác càng nhiều càng tốt.

RF Virus (Residen File Virus)

Virus loại này thường trú bằng nhiều kỹ thuật khác nhau, chặn các ngắt mà trọng

tâm ngắt là 21h, khi ngắt này được thi hành ứng với các chức năng nhất định về file thì nó sẽ tiến hành lây lan.

2.2.3.3. Cấu trúc chương trình F-Virus

TF-Virus

Bao gồm bốn phần: lây lan, gây nhiễu, phá hoại và dữ liệu.

Phần lây lan: là phần chính của virus, có tác dụng lây lan bằng cách tự sao chép

mình gắn vào các file khác mà nó tìm thấy khi có quyền điều khiển. Do loại này không thường trú nên nó tìm cách lây lan càng nhiều file càng tốt khi nắm quyền điều khiển.

Phần gây nhiễu: là công việc làm cho mã virus trở nên phức tạp khó hiểu tạo nhiều khó khăn cho những nhà chống virus trong việc tìm, diệt virus và phục hồi dữ

liệu.

Phần phá hoại: cũng tương tự như B – Virus

Phần dữ liệu: để cất giữ những thông tin trung gian, những biến nội tại dùng riêng cho virus và cá dữ liệu của file bị lây, các dữ liệu này sẽ được khôi phục cho file trước khi trao lại quyền điều khiển cho file.

29

RF-Virus

Vì thường trú và chặn ngắt như B-Virus cho nên loại này cũng bao gồm hai phần

chính: phần khởi tạo và phần thân.

Phần khởi tạo: đầu tiên virus tiến hành thường trú bằng cách tự chép mình vào bộ nhớ hoặc dùng các chức năng thường trú của DOS. Sau đó để đảm bảo tính “pop up” của mình nó sẽ luôn chiếm ngắt 21h. Ngoài ra, để phục vụ cho công tác phá hoại, gây nhiễu, virus còn có thể chiếm các ngắt 8,9,13h …Sau khi đã khởi tạo xong, nó sẽ trả lại dữ liệu cũ và quyền điều khiển cho file bị lây nhiễm.

Phần thân: phần này có cấu trúc tương tự như TF-Virus, cũng có bốn phần: lây lan, gây nhiễu, phá hoại và phần dữ liệu. Nhưng vì loại virus này thường trú nên phần lây lan sẽ thực hiện trên những file yêu cầu được sử dụng ngắt 21h (đã bị virus chiếm).

Và phần gây nhiễu ngụy trang cũng phức tạp tinh vi hơn TF-Virus vì nó có thể giám sát hệ thống khi thường trú.

2.2.4. Virus Macro

Về bản chất virus macro là một hoặc một số macro (được viết bằng ngôn ngữ WordBasic, ExcelBasic, Visual Baisic…) có khả năng kích hoạt và tiến hành lây lan khi người sử dụng xử lý file có tồng tại chúng. Đối tượng lây nhiễm đầu tiên của các virus marco là những file template ngầm định được nạp đầu tiên mỗi khi Word hoặc Excel

khởi động (đối với Word là file NORMAL.DOT) và từ đây chúng tiếp tục lây lan sang những file khác trong những lần làm việc về sau.

Thông thường, các virus marco được thi hành khi người sử dụng chú ý chạy

chúng. Mặt khác các virus marco có thể thi hành một cách tự động được khi các virus marco có tên trùng với tên các marco tự động hoặc trùng tên với các lệnh chuẩn của Word hoặc Excel. Đây chính là phương pháp các virus marco tự động được kích hoạt và lây lan trong những điều kiện nhất định.

Một số ví dụ trong Word về những lệnh chuẩn như: FileClose, FileOpen, FileSave, FileSaveAs….và năm marco. Các marco này sẽ tự động thi hành khi công việc tương ứng được thực hiện.

30

Tên

Tự động thi hành lệnh

AutoClose

Đóng file soạn thảo

AutoStart

Khởi động Word

AutoExit

Kết thúc Word

AutoNew

Tạo file văn bản mới

AutoOpen

Mở file văn bản

Như vậy, để có thể lây lan, virus marco luôn phải có ít nhất một marco thi hành tự động được. Trong marco này sẽ có một đoạn mã để tiến hành lây lan bằng cách tự sao chép toàn bộ mã virus sang các file khác. Ngoài ra, virus marco có thế có thêm các phần phá hoại, gây nhiễm và ngụy trang….

2.2.5. Trojan

2.2.5.1. Định nghĩa Trojan

Ngày nay, Trojan luôn là vấn đề lớn trong bảo vệ và an toàn trên mạng.

Nhiều người nghĩ rằng khi họ có một chương trình quét virus tốt và có bản cập nhật mới nhất thì họ sẽ an toàn, máy họ sẽ không bị nhiễm. Trojan hay không ai có thể truy cập máy tính của mình, điều này hoàn toàn sai. Mục đích của những người viết chương trình chống virus là phát hiện ra con virus mới, không phải là những con Trojan. Nhưng khi những con Trojan lây nhiễm đến nhiều người sử dụng thì những chuyên viên chống virus sẽ nạp thêm nó vào trong chương trình quét của mình. Tuy

nhiên đây chỉ là một phần rất nhỏ các Trojan mà những chuyên viên phòng chống virus phát hiện được và đưa vào trong danh sách những virus cần diệt.

Hơn nữa, những chương trình quét virus này không phải là firewalls, nó sẽ không phát hiện ra trojan và bảo vệ bạn trong khi bạn đang trên mạng. Nhiều người dùng

không biết Trojan là gì và họ tải xuống những file mà không biết rõ nguồn gốc.

2.2.5.2. Phương pháp lây nhiễm Trojan

Theo số liệu thống kê của trung tâm BKIS 90% số người được hỏi có tải xuống, hay sao chép file từ đâu đó không thì trả lời là không, nhưng thực sự họ đã thực hiện trước đó vài ngày.

31

Trojan có thể bị lây nhiễm từ rất nhiều con đường khác nhau:

- Từ ICQ

- Từ file đính kèm trong mail

- Truy nhập trực tiếp .

Từ ICQ

Nhiều người nghĩ rằng Trojan không thể lây lan trong khi họ đang nói chuyện trên ICQ nhưng họ không nghĩ là người đang nói chuyện có thể gửi cho họ một con Trojan.

ICQ cho phép gửi một file .exe nhưng nó đã được sửa sao cho nhìn như có vẻ file đó là file hình ảnh, âm thanh…Ví dụ, có một con Trojan được kẹp chung với file hình ảnh và người gửi đã thay đổi biểu tượng của file .exe thành biểu tượng của file .bmp, người nhận sẽ chạy con Trojan đó và không hề nghi ngờ, vì khi chạy file .exe đó, nó vẫn hiện lên hình ảnh như một file ảnh. Kết quả là trên máy người nhận đã có một con Trojan. Đó là lý do hầu hết người dùng nói rằng họ không chạy bất kỳ file lạ nào trog khi họ đã chạy nó.

Một cách để ngăn ngừa tốt nhất là luôn luôn kiểm tra kiểu file trước khi chạy.

Từ mail

Đa số Trojan được lây lan bằng mail. Các hacker hay chủ nhân của con Trojan

thường đính kèm file Trojan vào trong một bức thư điện tử và gửi đi. Khi người dùng kích hoạt vào file đính kèm hay cả khi xem thư thì con Trojan đã có thể được kích hoạt xâm nhập hệ thống và thực hiện các chức năng đó.

Truy cập trực tiếp

Một máy tính ngay cả khi được trang bị tốt nhất với những biện pháp bảo vệ, với chương trình chống virus tốt nhất thì cũng không thể làm gì được trước sự truy cập trực tiếp của một người cố tình đưa Trojan vào trong máy tính.

2.2.5.3. Sự nguy hiểm của Trojan

Đa số mọi người cho rằng Trojan không có gì nguy hiểm, vì máy tính của họ vẫn làm việc bình thường và tất cả dữ liệu vẫn còn, nếu đó là một con virus thì dữ liều đã có có thể mất sạch hay hoạt động không bình thường .

32

Khi một máy tính bị nhiễm Trojan, tất cả dữ liệu trên máy tính có thể bị nguy hiểm, thường thì chủ nhân của Trojan này không xóa tất cả file, mà họ sẽ sao chép về khai thác như tài liệu bí mật của công ty, tài khoản Internet, tài khoản cá nhân và khi không có gì khác có thể thực hiện xóa dữ liệu. Đôi khi hacker còn dùng Trojan để cài đặt virus phá hoại như CIH chẳng hạn. Đó là một vài ví dụ hacker có thể thực hiện khi họ đã cài thành công Trojan.

2.2.5.4. Phân loại Trojan

Có rất nhiều Trojan, nhưng chủ yếu nó được chia ra làm các dạng căn bản sau:

Trojan dùng để truy cập từ xa

Hiện nay, Trojan này được sử dụng rất nhiều. Chức năng chính của Trojan này là mở một cổng trên máy tính nạn nhân để hacker có thể quay lại truy cập vào máy nạn nhân.

Những con Trojan này rất dễ sử dụng. Chỉ cần nạn nhân bị nhiễm Trojan và chủ nhân của nó có địa chỉ IP của nạn nhân thì họ có thể truy cập toàn quyền trên máy nạn nhân.

Tùy loại Trojan mà chức năng của nó khác nhau (key logger, download, upload

file, thực hiện lệnh..).

Một số con Trojan nổi tiếng loại này như: netbus, back orifice…

Móc nối bàn phím (keylogger)

Nó ghi lại tất cả hành động trên bàn phím rồi lưu vào trong một file, hacker sẽ tìm đến máy tính đó và lấy đi file chứa toàn bộ thông tin về những gì người sử dụng đã gõ vào bàn phím.

Ví dụ: kuang keylogger, hooker, kuang2…

Trojan gửi mật khẩu

Đọc tất cả mật khẩu lưu trong cache và thông tin về máy tính nạn nhân rồi gửi về

đến hacker.

Ví dụ: barok, kuang, bario…

33

Trojan phá hủy

Những con Trojan này chỉ có một nhiệm vụ duy nhất là tiêu diệt tất cả các file

trên máy tính.

Ví dụ: CIH

Những con Trojan này rất nguy hiểm vì khi máy tính bị nhiễm chỉ một lần thôi

thì tất cả dữ liệu mất hết.

FTP Trojan

Loại Trojan này sẽ mở cổng 21 trên máy tính và để cho tất cả mọi người kết nối đến máy tính đó mà không cần có mật khẩu và họ sẽ toàn quyền tải bất kỳ dữ liệu nào xuống.

2.2.5.5. Mục đích của Trojan

Nhiều người nghĩ rằng hacker dùng Trojan chỉ để phá hoại máy của họ, điều đó hoàn toàn sai lầm. Trojan là một công cụ rất hữu hiệu giúp người sử dụng nó tìm đước rất nhiều thông tin trên máy tính của nạn nhân.

- Thông tin về Credit Card.

- Tìm kiếm thông tin về account.

- Dữ liệu bí mật.

- Danh sách địa chỉ email.

- Địa chỉ nhà riêng.

- Account Passwords.

- Thông tin về khách hàng.

- Tất cả những thông tin cơ vệ công ty.

2.2.5.6. Phương thức hoạt động của Trojan

Khi nạn nhân chạy file Trojan, nếu là Trojan dạng truy cập từ xa (remote access), file server trong Trojan sẽ luôn ở chế độ lắng nghe. Nó sẽ chờ đến khi nhận được tín

hiệu của Client, ngay lập tức nó sẽ mở ngay một cổng nào đó để hacker có thể truy cập vào. Nó có thể sử dụng giao thức TCP hoặc giao thức UDP.

Khi hacker kết nối vào địa chỉ IP của nạn nhân, họ có thể làm bất cứ điều gì vì

nội dung Trojan đã bao hàm những điều khiển đó.

34

Còn nếu Trojan loại Keylogger hay loại gửi mật khẩu thì nó tiến hành việc ghi lại tất cả những gì được gõ trên bàn phím. Tất cả được lưu trữ trong một file theo một đường dẫn nhất định. Tại một thời điểm nào đó chủ nhân của con Trojan đó sẽ xâm nhập vào máy tính đó thông qua cổng sau mà con Trojan đã mở và lấy đi file đó. Đối với những con Trojan có phương thức gửi file trong bản thân nó thì nó tiến hành gửi file đến địa chỉ email xác định trước.

Đối với Trojan loại phá hủy thì hoạt động của nó là nạp khi Windows khởi động

và tiến hành công việc xóa file của nó.

Một vài Trojan được nạp ngay khi Windows được khởi động bằng cách sửa file

win,.ini, system.ini hay sửa registry.

2.2.5.7. Cổng của một số Trojan thông dụng

Tên gọi

Cổng

Tên gọi

Cổng

Satanz Backdoor

666

Silencer

10001

Shockrave

1981

Shivka-Burka

1600

WebEx

1001

SpySender

1807

Doly Trojan

1011

Psyber Sream Server

1170

Ultors Trojan

1234

VooDoo Doll

1245

FTP 99CMP

1492

BackDoor

1999

Trojan Cow

2001

Ripper

2023

Bugs

2115

Deep Throat

2140

The Invasor

2140

Phineas Phucker

2801

3700

Masters Paradise

30129

Portal of Doom

WinCrash

4092

ICQ Trojan

4590

Sockers de Troie

5000

Sockets de Troie 1.x

5001

Firehotcker

5321

Blade Runner

5400

Blade Runner 2.x

5402

Robo-Hack

5569

Blade Runner 1.x

5401

DeepThroat

6670

DeepThroat

6771

GateCrasher

6969

35

2.2.6. Internet Worm

2.2.6.1. Giới thiệu chung

Sâu Internet –Worm là loại virus có sức lây lan rộng, nhanh và phổ biến nhất hiện nay. Worm kết hợp cả sức phá hoại của virus, đặc tính âm thầm của Trojan và hơn hết là sự lây lan đáng sợ mà những kẻ viết virus trang bị cho nó để trở thành một kẻ phá hoại với vũ khí tối tân. Tiêu biểu như Mellisa hay Love Letter. Với sự lây lan đáng sợ chúng đã làm tê liệt hàng loạt hệ thống máy chủ, làm ách tắc đường truyền Internet.

Thời điểm ban đầu, Worm được dùng để chỉ những virus phát tán bằng cách tìm các địa chỉ trong sổ địa chỉ (Address book) của máy mà nó lây nhiễm và tự gửi chính nó qua email tới những địa chỉ tìm được.

Những địa chỉ mà virus tìm thấy thường là địa chỉ của bạn bè, người thân, khách hàng... của chủ sở hữu máy bị nhiễm. Điều nguy hiểm là virus có thể giả mạo địa chỉ người gửi là địa chỉ của chủ sở hữu máy hay địa chỉ của một cá nhân bất kỳ nào đó; hơn nữa các email mà virus gửi đi thường có nội dung “giật gân” hoặc “hấp dẫn” để dụ dỗ người nhận mở file virus đính kèm. Một số virus còn trích dẫn nội dung của một email

trong hộp thư của nạn nhân để tạo ra phần nội dung của email giả mạo. Điều này giúp cho email giả mạo có vẻ “thật” hơn và người nhận dễ bị mắc lừa. Những việc này diễn ra mà bạn không hề hay biết. Với cách hoàn toàn tương tự trên những máy nạn nhân khác, Worm có thể nhanh chóng lây lan trên toàn cầu theo cấp số nhân. Điều đó lý giải tại sao chỉ trong vòng vài tiếng đồng hồ mà Mellisa và Love Letter lại có thể lây lan tới hàng chục triệu máy tính trên toàn cầu. Cái tên của nó, Worm hay "Sâu Internet" cho ta

hình dung ra việc những con virus máy tính “bò” từ máy tính này qua máy tính khác trên các "cành cây" Internet.

Với sự lây lan nhanh và rộng lớn như vậy, Worm thường được kẻ viết ra cài thêm nhiều tính năng đặc biệt, chẳng hạn như khả năng định cùng một ngày giờ và đồng

loạt từ các máy nạn nhân (hàng triệu máy) tấn công vào một địa chỉ nào đó. Ngoài ra, chúng còn có thể mang theo các BackDoor thả lên máy nạn nhân, cho phép chủ nhân của chúng truy nhập vào máy của nạn nhân và làm đủ mọi thứ như ngồi trên máy đó một cách bất hợp pháp.

Ngày nay, khái niệm Worm đã được mở rộng để bao gồm cả các virus lây lan qua mạng chia sẻ ngang hàng peer to peer, các virus lây lan qua ổ đĩa USB hay các dịch vụ gửi tin nhắn tức thời (chat), đặc biệt là các virus khai thác các lỗ hổng phần mềm để lây lan.

36

Các phần mềm (nhất là hệ điều hành và các dịch vụ trên đó) luôn tiềm ẩn những lỗi/lỗ hổng an ninh như lỗi tràn bộ đệm, mà không phải lúc nào cũng có thể dễ dàng phát hiện ra. Khi một lỗ hổng phần mềm được phát hiện, không lâu sau đó sẽ xuất hiện các virus có khả năng khai thác các lỗ hổng này để lây nhiễm lên các máy tính từ xa một cách âm thầm mà người chủ máy hoàn toàn không hay biết. Từ các máy này, Worm sẽ tiếp tục “bò” qua các máy tính khác trên mạng Internet với cách thức tương tự.

Ta có thể thấy được sự nguy hiểm của sâu Internet qua việc tìm hiểu sâu MyDoom

Ngày xuất hiện sâu MyDoom đầu tiên: 26/01/2004

Ngày lan tràn đến Việt Nam: 27/01/2004

Cuốc tấn công của MyDoom lên đỉnh điểm vào ngày 31/01/2004 khi có hàng triệu email nhiễm MyDoom cùng đồng loạt gửi tới Website của Yahoo làm nghẽn mạch.

Bức tường lửa và bộ lọc (Filewall và Filter) ngay lập tức được dựng lên để ngăn chặn và loại bỏ tất cả các email có tiêu đề: Test, Hi, Hello, Mail Delivery System, Mail Transaction Failed, Server Report, Status Error dù đây cũng là tiêu đề Yahoo hay sử dụng.

lệnh “http://www.mail.yahoo.com/”

thì đường dẫn được

Dù đã thiết lập hệ thống bảo vệ kịp thời, trang web Yahoo từ 8h17 đến 12h10 trong ngày 31/01/2004 cũng bị tấn công bằng lệnh DoS (Denial of Service) và khi gõ dòng thế bằng thay “http://www.search.com/”. Mọi hoạt động trên Website này gần như tê liệt.

.Biến thể sâu mới được gọi là MyDoom.B (còn có tên là Norvarg.A, Mimailk…)có khả năng chống truy cập vào các trang web cung cấp phần mềm chống virus.

Trong chương trình viết ban đầu của MyDoom chỉ tạo làn sóng mail rác và tập trung chuẩn bị cho đợt phá hoại tổng lực từ ngày 01- 12/02/2004 vào website của SCO Group Inc. Với biến thể mới MyDoom.B đã được bổ sung thêm câu lệnh tấn công thêm website Microsoft.

Sâu MyDoom được viết có chủ định là không tấn công vào các địa chỉ email của các cơ quan chính phủ, một số trường đại học, và một số hãng bảo vệ máy tính, kể cả Symantec.

Các máy tính chạy hệ điều hành Windows XP của Microsoft có nguy cơ bị lây

nhiều nhất.

37

Theo các chuyên gia công nghệ, thiệt hại tài chính do sâu MyDoom –kể cả việc

đình chỉ mạng Internet và thiệt hại được tính bằng con số hàng tỷ đô .

Phần mềm diệt MyDoom được cập nhật đầu tiên vào ngày 28/01/2004 (của hãng

Symantic)

160.000 email nhiễm virus được gửi đến cho một công ty chỉ trong 60 phút tại

USA.

Mở nhiều cổng nhất: 71 cổng , từ cổng 3127 đến cổng 3198. Symantec đã thống kê được có tới 2.100 hệ thống khác nhau trên mạng đang quét các cửa sau do MyDoom tạo ra.

50.000 hệ thống máy tính bị nhiễm virus và bị khống chế từ xa, nguy cơ cho đợt

tấn công tổng lực.

300 triệu thư mang virus được phát tán, chiếm 1/12 tổng lượng email lưu chuyển trên Internet trong hai ngày 500.000 máy tính bị nhiễm MyDoom chỉ sau 3 ngày (kể từ khi phát hiện sâu).

142 quốc gia trên thế giới bị nhiễm .

2.2.6.2. Các giai đoạn phát triển của sâu Internet

Thông qua sự phân tích của những con sâu Internet điển hình trong các giai đoạn phát triển của sâu Internet, ta có thể thấy nguyên tắc xây dựng sâu Internet, tốc độ phát triển của loại virus này và mức độ nguy hiểm của nó.

1. Sâu Morris

Sâu Morris là sâu máy tính đầu tiên được phát tán qua Internet và cũng là con

sâu đầu tiên thu hút được sự chú ý đáng kể của các phương tiện thông tin đại chúng.

Tác giả của nó là Robert Tappan Morris, một sinh viên tại Đại học Cornell. Sâu Morris được thả lên mạng vào ngày 2 tháng 11 năm 1988 từ học viện MIT, nó được phát tán từ MIT để che dấu thực tế là con sâu đã được bắt nguồn từ Cornell. (Tình cờ,

Robert Tappan Morris hiện là một giáo sư tại MIT.)

38

Sai lầm nghiêm trọng đã biến con sâu từ chỗ chỉ là một thí nghiệm trí thức có tiềm năng vô hại thành một sâu tấn công từ chối dịch vụ đầy phá hoại là ở tại cơ chế lây lan. Con sâu xác định xem có xâm nhập một máy tính mới hay không bằng cách hỏi xem hiện đã có một bản sao nào đang chạy hay chưa. Nhưng nếu chỉ làm điều này thì việc xóa bỏ nó lại quá dễ dàng, bất cứ ai cũng chỉ phải chạy một tiến trình trả lời rằng "có" khi được hỏi xem đã có bản sao nào chưa, và con sâu sẽ tránh. Để tránh chuyện này, Morris thiết kế để con sâu tự nhân đôi với xác suất 40%, bất kể kết quả của việc kiểm tra lây nhiễm là gì. Thực tế cho thấy tỷ lệ nhân đôi này là quá cao và con sâu lây

lan nhanh chóng, làm nhiễm một số máy tính nhiều lần.

Người ta thống kê rằng có khoảng 6.000 máy tính chạy Unix đã bị nhiễm sâu Morris. Paul Graham đã nói rằng "Tôi đã chứng kiến người ta xào xáo ra con số này,

công thức nấu ăn như sau: ai đó đoán rằng có khoảng 60.000 máy tính nối với Internet, và con sâu có thể đã nhiễm 10% trong số đó". Mỹ đã ước tính thiệt hại vào khoảng từ 10 đến 100 triệu đô la.

Robert Morris đã bị xử và buộc tội vi phạm Điều luật năm 1986 về lạm dụng và

gian lận máy tính (Computer Fraud and Abuse Act). Sau khi chống án, anh ta bị phạt 3 năm án treo, 400 giờ lao động công ích và khoản tiền phạt 10.050 đô la Mỹ.

Sâu Morris đôi khi được gọi là "Great Worm" (Sâu khổng lồ) do hậu quả nặng nề

mà nó đã gây ra trên Internet khi đó, cả về tổng thời gian hệ thống không sử dụng được, lẫn về ảnh hưởng tâm lý đối với nhận thức về an ninh và độ tin cậy của Internet.

2. Kakworm

Kakworm (KAV) là một con sâu. Nó được xây dựng với mục đích xâm nhập vào chỗ dễ bị tổn thương của sự bảo vệ trình duyệt Internet Explorer hay chương trình Outlook Express. Bản nâng cấp sửa chữa cho tính dễ bị tổn thương này đã được Microsoft đưa ra và cần thiết phải nâng cấp lại ngay (theo thông cáo an toàn

MicrosoftMS99-032). Những trình duyệt Microsoft và thư tín điện tử chưa bị ảnh hưởng.

KAV được gắn vào trong chữ ký HTML tới tin nhắn. Những người dùng không nhìn thấy nó bởi vì không có dạng văn bản nào có thể hiển thị nó ra màn hình (KAV

được viết bằng JavaScript).

Những người dùng không cần kích hoạt vào bất kỳ file đính kèm nào hoặc thực hiện bất kỳ hoạt động nào để kích hoạt KAV. Chỉ cần người dùng xem thư là con sâu

KAV đã có thể xâm nhập vào hệ thống.

39

Được kích hoạt một lần, KAV lưu file KAK.HTA vào trong thư mục khởi động của Windows. Lần sau khi máy tính được khởi động, KAK.HTA chạy và tạo ra KAK.HTA trong thư mục Windows.

Trong tháng nào cũng có một lần sau năm giờ chiều con sâu KAK sẽ hiển thị

thông báo “Kagou - Anti - Krosoft nói không phải là hôm nay” và sau đó tắt máy tính.

KAK được xây dựng dựa vào Bubbleboy, con sâu đầu tiên có thể lan truyền mà

không cần người dùng phải mở file đính kèm.

3. Sâu Love Letter

Trong dạng nguyên bản của con sâu gửi chính nó cho những người dùng qua một file đính kèm theo thư tín điện tử. Chủ đề tin nhắn là “ I LOVE YOU ” và nội dung tin nhắn là “Một cách chân thực kiểm tra bức thư tình yêu đính kèm được gửi đến từ tôi”. File đính kèm được gọi LOVE -LETTER-FOR-YOU.TXT.vbs (mở rộng kép .txt.vbs). Khi kích hoạt vào file đính kèm để chạy (giả thiết rằng máy tính đó đã cài Windows Scripting Host) và chu trình lây nhiễm lại bắt đầu lần nữa.

Sự nhân đôi là cần thiết cho con sâu này giống như khi nó cố gắng khai thác sự dễ dàng của hàm sử dụng. Những chương trình thư tín và thư mục theo sự mặc định không cho thấy những phần mở rộng của file. Trong trường hợp này nếu máy tính đó có tập hợp tùy chọn mặc định thì file đính kèm lộ ra giống như gọi LOVE -LETTER-FOR-

YOU.TXT và như vậy là một file văn bản thay vì một file có thể thực hiện.

Trong thao tác, con sâu thực hiện vài hoạt động:

Nó kiểm tra file WinFAT.32.exe trong thư mục tải xuống từ Interner Explorer. Nếu không tìm thấy con sâu thay đổi trang khởi động Internet Explorer đăng ký tới một trong một số website nơi file WIN-BUGSFIX.exe sẽ được tải xuống và tập hợp để chạy trên máy tính cho lần tiếp theo.

Con sâu sẽ sao chép chính nó vào hai chỗ nơi nó sẽ thi hành khởi động lại trên

mỗi máy tính khác.

Nó sẽ cố gắng gửi chính nó cho mỗi địa chỉ trong danh sách địa chỉ Outlook .

Con sâu tìm kiếm tất cả những file có phần mở rộng là VBS, VBE, JS, JSE, CSS, .WSH, SCT hoặc HTA. Nếu tìm thấy, chúng sẽ ghi đè lên với virus và phần mở rộng

của nó đổi tên thành .VBS.

File đồ họa với phần mở rộng là JPG hoặc JPEG cũng được ghi đè lên với virus

và phần mở rộng .VBS sẽ được thêm vào tên của nó.

40

Những file đa phương tiện với phần mở rộng là MP2 và MP3 thì được sao chép

tới một file mới cùng tên đó và phần mở rộng .VBS cũng được thêm vào.

Con sâu tìm kiếm một chương trình client MIRC và nếu tìm thấy, sẽ thả một bản

sao và file HTML được thiết kế để gửi con sâu qua MIRC .

Những file virus nguyên bản có sự ảnh hưởng rất nhiều, nhiều biến thể phát triển nhanh chóng và trải rộng ra. Hơn 20 biến thễ đã được báo cáo và trong thời gian đó số lượng biến thể thực tế nhiều hơn số lượng biến thể đã được báo cáo. Một vài ấn tượng nhất có thể nói đến:

Chủ đề fwd: không có nội dung nào, file đính kèm: very funy.vbs.

Chủ đề Ngày những người mẹ: có nội dung “Chúng ta có thể hoạt động để rút từ thẻ gửi của bạn khoảng 326.92 USD cho ngày lễ đặc biệt những người mẹ. Chúng tôi đã gắn một danh sách đơn hàng chi tiết tới địa chỉ email này. Xin in ra file đính kèm và giữ nó trong một chỗ an toàn. Cám ơn một lần nữa và mong có một ngày những người mẹ hạnh phúc: mothersday@subdimension.com”, file đính kèm: mothersday.vbs.

Chủ đề: virus ALERT !!!, gửi từ: support@symatec.com, nội dung: “khách hàng Symantec thân mến, trung tâm nghiên cứu AV của Symantec bắt đầu nhận những báo cáo liên quan tới VBS.LoveLetter. Một virus vào một buổi sáng sớm ngày 4/5/2000 GMT. Con sâu này xuất hiện bắt nguồn từ vùng Thái Bình Dương Asia. Sự phân phối

của virus này lan rộng và hàng trăm trong hàng nghìn những cỗ máy đước báo cáo đã bị lây nhiễm”, file đính kèm: protect.vbs.

Chủ đề: Làm sao để bảo vệ chính bạn khỏi con rệp ILOVE !, nội dung: “từ đây

thì bạn sẽ có cách loại trừ virus tình yêu”, file đính kèm: Virus-Protection- Intruction.vbs.

4. Sâu Melissa.

Melissa là một sự kết hợp giữa virus marco và con sâu email. Con sâu đầu tiên được tìm thấy vào thứ sáu, ngày 26 tháng 3 năm 1999 và sự dàn trải ra được thực hiện rất nhanh chóng xung quanh thế giới .

Về cơ bản, khi một người dùng kích vào file .DOC đính kèm theo thư điện tử chúng sẽ chạy cả virus marco. Một trong những việc đầu tiên mà virus sẽ làm là định dạng và gửi một thông báo tới 50 địa chỉ đầu tiên trong danh sách địa chỉ Outlook. Chủ đề liệu là “Tin nhắn quan trọng từ ”.Và nội dung tin nhắn: “ở đây là tài liệu mà bạn hỏi về ....(không cho bất cứ ai khác thấy)”.

41

Gắn liền tới thông báo này là tài liệu hiện thời đang làm việc. Từ khi Mellissa là một virus và lây nhiễm file NORMAL.DOC nó có thể gửi file lây nhiễm ra ngoài giống như là cái gì đó hết sức quan trọng từ máy tính đó nhận được.

Vào trường hợp hiếm có nơi phút, giờ, ngày và tháng là giống nhau (8 giờ 8

phút ngày 8 tháng 8) virus sẽ chèn mệnh đề “Hai mươi hai, thêm vào bộ ba từ ghi điểm, cộng với năm mươi điểm cho việc sử dụng tất cả những bức thư của tôi. Trò chơi kết thúc”.

Phân phối ban đầu của virus Melisa là vào một file gọi là LIST.DOC cái mà chứa

đựng những mật khẩu của những website X-rated, những website không lành mạnh.

5. Sâu Nimda

Nimda là một trong số những con sâu phức tạp được xây dựng theo sự thuê mướn. Nó lây nhiễm file, thực hiện dàn trải qua đường Website, đường thư tín điện tử, và sự dàn trải qua khai thác vùng mạng cục bộ. Nó lây nhiễm tất cả các phiên bản của Windows từ Windows95 đến Windows2000 cũng như IIS của Microsoft.

Nimda cũng lây lan qua những Website đóng không kín vì vậy mà những trình duyệt sẽ lây lan ở cả việc nhìn trang Web. Cuối cùng, Nimda là con sâu đầu tiên sử dụng bất kỳ máy tính của người dùng nào để quét mạng cục bộ xác định những cỗ máy có thể bị tổn thương đằng sau một bức tường lửa để có thể tấn công (trước đây chỉ

những con sâu lây lan qua server mới làm việc đó).

Nimda sử dụng một vài nhược điểm được biết đến trong những server IIS

Microsoft. Một số nhược điểm đó được nhắc đến tại địa chỉ:

http://www.microsoft.com/tech/security/bulletin/ms00-078.asp

http://www.microsoft.com/tech/security/bulletin/ms01-020.asp

Sâu Nimda sử dụng một số phương pháp sau để lan truyền:

- Từ khách hàng đến khách hàng qua thư tín điện tử và lây nhiễm file.EXE

- Từ khách hàng đến khách hàng qua mạng chia sẻ cục bộ.

- Từ người phục vụ mạng đến khách hàng qua trình duyệt của những website.

- Từ khách hàng đến người phục vụ mạng qua sự tích cực quét và sự khai thác

tính dễ bị tổn thương của “Microsoft IIS 4.0/5.0 directory travarsal”.

- Từ khách hàng đến người phục vụ mạng qua sự quét những cửa sau được để lại

bởi con sâu “Code Red II” và “sadmind/IIS”.

42

Lây nhiễm file:

Nimda hành động giống như bất kỳ file lây nhiễm chuẩn nào. Nó tìm kiếm những file .EXE và thêm vào những file đó chính nó như một tài nguyên. Khi file .EXE được một người sử dụng tải xuống rồi thì sự ảnh hưởng của nó lại được tăng khả năng

lan rộng. Đồng thời, nếu file lây nhiễm đã ở trên một máy tính trong mạng cục bộ, những file chia sẻ đó có thể cũng sẽ làm lan rộng ra sự ảnh hưởng của con sâu Nimda.

Khi một file lây nhiễm thực hiện lây nhiễm qua những file khác. Nimda thực hiện xóa file này sau khi nó kết thúc nhưng không thể luôn luôn làm được điều này. Để

thực hiện điều đó nó tạo ra WININI.INI với những lệnh để xóa file trong lần Windows khởi động sau đó.

Nimda tìm kiếm file lây nhiễm. Những file .EXE gây lây lan bằng cách tìm kiếm

các khóa

[SOFTWARE \ Microsoft\Windows\currentVersion\App Paths]

[SOFTWARE \ Microsoft\Windows\currentVersion\Explorer \Shell Thư mục]

và tất cả khóa khác. Đặc biệt, file WINZIP32.EXE thì không bị lây lan.

Vai trò là sâu Email:

Theo một khía cạnh khác, Nimda hành động giống như các con sâu khác. Nó tìm kiếm địa chỉ danh sách email khách hàng trong máy nạn nhân. Và những file HTML trên máy tính đó cho địa chỉ email và sau đó gửi chính nó cho những địa chỉ này trong một file đính kèm. Loại đầu tiên được định nghĩa như loại “Văn bản/Html” nhưng không chứa đựng nội dung gì cả. Loại thứ hai được định nghĩa như loại “ Âm thanh/X-

Wav ", nhưng chứa đựng một file đính kèm có tên là README.EXE, đó là một chương trình.

Nimda sử dụng nghi thức SMTP của chính mình để gửi email.

Vai trò là sâu Web:

Nimda quét Internet cho những server mạng IIS Micrososft. Khi một server được tìm thấy, nếu tìm được lỗ hổng bảo vệ có thể thâm nhập vào, thì Nimda vào và sửa đổi những trang Web ngẫu nhiên trên server (cũng như những file .EXE trên server). Những sự cải biến cho phép con sâu có thể lan truyền tới những người dùng một cách đơn giản ngay cả khi duyệt Website đó.

43

Để làm điều đó, Nimda tìm kiếm mã nguồn của những file .HTML và .ASP. Khi được tìm thấy, nó thêm một trình JavaScript nhở cuối file .HTML và .ASP. Mã JavaScript này mở một file có tên README.EML khi được nạp bởi một trình duyệt mạng . README.EML là dạng khác của con sâu, được đặt vào trong thư mục nơi mà file thực thi những file .HTML được tìm thấy ở trên. Những trình duyệt chưa được lấp các lỗ hổng sẽ tự động thực thi những file này mà không cần người sử dụng phải kích hoạt vào. Người dùng sẽ không nhìn thấy con sâu hoạt động khi nó chạy trong một cửa sổ thu nhỏ.

Lây nhiễm qua những file chia sẻ. Sự lây lan những máy tính trên một mạng cục bộ sẽ tìm kiếm máy tính khác thông qua file chia sẻ mở. Khi nào tìm thấy, Nimda sẽ chuyển hệ thông hoặc file ẩn (RICHED20.DLL) lên trên máy tính khác trong bất kỳ thư

mục nào nơi những file văn bản có đuôi .DOS hoặc .EML được tìm thấy. Sau đó, nếu những file này được mở bằng Word, Wordpad, hoặc Outlook những file ẩn RICHED20.DLL cũng sẽ tự động được thi hành. Chính điều này sẽ gây ra sự lây lan cho máy tính đó.

Đồng thời, Nimda sẽ cố gắng thay thế file RICHED20.DLL của Windows sắp xếp và đặt những file có đuôi .EML (đôi khi là đuôi .NWS) vào trong những thư mục nó truy nhập.

Nimda trên máy tính của nạn nhân. Nimda thông thường xuất hiện như một file đính kèm README.EXE với một email, nhưng có thể lộ ra như bất kỳ cái nào khác. File có đuôi .EXE vơi hơn 50 đặc tính trong file gốc cơ bản. Nếu chạy, bản thân nó trước hết sao chép tới một thư mục tạm thời với một cái tên đặt ngẫu nhiên dạng MEP*.TMP (ở đâu có * là ở đó có đại diện những đặc tính ngẫu nhiên). Rồi sau đó từ cái thư mục này có tự mình thực hiện bằng cách sử dụng dòng lệnh tùy chọn “- Dontrunold ”) .

Sử dụng những thao tác số học sẽ giúp con sâu xác định liệu xem nó có thể xóa file (trong thư mục tạm). Nếu mà làm được thì con sâu sẽ xây dựng được công cụ truyền nhiễm sơ cấp của nó: một MIME được mã hóa sao cho có thể sao chép chính nó cho những tin nhắn nhiều phần mà có thể gắn vào. Những con sâu mới này sẽ được gắn cho

một cái tên ngẫu nhiên và được cất giữ trong một thư mục tạm thời. Bây giờ thì nó sẵn sàng để thực thi công việc.

44

Cuối cùng, con sâu sao chép chính nó tới RICHED20.DLL, trong thư mục Windows\System, và đặt file ẩn vào hệ thống. Khi đó Nimda được thực thi tìm kiếm những tài nguyên mạng dùng chung và bắt đầu quét những file được chia sẻ. Có một số file có phần mở rộng .DOC và .EML nó đang tìm kiếm, khi được tìm thấy, RICHED20.DLL được sao chép tới thư mục của chúng sao cho nó sẽ được chạy khi một thành phần OLE được cầm trên máy tính từ xa. Điều này, sau đó sẽ gây nên quá trình truyền nhiễm trên máy tính từ xa.

Một vài bản sao của con sâu làm một số việc sau:

Nó sửa đổi khóa [Software \ Microsoft \ Windows \ CurrentVersion \ Explorer\Advanced] để những file ẩn không còn nhìn thấy được. Điều này sẽ che dấu con sâu trong Explorer.

Nó tạo thêm tài khoản Guest trên hệ thống bị lây nhiễm và ghép tài khoản Administrator và Guest thành nhóm đặc biệt. Sử dụng điều này nó sẽ tạo ra chia sẻ ổ " c:\” với đầy đủ những quyền truy cập đặc biệt.

Nó xóa những khóa con từ khóa [ SYSTEM \ CurrentControlSet \ Servieces

\lanmanserver \ Shares \ Security ] mà tác dụng việc làm đó là vô hiệu hóa được sự chia sẻ an toàn.

45

Chương 3. PHÒNG CHỐNG VIRUS

3.1. KỸ THUẬT NHẬN DẠNG VIRUS

Một cách tương đối có một số kỹ thuật nhận dạng virus như sau [5]:

3.1.1. Nhận dạng chính xác mẫu (Signature based delection)

Là công việc nhận dạng chính xác các virus khi các Anti Virus (AV) đã có mẫu file của virus đó. Kỹ thuật này có thể mô tả đơn giản như sau: các file cần kiểm tra virus được phân tích và so sánh với mẫu virus đã biết trước, nếu phát hiện một đoạn mã virus thì file đó có thể bị lây nhiễm virus và phần mềm thực hiện biện pháp loại bỏ virus khỏi

file bị lây nhiễm.

Kỹ thuật nhận dạng chính xác mẫu virus khiến cho các phần mềm liên tục phải cập nhật cơ sở dữ liệu để có khả năng nhận biết các loại virus mới cùng các biến thể của nó.

Toàn bộ các phần mềm diệt virus đều sử dụng kỹ thuật này để quét virus. Số các

mã nhận dạng càng lớn thì khả năng diệt virus của AV ấy càng cao.

Tất cả các kỹ thuật nhận dạng khác ra đời chỉ đều với mục đích bổ trợ cho những

thiếu sót của kỹ thuật nhận dạng này.

Ưu điểm của kỹ thuật nhận dạng chính xác mẫu virus:

-Độ chính xác của việc nhận dạng virus cao, ít nhầm lẫn.

-Kết quả của việc diệt virus tốt hơn. Các kỹ thuật nhận diện tương đối chỉ cho phép nghi ngờ một file có phải là virus hay không. Nhận diện chính xác cho phép loại bỏ các triệu chứng đi kèm với virus, khôi phục lại hệ thống.

Nhược điểm của kỹ thuật nhận dạng chính xác mẫu virus:

-Khuyết điểm lớn nhất của kỹ thuật nhận dạng chính xác mẫu là không thể đối

phó được với các virus mới hoặc chưa xuất hiện khi chưa có mẫu để nhận diện.

- Khối lượng cơ sở dữ liệu để lưu trữ các mẫu virus lớn, làm cho kích thước của

các phần mềm diệt virus lớn.

- Kỹ thuật này đòi hỏi phải cập nhật cơ sở dữ liệu liên tục nên mất nhiều chi phí

về thời gian, tiền bạc, công sức.

46

3.1.2. Nhận dạng theo mã đại diện

Bản chất của một file bất kỳ thật ra là một chuỗi binary dài, nên chúng ta có thể coi chúng là một chuỗi string và tiến hành lấy mã hash của file. Do tính chất của mình, mã hash này gần như là duy nhất. Khi chúng ta đã có mẫu của 1 virus chúng ta sẽ có thể

ấy được từ mẫu đó một mã hash.Khi đó việc nhận dạng một file có phải là virus hay không chính là việc tạo mã hash file đó rồi so sánh hash đó với hash mẫu virus. Có hai cách lấy nhận dạng theo mã hash là: lấy hash theo toàn file và lấy hash theo một phần thông tin quan trọng.

3.1.2.1. Lấy đại diện theo toàn file

Cách đơn giản nhất để tạo bản nhận diện đặc trưng cho một mẫu virus là tính hash đặc trưng cho cho toàn bộ file mẫu. Các thuật toán hash thường được sử dụng

trong trường hợp này là MD5, SHA1, SHA256 ... có xác xuất trùng lặp đủ thấp để có thể sử dụng làm bản nhận diện đặc trưng cho một file.

Ưu điểm:

- Cách thực hiện đơn giản .

- Mã nhận dạng MD5 của virus được cung cấp miễn phí trên mạng tại nhiều

website chuyên nghành.

Nhược điểm:

Chi phí tính toán cao, thời gian tính hash chậm, nhất là với file có kích thước lớn.

Nhược điểm này bộc lộ rõ khi quét virus cho tất cả các file trong hệ thống.

3.1.2.2. Lấy đại diện theo một phần thông tin quan trọng

Để khắc phục nhược điểm trên người ta đã cải tiến bằng cách chỉ tính hash của một phần thông tin quan trọng nào đó của file .Ví dụ đối với file thực thi (.exe, .com, .dll, .sys ….) phần thông tin quan trọng chó thể là PE header (Portable executable), vùng nhớ xung quanh Entry Point của chương trình.Việc lựa chọn vùng thông tin nào là quan trọng phụ thuộc vào chiến lược riêng của từng hãng AV

Ưu điểm:

- Đã cải tiến được tốc độ lấy hash đáng kể so với phương pháp lấy hash toàn file.

Nhược điểm:

- Cài đặt phức tạp hơn phương pháp lấy hash toàn file.

47

- Không phải tất cả các định dạng file đều có thể lựa chọn được vùng chứa thông

tin quan trọng, đặc trưng của nó, chỉ có thể áp dụng với một số định dạng nhất định.

3.1.3. Scan theo string

Đây là cách cổ điển nhất và vẫn được sử dụng phổ biến trong hầu hết các AV

hiện nay.

Tại vị trí offset nhất định:

3.1.3.1. Xét theo offset tĩnh hoàn toàn

Ở trong cách này thì chỉ đơn thuần xác định string nào, tại vị trí offset là bao nhiêu, ta sử dụng sign này để nhận dạng một file có phải là virus hay không. Nguyên tắc chọn string để nhận ra đâu là virus thường dựa vào tính đặc thù của từng virus mà string được chọn có thể khác nhau.

Ưu điểm: cách thức update một sign và scan khá dễ thực hiện.

Nhược điểm: cách scan này khá bị động với họ virus, ví dụ nếu tìm cách chèn thêm hay xóa 1 byte trong file binary của virus (vẫn phải đảm bảo virus chạy được) mà byte này nằm ở trước phần offset sign thì tất yêu phương pháp này không thể nhận ra mẫu virus sau khi bị thay đổi.

3.1.3.2 Xét theo vị trí offset tương đối

Ở cách này địa chỉ offset được tính dựa vào một thành phần nào đó (như Entry

Point, Section thứ mấy ..)

Việc xét như thế này có thể mở rộng ra như offset: Entry Point + Số nào đó

Sau đây chúng ta sẽ xem xét một ví dụ với việc so sánh cấu trúc 2 biến thể khác

nhau của dòng virus: w32.funnyIM.worm

Ban đầu chúng ta xác định địa chỉ Entry Point của 2 mẫu virus:

48

Chúng ta quan sát hình sau:

Hình 1.String của 2 mẫu virus

Chúng ta sẽ có 2 string tương đồng, nhưng ở 2 offset khác nhau (từ sau, mỗi khi

nhắc đến các string từ file nhị phân, tôi sẽ viết dạng chuỗi các số hexan (thập lục phân) để tiện quan sát):

Nhìn 2 bảng số liệu trên chúng ta có thể tạo một mã nhận dạng chung cho cả 2

virus này là:

67

63

6F

69

00

75

64

String: 6E Offset: Địa chỉ Entry Point + 60

Ưu điểm:

- Việc mở rộng như thế này sẽ làm mở rộng dải virus được nhận dạng. Ví dụ khi chỉnh sửa một số bytes như cách bên trên thực hiện nhưng nếu sau vị trí Entry point như cũ và vẫn còn tồn tại các byte như ban đầu thì vẫn có thể nhận ra bằng sign đã cập nhật theo cách này.

49

Nhược điểm:

-Việc cập nhật đòi hỏi nhiều thông tin hơn phương pháp offset tĩnh

- Scan engine phải có cơ chế làm việc phức tạp hơn để thích ứng với cơ chế scan

này.

- Do phương pháp này lấy vị trí offset dựa vào một phần thông tin nào đó của

một định dạng file thích hợp nên bị giới hàn một số định dạng file.

3.1.4. Nhận dạng hành vi đáng ngờ

Nhận dạng các hành vi đáng ngờ là một chức năng "thông minh" mà không phải bất kỳ phần mềm diệt virus nào cũng có. Hiểu một cách đơn giản thì phần mềm diệt virus sẽ theo dõi sự hoạt động bất thường của hệ thống để có thể phát hiện các virus chưa được biết đến trong dữ liệu của nó hoặc các phần mềm độc hại để từ đó đưa ra

cảnh báo người sử dụng, cô lập virus để sẵn sàng gửi mẫu đến hãng bảo vệ phân tích và cập nhật vào bản nâng cấp cơ sở dữ liệu kế tiếp.

Chức năng này ở các phần mềm diệt virus thường cho phép lựa chọn kích hoạt hoặc không, mức độ hoạt động (sử dụng ở mức độ hoạt động tích cực, hoạt động trung

bình ở mức đề cử, hay hoạt động ở mức độ thấp - mặc định thiết lập thường là kích hoạt sẵn ở mức độ đề cử) bởi đa số chúng có thể chiếm tài nguyên và làm chậm hệ thống đối với các máy tính không đủ mạnh.

3.1.5. Kiểm soát liên tục

Phần mềm diệt virus máy tính thường thực hiện kiểm soát liên tục theo thời gian thực để bảo vệ hệ thống. Hình thức kiểm soát liên tục sẽ quét virus mọi file mà hệ thống

truy cập đến, mọi file ngay từ khi bắt đầu được copy vào hệ thống thông qua hình thức nhận biết so sánh mẫu và theo dõi hành động đáng ngờ.

3.1.6. Kết hợp các phương thức

Nếu chỉ đơn thuần sử dụng kỹ thuật so sánh mẫu thì một phần mềm diệt virus sẽ thất bại bởi chúng chỉ giải quyết hậu quả các file bị nhiễm chứ chưa tìm đến nguyên nhân dẫn đến file bị nhiễm. Khi sử dụng một số phần mềm chưa đủ mạnh bạn sẽ nhận thấy trường hợp: Phần mềm đã diệt được hoàn toàn virus trong máy, nhưng ngay sau khi phiên khởi động kế tiếp của hệ điều hành, phần mềm lại phát hiện ra virus chính

virus đó. Đây có thể không phải là phần mềm nhận dạng được nhưng không diệt được, mà là virus lại được lây nhiễm trở lại bởi phần mềm đã không thể giám sát quá trình khởi động hệ điều hành ngay từ khi bios trao quyền điều khiển.

50

Chính vì vậy, phần mềm cần phải kết hợp mọi phương thức để kiểm soát và ngăn chặn các hành vi của virus. Virus có thể đặt các dòng lệnh trong registry để lây nhiễm virus từ một file nén nào đó hoặc vô hiệu hóa phần mềm diệt virus; Cũng có thể virus thiết lập tải về ngay khi sử dụng trình duyệt để kết nối vào mạng Internet. Do vậy phần mềm diệt virus cần phải kết hợp mọi phương thức để ngăn chặn virus. Chính những yếu tố này làm lên sự khác biệt giữa các phần mềm diệt virus hiện nay, không lẫn nó với vô vàn phần mềm diệt virus khác khi mà ngay một sinh viên cũng có thể viết một phần mềm diệt virus nếu chịu khó sưu tầm các mẫu virus trên mạng Internet hiện nay.

3.2. CÁC BƯỚC TIẾN HÀNH TÌM VÀ DIỆT VIRUS

3.2.1. Dò tìm

Đây là bước quan trọng nhất cho các bước tiếp theo, vì không thể chữa trị nếu

không biết hệ thống có bị nhiễm virus hay không, hay là nhiễm lọa virus nào. Việc tìm kiếm trước hết phải thực hiện trong bộ nhớ vì một khi virus thường trú nắm quyền điều khiển hệ thống sẽ dẫn đến sai lạc thông tin trong các tác vụ truy xuất đĩa tiếp theo. Sau đó mới tiến hành trên đĩa. Sự tồn tại của virus gắn liền với sự tồn tại của một vài dấu hiệu đặc biệt.

Trong bộ nhớ

Đối với virus macro và TF-Virus

Việc quét bộ nhớ là không cần thiết cho nên có thể bỏ qua, còn đối với B-Virus và RF-Virus công việc này lại rất cần thiết. Việc dò tìm bao gồm dự báo về khả năng xuất hiện một virus mới, đưa ra chính xác loại virus đã biết trong vùng nhớ. Việc dò tìm

trong bộ nhớ có thể qua các bước.

Đối với B-Virus:

So sánh tổng bộ nhớ BIOS báo cáo với toàn bộ bộ nhớ mà chương trình có được sau khi tự kiểm tra sự chênh lệch. Dấu hiệu chênh lệch bộ nhớ cũng chưa đủ để kết luận có sự tồn tại của virus, mà là cơ sở để tiến hành bước hai vì số chênh lệch cũng có thể là do một chương trình bình thường làm hoặc RAM bị hỏng một phần.

Bắt đầu từ địa chỉ của vùng cao, tiến hành dò tìm bằng kỹ thuật quét: dò tìm đoạn mã đặc trưng của Virus trong vùng cao. Mọi sự tìm thấy đều có thể cho phép kết luận có virus trong bộ nhớ.

51

Trong trường hợp không phát hiện, khả năng tồn tại một B-virus mới vẫn có thể xảy ra. Bằng dấu hiệu bộ nhớ bị thiếu hụt, ngắt13h trỏ về vùng nhớ thiếu hụt và vùng này có mã nguy hiểm thì có thể kết luận tồn tại B-Virus.

Đối với RF-Virus

Có thể dùng kỹ thuật quét dò tìm mã đặc trưng của virus từ địa chỉ thấp cho đến cao hoặc dùng phương pháp gọi ngắt để nhận dạng mà chính các virus cài đặt để tự nhận diện nó trong bộ nhớ.

Trong trường hợp không phát hiện, khả năng tồn tại một RF-Virus mới vẫn có thể xảy ra. Bằng dấu hiệu ngắt 21h trỏ về vùng nhớ có mã nguy hiểm thì việc kết luận có RF-Virus mới là khá chính xác.

Trên Đĩa

Việc dò tìm trên đĩa phải thực hiện sau khi kiểm tra bộ nhớ không có virus hoặc

nếu có thì đã được khống chế.

Như đa số các chương trình chống virus khác chương trình cũng áp dụng phương pháp quét tìm đoạn mã đặc trưng để phát hiện virus. Đầu tiên là quét vùng Boot để tìm

B-Virus, sau đó quét các file để tìm F-Virus, Trojan và Worm. Để quét vùng Boot dùng ngắt 13h chức đọc sector 02h của BIOS đọc vào bộ đệm và tiến hành quét tìm mã virus đặc trưng. Để quét file dùng các chức năng truy xuất file của ngắt 21h: chức năng mở file 03Dh, sau đó dùng chức năng đọc file 03Fh vào bộ đệm rồi cũng tiến hành quét tìm mã virus.

3.2.2. Diệt virus và khôi phục dữ liệu

Trước khi diệt virus trên đĩa mà bộ nhớ lại có virus thường trú thì chương trình sẽ tiến hành khống chế virus trên bộ nhớ nếu cần thiết và có thể. Tuy nhiên, khởi động lại máy tính bằng một đĩa hệ thống sạch để diệt virus vẫn là biện pháp an toàn nhất.

3.2.2.1. B-Virus

Nhiều người cho rằng việc diệt virus và khôi phục đĩa chỉ đơn giản là ghi đè một Boot sector sạch lên Boot sector cũ có virus. Tuy nhiên, nếu Boot sector của đĩa có nhiệm vụ đặc biệt thì rất khó thực hiện, đó cũng chưa kể đĩa có bản tham số mà chỉ cần bị virus làm sai lệch chút ít cũng dẫn đến trường hợp không kiểm soát được đĩa (việc

này hợp lý nếu Boot sector sạch chính là Boot sector của đĩa được cất giữ trước đó). Vì vậy, cách tốt nhất là phải khôi phục Boot sector, trong trường hợp không thể khôi phục lại được mới tiến hành ghi đè một Boot sector sạch. Các bước tiến hành bao gồm:

52

Căn cứ vào loại đĩa (đĩa cứng hay mềm) và loại virus tiến hành giải mã xác định

nơi cất giữ Boot sector nguyên thủy.

Đọc Boot sector nguyên thủy vào bộ đệm bằng ngắt 13h chức năng đọc sector

02h của BIOS và kiểm tra tính hợp lý của nó.

Trong trường hợp việc kiểm tra là chính xác mới bắt đầu ghi đè vào Boot sector

có virus bằng ngắt 13h chức ghi sector 03h của BIOS.

Đối với loại DB-Virus, việc khôi phục đĩa còn có thể đi kèm với việc giải phóng một số liên cung bị đánh dấu bỏ trên đĩa nếu virus dùng phương pháp định vị FAT. Cách giải quyết tốt nhất đối với việc này là: nên làm những điều virus đã là nhưng ngược lại.

3.2.2.2. F- Virus

Virus macro: việc diệt đơn giản là xóa các macro của virus (dùng chức năng ngắt

040h của ngắt 21h).

F-Virus truyền thống: Giải mã virus để khôi phục dữ liệu của chương trình đã bị

virus chiếm giữ sau đó cắt bỏ mã virus ra khỏi chương trình.

Đối với các file dạng .COM, .BIN:

Nếu virus này lây theo kiểu nối đuôi file và trả lại các byte đầu bị virus chiếm giữ, dời con trỏ file đến đầu mã virus (dùng chức năng 042h của ngắt 21h) rồi cắt khỏi file bằng ngắt 21h của chức năng ghi file 040h của DOS.

Nếu virus lây theo kiểu chèn đầu: đọc file ngay từ sau phần mã virus vào bộ nhớ bằng ngắt 21h của chức năng đọc file 03Fh rồi tiến hành ghi lại (dùng chức năng 040h của ngắt 21h).

Nếu virus lây theo kiểu đè vùng trống: định vị và trả lại các byte đầu bị virus

chiếm giữ, dời con trỏ file đến mã virus rồi xóa chập.

Đối với các file dạng .EXE: cách diệt cũng tương tự như đối với file .COM. Nếu

virus cất dữ Exe header cũ của file thì việc khôi phục chỉ đơn giản bằng cách trả lại phần này cho file, ngược lại phải tính toán định vị một số yếu tố của bảng Exe header như dấu hiệu nhận dạng file .EXE: ‘MZ’, tổng số trang, số byte lẻ trong trang cuối của file.

53

3.2.2.3. Trojan

Trojan chỉ thực hiện lây nhiễm tới máy tính mà không lây nhiễm vào file trong máy tính. Do đó khi thực hiện diệt Trojan chúng ta không cần qua tâm tới xem có bản sao nào của nó hoạt động trong hệ thống không.

Trojan có đặc điểm là muốn hoạt động được thì nó phải được kích hoạt. Một

cách hữu hiệu để diệt Trojan là không cho phép nó được kích hoạt.

Thực hiện diệt Trojan theo cách này chúng ta phải tìm hiểu những phương pháp

mà Trojan có thể sử dụng thông qua đó nó được kích hoạt.

Một số phương pháp mà Trojan thường sử dụng để được kích hoạt là:

(Ví dụ với file khởi động là Trojan.exe)

- Trong các thư mục mà tại đó các file có thể được kích hoạt khi khởi động

Windows:

C:\ Windows\ Start Menu\ Programs\ startup\ Trojan.exe.

- Trong file C:\ windows\ Win.ini tại dòng lệnh:

Load=Trojan.exe

Hoặc run=Trojan.exe

- Trong file c:\ windows\ system.ini sau dòng lệnh shell

Shell=Explorer.exe chạy

- Trong Autoexec.bat

C:\....\Trojan.exe

- Trong thư mục khởi động của Windows:

C:\ …\ Trojan.exe

- Tạo khóa trong Registry:

[HKEY_LOCAL_MACHINE

\ Software

\ Microsoft

\Windows

\

CurrentVersion\ Run]

“Trojan”=”c:\…\ Trojan.exe”

[HKEY_LOCAL_MACHINE \ Software \ Microsoft\ Window \ CurrentVersion\

RunOnce]

“Trojan”=”c:\...\Trojan.exe”

54

[HKEY_LOCAL_MACHINE

\ Software

\ Microsoft

\ Windows

\

CurrentVersion\ RunServices]

“Trojan”=”c:\....\Trojan.exe”

[HKEY_LOCAL_MACHINE

\ Software

\ Microsoft

\ Windows

\

CurrentVersion\ RunServicesOnce]

“Trojan”=”c:\....\Trojan.exe”

[HKEY_LOCAL_USER \ Software \ Microsoft \ Windows \ CurrentVersion\

Run]

“Trojan”=”c:\....\Trojan.exe”

[HKEY_LOCAL_USER \ Software \ Microsoft \ Windows \ CurrentVersion\

RunServices]

“Trojan”=”c:\....\Trojan.exe”

- Trong Resistry Shell Open với key là “%1%*”

[HKEY_CLASSES_ROOT \ exefile \shell\ open\ command]

[HKEY_CLASSES_ROOT \ comfile \shell\ open\ command]

[HKEY_CLASSES_ROOT \ batfile \shell\ open\ command]

[HKEY_CLASSES_MACHINE \ SOFTWARE \ Classes \ exefile \ shell \ open \

command]

Trojan.exe = “%1%*”

- Trong một số ứng dụng mà cho phép một số chương trình có thể chạy:

+Trong ICQ:

[HKEY_CURRENT_USER \ Software \ Mirabilis \ ICQ \ Agent\ Apps\]

+Trong ActiveX:

[HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Active Setup \ Installed

Components \ KeyName]

StubPath=c:\...\Trojan.exe

Loại bỏ Trojan ta thực hiện xóa tất cả các lệnh có file mà Trojan sẽ được chạy

khi khởi động máy tính (ở đây ví dụ là file Trojan.exe)

55

3.2.2.4. Sâu Worm

Để diệt sâu Internet ta thực hiện lần lượt các quá trình sau:

- Nghiên cứu các thông tin về sâu.

- Thực hiện loại bỏ phần lây nhiễm ra khỏi các file lây nhiễm.

Mỗi sâu Internet có đặc trưng riêng của nó, cho nên điều cần thiết là phải thực hiện việc nghiên cứu về sâu Internet: tên file thực thi, đường dẫn của file thực thi, những tác động của nó tới các file khác trong hệ thống, các file mà nó tạo ra và phần mã đại diện của mỗi con sâu Internet.

Thông qua mã đại diện của sâu Internet ta có thể thực hiện việc quét file tìm và

diệt sâu Internet đó.

3.3. THỬ NGHIỆM MỘT SỐ CHƯƠNG TRÌNH

3.3.1. Thử nghiệm chương trình tạo virus

Em xin trình bày một chương trình thử nghiệm bằng ngôn ngữ c++. Chương

trình làm mất các biểu tượng trên màn hình Desktop.

#include #include using namespace std; int main(){ system ("color 0f"); Maias:; system ("cls"); Sleep(50);

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,(PVO ID)"C:\\Bluehills.JPEG",SPIF_UPDATEINIFILE); HWND hwnd =::FindWindowA("Progman","Program Manager");

hwnd = GetWindow(hwnd,GW_CHILD); hwnd = GetWindow(hwnd,GW_CHILD); if (!IsWindowVisible(hwnd)){ ShowWindow(hwnd,SW_SHOWNOACTIVATE); } else ShowWindow(hwnd,SW_HIDE); }

56

Màn hình trước khi chạy chương trình :

Màn hình sau khi chạy chương trình làm mất biểu tượng trên Desktop:

57

3.3.2. Sử dụng chương trình diệt virus

Chương trình hiển thị lại các biểu tượng trên màn hình desktop #include #include using namespace std; int main(){ system ("color 0f"); Maias:; system ("cls"); Sleep(50);

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,(PVO ID)"C:\\Blue hills.JPEG",SPIF_UPDATEINIFILE);

HWND hwnd =::FindWindowA("Progman","Program Manager"); hwnd = GetWindow(hwnd,GW_CHILD); hwnd = GetWindow(hwnd,GW_CHILD); if (!IsWindowVisible(hwnd)){ ShowWindow(hwnd,SW_SHOWNOACTIVATE); } else ShowWindow(hwnd,SW_SHOW); } Màn hình Desktop sau khi chạy chương trình diệt virus:

58

Kết luận

Kết quả đạt được của khóa luận:

1. Khóa luận đã tìm hiểu và nghiên cứu qua tài liệu để hệ thống lại các vấn đề

sau:

- Tổng quan tình hình an ninh mạng của một số nước trên thế giới và Việt Nam.

- Phân tích những nguyên nhân kỹ thuật gây ra sự mất an ninh mạng trên mạng

máy tính bao gồm: nguyên nhân sẵn có trong hệ thống và nguyên nhân cố ý.

- Phân tích quá trình tấn công vào máy tính của hacker.

- Trình bày phân loại và phân tích hoạt động của B-Virus, F-Virus, Macro Virus,

Trojan, Internet Worm .

2. Trình bày một số phương pháp phát hiện và diệt virus. Thử nghiệm một số

chương trình tạo và diệt virus .

Hướng nghiên cứu tiếp theo:

Lĩnh vực nghiên cứu phòng chống virus đang là một lĩnh vực thời sự cấp bách hiện nay. Các phương pháp phòng chống virus dang được nghiên cứu, phát triển nhằm phòng chống virus hiệu quả. Hướng nghiên cứu tiếp theo của khóa luận là:

- Hoàn thiện thêm chương trình thử nghiệm.

- Tìm hiểu thêm về các loại virus khác.

59

Tài liệu tham khảo

[1] HTTP:// www.bkav.com.vn/

[2] HTTP://www.echip.com.vn/

[3] HTTP://www.hvaonline.net/

[4] HTTP://www.symantic.com/

[5] HTTP://virus.com/

[6] Ts. Nguyễn Viết Thế. Toàn cảnh an ninh mạng Việt Nam 2007 và dự báo an ninh mạng năm 2008.Tr 2-14.

60