Thứ Bảy, 22 tháng 3, 2014

Các dạng phần mềm độc hại (ĐẦY ĐỦ - phần 1)

1. Malware or virus? (định nghĩa lại phần mềm độc hại cho Việt Nam):
Internet và các hiểm họa. Hình minh họa: discountgeeks.com
Malware (malicious software - phần mềm độc hại) là từ chỉ chung các phần mềm độc hại có tính năng gây hại cho thiết bị bị lây nhiễm, bao gồm virus, worm, trojan,...

Như đã nói ở bài trước (lịch sử virus), virus cũng chỉ là 1 trong các dạng malware . Tuy nhiên, trong ngôn ngữ thông dụng hàng ngày ở Việt Nam, virus vẫn được coi là bao gồm tất cả các thể loại phần mềm độc hại. Tức virus = malware theo định nghĩa của những người dùng thông thường. Thậm chí, nhiều người dùng còn hiểu nhầm malware chỉ là ..1 tập con của Virus.

Bởi lý do đó, mà tôi để tag malware/virus cho các thể loại bài có liên quan trên GVEhacker, nhằm giúp các bạn định nghĩa lại cho chính xác: Virus chỉ là một tập con của Malware mà thôi.

Quan điểm này phù hợp hoàn toàn với định nghĩa của thế giới nói chung và dân IT nói riêng, và được NIST (National Institute of Standard and Technology - Viện tiêu chuẩn - công nghệ quốc gia Hoa kỳ, trực thuộc Bộ Thương Mại của liên bang Hoa Kỳ) công nhận và công bố,
trong tài liệu NIST SP800-83 có tựa đề "Guide to Malware Incident Prevention and Handling(<--click to download), phát hành vào tháng 11/2005:


NIST SP800-83_Guide to Malware Incident Prevention and Handling
NIST là Viện nghiên cứu của Liên bang Mỹ, có trách nhiệm trong việc ban hành các tiêu chuẩn, các chỉ dẫn và các yêu cầu tối thiểu để đảm bảo an toàn – an ninh cho hệ thống thông tin và tài nguyên thông tin.
Các tiêu chuẩn, chỉ dẫn của NIST không chỉ có ảnh hưởng tại Mỹ mà còn có ảnh hưởng rất lớn tới tính năng kỹ thuật của hầu hết các sản phẩm công nghệ trong lĩnh vực bảo mật thông tin (Information Security).

Quan điểm trong tài liệu này có một số khác biệt theo định nghĩa và cách hiểu thông thường về virus máy tính hiện đang phổ biến ở Việt nam. Ngay trong tên của tài liệu đã nêu lên sự khác biệt, các tác giả nói tới malware chứ không sử dụng thuật ngữ virus. Tại Việt nam hiện nay, thuật ngữ "virus máy tính" được dùng hết sức rộng rãi và bao hàm tất cả các dạng mã độc hại trên mạng, trong máy tính cá nhân.... Khi nói đến "virus máy tính", một cách rất tự nhiên tất cả mọi người đều nghĩ virus bao gồm cả worm, trojan, keylogger, trong khi theo định nghĩa của NIST (và gần như là của cả cộng đồng IT), virus, worm, trojan,.... chỉ là một dạng của mã độc hại. 

Sự khác biệt này dẫn tới một số khó khăn, ví dụ: khi trao đổi với các tổ chức quốc tế về an toàn thông tin, trao đổi với hỗ trợ kỹ thuật từ các Trung tâm phòng chống virus của nước ngoài, do không đồng nhất về định nghĩa, phía Việt Nam sẽ thông báo "bị virus tấn công", đối tác sẽ gửi lại một chỉ dẫn để quét file bị nhiễm trên PC, nhưng thực chất đó là một cuộc tấn công của worm (sâu) và phải phòng chống trên toàn bộ mạng (network).

Do đó, giới IT của nước ta nói riêng, và tri thức của những người đang có định nghĩa sai lầm về "virus máy tính" nói chung, nên nhìn nhận lại chính xác, để có thể hòa nhập được vào thế giới văn minh, và cùng phát triển.

Bài viết này không nằm ngoài mục đích đó.

2. Phân loại Malware:

Tổng quan, ta chia các dạng độc hại có thể gây hại cho máy tính theo 7+1 loại sau:

2.1. Virus:


Virus là một loại mã độc hại (Malicious code) có khả năng tự nhân bản và lây nhiễm chính nó vào các file, chương trình hoặc máy tính. Theo cách định nghĩa này virus máy tính phải luôn luôn bám vào một vật chủ (đó là file dữ liệu hoặc file ứng dụng) để lây lan. Các chương trình diệt virus dựa vào đặc tính này để thực thi việc phòng chống và diệt virus, để quét các file trên thiết bị lưu, quét các file trước khi lưu xuống ổ cứng, ... 
Điều này cũng giải thích vì sao đôi khi các phần mềm diệt virus tại PC đưa ra thông báo "phát hiện ra virus nhưng không diệt được" khi thấy có dấu hiệu hoạt động của virus trên PC, bởi vì "vật mang virus" lại nằm ở máy khác nên không thể thực thi việc xoá đoạn mã độc hại đó.

Mức độ độc hại của Virus dao động từ mức tương đối lành tính (ví dụ như gây khó chịu cho người dùng, hoặc chỉ để truyền tải 1 thông điệp nào đó) cho đến mức cực kỳ độc hại (ví dụ: Đánh cắp thông tin và chuyển thông tin của victim cho người khởi tạo virus, hoặc là phá hủy hệ thống).

Nhiều virus cũng có 1 đoạn code kích hoạt (trigger), cần 1 thao tác của người dùng tác động vào để virus thực thi (ví dụ như mở file, chạy chương trình, mở tập đính kèm trên email...).

Virus có 2 chủng loại chính: Compiled Virus, được thực thi bởi hệ điều hành (OS - Operating System); và Interpreted Virus, được thực thi bởi các chương trình chạy trên OS.
Phần sau đây nói về 2 chủng loại virus này, cùng các kỹ thuật khác nhau mà virus sử dụng để 'qua mặt', tránh bị phát hiện:

2.1.1. Compiled Virus:
Là virus mà mã thực thi của nó đã được dịch hoàn chỉnh bởi một trình biên dịch để nó có thể thực thi trực tiếp bởi/từ OS.
Compiled virus thường chia thành 3 thể loại con sau:

2.1.1.1. File Infector: file infector virus (virus lây nhiễm vào file) sẽ sao chép và gắn chính nó lên những chương trình thực thi, như là MSWord, AutoCad hay các trò chơi điện tử. Khi virus đã lây nhiễm cho 1 chương trình, thì (khi chương trình bị nhiễm virus đó khởi chạy) nó sẽ lây lan sang các chương trình khác trên hệ thống, cũng như các hệ thống khác sử dụng chung 1 chương trình chia sẻ mà đã bị lây nhiễm. Jerusalem và Cascade (đã được giới thiệu ở bài trước: ) chính là 2 ví dụ nổi tiếp cho loại File Infector Virus.

2.1.1.2. Boot Sector: boot sector virus lây nhiễm vào vùng khởi động chủ (MBR - master boot record) của ổ đĩa cứng (hard drive), hay lây nhiễm vào cung khởi động (boot sector) của đĩa cứng/ổ đĩa gắn ngoài (ví dụ như đĩa mềm (floppy diskettes), DVD-RW, USB stick memory...)

/* boot sector (vùng khởi động hay khu vực khởi động) chính là vùng đầu tiên của ổ đĩa/phân vùng ổ đĩa/các thiết bị lưu trữ dữ liệu khác, nơi chứa thông tin về thiết bị đó và/hoặc chứa thông tin về cấu trúc ổ đĩa/phân vùng... đó (ví dụ: Chứa thông tin về ổ đĩa/phân vùng này có bao nhiêu TB dung lượng, có định dạng ổ/phân vùng là ext4 hay NTFS hay FAT32... 
boot sector cũng đồng thời chứa chương trình khởi động, được chạy khi khởi động máy để khởi động OS */

/* MBR là vị trí duy nhất trên ổ đĩa cứng mà BIOS (Basic Input / Output System - hệ thống đầu vào/ra cơ bản của máy tính) có thể xác định vị trí để tải và khởi chạy hệ điều hành. Những thiết bị lưu trữ gắn ngoài (như USB key, portable HDD/SSD...), không nhất thiết phải có khả năng khởi động (bootable), nhưng nếu được gắn vào trong lúc hệ thống đang khởi động, thì vẫn có khả năng lây nhiễm boot virus! */

Boot sector virus rất dễ ẩn thân, tỷ lệ lây nhiễm thành công cho hệ thống lại cực cao.
Boot sector virus, sau khi lây nhiễm thành công, có thể làm cho PC hiện thông báo lỗi ngay khi khởi động, hay thậm chí ở mức độ tệ hại hơn là hệ thống không khởi động được nữa!
Form, Michelangelo và Stoned là 3 ví dụ điển hình cho thể loại boot sector virus.

2.1.1.3. Multipartite: Multipartite virus sử dụng nhiều phương pháp lây nhiễm, thường sử dụng cả 2 phương thức lây nhiễm cho cả files lẫn boot sector (kết hợp giữa 2.1.1.1 và 2.1.1.2):
Multipartite virus = file infector virus + boot sector virus.
Ví dụ điển hỉnh về multipartite virus là Flip và Ivander.

2.1.2. Interpreted Virus:
 Không giống như compiled virus (vốn có thể thực thi trực tiếp từ hệ điều hành), Interpreted virus là một tổ hợp của mã nguồn mã chỉ thực thi được dưới sự hỗ trợ của một ứng dụng cụ thể hoặc một dịch vụ cụ thể trong hệ thống.
Hiểu một cách đơn giản, virus kiểu này chỉ là một tập lệnh, cho đến khi ứng dụng gọi thì nó mới được thực thi.
Interpreted Virus càng lúc càng trở nên phổ biến hơn Compiled Virus bởi lý do đơn giản: Một kẻ tấn công, không cần có "tay nghề" cao, cũng có thể sửa đổi đôi chút từ mã nguồn để tạo ra các biến thể. Do đó, nhiều lúc có cả hàng chục, thậm chí hàng trăm biến thể từ con interpreted virus gốc.
Có 2 thể loại con chính của interpreted virus, là Macro Virus và Scripting Virus:

2.1.2.1. Macro Virus: Là loại phổ biến và thành công nhất của dạng này trong những năm trước đây của thế kỷ 21. Nó lây nhiễm lên các tập tin tài liệu (như .doc, .ppt...) và "nằm chờ", đến khi file tài liệu được mở ra bởi 1 chương trình (ví dụ Microsoft Office): Nó bắt đầu thực hiện "sứ mệnh cao cả": LÂY NHIỄM.
Loại này lây lan siêu nhanh trước đây bởi 2 lý do:

  • Thứ nhất: Những file văn bản như .doc (định dạng văn bản của Microsoft Word) được chia sẻ rất rộng rãi qua internet, mang đi in, copy qua USB key, và được bật đi bật lại nhiều lần;
  • Thứ hai: Do quan niệm sai lầm, nghĩ rằng chỉ những file dạng *.exe mới có khả năng lây nhiễm virus, còn *.doc, *.chm... thì không!

Ví dụ kinh điển cho macro virus là The Concept, Marker và Melissa.

2.1.2.2. Scripting Virus: Thể loại virus này rất giông với Macro Virus, sự khác biệt chính là: macro virus là tập lệnh thực thi bởi một ứng dụng cụ thể, còn scripting virus là tập lệnh chạy bằng một dịch vụ (service) của hệ điều hành. 'First and Love Stages' là virus nổi tiếng của thể loại này.

!: Ngày nay (2014), macro virus đã ít dần đi, do Microsoft Office bây giờ đã ít dùng các macro trong các bộ Office thế hệ mới.

2.1.3. Các kỹ thuật ẩn thân của virus (Virus Obfuscation Techniques):
Hầu hết các virus đều sử dụng 1 hoặc nhiều kỹ thuật ẩn dấu. Đó là cách để các 'hacker' xây dựng virus khiến cho virus ngày càng khó để phát hiện (bởi các chuyên gia bảo mật cấp cao, các chương trình diệt virus)
Virus càng khó bị phát hiện, thì tất nhiên khả năng gây thiệt hại cho hệ thống càng lớn, và khả năng lây lan cũng lớn hơn nhiều. Thông thường, có các kỹ thuật ẩn thân cơ bản sau:

2.1.3.1. Self-Encryption and Self-Decryption (Tự mã hóa và Tự giải mã):
Một số virus có khả năng mã hóa và giải mã phần mã chính của chính nó (code body) để che giấu khỏi bị phát hiện trực tiếp.
Virus có thể sử dụng nhiều lớp mã hóa, hoặc khóa mật mã ngẫu nhiên (random cryptographic key), khiến cho từ 1 code body, nếu sử dụng các phương thức mã hóa khác nhau, sẽ cho ra nhiều virus khác nhau mà có thể hệ thống phần mềm diệt virus không thể phát hiện ra được, hoặc phát hiện ra được 'con' virus này, nhưng lại để lọt mất 'con' kia, mặc dù chúng cùng có chung code body, và cùng thực thi 1 nhiệm vụ như nhau!

2.1.3.2. Polymorphism (Đa hình):
Polymorphism là một hình thái đặc biệt mạnh của self-encryption. Một virus đa hình thường có vài thay đổi so với việc mã hóa mặc định, cũng như thay đổi phương thức giải mã.
Trong 1 virus đa hình: Code body vẫn không thay đổi, chỉ có phương thức ẩn thân là thay đổi.
Polymorphism virus chính là một bước phát triển của phương thức ẩn thân đã nêu ở 2.1.3.1.

2.1.3.3. Metamorphism (Biến thể):
Ý tưởng 'thiết kế' đằng sau thể loại virus này chính là: Tạo ra 1 loại virus có khả năng thay đổi nội dung của chính nó, hơn là sử dụng cách thức thay đổi sự ẩn thân bằng việc mã hóa.
Các virus thể loại này có thể thay đổi theo nhiều cách:

  • Hoặc thêm 1 chuỗi mã vô hại/không cần thiết vào mã nguồn;
  • Hoặc thay đổi cấu trúc các phần của mã nguồn (đảo, trộn... mã)...

Các mã bị thay đổi, thêm/bớt sau đó được biên dịch lại (re-compiled) để tạo ra một virus thực thi mới (có thể mang 'nhiệm vụ' mới) về cơ bản khác với bản gốc.

2.1.3.4. Stealth (ẩn - tàng hình):
Stealth virus sử dụng nhiều đặc tính kỹ thuật khác nhau để che dấu đặc tính gốc (lây nhiễm) của nó. Ví dụ: Nhiều virus, sau khi lây nhiễm cho files, sẽ thâm nhập luôn vào cơ chế kiểm soát kích thước files của hệ điều hành, khiến cho hệ điều hành hay chương trình diệt virus hoặc người dùng vẫn nhìn thấy kích thước của file bị lây nhiễm là vẫn như cũ (không tăng thêm, tức không bao gồm kích thước của cả 'con' virus!).

2.1.3.5. Armoring (kỹ thuật tạo vỏ bọc):
Mục đích của kỹ thuật này là làm cho con virus có 1 lớp vỏ bọc để đánh lừa khả năng của các chương trình diệt virus (antivirus software) hay các chuyên gia phân tích, khiến cho chức năng thực sự của con virus loại này không bị lộ thân, và khó có thể truy tìm được dấu vết của nó trên hệ thống...

2.1.3.6. Tunneling (kỹ thuật tạo đường hầm):
Với kỹ thuật này, virus sẽ tạo ra 1 đường hầm để chèn chính nó vào low-level (*) của OS, khiến cho các low-level của OS không thể khởi chạy (bị đánh chặn bởi virus).
Với cách này, virus dễ dàng qua mặt được antivirus software bằng cách đưa ra các lệnh giả ở mức độ low-level, khiến cho chương trình antivirus tưởng nhầm đó chính là hoạt động đích thực của OS, và bỏ qua nó.

Chú thích: (*): low-level: Từ kỹ thuật này dùng để biểu thị các lệnh được lập trình gần với định dạng của mã máy (như lập trình bằng ngôn ngữ Assembly chẳng hạn).

------------------
Ngày nay, các nhà phát triển Anti-virus software đã nghiên cứu rất kỹ những kỹ thuật trên của virus, khiến cho chương trình diệt virus của họ ngày càng có hiệu quả hơn với những thuật ẩn thân của virus kể trên, bao gồm thuật tàng hình, tạo vỏ bọc, đa hình và siêu đa hình...

Tuy nhiên, vẫn còn 1 rào cản khó vượt qua cho Anti-virus software: Kỹ thuật biến thể (Metamorphism).
Chính vì kỹ thuật này, mà dữ liệu phân tích cũ của 1 anti-virus software trở nên vô dụng ngay lập tức khi có biến thể mới từ con virus gốc (mà có khả năng diệt được đó). Cho nên, các gói cập nhật (update) vẫn được tung ra hàng tuần, thậm chí là hàng ngày, để phòng chống nguy cơ này (sau khi đã nghiên cứu xong biến thể mới và đưa ra được đoạn code đề kháng, để cho lên dữ liệu trên server và từ đó bạn có thể download được về gói update).

Bài viết nằm trong hệ thống bài "Hành trang lướt web an toàn" của GVEhacker, với label là SAFE INTERNET ACCESS. Mong quý bạn bè quan tâm đón đọc.

Không có nhận xét nào:

Đăng nhận xét