KeePass CVE-2023-32784 Nedir ?

a3b2jeo.png

logo.png

Görsel
:siberatay_em:


KeePass CVE-2023-32784 Nedir ?
Mayıs ayında, KeePass'i etkileyen yeni bir güvenlik açığı olan CVE-2023-32784 keşfedildi. KeePass, Windows, Mac veya Linux üzerinde çalışabilen popüler bir açık kaynaklı şifre yöneticisidir. Bu güvenlik açığı, çalışan işlemin belleğinden açık metin olarak anahtarın çıkarılmasına izin verir. Anahtar, saldırganın tüm saklanan kimlik bilgilerine erişmesine olanak tanır.


Bu güvenlik açığını düzeltmek için KeePass 2.54'e güncelleme yapmanızı kesinlikle öneriyoruz.

Bu yazımızda, yeni güvenlik açığı CVE-2023-32784'ü, nasıl çalıştığını ve saldırganın sistemize tam erişim kazandığında ve kimlik bilgilerinizi çalmak için gelişmiş teknikler uyguladığında bu tür bir saldırıyı nasıl tespit edeceğinizi açıklıyoruz.

Linux Belleğinde Kimlik Bilgileri
Linux'teki kimlik bilgilerinden bahsettiğimizde genellikle /etc/shadow dosyasını düşünürüz, ancak şifrelerin saklanabileceği tek yer bu değildir. Birçok işlem aynı zamanda kimlik bilgilerini bellekte saklar ve kötü amaçlı araçlar bunları çıkarmaya çalışır. Örneğin, aşağıda açıklanan proc dizini, bu tür bir saldırı için popüler bir vektördür.

Linux Kernel Belgesi'nden:

"/proc dizini (diğer şeylerin yanı sıra) sistemde çalışan her işlem için birer tane bulundurur ve işlem kimliği (PID) adını alır."

MITRE, düşmanların kimlik bilgilerini proc dosya sistemi üzerinden toplayabileceğini OS Kimlik Bilgisi Yakalama olarak tanımladı:
Proc Dosya Sistemi T1003.007.


2tvb2gm.gif


KeePass CVE-2023-32784 Nedir?
CVE-2023-32784, bellek dökümüyle açık metin anahtarın kurtarılmasına olanak tanır. Bellek dökümü, bir KeePass işlem dökümü, takas dosyası (pagefile.sys), hazırlık dosyası (hiberfil.sys) veya tüm sistem belleği dökümü olabilir.

KeePass 2.X, şifre girişi için özel olarak geliştirilmiş bir metin kutusu olan SecureTextBoxEx'i kullanır. Bu CVE'de sömürülen hata, her karakter yazıldığında bellekte artakalan bir dize oluşturulmasıdır. .NET'in çalışma şekli nedeniyle bir kez oluşturulduğunda ondan kurtulmak neredeyse imkansızdır. Örneğin, "Şifre" yazıldığında şu artakalan diziler oluşur: •a, ••s, •••s, ••••w, •••••o, ••••••r, •••••••d. İlk karakter kurtarılamaz.
NOT : Senaryoyu yeniden üretmek için 18.04.1-Ubuntu işletim sistemi kullanıyoruz ve Linux için KeePass 2.38 sürümünü kullanıyoruz. Bu Kanıt Konsepti (PoC), aynı zamanda orijinal PoC'un bir parçası olan bu Github depolarına dayanmaktadır.
Kullandığımız Kanıt Konsepti (PoC), KeePass gizli anahtarını çıkarmak için aşağıdaki adımları izler:

İlk olarak, tüm /proc/<pid>/cmdline dosyalarını tarar ve anahtar kelime "KeePass" içerenlerin pid'lerini saklar.
Ardından,
/proc/<pid>/maps içinde doğrudan bir kütüple ilişkilendirilmemiş bellek haritalarının adreslerini alır.
Son olarak, /proc/<pid>/mem'i kullanarak tüm bu haritaların belleğini bir tampona saklar. Belleği analiz ederek kullanıcının ana şifresini girdiği sırada kalan dizeleri bulmaya çalışır; bu dizeler, sırayla •a, ••s, •••s gibi görünen dizelerdir.

125f6331ac7c517d2.png


Yukarıdaki resimde gördüğümüz gibi, anahtarın ilk karakteri olmadan açığa çıkarılmıştır.

KeePass CVE-2023-32784'ü Nasıl Algılarız?
Bu tür bir saldırıyı algılamak için /proc klasörüne bilinmeyen bir işlem tarafından erişimin izlenebilir olması gerekmelidir. Bu bir uyarıyı tetikleyecektir ve daha fazla inceleme yapabiliriz.

Eğer bu durumu Falco ile tespit etmeye çalışırsak, CNCF altında bulunan açık kaynaklı bir proje olan Falco, bulut tabanlı ortamlarda olağandışı aktivitelerin gerçek zamanlı tespitini sağlar. Bu senaryoda, "Çevresel değişkeni
/proc dosyalarından oku" kuralını ayarlamamız veya yeni bir kural oluşturmamız gerekmektedir.

Bu kuralı doğru şekilde tetiklemek için, /proc/<pid>/cmdline, /proc/<pid>/maps veya /proc/<pid>/mem dosyalarının okunmasını yakalamak için koşulu değiştirmemiz gerekmektedir, çünkü bu dosyalar, KeePass ana şifresini elde etmek için PoC'da kullanılır.
Kod:
- rule: Dump memory detection
  desc: An attempt to read process environment variables from /proc files
  condition: >
    open_read and container and (fd.name glob "/proc/*/mem" or fd.name glob "/proc/*/maps")
  output: >
    Detected process memory dump to search for credentials (proc.name=%proc.name proc.pname=%proc.pname fd.name=%fd.name container=%container.info evt.type=%evt.type evt.arg.request=%evt.arg.request proc.pid=%proc.pid proc.cwd=%proc.cwd proc.ppid=%proc.ppid proc.cmdline=%proc.cmdline proc.pcmdline=%proc.pcmdline)

Bu yeni kural ile CVE-2023-32784'ün sömürüsünü algılayabiliriz.
174ba992b763305bc.png



Uyarı, tehdidi daha fazla incelemek için gereken tüm bilgileri içeriyor.

Kod:
10:47:47.232147057: Warning Detected process memory dump to search for credentials (proc.name=dump proc.pname=sudo fd.name=/proc/2859/mem container=host (id=host) evt.type=openat evt.arg.request=<NA> proc.pid=2916 proc.cwd=/home/kpdemo/CVE-2023-32784-keepass-linux/ proc.ppid=2915 proc.cmdline=dump proc.pcmdline=sudo ./dump gparent=bash ggparent=gnome-terminal- gggparent=systemd proc.sid=2802 proc.exepath=/home/kpdemo/CVE-2023-32784-keepass-linux/dump user.uid=0 user.loginuid=1000 user.loginname=kpdemo user.name=root group.gid=0 group.name=root container.id=host container.name=host image=<NA>)

Sömürüde belirtildiği gibi, saldırganın makinenizde yeterli izinlere ve yeteneklere sahipse, saldırgan herhangi bir kötü amaçlı eylemi gerçekleştirebilir. Ancak, bu kural, kimlik bilgilerimizin ihlal edilip edilmediğini anlamamıza ve buna göre hareket etmemize yardımcı olabilir.

Bellek Dökümü İçin Daha Fazla Araç
Bu tür bir teknik hakkında biraz daha araştırma yaparsak, benzer bir işlemi gerçekleştiren diğer araçların olduğunu görürüz. Hadi birkaç örneğe ve bunları aynı şekilde nasıl algılayabileceğimize bir göz atalım.

Mimipenguin
Mimipenguin 2.0, mevcut Linux masaüstü kullanıcısının giriş şifresini dökmek için kullanılan bir araçtır. Popüler Windows kimlik bilgisi çalma aracı mimikatz'ın fikri temel alınarak uyarlanmıştır.


129c4ae561d0c5972.png


Bu araç, KeePass Kanıt Konsepti ile benzer bir şey yapmaya çalışır ancak bu durumda anahtarı bulamaz (çünkü CVE uygulanmamıştır). Bununla birlikte, sistem kimlik bilgilerini elde edebilir. Yukarıdaki resimde, her iki uyarıyı da görebiliriz; ilk olanı, /proc/<pid>/mem dosyasına erişimi algıladığı yerdir.
Kod:
10:56:59.508184318: Warning Detected process memory dump to search for credentials (proc.name=python proc.pname=sudo fd.name=/proc/1114/mem container=host (id=host) evt.type=openat evt.arg.request=<NA> proc.pid=7194 proc.cwd=/home/kpdemo/mimipenguin/ proc.ppid=7193 proc.cmdline=python mimipenguin.py proc.pcmdline=sudo python mimipenguin.py gparent=bash ggparent=gnome-terminal- gggparent=systemd proc.sid=2802 proc.exepath=/usr/bin/python user.uid=0 user.loginuid=1000 user.loginname=kpdemo user.name=root group.gid=0 group.name=root container.id=host container.name=host image=<NA>)

İkincisi, kullanıcının şifresini çıkardığı /etc/shadow dosyasına erişim kazandığı yerdir.

Kod:
10:57:52.447428441: Warning Sensitive file opened for reading by non-trusted program (user=root user_loginuid=1000 program=python command=python mimipenguin.py pid=7194 file=/etc/shadow parent=sudo gparent=bash ggparent=gnome-terminal- gggparent=systemd container_id=host image=<NA>)

LaZagne

LaZagne projesi, yerel bir bilgisayarda saklanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır. Bu durumda, sadece belleğe odaklanmakla kalmaz, aynı zamanda farklı teknikleri (açık metin, API, özel algoritmalar, veritabanları vb.) kullanarak kimlik bilgilerini arar.
17aae3137cd18d8ac.png


Bu örnekte, yine erişimi algılayan uyarıyı ve aracın kullanıcı şifresini ve kaydettiğimiz KeePass veritabanını bulduğunu gösteren bilgileri görüyoruz.


Kod:
11:14:02.074516511: Warning Detected process memory dump to search for credentials (proc.name=python proc.pname=sudo fd.name=/proc/1114/maps container=host (id=host) evt.type=openat evt.arg.request=<NA> proc.pid=7253 proc.cwd=/home/kpdemo/LaZagne/Linux/ proc.ppid=7252 proc.cmdline=python laZagne.py all proc.pcmdline=sudo python laZagne.py all gparent=bash ggparent=gnome-terminal- gggparent=systemd proc.sid=2802 proc.exepath=/usr/bin/python user.uid=0 user.loginuid=1000 user.loginname=kpdemo user.name=root group.gid=0 group.name=root container.id=host container.name=host image=<NA>)


Öğrenilen Ders
Kimlik bilgilerini toplamak, saldırganlar tarafından kullanılan çok yaygın bir tekniktir. Bu tür eylemleri tespit etmek ve bunların yatay hareket etmelerini veya diğer hizmetleri etkilemelerini önlemek için gerekli olan tüm araçlara sahip olmak gereklidir.

Falco, erişimi izlememize ve herhangi bir kötü niyetli davranışı tespit etmemize olanak tanıyan son bir güvenlik katmanı sağlar.


Son olarak, yeni sürüm olan KeePass 2.54'e güncelleme yapmanızı kesinlikle öneriyoruz.
Konu Kaynaklarım :


a3b2jeo.png
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.