Linux Sistemlerde Persistence Noktaları

Linux sistemlerinde kalıcılık (persistence), saldırganların bir sistemi ele geçirdikten sonra erişimlerini sürdürebilmek için kullandıkları yöntemleri ifade eder. Bu teknikler, sistem yeniden başlatılsa veya kullanıcı parolaları değiştirilse bile saldırganların erişimini devam ettirmesine olanak tanır. Bu yazıda, yaygın olarak kullanılan bazı kalıcılık tekniklerini ve bunlara karşı alınabilecek önlemleri ele alacağız.

1. Kullanıcı Hesabı Oluşturma ve Manipülasyonu

Saldırganlar, sistemde yeni bir kullanıcı hesabı oluşturarak kalıcılık sağlayabilirler. Özellikle yüksek yetkilere sahip bir kullanıcı oluşturulduğunda, saldırgan sistem üzerinde geniş kontrol sahibi olabilir. Örneğin:

sudo useradd -m -s /bin/bash yeni_kullanici

sudo passwd yeni_kullanici

sudo usermod -aG sudo yeni_kullanici

Bu komutlar, yeni_kullanici adında bir kullanıcı oluşturur, ona bir parola atar ve sudo yetkileri verir.

Bu durumu tespit edebilmek için

  • /etc/passwd ve /etc/shadow
    Sistemdeki kullanıcı hesaplarını içerdiğinden, beklenmeyen veya yetkisiz kullanıcı eklemelerinin olup olmadığını düzenli olarak kontrol edin.
  • Home dizinleri (~/)
    Özellikle kullanıcıların ev dizinlerindeki saklı dosya ve dizinlerde (örneğin, ~/.ssh, ~/.bashrc, ~/.bash_profile) saldırganların eklediği komutlar veya izinler incelenmelidir.
  • etc/group
    Yetkisiz sudo veya benzeri gruplara eklemeler yapılıp yapılmadığını kontrol edin.

Kontrol edilerek durumun yaşanıp yaşanmadığı analizi sağlanabilir

2. SSH Ayarları ve Authorized Keys

SSH, genel anahtar tabanlı kimlik doğrulamasını destekler. Kullanıcı, bir genel/özel anahtar çifti oluşturur ve ardından genel anahtarını, bağlanmak istediği uzak sistemlerdeki home dizinlerindeki .ssh/authorized_keys dosyasına yerleştirir. Kullanıcı giriş yapmaya çalıştığında, uzak sunucu authorized_keys dosyasındaki genel anahtarı kullanarak kullanıcı için şifreler. Bu yalnızca özel anahtar ile çözebilirler, ki bu anahtar kullanıcı tarafından ana makinesinde güvenli bir depolama alanında tutulur. Eğer kullanıcı çözebiliyorsa, bu, özel anahtara sahip olduklarını ve uzak sistemin onlara giriş yapma izni verdiğini gösterir.
Saldırıdan sonra, saldırganların sistemdeki geçerli kullanıcıların authorized_keys dosyalarına kendi genel anahtarlarını eklemeye çalışan birçok scripti vardır. Eğer saldırgan yönetici erişimi elde ederse, /root/.ssh/authorized_keys dosyasına anahtar eklemek ideal olur, çünkü bu durumda saldırgan ne zaman isterse root erişimi elde edebilir. Ancak herhangi bir kullanıcı da yeterlidir.
Dikkat edilmesi gereken nokta, ele geçirilen kullanıcı hesabının geçerli bir shell (örneğin “/bin/bash”) sahip olması gerektiğidir; “noshell” hala hesabı engeller. Ancak, /etc/shadow girdisinin geçerli bir şifre hash içermesi gerekmez. Çoğu sistemde, genel anahtar kimlik doğrulaması şifre kimlik doğrulamasını geçersiz kılar.

Saldırganlar, mevcut bir kullanıcının ~/.ssh/authorized_keys dosyasına kendi SSH anahtarlarını ekleyerek sisteme parola girmeden erişim sağlayabilirler:

echo “saldirganın-ssh-anahtarı” >> ~/.ssh/authorized_keys

Bu durumun yaşanıp yaşanmadığını tespit edebilmek adına;

  • ~/.ssh/authorized_keys
    Meşru kullanıcılar için tanınmamış SSH anahtarları eklenmiş mi kontrol edin. Herhangi bir izinsiz giriş denemesi, sisteme uzaktan erişimde kalıcılık sağlayabilir.
  • SSH Konfigürasyon Dosyaları
    /etc/ssh/sshd_config gibi dosyalar üzerinden olağan dışı izinler veya ayarlamalar olup olmadığını inceleyin.

Kontrolü sağlanabilir.

3. Zamanlanmış Görevler (Cron İşleri)

Linux’ta cron hizmeti, belirli zamanlarda komutların çalıştırılmasını sağlar. Zamanlanmış görevler kalıcı kötü amaçlı yazılımları başlatmak için kullanılabilir. Bakılacak birkaç yer vardır çünkü Linux sistemleri paralel olarak birden fazla görev zamanlama sistemi çalıştırır. Yine, saldırganlar zamanlanmış görevleri doğrudan oluşturmaktansa, meşru zamanlanmış görevler tarafından çağrılan scriptleri değiştirebilirler.

“Windows’ta olduğu gibi, Linux’ta zamanlanmış görevler, saldırganların kötü amaçlı yazılımlarını başlatmak ve bunların sürekli çalışmasını sağlamak için popüler bir mekanizmadır. Ancak Linux’ta birden fazla görev zamanlama mekanizması bulunmaktadır, bu da potansiyel olarak kötü niyetli işler için kontrol etmeniz gereken birçok yapılandırma dosyasının olduğu anlamına gelir.
Saldırganlar, crontab dosyasına kötü niyetli komutlar ekleyerek kalıcılık sağlayabilirler:

(crontab -l; echo “@reboot /kötü/niyetli/komut”) | crontab –

Bu komut, sistem her yeniden başlatıldığında belirtilen komutun çalıştırılmasını sağlar.

  • Kullanıcı Crontab Dosyaları
    Her kullanıcının crontab -l komutu ile çıkışını kontrol edin. Özellikle sistem başlangıcında (@reboot) çalışan tanım dışı komutlar dikkat çekicidir.
  • Sistem Genelindeki Cron Dizini
    /etc/crontab, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly ve /etc/cron.d dizinlerinin içeriklerini inceleyin.
  • “/etc/cron*”, “/var/spool/cron/crontabs”, “/var/spool/cron/atjobs”, “/etc/anacron” dizinleri kontrol edilmelidir.
  • /etc/cron.hourly/ – Saatlik çalışan sistem cron işleri.
  • /etc/cron.daily/ – Günlük çalışan sistem cron işleri.
  • /etc/cron.weekly/ – Haftalık çalışan sistem cron işleri.
  • /etc/cron.monthly/ – Aylık çalışan sistem cron işleri.
  • /etc/cron.d/ – Ek özel sistem cron işleri (manuel eklenen yapılandırmalar).
  • Kullanıcı Seviyeli Cron İşleri: Sistem genelindeki cron işlerini inceledikten sonra, kullanıcılar tarafından ayarlanmış kullanıcı seviyeli cron işlerine de bakabiliriz. Bu işler, her kullanıcının kendi yapılandırma dosyasında tanımlanır ve sistem genelindeki cron işlerinden bağımsız olarak yönetilir. Bu işleri incelemek için /var/spool/cron/crontabs/ dizinine gidebiliriz. Cron kullanma izni olan her kullanıcının bu dizinde, kendi kullanıcı adıyla (örneğin /var/spool/cron/crontabs/bob) bir dosyası bulunur.

Örnek Crontab incelenmesi

“*/5 * * * * /tmp/.ICEd-unix/.src.sh”
İlk beş alan, görevin hangi dakikada, saatte, ayın hangi gününde, hangi ayda ve haftanın hangi gününde çalıştırılacağını belirtir. Burada zamanlanmış görev her 5 dakikada bir, her saatte ve her gün çalışacak.
Sorun şu ki, işler o kadar basit olmayabilir. Örneğin, sistem yöneticisi tarafından oluşturulmuş yasal bir görev her gece bir Shell script çalıştırabilir. Saldırgan, yasal scripti değiştirebilir ve malware’lerini başlatmak için betikte küçük bir kod parçasını gizleyebilir.

“Yasal zamanlanmış görevlerin bile kodlarını ve yapılandırma dosyalarını kontrol etmek, bunların bir saldırgan tarafından ele geçirilip geçirilmediğinden emin olmak faydalıdır. Yeni değiştirilmiş dosyaları aramak burada işimizi kolaylaştıracaktır. Belki de, orijinal dosyaların bir kopyasına sahipsinizdir ve bu kopyayı, ele geçirilmiş sistemde bulunan görevlerle karşılaştırabilirsiniz.

Örnek Başka bir Cron Girişi

10 05 * * * /home/bob/backup_tmp.sh

Bu cron zamanlaması, çalıştırılacak komutun önünde beş alandan oluşur:

  1. Dakika (10): İlk alan, komutun çalıştırılacağı dakikayı belirtir. Bu örnekte 10 kullanılmış, yani komut saatin 10. dakikasında çalışacak.
  2. Saat (05): İkinci alan, komutun çalıştırılacağı saati gösterir. 05 yazıldığı için komut sabah 05:10’da (5:10 AM) çalışacak.
  3. Ayın Günü (*): Üçüncü alan, komutun ayın hangi günü çalıştırılacağını belirler. Burada * (joker karakter) kullanılmış, yani komut ayın her günü çalışacak. Belirli bir gün için 1-31 arası değer yazılabilir (örneğin, 15 ayın 15’inde çalıştırır).
  4. Ay (*): Dördüncü alan, komutun hangi ayda çalışacağını ayarlar. * kullanıldığından komut her ay çalışacaktır. Aylar sayı (1: Ocak, 2: Şubat vb.) veya kısaltma (Jan, Feb vb.) ile belirtilebilir. Örneğin, yalnızca Şubat ayında çalışması için 2 veya Feb yazılabilir.
  5. Haftanın Günü (*): Beşinci alan, komutun haftanın hangi günü çalışacağını gösterir. * kullanımı, komutun haftanın her günü çalışacağı anlamına gelir. Günler 0-7 arası sayılarla (0 ve 7 Pazar, 1 Pazartesi vb.) veya kısaltmalarla (Sun, Mon vb.) belirtilebilir. Örneğin, yalnızca Pazartesi çalışması için 1 veya Mon yazılabilir.

Komut (/home/bob/backup_tmp.sh): Son alan, çalıştırılacak komutu içerir.

4. Systemd Hizmetleri ve Zamanlayıcıları

Saldırganlar, normal hizmet başlatma mekanizmalarını kullanarak kötü amaçlı yazılımlarını yeniden başlatabilirler. Modern Linux sistemlerinde, Systemd kullanan sistemlerde hizmet başlatma yapılandırması /usr/lib/systemd/system ve /etc/systemd/system altında bulunur. Eski sistemlerde ise /etc/init* gibi dizinler altında yapılandırma dosyaları bulunur. Bu dizinlerdeki dosyalar üzerinde son yapılan değişiklikleri kontrol edilmesi faydalı olabilir. Bazı durumlarda, bu dosyalar, saldırganın değiştirmiş olabileceği diğer scriptleri çağırabilir. Bu, saldırganın başlangıç yapılandırma dosyalarını kendisinin doğrudan değiştirmesinden çok daha az belirgindir.

systemd, modern Linux dağıtımlarında hizmetleri ve zamanlanmış görevleri yönetir. Saldırganlar, özel hizmet dosyaları oluşturarak veya mevcut hizmetleri değiştirerek kalıcılık sağlayabilirler. Örneğin, bir hizmet dosyası oluşturup etkinleştirmek:

sudo tee /etc/systemd/system/kötüniyetli.service <<EOF

[Unit]

Description=Kötü Niyetli Hizmet

[Service]

ExecStart=/kötü/niyetli/komut

[Install]

WantedBy=multi-user.target

EOF

sudo systemctl enable kötüniyetli.service

şeklinde servis oluşturabilirler.

Bu durumu tespit edebilmek için;

  • Systemd Birim Dosyaları
    Özellikle /etc/systemd/system ve /usr/lib/systemd/system dizinlerinde yer alan servis dosyalarını kontrol edin.
    • Şüpheli veya beklenmeyen isimlendirmeler, açıklamalar ve ExecStart komutları üzerinde durun.
    • systemctl list-unit-files veya systemctl status <servis_adı> komutları ile çalışan servislerin detaylarını inceleyin.

Servis manipüle olup olmadığını tespit edebilmek adına;

  • Service start-up scripts    #startup items tespit etmek çin komut
  • /etc/systemd/system, (systemd) 
  • /usr/lib/systemd/system
  • /etc/init* (traditional and Upstart)

Dosyaları ve komut log dosylarından aranmalıdır.

5. Kabuk Yapılandırma Dosyaları

Saldırganlar, sistemde kalıcılık sağlamak amacıyla kabuk yapılandırma dosyalarını ve başlangıçta çalışan sistem scriptlerini hedef alabilirler. Bu dosyalara kötü niyetli komutlar ekleyerek, kullanıcı her oturum açtığında veya sistem her yeniden başlatıldığında bu komutların otomatik olarak çalışmasını sağlayabilirler.

Örneğin, ~/.bashrc veya ~/.bash_profile dosyalarına aşağıdaki gibi bir komut eklenebilir:

echo “/kötü/niyetli/komut” >> ~/.bashrc

Benzer şekilde, bazı sistemlerde sistem başlangıcında çalıştırılan /etc/rc.local dosyasına da zararlı komutlar eklenebilir. Bu tür kalıcılık yöntemlerinin tespiti için aşağıdaki kontrollerin düzenli olarak yapılması önerilir:

  • /etc/rc.local Dosyası: Sistem başlangıcında otomatik çalıştığı için bu dosya, içine eklenmiş şüpheli komutlar açısından incelenmelidir.
  • Kullanıcı Giriş scriptleri: ~/.bashrc, ~/.bash_profile, /etc/profile ve /etc/profile.d/ dizini altındaki dosyalar, kullanıcı oturumlarında otomatik olarak çalıştıkları için kötüye kullanım açısından kontrol edilmelidir.

Bu yöntemlerin uygulanması, kalıcılık amacı güden zararlı aktivitelerin tespit edilmesine katkı sağlayacaktır.

6. Dynamic Linker Hijacking

Saldırganlar, sistemde kalıcılık elde etmek veya zararlı kodlarını gizli şekilde çalıştırmak amacıyla dinamik bağlayıcı mekanizmalarını kötüye kullanabilirler. Bu kapsamda özellikle LD_PRELOAD ortam değişkeni veya /etc/ld.so.preload dosyası üzerinden kötü niyetli paylaşımlı kütüphanelerin yüklenmesi sağlanabilir.

Örneğin, aşağıdaki komut kullanılarak belirli bir kütüphane oturum açılışında otomatik olarak yüklenebilir:

export LD_PRELOAD=/kötü/niyetli/kütüphane.so

Bu yöntemle, sistemde normalde yüklenmeyen bir kütüphane zorla belleğe alınarak zararlı kod yürütülmesi mümkün hale gelir. Bu tür bir manipülasyonu tespit edebilmek için aşağıdaki kontroller uygulanmalıdır:

  • LD_PRELOAD ve /etc/ld.so.preload İncelemesi:
    • Çalışan süreçlerin ortam değişkenleri incelenerek LD_PRELOAD kullanımı tespit edilmelidir.
    • Ayrıca sistem genelinde etkili olan /etc/ld.so.preload dosyasına beklenmeyen bir kütüphane eklenip eklenmediği kontrol edilmelidir.

Bu kontrollerin düzenli olarak yapılması, dinamik bağlayıcılar yoluyla gerçekleştirilen kalıcılık girişimlerinin erken aşamada tespit edilmesini sağlayacaktır.

7.  Autostart Scripts

Otomatik başlatma scriptleri, bir sistem başlatıldığında veya bir kullanıcı oturum açtığında belirli komutların ya da uygulamaların otomatik olarak yürütülmesini sağlayan yapılandırmalardır. Bu mekanizma, temel sistem bileşenlerinin ve kullanıcıya özgü uygulamaların manuel müdahale gerekmeksizin çalışmasını temin eder. Ancak saldırganlar, bu özelliği kötüye kullanarak sistemde kalıcılık sağlamak, zararlı yazılımları gizlemek veya yetki yükseltme amacıyla kötü niyetli scriptler yerleştirebilirler.

Linux sistemlerinde iki temel otomatik başlatma scripti türü bulunmaktadır:

  • Sistem Genelinde Otomatik Başlatma Scriptleri: /etc/init.d/, /etc/rc.d/, veya /etc/systemd/system/ gibi dizinlerde bulunur ve sistem önyükleme sürecinde yürütülür. Genellikle arka plan hizmetlerini başlatmak için kullanılır.
  • Kullanıcıya Özgü Otomatik Başlatma Scriptleri: Kullanıcı oturumu açıldığında devreye girer. ~/.config/autostart/ veya ~/.config/ gibi dizinlerde yer alır. Kullanıcının tercih ettiği programları veya script’leri başlatmak için kullanılır.

Saldırganlar bu dosyaları değiştirerek ya da yenilerini oluşturarak reverse shell başlatabilir, zararlı kod çalıştırabilir veya sistemde kalıcı bir erişim sağlayabilir. Özellikle .desktop uzantılı autostart dosyaları, kötü amaçlı scriptleri arka planda devreye sokmak için yaygın olarak kullanılır.

.desktop Dosyalarının Yapısı ve Örnek Kullanımı
Autostart dizininde yer alan .desktop dosyaları, düz metin dosyalarıdır ve belirli bir söz dizimine sahiptir. Örnek bir içerik şu şekildedir:

[Desktop Entry]

Type=Application

Name=Setup Development Environment

Exec=/bin/bash -c “/home/eduardo/setup_dev_env.sh”

Bu örnekte, kullanıcı oturum açtığında bir geliştirme ortamı kurulum script’inin çalışması sağlanmaktadır. Ancak benzer şekilde, bir saldırgan da bu alanı kötü niyetli bir script’in çalışması için kullanabilir.

8. Message of the Day (MOTD) Üzerinden Kalıcılık Sağlama


MOTD (Message of the Day), doğrudan kullanıcı tarafından yapılandırılan bir bileşen olmamakla birlikte, bir kullanıcı Linux sistemine SSH üzerinden giriş yaptığında karşılaştığı mesajdır. Çoğu Linux dağıtımı bu mesajı otomatik olarak üretir ve mesaj içeriği sistem yöneticileri tarafından bilgilendirme amacıyla kullanılabilir.

Linux sistemlerinde MOTD çıktısı genellikle /etc/update-motd.d/ ve /usr/lib/update-notifier/ dizinlerindeki scriptler scriptler aracılığıyla dinamik olarak oluşturulur. Bu scriptler sırasıyla çalıştırılarak MOTD mesajı derlenir ve kullanıcıya sunulur.

Saldırganlar bu mekanizmayı kötüye kullanarak, sistemde kalıcılık sağlamak amacıyla bu dizinlere kötü amaçlı scriptler yerleştirebilir. Örneğin, bir kullanıcı her oturum açtığında çalışacak şekilde ayarlanmış bir backdoor komutu ya da ters kabuk başlatan bir script MOTD scriptleri arasına dahil edilebilir. Bu tür bir manipülasyon, kullanıcının farkında olmadan saldırgana sistem erişimi sağlamasına veya zararlı bir işlemi tetiklemesine neden olabilir.

Bu nedenle, olay müdahalesi ya da tehdit avcılığı süreçlerinde aşağıdaki yollarla MOTD bileşenleri incelenmelidir:

  • /etc/update-motd.d/ dizinindeki tüm script dosyaları kontrol edilmeli,
  • Scriptlerin çalıştırılabilir olup olmadığı (chmod +x) kontrol edilmeli,
  • İçerikleri analiz edilerek sistem dışında bağlantı kuran, kullanıcı girdisi almayan ya da şüpheli dosyaları çağıran yapılar tespit edilmelidir.

MOTD, sistem yöneticileri tarafından çoğunlukla göz ardı edilen bir yapı olması nedeniyle saldırganlar için cazip bir kalıcılık vektörüdür. Bu yapının düzenli olarak denetlenmesi önerilir.

Sonuç

Linux sistemlerinde kalıcılık (persistence) noktalarının tespiti, sistem bütünlüğünü korumak ve yetkisiz erişimleri önlemek için kritik bir adımdır. Yukarıda belirtilen dosya ve dizinlerin, logların, ayarların düzenli olarak kontrol edilmesi, anormal veya beklenmeyen değişikliklerin hızla tespit edilip müdahale edilmesini sağlar. Bu kapsamlı yaklaşım sayesinde, saldırganların kalıcılık yöntemleri daha erken evrede fark edilerek sistem güvenliği artırılabilir.

Bu tespit stratejileri, hem sistem yöneticilerinin hem de güvenlik uzmanlarının saldırı sonrası müdahale ve ileri tehdit (APT) tespiti sürecinde büyük rol oynar. Ayrıca, güncel güvenlik araçlarını ve otomatik izleme sistemlerini entegre etmek, sistemde sürekli izlenebilirliği sağlar.