Yöneticimi SUNUCU ÜZERİNDE Java'nın güvensiz olmadığı konusunda nasıl ikna edebilirim?


13

Uygulama

Bir web sunucusundan yüklenen dosyaları almak, işlemek ve sonuçlarla birlikte bazı e-postalar göndermek için bazı Deve rotalarını kullanan küçük bir Java uygulamamız var.

Bu uygulamanın çalıştığı sunucu devre dışı bırakıldı. Şimdilik, yöneticiyi web sunucusuna bir JRE (aslında çok amaçlı bir sunucu) yüklemeye ikna edemediğimiz için düşük güçle çalışan donanım üzerinde çalıştırmak zorundayız.

Korku

Ben bir Java Uygulama Mühendisiyim, haftada on binlerce € değerinde B2B işlemlerini gerçekleştiren, yaşamak için JEE kodu yazıyorum. Ancak java'nın güvensiz olduğu mitini çürüten güvenilir kaynaklar bulmakta sorun yaşıyorum.

Yöneticinin bir JRE yüklemesine karşı iki ana argümanı:

  1. Java uygulamaları tüm RAM'imi tüketiyor
  2. Java güvenlik açıklarıyla dolu

Doğrusu?

Java uygulamaları söz konusu olduğunda koç yiyor. Şey ... Xmx için uygun değerleri ayarlamamız gerektiğini söyleyebilirim. Bitti.

Şimdi Java'nın birçok güvenlik açığı hakkında konuşan birçok kaynak var. Bu kaynaklar çoğunlukla Redmond / ABD'deki bir şirketten belirli bir işletim sistemi çalıştıran son kullanıcıları hedeflemektedir. AFAIK, tüm uygulamaları otomatik olarak yürütmek üzere yapılandırılmış Java Tarayıcı Eklentisi'nin eşleşmemiş sürümleri için, bir sürücünün enfeksiyondan kurban olma olasılığı oldukça yüksektir. Tıpkı işe giderken treninizde eveyone ile korunmasız seks yaparken cinsel yolla bulaşan hastalıkları yakalama riski olduğu gibi.

Ancak dünya çapında interwebz'de sunucu uygulamaları veya başsız çalışan JRE'ler hakkında konuşan kimseyi bulamadım. Bu başka bir şey.

Yoksa burada bir şey mi eksik?

[değiştir 2014-08-28] açıklama: Yalnızca sunuculardaki Java ile ilgileniyorum. Java Eklentisi ve / veya java'da geliştirilen belirli yazılımlarla ilgili sorunları umurumda değil.


7
Üzerinde bulunduğu donanım açıkça yetersiz ve sorunlara neden oluyorsa, SA'nın endişeleri kesinlikle yeni donanım almak için bir iş vakanız var.
user9517

4
Şirketinizin kodu olmadığını, thedailywtf.com adresinde gördüğü konusunda ikna edin .
Michael Hampton

9
Java'nın 2013'te zor bir yılı vardı . 0 günlük istismarları takip eden bir web sitesi bile vardı . Geçen yılın ortasından bu yana 0 günlük istismar olmadı, ancak araştırmacılar hala bu yıl 107 Java CVE buldu . Bu "güvenli" olmaktan çok uzak.
Chris S

5
Uygulamanıza kötü amaçlı veriler besleyerek bir JVM hatasını tetikleyebilir miyim? İnansan iyi edersin. Ve bu CVEs epeyce sunucularında Java çalışan ilgili değil her zamanki Windows masaüstü tarayıcı eklentisi.
Michael Hampton

3
@lajuette Bir nedenden ötürü 107 numarayla bir bağlantı sağladım - tıklamış olsaydınız, sorduğunuz tüm bu Sorular yanıtlanacaktır. Bu 107 modelin bazıları Android'in Dalvak'ı gibi Oracle dışı uygulamalarla ilgilidir, ancak büyük çoğunluğu Oracle uygulamasıyla ilgilidir. Java doğal olarak güvensiz değildir, ancak Sun / Oracle'ın JRE'si problemlerle doludur. PHP, Perl, Ruby'nin hepsinde de güvenlik açıkları var - hiçbiri mükemmel değil. Java'nın şu anda olanlardan daha iyi veya daha kötü olup olmadığını söyleyemedim, ancak geçen yıl kesinlikle güvenlik endüstrisinin kırbaçlanan çocuğu oldu.
Chris S

Yanıtlar:


18

Ek güvenlik yüzeyi java ortamınıza karmaşıktır ve onu görmezden gelmemek veya basitleştirmeye çalışmak önemlidir.

İlk olarak, JRE'nin güvenlik hatalarına sahip olduğu için korkunç bir kayıt var. Belirli bir noktaya işaret etmek zordur ve bu korkunç bir parçadır - böcekler, belirtilmemiş vektörlerle ezici bir şekilde tanımlanmamış güvenlik açıklarıdır.

Bir güvenlik danışmanı olarak, "uzak bir saldırgana izin verir" gibi cümleleri anlamlarına ilişkin daha fazla yeterlilik olmadan okuduğumda, belirli bir işleve giren belirli parametrelerin, yalnızca yazdığınız kodu çalıştırıyor. Ve belirtilmemiş oldukları için etkilenip etkilenmediğinizi bilmiyorsunuz.

Daha da iyisi, Oracle tarafından yayınlanan standart JRE, neredeyse tüm güvenlik güncellemeleri de dahil olmak üzere kritik güncellemeler için üç aylık bir güncelleme döngüsüne sahiptir. Son dört yıl içinde toplamda 11 kez devir yamaları oluşturdular. Bu , herhangi bir sorunu çözmeden önce bildirildikten üç ay sonrasına kadar bir güvenlik hatasına karşı savunmasız olma olasılığınız olduğu anlamına gelir .

Java ile buraya girmeyeceğim başka sorunlar var, ama gerçekten, özellikle çok amaçlı bir sunucu için haklı bir endişe var gibi görünüyor. Böyle şeyler yürütmeniz gerekiyorsa, en azından bunun için tek amaçlı bir VM yapmalı ve diğer şeylerden soyutlamalısınız.

Özellikle, JRE'de bir saldırganın RCE kazanmasına izin veren bir uzaktan kumanda ve PHP'de de aynı şeyi yapan başka bir tane ve Ruby'de de aynı şeyi yapan başka bir uzaktan kumanda varsa, üçünü de yamalamanız gerekir. Bu şeyler giderken her üçü de biraz muhtemel görünüyor ve saldırgan hangisinin en uygun olduğunu seçiyor ve ardından tüm sunucunun sahibi oluyor. Bu nedenle VM'leri yazılımı, özellikle de yönetilen dil çerçeveleri gibi buggy yazılımları ve özellikle de yılda sadece dört kez güvenlik yamaları paketleyen ve paragon olduklarını gösteren tüm kanıtlar karşısında bir satıcıya ait olan yazılımları ayırmak için kullanmalıyız. güvenlik.

Güncellemek için, gösteri yoluyla ChrisS'in bağlantılı CVE araştırmasından seçtiğim bazı CVE'ler.

Ve benim favorim, orada olduğumdan beri:

Bu arada, sadece küçük bir örnekleme.


6

Java uygulamaları tüm RAM'imi tüketiyor

RAM kullanmanın alternatifi RAM israfıdır. Daha sonra saklayamazsınız.

Java güvenlik açıklarıyla dolu

Bu gerçekten önemli değil, çünkü JVM'yi dünyaya maruz bırakmayacaksınız. Herhangi bir düşmanca program çalıştırmayacağınızı varsayıyorum ve eğer öyleyse, Java diğer dillerden daha güvenlidir. Önemli olan uygulamalarınızın güvenlik açıkları olup olmadığıdır.


3
Tamam, bu yüzden neden işe yaramıyor. İkna araç kutunuzda başka hangi araçlar var? Paslı pense var mı?
David Schwartz

1
@FalconMomot Evet, çekirdek dosyaları önbelleğe almak için kullanabilir. Çekirdek, daha iyi bir kullanımı varsa belleği JVM'den uzaklaştırabilir. Her modern işletim sistemi böyle çalışır. RAM kullanmanın alternatifi RAM israfıdır. İşletim sisteminin, RAM'in en iyi amaca ulaşmasını sağlamak için özel olarak bir bellek yöneticisi vardır. "Java uygulamaları tüm RAM'imi tüketir" gibi argümanlar neredeyse her zaman modern işletim sistemlerinin RAM'i nasıl kullandığını anlamayan bir yöneticiyi gösterir.
David Schwartz

1
JVM belleği serbest bırakmazsa, bunu yapmak için takas alanına (varsa) takas etmelidir, ki bu yavaştır. Çekirdek çöp toplayıcısını çağıramaz. Ayrıca, dosya önbelleğe alma, nadiren kullanılsa bile, kullanıcı alanı ayırmalarından daha düşük önceliğe sahiptir (çekirdek, nadiren kullanıldığını söyleyebildiği kadar, bu çok iyi değildir).
Falcon Momot

3
Bir sürecin hala sahibi olduğunu düşünürken Linux'un aynı anda önbellek için bir RAM bloğunu nasıl kullanabileceği hakkında daha fazla bilgi edinmek istiyorum. Bunu daha önce hiç duymamıştım.
Michael Hampton

1
@FalconMomot Çekirdeğin RAM'in "boş" olduğunu bilmesine gerek yoktur. Uygulama sayfaları kilitlemediği sürece çekirdek her zaman RAM kullanımı üzerinde denetime sahiptir. Sadece RAM'i geri almak için eşlenmiş sayfaları görünür hale getirmelidir. Veriler bir süre değiştirilmez ve kullanılmazsa ve G / Ç bant genişliği doymamışsa, fırsatçı olarak takas için yazabilir, sayfalar anlaşılır hale getirerek daha iyi bir kullanım alanına sahip olur olmaz RAM'i geri kazanmasına izin verir onun için. (Bu alan, modern bellek yönetiminin nasıl çalıştığını açıklayacak kadar büyük değil, ancak bazı yaygın yanılgılarınız var gibi görünüyor.)
David Schwartz

2

Programınızda statik analiz yapması için bir şirket kiralayın. Örneğin Veracode, geçmişte özellikle Java programlarının kod güvenliğini denetlemek için kullandığım bir şirket.

Yönetici ekibinizin ücret kodunu açıkça faturalandırın.


1

Diğer tüm dillerin (veya sanal makinelerin), tıpkı Java'da olduğu gibi, kendilerine dağıtılan kodla güvensiz hale getirilebileceğini açıklayın. Diğer platformların güvenliği doğru bir şekilde ele almadan doğal olarak güvenli (veya Java'dan daha güvenli) olduğunu düşünürse, o zaman kuruntu olur.

Şirketiniz açıkça bir Java geliştiricisi işe yatırım yaptı, sysadmin neden şirketin kullanmaya karar verdiği bir teknolojiyi desteklemeyi reddediyor?

Soruyu çevirir ve ona hangi alternatifleri önerdiğini ve en son Server JRE'den çok daha güvenli bir şekilde nasıl daha güvenli olduklarını sorarım. Bu arada, teknolojinizi, olası saldırı yüzeyini ve onu en aza indirmek için çalıştığınızı göstermeye çalışın (örn. Gereksiz çerçeveler, 3. taraf kodu, vb.). Kodunuzu doğrulayın, son X yılda güvendiğiniz çerçeveler için yayınlanan güvenlik açıklarını arayın, diğer dillerle / çerçevelerle karşılaştırın (pazar paylaşımını da dahil ettiğinizden emin olun, yayınlanmış güvenlik açıkları olmadan belirsiz çerçeveler hiçbir şey ifade etmiyor).

İkiniz arasındaki dönüşümün nasıl gerçekleştiğini muhtemelen bilemeyiz, ancak bu onun iki argümanı olsaydı, bir genç sistem yöneticisi ile uğraştığınıza inanıyorum. Java uygulama sunucuları konusunda tecrübesi var mı? Belki de teknolojiden rahatsız olur ve iyice anlamadan bir şeyi üretime sokmaktan korkar (o zaman iyi sysadmin tutumu).


Teşekkürler. Bir şirketten bahsetmiyoruz. Kar amacı gütmeyen bir dernek. Dışarı sysadmin BT ve pazarlama bir doktor var, ama "gerçek" bir sysadmin değil. Ve evet: Java'dan korktuğuna inanıyorum, tam olarak anlamadı.
Lajuette
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.