Sızma testlerinde veya şüpheli bir Linux makineyi incelerken ps veya top çıktısında görünmeyen ama arka planda çalışan zararlı süreçlerle karşılaşmak mümkün. Çoğu kişi doğrudan rootkit arayışına girse de, bazen saldırganlar sadece çekirdeğin kullanıcı alanına sunduğu süreç tablosunu manipüle eder.
Linux'ta çalışan her sürecin bir PID numarası vardır ve bu süreçler doğrudan /proc/ dizini altında bir klasör olarak temsil edilir. Örneğin 1337 PID'li bir işlem varsa, /proc/1337 yolu mutlaka var olmalıdır. Klasik kullanıcı araçları (ps, pstree vb.) bilgileri bu dizinden çeker. Bir saldırgan LD_PRELOAD ortam değişkenini kullanarak readdir() sistem çağrısını manipüle ederse veya /proc/PID dizini üzerine boş bir dizini bağlarsa (mount --bind /bos_klasor /proc/1337), ps aracı o süreci görmezden gelir.
Böyle bir durumda şüpheli süreci tespit etmenin en doğrudan yolu, standart araçlara güvenmek yerine /proc dizinindeki ham PID listesiyle araçların gördüğü listeyi kıyaslamaktır:
diff <(ls -d /proc/[0-9]* | awk -F'/' '{print $3}' | sort -n) <(ps -ef | awk 'NR>1 {print $2}' | sort -n)
Çıktıda solda çıkıp sağda çıkmayan bir PID varsa, sistemde standart araçlardan gizlenen aktif bir süreç çalışıyor demektir. Bu PID'nin gerçekte ne yaptığını anlamak için de doğrudan /proc//exe sembolik bağını ve /proc//cmdline dosyasını kontrol etmek gerekir. Basit ama araya giren manipülasyonları doğrudan açığa çıkaran bir yöntem.
Top comments (0)