Apache'deki 'logjam' güvenlik açığı nasıl düzeltilir (httpd)


56

Son zamanlarda, Diffie-Hellman'da, gayrı resmi olarak 'logjam' olarak adlandırılan ve bu sayfanın bir araya getirildiği ve bu güvenlik açığının nasıl karşılanacağını gösteren yeni bir güvenlik açığı yayımlandı :

Diffie-Hellman'i TLS'ye doğru şekilde yerleştirmek için üç önerimiz var:

  1. Export Cipher Suites'i devre dışı bırakın. Modern tarayıcılar artık dışa aktarma süitlerini desteklemese de, FREAK ve Logjam saldırıları ortadaki bir saldırganın tarayıcıları dışa aktarma sınıfı şifrelemeyi kullanarak tarayıcıları kandırmasına olanak tanıyor; İhracat şifreleri, güçlü şifreleme protokollerinin Amerika Birleşik Devletleri'nden ihraç edilmesini önleyen 1990'lara ait bir politika kalıntısıdır. Hiçbir modern müşteri ihracat süitlerine güvenmiyor ve onları etkisizleştirmenin dezavantajı yok.
  2. Konuşlandırın (Ephemeral) Eliptik Eğri Diffie-Hellman (ECDHE). Elliptic-Curve Diffie-Hellman (ECDH) anahtar değişimi bilinen tüm kriptanalitik saldırıları önler ve modern web tarayıcıları artık orijinal, sonlu alan Diffie-Hellman'ın üzerinde ECDHE'yi tercih eder. Standart Diffie-Hellman gruplarına saldırmak için kullandığımız ayrık log algoritmaları, önceden hesaplanmadan elde edilen avantajlardan güçlenmez ve tek tek sunucuların benzersiz eliptik eğriler oluşturması gerekmez.
  3. Güçlü ve Eşsiz Bir Diffie Hellman Grubu oluşturun . Birkaç sabit grup, milyonlarca sunucu tarafından kullanılır; bu da onları önceden hesaplama ve olası gizli dinleme için en uygun hedef haline getirir. Yöneticiler, her web sitesi veya sunucu için "güvenli" astarları kullanarak benzersiz, 2048 bit veya daha güçlü Diffie-Hellman grupları oluşturmalıdır.

Sunucumu yukarıdaki tavsiyelere göre güven altına almak için atmam gereken en iyi uygulama adımları nelerdir?


Yanıtlar:


82

Gönderen Bağlı makalede , bu açığa karşı kendinizi korumak için üç tavsiye edilen adımlar vardır. Prensipte bu adımlar SSL / TLS ile kullanabileceğiniz herhangi bir yazılım için geçerlidir, ancak burada söz konusu yazılım olduğundan dolayı Apache'ye (httpd) uygulamak için özel adımlar atılacak.

  1. İhracat Şifresi Paketlerini Devre Dışı Bırak

Aşağıda yapacağımız yapılandırma değişiklikleriyle ilgilenelim. 2. ( satırın !EXPORTsonuna yaklaşmak, SSLCipherSuiteihracat şifresi paketlerini nasıl devre dışı bırakacağımızdır)

  1. Dağıt (Ephemeral) Eliptik Eğri Diffie-Hellman (ECDHE)

Bunun için, Apache yapılandırma dosyalarında birkaç ayarlarını düzenlemek gerekir - yani SSLProtocol, SSLCipherSuite, SSLHonorCipherOrderbir "en iyi uygulamalar" kurulum olması. Aşağıdaki gibi bir şey yeterli olacaktır:

SSLProtocol             all -SSLv2 -SSLv3

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder     on

Not: hangi SSLCipherSuiteayarın kullanılacağıyla ilgili olarak, bu her zaman değişiyor ve en son önerilen yapılandırmayı kontrol etmek için bu gibi kaynaklara başvurmak iyi bir fikir .

3. Güçlü ve Eşsiz Diffie Hellman Grubu Oluşturun

Bunu yapmak için koşabilirsiniz

openssl dhparam -out dhparams.pem 2048.

Bunun, paramlar üretilirken sunucuya önemli bir yük getireceğini unutmayın - paramsları başka bir makinede üreterek ve scpbunları kullanım için söz konusu sunucuya transfer etmek için kullanarak veya benzerini kullanarak her zaman bu potansiyel sorunun üstesinden gelebilirsiniz .

dhparamsApache'de yeni oluşturulanları Apache Dokümanlarından kullanmak için :

Özel DH parametreleri oluşturmak için openssl dhparam komutunu kullanın. Alternatif olarak, aşağıdaki standart 1024 bitlik DH parametrelerini, RFC 2409, bölüm 6.2'den ilgili SSLCertificateFile dosyasına ekleyebilirsiniz :

(vurgu madeni)

bu daha sonra standart bir 1024 bit DH parametresi tarafından takip edilir. Bundan, özel olarak üretilen DH parametrelerinin söz konusu ilgili kişiye basit bir şekilde eklenebileceğini söyleyebiliriz SSLCertificateFile.

Bunu yapmak için aşağıdakine benzer bir şey çalıştırın:

cat /path/to/custom/dhparam >> /path/to/sslcertfile

Alternatif olarak, ilk olarak bağladığınız makalenin Apache alt bölümüne göre, sertifika dosyasının kendisini değiştirmemeyi tercih ederseniz, oluşturduğunuz özel dhparams dosyasını da belirleyebilirsiniz.

SSLOpenSSLConfCmd DHParameters "/path/to/dhparams.pem"

hangi Apache yapılandırmaları kendi SSL / TLS uygulamanızla ilişkiliyse - genellikle içinde conf.d/ssl.confya da conf.d/vhosts.confancak Apache'yi nasıl yapılandırdığınıza bağlı olarak değişecektir.

Bu bağlantıya göre , dikkat çekicidir

Apache 2.4.7'den önce DH parametresi her zaman 1024 bit olarak ayarlanmıştır ve kullanıcı tarafından yapılandırılamaz. Bu mod_ssl 2.4.7 sürümünde, Red Hat'in RHEL 6 Apache 2.2 dağıtımına httpd-2.2.15-32.el6 ile destek verdiği düzeltildi.

Debian Wheezy'de apache2'yi 2.2.22-13 + deb7u4 veya üstü sürümlere yükseltin ve 1.0.1e-2 + deb7u17'ye açın. Yukarıdaki SSLCipherSuite mükemmel çalışmıyor, bunun yerine bu blogu uyarınca aşağıdakileri kullanın :

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA

Dağıtımınıza bağlı olarak Apache sürümünüzün bu sürüm numaralarından sonra olup olmadığını kontrol etmelisiniz ve eğer değilse - mümkünse güncelleyin.

Yapılandırmanızı güncellemek için yukarıdaki adımları uyguladıktan ve değişiklikleri uygulamak için Apache hizmetini yeniden başlattıktan sonra, SSLLab'larda ve bu güvenlik açığına ilişkin makalede sınamaları çalıştırarak yapılandırmanın istendiğini kontrol etmelisiniz .


1
Params üreterek sunucuya yüklenen yüke gelince, onları her zaman başka bir makinede üretebilir ve dosyayı basitçe kopyalayabilir ve hatta kopyalayıp hedef sunucuya kopyalayabilirsiniz. Üretim sunucusunda paramlar üretmeye gerek yok.
Erathiel

2
Konfigürasyonunuzu değiştirdikten sonra, emin olmak için SSLLabs.com'da bir kontrol yapmak isteyebilirsiniz .
user2428118

2
Bu güvenlik açığını Apache / 2.2.22'deki (Ubuntu 12.04) düzeltmenin bir yolu var mı? Dhparams.pem'i document.crt dosyasına ekledim ama weakdh.org/sysadmin.html hala şikayet ediyor
tersmitten 20:15

2
@tersmitten Bu, bu tamamen ayrı bir soru.
Michael Hampton

3
Her zaman anahtar üretimini 'nice' komutu ile yapabilirsiniz. öyleyse, şöyle koyabilirsiniz: güzel 19 openssl dhparam -out dhparams.pem 2048. Bu daha uzun çalışacak, ancak yalnızca kullanılmamış cpu zamanını tüketecektir.
Znik

1

Winni Neessen'nin bir yamasını temel alan Apache / 2.2.22 için bir düzeltme yayımladım (Debian Wheezy, belki Ubuntu'da da kullanılabilir): https://flo.sh/debian-wheezy-apache2-logjam-fix/ - thx . geri bildiriminiz için.


3
Bu, bir çözümden çok bir kesmek. Yeni bir nginx'i apache'nize ters proxy olarak yerleştirmek çok daha kolay olacak ve biri 3. parti apache'ye güvenmeyecek.
oradaki adam,

6
Bu ikili dosyalara neden güvenelim?
21:15

2
İkili dosyalara güvenmek zorunda değilsiniz; Zaman ayırırsanız açıklanan adımları izleyerek apache2.2.x dosyasını kendiniz kolayca derleyebilirsiniz. Bu ayrıca, güvenliğinizi artıracaktır, çünkü kurulumunuzun benzersiz birincil anahtarları vardır.
Flo

İnsanların bir açık kaynak kodlu yazılımdaki bir sorunu çözmek için yamalardan şikayet etmemelerini öneririm.
Florian Heigl,

@FlorianHeigl Bu yorumdan ne yapacağımdan bile emin değilim ...
BE77Y

-7

Yukarıdaki 'saldırıların' karmaşık yoluna gitmek yerine, ana web sunucusu yazılımınız olarak nginx'e geçmeyi düşünün (yalnızca önbellekleme veya proxy değil). Belli ki eski apache motorlarından çok, güvenlik açısından güncel standartlara göre görünüyor. Nginx deposunu kullanarak, size apache'den daha kararlı bir web sunucusu-motoru sunar.

Tamamen değiştirdim. Bana TLS ile ilgili çok zaman alan bir problem çözme olanağı sağladı ve - konfigürasyonlarımız için - aynı zamanda çok fazla RAM boşalttı. Aslında, alıştığım httpd / apache konfigürasyonunun sayısız komplikasyonuna kıyasla nginx'in canlandırıcı bir şekilde basit ve kolay bir şekilde çalıştığını gördüm. Bir zevk meselesi olabilirdi, dönmeden önce httpd / apache yeniden yazma / yapılandırma / bakım konusunda oldukça akıcı hale gelmiştim ve olacağından daha kolaydı. Çevrimiçi olarak mevcut nginx config hakkında uygun son bilgiler var ve kullanıcı tabanı çok büyük, çok aktif ve destek dostu. https://news.netcraft.com/wp-content/uploads/2018/11/wpid-wss-top-1m-share.png


3
İhracat şifrelerine izin verecek şekilde ayarlanmış olan nginx, İhracat şifrelerine izin verecek şekilde Apache sunucusu olarak Logjam saldırısına karşı tam olarak savunmasız kalacaktır. Ayrıca, soru Apache'deki çözümleri soruyor.
ve 15nci CVn

2
Aslında, çözüm: ya kesinlikle daha yeni bir sürüme ihtiyaç duyduğunuz (örneğin Debian veya CentOS'ta olduğu gibi yalnızca desteklenen hata düzeltmeleri değil) yazılım için daha güncel paketler sağlayan bir dağıtıma geçin ya da kendiniz paketler oluşturun kaynaktan (zor değil) ve bunları paket yöneticisini kullanarak kurun ya da kaynak kodundan düz eski kurulumu yapın (ayrıca zor değil, ancak yönetimi biraz daha fazla zaman alır). "Y yazılımı içindeki X güvenlik açığını X'i nasıl azaltabilirim?" Diye soran bir soru için, "Y yazılımını Z yazılımıyla değiştir" diyen bir yanıt genellikle yararlı bir cevap değildir.
Bir CVn

1
Nginx için Apache bir yükseltme değil, yerine geçer. Destek vermek bir olasılıktır. Apache çözümüne çok fazla yatırım yaptıysanız, bunu tamamen atmak ve başka bir şeyle değiştirmek de çok fazla iş gerektiriyor. Ve bu soru hala Nginx değil Apache merkezli çözümler hakkında . Bu konuda tartışarak daha fazla zaman harcamayacağım; Cevapları gönderirken, soruyu sayfanın en üstünde sorulduğu gibi cevapladıklarından emin olun. İnsanları Apache'den Nginx'e geçmeye teşvik eden bir cevap göndermek istiyorsanız, elbette bunu yapın, ama Nginx'e izin veren bir soruya.
CVn

1
Yani bir yazılımı bilinen saldırılara karşı güvenli olacak şekilde yapılandırmak "karmaşık bir saldırı yolu" mu? Basit bir apache yapılandırmasıyla ssllabs.com'da A + 'yı alıyorum, sadece zamanınızı ayırmanız ve kullandığınız yazılımı nasıl düzgün bir şekilde yapılandıracağınızı anlamak için biraz araştırma yapmanız gerekiyor, burada
korsan

1
@Julius - Düşüşler muhtemelen sorulan soruya ilişkin cevabınızdaki değer eksikliğiyle ilgili olarak daha muhtemeldir, görünüşe göre gizli herhangi bir "gündem" insanının nginx ve apache'ye karşı sahip olabileceği gibi. Olduğu gibi, tercihim nedeniyle sadece nginx kullanıyorum - ama bu soruyu cevaplayan bendim. "Başka bir yazılıma geç", "nasıl düzeltilir (herhangi bir problem)" için kabul edilebilir bir cevap değildir. Bahsetmiyorum bile, asıl güvenlik açığı noktasını da tamamen kaçırdın - bu, diffell-cehennem anahtar değiş tokuşundaydı, apache değil (ya da nginx ya da sshd ya da ...)
BE77Y
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.