2012-02-29 11 views
5

Tôi đã suy nghĩ về một kịch bản cho phép người dùng (có thể là bất kỳ ai, có thể có ý định xấu) gửi mã chạy trên máy tính Linux (hãy gọi nó là nút điểm chuẩn). Mục tiêu là tạo ra một loại môi trường điểm chuẩn tự động cho các thường trình đơn luồng. Giả sử trang web đăng một số mã lên proxy. Proxy này trao mã này cho nút điểm chuẩn và nút điểm chuẩn chỉ có kết nối ethernet với proxy, chứ không phải chính internet.Chương trình C/asm nào có thể gây hại cho Linux khi được người dùng không có đặc quyền điều hành?

Nếu người dùng cho phép bất kỳ người dùng nào đăng mã C/asm để chạy trên nút điểm chuẩn, bạn sẽ phải đối mặt với những thách thức bảo mật nào? Các giả định sau đây được thực hiện:

  • Chương trình được chạy như một người dùng không có đặc quyền
  • Proxy sẽ có cơ hội để giết chết quá trình vào nút benchmark (lấy kịch bản của một vòng lặp vô hạn chẳng hạn)
  • Proxy có thể khởi động lại nút điểm chuẩn (nếu nó trả lời ...)

Vì vậy, trong thực tế có thể chương trình không gian người dùng này có thể làm hỏng hệ điều hành hoặc làm cho máy không khả dụng với proxy ? Với việc lắp ráp, người lập trình có thể làm bất cứ điều gì về cơ bản những gì anh ta muốn (ví dụ như sử dụng con trỏ ngăn xếp), và tôi tự hỏi mức độ hạn chế/mạnh mẽ của Linux trong khía cạnh này. Tôi cũng biết về khả năng các quy trình yêu cầu các vùng bộ nhớ chia sẻ với các quy trình khác (shm), mà cũng có thể đóng một vai trò ở đây?

Bất kỳ tài liệu hoặc bài viết nào về chủ đề này đều được hoan nghênh.

Giải pháp hộp cát cũng có thể thú vị, nhưng điều quan trọng là CPU phải thực hiện 100% những gì nó có khả năng trong quá trình chuẩn (ít nhất là trên lõi chuẩn được chạy).

+1

liên quan: http://stackoverflow.com/questions/792764/secure-way-to-run-other-people-code-sandbox-on-my-server –

Trả lời

3

Vì vậy, trong thực tế có thể chương trình không gian người dùng này có thể làm cho hệ điều hành bị lỗi hoặc làm cho máy không khả dụng với proxy không?

Vâng, các kỹ thuật như mở ra cả một số lượng quá nhiều quy trình, phân bổ quá nhiều bộ nhớ (gây sử dụng swapfile), hoặc xếp hàng lên rất nhiều đĩa I/O sẽ làm cho máy không đáp ứng để giám sát quá trình của bạn sẽ không chạy một cách kịp thời.

Nếu mã giám sát của bạn kết thúc trao đổi với đĩa, sau đó ngay cả khi nó có ưu tiên cao, nó sẽ không chạy cho đến khi đĩa khả dụng, có thể là sự chậm trễ rất lâu do thời gian tìm kiếm.

Linux hiện có ulimit có thể bảo vệ chống lại một số trong số này, xem Limit the memory and cpu available for a user in Linux Và hoạt động mạng độc hại cũng có thể bị chặn tương tự. Bạn cũng có thể vô hiệu hóa hoán đổi và chroot chương trình thành một gắn kết tmpfs. Nhưng một số nghịch ngợm vẫn có thể xảy ra.

5

Chỉ cần một danh sách nhanh khỏi đầu của tôi.Về cơ bản, nếu bạn không tin tưởng những người sử dụng ít nhất một chút, bạn đang gặp rắc rối sâu:

  • Filesystem thao tác: xóa hoặc ghi đè lên tập tin thuộc về người sử dụng quá trình này được chạy như
  • Snooping tất cả các loại dữ liệu tìm thấy trên hệ thống (file, đôi khi lưu lượng mạng của cùng một người dùng)
  • Killing quá trình khác của người sử dụng
  • tiêu thụ bộ nhớ cho đến khi oom killer bắt đầu giết chết quá trình ngẫu nhiên hoặc (nếu bạn có swap kích hoạt) cho đến khi máy chậm như rùa bò
  • Tạo nhiều I/O cho slo w xuống hệ thống
  • Thi công khai thác theo ý muốn (bạn gần chắc chắn sẽ có một số đặc quyền chưa được vá leo thang dễ bị tổn thương ở đâu đó)
  • lỗ hổng khai thác ở bất kỳ phần mềm người dùng có thể chạy
  • Hosting một mạng lưới công DDoS hoặc khiêu dâm trẻ em file server trên máy của bạn
  • Sử dụng máy tính của bạn như là một proxy để khởi động các cuộc tấn công chống lại các máy chủ của CIA và FBI
  • bầu trời là giới hạn ...

không âm thanh như một đi od ý tưởng.

+0

Có thể ai đó thực sự tổ chức tấn công mạng DDoS từ máy chỉ được kết nối qua proxy với Net? Điều này không có vẻ như nó có truy cập Internet thực sự. – Almo

+0

"nút điểm chuẩn chỉ có kết nối ethernet với proxy, chứ không phải internet" –

+1

Đó là một điểm tốt. Các tác động pháp lý nếu bạn vô tình để một người nào đó lưu trữ một dịch vụ bất hợp pháp trên máy tính của bạn có hại cho cuộc sống, vì vậy proxy của bạn không cần phải thực hiện công việc của mình. – zmccord

0

Một nhóm chương trình có thể gây áp lực bộ nhớ khiến máy không phản hồi (đặc biệt khi chuyển sang đĩa bắt đầu xảy ra). Mã ví dụ: perl -e '$_.="x"x1000000 while fork'

+0

Đó là sự thật; Chứng khoán Linuces vẫn hoàn toàn được hosed bởi forkbombs. – zmccord

+0

Người ta không cần ngã ba đệ quy và số lượng các quy trình có thể bị ràng buộc. Tất cả những gì nó thực sự cần là bộ nhớ nhanh. Nói cách khác, Firefox trên một netbook Atom với hàng chục tab và (trong một trong số đó) hai giờ duyệt Google Maps cũng đủ để gỡ xuống. –

+0

Là số nhiều của Linux, Linuces? Điều cần biết :-) – adelphus

3

Vì vậy, có thể thực tế chương trình không gian người dùng này có thể làm hỏng hệ điều hành hoặc làm cho máy không khả dụng với proxy không?

Vâng, về mặt lý thuyết, bạn sẽ gặp khó khăn khi làm hỏng hệ điều hành. Tuy nhiên, có rất nhiều báo cáo lỗi ra khỏi đó nói rằng nó có thể nhiều hơn trong thực tế hơn chúng tôi muốn.

Nếu không có biện pháp phòng ngừa đặc biệt, mặt khác, sẽ khá dễ dàng để đạt được sự từ chối dịch vụ. Hãy tưởng tượng một chương trình người dùng mà không làm gì ngoài việc tràn proxy bằng các gói tin; điều đó một mình có thể, nếu không đạt được sự phủ nhận hoàn toàn từ chối dịch vụ, thì làm cho mọi thứ trở nên xấu hổ một cách xấu hổ.

Với việc lắp ráp, người lập trình có thể làm bất cứ điều gì mình muốn (ví dụ như thao tác ngăn xếp ngăn xếp) và tôi tự hỏi mức độ nghiêm trọng/mạnh mẽ của Linux.

Tuy nhiên, chúng tôi tốt hơn rất nhiều so với điều đó. Nếu tất cả những gì bạn cần cho việc leo thang đặc quyền là "lộn xộn với con trỏ ngăn xếp" bảo mật như một trường sẽ là một trò đùa tổng quát. Các hạt nhân là dự định được viết để không có chương trình, không có vấn đề gì, có thể gây ra hạt nhân sụp đổ. Như đã nói, nó là không hoàn hảo.

Yếu tố đạo đức của câu chuyện là bạn thực sự không muốn chạy mã không tin cậy trên máy tính mà bạn quan tâm. Câu trả lời cổ phiếu ở đây sẽ là một máy ảo được kiểm tra: bắt đầu một máy ảo, chạy mã không đáng tin cậy trên máy ảo, và sau khi hoàn thành hoặc hết thời gian chờ máy ảo đi. Bằng cách đó thiệt hại liên tục là không thể. Theo như lạm dụng khác đi, proxy của bạn sẽ ngăn chặn chúng từ lưu trữ các dịch vụ internet seedy, đó là tốt. Tùy thuộc vào tình huống VM của bạn, có thể có các công cụ tốt để hạn chế tiêu thụ CPU và sử dụng mạng, điều này sẽ giúp loại bỏ các khả năng từ chối dịch vụ khác.

Bạn đề cập đến việc cần CPU để hoạt động hết công suất. Phần cứng ảo hóa khá tốt và hiệu suất phải phản ánh hợp lý những gì nó sẽ có trên một hệ thống thực.

Không có gì ở trên cụ thể cho Linux, nhân tiện; nó phải đúng với tất cả các hệ điều hành có mục đích chung đáng tin cậy.

chỉnh sửa: Nếu bạn đang thực sự khăng khăng chạy trực tiếp trên phần cứng, sau đó:

  • khởi động từ một thiết bị chỉ đọc (LiveCD hoặc writeblocked ổ cứng)
  • không có phương tiện truyền thông có khả năng ghi trong hệ thống
  • Thêm máy chủ tắt đèn có thể buộc đặt lại máy theo yêu cầu của proxy, trong trường hợp từ chối dịch vụ; giải pháp thương mại tồn tại cho

Về cơ bản, bản chất này cung cấp cho bạn các tính năng của giải pháp VM, nhưng trên phần cứng.

+0

Vâng, tôi đã không nói rằng rối tung với con trỏ ngăn xếp là lý do duy nhất cho leo thang đặc quyền. Đó chỉ là một ví dụ. Dù sao, cảm ơn cho câu trả lời! –

1

Nếu mã đang chạy trong một tài khoản giới hạn trên một máy được định cấu hình chính xác, nó sẽ chống lại nhiều loại tấn công cơ bản (ngẫu nhiên hoặc độc hại).

Thực tế người lập trình có thể sử dụng lắp ráp là không thích hợp - các cuộc tấn công có thể được mã hóa bằng nhiều ngôn ngữ khác nhau - được biên dịch hoặc theo cách khác.

Vấn đề chính là vấn đề bảo mật không xác định hoặc lỗ hổng 0day. Cho phép bất kỳ chương trình trái phép nào để chạy đều là một rủi ro và nếu ai đó quản lý để khai thác một vấn đề cho phép nâng cao đặc quyền, bạn bị vặn.

Sandboxes thường được khuyên bởi vì cả hai đều hạn chế những gì ứng dụng có thể làm và (nếu được thiết kế đúng) giảm thiểu thiệt hại do hành vi lừa đảo.

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