it-swarm-vi.com

Máy ảo có ngăn chặn phần mềm độc hại gây hại không?

Tôi muốn biết liệu có an toàn cho hệ thống Máy chủ của máy ảo (VM - VirtualBox OSE trong trường hợp của tôi) để thực thi phần mềm độc hại hay không.

Virus có thể thoát ra và đọc hoặc ghi dữ liệu từ hệ thống Máy chủ không? Nó có thể thiết lập kết nối Internet nếu tôi tắt nó trong VM không?

Là một VM một môi trường an toàn để cố gắng tìm hiểu virus làm gì?

Bom ngã ba có thể "giết chết" hệ thống Máy chủ nếu tôi giảm bộ nhớ xuống còn khoảng 1/4 tổng bộ nhớ thực của tôi không? Nó có thể sử dụng bao nhiêu thời gian/tài nguyên CPU?

66
Martin Thoma

Về mặt lý thuyết, hệ thống khách hoàn toàn bị cô lập bởi VM và thậm chí không thể "nhìn thấy" Máy chủ, chứ đừng nói đến việc tấn công nó; vì vậy khách không thể thoát ra khỏi VM. Tất nhiên, trong thực tế, đôi khi nó đã xảy ra ( liên kết lưu trữ web ). Một cuộc tấn công yêu cầu khai thác vấn đề bảo mật (ví dụ: lỗi lập trình hóa ra hậu quả khó chịu) trong quá trình triển khai VM hoặc, có thể là các tính năng phần cứng mà VM xây dựng. Có một vài lối thoát cho dữ liệu ra khỏi VM; ví dụ: để truy cập Internet, VM đang mô phỏng thẻ mạng ảo, chỉ xử lý các gói cấp thấp nhất, không phải TCP/IP đầy đủ - do đó, hầu hết các sự cố ngăn xếp IP vẫn bị giới hạn trong VM chính nó. Vì vậy, các lỗi dẫn đến đột phá từ VM có xu hướng vẫn còn hiếm khi xảy ra.

Có một số loại tấn công mà VM rất hiệu quả, ví dụ: bom ngã ba. Từ quan điểm của hệ thống Máy chủ, VM là một quá trình duy nhất. Một quả bom ngã ba trong khách sẽ khiến đầu gối của nó lập lịch trong hệ điều hành khách , nhưng đối với Máy chủ thì điều này sẽ hoàn toàn vô hại. Tương tự như vậy đối với bộ nhớ: VM mô phỏng một máy vật lý với một lượng RAM nhất định và sẽ cần khoảng "thực" RAM đó để sao lưu hiệu quả. Bất kể khách làm gì, VM sẽ không bao giờ độc quyền nhiều hơn RAM hơn thế. (Bạn vẫn muốn giới hạn kích thước VM RAM, tối đa bằng 1/2 kích thước vật lý RAM của bạn, vì thêm "thực" RAM tiện dụng cho bộ nhớ đệm đĩa và Hệ điều hành máy chủ cũng sẽ muốn sử dụng một số.)

55
Tom Leek

Tuyên bố miễn trừ trách nhiệm: Tôi sẽ hiểu một mức độ tương đối cao. Nếu bạn muốn có một hướng dẫn chi tiết, đó là ngoài phạm vi. Ngoài ra, có nhiều cách khác (hoàn toàn bằng phần mềm) để triển khai các máy ảo mà điều này không áp dụng. Tôi cũng chỉ tập trung vào "thoát ra" thông qua các cơ chế ảo hóa - tức là không phải các cơ chế có thể xảy ra giữa PC với PC trên các máy chủ mạng cứng thực sự.

Tôi thích chi tiết, vì vậy ở đây chúng tôi đi với một số. Đầu tiên, codeproject có một số tham chiếu trình biên dịch hợp ngữ tuyệt vời trên các chế độ khác nhau của CPU x86 (thực, được bảo vệ và dài) và sử dụng ảo hóa . Có một blog Intel VT (Tôi không chắc liệu Intel có viết bài này không) và cuối cùng là phần đầu tiên của Rootkit Arsenal dành riêng để giải thích x86 và là một bài đọc tuyệt vời, hoàn thành với các hướng dẫn và sơ đồ Nice. Hiểu tất cả đều cần sự kiên nhẫn, vì vậy những gì tôi sẽ làm ở đây là giới thiệu rất ngắn gọn về cách thức hoạt động của nó.

Cách chúng tôi rung chuyển khi chạy DOS

DOS và các hệ thống chế độ thực 16 bit đầu hoạt động theo mô hình bộ nhớ được phân đoạn. Không có quyền kiểm soát kích thước của các phân khúc và không có công tắc bảo vệ trên bất kỳ phân khúc nào. Mã được tải vào một đoạn bộ nhớ và nó chạy; nó có thể nhảy xa vào các phân đoạn khác, do đó, bất kỳ mã nào, bất kỳ nơi nào cũng có thể thay đổi bất cứ điều gì, kể cả việc tạo ra một đoạn mã TSR (chấm dứt và lưu trú) chỉ đơn giản là chỉ một trong các mục IVT (bảng vectơ ngắt) tại một địa chỉ trong không gian của nó, trước khi thực hiện bản gốc. Về cơ bản, không có bảo vệ. Không ai. Nada.

Sự gia tăng của chế độ được bảo vệ 32 bit

Chế độ bảo vệ trở nên phức tạp một cách nhanh chóng. Có ba phần của nó - phân đoạn, phân trang và PAE. Mỗi yêu cầu một bảng dữ liệu cho CPU biết về phân đoạn, trang đó hoặc giúp nó mở rộng không gian địa chỉ (PAE). Chúng bao gồm các cờ vòng nổi tiếng (chúng áp dụng cho các phân đoạn và trang) thực hiện cách ly quy trình. Phân trang là cách bạn tải dữ liệu ra khỏi RAM và vào đĩa và tạo ra những thứ lạ mắt như bộ nhớ ảo (xem, Word ảo! Chúng tôi đang đến đó!)

Chế độ dài

Chế độ dài không có phân đoạn và chỉ đơn giản là bắt buộc các cấu trúc PAE/Paging. Một lần nữa, để hoàn toàn tầm thường hóa việc thực hiện một HĐH, Paging được điều khiển bởi các cấu trúc trong bộ nhớ, sau đó được thiết lập thông qua các hướng dẫn đặc biệt. Voila, người ta có thể đạt được sự cô lập quy trình với các cài đặt phù hợp. Một lần nữa, tôi tầm thường hóa một chút ...

Hãy cho tôi ảo hóa!

Được chứ. Ảo hóa là cùng một khái niệm chung. Các máy ảo được thiết lập bằng các cấu trúc điều khiển máy ảo chỉ ra cách bộ nhớ của chúng được ánh xạ trở lại bộ nhớ vật lý, giống như phân trang. Điều quan trọng, trong một số điều kiện nhất định, máy ảo sẽ được yêu cầu hệ điều hành Máy chủ cho một cái gì đó, giống như cách ly quy trình, giống như một phần mềm bị gián đoạn. Chúng được tham chiếu VM thoát và cung cấp thông tin cho Máy chủ, chẳng hạn như trạng thái của các thanh ghi khi thoát. Kinda giống như một cuộc gọi hệ thống.

Một phần mềm độc hại có thể thoát ra khỏi máy ảo không?

Vì vậy, theo như VM, thì HĐH máy chủ có tất cả không gian bộ nhớ riêng và có thể bị nhiễm/hỏng/phá hủy khi nó vừa ý.

Về mặt ảnh hưởng trực tiếp đến bộ nhớ Máy chủ, máy ảo không thể, vì không thể nhìn thấy nó. Máy chủ phải ánh xạ bộ nhớ cần thiết vào không gian máy ảo. Nó cũng phải, trong không gian bộ nhớ đó, thực hiện mọi thứ từ BIOS trở lên. Để giao tiếp với một số thiết bị Máy chủ nhất định cho một số tác vụ nhất định, máy chủ phải thiết lập các điều kiện thoát VM và đích VM phải kích hoạt chúng. Khi đó xảy ra, kiểm soát được chuyển đến máy chủ.

Do đó, có hai khu vực có nguy cơ:

  1. Các hành động mà Chủ nhà thực hiện để đáp ứng với lối thoát VM. Nếu có bất kỳ lỗi nào trong việc xử lý này, có thể thuyết phục Chủ nhà thực hiện điều gì đó không nên.
  2. Mọi máy chủ truy cập vào không gian bộ nhớ của máy khách. Hãy nhớ rằng mã máy chủ đang chạy trong vòng 0 có thể hòa nhập và đánh sập bữa tiệc ở bất cứ nơi nào nó làm hài lòng. Nó chỉ xảy ra khi bạn có thể thiết lập bộ nhớ của khách từ khách (đáng ngạc nhiên).

Điều này dẫn bạn đến cơ chế khai thác của bạn. Bạn cần một lỗi xử lý trong thói quen thoát VM, sau đó bạn cần có khả năng thuyết phục mã đó để thực thi một số bộ nhớ, lý tưởng là mã bạn vừa đưa vào một trang từ vm của khách. , tạm biệt Kansas.

Như Tom Leek nói, VM có hiệu quả đáng kinh ngạc trong việc phòng thủ chống lại bom ngã ba. Theo cách tương tự như cách HĐH có thể giới hạn số lượng bộ nhớ mà một quá trình có thể phân bổ, do đó, nó có thể giới hạn số lượng bộ nhớ được ánh xạ tới VM. Chạy ra ngoài và hệ điều hành khách tin rằng nó hết bộ nhớ vật lý; Máy chủ sẽ không phân bổ thêm trừ khi bạn thực hiện thoát VM để thực hiện việc này, điều này sẽ hơi nguy hiểm và tôi không tin việc này đã được thực hiện.

Khả năng này là như thế nào?

Không hẳn. Nó phụ thuộc vào những điều đó VM hoàn toàn thoát triển khai hoặc đọc bộ nhớ từ khách trên Máy chủ có lỗi Nice trong mã đọc của bạn. Nó cũng yêu cầu lỗi đó cho phép bạn kiểm soát sự cố trong như một cách mà bạn có thể buộc thực thi đối với địa chỉ bộ nhớ mà Máy chủ lưu trữ. Lối thoát VM phải có thể truy cập vào bộ nhớ đó.

Những gì tôi chưa đề cập?

  1. Tấn công vào các ngăn xếp phần mềm hiện có như TCPIP. Các lỗ hổng ở đây cũng giống như khi bạn có hai máy tính thực tế.
  2. Hoàn toàn phần mềm thực hiện ảo hóa.
  3. Ảo hóa trên bất kỳ loại chip nào khác. Điều này áp dụng cho các thiết lập tương thích Intel VT.

Cuối cùng, tôi đã có trước đây lập luận rằng cách ly quá trình là một hình thức của hộp cát. Đọc câu trả lời đó và câu trả lời này, bây giờ bạn sẽ có thể hiểu tại sao tôi định nghĩa chúng theo cách đó. Có sự tương đồng đáng chú ý giữa cách ly quá trình và máy ảo trong x86.

Cập nhật

Vì vậy, tôi đã đào sâu hơn về vấn đề này, đặc biệt là nghiên cứu về viên thuốc màu xanh. Những gì tôi đã mô tả là một quan điểm cấp cao rất đơn giản. Tôi đã tìm thấy nhiều chi tiết hơn. Đây là một toàn bộ giấy dành riêng cho nó từ Invisible Things Lab. Hóa ra phòng thủ talk của họ bao gồm khái niệm từ chối thực thi quyền truy cập vào các trang chế độ người dùng từ vòng 0, do đó ngăn chặn việc thực thi trực tiếp dữ liệu mà máy ảo đã đặt vào bộ nhớ. Hóa ra điều này đang được triển khai trong CPU Intel và các bản vá hiện đang tồn tại trong Linux Kernel. Vì vậy, tùy thuộc vào cách nó diễn ra, đó có thể là trường hợp các cuộc tấn công có tính chất này trở nên khó khăn hơn nhiều, ngay cả khi khai thác tồn tại.

31
user2213

Tôi đã thực hiện khá nhiều thử nghiệm phần mềm độc hại trong a VM - chủ yếu sử dụng backtrack4 để đột nhập từ một Máy chủ sang Máy chủ tiếp theo. Tôi chủ yếu là người dùng VMware Workstation.

Vấn đề lớn nhất đến từ khả năng kết nối mạng của VM chuyển trở lại Hệ điều hành máy chủ của bạn. Bạn muốn vô hiệu hóa hoàn toàn mạng và/hoặc sử dụng mạng không có quyền truy cập trở lại Máy chủ của bạn .

Hạn chế trí nhớ là một thực hành tốt nhất. Tôi thường giữ nó khoảng một phần tư, giống như bạn. Thời gian CPU được giới hạn ở số lượng lõi hoặc (nếu bạn có các điều khiển chi tiết hơn trong phần mềm của mình) phần trăm thời gian CPU được xác định cho VM cụ thể của bạn.

Các cuộc tấn công nhắm mục tiêu có khả năng thoát ra khỏi môi trường ảo thực sự tồn tại và có sẵn trên thị trường - chẳng hạn như đề cập đến đám mây @Hendrick - nhưng tương đối hiếm. Luôn cập nhật về các bản vá ảo hóa của bạn là một ý tưởng rất tốt.

Xem tại đây , tại đâytại đây để biết chi tiết.

11
Tim Brigham

Ngoài tất cả các thông tin tốt ở đây về việc liệu virus có thể thoát khỏi VM hay không, hãy để tôi chỉ ra một vấn đề khác cần xem xét:

Mã độc có thể phát hiện xem nó có đang được thực thi bên trong máy ảo hay không . Điều này thường đi theo tên phát hiện máy ảo hoặc "thuốc đỏ" và có nhiềkỹ thuật có sẵn.

Hơn nữa, một số vi-rút và phần mềm độc hại khác sử dụng các kỹ thuật này để phát hiện xem chúng có đang được chạy trong máy ảo hay không và nếu có, hãy tắt tải trọng của chúng (tránh thực hiện bất kỳ hành động độc hại nào). Họ làm điều này để cố gắng làm cho mọi người khó khăn hơn trong việc thiết kế lại phần mềm độc hại hoặc phát hiện ra nó.

Do đó, a VM không phải là cách hay để tìm hiểu phần mềm độc hại làm gì. Phần mềm độc hại có thể không thoát ra khỏi VM, nhưng đồng thời, nó có thể không làm bất cứ điều gì khi nó đang chạy bên trong VM. Nếu bạn chạy nó trong VM và thấy nó không làm gì, hãy quyết định nó vô hại, và sau đó quyết định chạy nó bên ngoài VM - bạn có thể được sở hữu. Hãy cẩn thận.

10
D.W.