Giải ngố Virtualization – Phần 1: Bước chân vào thế giới ảo

Trong cái Series Giải ngố Malware, tôi đã 2 lần đụng trúng cái khái niệm Virtual Machine – VM (hay “máy ảo”), cụ thể:

Trong mục #4 Phòng Malware như nào? của Giải ngố Malware – Phần 1: Malware có phải là Virus không?:

“…Có thể kiểm tra link với công cụ hỗ trợ như Virus Total hay mở trong môi trường đã cô lập như máy ảo để kiểm tra…”

Và trong mục #8 Armouring Virus của Giải ngố Malware – Phần 3: Phân hệ Obfuscation Technique Based Virus:

“…Armouring Virus là loại khiến cho mấy ông phân tích đau đầu vì nó có khả năng sử dụng nhiều combo bẩn bựa như Anti-debugging, Anti-heuristic, Anti-goat, Anti-VM nhằm chống lại phương án debug phân tích cơ chế, nhận diện các kiểu…”

Lúc đó tôi có hứa hẹn sẽ ghi chú và quay lại xúc nó vào một ngày đẹp trời nào đó. Và có vẻ ngày đó chính là hôm nay.

Thực ra cái đám VM này tôi cũng đã từng vọc vạch với VMware trong bài Giải ngố WWW – Phần 5: 6 bước tự dựng Certificate Authority Server để cấp Certificate cho Website nâng cấp từ HTTP lên HTTPS. Tuy nhiên lúc đó tôi chơi kiểu mì ăn liền để tập trung vào vấn đề Certificate Authority thôi chứ không nghĩ ngợi về cái vấn đề Virtualization – ảo hóa nhiều lắm. Do vậy, hôm nay tôi sẽ ngược dòng lịch sử, đào bới tí về Virtualization để xem cụ thể như nào.

#1 Virtualization là gì?

Duyệt nhanh thông tin tôi thấy một cái định nghĩa có vẻ dễ nuốt:

Virtualization (ảo hóa) cho phép một hoặc nhiều hệ thống ảo hay máy ảo (Virtual Machine – VM) trên một hệ thống vật lý. Các sư cụ trong lĩnh vực ảo hóa như Vmware, Microsoft Hyper-V hay Oracle VirtualBox sẽ có các công nghệ ảo hóa với Hypervisor đặc thù riêng.”

Rồi, như vậy điểm mấu chốt của ảo hóa là “chạy nhiều hệ thống ảo trên một hệ thống vật lý”. Nói cho dễ hình dung hơn là tôi có thể chạy nhiều con “laptop ảo” trên con laptop thật. Thế cụ thể VM là gì?

VM về bản chất là một (hoặc một nhóm) file nên có thể di chuyển qua lại giữa các hệ thống vật lý tùy theo nhu cầu sử dụng. Các VM có thể được thiết lập thành môi trường cô lập để thực hiện các nội dung kiểm tra thử nghiệm mà không ảnh hưởng đến Host”

Cái này tôi nghĩ chắc liên quan đến mấy thứ Sandboxing cung cấp môi trường cô lập để thử nghiệm các bản vá lỗi hay phân tích các ứng dụng nguy hiểm như Malware để xem xét tác động đến hệ thống và mạng.

Nhưng mà Hypervisor là gì?

#2 Hypervisor là gì?

Câu trả lời ngắn gọn cho câu hỏi : Hypervisor là phần mềm tạo, chạy và quản lý VM.

Hypervisor vs VMs
Hypervisor vs VMs

Nguồn: CompTIA Security+ Get Certified Get Ahead: SY0-501 Study Guide

Tôi tìm thêm thông tin thì thấy có dạng sau:

  • Type I: Chạy trực tiếp trên phần cứng, còn gọi là Bare-metal Hypervisor vì không cần chạy trên Host OS. Dòng họ ESX/ESXi của VMware thuộc thể loại này. Type I thường dùng trong các trung tâm dữ liệu quy mô lớn;
  • Type II: Chạy như phần mềm trên Host OS ví dụ như Oracle Virtual Box. Type II thường dùng trên máy cá nhân.
Hypervisor types
Hypervisor types

Nguồn: Mike Meyers’ CompTIA Security+ Certification Guide

Vâng, như mọi khi, chuyện này lại dẫn đến chuyện khác. Host, Guest, Kernel là cái đệt gì nữa đây? Tôi lại phải coi tiếp:

  • Host ý muốn nói hệ thống vật lý để chạy các VM, ví dụ con laptop ghẻ tôi đang xài;
  • Guest ý muốn hệ điều hành “ảo” đang chạy trên Host;
  • Kernel theo nghĩa đen là “nhân”, ý ám chỉ phần quan trọng nhất của thứ gì đó. Còn khi nói Host OS Kernel thì ý muốn nói đến phần chính của hệ điều hành chạy trên hệ thống vật lý.

Đến đây thì tôi đã nắm sơ bộ cái Hypervisor rồi. Nhưng mà chuyện về các thể loại ảo hóa chưa dừng lại ở đây đâu.

#3 Container/Application Cell

Nếu có quan tâm đến vấn đề Virtualization thì tôi nghĩ chắc bạn đâu đó đã nghe cái từ Container vài lần. Cái này nó lấy tên theo ý tưởng mấy cái container hàng hóa của mấy ông vận tải nhưng hiển nhiên bản chất Container trong Virualization thì sẽ khác hẳn:

Với Container hay Application Cell (sau đây tôi chỉ dùng từ Container thôi cho gọn), dịch vụ hoặc ứng dụng sẽ được chạy cô lập trong từng Container riêng biệt.

Container architecture
Container architecture

Nguồn: CompTIA Security+ Get Certified Get Ahead: SY0-501 Study Guide

Như vậy, Container sẽ cũng cần Hardware (hiển nhiên, chứ không thì chạy bằng niềm tin à), Host OS (giống Type II Hypervisor) nhưng không có Hypervisor cũng như cái Guest OS riêng biệt mà nó sẽ dựa vào Host OS Kernel để chạy các dịch vụ hoặc ứng dụng cô lập (với các container khác). Do vậy con hàng này có thể dùng ít tài nguyên hơn so với Type II Hypervisor.

Một cái tên hay được nhắc kèm theo từ Container trong thời gian gần đây là Docker (www.docker.com). Tuy nhiên bạn cần lưu ý là ông Docker tối ưu phương án triển khai đóng gói containers để thuận tiện trong phát triển và triển khai ứng dụng chứ ông này không phát minh ra cái khái niệm Container đâu nhé. Tôi nghĩ Contianer là một vấn đề hay (và tốn giấy mực) nên chắc để tôi thu xếp đào bới kỹ hơn trong một bài riêng.

Docker container
Docker_container

Nguồn: www.docker.com

#4 Điểm ngon và không ngon của Virtualization

Đọc từ đầu đến giờ thì tôi thấy giải pháp Virtualization rõ ràng có những ưu điểm nổi bật như:

  • Tiết kiệm chi phí đầu tư phần cứng: Ví dụ với một con laptop tôi có thể chạy luôn Windows, Linux và MacOS;
  • Linh hoạt trong việc quản lý: Cái này thì rõ ràng với mấy ông data center vì việc ảo hóa sẽ cho phép tăng/ giảm số lượng VM theo nhu cầu trong vài nốt nhạc;
  • Hỗ trợ việc đánh giá thử nghiệm trên các môi trường cô lập.

Tuy nhiên, cái vẹo gì mà chả mặt ngon và không ngon. Với Virtualization thì vấn đề đầu tiên là bạn phải bỏ thời gian nghiên cứu thì mới xài được. Ngoài ra, mấy đại ca trong quá trình sử dụng cũng thấy phọt ra một số vấn đề bảo mật như:

  • VM Escape: Dạng tấn công cho phép attackers truy cập hệ thống Host từ hệ thống ảo thông qua tương tác với Hypervisor để có thể nâng quyền kiểm soát các hệ thống ảo khác hay thậm chí là cả Host;
  • VM Sprawl: Xảy ra khi VM không được kiểm soát, quản lý chặt chẽ ví dụ như khi có ông nội nào tạo VM để test xong quên mịa nó việc tắt/ cập nhật thông tin vào hệ thống quản lý dẫn đến sót các bản vá lỗi quan trọng làm bàn đạp cho attacker đi vào hệ thống. Ngoài ra, nếu nhiều VM (hoặc Container) không được quản lý cũng có thể làm crash hệ thống vật lý.

OK, tôi nghĩ sơ bộ về vấn đề Virtualization đến đây chắc cũng tạm ổn rồi. Kỳ tới tôi sẽ nghiên cứu chi tiết về phần demo áp dụng cho sinh động hơn chứ nói lý thuyết không thì chán lắm.

4 thoughts on “Giải ngố Virtualization – Phần 1: Bước chân vào thế giới ảo”

Leave a Reply

Your email address will not be published. Required fields are marked *