Thực thi chương trình có thể gây hại trên Linux


33

Tôi đang viết một chương trình sẽ kiểm tra các chương trình được viết bởi các sinh viên. Tôi sợ rằng tôi không thể tin tưởng họ và tôi cần đảm bảo rằng nó sẽ không trở nên tồi tệ cho máy tính chạy nó.

Tôi đã suy nghĩ về việc làm cho một số người dùng thử nghiệm sự cố với quyền truy cập hạn chế vào tài nguyên hệ thống và chạy các chương trình như người dùng đó, nhưng từ những gì tôi tìm thấy trên mạng cho đến nay, tạo một hệ thống ảo sẽ là lựa chọn an toàn nhất ...

Ai đó có thể giúp tôi với việc lựa chọn phương pháp phù hợp? An ninh là một mối quan tâm lớn đối với tôi. Mặt khác, tôi không muốn một giải pháp quá mức cần thiết và lãng phí nhiều thời gian để cố gắng học thứ gì đó mà tôi không thực sự cần.


7
Chỉ cần chạy chương trình trong linux trong trình duyệt ( bellard.org/jslinux ). Đó là một hộp cát rất tốt. :)
Fixee

wow, điều đó thực sự thú vị! tuy nhiên tôi sẽ phải viết một số loại giao diện để sử dụng nó (vì toàn bộ quá trình sẽ tự động) ... Tôi cần kiểm tra nó. Nếu hóa ra Javascript Linux này không chỉ là tiện ích, tôi thậm chí có thể sử dụng nó.
korda

Tôi thực sự dự định bình luận của tôi như một trò đùa, nhưng nếu bạn thực sự có thể sử dụng nó, điều đó sẽ thật tuyệt vời. Thành thật mà nói, câu trả lời LiveCD (với RAMdisk) là một giải pháp tuyệt vời.
Fixee

Chà, nếu tôi quản lý để sử dụng nó, tôi cũng sẽ sử dụng nó trên trang web mà tôi có thể truy cập kết quả - điều đó sẽ thực sự tốt và thoải mái. Ngoài ra, yếu tố đam mê cũng là tùy chọn;) cũng là đĩa sống không phải là tùy chọn - như tôi đã nói tôi đang tạo chương trình, nó sẽ chạy trên một số máy chủ nên khởi động lại không phải là thứ tôi có thể mua được ... Tôi đoán dù sao tôi cũng sẽ gắn bó với máy ảo. ..
korda

Câu trả lời:


28
  • Máy ảo có thể cung cấp cho bạn bảo mật cao nhất mà không cần khởi động lại, nhưng hiệu suất thấp nhất.

  • Một tùy chọn khác, để bảo mật cao hơn cả máy ảo: khởi động CD / DVD / ổ đĩa "trực tiếp" mà không cần truy cập vào ổ cứng (tạm thời vô hiệu hóa ổ cứng trong BIOS; ít nhất bạn không thể gắn ổ đĩa / ngắt kết nối nó, nếu được gắn tự động - nhưng điều này kém an toàn hơn nhiều)

  • Một container docker là một thay thế ít an toàn hơn cho một máy ảo đầy đủ. Có lẽ sự khác biệt quan trọng (về mặt bảo mật) giữa hai hệ thống này là các hệ thống chạy trong docker thực sự sử dụng kernel của hệ thống máy chủ của bạn.

  • Có những chương trình như cách ly sẽ tạo ra một môi trường an toàn, đặc biệt - thường được gọi là hộp cát - những chương trình này thường dựa trên chroot, với sự giám sát bổ sung - tìm một môi trường phù hợp với bạn.

  • Một chroot đơn giản sẽ ít an toàn nhất (đặc biệt là liên quan đến thực thi chương trình), mặc dù có thể nhanh hơn một chút, nhưng ... Bạn sẽ cần xây dựng / sao chép toàn bộ một cây gốc riêng biệt và sử dụng các liên kết gắn kết, /devv.v. (xem Lưu ý 1 bên dưới!). Vì vậy, nói chung, phương pháp này không thể được khuyến nghị, đặc biệt nếu bạn có thể sử dụng sandboxmôi trường an toàn hơn và thường dễ cài đặt hơn .

Lưu ý 0: Đối với khía cạnh của một "người dùng đặc biệt", nhưnobodytài khoản: Điều này hầu như không mang lại bất kỳ sự bảo mật nào , thậm chí còn đơn giản hơn nhiềuchroot. Ngườinobodydùng vẫn có thể truy cập các tệp và chương trình đã đọc thực thi các quyền được đặt cho người khác . Bạn có thể kiểm tra nó vớisu -s /bin/sh -c 'some command' nobody. Và nếu bạn có bất kỳ tệp cấu hình / lịch sử / bộ nhớ cache nào có thể truy cập được cho bất kỳ ai (do lỗi hoặc lỗ hổng bảo mật nhỏ), một chương trình chạy vớinobodyquyền của có thể truy cập vào nó, grep cho dữ liệu bí mật (như "pass =", v.v.) và trong nhiều cách gửi nó qua mạng hoặc bất cứ điều gì.

Lưu ý 1: Như Gilles đã chỉ ra trong một bình luận bên dưới , một môi trường chroot đơn giản sẽ cung cấp rất ít bảo mật chống lại các khai thác nhằm vào sự leo thang đặc quyền. Một chroot duy nhất có ý nghĩa an ninh-khôn ngoan, chỉ khi môi trường là tối thiểu, bao gồm các chương trình bảo mật khẳng định chỉ (nhưng vẫn còn tồn tại những nguy cơ khai thác lỗ hổng hạt nhân cấp tiềm năng), và tất cả các chương trình tin cậy chạy trong chroot đang chạy như một người dùng không chạy bất kỳ quá trình nào bên ngoài chroot. Điều mà chroot ngăn chặn (với các hạn chế được đề cập ở đây), là sự thâm nhập hệ thống trực tiếp mà không có sự leo thang đặc quyền. Tuy nhiên, như Gilles đã lưu ý trong một bình luận khác, thậm chí mức độ bảo mật đó có thể bị phá vỡ, cho phép một chương trình thoát ra khỏi chroot.


cảm ơn vì câu trả lời Tôi là một người mới thực sự khi nói đến những thứ như vậy, bạn có thể giải thích cho tôi một điều: tại sao tôi cần ngăn chương trình đọc các tệp trong hệ thống (ví dụ như bằng chroot) không? (nếu chương trình không thể sửa đổi chúng).
korda

Một tài khoản người dùng thử nghiệm sự cố cung cấp cho bạn một số bảo mật cơ bản chắc chắn. Vẫn có một số điều mà bạn có thể muốn / cần ngăn chặn. Chúng có thể ở dạng khai thác các lỗ hổng phổ biến được nhúng trong chương trình hoặc một số hack xã hội, thu thập thông tin cho mục đích tấn công từ xa trong tương lai ... Và có lẽ nhiều hơn nữa.
rozcietrzewiacz

Tại sao chúng ta là nó: có cách nào để ngăn người dùng sử dụng kết nối internet không?
korda

1
Tôi tự hỏi nếu nobodycó truy cập internet.
korda

1
@rozcietrzewiacz Một yêu cầu quan trọng đối với chroot để cung cấp bất kỳ sự bảo vệ nào là không chạy chương trình chroot như một người dùng cũng đang chạy một chương trình bên ngoài chroot. Mặt khác, quá trình chroot có thể tạo ra một quá trình không bị chroot và làm bất cứ điều gì theo cách đó.
Gilles 'SO- ngừng trở nên xấu xa'

10

Sử dụng máy ảo. Bất cứ điều gì ít hơn không cung cấp bảo mật nhiều.

Một vài năm trước tôi có thể đã đề xuất một người dùng chuyên dụng chroot hoặc một số như vậy. Nhưng phần cứng đã trở nên mạnh mẽ hơn và phần mềm máy ảo đã trở nên dễ sử dụng hơn. Hơn nữa, các cuộc tấn công ngoài luồng đã trở nên tinh vi hơn. Không còn lý do để không đi toàn bộ con đường ở đây.

Tôi khuyên bạn nên chạy VirtualBox. Bạn có thể thiết lập máy ảo trong vài phút, sau đó cài đặt bản phân phối Linux bên trong nó. Thiết lập không mặc định duy nhất tôi khuyên dùng là thiết lập kết nối mạng: tạo cả giao diện NAT NAT (để giao tiếp với thế giới) và giao diện chỉ lưu trữ trên máy chủ (để bạn có thể dễ dàng sao chép tệp đến và từ máy chủ và ssh vào máy ảo). Vô hiệu hóa giao diện NAT trong khi bạn chạy các chương trình của học sinh¹; chỉ bật khi bạn cài đặt hoặc nâng cấp gói phần mềm.

Trong máy ảo, tạo một người dùng cho mỗi sinh viên.

¹ Bạn có thể hạn chế các giao diện NAT để một danh sách trắng của người sử dụng, nhưng đó của tiến bộ hơn bạn cần một cách đơn giản, to-the-điểm thiết lập.


2

Đây là một lời giải thích rất kỹ lưỡng về lý do tại sao sử dụng Chroot vẫn là một lựa chọn rất khả thi và tại sao hệ điều hành đầy đủ hoặc ảo hóa phần cứng đầy đủ lại đặc biệt quá mức trong các tình huống cụ thể.

Không có gì khác hơn là một huyền thoại rằng Chroot không phải là một tính năng bảo mật. có những công cụ sẽ tự động xây dựng hệ thống tệp chroot cho bạn và Chroot được tích hợp vào nhiều ứng dụng chính như một tính năng bảo mật có mục đích.

Trái với niềm tin phổ biến, không phải mọi tình huống đều yêu cầu ảo hóa toàn bộ hệ điều hành hoặc mô phỏng toàn bộ phần cứng. điều này thực sự có nghĩa là có nhiều bề mặt tấn công hơn để thử và che. lần lượt, có nghĩa là một hệ thống kém an toàn . (chủ yếu dành cho các quản trị viên hệ thống ít hiểu biết)

các quy tắc khá đơn giản: không đặt bất cứ thứ gì vào trong chroot không cần thiết. không chạy một daemon như root. không chạy daemon như bất kỳ người dùng nào chạy daemon bên ngoài chroot.

loại bỏ bất kỳ ứng dụng không an toàn, nhị phân setuid, các liên kết / liên kết cứng không có chủ sở hữu. kể lại các thư mục không cần thiết bằng cách sử dụng nosuid, noexec và gật đầu. xây dựng phiên bản ổn định mới nhất của daemon đang chạy từ nguồn. và hơn hết là bảo mật hệ thống cơ sở!


2

Tôi sẽ bổ sung điều này, ngay sau khi câu hỏi được trả lời chính thức: MAGIC: Lão hóa độc hại trong Mạch / Lõi , không may bị khóa sau paywall của ACM. Kết quả cuối cùng của bài báo là các dấu vết chiều rộng rất nhỏ trong các mạch được sử dụng ngày nay trong quá trình sử dụng, và cuối cùng bị hỏng. Bằng cách tìm (các) hướng dẫn chính xác và lặp đi lặp lại chúng, kẻ tấn công có thể khiến các IC bị lỗi nhanh chóng.

Không có VM hoặc hộp cát hoặc thùng chứa hoặc nhà tù chroot nào có thể ngăn chặn loại phá hủy phần cứng độc hại này. Các tác giả của bài báo đã tìm thấy các chuỗi hướng dẫn như vậy và phần cứng thử nghiệm bị lỗi, nhưng họ đã không đưa ra các hướng dẫn, vì vậy nó có thể không phải là một mối đe dọa thực sự trong một thời gian.


1

Trên các unixes BSD có nguồn gốc (bao gồm cả Mac OS X), có một cơ sở được gọi sandbox. Trang này nói

MÔ TẢ
Cơ sở hộp cát cho phép các ứng dụng tự nguyện hạn chế quyền truy cập của họ vào tài nguyên hệ điều hành. Cơ chế an toàn này nhằm hạn chế thiệt hại tiềm tàng trong trường hợp lỗ hổng được khai thác. Nó không phải là sự thay thế cho các điều khiển truy cập hệ điều hành khác.

Điều này là riêng biệt từ các chrootcơ sở cũng có sẵn.

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.