2010-10-04 29 views
9

Tôi đang cố gắng chạy một chương trình được biên dịch từ mã C từ một nguồn không xác định. Tôi muốn đảm bảo rằng chương trình không gây hại cho hệ thống của tôi. Ví dụ, chương trình có thể có một số thứ như system("rm -rf /") trong nguồn, không thể phát hiện được, trừ khi mã được kiểm tra kỹ lưỡng.Cách an toàn nhất để chạy một tệp thực thi trên Linux là gì?

Tôi nghĩ đến 2 cách sau

  1. Run nó bên trong một máy ảo như VMWare
  2. Xây dựng một exe cửa sổ trên Linux và chạy trên rượu

Cả hai đều không giải pháp rất thanh lịch và Tôi không thể tự động hóa chúng. và trong trường hợp 1, nó có thể gây hại cho VM.

Mọi trợ giúp sẽ được đánh giá cao.

Tôi muốn chạy chương trình trong những gì chúng tôi có thể gọi là "hộp cát".

+1

Tôi đã suy nghĩ về chroot, nhưng nó không ngừng bom ngã ba và các vấn đề gọi hệ thống khác. Cảm ơn – arbithero

+0

Qs tương tự về quá trình sandboxing/jailing trong Linux hoặc Unix: * http://unix.stackexchange.com/q/6433/4319 * http://stackoverflow.com/q/4410447/94687 * http : //stackoverflow.com/q/4249063/94687 * http://stackoverflow.com/q/1019707/94687 –

+1

rượu hoàn toàn không có giá trị trong việc chứa tệp thực thi. Chạy một loại rượu thực thi như là root và bạn có thể xóa sạch hệ thống của bạn – sehe

Trả lời

4

Geordi sử dụng kết hợp chroot và chặn các syscalls để biên dịch và sau đó là mã tùy ý sandbox.

+1

Nguồn Geordi có rất nhiều ý tưởng tôi có thể sử dụng. Cảm ơn! – arbithero

1

Tạo người dùng chỉ có quyền ghi vào các thư mục không quan trọng. Chạy chương trình với tư cách người dùng đó. Nếu bạn cũng quan tâm đến quyền riêng tư, hãy xem xét cũng hạn chế quyền đọc của nó.

1

Trang wikipedia cho chroot có thể là một khởi đầu tốt. Nó mô tả chroot và cũng cung cấp liên kết đến một vài lựa chọn thay thế toàn diện hơn.

2

Bạn có thể sử dụng giống như schroot và chroot chương trình, nhưng bất cứ điều gì đủ nastiness sẽ phá vỡ ra khỏi đó.

Bạn đặt cược tốt nhất có lẽ là máy ảo (vmware hoặc virtualbox) và chụp nhanh trước khi biên dịch và chạy chương trình. Bằng cách đó bạn có thể quay trở lại nếu có điều gì đó sai trái khủng khiếp.

+0

Trong thực tế, bạn chỉ cần cuộn nó trở lại sau khi kiểm tra anyway, bởi vì bạn có thể không nhận thấy những gì đã đi sai khủng khiếp. – caf

+0

@caf Đúng vậy, nếu nó không tin cậy thì nó không đáng tin cậy. Đừng muck về và rollback anyway. – Dave

+0

Máy ảo không chính xác là một môi trường an toàn, hoặc nếu chương trình đang được thực thi biết nó trong một. – Jonathan

6

Khám phá seccomp. Nó được thiết kế cho trường hợp sử dụng này.

+0

Điều này thực sự rất tốt nếu nó hoạt động! Tôi sẽ cố gắng thực hiện điều này và báo cáo ở đây nếu nó hoạt động. Cảm ơn @florin! – arbithero

0

Chạy trên máy tính không có mạng mà bạn sẽ tái tạo hình ảnh sau khi hoàn tất. Không có cách nào an toàn để chạy nó trên máy và tiếp tục tin tưởng vào máy đó sau đó.

+0

Hoặc, ít nhất, một máy tính không có trên mạng cục bộ. – Jonathan

4

Tôi đã viết một overview of sandboxing methods on Linux (archived) tại đây. Bạn nên sử dụng các thùng chứa Linux (lxc) hoặc selinux, theo quan điểm của tôi. Bạn có thể sử dụng một giải pháp ảo hóa và tự động hóa nó, nhưng nó là một nỗ lực rất nhiều.

lxc sẽ cách ly các quy trình, hệ thống tệp và mạng của bạn và bạn có thể đặt giới hạn tài nguyên trên vùng chứa. Vẫn còn nguy cơ tấn công hạt nhân, nhưng chúng giảm nhiều.

0

Ngoài các câu trả lời khác, sử dụng strace hoặc ltrace có thể giúp bạn hiểu chương trình đang làm gì.

Các vấn đề liên quan