Linux Sistemlerde Anomali Tespiti

Günümüz siber ortamında, saldırganlar ve iç tehdit aktörleri Linux sistemlerde fark edilmeden iz bırakacak yöntemler geliştirebiliyorlar. Linux adli bilişim (forensics) uzmanları, bu izlerin peşine düşerek sistemde meydana gelen olağandışı aktiviteleri incelemek ve potansiyel saldırıları ortaya çıkarmak durumunda kalıyor. Bu yazıda, Linux sistemlerde anomali tespitinin temel prensiplerine, kullanılan araçlara ve metodolojilere dair geniş bir bakış açısı sunacağız. Modern tehdit ortamında, saldırganların izlerini gizlemek için kullandıkları teknikler her geçen gün daha da sofistike hale geliyor. Özellikle Linux sistemlerde, sistem yöneticilerinin ve güvenlik analistlerinin karşılaştığı en büyük zorluklardan biri, olağandışı davranışları zamanında fark edebilmektir. Anomali tespiti, bilinen saldırı imzalarının ötesine geçerek, sistemde meydana gelen alışılmadık aktivitelerin ayıklanmasını sağlar. Bu yazıda, Linux sistemler üzerinde gerçekleşen şüpheli davranışların nasıl tespit edilebileceğini, hangi logların, metriklerin ve araçların bu süreçte kritik rol oynadığını ele alacağız.

Linux sistemlerde anomali tespiti, “normal” sistem davranışının dışında gerçekleşen aktivitelerin belirlenmesi sürecidir. Standart saldırı imzalarının ötesinde, bilinmeyen tehditleri yakalamanın yolu olan bu yaklaşım, şu nedenlerle kritik önem taşır:

  • Sıfırıncı Gün Saldırıları (Zero-day): Bilinen imzalara dayalı çözümler, yeni ve keşfedilmemiş tehditleri yakalamakta yetersiz kalabilir.
  • İç Tehditler: Sistem içindeki kullanıcı hataları veya kötü niyetli çalışanlar, sistemde alışılmadık aktiviteler başlatabilir.
  • Gelişmiş Kalıcılık: Saldırganlar, sistemde kalıcılığı sağlamak için geleneksel yöntemlerin dışına çıkarak, kısa sürede tespit edilmesi güç izler bırakırlar.

Bu nedenle, Linux forensics alanında anomali tespiti, hem reaktif hem de proaktif müdahale stratejilerinin temel taşlarından biri haline gelmiştir.

Linux Sistemlerde Anomali Nasıl Tespit Edilir?

2.1. Log Analizi

Sistem logları, Linux ortamlarında gerçekleşen tüm aktiviteleri belgeleyen en önemli kaynaklardır. Özellikle şüpheli giriş denemeleri, anormal dosya erişimleri veya sistem servislerindeki beklenmedik değişiklikler, ayrıntılı log analiziyle saptanabilir.

  • Auth Loglar: /var/log/auth.log veya /var/log/secure dosyaları, kullanıcı oturum açma denemelerini, sudo komutlarını ve diğer kimlik doğrulama olaylarını izlemek için kullanılır.
  • Sistem Logları: /var/log/syslog, kernel logları ve daemon logları, sistem genelinde meydana gelen aksaklıkları ve olağandışı aktiviteleri gösterir.

Log analizinde kullanılabilecek komutları yazının ilerleyen kısımlarında değineceğim.

2.2. Dosya Bütünlüğü Kontrolleri

Anomalilerin tespitinde dosya bütünlüğü denetimi büyük önem taşır. Araçlar kullanılarak sistemdeki kritik dosyaların hash değerleri oluşturulur ve düzenli aralıklarla kontrol edilerek, herhangi bir yetkisiz değişiklik anında fark edilir.

  • Tripwire, AIDE: Bu araçlar, dosya bütünlüğünü korumak ve sistemdeki beklenmedik değişiklikleri tespit etmek için yaygın olarak kullanılır.

2.3. Sistem ve Ağ Trafiği İncelemeleri

Kötü niyetli aktiviteler yalnızca loglarda değil, aynı zamanda sistem kaynak kullanımında veya ağ trafiğinde de kendini gösterebilir.

  • Netstat, SS: Açık portlar ve ağ bağlantıları incelenerek, normalin dışında bağlantılar saptanabilir.
  • TCPDump, Wireshark: Ağ trafiği paketlerini yakalayarak anormal veri akışları, DDoS saldırıları veya beklenmedik veri transferleri tespit edilebilir.

2.4. Bellek (Memory) Analizi

Bellek tespiti, saldırganların sistemde varlık sürdürebilmek amacıyla kullandığı tekniklerin ortaya çıkarılmasında kritik rol oynar. Bellek görüntülerinin alınması ve analizi, rootkit veya hafıza içi saldırıları belirlemede etkilidir.

  • Volatility Framework: Açık kaynak kodlu bu araç, bellek dökümlerini analiz ederek, şüpheli süreçleri, gizlenmiş bağlantıları veya saldırı vektörlerini belirler.

2.5. Otomasyon ve Makine Öğrenimi

Günümüzde anomali tespitinde geleneksel tekniklerin yanı sıra, makine öğrenimi tabanlı sistemler de devreye giriyor. Bu sistemler, normal kullanım desenlerini öğrenip, anormallikleri otomatik olarak raporlayabilir.

  • ELK Stack (Elasticsearch, Logstash, Kibana): Büyük miktardaki log verilerini analiz etmek ve görselleştirmek için kullanılır.
  • OSSEC: Hem anomali tespiti hem de gerçek zamanlı müdahale süreçlerinde tercih edilen bir HIDS (Host Intrusion Detection System) örneğidir.

2.6. Zamanlanmış Görevler

  • Cron Jobs
    • crontab -l komutuyla kullanıcıya özel zamanlanmış görevleri kontrol edin.
    • /etc/crontab, /etc/cron.d/ ve /var/spool/cron/ dizinlerini inceleyin. Şüpheli veya beklenmeyen komutlar içerip içermediğini kontrol edilir.

2.7. Yüksek Yetkili İhlaller

  • Privilege Escalation İzleri:
    • /var/log/auth.log veya /var/log/secure dosyalarını analiz ederek kullanıcı yetki artırma girişimlerini bulun.
    • Özellikle sudo, su ve pkexec girişimlerini kontrol edin.
  • SUID ve SGID Dosyaları:
    • Yetkisiz olarak izin verilmiş veya değiştirilmiş SUID dosyalarını kontrol edin.

2.8. Saldırı İzleri ve Artifackleri

  • Şüpheli Artifackler
    • /tmp, /dev/shm, ve /var/tmp gibi geçici dosya alanlarını kontrol edin. Yetkisiz çalışan script veya zararlı dosyalar burada olabilir

 2.9. Yüklenene veya çalıştırılan yazılımlar

  • Yeni yazılımlar:
    • Son yüklenen yazılımları dpkg --list veya rpm -qa --last komutlarıyla kontrol edin. Beklenmeyen yazılım paketlerini ve sürümlerini araştırın

2.10. Çalışan Prosesler ve yüklenen modüller

Şüpheli prosesler tespit edilir ps aux veya top komutları ile sistemde çalışan prosesler kontrol edilir. Sistemle ilgisiz, yüksek CPU/memory tüketen veya root altında çalışan süreçleri incelenir.

  • Yüklenen modüller
    • lsmod komutu ile kernel modellerini kontrol et beklenmeyen veya kötü amaçlı modül olup olmadı kontrol edilir

2.11. Dosya sistemi ve izinler

  • Son değiştirilen dosyalar
    • find / -mtime -1 veya ls -lt komutlarıyla son değiştirilen dosyaları inceleyin.
    • Özellikle /etc, /home, /var/www ve kritik sistem dosyalarını kontrol edin.
  • Yetkisiz dosyalar
    • find / -perm 777 komutuyla herkes tarafından erişilebilir dosyaları tespit edin.
    • Beklenmeyen SUID veya SGID dosyalarını find / -perm /4000 ile kontrol edin.

2.12. Kullanıcı aktivitelerin tespiti

Kullanıcı etkinliklerinin izlenmesi, özellikle bir güvenlik ihlali veya kötü amaçlı aktivitenin tespiti için çok önemlidir. .bashrc, .bash_history dosyaları ve .ssh/ dizinleri gibi yapıların analizi, bir Linux sisteminde kullanıcıların komut geçmişi, oturum açma etkinlikleri ve uzak erişim için kritik bilgiler sunabilir. Bu dosyaların ve dizinlerin her Linux dağıtımında benzer şekilde bulunması beklenir, ancak kullanılan dosya sistemleri, araçlar ve bazı dağıtımların yapılandırma farkları nedeniyle analizde bazı farklılıklar olabilir.

Aşağıda, farklı Linux dağıtımlarında bu dosya ve dizinlerin nasıl kullanıldığı, hangi verileri içerdiği ve analiz ederken nelere dikkat edilmesi gerektiği açıklanmıştır.

Dosya/DizinUbuntu/Debian TabanlıRHEL/CentOS TabanlıArch Linux TabanlıSUSE/openSUSE TabanlıAnalizde Dikkat Edilecekler
~/.bashrcKullanıcı başlatma komutları için konfigürasyon dosyası.Aynı yapı.Aynı yapı.Aynı yapı.Yetkisiz değişiklikler, şüpheli ortam değişkenleri veya komutlar araştırılmalı. (Örn. PATH, LD_PRELOAD.)
~/.bash_historyKullanıcı komut geçmişi. Sonuçlar, kullanıcı her çıkış yaptığında kaydedilir.Aynı yapı.Aynı yapı.Aynı yapı.Komut geçmişi incelenmeli. Kötü amaçlı veya şüpheli komutlar, root yetkisiyle yapılan işlemler aranmalı.
/etc/profileTüm kullanıcılar için global bash başlatma dosyası. Kullanıcı ortam değişkenleri burada ayarlanabilir.Aynı yapı.Aynı yapı.Aynı yapı.Saldırganlar, bu dosyayı değiştirebilir. Şüpheli ortam değişkenleri veya komutları tespit etmek için analiz edilmeli.
/etc/bash.bashrcGlobal Bash konfigürasyon dosyası, tüm kullanıcılar için geçerli ayarları içerir.Aynı yapı.Aynı yapı.Aynı yapı.Şüpheli komutlar veya ortam değişkenleri araştırılmalı.
~/.ssh/authorized_keysKullanıcının SSH anahtarları. Bu dosya, uzak bağlantılar için kullanılan anahtarları içerir.Aynı yapı.Aynı yapı.Aynı yapı.Şüpheli anahtarlar, yetkisiz erişim için kullanılan eski anahtarlar tespit edilmelidir.
~/.ssh/known_hostsDaha önce bağlanılan sunucuların SSH anahtarları burada saklanır.Aynı yapı.Aynı yapı.Aynı yapı.Yetkisiz uzak bağlantılar veya yeni eklenen şüpheli sunucu anahtarları kontrol edilmeli.
~/.ssh/configKullanıcı bazında SSH istemci konfigürasyonları. SSH bağlantılarının yapılandırılması için kullanılır.Aynı yapı.Aynı yapı.Aynı yapı.Şüpheli proxy ayarları veya bağlantı hedefleri incelenmeli.

Linux dağıtımlarında çoğu durumda bu dosyaların yapısı benzer olmakla birlikte, her bir dağıtımın güvenlik yapılandırmaları, dosya izinleri ve sistemdeki farklı araçlar nedeniyle analiz sırasında ortaya çıkan bazı küçük farklılıklar olabilir.

Bir process’in kullanıcı bilgisi process’in hangi kullanıcı olarak çalıştığı, sürecin çalıştığı executable’ı hangi kullanıcının sahip olduğu bir araştırmada değerli ipuçları sağlayabilir. Ayrıca, saldırganlar meşru kullanıcı hesaplarını ve gruplarını alt edebilir, böylece kendileri için arka kapılar oluşturabilirler.

KİMLİK TEMELLERİ (IDENTITY BASICS)

Kullanıcıların varsayılan Kullanıcı Kimliği -User ID – (UID) ve Grup Kimliği -Group ID – (GID) vardır. Bu, /etc/passwd dosyasında atanır. Kullanıcılar başka gruplara da ait olabilirler.
Bunlar /etc/group dosyasında listelenir. Dosyaların bir kullanıcı sahibi ve bir grup sahibi vardır. Varsayılan olarak, dosyayı oluşturan kullanıcı sahibi olur. Dahili olarak, Linux işletim sistemi kullanıcı sayısal kullanıcı kimliği (UID) ve grup kimliği (GID) değerleriyle saklar. UID değerleri, /etc/passwd dosyasında belirli kullanıcı adlarıyla barındırır:

Üçüncü alan, kullanıcının UID’sini ve dördüncü alan ise varsayılan GID’sini gösterir. Bu örnekte, “ma” kullanıcısının UID’si 1000 ve varsayılan GID’si 1000’dir.
GID 1000 ile ilişkilendirilmiş grup adını, /etc/group dosyasına bakarak öğrenebilirsiniz:

Kullanıcıların /etc/passwd girişlerinde bir tane varsayılan GID’si vardır, ancak /etc/group dosyası aracılığıyla birden fazla grupta üye olabilirler. Dosyalar da bir kullanıcı ve grupla ilişkilidir. Varsayılan olarak, yeni oluşturulan dosyalar, dosyayı oluşturan kullanıcının UID’sini ve varsayılan GID’sini alır.

  • Bu kötü niyetli process hangi kullanıcı olarak çalışıyor?
  • Kötü niyetli executable’ı kim sahipleniyor?
  • Bunlar genellikle ilk ihlale dair ipuçlarıdır.
  • Bu kullanıcı olarak çalışan diğer processler nelerdir?
  • Bu kullanıcıya ait diğer dosyalar/dizinler nelerdir?

Bu tarz sorulara cevap vermek için user analizi önemlidir.

Bir process veya onun executable’ının kullanıcı konteksi, bir sistemin nasıl ihlal edildiğine dair değerli ipuçları sağlayabilir. Örneğin, dosya sisteminizde web sunucu kullanıcısı tarafından sahiplenilen executable’lar veya web sunucu kullanıcısı olarak çalışan process görüyorsanız, makul bir teori, web uygulaması ihlalinin sorumlu olduğudur.
UAC verilerine bakıldığında, şüpheli lsof ve xterm süreçlerimizin “mail” kullanıcısı olarak çalıştığı görülmektedir:

UID ile ilgili bilinmesi gerekenler,

  • UID 0 olan herhangi bir hesap yönetici haklarına sahiptir.
  • Normalde yalnızca “root” hesabı UID 0’a sahiptir.
  • UID’si 1000’den küçük olan hesaplar hizmet hesaplarıdır.
  • Bu hesaplar kilitli olmalıdır.
  • Etkileşimli oturum açılmamalıdır!

UID 0’a sahip tüm hesaplar yönetici ayrıcalıklarına sahiptir. Normal şartlarda yalnızca “root” hesabı UID 0’a sahiptir. Ancak, /etc/passwd dosyasında aynı UID’ye sahip birden fazla hesap bulunmasına izin verilir. Bazen saldırganlar, ek UID 0 hesapları oluşturur ve bunları büyük şifre dosyalarında gizlemeye çalışırlar.

Normal kullanıcı hesapları genellikle UID 1000 ile başlayan UID’ler atanır. UID’ler 1000’in altındaki değerler, “www-data” ve “mail” gibi hizmet hesapları için ayrılmıştır. Bu hizmet hesapları genellikle etkileşimli oturum açmaları engellemek için “kilitli” hale getirilir:

Bazı kullanıcıların giriş shellolarak “/usr/sbin/nologin” kullanıldığını, diğer kullanıcıların ise “/bin/bash” kullanmaktadır. “Nologin” programı kullanıcısı olarak giriş yapma girişimini kaydeder ve ardından kullanıcı oturumunu sonlandırır.
Bu hizmet hesapları ayrıca, kullanıcı şifre hash’lerinin saklandığı /etc/shadow dosyasında bulunamaktadır.

Etkileşimli oturum açmaya izin veren hesaplar, ikinci alanda uzun kullanıcı şifre hash’lerine sahiptir. Kilitli hesaplar, örneğin mail kullanıcısı gibi, geçerli bir şifre hash’i olmayan “*” veya “LOCKED” gibi bir dizeye sahiptir. Ancak, bazen saldırganlar hizmet hesaplarını açarak bunları arka kapı olarak kullanabilirler. “Noshell” yerine “bash” veya başka bir geçerli giriş kabuğuna sahip olan hizmet hesaplarına dikkat edin. Ayrıca, /etc/shadow dosyasındaki girişlerinin ikinci alanda geçerli bir şifre hash’i bulunmadığından emin olun.

SUDO

Yönetici erişimini sınırlı bir şekilde sağlar. /etc/sudoers dosyası üzerinden yapılandırılır. Bazı grupların özel Sudo ayrıcalıkları vardır. Yetkisiz grup üyeliklerine dikkat edin.

Bir makine için root şifresini biliyorsanız, “su” komutunu kullanarak yönetici erişimi elde edebilirsiniz. Ancak günümüzde çoğu site, daha ayrıntılı bir şekilde yönetici ayrıcalıkları sağlamak için Sudo programını tercih eder. Yönetici erişimi, /etc/sudoers dosyası aracılığıyla yapılandırılır.

SET-ID BITS

Bazı Process ayrıcalıklarla çalışması gerekir. Set-UID: executable sahibinin yetkileriyle çalışır, kullanıcı değil. Set-GID: executable’ın grup ayrıcalıklarıyla çalışır, kullanıcı değil. Linux’ta bazı programların yönetici ayrıcalıklarıyla çalışması gerekir. Örneğin, bir kullanıcı şifresini değiştirmek isterse, /etc/shadow dosyasının güncellenmesi gerekir. Bu dosyayı değiştirme yetkisine yalnızca root kullanıcısı sahiptir. “passwd” programı, root kullanıcısına “set-UID” olarak kuruludur.

Linux Dağıtımlarına Göre Forensics Açıdan Önemli Artifacler şu şekilde tablo halinde aktarabiliriz;

KategoriUbuntu/Debian TabanlıRHEL/CentOS TabanlıArch LinuxSUSE/openSUSE Tabanlı
Genel Loglar/var/log/syslog, /var/log/auth.log/var/log/messages, /var/log/secure/var/log/journal, /var/log/syslog/var/log/messages, /var/log/audit/audit.log
Audit Loglarıauditd ile /var/log/audit/auditd ile /var/log/audit/Opsiyonel olarak auditd kurulabilirauditd ile /var/log/audit/
Kernel Logları/var/log/kern.log/var/log/dmesg/var/log/dmesg/var/log/dmesg
SSH Logları/var/log/auth.log/var/log/secure/var/log/auth.log/var/log/secure
Cron Logları/var/log/cron, /var/log/syslog/var/log/cron, /var/log/messages/var/log/cron.log/var/log/cron
Paket Yöneticisi/var/log/apt/history.log/var/log/yum.log veya /var/log/dnf.log/var/log/pacman.log/var/log/zypper.log
Süreç Yönetimips aux, systemctl list-unitsps aux, systemctl list-unitsps aux, systemctl list-unitsps aux, systemctl list-units
Kullanıcı Logları/var/log/lastlog, /var/log/wtmp, /var/log/btmp/var/log/lastlog, /var/log/wtmp, /var/log/btmp/var/log/lastlog, /var/log/wtmp, /var/log/btmp/var/log/lastlog, /var/log/wtmp, /var/log/btmp
Firewall Logları/var/log/ufw.log (varsayılan UFW ile)/var/log/iptables.log (manüel ayarlanır)Manüel olarak ayarlanır/var/log/firewalld veya /var/log/messages
SELinux/AppArmor/var/log/syslog (AppArmor varsayılan)/var/log/audit/audit.log (SELinux varsayılan)SELinux veya AppArmor opsiyonel/var/log/audit/audit.log (AppArmor/SELinux)
Temporary Files/tmp, /var/tmp/tmp, /var/tmp/tmp, /var/tmp/tmp, /var/tmp
Network Logları/var/log/syslog, netstat, ss/var/log/messages, netstat, ssnetstat, ss, /var/log/journal/var/log/messages, netstat, ss
Journalingjournald kullanımı opsiyonel, rsyslog varsayılanrsyslog varsayılan, journald eklenebilirjournald varsayılanjournald varsayılan, rsyslog opsiyonel

Anomaliyi tespit edebilmek için şunlara bakmakta fayda var;

Linux sistemlerde komut kullanarak threat hunting sağlanması

Linux sistem üzerinde komut kullanarak hunting yapılabilir. Linux sistede bilinmesi gereken faydalı linux komutları:

cat, grep, sed, sort, uniq, and awk, less, tail, wc, cut, sort, less

  • less

Dosyanın verilerini sayfa sayfa görüntülemenize olanak tanır ve uzun logları okumak için daha rahat bir yol sağlar. Bir dosyayı açmak için kullanıldığında, varsayılan olarak ilk sayfayı görüntüler ve ok tuşlarını veya Page Up ve Page Down tuşlarını kullanarak aşağı kaydırabilirsiniz .

Komutun çıktısından “q” tuşu ile çıkabilirsiniz.

  • tail

tail dosyaların sonunu görüntülemek için özel olarak tasarlanmıştır ve log dosyaları durumunda yakın zamanda oluşturulan olayların bir özetini görmek için çok kullanışlıdır. Bu, canlı olaylar veya gerçek zamanlı sistem davranışı için logları izlerken son derece kullanışlıdır. Varsayılan olarak, tail dosyanın yalnızca son on satırını görüntüler. Ancak, bunu seçeneğiyle değiştirebilir “-n” ve görüntülemek istediğimiz satır sayısını belirtebiliriz.

tail Komutun tersi , varsayılan olarak bir dosyanın head   ilkon satırını görüntülemenize izin veren ve aynı argümanları alan komutudur.

-n #: Belirtilen # kadar satır gösterir.

-c #: Belirtilen # kadar bayt gösterir.

  • wc

(word count) wc, hızlı analiz ve istatistik toplama için oldukça yararlı olabilen basit ama güçlü bir yardımcı programdır. Çıktısı, wcbir log dosyasındaki satır, kelime ve karakter sayısı hakkında bilgi sağlar. Bu, güvenlik analistlerinin daha ayrıntılı bir analize dalmadan önce uğraştıkları log verilerinin boyutunu ve hacmini anlamalarına yardımcı olabilir. Bir dosyadaki bayt, satır veya kelime sayısını sayar.

-l: Satır sayısını gösterir.

-c: Bayt sayısını gösterir.

-w: Kelime sayısını gösterir.

-m: Karakter sayısını gösterir.

  • sort

Bazen, döndürülen girdileri kronolojik veya alfabetik olarak sıralamak yararlıdır. Sort komutu, dosyalardaki verileri belirli ölçütlere göre artan veya azalan düzende düzenler. Bu, log verilerimizdeki kalıpları, eğilimleri veya aykırı değerleri belirlemek için çok önemli olabilir. -n  sayısal olarak sıralama parametresi ekledi, asralamayı tersine çevirmek istersek şu -r parametresini ekleyebiliriz:

  • uniq

uniq, sıralanmış girdiden bitişik yinelenen satırları belirler ve kaldırır. Log analizi bağlamında, bu, özellikle log girişleri tekrarlanan veya gereksiz bilgiler içerebildiğinde, veri listelerini (toplanan IP adresleri gibi) basitleştirmek için yararlı bir araç olabilir. Komut, genellikle yinelenen girişleri kaldırmadan önce verileri sıralama komutuyla uniq birleştirilir

  • sed

Yerine koyma sözdizimini kullanarak, sed belirli kalıpları veya dizeleri log girişlerine yerleştirebilirsiniz. Ctrl+h gibi bişi 🙂

  • grep

Yaygın olarak kullanılan güçlü bir metin arama aracıdır ve log analizinde istisnai kullanım durumları sağlar. Dosyalar veya metin akışları içinde belirli kalıpları veya düzenli ifadeleri aramanıza olanak tanır. Kullanımı, grep analistlerin belirli ölçütlerle, belirli kaynaklarla veya anahtar sözcüklerle veya güvenlik olaylarıyla ilişkili kalıplarla eşleşen ilgili log girişlerini hızla belirlemesine yardımcı olabilir.

  • Aranacak şeyin içerde kaç tane olduğunu anlamak için “-c” parametresi kullanılabilir.
  • Log dosyasındaki hangi satır numarasının eşleşen girdilerle ilişkili olduğunu bilmek isteseydik , -n
  • -E parametresi, Genişletilmiş Düzenli İfadeler (Extended Regular Expressions – ERE) kullanmamızı sağlıyor.
  • -r: Özyinelemeli olarak ara.
  • -i: Büyük/küçük harf duyarsız arama.
  • -o: Eşleşen satırın yalnızca eşleşen kısımlarını yazdırır.
  • -v: Eşleşmeleri hariç tutar.
  • -a: Tüm girdiyi ASCII olarak işler.
  • -A#: Eşleşen satırdan sonra # satır gösterir.
  • -B#: Eşleşen satırdan önce # satır gösterir.
  • -C#: Eşleşen satırdan önce ve sonra # satır gösterir.
  • awk

Güçlü veri manipülasyonu ve desen eşleme aracı olarak awk kullanılır. Komut için awk, yaygın bir kullanım örneği, belirli alan değerlerine dayalı koşullu eylemlerdir.

  • cat

Komut cat(“concatenate” ifadesinin kısaltması) bir veya daha fazla dosyayı okuyan ve içeriğini terminalde görüntüleyen basit bir yardımcı programdır. Log dosyaları için kullanıldığında, tüm log içeriğini ekrana yazdırır. Büyük çıktı miktarı nedeniyle, uzun log dosyalarıyla başa çıkmak için genellikle en iyi yaklaşım değildir.

  • column

Çıktıyı sütunlar halinde biçimlendirir.
-t: Tablo formatında çıktı.
-s: Girdi ayracını belirtir (varsayılan boşluk).
-o: Çıktı ayracını belirtir (varsayılan iki boşluk).
-J: JSON çıktısı (sütun isimlerinin belirtilmesi gerekir).
-N: Sütun isimlerini virgülle ayrılmış liste olarak belirtir; bu, tablo başlığı olarak kullanılır.
-n: Tablo için bir isim belirtir (varsayılan “table”).

  • cut

cut belirtilen sınırlayıcılara göre dosyalardan belirli sütunları (alanları) çıkarır. Girdiyi dilimleyerek istediğiniz kısımları alır. Bu, yapılandırılmış veya sekmeyle ayrılmış verilere sahip log dosyalarıyla çalışmak için kullanışlı bir komuttur.

-d: Kesme işlemi için ayraç belirtir.
-f: Belirli bir alanı veya alan kombinasyonunu seçer.

  • date

Sistem zamanını yazdırır veya ayarlar.
-d [STRING]: STRING ile belirtilen tarihi görüntüler (“şimdi” yerine).
-u: UTC zamanını görüntüler.

  • file

Dosyanın dosya imzasını kontrol eder.
-z: Zip dosyalarını/sıkıştırılmış arşivleri içeride ara.

  • hexdump

Dosya içeriğini hex (veya octal vb.) olarak görüntüler.
-C: Canonical hex + ASCII görüntüleme (xxd benzeri çıktı).
-n [sayı]: Yalnızca belirtilen [sayı] kadar baytı yorumlar.
-s [sayı]: Baştan belirtilen [sayı] kadar baytı atlar.

  • md5sum [dosya adı]

Belirtilen dosyanın MD5 hash’ini oluşturur.

  • sha1sum [dosya adı]

Belirtilen dosyanın SHA1 hash’ini oluşturur.

  • sha256sum [dosya adı]

Belirtilen dosyanın SHA256 hash’ini oluşturur.

  • sort

Girdiyi alır ve sıralı bir şekilde standart çıktıya (stdout) gönderir.

-r: Sıralama sırasını tersine çevirir.

-n: Dizeleri sayısal değerlerine göre karşılaştırır.

-b: Baştaki boşlukları yok sayar.

-u: Anahtarların eşit olduğu her kümede yalnızca bir tane tutar.

  • tar

Arşivleri yönetir.

-tf [dosya]: Belirtilen [dosya] arşivinin içeriğini listeler.

-xf [dosya]: Belirtilen [dosya] arşivinin içeriğini çıkarır.

  • uniq

Ardışık yinelenen satırları kaldırır.

-d: Yalnızca yinelenen satırları döndürür.

-c: Her satırın kaç kez tekrarlandığını sayar.

-i: Büyük/küçük harf duyarsız işlem yapar.

  • xxd

Hexdump oluşturur.

-s [sayı]: Dosyanın başından [sayı] kadar bayt atlar (seek).

-l [sayı]: Toplam [sayı] kadar bayt gösterir (length).

-r: Hexdump’ı tekrar ikili formata dönüştürür (tersine çevirme).

  • zcat

Sıkıştırılmış dosyaları okur.

-d: Dosyayı sıkıştırmasını açar (decompress).

-r: Dizinlerde özyinelemeli olarak çalışır.

  • zgrep

Sıkıştırılmış veri kümelerinde arama yapar.

  • Yaygın Regex Meta Karakterleri
  • .
    Yeni satır hariç herhangi bir tek karakterle eşleşir.
  • ^
    Eşleşmeyi bir satırın başına sabitler.
  • $
    Eşleşmeyi bir satırın sonuna sabitler.
  • *
    Önceki öğenin sıfır veya daha fazla kez tekrarlandığı durumlarla eşleşir.
  • +
    Önceki öğenin bir veya daha fazla kez tekrarlandığı durumlarla eşleşir.
  • ?
    Önceki öğenin sıfır veya bir kez tekrarlandığı durumlarla eşleşir.
  • [ ]
    Köşeli parantezler içindeki karakterlerden herhangi biriyle eşleşir. Bir karakter aralığı belirtmek için tire (-) kullanılabilir. Örneğin: [a-z].
  • |
    Desenler arasında mantıksal VEYA (OR) işlemi yapar.
  • ( )
    Bir desenin parçalarını gruplamak için kullanılır.
  • \
    Bir meta karakterin önüne ters eğik çizgi (\) ekleyerek, o karakterin gerçek anlamıyla aranmasını sağlar.
KomutAçıklama
find / -type f -mtime -5 | lessSon 5 gün içinde değiştirilmiş dosyaların bulunup, sayfalı görüntüleme (gözden geçirme) yapılması.
find / -type f -mtime -5 | grep “php”Son 5 gün içinde değişen dosyalar arasından adı “php” içeren dosyaların filtrelenmesi.
find /lib /usr/bin /usr/sbin -type f -newermt “$(date -d ’10 days ago’ +’%Y-%m-%d’)”/lib, /usr/bin ve /usr/sbin dizinlerinde son 10 gün içinde modifiye edilmiş dosyaların aranması.
find / -type f -mtime -1 -printSon 1 gün içinde değiştirilmiş dosyaların yol bilgisini ekrana yazdırır.
find / -size +10000k -print10.000 kilobayttan büyük dosyaların bulunup, yollarının listelenmesi.
ls -lai /usr/bin | sort -n/usr/bin dizinindeki dosyaların inode numaralarıyla birlikte listelenip, sayısal olarak sıralanması.
ls -laR –sort=time /bin/bin dizinindeki dosyaların alt dizinleriyle birlikte, modifikasyon zamanı esas alınarak sıralı şekilde listelenmesi.
find / -user root -perm -04000 -printRoot kullanıcısına ait, setuid veya setgid bit’ine sahip dosyaların aranması.
ls /dev/dev dizinindeki tüm cihaz dosyalarının listelenmesi.
find /var/www/html -type f -name “*.php” -printf “%T@ %f\n” | sort -n | awk ‘{print strftime(“%Y-%m-%d %H:%M:%S”, $1), $2}’/var/www/html dizininde bulunan PHP dosyalarının, modifikasyon zamanlarını Unix zaman damgası olarak alıp okunabilir tarih formatına dönüştürerek sıralanması.
tail -f /etc/apache2/*/*Apache konfigürasyon dosyalarını (alt dizinler dahil) gerçek zamanlı izleme.
tail -f /etc/nginx/*/*Nginx konfigürasyon dosyalarının gerçek zamanlı izlenmesi.
sudo grep -i “failure” /var/log/auth.logauth.log dosyasında (büyük/küçük harf duyarsız) “failure” (başarısız) içeren girişlerin aranması; başarısız giriş denemelerini tespit eder.
sudo grep “sudo” /var/log/auth.logauth.log dosyasında sudo komutunun kullanımına ilişkin log girişlerinin aranması.
sudo awk ‘/2025-04-04 15:30:00/,/2025-04-04 15:29:59/’ /var/log/auth.logBelirli bir tarih ve saat aralığındaki (2025-04-04 15:30:00–2025-04-04 15:29:59) log girişlerinin filtrelenmesi.
sudo grep “$(date –date=’2 hours ago’ ‘+%b %e %H:’)” /var/log/auth.logSon 2 saat içinde oluşan auth.log girdilerinin aranması; dinamik olarak tarih ve saat hesaplaması yapar.
grep “10.10.190.69” /var/log/apache2/access.log*Apache erişim log’larında belirtilen IP adresi (10.10.190.69) ile ilişkili girişlerin aranması.
grep “404” /var/log/Apache2/access.log*Apache log dosyalarında 404 HTTP durum kodu içeren kayıtların bulunması.
awk ‘{print $1}’ /var/log/apache2/access.log* | sort | uniq -c | sort -nrApache erişim loglarında IP adreslerinin sayısını hesaplayıp, en çok istek yapanları sıralar.
awk ‘{print $9}’ /var/log/apache2/access.log* | sort | uniq -c | sort -nrHTTP durum kodlarının özetlenmesi, loglardan hangi durum kodunun ne kadar tekrarlandığının bulunması.
cat /etc/passwd | cut -d: -f1,3 | grep ‘:0$’/etc/passwd dosyasında UID değeri 0 (root) olan kullanıcıların tespit edilmesi.
find / -type f -executable 2> /dev/nullYürütülebilir dosyaların bulunması; hata mesajlarını (izin sorunları vb.) bastırır.
find / -perm -u=s -type f 2>/dev/nullSetuid bit’e sahip dosyaların aranması, olası yetki yükseltme riskleri için kontrol edilir.
grep -v cron /var/log/auth.log* | grep -i -e “command=” -e “su:” -e “groupadd” -e “useradd” -e “passwd”Cron işlerine ait olmayan satırlarda komut çalıştırma, su kullanımı veya kullanıcı/grup yönetimi gibi işlemlerin aranması.
find / -ctime +1 -ctime -5Son 1 ile 5 gün arasında meta verileri değişen dosyaların aranması.
find / -path /root -prune -o -path /home/* -prune \ -o -type d -name .* -printKullanıcı ana dizinleri dışındaki gizli (nokta ile başlayan) dizinlerin tespit edilmesi.
cut -d’ ‘ -f7 apache.log | sort -uApache log dosyasında URL alanının çıkarılarak benzersiz değerler halinde listelenmesi.
ls -alWeb dizini (örneğin /var/www/html) içerisindeki dosya ve dizinlerin detaylı listelemesi.
ls -al /var/www/html/uploads/uploads dizinindeki dosyaların detaylı listelenmesi.
ls -al /var/www/html/uploads | grep -v “.jpeg”/uploads dizinindeki dosalar arasında “.jpeg” uzantılı olanlar hariç tutulup diğer dosyaların listelenmesi; görüntü olmayan dosyalara odaklanmak için.
find / -user www-data -type f 2>/dev/null | lesswww-data kullanıcısına ait dosyaların bulunması; sonuçların sayfalı görüntülenmesi.
find / -group GROUPNAME 2>/dev/nullBelirli bir gruba ait dosya ve dizinlerin aranması (GROUPNAME yerine ilgili grup adı girilir).
find / -perm -o+w 2>/dev/nullTüm dünya (other) tarafından yazılabilir dosya ve dizinlerin aranması; potansiyel güvenlik açığı kontrolü.
find / -type f -cmin -5 2>/dev/nullSon 5 dakika içerisinde oluşturulan veya değiştirilmiş dosyaların bulunması.
grep “Failed password” /var/log/auth.log | awk ‘{print $(NF-3)}’ | sort | uniq -c | sort -nrAuth.log’dan başarısız şifre giriş denemelerindeki kaynak IP adreslerinin sayısal analizini yapar.
grep “useradd” /var/log/syslogSyslog içerisinde kullanıcı oluşturma (useradd) girişimlerinin aranması.
grep “sshd” /var/log/auth.log | awk ‘{print $1, $2, $3, $(NF-3)}’Auth.log’da SSH (sshd) ile ilgili girdilerden tarih, saat ve IP bilgisinin çıkarılması.
grep “CRON” /var/log/syslogSyslog’da CRON işlemlerine ait kayıtların aranması.
grep “authentication failure” /var/log/auth.logAuthentication (kimlik doğrulama) loglarında “authentication failure” içeren hataların bulunması.
grep “2025-01-06” /var/log/syslogBelirli bir tarihte (2025-01-06) oluşan log girdilerinin filtrelenmesi.
grep -i “error” /var/log/syslogSyslog’da hata mesajlarının büyük/küçük harf duyarsız aranması.
grep -v “root” /var/log/auth.logAuth.log’da “root” kelimesi içermeyen kayıtların seçilmesi.
grep ‘timestamp <date>’ /var/log/syslogLog dosyalarında belirli bir zaman damgası (timestamp) temelinde arama yapılması (örnek kullanım).
grep ‘timestamp >= <date1>’ /var/log/syslog | grep ‘timestamp <= <date2>’Belirli iki tarih arasında zaman damgasına sahip log girdilerinin aranması.
grep ‘error|failed’ /var/log/syslogSyslog’da “error” veya “failed” kelimelerini içeren kayıtların bulunması.
grep ‘username’ /var/log/syslogSyslog’da kullanıcı adı içeren kayıtların aranması.
grep ‘process_name’ /var/log/syslogSyslog’da süreç (process) isimlerinin aranması.
grep ‘source_ip_address’ /var/log/syslogSyslog’da kaynak IP adreslerinin aranması.
grep ‘source_network_range’ /var/log/syslogSyslog’da belirli bir ağ aralığına (source network range) ait kayıtların aranması.
grep “fail” /var/log/messagesMesaj log dosyasında “fail” kelimesi içeren girdilerin aranması.
`grep -E -i “failerror” /var/log/messages`
`grep -E -i “failerror” /var/log/messages | awk ‘{print $1, $2, $5}’`
grep “process_name_or_ID” /var/log/messagesBelirli bir süreç adı veya ID’sine göre mesaj log’larının aranması.
grep “user_name_or_ID” /var/log/messagesBelirli bir kullanıcı adı veya ID’siyle ilgili mesaj log kayıtlarının aranması.
grep “username” /var/log/cronCron log dosyasında belirli bir kullanıcı adının aranması.
grep -v “username” /var/log/cronCron log dosyasında belirli bir kullanıcı adının hariç tutulması.
grep ‘Aug 20.*Aug 21’ /var/log/auth.logAuth.log’da 20 Ağustos ile 21 Ağustos arasındaki kayıtların aranması (örnek tarih aralığı).
grep “session opened for user” /var/log/auth.logAuth.log’da oturum açma (session opened) girişimlerinin tespit edilmesi.
grep “user_name” /var/log/auth.logAuth.log’da belirli bir kullanıcı adına ait kayıtların aranması.
grep “invalid user” /var/log/auth.logAuth.log’da geçersiz (invalid) kullanıcı giriş denemelerinin tespit edilmesi.
grep “permission denied” /var/log/auth.logAuth.log’da izin reddedilen işlemlerin aranması.
grep “username” /var/log/secureSecure log dosyasında belirli bir kullanıcı adının aranması.
grep “sshd.*192\.168\.1\.100” /var/log/secureSecure log’da sshd ile ilgili, 192.168.1.100 IP’sine ait oturum kayıtlarının aranması.
grep “Failed password” /var/log/secureSecure log’da başarısız parola giriş denemelerinin aranması.
grep “Accepted” /var/log/secureSecure log’da başarılı SSH girişlerinin aranması.
grep -i error /var/log/boot.logBoot.log dosyasında hata mesajlarının aranması (büyük/küçük harf duyarsız).
grep -i warning /var/log/boot.logBoot.log dosyasında uyarı mesajlarının aranması.
grep -i network /var/log/boot.logBoot.log dosyasında network ile ilgili kayıtların aranması.
grep -i hardware /var/log/boot.logBoot.log dosyasında donanım (hardware) ile ilgili kayıtların aranması.
grep -i startup /var/log/boot.logBoot.log dosyasında sistem başlangıcı (startup) ile ilgili kayıtların aranması.
grep -i mount /var/log/boot.logBoot.log dosyasında mount ile ilgili işlemlerin aranması.
grep -i error /var/log/dmesgdmesg çıktısında hata mesajlarının aranması.
grep -i warning /var/log/dmesgdmesg çıktısında uyarı mesajlarının aranması.
grep -i device /var/log/dmesgdmesg çıktısında cihaz (device) ile ilgili bilgilerin aranması.
grep -i hardware /var/log/dmesgdmesg çıktısında donanım (hardware) ile ilgili bilgilerin aranması.
grep -i memory /var/log/dmesgdmesg çıktısında bellek (memory) ile ilgili kayıtların aranması.
grep -i file /var/log/dmesgdmesg çıktısında dosya (file) ile ilgili kayıtların aranması.
grep -i delivered /var/log/maillogMaillog’da teslim edilmiş (delivered) e-posta girişlerinin aranması.
grep -i rejected /var/log/maillogMaillog’da reddedilmiş e-posta girişlerinin aranması.
grep -i error /var/log/maillogMaillog’da hata mesajlarının aranması.
grep -i “from=<email>” /var/log/maillogMaillog’da gönderici (from) e-posta adresine göre arama yapılması.
grep -i “to=<email>” /var/log/maillogMaillog’da alıcı (to) e-posta adresine göre arama yapılması.
grep -i smtp /var/log/maillogMaillog’da SMTP ile ilgili kayıtların aranması.
grep -i pop3 /var/log/maillogMaillog’da POP3 ile ilgili girişlerin aranması.
grep -i imap /var/log/maillogMaillog’da IMAP protokolüne ilişkin kayıtların aranması.
grep -i installed /var/log/yum.logYum log’da paket kurulumu (installed) ile ilgili aktivitelerin aranması.
grep -i updated /var/log/yum.logYum log’da paket güncellemelerinin aranması.
grep -i erased /var/log/yum.logYum log’da paket kaldırma (erased) işlemlerinin aranması.
grep -i repo /var/log/yum.logYum log’da depo (repository) bilgilerine ait kayıtların aranması.
grep -i dependency /var/log/yum.logYum log’da paket bağımlılığı (dependency) sorunlarının aranması.
grep -i error /var/log/yum.logYum log’da hata mesajlarının aranması.
grep -i warning /var/log/yum.logYum log’da uyarı mesajlarının aranması.
grep -i “su(” /var/log/sulogSulog dosyasında su komutunun kullanımıyla ilgili kayıtların aranması.
grep -i “su(” /var/log/sulog | grep -i “successful”Sulog dosyasında başarılı su geçişlerinin (successful) aranması.
grep -i “su(” /var/log/sulog | grep -i “failure”Sulog dosyasında başarısız su komutu kullanımının aranması.
grep -i “su(user)” /var/log/sulogSulog dosyasında belirli bir su kullanıcısına ait kayıtların aranması.
grep -i “su(” /var/log/sulog | grep -i “YYYY-MM-DD”Sulog dosyasında belirli bir tarih (YYYY-MM-DD) içeren su komutu girişlerinin aranması.
grep -i “GET” /var/log/httpd/access_logApache access log’da HTTP GET isteklerinin aranması.
grep -i “error” /var/log/httpd/error_logApache error log’da hata mesajlarının aranması.
grep -i “123.45.67.89” /var/log/httpd/access_logApache access log’da belirli bir IP adresine ait isteklerin aranması.
grep -i “/path/to/page” /var/log/httpd/access_logApache access log’da belirli bir sayfa yolunun aranması.
grep -i “curl” /var/log/httpd/access_logApache access log’da curl kullanılarak yapılan isteklerin aranması.
grep -i “Authenticated” /var/log/samba/smbd.logSamba smbd log’da kimlik doğrulama (authenticated) ile ilgili kayıtların aranması.
grep -i “authentication failure” /var/log/samba/smbd.logSamba smbd log’da kimlik doğrulama hatası (authentication failure) içeren girişlerin aranması.
grep -i “username” /var/log/samba/smbd.logSamba smbd log’da belirli bir kullanıcı adına ait kayıtların aranması.
grep -i “123.45.67.89” /var/log/samba/smbd.logSamba smbd log’da belirli IP adresine ilişkin kayıtların aranması.
grep -i “upload” /var/log/samba/smbd.logSamba smbd log’da dosya yükleme (upload) aktivitelerinin aranması.
grep -i “suspicious” /var/log/samba/nmbd.logSamba nmbd log’da şüpheli aktivitelerin aranması.
grep -i “error” /var/log/samba/nmbd.logSamba nmbd log’da hata mesajlarının aranması.
grep “keyword” /var/log/kern.logKernel log’da belirli bir anahtar kelime (keyword) ile ilgili kayıtların aranması.
grep -i “error” /var/log/kern.logKernel log’da hata mesajlarının aranması (büyük/küçük harf duyarsız).
grep “YYYY-MM-DD” /var/log/kern.logKernel log’da belirli bir tarih (YYYY-MM-DD) içeren kayıtların aranması.
grep “module_name” /var/log/kern.logKernel log’da modül isimlerinin aranması.
grep “device_name” /var/log/kern.logKernel log’da cihaz isimlerinin aranması.
grep “IP_address” /var/log/xferlogxferlog dosyasında IP adresi içeren kayıtların aranması.
grep “username” /var/log/xferlogxferlog dosyasında kullanıcı adlarının aranması.
grep “filename” /var/log/xferlogxferlog dosyasında dosya isimlerinin aranması.
grep “YYYY-MM-DD” /var/log/xferlogxferlog dosyasında belirli bir tarih (YYYY-MM-DD) içeren kayıtların aranması.
grep “type” /var/log/xferlogxferlog dosyasında dosya tiplerinin (type) aranması.
awk ‘/Failed password/ {print $1, $2, $3, $(NF-3)}’ /var/log/auth.logAuth.log’da “Failed password” içeren satırlardan tarih, saat ve kaynak IP bilgisinin çıkarılması.
awk ‘$3 >= “12:00:00” && $3 <= “13:00:00” {print $0}’ /var/log/syslogSyslog’da saat 12:00-13:00 arasındaki girişlerin filtrelenmesi.
awk ‘/root/ {print $0}’ /var/log/auth.logAuth.log’da “root” kullanıcısı ile ilişkili tüm kayıtların bulunması.

4. Sonuç: Proaktif Güvenlik için Anomali Tespiti

Linux forensics çalışmaları, sadece saldırı sonrası yapılan analizlerden ibaret olmaktan çıkarak, proaktif güvenlik stratejilerinde de kilit rol oynamaktadır. Anomali tespiti, saldırıları başlamadan önce fark edip müdahale edebilme imkanı sağlarken, sistem güvenliğinin sürekli olarak izlenmesi ve güncellenmesi gerekliliğini de beraberinde getirir.

Gelişmiş log yönetimi, dosya bütünlüğü denetimleri, ağ trafiği analizleri ve bellek tespit tekniklerini entegre eden yaklaşımlar, Linux sistemlerinizi sadece saldırılara karşı dirençli kılmakla kalmaz, aynı zamanda güvenlik olaylarına hızla müdahale etmenizi de sağlar. Güvenlik uzmanları için bu tekniklerin doğru uygulanması, siber saldırıların önlenmesi ve tespitinde hayati bir adım olarak öne çıkmaktadır.