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

Đề tài kỹ thuật chống dịch ngược anti dumping

21 0 0
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

Định dạng
Số trang 21
Dung lượng 4,01 MB

Nội dung

Kỹ thuật Dump trong dịch ngược: Khi 1 chương trình được thực thi, nó sẽ chiếm một vùng nhớ nhất địnhtrong bộ nhớ.. Khái niệm Anti-Dumping Anti-Dump là một kỹ thuật chống dịch ngược được

Trang 1

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

BỘ MÔN AN TOÀN THÔNG TIN

Đề tài: Kỹ thuật chống dịch ngược Anti-Dumping

Trang 2

Hà Nô 4i – 5/2023 MỤC LỤC MỞ ĐẦU 3

DANH MỤC HÌNH ẢNH 4

NỘI DUNG 5

I Kỹ thuật chống dịch ngược 5

1 Khái niệm 5

2 Mục đích sử dụng 5

3 Phân loại kỹ thuật chống dịch ngược 6

II Kỹ thuật chống dịch ngược ANTI-DUMP 7

1 Dump là gì? 7

2 Khái niệm Anti-Dumping 7

3 Phân loại 7

III DEMO : Removing the Portable Executable Header 11

1 Môi trường và phần mềm 11

2 Mục đích và ý tưởng 11

3 Các bước thực hiện 12

KẾT LUẬN 19

TÀI LIỆU THAM KHẢO 20

Trang 3

MỞ ĐẦU

Trong thời đại số hiện nay, việc bảo vệ và bảo mật phần mềm trở thànhmột nhiệm vụ cấp bách Tuy nhiên, việc ngăn chặn dịch ngược mã nguồn phầnmềm là một thách thức đáng kể Trong bối cảnh đó, Kỹ thuật Anti-Dump đã trởthành một công cụ quan trọng trong lĩnh vực chống dịch ngược

Báo cáo này nhằm giới thiệu về Kỹ thuật Anti-Dump và tầm quan trọngcủa nó trong việc ngăn chặn hoặc làm khó khăn quá trình dịch ngược mã nguồnphần mềm Chúng tôi sẽ trình bày các khái niệm cơ bản về Anti-Dump, các biệnpháp áp dụng, và ứng dụng của nó trong việc bảo vệ thông tin quan trọng vàngăn chặn việc sao chép và vi phạm bản quyền

Chúng tôi hy vọng rằng báo cáo này sẽ giúp quý vị hiểu rõ hơn về Kỹthuật chống dịch ngược Anti-Dumping và cách nó đóng góp vào việc bảo vệphần mềm và ngăn chặn dịch ngược mã nguồn Chúng tôi cũng hy vọng rằngthông qua báo cáo này, quý vị sẽ nhận thức được tầm quan trọng và ứng dụngcủa Anti-Dumping trong lĩnh vực chống dịch ngược

Xin chân thành cảm ơn!!!

Trang 4

DANH MỤC HÌNH ẢNH

Hình 10: Chỉnh sửa địa chỉ base của tệp thực thi vừa dump ra 15

Trang 5

2 Mục đích sử dụng

+ Bảo vệ quyền sở hữu trí tuệ: Kỹ thuật chống dịch ngược được sử dụng đểbảo vệ mã nguồn phần mềm khỏi việc sao chép trái phép và vi phạm bảnquyền

+ Bảo vệ thông tin nhạy cảm: Kỹ thuật chống dịch ngược giúp bảo vệ thôngtin quan trọng như khóa mã, thuật toán, và dữ liệu nhạy cảm khác trongphần mềm

+ Ngăn chặn tấn công ngược hướng: Kỹ thuật chống dịch ngược làm khókhăn cho kẻ tấn công trong việc phân tích mã nguồn và tìm lỗ hổng đểthực hiện tấn công ngược hướng

+ Bảo vệ dữ liệu và thông tin cá nhân: Kỹ thuật chống dịch ngược giúp bảo

vệ dữ liệu quan trọng và thông tin cá nhân trong các ứng dụng như ứngdụng ngân hàng, ứng dụng y tế và ứng dụng giao dịch điện tử

● Đối với những người phát triển mã độc

+ Việc sử dụng kỹ thuật dịch ngược nhằm mục đích hạn chế, làm khó khănhơn quá trình dịch ngược mã độc, làm cho việc khắc phục hậu quả của cáccuộc tấn công mã độc hoặc tìm cách khắc chế mã độc trở nên khó khăn,mất nhiều thời gian hơn

Trang 6

3 Phân loại kỹ thuật chống dịch ngược

*

Kỹ

thuật chống dịch ngược gồm 3 mảng lớn chính, gồm:

trường máy ảo và ngăn chặn các công cụ gỡ lỗi chạy trên máy ảo

●Packer Application Engineering: Kỹ thuật Packer Application sử dụngphương pháp nén, mã hóa, lưu hoă •c giấu mã gốc của chương trình, tựđộng bổ sung một hoă •c nhiều section, sau đó sẽ thêm đoạn mã UnpackingStub và chuyển hướng Entry Point (EP) tới vùng mã này Bình thườngmột file không đóng gói (Nonpacked) sẽ được tải bởi OS Với file đãđóng gói thì Unpacking Stub sẽ được tải bởi OS, sau đó chương trình gốc

sẽ tải Unpacking Stub Lúc này mã EP của file thực thi sẽ trỏ tớiUnpacking Stub thay vì trỏ vào mã gốc

●Kỹ thuật chống dịch ngược anti-debug: Anti-Debuger là kỹ thuật chốngphân tích được sử dụng phổ biến trong mã độc Khi bị phân tích bởi mộttrình Debuger nào đó, mã độc sử dụng kỹ thuật này có thể phát hiện ra sự

có mă •t của trình Debuger, sau đó làm thay đổi hướng thực thi của mã độc(rẽ sang hướng khác hoă •c dừng hoạt động…) gây cản trở quá trình phântích

H

Trang 7

II Kỹ thuật chống dịch ngược ANTI-DUMP

1 Dump là gì?

Kỹ thuật Dump trong dịch ngược:

Khi 1 chương trình được thực thi, nó sẽ chiếm một vùng nhớ nhất địnhtrong bộ nhớ Ta có thể dùng một số phần mềm để kiểm tra thông tin trongvùng nhớ này là trích xuất thông tin lưu ra một file khác Từ đó có thể tiếnhành các bước dịch ngược để lấy được chương trình gốc

Memory dump là thuật ngữ để chỉ quá trình snapshot tệp thực thi Ảnhchụp nhanh này được lưu vào đĩa sau khi sửa import table, chuyển hướng API,v.v Tệp thực thi bị dump này có thể được dịch ngược do mã gốc cho tệp thựcthi đã được khôi phục

2 Khái niệm Anti-Dumping

Anti-Dump là một kỹ thuật chống dịch ngược được áp dụng để ngănchặn việc phân tích và tái tạo mã nguồn từ chương trình đã được biên dịch

Nó nhằm tạo ra một phiên bản "khó dịch ngược" của mã nguồn, làm cho quátrình dịch ngược trở nên khó khăn và tốn nhiều thời gian

Trang 8

Thông tin này cho biết điểm dừng là Nanomite hay điểm dừng gỡ lỗithực, có nên thực hiện bước nhảy hay không (điều này bao gồm so sánh thanhghi EFLAGS thích hợp cho kiểu nhảy, tức là JNZ cần ZF = 0) Nếu đúng nhưvậy, thì địa chỉ của bước nhảy được truy xuất và quá trình thực thi trong debug

sẽ tiếp tục từ đó, còn nếu không, thì độ dài của bước nhảy đã thay thế sẽ đượctruy xuất và kích thước của bước nhảy cụ thể đó sẽ bị bỏ qua trong debug vàtiếp tục thực thi

Bây giờ, để làm cho mọi thứ trở nên tồi tệ hơn, các instruction INT 3hngẫu nhiên sẽ được đặt ở những phần mã không thể truy cập được và các mụcnhập sẽ được thực hiện trong bảng Nanomite Thậm chí có những mục không

có INT 3h tương ứng nhưng được đặt ở đó để gây nhiễu các kỹ thuật dịchngược Khi được sử dụng ở đúng vị trí bên trong tệp thực thi, kỹ thuật này rấtmạnh mẽ và hầu như không ảnh hưởng đến hiệu suất

b) Stolen Byte (Code splicing)

Tại đây, các mã hoặc byte từ quy trình ban đầu được trích xuất và mãhóa ở những vị trí ngẫu nhiên trong mã đóng gói Khu vực đặt các byte đượcthay thế bằng mã sẽ nhảy tới bộ đệm được phân bổ động có các byte đượcgiải mã bị đánh cắp khỏi mã gốc Do đó, thuật ngữ "bị đánh cắp"

Điểm mà chương trình bắt đầu thực hiện được gọi là original entry point(OEP) Các trình đóng gói thường giải nén toàn bộ chương trình trong bộ nhớ

và sau đó chuyển sang OEP của nó để thực thi Code splicing (Stolen code)hoạt động bằng cách sao chép một số byte dữ liệu từ OEP, sau đó chuyểnchúng sang bộ nhớ riêng biệt để thực thi Điều này được sử dụng để ẩn OEPthực tế

Trình đóng gói thường di chuyển ba hoặc bốn instructions đầu tiên từOEP sang các quy trình kiểm tra chống gỡ lỗi, điều này rất có thể có trongphần mã riêng của trình đóng gói Sau khi thực hiện một số instruction này từOEP, trình đóng gói sau đó chuyển sang code được giải mã ban đầu, thườngxuất hiện sau các instruction bị đánh cắp Vị trí chứa các instruction bị đánhcắp này chứa đầy các số 0 hoặc mã rác

Vấn đề với code splicing là các trình đóng gói không thể đánh cắp cácinstruction ở bất cứ đâu Nó phải biết kích thước của các instruction trước khi

có thể di chuyển nó đến một vị trí khác, vì nó sẽ thực hiện các instruction này

từ vị trí này và instruction được sao chép một nửa sẽ gây ra ngoại lệ Trìnhđóng gói chỉ có thể đánh cắp những instruction chắc chắn có trong OEP.c) SizeOfImage

Trang 9

SizeOfImage là một trường trong IMAGE_OPTION_HEADER tệp PE,

và bằng cách tăng kích thước của trường này trong PEB khi chạy, chúng tôi

có thể gây ra sự cố cho các công cụ chưa được phát triển để xử lý sự cố này.Phương pháp này dễ dàng được áp dụng cho một ứng dụng, và dễ dàng bịđánh bại bằng bằng cách đảo ngược các ứng dụng thông qua quá trình liệt kêtất cả các trang có cờ MEM_IMAGE, bắt đầu từ trang ImageBase của ứngdụng nó hoạt động vì không thể có khoảng trống trong các trang trong bộnhớ

d) Removing the Portable Executable Header

Đây là một kỹ thuật anti-dumping đơn giản giúp loại bỏ PE của tệpthực thi khỏi bộ nhớ khi chạy; bằng cách này, dumped image sẽ thiếu thôngtin quan trọng như RVA (Địa chỉ ảo tương đối) của các bảng quan trọng(Reloc, Nhập, Xuất, v.v.), entry point, và các thông tin khác mà trình tảiWindows cần sử dụng khi đang tải một hình ảnh Cần cẩn thận khi sử dụng kỹthuật này, vì Windows API hoặc có thể là các chương trình bên ngoài hợppháp có thể cần quyền truy cập vào thông tin đã bị xóa này

Trang 10

Hình 2: Cấu trúc của PE file

e) Guard Pages

Các trình đóng gói và trình bảo vệ có thể sử dụng Guard pages để triểnkhai một một hệ thống giải mã/giải nén theo yêu cầu Khi tệp thực thi được tảivào bộ nhớ thay vì giải nén/giải mã toàn bộ nội dung của tệp trong thời gianchạy, trình bảo vệ sẽ chỉ đánh dấu tất cả các trang không cần thiết ngay làmGuard pages Sau khi hoàn thành, khi cần một phần mã hoặc dữ liệu khác, mộtngoại lệ EXCEPTION_GUARD_PAGE (0x80000001) sẽ được đưa ra và dữ

Trang 11

liệu có thể được giải mã hoặc giải nén từ tệp hoặc từ nội dung được mã hóa/néntrong bộ nhớ.

Kỹ thuật này đã được triển khai theo hai cách, một bằng cách kết nốiKiUserUserDispatcher (Shrinker) và bằng cách sử dụng Tự gỡ lỗi (Armadillo'sCopyMemoryII) (Ferrie) Trong trường hợp của Shrinker, khi một ngoại lệ đượcđưa ra, một cuộc kiểm tra được thực hiện, từ hook đặt trênKiUserUserDispatcher, để tìm nơi xảy ra ngoại lệ và liệu ngoại lệ có xảy ratrong không gian xử lý của tệp thực thi được bảo vệ hay không; nếu đúng nhưvậy, thì nội dung sẽ được giải nén từ đĩa vào trang nơi chương trình đang mongđợi dữ liệu hoặc mã thực thi Việc sử dụng kỹ thuật này có thể giảm đáng kểthời gian tải và giảm mức sử dụng bộ nhớ cho tệp thực thi, bởi vì chỉ nhữngtrang cần thiết mới được hỗ trợ bởi bộ nhớ vật lý (RAM) và chỉ những trang cần

sử dụng mới được giải nén và giải mã

Armadillo cũng triển khai kỹ thuật này dưới tên CopyMemII và nó hoạtđộng theo cách tương tự, ngoại trừ việc nó yêu cầu sử dụng self-debugging.Ngoài ra, thay vì có các trang trống và tải các trang từ đĩa, CopyMemII chỉ cầngiải nén các trang vào bộ nhớ Lưu ý rằng điều này không giải mã các trang; do

đó, mã và dữ liệu vẫn được bảo mật Sau đó, khi một trang chưa được giải mãđược truy cập, một ngoại lệ EXCEPTION_GUARD_PAGE (0x80000001) sẽxuất hiện và quy trình là trình gỡ lỗi sẽ bắt ngoại lệ đó và giải mã trang khi cần.Tuy nhiên, có một điểm yếu trong việc triển khai kỹ thuật của Armadillo, đó làkhi một trang được giải mã, nó sẽ vẫn được giải mã trong bộ nhớ Bằng cáchkhai thác điểm yếu này, một kỹ sư đảo ngược có thể buộc quá trình chạm vàomọi trang mà chương trình cần và để toàn bộ chương trình được giải mã trong

bộ nhớ và ở dạng hoàn hảo để kết xuất Trong cả hai lần triển khai kỹ thuật này,các quy trình sẽ chỉ giải mã hoặc giải nén một trang tại một thời điểm; do đó,nếu một truy cập mở rộng trên nhiều trang, trình bảo vệ sẽ chỉ cho phép ngoại lệtiếp theo xảy ra và giải mã trang đó

III DEMO : Removing the Portable Executable Header

Trang 12

+ Process hacker 2

- Chương trình : test.exe

Hình 3: File exe thực thi

- File mã hóa của chương trình : Test.shc.exe.enc

File mã hóa này không thể chạy chương trình trực tiếp mà phải thôngqua một trình thực thi PEloader để chạy Nhằm ngăn các kỹ thuật dịch ngượcnhằm vào chương trình

2 Mục đích và ý tưởng

- Mục đích : Thực hiện kỹ thuật anti-dump xóa phần PEHeader của tệpthực thi làm sau khi dump thì chương trình không thể thực thi được

- Ý tưởng :

+ Đầu tiên : Sử dụng PE loader để chạy file mã hóa Sau đấy sử dụng

kỹ thuật dump thông qua IDA proProcess Hacker để tạo file dump, sử dụng CFF explorer để thêm thông tin địa chỉ base Khi đấy filedump sẽ thực hiện chạy chương trình mà không cần PE leader.+ Thứ 2: Thêm hàm xóa đi phần header trong trình thực thi PE loader Lúc này sau khi chạy chương trình và thực hiện dump như bước 1nhưng phần header đã bị xóa đi cho nên file dump lúc này sẽ khôngthể thực hiện chương trình được

3 Các bước thực hiện

Phần 1 : Thực hiện dump file exe và chạy chương trình sau khi dump:

* Bước 1 : Sử dụng trình thực thi để chạy file mã hóa

Trang 13

Hình 4: Chạy file mã hóa trên trình PEloader

Hình 5: kết thúc quá trình thực thi

* Bước 2 : Sử dụng IDA pro mở file Peloader.exe chạy lệnh thực thi file mãhóa để giải mã và thực thi file test với parameter sau:

cdll C:\Users\Administrator\Downloads\Test.shc.exe\Test.shc.exe.enc

Trang 14

Hình 6: Thêm lệnh thực hiện vào process options

* Bước 3 : Vào function run_implant đặt breakpoint tại lệnh jmp tới entry pointcủa file test sau khi giải mã xong

* Bước 4 : Chạy chương trình thu được địa chỉ base của tệp thưc thi

Hình 7: địa chỉ base của tệp thực thi

* Bước 5 :Vào Process Hacker thực hiện dump file có địa chỉ base tương ứng

với tên dump.exe

Trang 15

Hình 8: Cấu trúc tệp thực thi

� Lúc này ta thấy file nhớ của tệp thực thi vẫn còn phần header

Hình 9: Header trong tệp thực thi

* Bước 6 : Vào CFF Explorer thêm địa chỉ base vào phần header của file thựcthi dump.exe

Trang 16

Hình 10: Chỉnh sửa địa chỉ base của tệp thực thi vừa dump ra

* Bước 7 : Lúc này file được dump ra có thể thực hiện trực tiếp như file

test.exe gốc.

Hình 11: File exe sau khi dump thành công

� Ta có thể thấy khi một file thực thi chưa sử dụng các kỹ thuậtchống dịch ngược Anti-dumping thì các nhà dịch ngược có thể

Trang 17

dễ dàng dump file thực thì thành một chương trình có mã gốc đãđược khôi phục để tiến hành dịch ngược.

Phần 2 : Thực hiện kỹ thuật removeving the Portable Executable Header

- Thêm lệnh xóa phần header của file thực thi vào hàm run_implant của

trình Peloader

Hình 12: Code thực hiện xóa header

- Thực hiện tương tự từ bước 1, bước 2 như phần 1

* Bước 3 :đặt breakpoint ở lệnh call rbx

Hình 13: Đặt breakpoint

* Bước 4 : Thu được địa chỉ base của tệp thực thi

Trang 18

Hình 15: tệp thực thi bị xóa header

- Bước 6: dùng CFF explorer để mở xem cấu trúc file dump1.exe :

� Lúc này ta sẽ thấy file dump1 không có phần header vậy nên

không thể thực thi được do vậy quá trình dump này thất bại

Trang 19

Hình 16: Mở tệp dump được bằng CFF explorer

� Sau khi tiến hành thực hiện kỹ thuật Anti-Dumping, header củafile thực thi đã bị xóa, không thể lấy được thông tin từ Headercủa file thực thi, vậy nên không thể tiến hành dump file thực thi

để lấy chương trình đã được khôi phục mã gốc

Trang 20

KẾT LUẬN

Kỹ thuật chống dịch ngược là một phần quan trọng của bảo vệ mãnguồn Các kỹ thuật này giúp ngăn chặn các kẻ tấn công khỏi việc truy cậpvào mã nguồn và các thông tin quan trọng khác hoặc cũng gây ra không ít khókhăn cho nhà phân tích mã độc Tuy nhiên, các kỹ thuật này không phải làhoàn hảo và vẫn có thể vượt qua bởi những người có kỹ năng, trình độ vàkinh nghiệm Điều quan trọng là phải kết hợp các kỹ thuật chống dịch ngượcvới các biện pháp bảo mật khác để tăng bảo mật

Báo cáo này sẽ giúp quý vị hiểu rõ hơn về Kỹ thuật Anti-Dumping vàcách nó đóng góp vào việc bảo vệ phần mềm và ngăn chặn dịch ngược mãnguồn Chúng tôi cũng hy vọng rằng thông qua báo cáo này, quý vị sẽ nhậnthức được tầm quan trọng và ứng dụng của Anti-Dump trong lĩnh vực chốngdịch ngược

Trang 21

TÀI LIỆU THAM KHẢO

1 “Practical malware analysis” – foreword by Richard Bejilitch

2 The “Ultimate”Anti-Debugging Reference – Peter Ferrie

Ngày đăng: 10/12/2024, 10:03

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

TÀI LIỆU LIÊN QUAN

w