Làm cách nào để thuyết phục Quản trị viên của tôi rằng Java TRÊN MÁY CHỦ không an toàn cho mỗi người?


13

Ứng dụng

Chúng tôi có một ứng dụng Java nhỏ sử dụng một số tuyến đường Camel để chọn các tệp được tải lên từ máy chủ web, xử lý chúng và gửi một số e-mail có kết quả.

Máy chủ mà ứng dụng này đang chạy đã được giải mã. Hiện tại chúng tôi phải chạy nó trên phần cứng không đủ mạnh, vì tôi không thể thuyết phục được quản trị viên cài đặt JRE trên máy chủ web (thực tế là một máy chủ đa mục đích).

Nỗi sợ hãi

Bản thân tôi là một Kỹ sư ứng dụng Java, tôi viết mã JEE để kiếm sống, xử lý các giao dịch B2B trị giá hàng chục ngàn € mỗi tuần. Nhưng tôi có vấn đề trong việc tìm kiếm các nguồn đáng tin cậy để bác bỏ huyền thoại rằng java không an toàn.

Hai đối số chính của quản trị viên đối với việc cài đặt JRE:

  1. Các ứng dụng Java ăn hết RAM của tôi
  2. Java chứa đầy lỗ hổng

Sự thật?

Khi nói đến các ứng dụng java ăn ram. Chà ... tôi muốn nói rằng chúng ta phải đặt các giá trị phù hợp cho Xmx. Làm xong.

Bây giờ có rất nhiều nguồn nói về nhiều lỗ hổng của Java. Các nguồn này chủ yếu nhắm vào người dùng cuối đang chạy một Hệ điều hành nhất định từ một công ty ở Redmond / USA. AFAIK có thể đúng với các phiên bản chưa được bổ sung của Trình duyệt Java được cấu hình để tự động thực thi tất cả các applet, có nhiều khả năng trở thành nạn nhân của ổ đĩa bị nhiễm trùng. Cũng giống như có nguy cơ mắc STDs khi quan hệ tình dục không an toàn với eveyone trên tàu của bạn trong khi đi làm.

Nhưng tôi không thể tìm thấy bất cứ ai trên thế giới nói về các ứng dụng máy chủ hoặc JRE chạy không đầu. Đó là một điều hoàn toàn khác.

Hay tôi đang thiếu một cái gì đó ở đây?

[sửa 2014-08-28] làm rõ: Tôi chỉ quan tâm đến Java trên các máy chủ. Tôi không quan tâm đến các vấn đề với Plugin Java và / hoặc phần mềm cụ thể được phát triển trong java.


7
Nếu phần cứng của nó bị thiếu năng lượng và gây ra sự cố thì bên cạnh những lo ngại của SA chắc chắn bạn có trường hợp kinh doanh để nhận phần cứng mới.
dùng9517

4
Hãy thuyết phục anh ta rằng đó không phải của công ty bạn mà anh ta vừa thấy trên thed Dailywtf.com.
Michael Hampton

9
Java đã có một năm khó khăn vào năm 2013. Thậm chí còn có một trang web theo dõi các hoạt động khai thác 0 ngày khi họ tiếp tục triển khai. Kể từ giữa năm ngoái, không có bất kỳ khai thác nào trong 0 ngày, nhưng các nhà nghiên cứu vẫn chỉ tìm thấy 107 CVE Java trong năm nay. Đó là một chặng đường dài từ "an toàn".
Chris S

5
Tôi có thể kích hoạt lỗi JVM bằng cách cung cấp dữ liệu độc hại cho ứng dụng của bạn không? Bạn nên tin vào điều đó. Và khá nhiều trong số các CVE đó liên quan đến việc chạy Java trên các máy chủ, không phải là plugin trình duyệt máy tính để bàn Windows thông thường.
Michael Hampton

3
@lajuette Tôi đã cung cấp một liên kết với số 107 vì một lý do - nếu bạn đã nhấp vào nó, tất cả những Câu hỏi bạn vừa hỏi sẽ được trả lời. Một số trong số 107 có liên quan đến các triển khai không phải của Oracle, như Dalvak của Android, nhưng phần lớn có liên quan đến việc triển khai Oracle. Java không phải là không an toàn, nhưng JRE của Sun / Oracle đang gặp vấn đề. PHP, Perl, Ruby cũng có lỗ hổng - không ai trong số chúng là hoàn hảo. Tôi không thể nói nếu Java tốt hơn hay kém hơn những thứ đó hiện tại, nhưng trong năm qua, nó chắc chắn là chàng trai của ngành công nghiệp bảo mật.
Chris S

Câu trả lời:


18

Bề mặt bảo mật bổ sung mà java đưa vào môi trường của bạn rất phức tạp và điều quan trọng là không bỏ qua nó hoặc cố gắng đơn giản hóa nó đi.

Thứ nhất, có một kỷ lục khủng khiếp mà JRE có vì có lỗi bảo mật. Thật khó để chỉ ra một điều cụ thể, và đây là phần đáng sợ - các lỗi là các lỗ hổng cực kỳ không xác định với các vectơ không xác định.

Khi tôi, với tư cách là một nhà tư vấn bảo mật, đọc các mệnh đề như "cho phép kẻ tấn công từ xa" mà không cần hiểu thêm về ý nghĩa của chúng, tôi thấy rằng điều đó rất có thể có nghĩa là một số tham số nhất định có thể dẫn đến tình trạng dễ bị tổn thương, ngay cả khi bạn chỉ chạy mã bạn đã viết. Và, vì chúng không được chỉ định, bạn không biết liệu mình có bị ảnh hưởng hay không.

Thậm chí tốt hơn, JRE kinh điển được xuất bản bởi Oracle có một chu kỳ cập nhật hàng quý đã nêu cho các bản cập nhật quan trọng, bao gồm hầu hết tất cả các bản cập nhật bảo mật. Họ đã tạo ra các bản vá chu kỳ tổng cộng 11 lần trong bốn năm qua. Điều này có nghĩa là có khả năng bạn có thể dễ bị lỗi bảo mật đến ba tháng sau khi được báo cáo trước khi bạn có bất kỳ cách nào để khắc phục.

Có những vấn đề khác với java mà tôi sẽ không gặp phải ở đây, nhưng thực sự, có vẻ như có một mối quan tâm chính đáng, đặc biệt là đối với một máy chủ đa mục đích. Nếu bạn phải chạy những thứ như vậy, ít nhất bạn nên tạo một máy ảo một mục đích cho nó và cách ly nó khỏi những thứ khác.

Đặc biệt, nếu có một điều khiển từ xa trong JRE cho phép kẻ tấn công có được RCE và một cái khác trong PHP cũng làm như vậy, và một cái khác trong Ruby cũng làm lại như vậy, bạn phải vá cả ba. Cả ba dường như có khả năng, khi những điều này diễn ra, và kẻ tấn công sẽ chọn bất cứ điều gì thuận tiện nhất và sau đó sở hữu toàn bộ máy chủ. Đó là lý do tại sao chúng ta nên sử dụng máy ảo để phân tách phần mềm, đặc biệt là phần mềm có lỗi như khung ngôn ngữ được quản lý và đặc biệt là phần mềm gói vá bảo mật chỉ bốn lần một năm và thuộc quyền sở hữu của một nhà cung cấp khi đối mặt với tất cả bằng chứng cho thấy chúng là một đối thủ của Bảo vệ.

Để cập nhật, đây là một số CVE tôi chọn từ tìm kiếm CVE được liên kết của ChrisS, bằng cách trình diễn.

Và yêu thích của tôi, kể từ khi tôi ở đó:

Nhân tiện, đó chỉ là một mẫu nhỏ.


6

Các ứng dụng Java ăn hết RAM của tôi

Thay thế cho việc sử dụng RAM là lãng phí RAM. Bạn không thể lưu nó cho lần sau.

Java chứa đầy lỗ hổng

Điều đó không thực sự quan trọng bởi vì bạn sẽ không đưa JVM ra thế giới. Tôi cho rằng bạn sẽ không chạy bất kỳ chương trình thù địch nào và nếu là bạn, Java an toàn hơn hầu hết các ngôn ngữ khác. Vấn đề là ứng dụng của bạn có lỗ hổng hay không.


3
Được rồi, lý do không hoạt động. Những công cụ khác trong hộp công cụ thuyết phục của bạn là gì? Bạn có bất kỳ kìm gỉ?
David Schwartz

1
@FalconMomot Có, kernel có thể sử dụng nó để lưu các tập tin. Nhân có thể lấy bộ nhớ ra khỏi JVM nếu nó sử dụng tốt hơn cho nó. Đó là cách mà mọi hệ điều hành hiện đại hoạt động. Thay thế cho việc sử dụng RAM là lãng phí RAM. HĐH có trình quản lý bộ nhớ đặc biệt để đảm bảo RAM đi đến mục đích tốt nhất. Các đối số như "ứng dụng Java ăn hết RAM của tôi" hầu như luôn chỉ ra một quản trị viên không hiểu hệ điều hành hiện đại sử dụng RAM như thế nào.
David Schwartz

1
Nếu JVM không giải phóng bộ nhớ, nó phải trao đổi nó ra không gian trao đổi (nếu có) để thực hiện việc này, điều này rất chậm. Nhân không thể gọi trình thu gom rác. Ngoài ra, bộ nhớ đệm tệp thường có mức độ ưu tiên thấp hơn so với phân bổ không gian người dùng ngay cả khi chúng hiếm khi được sử dụng (nhiều như kernel có thể nói rằng chúng hiếm khi được sử dụng, điều này không tốt lắm).
Falcon Momot

3
Tôi muốn biết thêm về cách Linux có thể đồng thời sử dụng một khối RAM cho bộ đệm trong khi một quá trình vẫn cho rằng nó sở hữu nó. Tôi chưa bao giờ nghe về điều này trước đây.
Michael Hampton

1
@FalconMomot Nhân không cần biết RAM là "miễn phí". Nhân luôn có quyền kiểm soát việc sử dụng RAM trừ khi ứng dụng khóa các trang. Nó chỉ phải làm cho các trang được ánh xạ bị loại bỏ để lấy lại RAM. Nếu dữ liệu không được sửa đổi và không được sử dụng trong một khoảng thời gian và băng thông I / O không bão hòa, nó có thể viết nó một cách ngẫu nhiên để trao đổi, làm cho các trang bị loại bỏ, cho phép nó lấy lại RAM ngay khi sử dụng tốt hơn cho nó. (Không gian này không đủ lớn để giải thích cách quản lý bộ nhớ hiện đại hoạt động, nhưng có vẻ như bạn có một số hiểu lầm rất phổ biến.)
David Schwartz

2

Thuê một công ty để làm phân tích tĩnh trên chương trình của bạn. Veracode, ví dụ, là một công ty mà tôi đã sử dụng trong quá khứ để kiểm tra bảo mật mã của các chương trình Java, cụ thể.

Hóa đơn mã phí nhóm quản trị viên của bạn, rõ ràng.


1

Giải thích rằng tất cả các ngôn ngữ khác (hoặc máy ảo) có thể được hiển thị không an toàn bằng mã được triển khai trên chúng, giống như với Java. Nếu anh ta nghĩ rằng các nền tảng khác vốn đã được bảo mật (hoặc an toàn hơn Java) mà không bảo mật địa chỉ chính xác, thì anh ta bị ảo tưởng.

Công ty của bạn rõ ràng đã đầu tư vào việc thuê một nhà phát triển Java, tại sao sysadmin từ chối hỗ trợ một công nghệ mà công ty quyết định sử dụng?

Tôi sẽ lật câu hỏi và hỏi anh ấy những đề xuất thay thế nào và cách chúng an toàn hơn so với JRE Server mới nhất hiện có, theo các thuật ngữ rất cụ thể. Trong lúc này, hãy làm việc để cho bạn hiểu công nghệ của bạn, bề mặt tấn công có thể và bạn đã làm việc để giảm thiểu nó (ví dụ: các khung không cần thiết, mã của bên thứ 3, v.v.). Mã của bạn đã được xác minh, tìm kiếm các lỗ hổng được xuất bản cho các khung mà bạn dựa vào trong những năm X trước, so sánh nó với các ngôn ngữ / khung khác (đảm bảo bao gồm cả thị trường, các khung che khuất mà không có lỗ hổng được công bố có nghĩa là gì).

Chúng tôi không thể biết toàn bộ chuyển đổi giữa hai bạn đã xảy ra như thế nào nhưng nếu đó là hai đối số của anh ấy, tôi tin rằng bạn đang làm việc với một quản trị viên hệ thống cơ sở. Anh ta có kinh nghiệm với các máy chủ ứng dụng Java không? Có lẽ anh ta không thoải mái với công nghệ và ngại đưa thứ gì đó vào sản xuất mà không hiểu thấu đáo về nó (thái độ sysadmin tốt sau đó).


Cảm ơn. Chúng tôi không nói về một công ty. Thay vào đó là một hiệp hội phi lợi nhuận. Sysadmin có một bác sĩ về CNTT & tiếp thị, nhưng không phải là một sysadmin "thực sự". Và vâng: tôi tin rằng anh ấy sợ Java, điều mà anh ấy không hiểu đầy đủ.
lajuette
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.