2012-11-03 37 views
7

Tôi đang làm việc trên một hệ thống giống như Ideone, nơi mã người dùng không đáng tin cậy phải chạy trong chế độ hộp cát.Cách ngăn chặn cuộc gọi hệ thống được thực hiện với ptrace

Đối với điều này, tôi đã tìm kiếm các khả năng của ptrace cho lớp bảo vệ đầu tiên. Tuy nhiên, sau một vài thử nghiệm có vẻ như:

  • Tôi có thể chặn cuộc gọi hệ thống trước khi được gọi và sửa đổi đối số đầu vào.
  • Tôi có thể chặn cuộc gọi hệ thống sau khi cuộc gọi được gọi và thay đổi giá trị trả lại.
  • Tuy nhiên, có vẻ như không có cách nào để ngăn chặn cuộc gọi từ hoạt động vui vẻ cả (ngoại trừ việc giết toàn bộ đơn đăng ký).

Tôi muốn chặn một số cuộc gọi hệ thống nhất định và trả lại mã kết quả giả mà không có cuộc gọi thực sự xảy ra. Có cách nào để thực hiện điều này?

+0

PTRACE_SYSEMU? Theo manpage: "Cuộc gọi này được sử dụng giống như chế độ người dùng Linux muốn mô phỏng tất cả các cuộc gọi hệ thống của trẻ" – Krumelur

Trả lời

1

bạn có thể nhảy lệnh thực thi cuộc gọi hệ thống, bằng cách tăng IP (con trỏ lệnh), theo cách này cuộc gọi sẽ không được thực thi và bạn có thể đặt giá trị trả về như bình thường.

Edit:

Có một wrapper ptrace gọi pinktrace, mà nên làm cho công việc của bạn dễ dàng hơn, cũng có một số biết thêm thông tin ở đây:

https://security.stackexchange.com/questions/8484/wrapping-system-call-in-reliable-and-secure-way

2

Hãy ghi nhớ rằng sandbox của bạn chỉ có thể được bảo mật nếu mã nó chạy không phải là đa luồng. Bạn cũng sẽ phải hết sức cẩn thận để ngăn chặn mã đóng hộp cát cũng bị cấm.

Xem, ví dụ, các cuộc thảo luận sau đây của một bài báo về các vấn đề bởi Robert Watson:

Exploiting races in system call wrappers

Bài viết có liên quan đến trong bài viết đó, nhưng tôi sẽ cung cấp liên kết ở đây trực tiếp như tốt:

"Exploiting Concurrency Vulnerabilities in System Call Wrappers"

cách tiếp cận tốt hơn vẫn có vẻ như được khuyến khích bởi Watson: tích hợp các khuôn khổ an ninh hoàn toàn vào hạt nhân và chăm sóc trong việc sử dụng nó để tránh concu vấn đề về độ chính xác. Linux và NetBSD và Mac OS X và các hệ thống bảo mật khác đã cung cấp các khung như vậy và vì vậy tất cả những gì cần thiết nếu sử dụng các hệ thống đó là triển khai các chính sách của bạn trong các khung công tác hiện có. I E. thậm chí không cố gắng triển khai các chính sách bảo mật của bạn trong trình bao bọc cuộc gọi hệ thống hoặc các cơ chế xen kẽ cuộc gọi hệ thống khác.

+0

Hoặc, vì bạn dự định ngăn ứng dụng gọi một số cuộc gọi hệ thống nhất định, bạn có thể ngăn chúng giả mạo hoặc tạo chủ đề. Điều này sẽ làm giảm đáng kể khả năng của chương trình. – petersohn

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