2010-07-21 38 views
8

Các lỗ hổng Java phổ biến có thể khai thác để đạt được một số loại quyền truy cập vào một hệ thống là gì? Tôi đã suy nghĩ về nó gần đây, và havent đã có thể đến với nhiều bất cứ điều gì - tràn số nguyên - có lẽ? điều kiện chủng tộc - nó mang lại cho bạn điều gì?Lỗ hổng Java phổ biến là gì?

Tôi không tìm kiếm những thứ như "phun sql trong ứng dụng web". Tôi đang tìm một mối quan hệ tương tự như tràn bộ đệm - c/C++.

Bất kỳ chuyên gia bảo mật nào ở đó có thể trợ giúp? Cảm ơn.

+1

Chỉ vì tò mò, tại sao bạn đã phân loại tràn bộ đệm dưới dạng lỗ hổng c/C++? Có thể ngay cả trong Java, nếu VM có cùng lỗ hổng. –

+0

Thông thường, các lỗ hổng nằm trong ứng dụng chứ không phải trong ngôn ngữ. – Jonas

+0

@Vineet: Để công bằng, nguy cơ tạo tràn bộ đệm trong mã * Java * mà bạn viết không tồn tại; tương tự cho C# và các ngôn ngữ được quản lý khác. Nguy cơ tràn bộ đệm trong bản thân máy ảo là rất thấp, giúp loại bỏ được 99,9% rủi ro tổng thể. –

Trả lời

1

Sau khi đọc hầu hết các câu trả lời, tôi nghĩ câu hỏi của bạn đã được trả lời một cách gián tiếp. Tôi chỉ muốn nói điều này trực tiếp. Java không bị các vấn đề tương tự như bạn thấy trong C/C++ vì nó bảo vệ nhà phát triển khỏi các kiểu tấn công bộ nhớ này (tràn bộ nhớ đệm, tràn tràn, vv). Những điều đó không thể xảy ra.Bởi vì có bảo vệ cơ bản này trong các lỗ hổng bảo mật ngôn ngữ đã di chuyển lên ngăn xếp.

Hiện chúng đang diễn ra ở cấp độ cao hơn. SQL injection, XSS, DOS, vv Bạn có thể tìm ra cách để tải Java từ xa mã độc hại, nhưng để làm điều đó có nghĩa là bạn cần khai thác một số lỗ hổng khác ở lớp dịch vụ để đẩy mã từ xa vào một thư mục sau đó kích hoạt Java để tải thông qua trình nạp lớp. Các cuộc tấn công từ xa về mặt lý thuyết là có thể, nhưng với Java thì việc khai thác phức tạp hơn. Và thường nếu bạn có thể khai thác một số lỗ hổng khác thì tại sao không chỉ đi sau và cắt java ra khỏi vòng lặp. Các thư mục có thể ghi trên thế giới nơi mã java được tải từ có thể được sử dụng để chống lại bạn. Nhưng tại thời điểm này là nó thực sự Java đó là vấn đề hoặc quản trị sys của bạn hoặc nhà cung cấp của một số dịch vụ khác có thể khai thác?

Lỗ hổng duy nhất tạo ra tiềm năng mã từ xa mà tôi đã thấy trong Java qua nhiều năm là từ mã gốc mà VM tải. Lỗ hổng libzip, phân tích cú pháp tệp gif, v.v ... Và đó chỉ là một số vấn đề. Có thể cứ 2-3 năm một lần. Và một lần nữa, thô tục là mã nguồn gốc được JVM nạp không phải trong mã Java.

Là một ngôn ngữ Java rất an toàn. Ngay cả những vấn đề này tôi đã thảo luận có thể bị tấn công về mặt lý thuyết có móc trong nền tảng để ngăn chặn chúng. Việc ký mã sẽ ngăn chặn hầu hết điều này. Tuy nhiên, rất ít chương trình Java chạy với một Trình quản lý bảo mật được cài đặt. Chủ yếu là do hiệu suất, khả năng sử dụng, nhưng chủ yếu là vì những vulns là rất hạn chế trong phạm vi tốt nhất. Tải mã từ xa trong Java đã không tăng lên đến mức dịch mà tràn bộ đệm đã làm trong cuối những năm 90/2000 cho C/C++.

Java không phải là bằng chứng đạn làm nền tảng, nhưng khó khai thác hơn trái cây khác trên cây. Và tin tặc là cơ hội và đi cho quả treo thấp đó.

+0

tóm tắt hay - một điều id muốn lưu ý từ một quan điểm của kẻ tấn công là java có thể được sử dụng như một bề mặt tấn công. vì nó là một ngôn ngữ thông dịch, bạn có thể viết các vỏ phổ thông ... tôi đã không thực sự nghĩ về điều đó cho đến khi tôi đọc một bài viết về nó. – wuntee

1

Tôi không phải là chuyên gia bảo mật, nhưng có một số mô-đun trong công ty của chúng tôi rằng chúng tôi không thể viết mã bằng java bởi vì quá dễ dàng để giải mã bytecode java. Chúng tôi nhìn vào obfuscation nhưng nếu bạn muốn obfuscation thực nó chỉ đi kèm với rất nhiều vấn đề (hiệu suất hit/mất thông tin gỡ lỗi).
Người ta có thể ăn cắp lôgic của chúng tôi, thay thế mô-đun bằng phiên bản sửa đổi sẽ trả lại kết quả không chính xác, v.v.

So với C/C++, tôi đoán đây là một "lỗ hổng" nổi bật.

Chúng tôi cũng có cơ chế cấp phép phần mềm được tích hợp sẵn trong các mô-đun java của chúng tôi, nhưng điều này cũng có thể dễ dàng bị tấn công bằng cách bỏ biên dịch và sửa đổi mã.

+0

Mọi người đã xâm nhập và tắt các cơ chế cấp phép phần mềm trong mã C/C++ trong hơn 30 năm. Java có dễ dàng hơn không? Chắc chắn, nhưng C/C++ không miễn nhiễm với các loại vấn đề này. Nếu mọi người thực sự muốn phần mềm của bạn sẽ nhận được nó. Tôi muốn viết logic của mình bằng một ngôn ngữ như Java và làm cho công việc của tôi dễ dàng hơn, nơi tôi có thể di chuyển nhanh hơn và tạo ra nhiều giá trị hơn cho khách hàng cuối của tôi hơn là bóng ma của IP quyết định lựa chọn ngôn ngữ của tôi. Hãy nhớ rằng hầu như tất cả mọi thứ dưới ánh mặt trời không phải là mới. – chubbsondubs

1

Bao gồm các tệp lớp của bên thứ ba và gọi chúng về cơ bản có nghĩa là bạn đang chạy mã không an toàn. Mã đó có thể làm bất cứ điều gì nó muốn nếu bạn không có bảo mật bật.

+0

Điều tương tự cũng đúng với việc cài đặt thư viện C hoặc C++ của bên thứ ba và gọi chúng. Mã đó có thể làm * nhiều hơn bất kỳ thứ gì * so với mã Java. –

4

Tiêm mã độc. Bởi vì Java (hoặc bất kỳ ngôn ngữ nào sử dụng thông dịch viên khi chạy), thực hiện liên kết trong thời gian chạy, có thể thay thế các JAR được mong đợi (tương đương với các tệp DLL và SO) với các tệp độc hại trong thời gian chạy.

Đây là lỗ hổng bảo mật, được kết hợp từ bản phát hành đầu tiên của Java, sử dụng các cơ chế khác nhau.

  • Có sự bảo vệ ở những nơi trong trình tải lớp để đảm bảo rằng các lớp java. * Không thể tải từ bên ngoài rt.jar (jar thời gian chạy).
  • Ngoài ra, các chính sách bảo mật có thể được đưa ra để đảm bảo rằng các lớp được tải từ nhiều nguồn khác nhau bị hạn chế chỉ thực hiện một số hành động nhất định - ví dụ rõ ràng nhất là các applet. Các applet bị ràng buộc bởi mô hình chính sách bảo mật Java từ việc đọc hoặc viết hệ thống tệp, v.v. các applet đã ký có thể yêu cầu các quyền nhất định.
  • JAR cũng có thể được ký và các chữ ký này có thể được xác minh khi chạy khi chúng được tải.
  • Các gói cũng có thể được niêm phong để đảm bảo rằng chúng đến từ cùng nguồn mã. Điều này ngăn cản kẻ tấn công đặt các lớp vào gói của bạn, nhưng có khả năng thực hiện các hoạt động 'độc hại'.

Nếu bạn muốn biết tại sao tất cả điều này là quan trọng, hãy tưởng tượng một trình điều khiển JDBC được tiêm vào đường dẫn lớp có khả năng truyền tất cả các câu lệnh SQL và kết quả của chúng đến một bên thứ ba từ xa. Vâng, tôi giả sử bạn có được hình ảnh ngay bây giờ.

+0

Khái niệm chính xác này chỉ đến với tâm trí, và tôi sẽ đề cập đến nó. Tuy nhiên, tôi có một thời gian khó khăn của gói đầu của tôi xung quanh cách người ta sẽ tận dụng lợi thế này ... Bạn có thể cung cấp một trường hợp sử dụng như thế nào một người nào đó có thể tiêm một cái lọ độc hại? Rất nhiều khai thác tràn được thực hiện đơn giản bằng cách xem trang web hoặc xử lý hình ảnh.Có lẽ tôi chỉ đang nghĩ về nó tất cả sai, và đây là một thế giới hoàn toàn khác nhau của các lỗ hổng ... – wuntee

+0

Vâng, vài câu cuối cùng bao gồm điều đó. Vì Java thường được sử dụng ở phía doanh nghiệp của ngành, trong các trang trại máy chủ, bạn thường sẽ cần một quản trị viên hệ thống sẵn sàng hoặc một máy chủ bị xâm phạm để loại bỏ điều này. Tôi sẽ xem xét kịch bản thứ hai vì nó hợp lý hơn. Hãy tưởng tượng một máy chủ (phải đối mặt với internet) với một truy cập root khai thác hoặc tương tự cho phép kẻ tấn công sửa đổi các tập tin trên nó tại bất kỳ vị trí có thể. Một kẻ tấn công như vậy sẽ có thể tải lên tải trọng độc hại của anh ta trong, nói javax.sql. * Không gian tên (contd.) ..... –

+0

Nếu anh ta có thể thay thế PreparedStatement.class bằng chính sự đa dạng của mình và làm cho nó được nạp trước khi một trong rt.jar, sau đó nó thực sự là trái với trí tưởng tượng của mình về những gì có thể nếu một lỗ hổng bảo mật tồn tại. Ông có thể ghi lại tất cả các dữ liệu chảy qua lại máy chủ ứng dụng và cơ sở dữ liệu, và có thể tải nó lên định kỳ tới một máy chủ bên ngoài. Rất may, sự bảo vệ tại chỗ có lẽ là đủ tốt cho ngày hôm nay. –

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