banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật Malware detection  XML
  [Discussion]   Malware detection 27/03/2012 23:41:35 (+0700) | #1 | 260017
monads
Member

[Minus]    0    [Plus]
Joined: 21/03/2012 04:13:31
Messages: 17
Offline
[Profile] [PM]
Em mạn phép đưa một vấn đề nghiên cứu của bản thân để mọi người bàn luận, mặc dù vấn đề này có thể hoàn toàn lạc lõng ở đây, tuy nhiên forum có nhiều người giỏi về kỹ thuật nên em hi vọng có thể có một chút trao đổi.

Hiện nay các phương pháp phát hiện malware có thể phân loại (theo một nghĩa nào đó) thành: static-based và dynamic-based. Static-based có nghĩa là dò tìm một số pattern trên binary code, còn dynamic-based có nghĩa là dò tìm một số behaviors trên running process.

Vì bài toán phát hiện malware, trong trường hợp tổng quát sẽ bị giới hạn bởi định lý Rice, là undecidable: có nghĩa là ta không thể viết được một chương trình sao cho nó có khả năng kiểm tra xem một chương trình bất kỳ có tính chất cho trước hay không (điều này nghe có vẻ ghê nhưng thực ra ý tưởng chứng minh rất đơn giản). Tuy nhiên bài toán kiểm tra, trong một khoảng thời gian hữu hạn, một chương trình bất kỳ có thực hiện điều gì đó hay không, lại là decidable, đây là một lý do mà chúng ta có rất nhiều chương trình antivirus.

Em đang viết một bài báo, hiện đang ở dạng draft (nếu anh em nào muốn xem thì có thể lấy ở đây http://www.sendspace.com/file/hedx06). Ý tưởng của bài báo là hoàn toàn đơn giản, em đi từ các tương tác giữa chương trình và OS qua các syscalls, qua việc phân tích các tác động của syscalls trên OS em rút ra được một số cấu trúc toán học trên đó (lattice and monoidal category), đây là một ý tưởng không hề mới trong representation theory, và từ các cấu trúc đó em xây dựng các partial order trên semantics của process.

Partial order có thể hiểu như thế này, nếu M là semantics của malware X, P là semantics của chương trình Y, nếu có quan hệ M < P thì nói rằng Y thuộc vào (bị nhiễm bởi) lớp malware X. Ở đây semantics là một khái niệm chung chỉ một mathematical meaning cho chương trình.

Hiển nhiên là phương pháp phát hiện này có cách để vượt qua (điều này hoàn toàn có thể chứng minh qua lý thuyết mà không cần phải có proof-of-concept), nhưng dù sao thì nó cũng có thể hoạt động cho một lớp các malware.Và kỹ thuật vượt qua này có thể áp dụng chống lại tất cả các phương pháp system call monitoring hiện có, em xin bàn đến vấn đề này vào lúc khác.

Điểm mạnh của phương pháp này (theo em) là nó có thể vượt qua phần lớn các kỹ thuật obfuscating hiện tại (các kỹ thuật này thì rất nhiều, tuy nhiên cũng cần phải nói tới một giới hạn lý thuyết là không bao giờ ta có thể obfuscate hoàn toàn mọi chương trình).

Tuy vậy điểm yếu của phương pháp này, dẫn tới việc nó chưa thể mở rộng cho trường hợp của botnet (phương pháp của em có thể sử dụng cho các multi-process malware, miễn là các process này không sử dụng các covert channel trong việc trao đổi thông tin), nằm ở chỗ nếu nó không tìm được một người quan sát (ở đây có thể hiểu người quan sát là hệ điều hành) cho các trao đổi qua covert channel thì nó trở nên hoàn toàn vô dụng.

Một ví dụ cho sự trao đổi thông tin giữa 2 process A và B không thông qua OS là như sau: A ghi dữ liệu lên file X, sau đó B đọc file X để biết rằng cần làm gì, việc trao đổi này không thông qua inter-process communication syscalls. Và có thể thấy là các covert channel kiểu này có rất nhiều dạng.

Vấn đề kỹ thuật mà em vẫn chưa dám chắc, là các dạng botnets hiện tại, có khi nào (trong thực tế) mà 2 bots trao đổi với nhau để thực hiện một điều gì đó không. Và một giới hạn không thể vượt qua là, trong trường hợp các bots sử dụng cryptographic communication thì việc quan sát ở giữa là hoàn toàn vô nghĩa.

Mong có sự trao đổi của anh em, có điều gì thì mong anh em chém nhẹ tay smilie.
[Up] [Print Copy]
  [Discussion]   Malware detection 28/03/2012 10:25:02 (+0700) | #2 | 260056
[Avatar]
bolzano_1989
Journalist

[Minus]    0    [Plus]
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
[Profile] [PM]

monads wrote:

Vấn đề kỹ thuật mà em vẫn chưa dám chắc, là các dạng botnets hiện tại, có khi nào (trong thực tế) mà 2 bots trao đổi với nhau để thực hiện một điều gì đó không.  


Điểm này thì có rồi bạn smilie .
Kiểm tra các file bạn nghi ngờ có virus:
http://goo.gl/m3Fb6C
http://goo.gl/EqaZt
http://goo.gl/gEF8e
Nhận mẫu virus qua FB: http://goo.gl/70Xo23
HVA Malware Response Team: kiemtravirus@gmail.com
Trợ giúp diệt virus: http://goo.gl/2bqxY
[Up] [Print Copy]
  [Discussion]   Malware detection 28/03/2012 12:09:12 (+0700) | #3 | 260075
monads
Member

[Minus]    0    [Plus]
Joined: 21/03/2012 04:13:31
Messages: 17
Offline
[Profile] [PM]
Bạn không cho dẫn chứng nên không rõ là ý bạn muốn nói gì. Thực ra có tồn tại các trao đổi như vậy, nhưng các trao đổi này ở dạng sơ khai, chẳng hạn như việc trao đổi các PList và RList của Waledac để thay đổi toplogy của botnet. Ý của mình là hơi khác, đó là có khi nào bots hoạt động theo kiểu phân tán thực sự, nó gồm nhiều phần khác nhau (không phải là các bản sao của một malware) nằm trên các machine khác nhau, và khi ráp lại thì nó mới thể hiện các malicious actions.
Về lý thuyết thì có tồn tại, vì đây chỉ là một dạng cụ thể của K-ary malware.
[Up] [Print Copy]
  [Discussion]   Malware detection 28/03/2012 16:22:44 (+0700) | #4 | 260135
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Ngoài việc xây dựng PIPE bằng các Syscall, và sử dụng file như bạn nói thì các malware còn có thể trao đổi dữ liệu thông qua winsock. Chúng bind 1 port UDP và tiến hành trao đổi giữa 2 process thông qua UDP.

Còn một cách nữa trao đổi dữ liệu là thông qua các GUI object. Tức là 1 process tạo ra 1 GUI object sau đó Process khác tìm process virus cần tương tác, và trao đổi bằng cách điều chỉnh thông tin của GUI object đó mà không quan ngại về antivirus.

Bạn có thể tìm hiểu về các API sau:
Code:
FindWindow
FindWindowEx
GetWindowText
SetWindowText


Mình không chắc là tên mấy cái API đúng nhưng mình nghĩ bạn có thể tìm nó với GOOGLE để có tên chính xác hơn. Thân :">.

P/s: bạn có thể tìm hiểu clamav như và một ví dụ thực tế sống động.
while(1){}
[Up] [Print Copy]
  [Discussion]   Malware detection 28/03/2012 23:31:12 (+0700) | #5 | 260200
cosmos627
Member

[Minus]    0    [Plus]
Joined: 04/02/2012 00:46:16
Messages: 1
Offline
[Profile] [PM]
@monads:
Tài liệu toàn mô hình toán học, đọc khó quá vì kiến thức của mình về toán rất hạn chế smilie
Mình thử mô tả nôm na ý mình hiểu xem có đúng không nhé:
Bạn dựa vào các tác động cuối cùng (final results) lên môi trường/hệ thống của 1 process thông qua syscall để đánh giá process đó có phải là malware (hay bị nhiễm malware) không.
Giả sử một loại malware M có các tác động đặc trưng lên môi trường là {E1,E2,E3} (tạm lấy 3 giá trị thôi cho nó ngắn smilie). Thế thì 1 process A sẽ bị coi là malware M (hoặc bị nhiễm malware M) nếu nó rơi vào một trong các trường hợp sau:
i1) A có chứa các tác động E1, E2, E3 theo đúng thứ tự đó lên môi trường
Chẳng hạn: tập các tác động của A là {.., A1, E1, A2, A3, E2, A4, E3,...}

i2) A có chứa các tác động partial mà khi "cộng lại" thì thành E1, E2, E3 theo đúng thứ tự đó
Chẳng hạn: tập các tác động của A là {..., E11, E12, A2, E2, A3, E31, E32, E33,...}
trong đó: E11+E12=E1, E31+E32+E33=E3

Nếu mình hiểu sai thì bạn giải thích lại giúp nhé. Bởi vì phải hiểu đúng phương pháp đã thì mớ chém tiếp được smilie
[Up] [Print Copy]
  [Discussion]   Malware detection 29/03/2012 00:50:39 (+0700) | #6 | 260207
monads
Member

[Minus]    0    [Plus]
Joined: 21/03/2012 04:13:31
Messages: 17
Offline
[Profile] [PM]
Cám ơn bạn, thực ra cách bạn hiểu không khác bao nhiêu so với bản chất vấn đề. Việc mô hình toán học chỉ nhằm mục đích có một lập luận chặt chẽ và chính xác, ngoài ra không có gì ghê gớm.
Thực ra thứ tự các tác động không quan trọng lắm, vì malware có thể thay đổi thứ tự các tác động, miễn sao nó đạt được mục đích. Vì vậy mình cố gắng nhóm các tác động có liên quan lại, cái này mình viết trong bài là sequential composition. Ngoài ra có những tác động không nhóm được, nó giao hoán, tức là nó xuất hiện theo kiều A, B hoặc B, A thì đều đạt được mục đính, trường hợp này mình mô tả nó bằng tích tensor, tức là parallel composition.
Từ đây mình xây dựng được một cấu trúc toán học trên tập các tác động, với tính chất của 2 toán tử sequential composition và parallel composition.
Việc qui định khi nào E1 + E2 = E12 lại không đơn giản (vì có nhiều cách định nghĩa, mỗi cách nó sẽ đúng trong một ngữ cảnh khác nhau), do đó mình không qui định tường minh ở đây. Thay vào đó thì minh đi định nghĩa cái gọi là morphism formula, và định nghĩa khi nào thì 2 morphism formula là tương đương, kiểu như là a(b+c) = ab + ac.
Bài này mình vẫn đang tiếp tục sửa, các kết quả mình thu được chưa đủ mạnh (những cái mình đã thu được chỉ là một kết quả tổng quát hơn kết quả của người đi trước mình, nhưng người đó sử dụng một cách tiếp cận khác).
[Up] [Print Copy]
  [Discussion]   Malware detection 29/03/2012 01:27:41 (+0700) | #7 | 260208
monads
Member

[Minus]    0    [Plus]
Joined: 21/03/2012 04:13:31
Messages: 17
Offline
[Profile] [PM]
Cám ơn góp ý của bạn chiro8x, tuần rồi mình cũng lọ mọ get the hands dirty với malware.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|