Bir işlem ve tüm torunları tarafından yapılan tüm sistem çağrılarını auditd ile kaydetme


13

Yapabilirim

auditctl -a always,exit -S all -F pid=1234

Pid 1234 ve tarafından yapılan tüm sistem çağrılarını günlüğe kaydetmek için:

auditctl -a always,exit -S all -F ppid=1234

Çocukları için, ama büyük çocukları ve onların çocuklarını da (şimdiki ve gelecek) nasıl ele alacağım?

Değişen (e) uid / (e) gid'e güvenemem.

(kullanmanın straceda bir seçenek olmadığını unutmayın )


4
omg, omg, omg, Stephane bir soru soruyor ... (Buraya sadece başlıktan geldim, düşünerek strace -s^^ ama sonra kimin sorduğunu gördüm ve hemen "zaten biliyor!" belki: 1) ps "ağaç" seçeneğini kullanarak pids listesini oluşturmak, 2) ağaçta listelenen tüm pids üzerinde denetimctl (ler) başlatmak? (yani, birden fazla "pid = ...."? veya birden fazla denetleyici, her biri bir arada olabilir mi?) veya "aptal" yol: her şeyi denetlemek ve "pid | pid | pid" durumunda bir tür egrep her satırda görünüyorlar mı?) (ihtar: Linux atm'ye erişimim yok, bu yüzden infos'un nasıl göründüğü hakkında hiçbir fikrim yok)
Olivier Dulac

Kullanabileceğiniz bir hile (bir kez daha, denetimin özelliklerini bilmiyorum ya da şu anda deneyebilirim): en üstteki ebeveyn başlatılırken belirli bir ortam değişkeni belirtin ve bu değişken kümesine sahip tüm süreçleri denetleyin?
Olivier Dulac

@OlivierDulac, süreci bir şekilde işaretlemek (çocuklar tarafından miras alınan) aklıma gelen bir şey. Ancak denetim kurallarının eşleşebileceği şeylerin listesi oldukça incedir (sid, pgid ... bile değil). Belki SELinux olanlar, ama SELinux hakkında ilk şeyi bilmiyorum. Belki isim alanlarını işlemek?
Stéphane Chazelas

belki de en üstteki ebeveyn kendi süreç grubunda olabilir? ( en.wikipedia.org/wiki/Process_group )
Olivier Dulac

2
Belki sizin için bir seçenekse, programınızı belirli bir kapta çalıştırmayı düşündüm. Ben anlıyorsanız bu hata ipliği doğru, bu bir kernel ≥3.13 ile çalışmalıdır. Bunun dışında SELinux ve denetim UID'si dışında bir yöntem göremiyorum . AUID, kullanım durumunuz için geçerli olur mu?
Gilles 'SO- şeytan olmayı bırak'

Yanıtlar:


1

Şu anda denemek için herhangi bir yolu olmayan bir şey önermek ... ama sadece yazının kendisinden tahmin etmek

İşte bir çözüm önerisi:

En üstteki işlem kimliğinin $ pid olduğu ve linux ps -Tüzerindeki süreçlerin ağacını verdiğini varsayarsak (şu anda linux'a erişemiyorum)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

Tabii ki, ps -T "$pid"linux eşdeğeriyle değiştirin , eğer linux üzerinde çalışmazsa (veya "pstree -p" çıktısını uyandırarak bulursanız, pid parantez arasında olacaktır)


2
Teşekkürler, ama bu "gelecekteki" çocukları kapsamaz ve bunu bir döngüde çalıştırmak kısa ömürlü süreçleri kapsamaz. Ayrıca pid yeniden kullanımı da soruna neden olur.
Stéphane Chazelas

geçerli tüm noktalar ... O zaman istediğiniz şeyin muhtemelen bir "en çok aranan" özellik olduğuna inanıyorum ve bu nedenle auditctl düzeyinde zaten mevcut olabilir (ama kesinlikle şu anda manpage'de görünmüyor): gelecekteki bir sürüm için önerilecek (veya ... yazılacak). İşlemlerin "bir ağacını takip etmenin" bir yolunu hatırlamıyorum ... ama belki birer birer uygulayabilirsiniz. pid ölür) (yapmak çok zor değil)
Olivier Dulac

1
(son yorumum çok kısa ömürlü süreçler için pb'yi çözmüyor ... bunun çekirdek düzeyinde bir şeye ihtiyacı olabilir ve bunun için bir şey olup olmadığını size söyleyecek kadar bilgim yok. Çekirdek posta listeleri)
Olivier Dulac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.