Bộ nhớ linux không được phát hành bởi các ứng dụng


3

Tôi đã suy nghĩ về việc làm cho Linux an toàn hơn. Tôi có thể viết mã lấy một loạt bộ nhớ và lướt qua chúng để tìm kiếm những thứ "thú vị" không?

    main()
    {
    char *p = (char *)malloc(10000000);

    scan_for_stuff(p,10000000);
    }

Tôi sẽ tưởng tượng rằng thật khó để tìm thấy những thứ thú vị theo cách này, nhưng bạn không bao giờ biết ...

Câu trả lời:


2

Không, Linux không bằng không sau khi phát hành nó. Hầu hết các thư viện thực hiện zeroing bộ nhớ trong khi phân bổ nó, nhưng đây là ngôn ngữ lập trình phụ thuộc và có thể bị ghi đè.

Truy cập bộ nhớ "ấm" dường như không phải là một vectơ tấn công hiệu quả đối với tôi. Để khai thác điều đó, bạn sẽ cần các đặc quyền có thể được sử dụng theo những cách hiệu quả hơn nhiều. Nếu bạn quyết định viết lại hàm malloc, bạn cần truy cập để thay thế thư viện glibc.

Cuối cùng, tôi muốn đề cập đến vector tấn công khởi động lạnh . Tôi đã thử nó gần đây trên máy tính xách tay của riêng tôi với kết quả ấn tượng. Bạn cần truy cập vật lý (không bắt buộc trong trường hợp của bạn), nhưng bạn thực sự không phải làm bất cứ điều gì trên máy tính; vì vậy hầu như không có cơ hội để lại dấu vết kiểm toán phần mềm.


Chà, đối với kiểu tấn công đó, bạn cần phải ở ngay đó với máy tính. Đi qua bộ nhớ ấm có thể được thực hiện từ xa, thậm chí thông qua virus, có lẽ. Tôi sẽ thấy việc viết malloc hoặc sbrk của mình không có bộ nhớ sẽ khó đến mức nào. Sẽ mất quá nhiều thời gian để có bios không có tất cả bộ nhớ vật lý trước khi đi vào chu kỳ khởi động?
Bing Bang

4

mallocchỉ là một chức năng thư viện, nó phụ thuộc vào việc bạn thực hiện malloc. Nhưng không có hệ thống nào gọi nó có thể sử dụng để có quyền truy cập vào các trang thuộc về quy trình khác trừ khi quy trình đó đã làm gì đó để cấp cho bạn quyền truy cập vào chúng.

Việc malloctriển khai điển hình có được các trang của họ bằng cách sử dụng sbrkhoặc bằng cách ánh xạ /dev/zero, cả hai đều chỉ cung cấp các trang không. Nếu bạn nhận được các trang khác không từ một điển hình malloc, điều đó sẽ chỉ là do quá trình của bạn đặt một cái gì đó vào chúng.

Nếu có một cách nào đó để một quy trình có quyền truy cập vào các trang bị loại bỏ của quy trình khác, mọi quy trình sẽ phải bằng không các trang của nó trước khi loại bỏ chúng và tất cả các loại tấn công có thể xảy ra khi bạn khiến quy trình bị sập và sau đó cố gắng loại bỏ nó trang. Sẽ tốt hơn nhiều nếu chỉ cung cấp không có cách nào cho một quy trình để có được các trang khác không được sửa đổi lần cuối bởi quy trình khác trừ khi quy trình đầu tiên được yêu cầu cụ thể cho hành vi đó.


Tôi không nói rằng bạn có thể nhìn vào bộ nhớ của một quá trình sống. Tất nhiên điều đó là không thể. Tôi đang hỏi liệu linux có làm mất bộ nhớ sau khi quá trình giải phóng chúng không .. Nó cần được thực hiện tại thời điểm phát hành. Bởi vì nếu bạn để nó cho malloc để làm điều đó, kẻ xâm nhập có thể viết malloc của riêng nó mà không làm được.
Bing Bang

Và bạn cũng nên mã hóa hoặc loại bỏ hoàn toàn không gian trao đổi. Có thể buộc máy tính của bạn bắt đầu hoán đổi và sau đó quét không gian hoán đổi để tìm những điều thú vị.
Bing Bang

Tôi đoán bạn cũng có thể thực hiện zeroing ở bất cứ hệ thống nào mà malloc gọi. sbrk chính nó là một chức năng thư viện vì vậy việc zeroing không thể được thực hiện ở đó. Nó phải được thực hiện trong kernel, tại lệnh gọi hệ thống mà sbrk thực hiện.
Bing Bang

@BingBang Bạn có thể làm điều đó bất cứ lúc nào, không thành vấn đề khi nào. Trong thực tế, bạn có thể để phần cứng làm điều đó một cách lười biếng, nếu bạn có một trang phần cứng zeroer. Bạn chỉ cần đảm bảo rút ra từ nhóm các trang không trước khi bạn đưa một trang vào một quy trình. Bạn có thể làm điều đó khi bạn không bận rộn.
David Schwartz
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.