Hạn chế của kiểm tra ngăn xếp


8

Đây là phần tiếp theo của Kiểm tra ngăn xếp hoạt động như thế nào? khám phá khái niệm chi tiết hơn

Kiểm tra ngăn xếp là một cơ chế để đảm bảo an ninh trong ngữ cảnh của các máy ảo JVM và CLR khi các mô-đun mã được tải xuống bên ngoài của các mức độ tin cậy khác nhau có thể chạy cùng nhau. Các thư viện hệ thống đó cần một số cách phân biệt giữa các cuộc gọi bắt nguồn từ mã không tin cậy và các cuộc gọi bắt nguồn từ chính ứng dụng đáng tin cậy. Điều này được thực hiện bằng cách liên kết với mã hiệu trưởng tương ứng với nguồn gốc của nó. Sau đó, quyền truy cập được ghi lại trên ngăn xếp và bất cứ khi nào một cuộc gọi đến một phương thức hệ thống nhạy cảm được thực hiện, ngăn xếp được duyệt qua để xem liệu các quyền thích hợp cho hiệu trưởng thực hiện cuộc gọi có trong ngăn xếp hay không.

Những hạn chế của kiểm tra ngăn xếp là gì? Những cơ chế nào đã được đề xuất để thay thế nó? Có bất kỳ thay đổi đáng kể nào được thực hiện cho mô hình kể từ khi nó được giới thiệu vào cuối những năm 90 không?


Tôi gặp khó khăn hoàn toàn hiểu làm thế nào kiểm tra ngăn xếp hoạt động. Bạn có thể vui lòng bao gồm một liên kết đến một lời giải thích tốt?
Raphael

@Raphael: Câu hỏi hay. Tôi đã đặt câu hỏi: cs.stackexchange.com/questions/796/ Kẻ
Dave Clarke

1
Vấn đề nghiên cứu này một số giới hạn của Thanh tra mẫu Ngăn xếp được sử dụng trong các JVM và Microsoft CLR (nhưng tôi thấy nó bây giờ và tôi chỉ đọc kết luận): research.microsoft.com/en-us/um/people/adg/Publications/...
Vor

Câu trả lời:


6

Kiểm tra ngăn xếp là cần thiết vì các chương trình trên JVM và CLR có quyền truy cập mặc định vào các hoạt động nguy hiểm, do đó phải thực hiện một số việc để ngăn chặn thảm họa. Ví dụ, một chương trình không tin cậy có thể tham chiếu thư viện I / O và gọi nó:

using IO;
...
IO.DeleteFile("/home/foo/bla");

Vì vậy, trên mỗi hoạt động nguy hiểm được thực hiện, chúng ta cần kiểm tra xem nó có được phép hay không. Với kiểm tra ngăn xếp thường rất phức tạp để hiểu ai được quyền truy cập vào cái gì. Nó cũng làm cho việc tối ưu hóa như nội tuyến và gọi đuôi khó khăn.

Một cơ chế ưu việt là không cung cấp cho mỗi chương trình quyền truy cập tự động vào các hoạt động nguy hiểm ngay từ đầu. Trong mô hình này, không có cách nào để nhập thư viện IO. Cách duy nhất để có quyền truy cập vào thư viện IO là nếu có ai đó đưa nó cho bạn. Điều này được gọi là bảo mật khả năng. Một giới thiệu có thể được tìm thấy ở đây .

Thay vào đó, chúng tôi sẽ viết chương trình trước như thế này:

Main(IOLibrary IO){
  IO.DeleteFile("/home/foo/bla");
}

Thư viện IO là một tham số cho điểm vào của chương trình và đây được gọi là khả năng (vì nó cho phép sử dụng một số khả năng, trong trường hợp này để thực hiện IO). Để có thể chạy chương trình này, chúng ta phải có quyền truy cập vào khả năng IO và chạy chương trình bằng cách gọi Main(ourIOlibrary). Nếu chúng tôi đang chạy một chương trình không đáng tin cậy, đơn giản là chúng tôi không chuyển thư viện IO của mình cho nó, vì nó có thể sử dụng thư viện đó để xóa các tệp của chúng tôi. Trong một số trường hợp, chúng tôi muốn cung cấp cho chương trình không tin cậy quyền truy cập hạn chế vào hệ thống tập tin. Trong trường hợp đó, chúng tôi tạo một trình bao bọc xung quanh thư viện IO của riêng chúng tôi chỉ cho phép truy cập vào một thư mục nhất định và chuyển thư mục đó đến chương trình không tin cậy thay vì thư viện IO đầy đủ

Vì vậy, nếu chúng ta cần một khả năng IO để gọi một chương trình cần khả năng IO, điều đó cũng có nghĩa là bất cứ điều gì đã gọi chương trình của chúng ta cần có quyền truy cập vào khả năng IO để có thể cung cấp cho chúng ta. Vậy khả năng IO của nó đến từ đâu? Chà, cuối cùng cũng có một điểm mà con người vận hành máy tính đã gọi một chương trình. Con người này có quyền truy cập vào tất cả các khả năng của hệ thống, vì vậy anh ta có thể vượt qua khả năng IO trên. Nếu con người này không tin tưởng vào chương trình mà anh ta đang chạy, thì anh ta sẽ không truyền khả năng IO của mình cho chương trình đó.

Bạn có thể dễ dàng tưởng tượng các loại khả năng khác: truy cập internet, truy cập để vẽ các thứ trên màn hình của bạn, v.v. Ví dụ: hệ thống plugin trình duyệt an toàn có thể cung cấp khả năng đồ họa cho một plugin không đáng tin cậy chỉ cho phép nó vẽ đồ họa trong một hình chữ nhật được xác định trước trên trang.


5

Một hạn chế của kiểm tra ngăn xếp như được thực hiện theo truyền thống là nó phá vỡ các cuộc gọi đuôi thích hợp. Cụ thể, việc triển khai điển hình cần phải giữ toàn bộ "ngăn xếp" mọi lúc. Clements và Felleisen cho thấy vấn đề này có thể được khắc phục bằng cách sử dụng một kỹ thuật gọi là "dấu tiếp tục" trong bài báo của họ Một ngữ nghĩa đệ quy đuôi để kiểm tra ngăn xếp trong ESOP 2003.

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.