Welcome, Guest. Please login or register. Did you miss your activation email?
Mạng BoCau :: Cửa tự động :: Sơn Hà

Author Topic: [Thảo luận] Các kỹ thuật nhận dạng virus  (Read 10556 times)

dungcoi

  • Registered Users
  • Thank You
  • -Given: 12
  • -Receive: 15
  • Posts: 60
  • Karma: +0/-0

Chính xác là mình còn quá gà khi nói về cái vấn đề này.
Có nhiều chú bác đọc bài này xong sẽ chửi hay cười khẩy 1 phát.

Nhưng ở đây xin trình bày tý chút cái này, coi như để tự tổng kết đầu óc 1 chút cho vấn đề.
Note : Đây chỉ là suy nghĩ cá nhân, không có gì chắc chắn, sai ráng chịu.

Giới thiệu :
Kỹ thuật này có nhiều tên khác nhau trong các hãng AV, và cũng tùy "học giả" gọi.
Quantum : Đó là tên gọi kiểu như code name mà Symantec gọi kỹ thuật này.
Không dám chắc, nhưng trong vài clip trình bày tổng quan kỹ thuật thì Symantec đã sử dụng 1 khối lượng lớn mẫu (Sạch và bẩn, chia thành 2 phe) và tiến hành tạo signature trên khối lượng này.

Chúng ta cùng ngầm hiểu ở đây, trên 1 khối string của mỗi file, tiến hành thao tác lấy và thử, kiểm và bỏ. Theo một tỉ số % nhất định (Theo công thức toán là Lam đa)

Cơ chế nhận dạng theo máy học : Cách mà thầy Quang gọi kỹ thuật này, và đang áp dụng nó cho D32

Tổng quát :

Có 2 khối sample (Gồm rất nhiều sample nhỏ) gồm : Sạch Bẩn
 Nhiệm vụ : Tìm kiếm các signature mức độ chính xác là cao nhất có thể để phân loại 2 khi nhìn vào 1 sample bất kỳ thì có thể nhận ra nó thuộc kho nào.

Có 2 case xét như sau :
Case 1 : Với dữ liệu không mang tính cấu trúc

Có rất là nhiều trường hợp để lấy 1 signature (Liền nhau, cách nhau theo dạng wildcard... như cứ liền nhau đơn giản đã chết rồi )
Trong trường hợp này, sẽ chưa cần xét nhiều đến rule (Nâng cao), do tính chất dữ liệu là không mang cấu trúc.

Làm gì ?
Lặp liên tục, bóc tách tất cả các string theo luật lấy string quy ước. Cùng với đó là việc lưu trữ chỉ số offset (Nếu cần).
Lưu trữ tạm thời, tạo 1 bảng lưu trữ dạng như map lại tình hình chi tiết của từng mẫu.
Tiến hành chạy tính tất cả các bảng lưu để tính xác suất lặp lại các string (Có thể tính đến offset tùy luật nêu ra của người tạo). Trong nhiều trường hợp tiến hành ước lượng theo vùng offset nhất định của 1 signature.

Ví dụ :
Tình trạng mẫu :
Số lượng : 10 (Gồm 5 file .doc và 5 file .xls)
 Hình thức chia : Thành 2 kho, tương ứng với 2 thư mục con : Word & Excel

Thiết lập một số luật như sau :

Độ dài signature cần nhận : 10->20
 Kiểu signature : Các ký tự liền kề (Bỏ qua Wildcard)
Độ sai lệch offset tối đa : 100
Độ sai khớp các signture : 100%
Lấy kết quả có độ trùng lặp từ : 50%
Tạm thời ở đây, chỉ tìm sự trùng lặp của các mẫu cùng tính chất (Cái khác tính chất từ từ sẽ tính tiếp)

Làm việc :
1. Tiến hành chạy tạo map cả 5 file (Chỉ số offset ở đây không cần ghi cụ thể mà có thể ngầm định, do ở đây độ dài signature + Kiểu signatue là tĩnh).
2. Chạy từng file theo thứ tự từ 1->5
Chạy từng sign trong từng file, mỗi sign này sẽ tối đa so sánh 201 lần (Do luật là độ sai lệch offset cho là 100) với bảng sign trong các 1 map khác.
Tiến hành so sánh độ sai khác, ở đây mình để 100% -> 2 chuỗi cần so sánh y hệt nhau.

 Mỗi lần so sánh là đúng (Tức là thỏa 2 điều trên) sẽ cộng thêm 1 vào giá trị lưu trữ số mẫu file có trùng khớp sign. Số này sau khi chạy chia cho tổng số mẫu mang cùng tính chất để cho ra tỉ số %.
 
 Sẽ có trường hợp :
 1 sign nằm ở offset n trên map 1 so khớp với 1 sign nhằm ở (n+k) trên map 2.
 Sign nằm tại (n+k) trên map 2 lại so khớp với vị trí (n+k+h) trên map 3.
 Tuy nhiên do độ lệch offset giữa n và (n+k+h) quá lớn nằm quá luật nên nếu xét so với map 1 thì lại không khớp luật.
 Nên tạm thời chúng ta không gạch bỏ những phần so khớp của map sau.
 
3. Kết quả lấy sẽ lấy những signature có số % lớn hơn 50%

Chưa code thử, nhưng mình dám đảm bảo là cách này giúp nhận ra một số header của mấy định dạng file lẹ lắm

Case 2 : Dữ liệu mang tính cấu trúc
Cái này mới là áp dụng để nhận dạng virus thiệt nè.

Cũng tương tự Case 1, tuy nhiên công việc không chỉ đơn thuần là duyệt string các độ dài khác nhau rồi tính toán. Tuy nhiên công việc vất vả hơn nhiều, do dữ liệu có cấu trúc nên sẽ có các cách xử lý theo luật phức tạp hơn nhiều.

Ví dụ :
Trong kho gồm 10 mẫu virus có định dạng .exe . Việc xét dữ liệu không chỉ đơn thuần là xét theo offset tĩnh mà thật ra lại phải xét theo vị trí kể từ entry point.
Tuy nhiên, các vị trí entry point "rất là ngầu" có chú nằm đầu file, nằm Section trên, có chú lại nằm cuối file.
-> Nếu chỉ xét theo kiểu offset tương đối dựa trên entry point thôi chưa đủ
-> Cần xét theo thứ tự các dòng lệnh sẽ xử lý ...

Việc thiết lập ra các luật ở đây đòi hỏi kiến thức rất sâu về cấu trúc dữ liệu tương ứng của người tạo luật cũng như người code để xử lý tương ứng.

 Một số thuận lợi + Khó khăn :
Thuận lợi :
- Cho phép dự đoán tương đối các virus mới, nếu độ sai lệnh không nhiều.
- Tự động hóa khá chính xác việc lấy signature
- Cho phép thao tác lấy signature trên một số lượng mẫu khổng lồ rất là nhanh chóng.
Khó khăn :
- Cài đặt thuật toán sao cho ổn định + tối ưu + chạy chính xác. Rất là khó
- Đòi hỏi cấu hình máy chạy phải rất ổn. Do hao tốn tài nguyên hệ thống rất ghê.
- Yêu cầu số mẫu phân loại cực lớn.
... tóm lại rất là khó

ninja0809

  • Registered Users
  • Thank You
  • -Given: 182
  • -Receive: 179
  • Posts: 1649
  • Karma: +0/-0

Đọc chỉ hiểu dc vài chi tiết ở phần đầu. Về sau thua......Cái này khó wa
*Image Removed**Image Removed**Image Removed*

hoangcuongflp

  • Registered Users
  • Thank You
  • -Given: 1
  • -Receive: 0
  • Posts: 1
  • Karma: +0/-0

Trong 4rum còn ai hoạt động không ạ?.

bolzano_1989

  • Administrator
  • Thank You
  • -Given: 542
  • -Receive: 840
  • Posts: 4634
  • Karma: +0/-0

Trong 4rum còn ai hoạt động không ạ?.

Bạn cần đặt câu hỏi hay thảo luận gì à?
I hear and I may forget, I see and I remember, I do and I understand...
CMC InfoSec hỗ trợ khách hàng 24/7 qua đường dây nóng: 1900 571 244
CMCiS Fan Club: http://goo.gl/pnIHl
Trợ giúp diệt virus gửi tin nhắn Yahoo: http://goo.gl/MWzFT
CMC InfoSec FB: http://goo.gl/WZlbg
Các hiện tượng đặc trưng biểu hiện máy tính bị lây nhiễm virus: http://goo.gl/XOnBi
Nếu bạn có các kĩ năng Reverse Code Engineering và muốn đóng góp cho forum thì gửi tin nhắn riêng cho mình nhé.

Diễn đàn chính