1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn cơ chế bảo mật mã thực thi trên linux

66 1 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cơ Chế Bảo Mật Mã Thực Thi Trên Linux
Tác giả Triệu Minh Tuấn
Người hướng dẫn TS. Trương Thị Diệu Tình
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ Thuật Máy Tính Và Truyền Thông
Thể loại Luận Văn Thạc Sĩ
Năm xuất bản 2014
Thành phố Hà Nội
Định dạng
Số trang 66
Dung lượng 1,13 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thư mục melude: bao gồm danh sách các header thư viện được sử dụng dé build mã nguồn kernel, thư mục này cũng bao gồm nhiều thư mục con tương ứng với các kiên trúc cpu khác nhau Thư mục

Trang 1

TRIEU MINH TUAN

CO CHE BAO MAT MA THUC THI TREN LINUX

LUAN VAN THAC SĨ KỸ THUẬT

KY THUAT MAY TINH VA TRUYEN THONG

HÀ NOT - 2014

Trang 2

LOI CAM DOAN

Tôi xin cam đoan để tài nghiên cửu của tôi hoàn toàn đo tôi tự làm dưới sự hướng dẫn

số liệu, kết quả nình bày trong luận

của cô giáo Tiên sỹ Trương Thị Diệu Ianh C:

văn là hoàn toàn trung thực và chưa từng dược công bố trong bắt cứ công, trình nghiên

Trang 3

LỜI CẢM ƠN

Tổ hoàn thành khóa luận này, tôi xin tỏ lòng biết on sâu sắc đến TS Trương Thị Diệu

Từnh đã tận tỉnh hướng dẫn trong suốt quá trình viết khóa luận lốt nghiệp,

'Tôi cũng xin chân thành căm ơn quý Thầy, Cô Viện Công nghệ Thông tia & Truyền thông Trường Đại học Bách Khoa Hà Nội, đặc biệt là các thảy cô trong bộ môn Truyền thông, & Mạng mày tính dä tận tính truyền đạt kiển thức trong thời gian học tập

và nghiên cứu tại đây Với vến kiến thức được tiếp thu trong quá trình học tập và

nghiên cứu không chỉ là nên tăng cho quá trình nghiên cứu khóa luận mà còn là hành

trang qui bau dé tdi bước vào đời một cách vững chắc và tự tín

Tôi cũng xin được gửi lời cảm ơn sự ủng hộ giúp đỡ nhiệt tỉnh của những, anh chị sra

trong lớp củng những người dòng nghiệp, gia dinh và bạn bè những người thân yêu của tôi, những người luôn là chỗ dựa vững chắc cho tôi, đề tôi có nỗ lực quyết tâm

hoàn thành nghiên cửu này

Cuối cùng, tôi xin kính chic Quy Thay cô, Đồng nghiệp, Gia đình đổi đảo sức khỏe và

thành công trong con đường sự nghiệp cao quý

Tôi xin trân trọng cắm ơn!

Hoe vién

Trigu Minh Tuân

Trang 4

CHƯƠNG 1 - NHÂN LINUX VA CO CHE THUC THI UNG DUNG

1.1 TÔNG QUAN VỀ NHÂN LIKUX

1.1.1 Định nghĩa nhân linux

1.1.2 Thiết kê và thành phần Lime: Kernel

1

LL4 Ma nguén linux kernel

2 TIN TRINH VA FILE THUC THI TRONG LINUX, 22

1.2.1 Tiến trình

1.22 Lời sợi

1.2.3 Mã thực thì (Exeutable code)

1.2.4, File thực thi (Executable File}

1.2.5 Thư viện hd tro (Shared libraries)

1.2.6, Định dạng file thực thi

1.2.7 Quả trình thực thí một Jile

CHƯƠNG 2 - CODE SIGNING VÀ BỊNH HƯỚNG TỈCH HỢP

2.1 CODE SIGNING V4 CAC NGHIEN CTU LIEN QUAN 34

2.1.1 Định aghia code signing

2.1.2 Các nghiên ctu code signing

2.2 PHANTICH VA DINH HUGNG GTAT PHAP 46

CHUONG 3 - TICII IGP CODE SIGNING VAO NIEAN LINUX

Trang 5

KẾT LUẬN

TÀI LIỆU THAM KHẢO

Trang 6

DANH MỤC HÌNH VẼ

Tỉnh 1 Tiser space & Kemel space

Hình 2 Tầng trung gian giữa uscr & filesystem

Hình 3 Kernel Subsystem

Ilinh 4 Timeline of Linux kemel version

Hinh 5 The linux kemel archives website (www kernel.org)

Hình 6 Câu woe thu muc con chira mé ngudn linux kernel

Hinh 7 Cau trac thu muc linux kernel phién ban v3.x

Hình 8 Mã nguồn linux kernel sexy

Hình 9 Giao tiếp Application voi Hardware qua lời gọi hệ thông

Hình 10 Mê tả lời gọi hệ thẳng,

Hình 11 Định dạng ELE ¬—

Hình 12 Cơ chế fork-and-exec ¬—

Hình 13 Tạo tiễn trình đưới góc độ hệ thông,

11inh 14 Lung khởi tạo cấu hình thực thi mới

Hình 15 Mỏ binh ký dữ liệu ¬—

Hình 16 Mô bình xác mình chứ ký

Llinh 17 Cảnh bảo của Morilla khi cải đặt phần mễm

Hình 18 Xeode code sipning, ¬—

Trang 8

PHAN MO DAU

Tiện nay, sau khi một chương trình ứng dựng được đưa ra và lưu hành trên mạng, rất

khó tránh khỏi nguy cơ bị các backercracker tấn công, chỉnh sửa, thay đổi nội dung

nhằm lợi dụng chơ các mục dich x4u như phát tán virus, cải đặt phần mỗm theo đối, botnet, đánh cắp đữ liệu cá nhân Các tình huỗng này thường xuyên gặp phải với các

nỗi dùng hệ điều hành Microsoli Windows và đã gây Huột bại nặng nễ cho cả người

dùng và doanh nghiệp trong vả ngoài nước Đặc biệt phải kể đến sự kiện đầu năm

2012, mệt nhóm hacker có tên là Sinh Tử Lệnh đã đính kèm mã độc vào bộ cải đặt

phẩn mềm gõ tiếng việt uaikey, một phần mềm khả phổ biến với cộng dồng người dùng Windows trong và ngoài nước, từ đó, lợi đựng những máy tỉnh này đi tắn công từ

chốt địch vụ các website, điễn đàn doanh nghiệp trong nước, phải kế đến đó lá vụ tắn công vào website báo điện tứ Vietnaunnet và website công ty an ninh mạng Bkav, ché

trong vòng chưa đây 12 tiếng, cả hai website đã hoàn toàn tê liệt

Rất nhiều nghiên cửu được dưa ra nhằm khắc phục tình trạng trên, trong đó cỏ giải

phap code signing, Code Signing là phương pháp “ký điện lử” vào các mã thực thí để

dâm bảo rằng các mã thực thí nảy chưa bị chỉnh sửa, thay dỗi nội dung tính từ thời điểm được ký

Code Signing đã được cài đặt trên nhiều nên tảng khác nhau như trên hệ thông định

dạng file thực thi của MierosoR Windows, NT Eramework, các ứng dung, Java,

extension của Firefox, trên cáu phiên bản nhân limux cũ (2.6.x ưở về trước) nhưng với các cập nhật nhân mới gắn đây 3.x thi vin chưa có lời giải hợp lý nào cho bai toan Code signing trén hé théng hệ điều hành nay Đây cũng có thế là một lỗ hồng để các

hacker Igi dung va khai thác trên hệ thống các hộ điển hành sử đụng phiên bản nhân

moi nay.

Trang 9

Đây cũng chỉnh là lý do, tác giá lựa chọn dễ tải "Cơ chế bão mật mã thực thi trên Linuz” nhằm mục đích nghiên cứu, bổ sung co chế code sigring lên các phiên bản

nhân linux mới này từ đó hỗ trợ kiểm tra tỉnh toàn vẹn các nội dụng thực thị

Trong thời gian sáu tháng nghiên cứu và tìm hiểu vẻ mã nguắn lim kernel và các vẫn

dễ có liên quan đến tiến trình và file thuc Ohi trên hệ điều hành lnux, luận văn dã đưa

ra được định hướng tích hợp thành công cơ chế oode signing lên phiên bản linux kernel

3.10.10 trong đó, có xử lý kiểm tra các thư viện phụ thuộc có liên quan trực tiếp rong linux kernel.

Trang 10

CHƯƠNG I1 - NHÂN LINUX VÀ CƠ CHE THUC THI

ỨNG DỤNG

1.1 Tổng quan về nhân linux

1.1.1 Dịnh nghĩa nhân ñnux

‘Trong lĩnh vục khoa học máy tính, đặc biệt là trong các nghiên cứu liên quan đến hệ thống, hệ điển hành, thuật ngữ nhân (kernel) dùng để chỉ phần “lõi” của bất cứ hệ thống máy tinh ndo hay nói theo cách khác là phần mềm hỗ trợ người đừng chia sẻ tải

nguyên máy tính Thuật ngũ kernel cũng có thể được biết đến như là phản quan trọng

nhất của hệ diễu hành

Nhân linux (limwx kernel) là phản nhân hệ thống hệ điển hanh Unix, duoc sit dung trên

Tất nhiều các bản phân phối lmux (Linux distribution) (ode hệ diều hành phát triển Lừ

nhân lim) Không như hệ thêng hệ điển hành Windows của Microsoft, nhên linux là mệt ví đụ nổi bội của phân mềm bự đo ma ngudén md (open source soflware)

Phiên bản nhân linux đầu tiên được phát triển vào năm 1991 bởi cậu sinh viên người

Phan Lan dang học chuyên ngành khoa học máy tỉnh trường Linus Tovards, Trong ba năm sau đó, ông tiếp tục nghiên cứu vả cho ra đời phiên bắn Linux 1,0 vào năm 1994

Thiên bản nảy được tung ra thị trường đưới bản quyền của GNU General Public License, đo đó, mã nguồn cla Linux 14 hoan toàn mở, bắt cứ øì cũng có thể lãi và xera

Khỏi dẫu, Linux kemel dược phát triển bởi những con người nhiệt huyết dam mê nghiên cứu Tuy nhiên với những đóng góp từ cộng đồng va ngudi ding, Linux kernel dàng ngày một phát triển và hiện nay dang thu hút sự hỗ trợ đầu tư của các công ty

9

Trang 11

diện toàn hàng dâu trên thể giới như 1BM, HP (Hewlette-Packard) dông thời là một

thách thức cạnh tranh với các hệ điều hành thương mại như Windows của Microsoft

mặc dù số lượng phân cửng được hỗ trợ bởi Linux vin còn rất giới hạn sơ với các hệ điều hành này nhưng với sự ủng hộ nhiệt tỉnh từ cộng đồng, trong một tương lai không

xa, nhược diém nảy hoàn toàn có thế được khắc phục

Tlinh 1 User space & Kernel space

ác hệ điều hành hiện đại thường tách biệt không gian bộ nhỏ ão thành hai phan kernel spacc và user spacc nhằm mục dịch bão vệ các vùng nhớ khỏi các truy cập trái phép,

lỗi hệ thống Kernel space lá phần không gian bộ nhé cho phép linux kernel, module phần mỡ rộng và các module driver thiét bi thuc thi Neuoc lai, user space là phần

10

Trang 12

không gian dễ chạy các phần mềm ứng dụng, thư viện và drivers duge sử dụng đễ

tương tác với kernel Khác với cáo ứng đụng trên Liser spaoe, được nạp trang những không gian địa chỉ ao, linux kernel duye nap vao kernel space trong mét khéng gian

dia chí riêng

Linux kernel c6 thé duge chia thành ba cấp Cấp cao nhất là giao điện các lời gợi hệ thống (System call interface), thực hiện các chức năng cơ bản như dọc ghi Cấp thấp hon la Kernel code, chủa các mã kemel không phạ thuộc vào kiến trúc (the arcluteclure-independent kernel code) 14 phan chung với tất cả các kiến trúc vị xử lý hỗ

trợ bởi Lánux Cấp thấp nhất là phẩn mã phụ thuộc vào kiến trúc (Architecture-

đependent kemel eode), là phần mã được việt riêng cho các kiến trúc phần cứng tương

img

Các thành phần chính của nhân linux bao gồm:

«Giao điện lời gọi hệ thông (System Call Tnterface): cung cập giao diện thực tú

các lời gọi chức năng từ User spacc xuống kernel space Thanh phan nay oé thé phục thuộc vào kiến trủc phản cứng, ngay cá khi sử dụng cùng họ vì xử lý

* Quan ly tién trinh (Process Management): thanh phân tập trung vào việc thực thì các tiền trình Trong kernel, đây dược gọi là các luồng thực tú và thể hiện cơ

chế äo hóa đặc biệt của vi xử lý (mã thực th, đữ liệu, stack và các thanh ghỉ CPU) Qua giao điện lời gọi hệ thống SCT, kernel cng ofp cée APT hé tng vide

tạo, giao tiếp, đống bộ và đừng cắc tiễn trình này Thánh phần này được sử dựng,

để chia sẽ CPL giữa các luông đang hoạt động

I

Trang 13

© Quan ly bé nho (Memory Management): qua module mả phân cửng hỗ trợ dé

quản lý bộ nhớ, bộ nhớ được quản lý trong các trang (thường cỏ kích thước

4KP), bao gồm các phương tiện quản lý bộ nhở cũng như các cơ chế phần cứng

để ảnh xạ giữa bộ nhớ vật lý và bộ nhở ảo

¢ Virtual File System (VFS): cung cấp giao diễn chung để tương tác với các loại

file systems VES cung cấp một lớp trung gian giữa SCI va cac loai File System được Linux hỗ trợ

Virtual File System (VFS)

Phần trên của VFS cung cấp một giao diện các -4PI chung bao gồm các chức năng mở,

đóng, đọc ghỉ Phần đưới của LFS là sự trừu tượng các File System hay định nghĩa

cách mà các chức năng ở lớp trên thực thi Bên cạnh đỏ, buffer cache cung cdp một

tập các chức năng cho tầng hệ thông nhằm tôi tru truy' cập tới các thiết bị vật lý bằng

cách thực hiện cache đữ liệu.

Trang 14

* Network Stack: dua theo một kiến trúc phân lớp theo chuẩn của các giao thức

TCPAP Trong đó, lớp TCP gino tiếp với SỚT thong qua cde socket, ede sockets sung cấp một tập các API cho cdc networking subsystem phục vụ việo quản lý

các kết nói, định hướng đữ liệu tới đích (endpoints)

® Device Drivers: 14 thành phẩn chủ yêu trong mã nguồn linux kerel, đặc lâ các

tích hợp các thiết bị hễ trợ như BlueTooth, 12C, Serial

œ© Architecture-depenđent code: đặc tả các thành phan phụ thuộc vao ha tang phan

System Call Interface (EC

Process Virtual File

‘Hinh 3 Kernel Subsystem

1.1.3 Sự phát triển của Linux Kernel

Các mốc lịch sử quan trọng:

® 1991: Linux kemel dược công bố vào ngày 25 tháng § bởi câu sinh viên 21 tuổi người Phần Lan Linus Benedict Torvards

13

Trang 15

1992: Linux kernel được tái cấp phép đưới giấy phép GNU GPL, ban phân phổi

linux đầu tiên được lạo

1993: Dã có hon 100 developers tham gia phát triển nhân linwx Với sự hỗ trợ

này, kemel hoàn toàn tương thích với môi trường GNU, nơi tập hợp rất nhiều

các ứng dụng tuơng tự Bần phần phối có nhất hiện may Slaekware cũng ra đời

trong năm này

1994: Trong tháng ba, Torvards tuyên bả tất oả các thành phản của nhân đã hoàn thiện: ông cho ra đời phiên bản Tảnux 1.0, phiên bản này chỉ hỗ trợ các hệ may tinh vi xứ lý đơn 1386 Cũng trong năm nảy, các cổng ty Red llat và SUSL

cũng xuất bản bản phân phổi Linux 1.0 của họ

1995: Linux duge port sang hai nén tang DEC Alpha va Sun SPARC Nhiéu năm sau đó, Linux được port sang rất nhiều các nên tảng khác

1996 : Phiên bản Linux kernel 2.0 được xuất bàn, hỗ trợ xử lý nhiều vi xử lý dang thei

1998 ; Rat nhiéu các công ty lớn như IBM, Compaq và Oracle tuyên bố hỗ trợ Linux, giao điện KIDL¿ cũng bắt đầu được phát triển

2003 : Phiên bản Linux Kernel 2.6 được xuất bân được tích hợp rất nhiều các

tỉnh năng xuới như hỗ ượ PAE, hỗ SELinux, Uscr-uode Litux vào nhánh chính

của mã nguằn kernel

2011 : Phiên bản nhân linux 3.0 được xuất bản với hơn 14 triệu đồng code

(14647033) và gần 40000 files trong project ma ngudin

Trang 16

«2014: Tính đến tháng 3/2014, với đội ngũ hỗ trợ không lỏ, công đẳng phát triển

linux kernel di xudt bin phiên bản 3.14 và dang dâu hoền thiện phiên bâu Linux

kemel 3.2

Cách đánh số phiên ban linux kemel

Trong quá trình phát triển, nhân liaux có ba cách đánh số khác nhau

« Cách thử nhất được sử dụng theo định đạng « 1.0» Phiên ban đầu tiên của

kemel 1a 0.01, tiếp đó là 0.02, 0.03, 0.16, 0.11, 0.12 (GPL version), 0.95, 0.96, 0.97, 098, 0.99 và sau đó là L0

«_ Từ phiên bản L0 đến 2.6, cách đánh version theo kiểu « Á.B.C », trong đó A là phiên bản kernel, B là số phiên bán chỉnh stia lin cua kernel (major version), C

là sổ phiên bản chỉnh sửa nhỏ của kernel (minor version) Sẻ phiên bản chỉ được thay đổi khí kemel có sự thay đổi, điều chỉnh lém Đã có 3 lần thay đổi số version là 1994 (version 1.0), 1996 (version 2.0) và 2011 (version 3) Major revision được đánh số theo hệ thống quy luật even-odd system version

tương ứng với phiên bản ổn định) Minor revision được cập nhật lại mỗi khi có

ban cap nhat, fix bugs, thêm tính năng mới vào kemeL

Trang 17

ÑH Lnzit ME truc HE tne Lgdsled 2001/2814

Hinh 4 Timeline of Linux kernel version

16

Trang 18

1.1.4 Mã nguồn linux kernel

Đa số các bản phân phổi của linux đều đính kèm mã nguồn nhân linux trong các bộ cải

đặt của chúng Tuy nhiên đây thường chỉ là các bản kernel tại thời điểm phiên bản phân phổi này được nghiên cứu, chưa phải là phiên bản mới nhất của linux kernel

kemeLorg được biết đến là kho chứa chỉnh của mã nguồn linux kernel, nơi chứa tất cả

các phiên bản mã nguồn linux kernel., cung cấp môi trường cho các nhà phát triển

nhân, bảo trì các bản phân phôi của linux cũng lả server cung cấp những phiên bản linux kernel mới nhật cho cộng đông người dùng linux

Kemel.org hé tro nhiéu giao thire khac nhau để người dùng có thể kết nối và cập nhật

đữ liệu

"_ Giao thức HTTP (https/wvw kemeLorg/pub/)

= Giao thie truyén tai file FTP(ftp://ftp kernel org/pub/)

17

Trang 19

"_ Giao thức dông bộ dữ liệu (rsync:/rsyne.kernel.org/pub/)

Mã nguồn lmux kernel dược tổ chức trong thư mục con /pub/linux/kernel:

weuples a-Feb-2014 - arte 13-Mar-2003 - zolects, 18-5ep~2012 -

sha2Sésuns acc 25-đan-2013 1

Hình 6 Cấu trúc thư mục con chữa mã nguồn Hnux kernel

được sắp xếp theo từng phiên bản, mãi phiên bản một thư mục (v1.0/, v1.1/, v1.2/,

v1.3⁄, v2.0/ ) trong mỗi thư mục là các phiên bản mã nguồn và các bản vá patch

tương ting voi phiên bân dỏ:

18

Trang 20

Cé-Feb-2014 1 74H 13-Feb-2014 3 111H 1% Feb #014 2 age 19-Feb-2014 a Tay 20-Feb-2014 @ 121M 20-Feb-2014 8 B8E

30 Fcb 2011 8 74H

aa gặt

patch-3.0.6.25 33-Oe=-201- 97: 174E

'Hình 7 Cầu trúc thư mục Hmux kernel phiên bẵn x3

Mã nguễn linux kernel được nén theo định dang tar, bao gồm một tập hợp rat nhiéu file

và thư mục

19

Trang 21

XE HJITIN?ZIWYPEDI313175

gERBEÊĐPñ 8 ì›3333ã3jBaA

Hình 8 Mã nguồn linux kernel

Thư mục arch: bao gồm nhieu thư mục con, mỗi thư mục con là một kiên trúc

cpu mã linux kernel hỗ trợ

Thư mục melude: bao gồm danh sách các header thư viện được sử dụng dé build

mã nguồn kernel, thư mục này cũng bao gồm nhiều thư mục con tương ứng với

các kiên trúc cpu khác nhau

Thư mục imit: Thư mục chứa mã nguồn khéi tao kernel

Thu mue mm: thu mục mã nguồn module quản lý bộ nhớ, ứng với mỗi kiên trúc CPU khác nhau, mã nguồn module nay được đặt trong các thư mục con

arch/*/mm (vi dụ: arch/i386/mm/)

Thư mục drivers: thư mục chửa mã nguồn các drivers thiết bị trong kernel

Thư mục ïpc: thư mục chửa mã nguồn module giao tiếp giữa các tiên trình trong

kernel

Thư mục modules: thư mục chứa các module đã được build (từ mã nguồn)

Thư mục fs: thư mục chứa mã nguôn các file system mả kernel hỗ trợ, bao gồm nhiều thư mục con, mỗi thư mục con tương ứng với một loại file system mà linux keel hé tro

20

Trang 22

Thư mục kernel: th mục chửa mã nguồn chính của kernel, ứng với mỗi kiến trúc cpu khác nhau, mã nguồn medule này được đặt trong thư mục cơn

areh/*/kernel

Thư mục net: thư mục chửa mã nguồn các module network trong kernel

'Thư mục lib: thư mục chứa các thư việc của linux kernel, tương tự, ứng với mỗi kiến trủc CPU khác nhau, mã nguồn modnle này được đặt trong các tư mục

son tương thư mục arch: arch/*/lib/

Thư mục seripls⁄: thư mục chủa các soripls được sử dụng khi kemel được cấu hình,

Thr muc Documentation! thu nuạc chữa rât nhiều tài hiệu thông tin mô lả, cân

hinh kemel và các module

hư mục crypfo: thư mục chửa mã ngưồn các cryptographic API được sử dụng

bởi kernel

Thư mục seeurity/: thư mục chứa mã nguồn của các module bảo mật trong linux

bao gồm SE Linux (Security-Enhanced Linux), cé¢ module network hooking

'Thư mục sound/: thư mục chứa mã nguồn driver ârn thanh và các thiết bị tương,

Trang 23

1.2, Tiến trinh va file (hue thi trong linux

Tiền trình là thành phần chỉnh trong bắt cứ hệ điều hành da nhiệm nào, tiến trình thực thi các tác vụ trong hệ thông để giải quyết các bài toán do người dúng yêu cầu lo đỏ,

để nghiên cứn bảo mật mã thực thi, trước hết chủng ta phải nắm được tổ chức tiền trình

va cae file thye thi trong linux kemel

1.2.1 Tiên trình

Theo lý thuyết hệ điển hành trong khoa học máy tính: tiến trình được định nghĩa

iu sau:

“A process is an instance of a program in execution”

“Tiển trình là một inalance của một chương trình đang được thực thí"

Hiểu một cách dơn giân hơn, tiển trình là ánh xạ của một chương trình thực thi (dữ liệu trên ổ cứng) lên bộ nhớ Sâu hơn nữa, có thế hiểu tiên trình là một thực thể tiêu

tốn các tải nguyên hệ thống như CPU, bộ nhớ

Tiên trình ofing có quan hệ cha-eơn: một tiễn trình có cha là tiến trình thực hiện lời

gọi tạo ra nó, khi dó, tiễn trình nảy lá tiền trình con của tiền trình kia và ngược lại

hi một liền Irình được lạo, tiên trình mày đông nhất với tiến trình cha của nó Nó

nhận một bản sao logic không gian dịa chỉ nhớ tử tiến trình cha vả thực thi củng

một mã thực thi như tiến trình cha nhưng bắt dau từ cáo thục thí sau lời gọi hệ

thống tạo tiến trình (system call), Mặc dò tiến trinh cha và tiên trình cơn có †

sử dụng chung một trang nhớ dễ clrửa mã thực thì của chương trinh (program code)

nhưng mỗi tiến trinh đêu sử dụng các bản sao dữ liệu (bộ nhớ stack và heap) riêng,

nên thay đỗi từ tiễn trình con không ảnh hưởng tới tiễn trình cha và ngược lại

22

Trang 24

'Trong mã nguồn của lnux kernel, tiễn trình thường, dược định nghĩa như các tasks

hoặc các threads

1.2.2 Lời gọi hệ thông (System call)

Hệ điều hành thường cung cấp cho các tiên tình chạy trong TJser Mode một lập cac interface để tương tác với các thiết bị phần cửng như PL, ỗ cứng, máy im

trằng bỏ sung vào giữa lâng ứng dụng và phần cứng thêm một lớp trung gian:

Executable

- Program Library Functions |x »| System Calls

Kernel

[zt

‘Hinh 9 Giao tiếp Application vol Hardware qua Idi gol hé thong

Các lời gọi hệ thống (syslem calls) được đội giãa ting dung va kernel, la thanh phan

“chuyén mach” tir Usermode > Kernelmode dé xit b) các tương tácvới tài nguyen

phần cứng

hò đó, các chương trình ứng đụng có tính chất portable hon, dé ding bién dich va

thực thì trên nhiều kemel khác nhau có củng chúng inlerfaces

23

Trang 25

khi một tiên trinh từ LJser mode thực hiện lời gợi hệ thông, CPU dược chuyên quyền cho Kemel Mede và bắt đầu thực thị các hàm chức năng tương ứng trong nhân:

tmg (System call serviee routine), sau khi thành phần này thực biện xong, các câu hình

đữ liệu nêu trên được khôi phục từ Kernel Suack và CPU được chuyỄn tro lai User

made

1.2.3 Ma thuc thi (Excutable code)

Mã thực thi có thẻ được hiểu là mật dạng phân mềm có thế “chạy” được trong máy tinh

Hay nói các khác đó là các chuối đữ liệu được máy tính hiểu và biên địch thành các tác

vụ tính toán, thường thì chủng ta biểu đây là các mã máy (machine language)

Trong một hệ điều hành các mã thực thí thường là các chuối nhị phân nằm trong các

file thực thi (executable file) và thư viện hỗ trợ (ghared library) Khi có một thao táo

24

Trang 26

kích hoạt nÏư người dùng tương tác trén giao điện quan lý, ra lệnh qua các cương,

trình shell, các znã thực thi này được nạp vào bộ nhớ và được dịch thành mã máy qua

con trổ lệnh

1.2.4 EHc thực thi (Exccutablc Fic}

File thực thủ là chương trình nằm trên ỗ cứng, chứa dây đủ thông tin cdc object code của các hàm chức năng và đũ liệu để thực thi chương trình Rất nhiều các hàm trong

Ble thực thủ được cùng cấp đưới các [ile thư viện (được link tĩnh hoặu nạp đồng khi

chương trình chạy)

Giả sử người dùng muốn thực thì một chương bình từ shell, thông gua dòng lệnh được: nhập vào, comwnand shell khởi tạo một tiền trình mới, trong đó lich hoạt lời gọi hệ

thông execveQ với đầu vào là đường dần đây đủ của chương trình Từ kernel, hàm xứ

lý chức nẵng tương ứng sụs_execve được kích hoạt, thực hiện tìm file tương ứng, kiểm

tra định dạng fủe thực thủ và cập nhật lại cầu hình thực thủ theo cấu tình được mô tả trong Je thực thì Khi lời gọi hệ thông thực thì xong, tiền trình thực thì cúc mã thực thí

được mô tả trong file thực th và thực hiện các chức năng lương ứng

1.2.5 Thư viện hỗ trợ (Shared libraries)

Như đã trình bảy ở trên, các tiến trình thực thỉ trên User mode có thể sử dụng các thư viện để thục hiện các lời gọi hệ thống xudng kernel Do dé, ngoài những mã tực tú được biên dịch trực tiếp từ mã nguồn của chương trình, chương trình còn có thể sứ

dụng các mã thục thi từ các thư viện mà chương trinh sử đựng

Có hai kiểu thư viện:

35

Trang 27

« Thư viện tỉnh (static libraries): trong quá trình biên địch chương trình (có sử

dụng thư việu tĩnh), chương trình liên kết (uker) trực hiện liên kết cả các mã

thực thi của thư viện vào chương trình, điều nảy giúp cho chương trình có tính

chất đóng gới, chỉ cần một file chương trình đuy nhất có thể thực thì được, tuy nhiên sở dụng thư viện tĩnh cũng có nhược điềm là tiều tốn không gian lưu trữ của ở cửng khi nhiều chương trinh cừng sử dụng một thư viện tĩnh)

« _ Thưyiện động (shared libraries): trong quá trình biền địch chương trinh, chương trinh linker không thực hiện liên kết các mã thục thí của thư viện vào chương trinh mà chỉ đặt một tham chiếu tới tên thư viện, khi chương trình được thực thi,

thư viện sẽ được nạp lên vùng nhở của tiến trình Ưu điểm cửa dạng kiểu thư viện nảy là cung cấp cơ chẻ ảnh xạ bộ nhớ - file (le memory mapping) Khí chương trình liên kết động thực hiện liên lrết thư viện động vào tiến trình, các

mã thực thi của thư viện không bị copy vào chương trình mả chỉ thực hiện ánh:

xạ bộ nhớ phân thư viện tương ứng sang không gian bộ nhớ của tiên trình Mhờ vậy, sử đụng kiễu thư viện nay ít tấn không gian ổ cứng hơn se với thư viện tỉnh Tuy nhiên, nhược điểm của kiểu thư viện này là thời gian nạp của chương,

trinh thường chậm hơn so với các chương trình sử dụng thư vién tinh, do

chương trình phải thục tiện thêm các thao lắc nạp thư viện lên vững nhớ

1.2.6 Dinh dong file thyc thi

Môi chương bình được lưu tén 6 img dudi dang inél file thus thi (excculable file),

26

Trang 28

phân tỉch cầu trúc định đạng file thực thị, kernel sẽ có được thông tin cầu hình khởi tạo tài nguyên hệ thống cho tiền trình

Dinh dang file thye thi chuẩn của Linux là định dạng HLI: (Ixeeutable and Linking, Format), duoc phat triển bởi các phòng nghiên cứu hệ thống LInix và nay được sử dụng,

rộng rỗi trong giới Unix Định đạng này là chuẩn chưng cho các file thuc thi, abject

code, thư viện chia sé (shared libraries) và các file core dumps

Trang 29

* ELF header: nim ở đầu file (từ offset đầu tiên trong file) mô tả cấu trúc sắp xếp của cả file, bắt đầu với một giá tri kidu DWORD (magic number) tuong img voi

(ỚP 'T 17 *E' đừng để nhận đạng file din dang ELT

« Program header table: chita thang tin mồ tả câu hình để loader tién hành khỏi

lao Liên Irình:

* Section header table: chứa thông tin mỏ tả các sections, báng nảy bao gồm nhiều section entry, mdi section entry chira thang tin tén section, kich thước và vị trí

section trên [le và trên bộ nhớ

Dinh dang LLLF đã được sử dụng dé thay thể cho rất nhiều các định dạng thực thị cũ trong rất nhiều môi trường khác nhau, trong đó, nó thay thể cho định đạng sø.ouL và

COEF trong nhiều hệ diéu hanh nhu: Linux, Solaris, IRI, FreeBSD, NetBSD,

OpenBSD, Dragonfly BSD, Syllable, IP-UX, QNX Neutrino, MINIX Ngoài ra, định

dang này cũng dược chấp nhận trên nhiều hệ thông, hè diều hành khác nhu: OpenVMS

ban Hanium, BeOS ti phién ban 4 trở đi, Hailku, RISƠ O§ Liên cạnh đó, một vải hệ máy game consolss như PlayStation Portable, PlayStation 2, PlayStation 3, GP2X, TDreameasL, đameCuhe, Win và hệ diễu bành cho các thiết bị dì dộng như (Symbien

OS v9, Sony Ericsson, Siemens, Motorola, Bađa, Nokia, Android ) cũng sử dụng

định dang nay cho một số loại trên nên lắng Lương, ứng,

1.2.7 Quá trình thực thi một file

Hầu hết các hệ điều hành sử dụng cơ chế spawn để tạo một tiên trình mới với không, gian địa chỉ mới, cập nhật cầu hình từ Ñle thực thi và chạy những mã thục thi tương img Tuy nhién, Unix sử đụng một định hướng khác hẳn: khi một tiến trình tdồi được

28

Trang 30

tạo khi một tiễn trinh dã tổn tại tạo bán sao của chỉnh nỏ Ngoại trừ process ID, tiễn trinh con nảy có cũng môi trường với tiến trình cha Quá trình nảy được gọi là farking

(phản nhánh)

Sau khi tiến trình được forking, không gian địa chỉ của tiền trình con bị ghỉ đè với đữ

liêu tiễn trình mới thông qua lời gọi hệ thống tới hàm exee

Cơ chế fork-amd-exee thực hiện chuyển những

âu lênh cũ sang những câu lệnh mới

tuy nhiễn môi trường tiên trình được thực thi vận giữ nguyên, bao gồm cau hình của các thiết bị đầu vào đâu ra, thông tin biến mỗi trường đây là cơ chế được sử dụng để tạo tiếu trình trong hệ điểu hành Linux, Tién trinh dầu tiêu init (proccss ID L) cũng tuân theo cơ chế nảy, tiên trinh này được tạo (forking) trong quả trình khởi động,

29

Trang 31

trong khi không phải tiến trình init thực hiện khởi tạo tiễn trình này, Đỏ là trường hợp

tiến trình được gọi chạu ngắm (running in background) Khi 46, ngay cả khi Hến tình

cha kết thúc hoặc bị buộc phải kết thúc, tiễn trình con vẫn tiếp tục thực thí

~Xét dưới góc độ của lập trình viên:

Quá trình tac mét process trong Linux chia lam hai bude, si dung, hai ham API fork()

va exec():

30

Trang 32

© Dau tién fork() được gọi đề tạo một tiến trình con, lả bản sao của task đang làm

việc (tiền trình cha) với giá trị PID (process ID) mới, giá trị PID của process géc

(gọi hàm forkQ) được cập nhật vào trường PPID của process mới

© Sau do exec() được gọi để nạp thông tim thực thi vào không gian địa chỉ mới và

tiến hành chạy các mã thực thi tương img,

Hình 13 Tạo tiến trình dưới góc độ hệ thông

Trong dé exec()/fork() dai điện chung cho các hàm chức năng tường tự trên usermode

Từ góc độ một lập trình viên, ta thây một tiên trình đơn giản được tạo thông qua các lời

gọi tới các hảm API được cung cáp bởi linux kernel, thông qua các lời gọi hệ thông các tham sỏ cầu hình tương ứng được truyền tới các hàm xử lý trong linux kernel Cụ thẻ,

ta thay hảm forkQ sẽ thực hiện truyền tham số từ usermode > kernelmode thông qua

fork() => sys forkQ >3 do forkQO, do fork() sẽ xử lý các chức năng tương ứng trong

kernel đề tiền hành khởi tạo môi trường cho tiền trình mới Tương tự, với exec(), các

31

Trang 33

tham số câu hình sẽ được truyền từ usermode => kemelrmode thông qua luồng làm việc

sau:

exec() sys execve() > do_execve() > do_execve_common()

Trong d6, do_execve_common sé tién hanh nap cae cau hình thực thi mới của tiến

trinh tir filesystem lén b6 nho voi luéng lam việc như sau:

Hình 14 Luỗng khởi tạo cấu hình thực thi mới

Linux kemel định nghĩa một câu trúc linux binũnt để quản lý chung các module thực

thi được hỗ trợ (kernel module, ñle thực thi, thư viên, coredump) Mỗi khi một module thực thi muốn được nạp lên bỏ nhớ sẽ phải thông qua cầu trúc nảy đẻ ảnh xạ các cầu hình thực thi từ filesystem lên bỏ nhớ

¢ load elf bimary: được sử dụng đề ánh xạ các câu hình thực thi của file thực thì

lên bộ nhớ

3

Ngày đăng: 09/06/2025, 12:59

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
10. LAKSHMANAN GANAPATHY (2013), How to compile linux kemel from source to Build Custom Kernel, The geek stuff Sách, tạp chí
Tiêu đề: How to compile linux kemel from source to Build Custom Kernel
Tác giả: LAKSHMANAN GANAPATHY
Nhà XB: The geek stuff
Năm: 2013
11. Mac Developer Library (2012), Code Signing Guide, Apple Inc Sách, tạp chí
Tiêu đề: Code Signing Guide
Nhà XB: Apple Inc
Năm: 2012
12.M, Tim Jones (2007), “Anatomy of the Linux kemel”, JBM developerWorks Sách, tạp chí
Tiêu đề: Anatomy of the Linux kemel
Tác giả: Tim Jones
Nhà XB: JBM developerWorks
Năm: 2007
13. Roberto Arcomano (2003), Kernel Analysis-How to, www.bertolinux.com 64 Sách, tạp chí
Tiêu đề: Kernel Analysis-How to
Tác giả: Roberto Arcomano
Nhà XB: www.bertolinux.com
Năm: 2003
14. Robert Love (2010), Linux kernel development, Pearson Education Sách, tạp chí
Tiêu đề: Linux kernel development
Tác giả: Robert Love
Nhà XB: Pearson Education
Năm: 2010
16. The digsig team (2005), The DigSig project Sách, tạp chí
Tiêu đề: The DigSig project
Tác giả: The digsig team
Năm: 2005
19. Wikipedia (2011), History of Linux Kermel, http://en.wikipedia org, 20. Wikipedia, Executable and Linkable Format,http://en.wikipedia.org/wiki/Executable_and_Linkable_Format Sách, tạp chí
Tiêu đề: History of Linux Kernel
Tác giả: Wikipedia
Nhà XB: Wikipedia
Năm: 2011
18. The linux kernel archives, https://www.kernel.org/ Link
15. Signed Executables under Linux, http: //stackoverflow.com/questions/1732927/signed-executables-under-linux Khác
17. The linux kernel source code, http:/Avww. linux. org/threads/the-linux-kemel-the-source-code 4204/ Khác

HÌNH ẢNH LIÊN QUAN

Hình  2 Tầng  trung  gian  giữa  user  &  filesystem. - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 2 Tầng trung gian giữa user & filesystem (Trang 13)
Hình  6  Cấu  trúc thư  mục  con  chữa mã  nguồn Hnux  kernel - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 6 Cấu trúc thư mục con chữa mã nguồn Hnux kernel (Trang 19)
Hình  8  Mã  nguồn  linux  kernel - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 8 Mã nguồn linux kernel (Trang 21)
Hình  I1  Định  dạng  ELE - Luận văn cơ chế bảo mật mã thực thi trên linux
nh I1 Định dạng ELE (Trang 28)
Hình  12  Co  ché  fork-and-exee - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 12 Co ché fork-and-exee (Trang 31)
Hình  13  Tạo  tiến  trình  dưới  góc  độ  hệ  thông. - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 13 Tạo tiến trình dưới góc độ hệ thông (Trang 32)
Hình  14  Luỗng  khởi  tạo  cấu  hình  thực  thi  mới - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 14 Luỗng khởi tạo cấu hình thực thi mới (Trang 33)
Hình  18  Mô  hình  ký  dữ  liệu - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 18 Mô hình ký dữ liệu (Trang 37)
Hình  17  Cảnh  báo  của  Morilla  khi  cải  đật  phần  mềm. - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 17 Cảnh báo của Morilla khi cải đật phần mềm (Trang 40)
Hình  20 Vị trí  các  node  cô  thể  thực  hiện  xác  mình  chữ  ký trong  lộ  trình  thực  thí  file - Luận văn cơ chế bảo mật mã thực thi trên linux
nh 20 Vị trí các node cô thể thực hiện xác mình chữ ký trong lộ trình thực thí file (Trang 50)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w