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
veyarpm -qa --last
komutlarıyla kontrol edin. Beklenmeyen yazılım paketlerini ve sürümlerini araştırın
- Son yüklenen yazılımları
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
veyals -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/Dizin | Ubuntu/Debian Tabanlı | RHEL/CentOS Tabanlı | Arch Linux Tabanlı | SUSE/openSUSE Tabanlı | Analizde Dikkat Edilecekler |
~/.bashrc | Kullanı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_history | Kullanı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/profile | Tü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.bashrc | Global 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_keys | Kullanı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_hosts | Daha ö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/config | Kullanı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;
Kategori | Ubuntu/Debian Tabanlı | RHEL/CentOS Tabanlı | Arch Linux | SUSE/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 kurulabilir | auditd 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önetimi | ps aux, systemctl list-units | ps aux, systemctl list-units | ps aux, systemctl list-units | ps 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, ss | netstat, ss, /var/log/journal | /var/log/messages, netstat, ss |
Journaling | journald kullanımı opsiyonel, rsyslog varsayılan | rsyslog varsayılan, journald eklenebilir | journald varsayılan | journald 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.
Komut | Açıklama |
find / -type f -mtime -5 | less | Son 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 -print | Son 1 gün içinde değiştirilmiş dosyaların yol bilgisini ekrana yazdırır. |
find / -size +10000k -print | 10.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 -print | Root 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.log | auth.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.log | auth.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.log | Belirli 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.log | Son 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 -nr | Apache 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 -nr | HTTP 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/null | Yürütülebilir dosyaların bulunması; hata mesajlarını (izin sorunları vb.) bastırır. |
find / -perm -u=s -type f 2>/dev/null | Setuid 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 -5 | Son 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 .* -print | Kullanıcı ana dizinleri dışındaki gizli (nokta ile başlayan) dizinlerin tespit edilmesi. |
cut -d’ ‘ -f7 apache.log | sort -u | Apache log dosyasında URL alanının çıkarılarak benzersiz değerler halinde listelenmesi. |
ls -al | Web 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 | less | www-data kullanıcısına ait dosyaların bulunması; sonuçların sayfalı görüntülenmesi. |
find / -group GROUPNAME 2>/dev/null | Belirli bir gruba ait dosya ve dizinlerin aranması (GROUPNAME yerine ilgili grup adı girilir). |
find / -perm -o+w 2>/dev/null | Tüm dünya (other) tarafından yazılabilir dosya ve dizinlerin aranması; potansiyel güvenlik açığı kontrolü. |
find / -type f -cmin -5 2>/dev/null | Son 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 -nr | Auth.log’dan başarısız şifre giriş denemelerindeki kaynak IP adreslerinin sayısal analizini yapar. |
grep “useradd” /var/log/syslog | Syslog 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/syslog | Syslog’da CRON işlemlerine ait kayıtların aranması. |
grep “authentication failure” /var/log/auth.log | Authentication (kimlik doğrulama) loglarında “authentication failure” içeren hataların bulunması. |
grep “2025-01-06” /var/log/syslog | Belirli bir tarihte (2025-01-06) oluşan log girdilerinin filtrelenmesi. |
grep -i “error” /var/log/syslog | Syslog’da hata mesajlarının büyük/küçük harf duyarsız aranması. |
grep -v “root” /var/log/auth.log | Auth.log’da “root” kelimesi içermeyen kayıtların seçilmesi. |
grep ‘timestamp <date>’ /var/log/syslog | Log 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/syslog | Syslog’da “error” veya “failed” kelimelerini içeren kayıtların bulunması. |
grep ‘username’ /var/log/syslog | Syslog’da kullanıcı adı içeren kayıtların aranması. |
grep ‘process_name’ /var/log/syslog | Syslog’da süreç (process) isimlerinin aranması. |
grep ‘source_ip_address’ /var/log/syslog | Syslog’da kaynak IP adreslerinin aranması. |
grep ‘source_network_range’ /var/log/syslog | Syslog’da belirli bir ağ aralığına (source network range) ait kayıtların aranması. |
grep “fail” /var/log/messages | Mesaj log dosyasında “fail” kelimesi içeren girdilerin aranması. |
`grep -E -i “fail | error” /var/log/messages` |
`grep -E -i “fail | error” /var/log/messages | awk ‘{print $1, $2, $5}’` |
grep “process_name_or_ID” /var/log/messages | Belirli bir süreç adı veya ID’sine göre mesaj log’larının aranması. |
grep “user_name_or_ID” /var/log/messages | Belirli bir kullanıcı adı veya ID’siyle ilgili mesaj log kayıtlarının aranması. |
grep “username” /var/log/cron | Cron log dosyasında belirli bir kullanıcı adının aranması. |
grep -v “username” /var/log/cron | Cron log dosyasında belirli bir kullanıcı adının hariç tutulması. |
grep ‘Aug 20.*Aug 21’ /var/log/auth.log | Auth.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.log | Auth.log’da oturum açma (session opened) girişimlerinin tespit edilmesi. |
grep “user_name” /var/log/auth.log | Auth.log’da belirli bir kullanıcı adına ait kayıtların aranması. |
grep “invalid user” /var/log/auth.log | Auth.log’da geçersiz (invalid) kullanıcı giriş denemelerinin tespit edilmesi. |
grep “permission denied” /var/log/auth.log | Auth.log’da izin reddedilen işlemlerin aranması. |
grep “username” /var/log/secure | Secure log dosyasında belirli bir kullanıcı adının aranması. |
grep “sshd.*192\.168\.1\.100” /var/log/secure | Secure log’da sshd ile ilgili, 192.168.1.100 IP’sine ait oturum kayıtlarının aranması. |
grep “Failed password” /var/log/secure | Secure log’da başarısız parola giriş denemelerinin aranması. |
grep “Accepted” /var/log/secure | Secure log’da başarılı SSH girişlerinin aranması. |
grep -i error /var/log/boot.log | Boot.log dosyasında hata mesajlarının aranması (büyük/küçük harf duyarsız). |
grep -i warning /var/log/boot.log | Boot.log dosyasında uyarı mesajlarının aranması. |
grep -i network /var/log/boot.log | Boot.log dosyasında network ile ilgili kayıtların aranması. |
grep -i hardware /var/log/boot.log | Boot.log dosyasında donanım (hardware) ile ilgili kayıtların aranması. |
grep -i startup /var/log/boot.log | Boot.log dosyasında sistem başlangıcı (startup) ile ilgili kayıtların aranması. |
grep -i mount /var/log/boot.log | Boot.log dosyasında mount ile ilgili işlemlerin aranması. |
grep -i error /var/log/dmesg | dmesg çıktısında hata mesajlarının aranması. |
grep -i warning /var/log/dmesg | dmesg çıktısında uyarı mesajlarının aranması. |
grep -i device /var/log/dmesg | dmesg çıktısında cihaz (device) ile ilgili bilgilerin aranması. |
grep -i hardware /var/log/dmesg | dmesg çıktısında donanım (hardware) ile ilgili bilgilerin aranması. |
grep -i memory /var/log/dmesg | dmesg çıktısında bellek (memory) ile ilgili kayıtların aranması. |
grep -i file /var/log/dmesg | dmesg çıktısında dosya (file) ile ilgili kayıtların aranması. |
grep -i delivered /var/log/maillog | Maillog’da teslim edilmiş (delivered) e-posta girişlerinin aranması. |
grep -i rejected /var/log/maillog | Maillog’da reddedilmiş e-posta girişlerinin aranması. |
grep -i error /var/log/maillog | Maillog’da hata mesajlarının aranması. |
grep -i “from=<email>” /var/log/maillog | Maillog’da gönderici (from) e-posta adresine göre arama yapılması. |
grep -i “to=<email>” /var/log/maillog | Maillog’da alıcı (to) e-posta adresine göre arama yapılması. |
grep -i smtp /var/log/maillog | Maillog’da SMTP ile ilgili kayıtların aranması. |
grep -i pop3 /var/log/maillog | Maillog’da POP3 ile ilgili girişlerin aranması. |
grep -i imap /var/log/maillog | Maillog’da IMAP protokolüne ilişkin kayıtların aranması. |
grep -i installed /var/log/yum.log | Yum log’da paket kurulumu (installed) ile ilgili aktivitelerin aranması. |
grep -i updated /var/log/yum.log | Yum log’da paket güncellemelerinin aranması. |
grep -i erased /var/log/yum.log | Yum log’da paket kaldırma (erased) işlemlerinin aranması. |
grep -i repo /var/log/yum.log | Yum log’da depo (repository) bilgilerine ait kayıtların aranması. |
grep -i dependency /var/log/yum.log | Yum log’da paket bağımlılığı (dependency) sorunlarının aranması. |
grep -i error /var/log/yum.log | Yum log’da hata mesajlarının aranması. |
grep -i warning /var/log/yum.log | Yum log’da uyarı mesajlarının aranması. |
grep -i “su(” /var/log/sulog | Sulog 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/sulog | Sulog 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_log | Apache access log’da HTTP GET isteklerinin aranması. |
grep -i “error” /var/log/httpd/error_log | Apache error log’da hata mesajlarının aranması. |
grep -i “123.45.67.89” /var/log/httpd/access_log | Apache access log’da belirli bir IP adresine ait isteklerin aranması. |
grep -i “/path/to/page” /var/log/httpd/access_log | Apache access log’da belirli bir sayfa yolunun aranması. |
grep -i “curl” /var/log/httpd/access_log | Apache access log’da curl kullanılarak yapılan isteklerin aranması. |
grep -i “Authenticated” /var/log/samba/smbd.log | Samba smbd log’da kimlik doğrulama (authenticated) ile ilgili kayıtların aranması. |
grep -i “authentication failure” /var/log/samba/smbd.log | Samba smbd log’da kimlik doğrulama hatası (authentication failure) içeren girişlerin aranması. |
grep -i “username” /var/log/samba/smbd.log | Samba smbd log’da belirli bir kullanıcı adına ait kayıtların aranması. |
grep -i “123.45.67.89” /var/log/samba/smbd.log | Samba smbd log’da belirli IP adresine ilişkin kayıtların aranması. |
grep -i “upload” /var/log/samba/smbd.log | Samba smbd log’da dosya yükleme (upload) aktivitelerinin aranması. |
grep -i “suspicious” /var/log/samba/nmbd.log | Samba nmbd log’da şüpheli aktivitelerin aranması. |
grep -i “error” /var/log/samba/nmbd.log | Samba nmbd log’da hata mesajlarının aranması. |
grep “keyword” /var/log/kern.log | Kernel log’da belirli bir anahtar kelime (keyword) ile ilgili kayıtların aranması. |
grep -i “error” /var/log/kern.log | Kernel log’da hata mesajlarının aranması (büyük/küçük harf duyarsız). |
grep “YYYY-MM-DD” /var/log/kern.log | Kernel log’da belirli bir tarih (YYYY-MM-DD) içeren kayıtların aranması. |
grep “module_name” /var/log/kern.log | Kernel log’da modül isimlerinin aranması. |
grep “device_name” /var/log/kern.log | Kernel log’da cihaz isimlerinin aranması. |
grep “IP_address” /var/log/xferlog | xferlog dosyasında IP adresi içeren kayıtların aranması. |
grep “username” /var/log/xferlog | xferlog dosyasında kullanıcı adlarının aranması. |
grep “filename” /var/log/xferlog | xferlog dosyasında dosya isimlerinin aranması. |
grep “YYYY-MM-DD” /var/log/xferlog | xferlog dosyasında belirli bir tarih (YYYY-MM-DD) içeren kayıtların aranması. |
grep “type” /var/log/xferlog | xferlog dosyasında dosya tiplerinin (type) aranması. |
awk ‘/Failed password/ {print $1, $2, $3, $(NF-3)}’ /var/log/auth.log | Auth.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/syslog | Syslog’da saat 12:00-13:00 arasındaki girişlerin filtrelenmesi. |
awk ‘/root/ {print $0}’ /var/log/auth.log | Auth.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.