Tải bản đầy đủ (.docx) (16 trang)

Kỹ thuật tấn công dịch ngược mã nguồn phần mềm Reverse engineering

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (671.39 KB, 16 trang )

LỜI MỞ ĐẦU
Trong những năm gần đây, chúng ta đã chứng kiến sự phát triển mãnh
liệt trong các lĩnh vực nghiên cứu liên quan đến máy tính và tin học. Sự phát
triển phi thường của các máy tính và những thay đổi sâu sắc trong phương
pháp luận khoa học đã mở ra cho ngành CNTT những phát triển vượt bậc, bên
cạnh đó yếu tố an toàn và bảo mật cũng được đặt lên hàng đầu. Trong những
năm qua, đã có rất nhiều vụ án liên quan tới vấn đề an toàn thông tin trên
internet như ăn cắp thông tin tài khoản ngân hàng, thông tin cá nhân… Liên
quan tới chủ đề đó, trong môn học An toàn và bảo mật thông tin, nhóm chúng
em đã tìm hiểu một phần nhỏ về lĩnh vực bảo mật để làm tiểu luận môn học.
Trong phạm vi tiểu luận này, nhóm chỉ trình bày những vấn đề cơ bản
nhất, giúp chúng em nắm bắt được những kỹ thuật cơ bản nhất của môn học
An toàn và bảo mật thông tin và cụ thể là Kỹ thuật tấn công dịch ngược mã
nguồn phần mềm - Reverse engineering
Chúng em xin chân thành cảm ơn thầy giáo TS Nguyễn Tấn Khôi đã
giảng dạy và giúp đỡ để chúng em hoàn thành tiểu luận này.

Đà Nẵng, ngày 09 tháng 07 năm 2015
Nhóm học viên thực hiện


2

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

MỤC LỤC


Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 2


3

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

PHẦN I
TÌM HIỂU LÝ THUYẾT
Kỹ thuật tấn công dịch ngược mã nguồn
phần mềm - Reverse engineering
I.1. Dịch ngược là gì?
Dịch ngược là quá trình rút ra những kiến thức hoặc thông tin thiết kế
từ tất cả những thứ con người làm ra và thiết kế lại nó hoặc thiết kế lại những
thứ khác dựa vào những thông tin lấy được
Lý do và mục đích của việc dịch ngược rất rộng rãi, từ những việc làm
mang đến lợi ích cho xã hội cho đến những hành động phi pháp.
I.2. Ứng dụng của dịch ngược
I.2.1. Liên quan bảo mật
 Ứng dụng độc hại
• Đối với người viết ứng dụng độc hại: tìm ra các lổ hỗng trong
hệ điều hành và các chương trình khác
• Đối với nhà phát triển chương trình diệt mã độc: lần theo từng
bước của chương trình và định mức thiệt hại có thể xảy ra,

đánh giá mức độ lây nhiễm, và làm sao để gỡ bỏ nó khỏi hệ
thống bị lây nhiễm
 Dịch ngược thuật toán mã hóa
• Thuật toán giới hạn: Sự bí mật của thuật toán chính là nó.
Một khi thuật toán bị lộ, không còn an toàn. Thuật toán giới
hạn cung cấp độ bảo mật thấp bởi vì dịch ngược khiến chúng
rất khó giữ được sự bí mật của thuật toán. Một khi dịch
ngược, vấn đề chỉ còn là thời gian trước khi thuật toán bị lộ
• Thuật toán dựa theo khóa: sự bí mật chính là khóa, một số
Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 3


4

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

giới hạn giá trị được sử dụng để thuật toán mã hóa và giải mã.
Thuật toán thường được công khai và key được giữ bí mật.
Điều khó khiến cho việc dịch ngược vô dụng bởi vì thuật toán
đã biết.
 Quản lý bản quyền kỹ thuật số
• Máy tính hiện đại ngày nay chứa nhiều loại bản quyền được
đưa sang thông tin số. Nhạc, phim kể cả sách, những thức chỉ
tồn tại ở dạng vật lý giờ đã được số hóa. Thông thường, các

nhà phần phối nội dung đã được tích hợp công nghệ chống
sao chép. Nó sẽ ngăn chặn người dùng sao chép nội dung số
bất hợp pháp
• Dịch ngược có thể bẻ khóa những công nghệ quản lý bản
quyền số. Để làm được phải hiểu làm sao nó hoạt động. Bằng
cách sử dụng dịch ngược, ta có thể biết được những bí mật
bên trong công nghệ đó và tìm ra cách để vô hiệu hóa sự bảo
vệ
 Đánh giá chương trình
• Phần mềm mã nguồn mở vốn được hàng ngàn kĩ sư phần
mềm xem xét nên nó đem lại cảm giác an toàn.
• Phần mềm mã nguồn mở dễ dàng đọc được từng dòng lệnh
nên có thể bị những lỗ hổng bảo mật có thể bị khai thác.
• Các phần mềm có bản quyền không cung cấp mã nguồn, vì
vậy việc dịch ngược là một cách để tìm ra các lỗ hổng. Việc
dịch ngược không thể giúp tiếp cận và đọc từng dòng lệnh
như mã nguồn mở, nhưng có thể giúp tìm ra các lỗi chứa
Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 4


5

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi


trong đó.
I.2.2. Dịch ngược trong phát triển phần mềm
 Sự tương thích với phần mềm độc quyền
• Khi làm việc với thư viện chương trình hoặc các hàm API hệ
thống, các tài liệu gần như là không đủ.
• Mặc dù các nhà phát hành làm mọi cách để đảm bảo những
hàm thư viện được đảm bảo, những nhà phát triển sẽ ngoan cố
và tiếp tục cho đến khi lấy được những thứ họ cần, hoặc liên
hệ để tìm ra câu trả lời.
• Hoặc có thể sử dụng kỹ thuật dịch ngược để tìm ra các giải
quyết nhiều vấn đề trong thời gian ngắn với sự tương thích
cao.
 Phát triển sản phẩm cạnh tranh
• Phần mềm đang ngày càng trở nên phức tạp hơn, vậy nên dịch
ngược toàn bộ phần mềm nhằm mục đích tạo ra một sản phẩm
cạnh tranh gần như là không thể.
• Thường sẽ không dịch ngược hoàn toàn lại phần mềm ngoại
trừ những thiết kế, thuật toán phức tạp hoặc độc nhất mà rất
khó hoặc tốn kém để phát triển.
• Ngoài ra, hầu như các chương trình được phát triển độc lập,
nhưng độ phức tạp cao hay những thành phần bất thường có
thể được dịch ngược và tích hợp vào sản phẩm mới.
 Đánh giá chất lượng phần mềm
• Có thể đánh giá chương trình qua tính bảo mật và dễ bị tổn
thương.
Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 5



6

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

• Phần mềm mã nguồn mở như quyển sách cho phép mọi người
đọc và đánh giá chất lượng trước khi sử dụng.
• Phần mềm bản quyền không cung cấp mã nguồn và cho người
dùng một thông điệp “hãy tin tưởng”. Bạn không biết về thứ
mà bạn đang mua.
 Bảo mật phần mềm


Việc chống dịch ngược sẽ giúp đánh giá tính bảo mật của
những phần mềm và sức chịu đựng trước những nguy cơ tấn
công.



Kỹ thuật dịch ngược được sử dụng để đảm bảo rằng hệ thống
không có bất kỳ lỗ hổng lớn và lỗ hổng bảo mật. Mục đích
chính của kỹ thuật dịch ngược là làm cho hệ thống mạnh mẽ
để bảo vệ nó khỏi phần mềm gián điệp và tin tặc. Tuy nhiên,
điều này có thể được thực hiện bởi những hacker có đạo đức,
nhờ đó mà ta có thể xác định các lỗ hổng của hệ thống.

I.3. Quá trình dịch ngược

I.3.1. Dịch ngược cấp độ hệ thống
Dịch ngược hệ thống liên quan đến chạy một vài công cụ trên chương
trình và khởi tạo một vài dịch vụ hệ điều hành để lấy thông tin, điều tra sự
thực thi của chương trình, theo dấu chương trình nhật xuất,..
Phần lớn thông tin này đến từ hệ điều hành, bởi bất cứ phản ứng của
chương trình từ bên ngoài phải được thông qua hệ điều hành. Đó là lý do tại
sao người dịch ngược phải hiểu hệ điều hành, họ có thể thu được một lượng
lớn thông tin về chương trình đó trong quá trình dịch ngược.
I.3.2. Dịch ngược cấp độ dòng lệnh
Dịch ngược cấp độ dòng lệnh thực sự là một nghệ thuật. Lấy ra những
Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 6


7

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

mẫu thiết kế và thuật toán từ chương trình là một quá trình phức tạp đòi hỏi
phải thành thạo kĩ thuật dịch ngược cùng với nắm vững phát triển phần mềm,
CPU, hệ điều hành
Dịch ngược cấp độ dòng lệnh phải quan sát dòng lệnh ở mức rất thấp,
điều đó cho phép chúng ta thấy được từng chi tiết của việc thực thi chương
trình.
Kết luận

Kỹ thuật dịch ngược có thể được áp dụng cho một số khía cạnh của
hoạt động phần mềm và phát triển phần cứng để chuyển tải ý nghĩa khác
nhau. Nói chung, nó được định nghĩa là quá trình tạo ra các đại diện của các
hệ thống ở một mức độ trừu tượng cao hơn và sự hiểu biết nguyên tắc làm
việc cơ bản và cấu trúc của hệ thống được nghiên cứu. Với sự giúp đỡ của
kỹ thuật dịch ngược, các hệ thống phần mềm đang được xem xét có thể được
kiểm tra kỹ lưỡng. Có hai loại kỹ thuật dịch ngược; trong các loại đầu tiên,
mã nguồn có sẵn, nhưng khía cạnh cấp cao của chương trình là không còn
nữa. Những nỗ lực được thực hiện để phát hiện các mã nguồn cho các phần
mềm đang được phát triển được gọi là kỹ thuật dịch ngược. Trong trường
hợp thứ hai, các mã nguồn cho các phần mềm không còn có sẵn; ở đây, quá
trình phát hiện các mã nguồn có thể được gọi là kỹ thuật dịch ngược. Để
tránh vi phạm bản quyền, kỹ thuật dịch ngược làm cho việc sử dụng một kỹ
thuật gọi là phòng sạch thiết kế.
Trong thế giới của kỹ thuật dịch ngược, chúng ta thường nghe về kiểm
tra hộp đen.Mặc dù các thử nghiệm có một API, mục tiêu cuối cùng của họ
là tìm các lỗi bằng cách nhấn các sản phẩm cứng từ bên ngoài.
Ngoài ra, mục đích chính của kỹ thuật dịch ngược là để kiểm tra an
ninh, loại bỏ các bản sao bảo vệ, tùy chỉnh các hệ thống nhúng, và bao gồm
các tính năng bổ sung mà không chi tiêu nhiều và hoạt động tương tự khác.
Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 7


8

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin


GVHD: Nguyễn Tấn Khôi

Tìm hiểu kỹ thuật dịch ngược là để kiểm tra an ninh, loại bỏ các bản
sao… việc dịch ngược cũng còn nhắm tới những mục đích xấu như để bẻ
khóa bản quyền, hack chương trình, vậy bên cạnh đó cũng cần phải nghiên
cứu sâu về kỹ thuật chống dịch ngược nhằm bảo vệ bản quyền, bảo vệ những
lợi ích chính đáng vốn có của phần mềm.
Khi tìm hiểu về kỹ thuật dịch ngược phần mềm thì chúng em cũng đã
tìm hiểu sơ qua về kỹ thuật chống dịch ngược, một trong những vấn đề đó là
Code Morphing
Code morphing là một phương pháp được sử dụng trong obfuscating
(gây rối) phần mềm để bảo vệ phần mềm ứng dụng chống kỹ thuật dịch
ngược. Công nghệ này bảo vệ mã cấp trung gian như biên dịch từ ngôn ngữ
Java và .NET ( ôxy , C # , Visual Basic , vv) chứ không phải là mã nhị
phân. Code morphing phá vỡ các mã bảo vệ vào một số lệnh xử lý hoặc đoạn
lệnh nhỏ và thay thế chúng bằng những mã lệnh khác, trong khi vẫn đảm bảo
các kết quả cuối cùng. Do đó, nó gây rối và bảo vệ mã ở cấp trung gian.
Code morphing là một công nghệ đa cấp có chứa hàng trăm mô hình
chuyển đổi mã duy nhất. Ngoài ra công nghệ này chuyển một số lệnh lớp
trung gian vào máy ảo lệnh. Code morphing không bảo vệ chống truy tìm
thời gian chạy, mà có thể tiết lộ các logic thực hiện bất kỳ mã bảo vệ.
Không giống như bảo vệ mã nguồn, không có khái niệm của mã giải
mã với phương pháp này khối mã bảo vệ luôn trong trạng thái thực thi và
được thực hiện như mã chuyển đổi. Các mã trung gian ban đầu là vắng mặt ở
một mức độ nhất định, nhưng không làm gây rối vẫn có thể cho một cái nhìn
rõ ràng về các dòng mã gốc.
Mã morphing thường được sử dụng để gây rối bảo vệ chống sao
chép hoặc kiểm tra một chương trình để xác định xem nó được cài đặt xác
Khoa học máy tính – K29

Khoa học máy tính – K29
Trang 8


9
An toàn và bảo mật thông tin

GVHD: Nguyễn Thanh Bình
GVHD: Nguyễn Tấn Khôi

thực hợp lệ, hoặc chống sao chép lậu, để làm cho việc loại bỏ các mã bảo vệ
phần mềm khó hơn.

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 9


10

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

PHẦN II
THỰC HÀNH
Thử nghiệm với công cụ dịch ngược mã nguồn
phần mềm .Net Reflector

II.1. Các công cụ Reverse Engineering
Như đã đề cập ở trên, kỹ thuật dịch ngược là quá trình phân tích các
phần mềm để xác định thành phần của nó và mối quan hệ của nó. Quá trình
kỹ thuật dịch ngược được thực hiện bằng cách sử dụng một số công cụ được
phân loại thành gỡ rối hoặc Disassemblers, biên tập viên hex, giám sát và
các công cụ biên dịch ngược:
Disassemblers - Một bộ phận phân tách được sử dụng để chuyển đổi
mã nhị phân thành mã lắp ráp và cũng được sử dụng để trích xuất chuỗi,
nhập khẩu và xuất khẩu chức năng, thư viện vv Disassemblers chuyển đổi
ngôn ngữ máy sang một định dạng thân thiện. Có dissemblers khác nhau mà
chuyên điều nhất định.
Debuggers - công cụ này mở rộng các chức năng của một bộ phận
phân tách bằng cách hỗ trợ các thanh ghi CPU, các duping hex của chương
trình, quan điểm của chồng vv Sử dụng bộ dò lỗi, các lập trình viên có thể
thiết lập các điểm ngắt và chỉnh sửa mã lắp ráp tại thời gian chạy. Debuggers
phân tích nhị phân trong một cách tương tự như các Disassemblers và cho
phép các Reverser để bước qua mã bằng cách chạy một dòng tại một thời
gian để điều tra kết quả.
Biên tập Hex - Những biên tập viên cho phép nhị phân để được xem
trong trình biên tập và thay đổi nó theo yêu cầu của phần mềm. Có nhiều

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 10


11

GVHD: Nguyễn Thanh Bình


An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

loại khác nhau của hex biên tập viên có sẵn được sử dụng cho các chức năng
khác nhau.
PE và Viewer Resource - Các mã nhị phân được thiết kế để chạy trên
một cửa sổ dựa trên máy tính và có một dữ liệu rất cụ thể mà nói như thế
nào để thiết lập và khởi tạo một chương trình. Tất cả các chương trình chạy
trên cửa sổ nên có một thực thi di động có hỗ trợ các file DLL, chương trình
cần phải vay từ.
Kỹ thuật dịch ngược đã phát triển đáng kể và thực hiện một cách tiếp
cận tích cực để tạo ra dữ liệu mô tả tập hợp các đối tượng ban đầu. Ngày
nay, có rất nhiều ứng dụng hợp pháp cho kỹ thuật dịch ngược. Do sự phát
triển của rất nhiều các thiết bị số hóa, phần mềm kỹ thuật dịch ngược cho
phép lập trình để thao tác dữ liệu vào một hình thức hữu ích. Các loại ứng
dụng, trong đó kỹ thuật dịch ngược được sử dụng trong nhiều lĩnh vực khác
nhau, với mỗi lĩnh vực nó có những với lợi thế và các ứng dụng riêng. Kỹ
thuật dịch ngược cũng có lợi cho các chủ doanh nghiệp khi họ có thể kết hợp
các tính năng tiên tiến vào phần mềm của họ để đáp ứng nhu cầu của các thị
trường phát triển.
II. 2. Công cụ dịch ngược .NET Reflector
Giới thiệu:

.Net Reflector là một sản phẩm phần mềm của hãng RedGate, phần
Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 11



12

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

mềm thường được dùng để dịch ngược hoặc crack các phần mềm được viết
trên nền tảng .Net (C#,VB.Net...) mà ít được bảo vệ. Hiện tại .Net
Reflector đã có phiên bản 8.3 và hỗ trợ tốt đến phiên bản .Net 4.5 mới nhất
của Microsoft.
.NET Reflector là một chương trình dùng để Disassemble (dịch ngược
ra source code) và decompiler một chương trình khác viết bằng .NET nhưng
không có chức năng debug. Hỗ trợ ngôn ngữ đầu ra là những ngôn ngữ lập
trình .NET thông dụng như: IL, C#, VB, Delphi, MC++, Chrome.
Bằng việc sử dụng thêm một số Add-in, người sử dụng có thể sửa đổi
code của chương trình đó và biên dịch lại thành một chương trình hoàn chỉnh.
Hiểu đơn giản là patch chương trình đó.
Để sử dụng .NET Reflector thì trong máy tính của bạn đã phải cài
đặt .NET framework. Hiện tại .NET Reflector đã hỗ trợ .NET framework 4.5.
Sau khi cài đặt, chạy .NET Reflector và khi mở 1 file .exe ta sẽ thấy như sau:

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 12


13


GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

Trong bài tập này, chúng em đã sử dụng một chương trình được viết
bằng ngôn ngữ lập trình .NET, một chương trình quản lý Nhân sự được sưu
tầm trên Internet. Sau khi biên dịch chương trình, chúng em lấy toàn bộ nội
dung thư mục Debug gồm các file đã được biên dịch thành file .EXE và
.DLL ra màn hình Desktop để thử nghiệm.
Để xem mã nguồn của một chương trình hay một thư viện dll, click
chọn Open trên toolbar hay menu File  Open hoặc Ctrl+O, duyệt đến file dll
hay exe cần dịch  OK.
Nếu muốn dịch trực tiếp ra các file source thì click phải chuột lên tên
file cần dịch, chọn Export, nếu chỉ muốn xem cấu trúc của nó thì chọn
Disassemble.

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 13


14
An toàn và bảo mật thông tin

GVHD: Nguyễn Thanh Bình
GVHD: Nguyễn Tấn Khôi

Ta có thể xem nội dung mã nguồn:


Chức năng kiểm tra mật khẩu trong form Đăng nhập của chương trình.
Sau đây thủ tục đổi mật khẩu trong Form đổi mật khẩu:

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 14


15

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin

GVHD: Nguyễn Tấn Khôi

Trên đây là nội dung phần thực hành của kỹ thuật tấn công dịch ngược
mã nguồn bằng chương trình .NET Reflector mà chúng em đã tìm hiểu.

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 15


16

GVHD: Nguyễn Thanh Bình

An toàn và bảo mật thông tin


GVHD: Nguyễn Tấn Khôi

TÀI LIỆU THAM KHẢO
Trang web />[2]
Trang web />[3]
Trang web />[4]
Trang web
/>[1]

Khoa học máy tính – K29
Khoa học máy tính – K29
Trang 16



×