HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI THỰC TẬP CƠ SỞ
Nghiên cứu, ứng dụng kỹ thuật dịch
ngược và mạng nơ-ron trong phát hiện
mã độc
Cán bộ hướng dẫn: Giảng viên Phạm Văn Hưởng
Sinh viên thực hiện:
- Ngô Văn Thỉnh
- Phạm Công Lý
- Nguyễn Văn Hoàng
Lớp: AT9A
HÀ NỘI 2015
1
HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI THỰC TẬP CƠ SỞ
Nghiên cứu, ứng dụng kỹ thuật dịch
ngược và mạng nơ-ron trong phát
hiện mã độc
Nhận xét của cán bộ hướng dẫn:.........................................................................................
.............................................................................................................................................
.............................................................................................................................................
hiện. Do đó việc phát hiện mã độc luôn là vấn đề khó và để phát hiện chúng một
cách toàn diện, các phần mềm phát hiện phải được viết sao cho có thể phát hiện và
loại bỏ chúng một cách chính xác nhất.
Có nhiều kỹ thuật phát hiện mã độc đã được sử dụng như: Sử dụng bộ giả lập
dựa trên kỹ thuật heuristics, phân rã mã ... tuy nhiên chưa có kỹ thuật nào phát hiện
một cách toàn diện. Mặt khác các kỹ thuật này còn phức tạp, và để hiệu cặn kẽ về
chúng là việc không đơn giản. Do vậy, việc tìm các phương pháp mới để phát hiện
Virus đa hình là cần thiết. Ngoài ra, với sự phát triển của việc ứng dụng trí tuệ nhân
tạo trong công nghệ tính toán mềm đang dần trở thành một xu thế tất yếu, sử dụng
mạng nơ ron nhân tạo trong các bài toán phân tích và nhận dạng cũng không nằm
ngoài xu thế đó. Vậy nên chúng em đã chọn đề tài "Nghiên cứu, ứng dụng kỹ thuật
dịch ngược và mạng nơ-ron trong phát hiện mã độc" để thực hiện nghiên cứu và đã
đạt được những kết quả nhất định.
4
MỤC LỤC
LỜI CÁM ƠN.........................................................................................................................3
MỞ ĐẦU...............................................................................................................................4
MỤC LỤC..............................................................................................................................5
DANH MỤC HÌNH VẼ............................................................................................................6
CHƯƠNG 1:KỸ THUẬT DỊCH NGƯỢC...................................................................................8
CHƯƠNG 2:MẠNG NƠ RON NHÂN TẠO............................................................................13
CHƯƠNG 3:ÁP DỤNG KỸ NGHỆ DỊCH NGƯỢC VÀ ANN ĐỂ PHÁT HIỆN MÃ ĐỘC...............33
KẾT LUẬN...........................................................................................................................55
TÀI LIỆU THAM KHẢO.........................................................................................................56
5
HÌNH 3.25: CẤU TRÚC IMAGE_NT_HEADER.......................................................................38
HÌNH 3.26: CẤU TRÚC FILEHEADER....................................................................................39
HÌNH 3.27: GIÁ TRỊ NUMBEROFSECTION...........................................................................40
HÌNH 3.28: CẤU TRÚC DATA DIRECTORY............................................................................40
HÌNH 3.29: CẤU TRÚC PE CỦA BASECALC.EXE....................................................................42
HÌNH 3.30: CẤU TRÚC DATA DIRECTORY............................................................................42
HÌNH 3.31: DANH SÁCH 16 DIRECTORY..............................................................................43
HÌNH 3.32: THÔNG TIN CÁC DIRECTORY SỬ DỤNG HEXDITOR..........................................43
HÌNH 3.33: CẤU TRÚC SECTION TABLE...............................................................................44
HÌNH 3.34: SƠ ĐỒ CHỨC NĂNG TRÍCH CHỌN DẤU HIỆU DỰA VÀO CFL............................46
HÌNH 3.35: MÔ HÌNH CHỨC NĂNG TRÍCH CHỌN DẤU HIỆU SỬ DỤNG THUẬT TOÁN FISHER
SCORE.................................................................................................................................48
HÌNH 3.36: MÔ HÌNH CHỨC NĂNG HỆ THỐNG NHẬN DẠNG MÃ ĐỘC BẰNG PHƯƠNG
PHÁP MẠNG NƠ -RON.......................................................................................................49
HÌNH 3.37: MÔ HÌNH CẤU TRÚC MẠNG NƠ-RON DỰA TRÊN PERCEPTRON 3 TẦNG.........50
7
CHƯƠNG 1: KỸ THUẬT DỊCH NGƯỢC
1.1. Khái niệm:
Trước khi tìm hiểu kỹ thuật dịch ngược là gì ta cùng xem xét đến một tình
huống như sau:
Bạn may mắn được thưởng thức và mang về nhà 1 món ăn rất ngon từ 1 trong
những nhà hàng nổi tiếng nhất thế giới. Nhưng lượng thức ăn có hạn, làm sao để có
thể mời bạn bè món này trong các bữa tiệc?
Bạn sẽ làm gì để thực hiện được ý định của mình ???
Có 1 cách, đó là, trước khi thưởng thức, bạn nên tìm cách học xem họ chế
biến như thế nào. Không may thay, nhà hàng này không phải lúc nào bạn cũng có thể
Phá vỡ cơ chế bảo vệ của chương trình. Điều đó có nghĩa là chúng ta gỡ bỏ
tính năng thời gian dùng thử, đăng kí sử dụng hay tất cả những thứ mà những
chương trình thương mại làm để bắt người dùng phải trả tiền.
• Học tập nghiên cứu virus hay mã độc.
Nghiên cứu virus và mã độc. Việc dịch ngược là cần thiết vì bên ngoài có rất
nhiều người viết virus và họ sẽ chẳng bao giờ để lộ cách họ viết ra virus, mục
tiêu của virus hay cách mà virus đạt được mục tiêu của mình.
• Kiểm tra chất lượng phần mềm
Kiểm tra thẩm định tính an toàn cũng như lỗ hổng của phần mềm. Khi mà
phải làm việc với một chương trình lớn (ví dụ như hệ điều hành Windows) thì
việc dich ngược giúp đảm bảo không có những lỗ hổng nghiêm trọng hay làm
khó các cracker cố gắng crack phần mềm.
• Bổ sung thêm tính năng vào chương trình.
Chúng ta có thể thêm hoặc thay đổi những tính năng trong một phần mềm
theo ý muốn. VD: thay đổi bức ảnh trong phần mềm, thêm tính năng mã hóa
văn bản vào chương trình soạn thảo…
1.3. Ứng dụng kỹ thuật dịch ngược trong phát hiện mã độc hại
1.3.1. Mở đầu
• Ngày nay khi Internet đã trở nên phổ biến toàn cầu, việc đảm bảo ATTT lại
phải đối mặt với những vấn đề khó khăn hơn trước. Một trong những vấn đề
ấy chính là vấn đề về phần mềm độc hại (malware). Qua nhiều năm nghiên
cứu và khảo sát con người đã đưa ra nhiều giải pháp nhằm đối phó lại với
các phần mềm độc hại. Nhưng có lẽ công việc bắt buộc với bất kì giải pháp
nào thì điều đầu tiên trước hết phải làm là dịch ngược lại mã nguồn của các
phần mềm độc đó.
• Với mong muốn tìm hiểu thêm về một phần kiến thức của kĩ thuật dịch
ngược đồng thời tiếp bước với phần giới thiệu tổng quan về kỹ thuật dịch
ngươc mà nhóm đã tìm hiểu thì chúng em xin được đi trọng tâm vào phần
“Reversing Malware”.
mở rộng của file, vd: excute.exe > excute.txt)
1.3.3. Kỹ thuật dịch ngược phần mềm độc.
Yêu cầu kỹ năng
Kỹ năng cần thiết nhất để dịch ngược chính là khả năng lập trình tốt, đặc
biệt là kiến thức về ngôn ngữ assembler. Chúng ta không cần phải đạt ở
trình độ lập trình cao cấp hoàn toàn nhưng yêu cầu tối thiểu chúng ta phải có
khả năng đọc hiểu mã nguồn, hiểu rõ nguyên lý và chức năng của từng hàm
lệnh.
Cần phải kiên trì, hiểu biết sâu về hệ thống, nguyên lý hệ điều hành… tư
duy logic tốt bởi vì chúng ta đều biết dịch ngược mã nguồn hoàn toàn là một
điều không hề đơn giản!
Cụ thể, chúng ta cần phải có kiến thức hiểu biết về:
System Monitor, Process Explorer, CaptureBAT, Regshot, VMware
BinText, LordPE, QuickUnpack, Firebug, PELister, PEiD
IDA Pro, OllyDbg và các plug-in OllyDump, HideOD
Rhino, Malzilla, SpiderMonkey, Jsunpack-n
Internet Explorer Developer Toolbar, cscript
Honeyd, netcat, Wireshark, curl, wget, xorsearch
OfficeMalScanner, OffVis, Radare, FileInsight
Thực hiện phân tích mã tĩnh để hiểu rõ thêm về hoạt động bên trong của
malware. (sử dụng IDA pro để phân tích mã tĩnh sau khi Debug)
Thực hiện phân tích mã động để hiểu các khía cạnh phức tạp hơn của mã này.
(sử dụng OllyDbg để phân tích mã động)
Nếu cần thiết, giải nén malware. (unpack)
11
Lặp lại các bước 2, 3, và 4 (thứ tự có thể thay đổi) cho đến khi mục tiêu phân
tích đầy đủ đáp ứng.
Phát hiện và đưa kết quả, sau đó dọn sạch phòng thí nghiệm để phân tích
trong tương lai.
Phân tích hành vi
Trước hết phải chuẩn bị tính sẵn sàng của hệ thống luôn ở trạng thái tốt, bằng
cách sử dụng: dd (linux), tạo snapshot trong VMware, dùng CoreRestore,
Ghost, SteadyState…
Sử dụng trình quản lý như Process Monitor, Process Explorer và phân tích
mạng như Wireshark, Tcpdump…
Phát hiện ra những thay đổi cục bộ (Regshot, Autoruns)
Chuyển hướng truy cập mạng (sử dụng việc thay đổi tập tin hosts, thay đổi
DNS hoặc dùng Honeypot)
Kích hoạt các dịch vụ IRC, HTTP, SMTP… khi cần thiết để phát hiện ra các
hành vi mới của malware.
Loại bỏ sự phòng thủ của Malware
1. Thử unpack nhanh chóng, lây nhiễm vào hệ thống và dump bộ nhớ bằng
LordPE hoặc OllyDump
2. Đối với việc phải unpack gói lớn, ta xác định các Original Entry Point (OEP)
sau khi tiến hành unpack
3. Nếu không thể unpack, ta kiểm tra các gói thông qua việc phân tích mã động
khi chúng đang thực thi
lĩnh vực như: nhận dạng, phân loại, xử lý ảnh, các hệ thống điều khiển,dự báo và đặc
biệt là trong việc phát hiện các mã độc hại
Các tính chất của mạng nơ-ron nhân tạo:
Là hệ phi tuyến: mạng nơ-ron có khả năng to lớn trong lĩnh vực nhận dạng
và điểu khiển các đối tượng phi tuyến.
Tốc độ tính toán rất cao, rất phù hợp với lĩnh vực nhận dạng và điều khiển.
Là hệ học và thích nghi: mạng được luyện từ các số liệu quá khứ, có khả
năng tự điều chỉnh khi số liệu đầu vào bị mất
Là hệ biến thiên, hệ nhiều đầu vào, hệ nhiều đầu ra: rất tiện dụng khi điều
khiển đối tượng có nhiều biến số.
1.4. Cấu trúc mạng nơ-ron nhân tạo (Artifical Neural Networks-ANN):
Bộ não con người có khoảng 1011 − 1012 nơ-ron. Mỗi nơ-ron có thể liên kết với
10 4 các nơ-ron khác thông qua các khớp nối (dendrite). Các nơ-ron nhận tín hiệu
điện từ từ các khớp nối và khi sự tổng hợp các tín hiệu này vượt quá một ngưỡng cho
phép thì nơ-ron sẽ kích hoạt một tín hiệu điện ở ngõ ra để truyền tới trục nơ-ron
(Axon) và dẫn đến các nơ-ron khác.
Sau đây là những thành phần chính trong cấu trúc của một nơron trong bộ não
con người:
13
Hình 2.2: Mô hình nơ-ron sinh học
Trong đó :
- Các Soma là thân của noron.
- Các dendrites là các dây mảnh, dài, gắn liền với soma, chúng truyền dữ liệu
(dưới dạng xung điện thế) đến cho soma xử lý. Bên trong soma các dữ liệu đó được
tổng hợp lại. Có thể xem gần đúng sự tổng hợp ấy như là một phép lấy tổng tất cả
Sau đây mà mô hình một nơ-ron nhân tạo đơn giản:
Hình 2.3: Mô hình mạng nơ-ron nhân tạo ở mức đơn giản
Nơron này sẽ hoạt động như sau: giả sử có N đầu vào (Input), nơron sẽ có N
trọng số (Weight) tương ứng. Nơ-ron sẽ lấy tổng có trọng số của tất cả các inputs.
Nói như thế có nghĩa là nơ-ron sẽ lấy đầu vào thứ nhất nhân với trọng số trên đường
vào thứ nhất, lấy đầu vào thứ hai nhân với trọng số của đường vào thứ hai v.v... rồi
lấy tổng của tất cả các kết quả thu được. Đường truyền nào có trọng số càng lớn thì
tín hiệu truyền qua đó càng lớn, như vậy có thể xem trọng số là đại lượng tương
đương với synapse trong nơ-ron sinh học. Có thể viết kết quả lấy tổng của nơ-ron
như sau:
Kết quả này sẽ được so sánh với ngưỡng (threshold) t của nơ-ron, nếu nó lớn
hơn t thì nơron cho đầu ra (Output) là 1, còn nếu nhỏ hơn thì đầu ra là 0. Ngoài ra
ta cũng có thể trừ tổng nói trên cho t, rồi so sánh kết quả thu được với 0, nếu kết quả
là dương thì nơ-ron cho đầu ra bằng 1, nếu kết quả âm thì đầu ra là 0. Ta có thể viết
đầu ra của nơron như sau:
Trong đó f là hàm chuyển bậc thang đơn vị (Heaviside):
15
f được gọi là hàm chuyển của nơ-ron, còn giá trị t còn được gọi là ngưỡng phân cực
(-bias). Kí hiệu: θ (threshold hay offset) của nơ-ron.
1.4.1. Hàm kích hoạt
Quá trình xử lý thông tin gồm: xử lí tín hiệu đầu vào và xử lí tín hiệu đầu ra.
Hàm tổng (u): dùng để kết hợp và xử lí tín hiệu các thông tin ở đầu vào
Một số hàm tổng thường gặp:
Hình 2.4: Hàm đồng nhất (Identity function)
Hàm bước nhị phân (Binary step function, Hard limit function):
1, (x >= θ )
f (x) =
0, (x < θ )
16
Dạng hàm này được sử dụng trong các mạng chỉ có một lớp. Trong hình vẽ sau, θ
được chọn bằng 1.
Hình 2.5: Hàm bước nhị phân (Binary step function)
Hàm sigmoid (Sigmoid function (logsig))
f (x) =
1
1 + e− x
Hàm này đặc biệt thuận lợi khi sử dụng cho các mạng được huấn luyện
(trained) bởi thuật toán Lan truyền ngược (back-propagation), bởi vì nó dễ lấy đạo
hàm, do đó có thể giảm đáng kể tính toán trong quá trình huấn luyện. Hàm này được
ứng dụng cho các chương trình ứng dụng mà các đầu ra mong muốn rơi vào khoảng
[0,1].
Hình 2.6: Hàm Sigmoid
Hàm sigmoid lưỡng cực (Bipolar sigmoid function (tansig)):
-Mạng một lớp: gồm chỉ một lớp nơ-ron
-Mạng nhiều lớp: gồm nhiều lớp nơ-ron
-Mạng truyền thẳng: các tín hiệu trong mạng chỉ truyền theo một chiều
từ đầu vào đến đầu ra.
-Mạng hồi quy: các tín hiệu hồi tiếp từ đầu ra đến đầu vào.
Hình 2.8: Mạng truyền thẳng một lớp
18
Hình 2.9: Mạng truyền thằng nhiều lớp
1.4.3. Các phương pháp huấn luyện mạng nơ-ron:
Có hai kiểu huấn luyện:
Huấn luyện: thông số (Parameter Learning): dùng để cập nhật các trọng số
liên kết giữa các tế bào nơ-ron và ngưỡng phân cực trong mạng.
Huấn luyện: cấu trúc (Structure Learning): dùng để thay đổi cấu trúc mạng
bao gồm cả tế bào nơ-ron và các liên kết giữa chúng.
Ta có thể sử dụng riêng rẽ hoặc đồng thời cả hai kiểu huấn luyện trên. Tuy nhiên,
ở đây ta chỉ đến kiểu huấn luyện thông số. Có 3 kiểu huấn luyện thông số:
Luật huấn luyện có giám sát(Supervised Learning):
Là quá trình huấn luyện có giám sát, ở mỗi thời điểm thứ i khi đưa tín hiệu vào
xi của mạng nơ-ron, tương ứng sẽ có các đáp ứng mong muốn d i của đầu ra cho
trước ở thời điểm đó. Hay nói cách khác, trong quá trình học có giám sát, mạng nơron được cung cấp liên tục các cặp số mong muốn vào-ra ở từng thời điểm khi cho
đầu vào thực của mạng xk tương ứng sẽ có tín hiệu đầu ra cũng được lặp lại là d k
giống như mong muốn. Kết quả của quá trình huấn luyện có giám sát là tạo được một
hộp đen có đầu vào véc-tơ tín hiệu x sẽ đưa ra được câu trả lời đúng d.
19
20
phá các mẫu, các nét đặc trưng, tính cân đối, tính tương quan... Trong khi khám
phá các đặc trưng khác, mạng nơ-ron đã trải qua việc tự thay đổi thông số, vấn đề
đó còn gọi là tự tổ chức.
1.4.4. Mạng nơ-ron truyền thằng
1.4.4.1. Mạng nơ-ron truyền thằng một lớp:
Hình 2.11: Mô hình mạng truyền thẳng một lớp
Một lớp nơ-ron là một nhóm các nơ-ron mà chúng cùng nhận một số tín hiệu và
đồng thời.
Trong ma trận trọng số w, các dòng thể hiện trọng số của mỗi nơ-ron, mỗi dòng
thứ j có thể đặt nhãn như một véc-tơ w j của nơ-ron thứ j gồm m trọng số wij .
Các trọng số trong cùng một cột thứ j=(1,2,....n) đồng thời nhận cùng một tín
hiệu x j .
Tại cùng một thời điểm, véc-tơ đầu vào x= ( x1 , x2 ...xn ) có thể một nguồn bên
ngoài là cảm biến hoặc thiết bị đo lường đưa tới mạng. Tới khi toàn bộ ma trận trọng
số được xác định tương ứng với véc-tơ đầu vào X thì các tích số wij xi cũng được tính
toán.
1.4.4.2. Mạng nơ-ron truyền thẳng nhiều lớp:
Hình 2.12: Mạng nơ-ron truyền thằng nhiều lớp
Trong mạng nơ-ron truyền thẳng nhiều lớp các lớp được phân thành 3 loại
sau:
Tầng đầu vào: là lớp nơ-ron đầu tiên nhận được tín hiệu vào xi của
21
(bias), giá trị định hướng này được khởi tạo giống như các trọng số.
Với mỗi mẫu học X được xử lý theo các bước sau:
Bước 2: Lan truyền tiến các đầu vào
Trong bước này, mạng đầu vào và đầu ra của mỗi nơ-ron trong tầng ẩn và
tầng xuất được tính toán. Đầu tiên mẫu huấn luyện được đưa vào tầng đầu vào
của mạng. Mạng đầu vào cho mỗi nơ ron trong các tầng ẩn và tầng xuất được
tính toán như là một ánh xạ của các biến đầu vào. Đầu vào của một nơ ron là đầu
ra của những nơ ron ở tầng trước nối đến nó. Để tính toán mạng đầu vào của nơ
ron thì mỗi đầu vào của nó được cộng dồn bởi trọng số tương ứng. Cho một nơ
ron j ở trong tầng ẩn hay tầng xuất thì mạng đầu vào Ij của j là :
Ij =∑ w ij O i + θj
Trong đó wij là trọng số của liên kết từ nơ ron i ở tấng trước đến nơ ron j, Oi là
đầu ra của nơ ron i từ tầng trước và θj là định hướng của nơ ron. Sự định hướng
này có tác dụng như là một ngưỡng, nó làm thay đổi cách hoạt động của nơ -ron.
Mỗi nơ ron ở trong tầng ẩn hay tầng đầu ra có một mạng đầu vào của nó và
áp dụng một hàm kích hoạt đến nó, hàm này là hàm lô-gic hoặc hàm sigmoid. Cho
mạng đầu vào Ij của nơ-ron j thì đầu ra Oj của nơ-ron j được tính như sau:
Oj =
l
I
l +e j
Error: Reference source not found
Hàm này được xem như là một hàm nén (squashing), vì nó ánh xạ một miền
đầu vào rộng lớn lên một vùng nhỏ hơn trong khoảng từ 0 đến 1. Hàm logistic là
một hàm không tuyến tính (phi tuyến) và có khả năng phân loại, cho phép thuật
giải lan truyền ngược mô hình theo bài toán phân lớp là tuyến tính liên tục.
và lớp thực sự của mẫu học đã cho. Mức độ học ngăn không cho sa lầy vào cực
tiểu cục bộ trong không gian quyết định nghĩa là các trọng số xuất hiện để hội tụ,
nhưng nó không phải là giải pháp tốt nhất và đi tới khám phá cực tiểu toàn cục.
Nếu mức độ học quá nhỏ thì việc học tiến triển rất chậm. Nếu mức độ học quá
lớn thì các giải pháp không thỏa đáng. Một kinh nghiệm là cho mức độ học l=t với
t là số lần lặp đi lặp lại trên tập dữ liệu học cho tới lúc này.
Sự định hướng được cập nhật theo công thức sau, với ∆θj là phần thay đổi trong
θj
∆θ = (l ) Err j
∆θ = θ j + ∆θ j
1.5.3. Điều kiện kết thúc:
Quá trình học mạng được bắt đầu với các giá trị trọng số tùy ý và tiến hành
lặp đi lặp lại. Mỗi lần lặp được gọi là một thế hệ. Trong mỗi thế hệ mạng điều
chỉnh các trọng số sao cho sai số giảm dần và quá trình học kết thúc khi:
+ Tất cả ∆wij ở thế hệ trước nhỏ hơn một ngưỡng xác định nào đó hoặc
+ Tỷ lệ các mẫu bị phân lớp sai ở thế hệ trước nhỏ hơn một ngưỡng nào đó
hoặc
+ Lặp đủ số lượng thế hệ xác định trước.
Trong thực tế, có khi phải trải qua rất nhiều lần huấn luyện thì các trọng
số mới có thể hội tụ. Tóm tắt thuật giải lan truyền ngược cho mạng nơ-ron huấn
24
luyện để phân lớp được trình bày như sau:
Input: tập các mẫu học, mức độ học l, một mạng đa tầng
Output: một mạng nơ ron đã được học để phân lớp cho các mẫu
1)
2)
9)
10)
11)
12)
13)
14)
15)
16)
17)
18)
19)
Errj = O j (1 − O j )(T j O j )
//tính sai số
for với mỗi nơ ron j trong tầng ẩn
Errj = O j (1 − O j )∑ Errkjk // tính sai số
for với mỗi trọng số wij trong mạng {
∆wij = (l) Err j O j
//độ tăng trọng số
wij = wij + ∆wij
// cập nhật trọng số
for với mỗi định hướng θ i trong mạng {
∆θ j = (l) Err j
// độ tăng định hướng
∆θ j = θ j + ∆θ j
// cập nhập định hướng
}
}