GNU/Linux >> Znalost Linux >  >> Cent OS

Jak používat auditd ke sledování konkrétního SYSCALL

K SYSCALL dojde vždy, když uživatel provede příkaz, který požaduje, aby jádro Linuxu poskytlo službu. Existuje několik SYSCALL jako mount, umount, kill, open atd. Tyto SYSCALL mohou být monitorovány auditovaným systémem. Vezměme si jako příklad „zabít“ SYSCALL.

Uživatel chce zachytit, kdo zabil určitý proces v systému. Toho lze snadno dosáhnout napsáním auditovaného pravidla, které dokáže zachytit zabití SYSCALL kdykoli je zavoláno.

Instalace a konfigurace auditovaného

auditd je většinou předinstalovaný v distribucích Linuxu. V případě, že není k dispozici, můžete jej nainstalovat pomocí příslušného správce balíčků OS. Například v případě CentOS/RHEL:

# yum install auditd

Povolte auditované službě spuštění při startu a spusťte ji pomocí příkazu „service“.

# systemctl enable auditd
# service start auditd

Konfigurace auditovaného pravidla pro monitorování SYSCALL

Vytvořme pravidlo pro sledování „zabíjení“ SYSCALL, které lze použít k nalezení všech zabíjejících procesů.

1. Přidejte níže uvedené pravidlo do konfiguračního souboru auditovaných pravidel /etc/audit/rules.d/audit.rules :

# vi /etc/audit/rules.d/audit.rules
-a exit,always -F arch=b64 -S kill -k kill_rule
Na CentOS/RHEL 6 je konfigurační soubor /etc/audit/audit.rules místo /etc/audit/rules.d/audit.rules.

Tady,
-výstup,vždy – Tady máme akci a seznam. Kdykoli OS ukončí systémové volání, seznam ukončení bude použit k určení, zda je třeba vygenerovat událost auditu.
-F arch=b64 – Volba -F se používá k vytvoření pole pravidla. B64 znamená, že počítač běží s procesorem x86_64. (Nezáleží na tom, zda je to Intel nebo AMD.)
-S kill – Volba -S určuje systémové volání, které chceme monitorovat.
-k – Toto je název pravidla definovaný uživatelem.

Poznámka :„arch“ je architektura CPU syscall. Pokud je systém 32bitový OS, musíte jej nastavit na „arch=b32“.

2. Restartujte auditovanou službu, aby bylo nové pravidlo účinné.

# service restart auditd

3. Můžete ověřit, zda jsou definovaná pravidla aktivní, pomocí příkazu „auditctl -l“.

# auditctl -l
-a always,exit -F arch=b64 -S kill -F key=kill_rule

Ověřit

Podívejme se na příklad, zda pravidlo, které jsme právě vytvořili, skutečně funguje nebo ne. Jednoduše spustíme proces „spánku 500“ a zabijeme ho. To by mělo vygenerovat protokol auditu se všemi podrobnostmi, jako je kdo zabil proces (uid) jakým programem/příkazem atd.

1. Vytvořte jednoduchý proces spánku na pozadí.

# sleep 600 &

2. Zkontrolujte ID procesu spánku a ukončete jej.

# ps -ef | grep sleep
root      2089  1784  0 15:12 pts/0    00:00:00 sleep 600
# kill -9 2089

3. Zkontrolujte soubor protokolu auditu /var/log/audit/audit.log pro protokoly auditu ukončení. Protokol by měl vypadat podobně jako níže.

# tail -f /var/log/audit/audit.log
type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"
type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep"
type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"

4. Někdy může být obtížné vyhledat protokoly auditu, které nás zajímají. V takovém případě můžete také použít příkaz „ausearch“ s klíčem definovaným v pravidle. Například:

# ausearch -k kill_rule
...
time->Wed Jun 20 15:13:11 2018
type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep"
type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"


Cent OS
  1. Jak zabít proces běžící na konkrétním portu v Linuxu?

  2. Jak používat auditd ke sledování mazání souborů v Linuxu

  3. Jak používat příkaz ldconfig v Linuxu

  1. Jak použít yum k instalaci konkrétní verze balíčku?

  2. Jak povolit pouze konkrétním uživatelům bez oprávnění root používat crontab

  3. Jak používat správce úloh v Ubuntu ke sledování systému

  1. Jak ignorovat/zakázat specifické auditované záznamy protokolování

  2. Jak použít příkaz 'cp' k vyloučení konkrétního adresáře?

  3. jak použít kill SIGUSR2 v bash?