Những cạm bẫy tiềm năng với việc có một hạt nhân tối thiểu chạy mã được quản lý là gì?


14

Giả sử tôi muốn xây dựng một hệ điều hành dựa trên hạt nhân bản địa rất nhỏ hoạt động như một trình thông dịch / thời gian chạy mã được quản lý và một hạt nhân phía trên lớn hơn được biên dịch sang ngôn ngữ máy không bản địa (mã byte Java, CIL, v.v.). Ví dụ về các hệ điều hành tương tự sẽ là SingularityCosmos .

Những cạm bẫy và thách thức phát triển nào tồn tại khi viết một HĐH với loại cơ sở hạ tầng này trái ngược với một giải pháp hoàn toàn tự nhiên?

Câu trả lời:


8

Tùy thuộc vào ngôn ngữ, có thể có nhiều thách thức phát triển:

  1. Con trỏ: Nếu một ngôn ngữ không có con trỏ, nó sẽ là một thách thức để thực hiện các nhiệm vụ tương đối dễ dàng. Ví dụ: bạn có thể sử dụng các con trỏ để ghi vào bộ nhớ VGA để in ra màn hình. Tuy nhiên, trong một ngôn ngữ được quản lý, bạn sẽ cần một số loại "phích cắm" (từ C / C ++) để làm điều tương tự.

  2. Lắp ráp: Một hệ điều hành luôn cần một số lắp ráp. Các ngôn ngữ như C #, Java, v.v. không hoạt động tốt với nó, không giống như C / C ++. Trong C hoặc C ++, bạn cũng có thể có lắp ráp nội tuyến rất, rất hữu ích cho nhiều tác vụ. Có NHIỀU trường hợp cần điều này (ví dụ trong x86): tải GDT, tải IDT, bật phân trang, thiết lập IRQ, v.v.

  3. Control: Nếu bạn đang sử dụng một cái gì đó giống như Cosmos, bạn không gặp toàn quyền kiểm soát. Cosmos là một hạt nhân siêu nhỏ và về cơ bản là "bootstraps" "kernel" của bạn. Bạn có thể thực hiện một cái gì đó như Cosmos từ đầu nếu bạn thực sự muốn, tuy nhiên, điều đó có thể mất nhiều thời gian.

  4. Chi phí chung: Với các ngôn ngữ được quản lý, có RẤT NHIỀU chi phí so với C hoặc thậm chí C ++. Những thứ như Cosmos cần phải thực hiện rất nhiều thứ trước khi ngay cả kernel thế giới C # hello có thể chạy được. Trong C, bạn đã sẵn sàng để đi, không cần thiết lập thực sự. Trong C ++, chỉ có một vài điều cần được triển khai để sử dụng một số tính năng của C ++.

  5. Cấu trúc: Trong C / C ++ có cấu trúc mà nhiều ngôn ngữ được quản lý không có, và như vậy, bạn sẽ cần phải thực hiện một số cách để có một cái gì đó giống như một struct. Ví dụ, nếu bạn muốn tải một IDT (Interrupt Descriptor Table), trong C / C ++, bạn có thể tạo một cấu trúc (với một thuộc tính đóng gói), và tải nó bằng cách sử dụng x86 hướng dẫn ASM lidt . Trong một ngôn ngữ được quản lý, điều này khó hơn nhiều để làm ...

Ngôn ngữ được quản lý, theo cú pháp, dễ dàng hơn, tuy nhiên, đối với nhiều thứ liên quan đến hệ điều hành nhiều lần không phù hợp lắm. Điều đó không có nghĩa là chúng không thể được sử dụng, tuy nhiên, những thứ như C / C ++ thường được khuyên dùng.


Câu trả lời này khá yếu. Các nhiệm vụ tương đối dễ dàng mà bạn có thể làm mà không có con trỏ (không bao gồm một nền tảng nhỏ) là gì? Các bộ phận cần lắp ráp là gì? Bạn thiếu kiểm soát gì? Bạn dựa trên tuyên bố của bạn về vấn đề gì? Tại sao bạn không thể có cấu trúc trong một ngôn ngữ được quản lý?
Gilles 'SO- ngừng trở nên xấu xa'

1. Không có lý do tại sao một ngôn ngữ được quản lý sẽ không cung cấp khả năng truy cập bộ nhớ VGA, đó chỉ là ánh xạ / hủy ánh xạ sẽ được cung cấp dưới dạng nguyên thủy (nguyên thủy quản lý bộ nhớ). 2. Một số chuyển đổi tác vụ (ví dụ: các thanh ghi lưu) thường phải được thực hiện dưới dạng mã lắp ráp, nhưng nó rất cục bộ, đó không phải là một đối số chống lại việc có 99% HĐH trong ngôn ngữ được quản lý. Thao tác MMU là một nguyên thủy quản lý bộ nhớ. 4. C cũng cần thiết lập (thiết lập một ngăn xếp và đống); ngôn ngữ được quản lý cần thiết lập nhiều hơn một chút nhưng không có sự khác biệt về chất.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, câu hỏi là những thách thức phát triển để sử dụng ngôn ngữ được quản lý là gì. Đây là những thách thức phát triển, tuy nhiên, bạn vẫn có thể vượt qua thành công những thử thách đó ...
mmk

5

Tôi đã nghe nó tuyên bố (bởi một nhà nghiên cứu làm việc về kỹ thuật vi hạt nhân cạnh tranh ) rằng rất ít thông tin về cách đánh giá bảo mật của các hệ thống có thể mở rộng thông qua mã được quản lý.

Vấn đề là các loại lỗi có thể gây ra lỗ hổng bảo mật rất khác so với các nhà nghiên cứu bảo mật đã từng sử dụng. Trong một vi nhân truyền thống, tất cả các trình điều khiển và các phần con khác của hạt nhân được cách ly với nhau bằng cách chạy chúng trong các không gian địa chỉ khác nhau. Trong một hạt nhân mà việc cách ly được thực hiện thông qua kiểm tra loại mã được quản lý, bạn sẽ tránh được các chi phí khổng lồ của việc chuyển đổi không gian địa chỉ mỗi khi bạn cần sử dụng dịch vụ phụ, nhưng việc đánh giá cơ chế cách ly là khó khăn hơn.

Bất kỳ phần cụ thể nào của kernel (giả sử trình điều khiển thiết bị) được viết bằng ngôn ngữ được quản lý là an toàn nếu và chỉ khi trình kiểm tra loại nói trình điều khiển an toàn trình kiểm tra loại không có lỗi. Vì vậy, trình kiểm tra loại là một phần của lõi kernel. Trong thực tế, dường như các trình kiểm tra loại lớn hơn và phức tạp hơn đáng kể so với các lõi vi nhân truyền thống. Điều đó có nghĩa là bề mặt tấn công có khả năng lớn hơn.

Tôi không biết liệu các kỹ thuật phân lập vi nhân truyền thống hay các kỹ thuật phân lập dựa trên mã được quản lý có thực sự đáng tin cậy hơn hay ít hơn. Có một vấn đề bootstrapping ở đây: cho đến khi các kỹ thuật cách ly mã được quản lý được sử dụng rộng rãi, chúng ta sẽ không biết mức độ thường xuyên của chúng không an toàn. Nhưng không biết chúng không an toàn đến mức nào, rất khó để triển khai chúng trong các tình huống quan trọng về bảo mật.


Đó là một điểm tuyệt vời.
Adam Maras

Tôi thấy những lập luận này rất lạ. . Ví dụ, hạt nhân của Coq có dung lượng khoảng 14kLoC của OCaml - lớn hơn hạt nhân, nhưng không nhiều, và được viết bằng ngôn ngữ ít bị lỗi hơn hầu hết các hạt nhân (không có C hoặc trình biên dịch). Trình kiểm tra loại không dễ bị ảnh hưởng bởi các điều kiện chủng tộc, đây là một loại lỗi đặc biệt tinh tế.
Gilles 'SO- ngừng trở nên xấu xa'

Mã được quản lý cung cấp một cơ hội tốt hơn để xử lý một số loại lỗi nhất định; ví dụ, phân tích luồng thông tin có thể chứng minh sự vắng mặt của các kênh bên (có thể sẽ tốn rất nhiều công sức và tôi không biết nó đã được thực hiện ở mức độ nào, nhưng về nguyên tắc thì có thể thực hiện được), trong khi cách ly phần cứng chỉ cho phép bạn kiểm tra các kênh bên mà bạn đã nghĩ đến.
Gilles 'SO- ngừng trở nên xấu xa'

Về mặt thực tế, một số máy ảo cung cấp sự cô lập đã được chứng nhận tại EAL5 trở lên. Dưới đây là hai ví dụ mà bạn có thể có trong ví của mình nếu bạn là người châu Âu, vì chúng được sử dụng trong thẻ thông minh như thẻ tín dụng: MULTOS , nền tảng mở Thẻ Java . Trong cộng đồng đánh giá bảo mật, tôi đã nghe nhiều nghi ngờ rằng sự cô lập MMU có thể vượt ra ngoài EAL2.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.