Kỹ thuật tấn công dịch ngược mã nguồn phần mềm Reverse engineeringDị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. 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ố 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.
Trang 1Trong 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
Trang 2MỤC LỤC
PHẦN I TÌM HIỂU LÝ THUYẾT KỸ THUẬT TẤN CÔNG DỊCH NGƯỢC MÃ NGUỒNPHẦN MỀM - REVERSE ENGINEERING
I.1 Dịch ngược là gì? 2
I.2 Ứng dụng của dịch ngược 2
I.2.1 Liên quan bảo mật 2
I.2.2 Dịch ngược trong phát triển phần mềm 4
I.3 Quá trình dịch ngược 5
I.3.1 Dịch ngược cấp độ hệ thống 5
I.3.2 Dịch ngược cấp độ dòng lệnh 6
Kết luận 6
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 NETREFLECTOR II.1 Các công cụ Reverse Engineering 8
II 2 Công cụ dịch ngược NET Reflector 9
TÀI LIỆU THAM KHẢO 13
Trang 3PHẦ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ố
giới hạn giá trị được sử dụng để thuật toán mã hóa và giải mã
Trang 4Thuậ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 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
Trang 5 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
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
Trang 6 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 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
Trang 7Dị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
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
Trang 8Khi 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 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
Trang 9PHẦ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 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
Trang 10PE 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 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
Trang 11.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:
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
Trang 12dung 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
Ta có thể xem nội dung mã nguồn:
Trang 13Chứ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:
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
Trang 14TÀI LIỆU THAM KHẢO
[1] Trang web http://www.red-gate.com/products/dotnet-development/reflector/
[2] Trang web http://giaotrinhhay.com/ma-nguon-phan-mem-quan-ly-nhan-su-tien-luong-ttgdtx-an-giang/
[3] Trang web https://en.wikipedia.org/wiki/Code_morphing
[4] Trang web http://courses.cs.washington.edu/courses/cse548/08wi/papers/transmeta.pdf