Blog

Java Log4j Zafiyeti İçin Tespit ve Tedbir Yöntemleri

Merhaba, bu makalenin konusu Dünya’yı kasıp kavuran etkisi ve yıkıcılığı uzun sürecek gibi görünen Log4j zafiyeti. Son bir kaç gündür gündemin birinci maddesi haline gelen zafiyet için sosyal medya ve diğer platformlardan onlarca paylaşım yapıldı ve yapılmaya devam ediyor. Ayrıca ardı ardına bir çok üretici zafiyetten etkilenen ürünleri için güncelleme ve saldırının şiddetini azaltmak için mitigate yöntemleri yayınlamakta. Bu makalede tüm bu paylaşımların bir derlemesini bulabilecek ve bu zafiyet için kendi sistemlerininiz üzerinde nasıl bir aksyion alabileceğiniz konusunda fikir sahibi olabileceksiniz.

Hadi başlayalım..

Zafiyet neden kaynaklanıyor?

Zafiyet, Apache’in geliştirdiği ve loglama için kullanılan Log4j kütüphanesinde bulunuyor.

Hangi sürümlerde zafiyet bulunmakta?

2.0-beta9 ile 2.14.1 ( dahil ) arasındaki sürümler bu zafiyetten etkileniyor.

Hangi sürüme yükseltmek gerek?

Apache Log4j 2.15.0

Sistemlerim zafiyetten etkilendi mi?

Öncelikle bu gün Hakan UZUNER ve Gökhan YÜCELER Hocam beraberindeki kıymetli ekipi Arda BÜYÜKKAYA ve OZAN ÜNAL hocalarımın düzenlediği “Log4j RCE (Log4Shell) Exploit Etme teknikleri ve Exploit Sistem Üzerinde Nasıl Yakalanır?” webcast’i kesinlikle izlemenizi tavsiye ediyorum.

SIEM üzerinde, aşağıdaki sorgular ile sisteminizi sorgulayın ( web sunucular )

Azure Sentinel

Webserver | where ((((c-useragent contains 'jndi') and (c-useragent contains 'ldap' or c-useragent contains 'rmi' or c-useragent contains 'ldaps' or c-useragent contains 'dns' or c-useragent contains 'lower' or c-useragent contains 'upper')) or ((c-uri contains 'jndi') and (c-uri contains 'ldap' or c-uri contains 'rmi' or c-uri contains 'ldaps' or c-uri contains 'dns' or c-uri contains 'lower' or c-uri contains 'upper'))) or ((post-body contains 'jndi') and (post-body contains 'ldap' or post-body contains 'rmi' or post-body contains 'ldaps' or post-body contains 'dns' or post-body contains 'lower' or post-body contains 'upper')))

IBM QRadar

SELECT UTF8(payload) from events where ((("user_agent" ilike '%jndi%') and ("user_agent" ilike '%ldap%' or "user_agent" ilike '%rmi%' or "user_agent" ilike '%ldaps%' or "user_agent" ilike '%dns%' or "user_agent" ilike '%lower%' or "user_agent" ilike '%upper%')) or (("URL" ilike '%jndi%') and ("URL" ilike '%ldap%' or "URL" ilike '%rmi%' or "URL" ilike '%ldaps%' or "URL" ilike '%dns%' or "URL" ilike '%lower%' or "URL" ilike '%upper%'))) or (("post-body" ilike '%jndi%') and ("post-body" ilike '%ldap%' or "post-body" ilike '%rmi%' or "post-body" ilike '%ldaps%' or "post-body" ilike '%dns%' or "post-body" ilike '%lower%' or "post-body" ilike '%upper%'))

Splunk

((((c-useragent="*jndi*") (c-useragent="*ldap*" OR c-useragent="*rmi*" OR c-useragent="*ldaps*" OR c-useragent="*dns*" OR c-useragent="*lower*" OR c-useragent="*upper*")) OR ((c-uri="*jndi*") (c-uri="*ldap*" OR c-uri="*rmi*" OR c-uri="*ldaps*" OR c-uri="*dns*" OR c-uri="*lower*" OR c-uri="*upper*"))) OR ((post-body="*jndi*") (post-body="*ldap*" OR post-body="*rmi*" OR post-body="*ldaps*" OR post-body="*dns*" OR post-body="*lower*" OR post-body="*upper*")))

Elastic Stack

(((user_agent.original:*jndi* AND user_agent.original:(*ldap* OR *rmi* OR *ldaps* OR *dns* OR *lower* OR *upper*)) OR (url.original:*jndi* AND url.original:(*ldap* OR *rmi* OR *ldaps* OR *dns* OR *lower* OR *upper*))) OR (post-body:*jndi* AND post-body:(*ldap* OR *rmi* OR *ldaps* OR *dns* OR *lower* OR *upper*)))

Regex

grep -P '^(?:.*(?:.*(?:.*(?:.*(?:.*(?=.*(?:.*.*jndi.*))(?=.*(?:.*.*ldap.*|.*.*rmi.*|.*.*ldaps.*|.*.*dns.*|.*.*lower.*|.*.*upper.*)))|.*(?:.*(?=.*(?:.*.*jndi.*))(?=.*(?:.*.*ldap.*|.*.*rmi.*|.*.*ldaps.*|.*.*dns.*|.*.*lower.*|.*.*upper.*)))))|.*(?:.*(?=.*(?:.*.*jndi.*))(?=.*(?:.*.*ldap.*|.*.*rmi.*|.*.*ldaps.*|.*.*dns.*|.*.*lower.*|.*.*upper.*)))))'

SIEM üzerinde, aşağıdaki sorgular ile sisteminizi sorgulayın ( Proxy sunucular )

Azure Sentinel

Proxy | where ((((c-useragent contains 'jndi') and (c-useragent contains 'ldap' or c-useragent contains 'rmi' or c-useragent contains 'ldaps' or c-useragent contains 'dns' or c-useragent contains 'lower' or c-useragent contains 'upper')) or ((c-uri contains 'jndi') and (c-uri contains 'ldap' or c-uri contains 'rmi' or c-uri contains 'ldaps' or c-uri contains 'dns' or c-uri contains 'lower' or c-uri contains 'upper'))) or ((post-body contains 'jndi') and (post-body contains 'ldap' or post-body contains 'rmi' or post-body contains 'ldaps' or post-body contains 'dns' or post-body contains 'lower' or post-body contains 'upper')))

IBM QRadar


SELECT UTF8(payload) from events where ((("user_agent" ilike '%jndi%') and ("user_agent" ilike '%ldap%' or "user_agent" ilike '%rmi%' or "user_agent" ilike '%ldaps%' or "user_agent" ilike '%dns%' or "user_agent" ilike '%lower%' or "user_agent" ilike '%upper%')) or (("URL" ilike '%jndi%') and ("URL" ilike '%ldap%' or "URL" ilike '%rmi%' or "URL" ilike '%ldaps%' or "URL" ilike '%dns%' or "URL" ilike '%lower%' or "URL" ilike '%upper%'))) or (("post-body" ilike '%jndi%') and ("post-body" ilike '%ldap%' or "post-body" ilike '%rmi%' or "post-body" ilike '%ldaps%' or "post-body" ilike '%dns%' or "post-body" ilike '%lower%' or "post-body" ilike '%upper%'))

Splunk

((((c-useragent="*jndi*") (c-useragent="*ldap*" OR c-useragent="*rmi*" OR c-useragent="*ldaps*" OR c-useragent="*dns*" OR c-useragent="*lower*" OR c-useragent="*upper*")) OR ((c-uri="*jndi*") (c-uri="*ldap*" OR c-uri="*rmi*" OR c-uri="*ldaps*" OR c-uri="*dns*" OR c-uri="*lower*" OR c-uri="*upper*"))) OR ((post-body="*jndi*") (post-body="*ldap*" OR post-body="*rmi*" OR post-body="*ldaps*" OR post-body="*dns*" OR post-body="*lower*" OR post-body="*upper*")))

Elastic Stack

(((user_agent.original:*jndi* AND user_agent.original:(*ldap* OR *rmi* OR *ldaps* OR *dns* OR *lower* OR *upper*)) OR (url.original:*jndi* AND url.original:(*ldap* OR *rmi* OR *ldaps* OR *dns* OR *lower* OR *upper*))) OR (post-body:*jndi* AND post-body:(*ldap* OR *rmi* OR *ldaps* OR *dns* OR *lower* OR *upper*)))

Regex

grep -P '^(?:.*(?:.*(?:.*(?:.*(?:.*(?=.*(?:.*.*jndi.*))(?=.*(?:.*.*ldap.*|.*.*rmi.*|.*.*ldaps.*|.*.*dns.*|.*.*lower.*|.*.*upper.*)))|.*(?:.*(?=.*(?:.*.*jndi.*))(?=.*(?:.*.*ldap.*|.*.*rmi.*|.*.*ldaps.*|.*.*dns.*|.*.*lower.*|.*.*upper.*)))))|.*(?:.*(?=.*(?:.*.*jndi.*))(?=.*(?:.*.*ldap.*|.*.*rmi.*|.*.*ldaps.*|.*.*dns.*|.*.*lower.*|.*.*upper.*)))))'

Linux tabanlı bilgisayarda log4j analizi ( sıkıştırılmamış dosyalar için )

sudo egrep -I -i -r '\$(\{|%7B)jndi:(ldap[s]?|rmi|dns|nis|iiop|corba|nds|http):/[^\n]+' /var/log

Linux tabanlı bilgisayarda log4j analizi ( sıkıştırılmış dosyalar için )

sudo find /var/log -name \*.gz -print0 | xargs -0 zgrep -E -i '\$(\{|%7B)jndi:(ldap[s]?|rmi|dns|nis|iiop|corba|nds|http):/[^\n]+'

Windows tabanlı bilgisayarda log4j analizi

gci 'C:\' -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path

open source suricata için alarm kuralları

https://rules.emergingthreatspro.com/open/suricata-5.0/rules/emerging-exploit.rules

YARA

https://github.com/Neo23x0/signature-base/blob/master/yara/expl_log4j_cve_2021_44228.yar

Üreticiler

VMware vCenter

https://kb.vmware.com/s/article/87081

Commvault

https://documentation.commvault.com/v11/essential/146231_security_vulnerability_and_reporting.html

Palo Alto

https://security.paloaltonetworks.com/CVE-2021-44228

Güncel vendor listesi

https://github.com/NCSC-NL/log4shell/blob/main/software/README.md#g

Aktif tarama ip listesi

https://raw.githubusercontent.com/CriticalPathSecurity/Public-Intelligence-Feeds/master/log4j.txt

Mitigate yöntemleri nelerdir?

  • log4j2.formatMsgNoLookups=true olarak ayarlayın
  • JndiLookup class’ın  classpath’den kaldırılması
  • Kubernetes için LOG4J_FORMAT_MSG_NO_LOOKUPS=”true”
  • Java Virtual Machine starup ayarlarının “Dlog4j2.formatMsgNoLookups=true” olarak set edilmesi

Web sayfaların’da zafiyet kontrolü yapmak

Yukarda bahsettiğim “Log4j RCE (Log4Shell) Exploit Etme teknikleri ve Exploit Sistem Üzerinde Nasıl Yakalanır?” web cast’inde Gökhan YÜCELER hocam ve değerli ekibinin verdiği bilgiler ışığında aşağıdaki adımları izleyerek web uygulamalarınızın etkilenip etkilenmediği hakkında fikir sahibi olabilirsiniz.

ilk önce “http://www.dnslog.cn/” sayfasına gidiyorsunuz. Bu sayfa online dns hizmeti veriyor.

Öncelikle “Get subDomain” butonuna tıklarayak bir dns adresi elde ediyorsunuz.

Son olarak sisteminlerinizi mümkün olduğu en kısa sürede güncellemenizi tavsiye ediyoruz.

Kaynaklar:

https://github.com/Neo23x0

https://raw.githubusercontent.com

socprime.com

Güncel bilgiler buradan yayınlanmaya devam edecektir..

İlgili Makaleler

4 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu