audit ابزاری برای پیگیری تغییرات بر روی فایل ها در سیستم عامل لینوکس، مانند تغییر Attribute ها و یا حذف شدن یک فایل استفاده می شوند. همچنین اگر زمانی یک فایل خوانده شود، یک رکورد در Log مربوطه ثبت خواهد شد. فرض کنید می خواهید پیگیری کنید چه افرادی فایل etc/passwd/ را توسط چه ابزار (مانند tail,head یا vi) در چه زمان و تاریخی خوانده اند. توسط ابزار audit و تعریف یک Rule بر روی فایل مربوطه اطلاعات فوق ثبت می شوند. Audit دارای یک فرایند پس زمینه به نام auditd است که تمامی کنترل های لازم را انجام می دهد.همچنین شامل دو فایل auditd.conf که فایل پیکربندی تنظیمات فرایند پس زمینه auditd و فایل audit.rules که مربوط به تعریف Rule هایی که در زمان Startup خوانده و Load می شوند.
etc/audit/auditd.conf/etc/audit/audit.rules/
اگر audit بر روی سیستم شما نصب نیست توسط دستور های زیر به ترتیب در توزیع های مبتنی بر Redhat و توزیع های مبتنی بر Debian نصب کنید.
apt-get install audityum install audit
اگر از پیش بر روی سیستم شما نصب شده باشد، باید توسط دستور زیر بررسی کنید که آیا فرایند auditd فعال باشد.
ps ax | grep [a]udit
و اگر فعال نبود، با دستور زیر آنرا فعال کنید :
etc/init.d/auditd start/
پس از فعال کردن سرویس، باید Rule ها را تعریف کنیم که یا بصورت دستی و تغییر دادن فایل audit.rules و یا با استفاده از دستور audirctl این کار را انجام می دهیم. دستور زیر با استفاده از auditctl یک Rule بر روی فایل etc/passwd/ تعریف می کند. سوئیچ w- برای معرفی مسیر کامل فایل etc/passwd/ و توسط سوئیچ k- یک Filter Key که یک رشته منحصر به فرد برای شناختن آن Rule است، تعریف می کنیم. توسط این رشته منحصر به فرد، یک Rule خاص را از میان چندین Rule برای گرفتن اطلاعاتی از آن توسط دستور ausearch استفاده می کنیم. جلوی سوئیچ p- یکی از ***** های زیر می اید.
- r : یعنی read. هر وقت فایل خوانده شد نام و گروه اصلی کاربر و زمان و تاریخ و دستوری که با آن فایل را خوانده ثبت می کند.
- w : یعنی write. هر وقت بر روی فایل نوشته شد (تغییر کرد) نام و گروه اصلی کاربر و زمان و تاریخ و دستوری که با آن بر روی فایل نوشته است را ثبت می کند.
- a : یعنی attribute. هر وقت یکی از خصوصیت های فایل تغییر کرد نام و گروه اصلی کاربر تغییر دهنده خصوصیت فایل و زمان و تاریخ تغییر خصوصیت ثبت می کند.
- x : یعنی execute. هر وقت فایلی اجرا شد (مانند اجرای یک اسکریپت) نام و گروه کاربر اجرا کننده و زمان و تاریخ اجرا را ثبت می کند.
بطور مثال دستور زیر توسط auditctl یک Rule تعریف می کند که هر گاه فایل etc/passwd/ خوانده شد یا خصوصیت آن تغییر کرد نام و گروه کاربر و زمان و تاریخ را ثبت می کند. بجای رشته passwd-ra هر رشته دیگری را می توانید جایگزین کنید.
auditctl -w /etc/passwd -k passwd-ra -p ra
روش دیگر برای تعریف یک Rule، تعریف دستی آن درون فایل audit.rules است. با یک ویرایشگر متنی مانند vi فایل را باز کنید.
vi /etc/audit/audit.rules
سپس مطابق شکل زیر Rule هایی را به آن اضافه کنید.توجه کنید که دیگر از دستور auditctl استفاده نکردیم. خطوط زیر از شکل بالا به ترتیب فلیتر های write و attribute را بر روی فایل های group, passwd,shadow و sudoers تعریف می کنند.
w /etc/group -p wa-w /etc/passwd -p wa-w /etc/shadow -p wa-w /etc/sudoers -p wa-
خط آخر که به صورت e 2- نوشته شده است از سوئیچ e- استفاده کرده است. این سوئیج برای دستور auditctl بوده (دیگر سوئیچ های w,p نیز برای همین دستور بودند، مانند مثال پیش از شکل بالا که دیدید). e- یکی از سه عدد زیر را می تواند بگیرد :
- عدد 0 : audit بصورت موقتی Disable می شود.
- عدد 1 : وقتی عدد 1 را می دهید، audit دوباره Enable می شود.
- عدد 2 : وقتی عدد 2 را می دهید، پیکربندی audit قفل (Lock) می شود تا از هرگونه تغییر این فایل (فایل audit.rules) جلوگیری شود. در این فایل e 2- باید آخرین دستور (آخرین خط) باشد.
پس از هر تغییر فایل audit.rules باید سرویس auditd را restart کنید.
etc/init.d/auditd restart/
پس از اعمال و تعریف Rule ها با استفاده از دستور ausearch می توانیم اطلاعاتی از رکورد های ثبت شده را ببینیم. رکورد های ثبت شده که توسط Rule ها ایجاد شده اند در فایل های Log مربوط به سرویس auditd در زیر دایرکتوری var/log/audit/ ذخیره می شوند. دستور زیر توسط سوئیچ k- از میان تمامی رکورد های ثبت شده آن رکورد هایی که رشته Filter Key آنها passwd-ra است را پیدا می کند.
دو خروجی در زیر نشان داده شده است. نخستین خروجی نشان می دهد که فایل etc/passwd/ توسط کاربری با uid=500 و gid=500 در تاریخ Thu Dec 5 0209 2013 توسط دستور tail خوانده است. cwd یعنی current work directory و دایرکتوری است که کاربر از آن دستور tail /etc/passwd را برای خواندن فایل اجرا کرده است. time->Thu Dec 5 0209 2013
type=PATH msg=audit(1386199389.743:27747): item=0 name=”/etc/passwd” inode=132531 dev=08:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1386199389.743:27747):
cwd=”/home/amirnami”
type=SYSCALL msg=audit(1386199389.743:27747): arch=c000003e syscall=2 success=yes exit=3 a0=7fffbc5d28b3 a1=0 a2=0 a3=60 items=1 ppid=17809 pid=17836 auid=0
uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts3 ses=2
comm=”tail” exe=”/usr/bin/tail”subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
key=”passwd-ra“
خروجی زیر نیز با توجه به آنچه که برای خروجی بالا گفته شد قابل درک است.
time->Thu Dec 5 0219 2013
type=PATH msg=audit(1386199399.457:27749): item=0 name=”/etc/passwd” inode=132531 dev=08:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1386199399.457:27749):
cwd=”/root”
type=SYSCALL msg=audit(1386199399.457:27749): arch=c000003e syscall=2 success=yes exit=4 a0=7fcdf03f712a a1=80000 a2=1b6 a3=0 items=1 ppid=17701 pid=17808 auid=0
uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=500 fsgid=0 tty=pts3 ses=2
comm=”su”exe=”/bin/su” subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
key=”passwd-ra“
یا با استفاده از سوئیچ x- از میان رکوردهای audit، آن رکورد هایی که برای یک دستور (executable) خاص هستند را پیدا کنید. در دستور های زیر به ترتیب آن رکورد هایی که برای دستور grep (فایل هایی با این دستور خوانده شده) و یا برای دستور rm (فایل هایی که با این دستور پاک شده اند) را نشان می دهد.
ausearch -x /bin/grepausearch -x /bin/rm
یا با سوئیچ ui- جستجو را بر اساس User ID کاربر (مثلن کاربری با User ID=500) انجام دهید.
ausearch -ui 500
یا می توانید با gi- برای ***** کردن رکورد ها بر اساس یک Group ID میان تمامی رکورد ها جستجو کنید.برای اطلاع بیشتر و خواند راهنما، دستورهای زیر را اجرا کنید :
man auditdman auditd.confsman audit.rulesman man auditctlman ausearch