Aşırı Doz Güvenlik
Kritik Upgrade Vakası Analizi
Aşırı Doz Güvenlik
Kritik Upgrade Vakası Analizi

İÇİNDEKİLER
- Giriş ve Çalışmanın Amacı 1.1. Çalışmanın Kapsamı 1.2. Ana Amaçlar (Neden Sistem Sıkılaştırma Yapıyoruz?)
- Teorik Altyapı: Paket Yönetimi ve Depo Mimarisi 2.1. Sources.list Anatomisi 2.1.1. Laboratuvar Örnekleri (MS2 ve Kali) 2.2. EOL (End of Life) Durumu ve “Old-Releases” Çözümü 2.3. Depo Yönetimi: /etc/apt/sources.list.d/ 2.4. Ubuntu Backports Deposu Felsefesi
- Sistem Yükseltme ve Kernel Testleri 3.1. Metasploitable 2 ve Büyük Mimari Uyuşmazlık 3.2. Ubuntu 20.04 Yükseltme ve Kernel Testleri 3.3. Kali Linux Yükseltme ve Kernel Testleri
- Özet ve Değerlendirme 4.1. Metasploitable 2 ve Kernel Çıkmazı
1. Giriş ve Çalışmanın Amacı
Linux sıkılaştırma nedir, yenir mi? soruları ile başladığım serüvende, “Upgrade Nasıl Yapılmaz” ürününü teslim ettiğim aşamadan sonra bu çalışmayı yapmaya karar verdim. Kasıtlı olarak zafiyetli bırakılmış ya da normal şartlarda kullanılan eski nesil bir sistem nasıl güncellenir, sistem bu güncellemeye nasıl tepki verir ve ne gibi sonuçlar oluşur sorusuna cevap arıyorsanız bu rapor doğru bir yer.
1.1 Çalışmanın Kapsamı
Çalışma, mimarisi gereği eski kernel sürümüne sahip Metasploitable 2 makinesini, Kali Linux 2024.2 makinesini ve son olarak Ubuntu 20.04-beta makinesini içermektedir. Teorik olarak tanımlamalar ve makinelerin upgrade edilerek analizi yapılması ve diğer teknik detaylar bulunmaktadır.
1.2. Ana Amaçlar (Neden Sistem Sıkılaştırma Yapıyoruz?)
Neden yapıyoruz, sonuçtan önce amacı belirlemek gerekir. Bu noktada neden sistem sıkılaştırma yapıyoruz konusunda farklı maddeler halinde adım adım açıklayacağım.
1.2.1. Sistem Sıkılaştırma (Hardening):
Hardening, sistemdeki saldırı yüzeyini azaltmak için alınan önlemlerdir. Eski bir sistemde kernel versiyonu yükseltildiği zaman sistemin bu yeni mimariye nasıl tepki vereceği çok önemlidir. Biz de tam olarak doğru yükseltme, hatalar ve sistem tepkilerini inceleyeceğiz.
1.2.2. Zafiyet Analizi:
Kernel sürümünü güncellediğimiz zaman, bazı işletim sistemleri açığı güncelleme sonrası kapanabilir. Peki arka planda çalışan bir servisin veya uygulamanın zafiyeti kapanır mı? update ve upgrade işlemleri kapsamında bunun cevabı evet.
1.2.3. Ömrü Dolmuş (EOL) Sistemler:
Sistem, destek süresi dolduğu zaman güncelleme almayı bırakır ve o sürümde güncel program ve kütüphanelerin uyumunu da kaybeder
2. Teorik Altyapı: Paket Yönetimi ve Depo Mimarisi
İşletim sistemlerinin kendilerini nasıl güncel tuttuklarına dair adım adım analiz yapalım.
apt-get update: Komutun adı update, ama neyi güncelliyor. Bu komut sisteme hiçbir şey kurmaz veya güncellemez. Sadece sources.list dosyasına depo adreslerini girer ve en güncel paket listelerini indirir.
apt-get upgrade: Asıl işlem bu kısımda gerçekleşiyor. Sistemdeki güncel kataloğa bakar yani sources.list dosyasını inceler, burada yeni versiyon varsa bunu indirir ve kurar. Bu işlem biraz sakindir ve dikkat edilmelidir. Eğer güncelleme sistem çekirdeğini veya mimariyi değiştirecekse o işlemleri yapmaz ve devam eder.
apt-get dist-upgrade: Standart upgrade komutunun çekindiği sistem ve kernel güncellemelerini bu komut yapar. Eski paketleri siler ve yeni mimariyi kurmak için zorla işlemler yapar.
apt full-upgrade: Mantık olarak dist-upgrade ile aynı işleri yapar ancak modern APT mimarisinde bağımlılık konusunda daha agresif çalışır. Tek farkı bu, modern apt komutunun parçası olması.
2.1. Sources.list Anatomisi
Sistem sources.list dosyasında her satır bir kurala göre yazılır. deb [SUNUCU_ADRESİ/URL] [KOD_ADI] [KATEGORİLER]
● deb: İşletim sistemine “hazır derlenmiş paketler var, oradan çek” der. ● URL: Dosyaların fiziksel olarak indirileceği adrestir. ● Kod Adı: İşletim sisteminin sürüm adıdır.(Örn: jammy, bionic, focal). ● Kategoriler: Paketlerin özgür yazılım lisanslarına ve kime ait olduğuna göre ayrıldığı kısımdır.
● main (resmi destekli açık kaynak) ● restricted (kapalı kaynak donanım sürücüleri) ● universe (topluluk destekli yazılımlar) ● multiverse (telif hakkı kısıtlamalı yazılımlar) olarak sıralanır
2.1.1. Laboratuvar Örnekleri (MS2 ve Kali)
Örnek 1: Metasploitable 2 (Ubuntu 8.04 — Hardy): Metasploitable 2, eski bir sistem olduğu için desteği bitmiştir. Bu yüzden “archive.ubuntu.com” adresindeki dosyalar silindiği için sistemi “old-releases” adresine yönlendirmek gerekiyor. deb http://old-releases.ubuntu.com/ubuntu/ hardy main restricted universe multiverse
Örnek 2: Kali Linux: Kali Linux, sürekli destek alan sabit bir sistemdir. Bu yüzden depo adresi sabit şekilde kalır. deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware
Kali de ihtiyaca göre üç farklı depo dalı kullanılabilir: ● kali-rolling: Varsayılan ana depodur. ● kali-experimental: Geliştirme aşamasındaki en yeni araçların test edildiği daldır. ● kali-last-snapshot: Kritik görevler için sistemin hatasız son halinin olduğu stabil depodur.
2.2. EOL (End of Life) Durumu ve “Old-Releases” Çözümü
İşletim sisteminin destek ömrünü ifade eden terimdir. Bu durumda “apt update” yazıldığı zaman sistem dosyaları bulamaz ve hata verir. Bunun çözümü ise sources.list içindeki adresleri old-releases.ubuntu.com şeklinde değiştirebiliriz.
2.3. Depo Yönetimi: /etc/apt/sources.list.d/
Eski linux sistemlerinde harici kurulan uygulamaların depo adresleri de sources.list içerisinde tutulurdu. Bu kısımda hata olması durumunda bundan tüm sistem etkilenirdi. Bu yüzden buradaki harici depolar için “.d” mantığı yapıldı. Harici indirilen programlar, kendi depolarını artık bu adreste tutuyor.
2.4. Ubuntu Backports Deposu Felsefesi
Backports, eski işletim sisteminde yeni nesil programları çalıştırmak için kullanılan bir depodur. Yeni nesil araçları, eski sistemin kütüphaneleriyle uyumlu çalışacak şekilde yeniden derleyip uygun olan en yeni sürümü kurar. Bu depo adresini sources.list içerisine eklediğimizde, sistemin ayarlarını hiç bozmadan araçların daha güncel hallerini kullanabiliriz.
3. Sistem Yükseltme ve Kernel Testleri
Bu aşama, sistem yükseltmelerine dair test süreçlerini kapsamaktadır.
Peki sistemler neden güncellenir? Sistemin güncel olması, eski sistemde olan zafiyetlerin yamalanmış olması ve daha gelişmiş sistem mimarisi olması açısından çok önemlidir. Burada üç farklı Debian tabanlı mimarinin testlerini yapacağız.
Teste öncelikle zafiyetli ve resmi desteği bitmiş (End-of-Life) Ubuntu 8.04 varyantı Metasploitable 2 makinesi ile başlayacağız, burada sistem upgrade kısmı diğerlerine göre daha karmaşık ancak en karmaşık ve zorlayıcı olan kısım ise kernel yükseltme kısmı olacak.
Burada bulunan sorunlar için çok uzun zaman harcadım ve birçok kaynak taradım ancak script olmadan sistemin kendini yeni kernel sürümü ile başlatması sanıyorum pek mümkün değil. Bu yüzden script ile bu işlemi yapmayı tercih ettim.
ikinci olarak Ubuntu 20.04 LTS makinemiz bulunuyor. Burada eski sürüm bir ubuntu makinede paket çakışmaları çözülerek, sistem güncellemesi ve özel bir kernel yükseltmesi yapacağız.
Son olarak sürekli tek sürümde güncelleme alan Kali Linux makinesi bulunuyor. Eski bir imaj üzerinden sistem güncellemesi ve kernel yükseltmesi yapacağız.
3.1. Metasploitable 2 ve Büyük Mimari Uyuşmazlık
● uname -a
uname -a komutu ile sistemin mevcut bilgilerini kontrol edeceğiz test öncesi. Burada hedef sistemin metasploitable olduğu, üzerinde “32-bit (i686)” mimaride çalışan bir GNU/Linux işletim sistemi bulunduğu görülmüştür. Sistemdeki kernel sürümünün “2.6.24–16-server” olduğu ve bu çekirdeğin 10 Nisan 2008 tarihinde derlendiği görülüyor.

● cat /etc/apt/sources.list | grep -v “#”
Sistemin paket güncelleme ve yeni yazılım yükleme için bakacağı depoları güncelleme öncesi kontrol etmemiz gerekiyor desteği bitmiş eski sistemlerde. Bu depolar “/etc/apt/sources.list” dizininde duruyor. Mevcut sistemin desteği sonlandığı için buradaki depolar kullanılamaz halde, bu yüzden bu sources.list dosyasını düzenlememiz gerekiyor.

cat << EOF | sudo tee /etc/apt/sources.list deb http://old-releases.ubuntu.com/ubuntu/ hardy main restricted universe multiverse deb http://old-releases.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse deb http://old-releases.ubuntu.com/ubuntu/ hardy-security main restricted universe multiverse EOF
Bu kısımdaki paketlerin yazımının nasıl yapıldığından daha önce bahsetmiştim. Bu kısımda oluşturulan paket dizisini komut ile yazdırarak içerideki tüm veriyi siliyoruz ve sadece gönderdiklerimiz kalıyor. Dosya içeriği alttaki görsel formatında olmalıdır.
İlk satır, sistemin temel bileşenlerini, resmi destekli paketlerini ve topluluk tarafından geliştirilen genel araçları barındıran ana depodur.
ikinci satır, mevcut paketler için yayınlanmış, performans iyileştiren ve hataları çözen güncelleme kısmıdır.
Son satır ise sistemdeki güvenlik açıklarını kapatmak için yapılan güvenlik güncelleştirmelerini içeren kısım.
Bu şekilde sistemin desteği sonlansa bile eski paketlerin tutulduğu sunucu dizininden bu paketlere erişerek eski sistemler güncellenebilir hale geliyor.

● sudo apt-get update
Gerekli her şeyi ayarladığımız için şimdi update ile sistemdeki paketlerin bilgilerini güncel listeler ile senkronize edeceğiz ve mevcut sistem için kullanılabilecek en son sürümleri bu şekilde alacağız ve upgrade işlemine hazır hale geleceğiz.
W: Some index files failed to download, they have been ignored, or old ones used instead. W: You may want to run apt-get update to correct these problems
update işlemi sırasında üstteki şekilde bir hata alırsanız muhtemel çözüm yöntemi aşağıdaki kod olabilir. Burada sistem sunucudaki depolara erişemiyor.
Eğer sources.list yapılandırması doğruysa ve internet erişimi mevcutsa sorun DNS çözümleme hatasından kaynaklanıyor olabilir. Alt kısımdaki kodu deneyerek dns ayarlarınızı düzenleyebilir ve işlemi tekrar deneyebilirsiniz.
● echo “nameserver 8.8.8.8” > /etc/resolv.conf

update-initramfs: Generating /boot/initrd.img-2.6.24–32-server cp: cannot stat `/etc/udev/rules.d/60-persistent-storage.rules’: No such file or directory
Metasploitable 2 gibi desteği bitmiş ve üzerinde yoğun değişiklik yapılmış sistemde, upgrade işlemi sırasında sistem üzerinde karşılaşılan dizin hatasını önceden çözmek için alt kısımdaki 4 komutu girerek sistemde olmayan dosyaları ekleyebilirsiniz.
Upgrade sırasında çalışan “update-initramfs” aracı, sistemin açılışında donanımları tanıması için gereken sürücü ve kuralları bir araya getirir. Bu süreçte kullanılan scriptler, /etc/udev/rules.d/ dizinindeki dosyaları “kopyalamak” (cp) üzere programlanmıştır. Hedef dizinde de dosya olmadığı için sistem hata verir
● sudo touch /etc/udev/rules.d/60-persistent-storage.rules ● sudo touch /etc/udev/rules.d/61-persistent-storage-edd.rules ● sudo touch /etc/udev/rules.d/70-persistent-net.rules ● sudo touch /etc/udev/rules.d/70-persistent-cd.rules
Artık upgrade işlemi için hazırız. dist-upgrade ile oluşacak sorunlarda doğru işlemleri yapması ve tam sistem güncellemesi için kullanıyoruz. Güncelleme esnasında /etc/issue için yapılandırma dosyası sorularını “N” default olarak bırakıyoruz, ondan sonrakini de “N” ile geçiyoruz.
● sudo apt-get dist-upgrade



Sistem güncellemesi esnasında görülen bu iki kısımda sistemdeki OpenSSL tabanlı kriptografik anahtar zafiyetinin (CVE-2008–0166) otomatik çözüldüğünü görüyoruz.

Bu görselde bootloader yapılandırma için “install the package maintainer’s version” seçeneği seçildi. Burada yeni yüklenen çekirdek imajının önyükleme menüsüne kaydedilmesi için seçildi. Bu aşamada sistemde sorun oluşabildiği için “keep the local version” kısmı da tercih edilebilir ancak her sistem açılışında kernel versiyonu seçilebildiği için görseldeki tercih ile güncellemeye devam edeceğiz.

Burada ise samba servis dosyası için “keep the local version currently installed” seçeneğini seçiyoruz. Burada sistemdeki ağ paylaşım ayarlarının ve servise özgü ayarların korunması sağlandı.
● sudo reboot
Sistem güncellemesi bittikten sonra makineyi yeniden başlatıyoruz.

Sistemi yeniden başlattıktan sonra boot yükleme ekranına ESC tuşuna basıyoruz ve böylece GRUB menüsüne erişerek kernel sürümü seçebileceğimiz menüye geliyoruz. Bu şekilde görülüyorsa herhangi bir sorun yok demektir, “/boot/grub/menu.lst” Yapılandırması için “keep the local version” kısmı seçildiyse burada yeni yüklenen kernel sürümleri gözükmez. İlerideki adımlarda manuel ekleme kısmı da göstereceğiz. Burada eski çekirdek sürümü olan (2.6.24–16) seçilerek sisteme kolayca girilebilir, yeni çekirdek için yapılması gereken ayarlar bulunuyor. Biz yeni çekirdeği (2.6.24–32) seçerek devam edeceğiz.

● lvm vgscan ○ Sistemdeki tüm diskleri tarar ve LVM yapılandırması olan grupları tespit eder. Çıktıda “metasploitable” grubunun bulunduğu doğrulanmıştır.
● lvm vgchange -ay ○ Bu komut ile tespit edilen grupları ve mantıksal bölümleri aktif duruma getiriyoruz.
● exit
Görseldeki ekran, Linux çekirdeğinin işletim sistemini başlatmadan önce kullandığı geçici bir çalışma alanı olan initramfs kabuğudur.
Sistem çekirdeği yükseltildiği için yeni imaj, LVM yapısını otomatik olarak tanıyamadı.
Çekirdek kök dizini mount etmek için /dev/mapper/metasploitable-root dizinini aramış ancak LVM pasif olduğu için hata vererek işlem sonlanmıştır.
Yukarıdaki üç komut sırasıyla girilerek initramfs kabuğundan çıkılabilir. Burada herhangi bir sorun olması durumunda GRUB menüsüne erişilerek eski kernel sürümüne dönülebilir.

● ssh-keygen -R [MS2-ip-adresi]
Sisteme SSH bağlantısı ile bağlanıyorsanız, önceki upgrade kısmında hatırladığınız gibi SSH anahtarları yenilendiği için bağlantı durumu değiştirildi. Üstteki komuta kendi MS2 ip adresinizi girebilir ve kaynak makinede komutu girerek hedef MS2 makinesine SSH ile bağlanabilirsiniz. Bu komut, “~/.ssh/known_hosts” dosyasında kayıtlı olan eski ve geçersiz parmak izini siler.
● uname -a
Sisteme girdikten sonra tekrar sistem bilgisini kontrol ettiğimizde çekirdek sürümünün güncellendiğini görebiliyoruz.
Önceki çekirdek 2008 yılına ait 2.6.24–16 çekirdeğiyken güncelleme sonrasında 3 Aralık 2012 tarihine ait 2.6.24–32 çekirdek yaması güncellenmiştir. Bu, sisteme 4 yıllık ek güvenlik yaması, sürücü desteği ve iyileştirmelerin başarıyla entegre edildiğini kanıtlamaktadır.

● sudo nano /etc/initramfs-tools/initramfs.conf
“initramfs.conf” dosyası içerisinde yapılması gereken bazı ayarlar bulunuyor. Bu ayarlar, sistemin boot sürecindeki çalışması için çok önemli parametrelerdir.
● MODULES=most: Çekirdeğin ihtiyaç duyabileceği tüm dosya sistemi, disk ve kütüphane sürücülerini ön yükleme imajına dahil eder. Çekirdek güncellemeleri gibi durumda kullanılması önerilir.
● BUSYBOX=y: Sistemin açılışta çökmesi durumunda initramfs kabuğunun açılmasını sağlar.
● BOOT=local: İşletim sisteminin ana dosyalarının yerel bir diskte olduğunu belirtir.
Aşağıdaki kısımda bu yapılandırmaya ait tam bir görsel verilmiştir.

● sudo nano /etc/initramfs-tools/modules
Çekirdeğin açılışında disk donanımı tanıması ve LVM yapısını çözebilmesi için ihtiyaç duyduğu sürücülerin yüklenmesini garanti altına almak adına bu dosya manuel olarak düzenlenir. Aşağıda bulunan 6 ifadeyi üst kısımdaki bulunan komut ile dosya düzenlemeye giderek en alta ekleyebilirsiniz, örnek görsel aşağıda bulunmaktadır.
● mptspi ○ Sistemin fiziksel donanım ile konuşmasını sağlar.
● sd_mod ○ İşletim sistemine bağlı aygıtı bir depolama birimi (disk) olarak görmesini ve yönetmesini sağlar.
● scsi_transport_spi ○ SCSI veri iletimi için gerekli, düşük seviyeli taşıma protokollerini çekirdeğe tanıtır.
● dm-mod ○ LVM çalışması için kritik bileşen, disk bölümlerini sanal olarak haritalandırır.
● dm-mirror ○ Device mapper üzerinde disk aynalama özelliklerini destekler.
● dm-snapshot ○ LVM üzerinde anlık görüntü desteği sunar/
Kısaca ilk üç modül sistemin diski bulmasını sağlarken, son üç modül ise diskin üzerindeki LVM bölümlerini anlamasını sağlar.

● sudo update-initramfs -u -k 2.6.24–32-server modules dosyasına yazdığımız disk ve LVM sürücülerini aktif hale getirmek için kullanılır.
● sudo cp -v /boot/initrd.img-2.6.24–32-server /initrd.img-2.6.24–32-server Geçici dosya sistemi imajını, /boot dizininden alarak kök dizinine fiziksel olarak kopyalar.
● sudo cp -v /boot/vmlinuz-2.6.24–32-server /vmlinuz-2.6.24–32-server İşletim sisteminin asıl çekirdek dosyasını /boot dizininden alıp kök dizinine kopyalar.

● sudo nano /boot/grub/menu.lst Bu sistem dosyası, bootloader yapılandırma dosyasıdır. Bu kısımda default değişkeni ile işletim sisteminde başlatılacak olan çekirdek sırasını belirtebilirsiniz. Bu default olarak 0 dır. timeout değişkeni ise GRUB ekranında kullanıcı için seçim süresini belirtir.

Sistem yükseltmesi sırasında “keep the local version” seçeneğini seçtiyseniz, yeni çekirdeğe ait önyükleme kayıtları sisteme eklenmemiştir. Üst kısımdaki kod ile dosyaya girebilir ve alt kısımdaki kodu aşağıdaki görselde olduğu gibi en üste yapıştırabilirsiniz.
title Ubuntu 8.04, kernel 2.6.24–32-server root (hd0,0) kernel /vmlinuz-2.6.24–32-server root=/dev/mapper/metasploitable-root ro quiet splash initrd /initrd.img-2.6.24–32-server quiet
Burada title, GRUB menüsünde görünecek etiketi ifade eder, root (hd0,0) ise çekirdek ve önyükleme dosyalarının fiziksel konumunu belirtir. Kernel, ana çekirdek dosyasının yolunu belirtir, devamındaki parametre ise LVM üzerindeki tam yolunu çekirdeğe iletir. initrd kısmı, geçici dosya imajının yolunu gösterir, son olarak alttaki parametrede sistem açılışında logları gizleyerek temiz bir boot süreci sağlar.

● sudo nano /etc/initramfs-tools/scripts/local-top/lvm_force
Bu script, sistemin açılış aşamasında çalışarak, LVM disk bölümlerini otomatik olarak aktif hale getirir. Sistem her yeniden başlatıldığı zaman, kök dizin bağlanmadan hemen önce devreye girer ve pasif durumda olan LVM bölümlerini uyandırır. Böylece çekirdek işletim sistemini bulur ve boot süreci hatasız tamamlanır.
Peki neden script yazmak zorunda kaldık? Bu soruyu yazmamak için fazlaca kaynak taradım ancak denediğim sayısız yolda herhangi bir çözüm bulamadım. Sistem LVM bölümlerini aktif etmiyor, bu yüzden her seferinde initramfs kabuğunda manuel müdahale gerekiyordu.
initramfs-tools paketi, yükseltilen yeni çekirdeğin içine LVM yi otomatik başlatacak yönergeleri doğru bir şekilde oluşturamadı.
Alt kısımda bulunan betiği, öncelikle üst kısımdaki kodu kullanarak “lvm_force” dosyasını oluşturup içine girdikten sonra yapıştırın. Alt kısımdaki görselde olduğu gibi bir sonuç alınması gerekiyor.
!/bin/sh
PREREQ=”udev” prereqs() { echo “$PREREQ” } case $1 in prereqs) prereqs exit 0 ;; esac /sbin/lvm vgchange -ay
Bu kısımda PREREQ=“udev” ve prereqs() bloğu, initramfs için kalıp kodlardır. Sistemi betik çalışmadan önce udev servisinin (fiziksel donanım ve disk tanıma) ayağa kalkmasını bekler. “/sbin/lvm vgchange -ay” kısmı ise, bulunan diskteki LVM gruplarını aktif hale getirir.

● sudo chmod +x /etc/initramfs-tools/scripts/local-top/lvm_force ○ Oluşturulan metin dosyasına çalıştırma yetkisi için yazılır.
● sudo update-initramfs -u -k 2.6.24–32-server ○ Yazılan scripti ve eklenilen LVM bölümlerini yeni çekirdeğin önyükleme imajına ekler.
● sudo cp /boot/initrd.img-2.6.24–32-server /initrd.img-2.6.24–32-server ○ initrd imajını, /boot dizininden alarak kök dizine kopyalar. Daha önce menu.lst dosyasına GRUB bootloader için, dosyayı kök dizinde aramasını söylediğimiz için.
● sudo reboot ○ Şimdi yapılan tüm ayarlar sonrasında sistemi yeniden başlatıyoruz.

Sistemi yeniden başlattığınız zaman bu hatayı alıyorsanız, sebebi sistemin boot aşamasında LVM bölümlerini okuyamamasından kaynaklanıyor. Bunun için yazdığımız script tam olarak çalışmamış olabilir, bunun ana sebebi de sistem açılışında henüz sistem diski yapılandırmadan önce scriptin çok hızlı davranması, bu yüzden scripte daha geç çalışması için sleep komutu ekleyeceğiz.

Sistemi tekrar açıyoruz ve bootloader ekranında çekirdek olarak eski çekirdeği seçerek işleme kolayca devam ediyoruz.
● sudo nano /etc/initramfs-tools/scripts/local-top/lvm_force
Yazdığımız betiği açarak en alt satırın bir üstüne “sleep 10” yazıyoruz.

● sudo update-initramfs -u -k 2.6.24–32-server ● sudo cp /boot/initrd.img-2.6.24–32-server /initrd.img-2.6.24–32-server Yapılan son değişikliklerden sonra yazılan yeni scripti tekrar çekirdeğin imajına ekliyoruz, ardından bu oluşturulan imajı /boot dizinden alarak tekrar kök dizine kopyalıyoruz.
● sudo reboot Sistemi yeniden başlatabiliriz. Göreceğiniz üzere sistem artık hiçbir LVM hatası olmadan sorunsuz şekilde açılacaktır.
● uname -a Sistemi açtığımız zaman tekrar uname -a çıktısı ile sistem bilgisini kontrol ediyoruz, sistemin güncel çekirdek sürümüyle (2.6.24–32-server) stabil bir şekilde çalıştığını doğruluyor ve Metasploitable 2 testini burada sonlandırıyoruz.

3.2. Ubuntu 20.04 Yükseltme ve Kernel Testleri
● hostnamectl
“hostnamectl” komutu ile sistem bilgisini kontrol ediyoruz. İşletim sistemi “Ubuntu 20.04.6 LTS” yani uzun süreli destek olan ve kararlı bir sistem var elimizde. Sistemdeki çekirdek ise 28 Mart 2020 tarihli olan “Linux 5.4.0–21-generic” çekirdeğidir. Bu bilgiye “uname -a” komutu ile ulaşabilirsiniz.

● sudo nano /etc/update-manager/release-upgrades
Sistem yükseltme öncesi yapılandırma dosyası kontrol edilmiştir. Burada “Prompt=lts” parametresi kontrol edilebilir, sistem böylece ara sürümleri atlayıp sadece LTS sistemlerde yükseltme yapar.

● cat /etc/apt/sources.list
Sistemin güncelleme yapacağı depo analiz edildi. Ubuntu 20.04 LTS (Focal) sürümü için resmi destek bitmediğinden buradaki depolar aktif şekilde kullanılabilir, bu yüzden herhangi bir değişikliğe ihtiyaç yok. Burada yapılan güncelleme, focal sürümü içerisinde bir güncelleme yapacak ve özel bir durum olmadığı sürece mevcut sistem sürümü ile aynı isimde olmalı.

● sudo apt update Öncelikle sistemdeki paketlerin güncel listelerini depolardan çekerek yeniliyoruz.
● sudo apt dist-upgrade -y Ardından çekilen güncel listeye göre bu komut, paketleri en yeni sürümlerine yükseltir. Burada “dist” parametresi ile bağımlılıkları daha iyi kurabilir ve çakışan eski paketleri de sistemden kaldırabilir. Son kısımdaki -y parametresi işlem sırasında otomatik onay verir.
● sudo apt autoremove -y Güncelleme işlemi sonrasında sistemde kalan gereksiz kütüphane ve bağımlılık paketlerini temizler ve disk optimizasyonu sağlar.

● sudo apt clean Güncelleme sırasında indirilen geçici kurulum paketlerini önbellekten siler ve disk optimizasyonu sağlar.
● sudo reboot Tüm işlemler bittikten sonra sistemi yeniden başlatıyoruz.
● uname -a && hostnamectl Makineyi tekrar açtığımız zaman sistemin başarılı bir şekilde güncellendiğini görüyoruz. Önceki adımda 5.4.0–21 olan çekirdek sürümü, başarıyla 5.4.0–216-generic sürümüne yükselmiş.

Şimdi standart güncellemeyi yaptık ve çekirdek sürümünü ve sistemi yükselttik fakat LTS sürümü olmasından kaynaklı işletim sistemi sürümünde herhangi bir değişiklik olmadı, bu yüzden farklı bir yol ile buradaki işletim sistemi sürümünü bir sonraki kararlı sürüme yükselteceğiz.
● sudo apt install update-manager-core -y
İşletim sistemini bir üst LTS sürümüne (20.04 -> 22.04) taşıyabilmek için bu özel sürüm yükseltme aracına ihtiyacımız var. Buradaki komut, sürüm yükseltme işlemini yönetecek “do-release-upgrade” aracını sisteme kurar.

● sudo do-release-upgrade
Bu komut, işletim sistemini ana sürümden yani LTS den bir sonraki LTS sürüme yükseltmeyi sağlayan resmi bir araçtır. Komut arka planda tüm depoları yeni sürüme göre yapılandırır ve yükseltme işlemini yapar.

Yükseltme sırasında, sistem altyapısında değişiklik yapılacağı için onay istiyor. Devam etmek için “y” yazarak onaylayabilirsiniz.

Ubuntu 22.04 sürümüyle birlikte Firefox tarayıcısının artık klasik .deb formatında değil, daha güvenli bir yapı sunan Snap paketi formatı üzerinden olacağını belirtiyor. Bu işlem otomatik yapılacaktır.
● cat /etc/apt/sources.list | grep -v “#”
Sistemin yeni yükseltme ile beraber eski focal (20.04) kısımları yerine artık jammy (22.04) bölümleri gelmiş. Yani işletim sistemi sürümü için bir sonraki kararlı sürümün paketlerinin çekileceği yeni depo adresleri sources.list dosyasına yazdırılmış.

● uname -a && hostnamectl
Son olarak sistemi yeniden başlatıyoruz ve açıldıktan sonra test ettiğimizde herhangi bir sorun oluşmadığını, sistemin Ubuntu 22.04.5 LTS sürümüne yükseldiğini görüyoruz.
Bunun haricinde eski 5.4 serisi çekirdek, 22.04’ün altyapısı ile çok daha modern ve güvenli olan 5.15.0–177-generic sürümüne yükselmiş.
Bu uzun süren işletim sistemi yükseltme ve çekirdek yükseltme işlemlerini tamamen kusursuz bir şekilde başarıyla tamamlamış oluyoruz. Böylece Ubuntu sistemi üzerindeki testlerimizi de sonlandırmış oluyoruz.

3.3. Kali Linux Yükseltme ve Kernel Testleri
● uname -a
Testler için Kali Linux’un 2024.2 sürümü indirilmiş ve sanal ortama kurulmuştur. Sistem bilgileri kontrol edildiği zaman çekirdek sürümünün “Linux 6.6.15-amd64” olduğunu ve bu çekirdeğin derlenme tarihinin 17 Mayıs 2024 olduğunu görüyoruz.

● cat /etc/apt/sources.list
Sistemin güncelleme için kullanacağı depo adreslerini kontrol edelim. Kali linux sürekli güncelleme alan (Sürekli Dağıtım) bir sistemdir. Çekirdek saf linux çekirdeği değil kali linux için özelleştirilmiş bir çekirdektir.
sources.list dosyası içeriği alt kısımda belirtildiği gibi olmalıdır ve her daim aynıdır, herhangi bir değişiklik durumu yoktur. Sadece bazı durumlarda parametreler eklenebilir, bu 2.2.1 kısmında bahsedilmişti.
deb [http://http.kali.org/kali](http://http.kali.org/kali) kali-rolling main contrib non-free non-free-firmware

● sudo apt update
Sistemde update komutu yazarak işlemlere başlamak istedik fakat bir hata aldık. Bu hata dijital imza doğrulama hatasıdır. Sistem, Kali sunucularından gelen paketlerin orijinalliğini ve güvenilirliğini kanıtlayan “Açık Anahtar” bilgisine sahip değildir. Bu yüzden sistem doğrulayamadı ve kaynaktan veri indirmeyi reddetti. Çözüm için anahtarın sisteme manuel olarak tanıtılması gerekir.

Bu hatayı çözmek için 2 komut bulunuyor, aşağıdaki komutları sırası ile deneyerek test edebilirsiniz.
● wget -q -O — https://archive.kali.org/archive-key.gpg | sudo gpg — import Kali’nin resmi sitesinden anahtar dosyasını indiren komut budur.
● sudo apt-key adv — keyserver hkp://keyserver.ubuntu.com:80 — recv-keys ED65462EC8D5E4C5 Bu komut ise belirli bir anahtar parmak izini kullanarak, o anahtarın genel anahtar kütüphanesini bulup getirir.
● sudo apt update Hatayı çözdükten sonra update işlemini tekrar başlatıyoruz.
● sudo dpkg — configure -a Olası hataları önlemek için yarıda kesilmiş veya yapılandırması tamamlanmamış herhangi bir işlem varsa sıraya koyar ve hepsini bitirmeye zorlar.
● sudo apt install -f -o Dpkg::Options::=” — force-overwrite” -y Bu kısımda upgrade işlemi öncesi herhangi bir hata ile karşılaşmamak için önce ayarlar yapıyoruz. Bu üstteki ayar komutu girilmediği takdirde alt kısımdaki çakışma hatası oluşabiliyor. Görseldeki hata, Kali de güncelleme sırasında bir şeylerin “yarıda kaldığını” veya “çakıştığını” gösteriyor.
Üstteki komut ile, herhangi bir dosyada çakışma olması durumunda eski dosyanın üzerine zorla yaz ve kuruluma devam et komutudur.

● sudo apt full-upgrade -y -o Dpkg::Options::=” — force-overwrite”
Hatalar çözüldükten sonra bu komut girilebilir. Bu komut, sistemi en güncel sürüme taşır, yeni paketleri kurar ve gereksiz olanları siler. Olası çakışmaları da zorla üzerine yazarak önler.

Güncelleme esnasında karşımıza bir pencere geliyor. Sistem bileşeninde kritik değişiklik yapmadan önce onay istiyor. Sistemdeki en temel kütüphanelerin güncellendiğini ve arka plan servislerinin yeni sürüme geçmesi için yeniden başlatılması gerektiğini söylüyor. Bu kısıma YES diyerek devam ediyoruz.

Bu kısımda ise kali de bulunan PostgreSQL veritabanı yönetim sisteminin sürüm yükseltme uyarısıdır. 16 sürümünden 18 sürümüne yükseltileceğini bildirir. Bu kısmı da YES diyerek devam ediyoruz.
● sudo update-initramfs -u Linux çekirdeği yüklenmeden önce, sistemin ihtiyaç duyduğu sürücüleri ve modülleri geçici bir dosya sistemine depolar. Çekirdek güncellemelerinden sonra bu geçici sistemin yeni sürücülerle senkronize edilmesi için bu komut kullanılır.
● sudo update-grub GRUB yapılandırmasını yeniler. Yeni kurulan kernel’in başlangıç listesine eklenmesi için kritik bir işlemdir.
● sudo apt autoremove -y Güncelleme ve yükseltme işlemleri sonrasında sistemde kalan gereksiz paketleri temizler.
● sudo reboot Yapılan tüm işlemler sonrasında sistemi yeniden başlatarak test edeceğiz.

Sistemi yeniden başlattıktan sonra GRUB önyükleyici sekmesinde, çekirdek sürümlerini yönetebilmek için alt kısımdaki “Advanced options for Kali GNU/Linux” kısmına geliyoruz ve enter a tıklıyoruz.

Burada görüldüğü gibi sistemde yeni çekirdek sürümünün başarılı bir şekilde kurulu olduğu ve aktif olduğunu görüyoruz. Herhangi bir değişiklik yapmadan devam ediyoruz.

Sistemi ilk açtığınızda eğer VMware üzerindeki eski donanım yapılandırmasından kaynaklı olarak fare imleci gözükmeyebilir. Bu tür donanım uyumluluk problemlerini gidermek için sanal makine kapatılarak, “Manage > Change Hardware Compatibility” kısmından uyumluluk sürümünü güncel versiyona yükseltebilirsiniz.
● uname -a
Sistemin yeniden başlatılmasının ardından sistem bilgilerini kontrol edelim. Sistem, önceki 6.6.15 sürümünden, daha güncel olan ve 5 Mayıs 2026 tarihinde derlenen 6.19.14+kali-amd64 sürümüne başarıyla yükseltilmiştir.

4. Özet ve Değerlendirme
Bu çalışmada, üç farklı Linux mimarisi üzerinde sistem yükseltme süreçlerini inceledik. Desteği bitmiş sistemlerden güncel LTS sürümlerine ve sürekli güncellenen (rolling release) yapılara kadar çoğu alanda gerçekleştirdiğimiz testler ile sistem güncelliğinin kritik rolünü görmüş olduk. Yapılan işlemle, sistemlerin sadece yeni özellikler kazanmakla kalmayıp, mevcut güvenlik zafiyetlerini de otomatik olarak yamalayabildiğini gözlemledik. Tabii süreç boyunca karşılaşılan, erişim engelleri, çakışmalar ve bağımlılık sorunu gibi birçok hatayı çözerek tüm sistemleri kusursuz şekilde yeniledik.
4.1. Metasploitable 2 ve Kernel Çıkmazı
Metasploitable 2 üzerindeki kernel süreci, en uzun süren süreç oldu. Özellikle LVM yapısının yeni kernel tarafından başlangıçta otomatik olarak tanınmaması, sistemin boot aşamasında takılmasına neden olmuştur. Bu noktada, önyükleme sırasında disk bölümlerini aktif hale getirecek özel bir script yardımı olmadan sistemin yeni çekirdek ile başlatılması neredeyse imkansızdı. Bu sıkıntıyı çözmek için sayısız kaynak taraması ve sayısız test süreci sonrasında farklı bir yol bulamayarak script ile çözüme devam etmeye karar verdim.

“Zaman, kendi hızına yetişemeyen hiçbir sistemi affetmez”
Vakit ayırıp incelediğiniz için teşekkür ederim.
Written by Bedirhan ihtiyar
메타데이터
- post_id
- ae4bbddffc70
- slug
- aşırı-doz-güvenlik-ae4bbddffc70
- url
- https://medium.com/@AceGladd/a%C5%9F%C4%B1r%C4%B1-doz-g%C3%BCvenlik-ae4bbddffc70
- canonical_url
- https://medium.com/@AceGladd/a%C5%9F%C4%B1r%C4%B1-doz-g%C3%BCvenlik-ae4bbddffc70
- author_url
- https://medium.com/@AceGladd
- status
- ok
- fetched_at
- 2026-07-21 17:40:28