Product SiteDocumentation Site

14.3. نظارت: پیشگیری، شناسایی، بازدارندگی

مانیتورینگ، بنا بر دلایل مختلف، یک بخش جدایی ناپذیر از هر خط مشی امنیتی به حساب می‌آید. از میان آن‌ها، نه تنها هدف امنیت محدود به ضمانت از محرمانگی داده نیست، بلکه شامل دسترسی به سرویس‌ها نیز می‌باشد. پس ضروری است که از عملکرد صحیح اجزا اطلاع داشته و بتوان در گذر زمان هر گونه انحراف یا تغییر در کیفیت خدمات را تشخیص دهیم. مانیتورینگ می‌تواند به شناسایی تلاش به نفوذ و فعال‌سازی یک اقدام سریع قبل از اینکه عواقب جبران ناپذیر اتفاق بیفتد، کمک کند. این قسمت به بررسی چندین ابزار می‌پردازد که جنبه‌های مختلف مانیتورینگ در یک سیستم دبیان را شامل می‌شوند. از این رو، کامل کننده قسمت 12.4, “مانیتورینگ” به حساب می‌آید.

14.3.1. مانیتورینگ گزارش‌ها با استفاده از logcheck

برنامه logcheck به صورت پیشفرض در هر ساعت به فایل‌های گزارش نظارت کرده و پیام‌های گزارش غیر معمول را از طریق ایمیل به مدیر سیستم برای تحلیل بیشتر ارسال می‌کند.
فهرستی از فایل‌های نظارت شده در /etc/logcheck/logcheck.logfiles ذخیره‌سازی می‌گردد؛ مقادیر پیشفرض در صورتی کار می‌کنند که فایل /etc/rsyslog.conf به صورت کامل بازسازی نشده باشد.
logcheck می‌تواند در یکی از سه حالت موجود کار کند: paranoid، server و workstation. حالت اول شامل جزئیات بسیاری است که تنها باید در مورد سرورهایی نظیر فایروال استفاده گردد. حالت دوم (و پیشفرض) برای اکثر سرورها توصیه می‌شود. حالت آخر نیز در مورد رایانه‌های رومیزی کاربرد دارد که شامل جزئیات کمتری می‌شود (پیام‌های بیشتری را فیلتر می‌کند).
در هر سه مورد، logcheck به منظور پیشگیری از پیام‌های اضافی باید سفارشی‌سازی گردد (مبتنی بر سرویس‌های نصب شده)، مگر اینکه مدیر سیستم بخواهد به صورت ساعتی فهرستی از ایمیل‌های طولانی و ناخواسته را مشاهده کند. از آنجا که مکانیزم انتخاب پیام به قدری پیچیده است، مطالعه /usr/share/doc/logcheck-database/README.logcheck-database.gz به شدت توصیه می‌شود.
قوانین اعمال شده می‌توانند به چندین نوع تقسیم شوند:
  • آن‌هایی که صلاحیت یک پیام را به عنوان تلاش برای نفوذ در نظر می‌گیرند (که در دایرکتوری /etc/logcheck/cracking.d/ ذخیره‌سازی می‌شوند)؛
  • آن‌هایی که این صلاحیت را نادیده می‌گیرند (/etc/logcheck/cracking.ignore.d/
  • آن‌هایی که یک پیام را به عنوان هشدار امنیتی طبقه‌بندی می‌کنند (/etc/logcheck/violations.d/
  • آن‌هایی که این طبقه‌بندی را نادیده می‌گیرند (/etc/logcheck/violations.ignore.d/
  • در نهایت، آن‌هایی که به پیام‌های باقیمانده اعمال می‌شوند (که به عنوان رویدادهای سیستمی شناخته می‌شوند).
یک رویداد سیستمی همیشه ارسال می‌شود مگر یکی از قوانین موجود در دایرکتوری‌های /etc/logcheck/ignore.d.{paranoid,server,workstation}/ بگوید که این رویداد نادیده گرفته شود. البته، تنها دایرکتوری‌هایی به حساب می‌آیند که سطح گزارش برابر یا بیشتر از حالت عملیاتی انتخابی داشته باشند.

14.3.2. فعالیت مانیتورینگ

14.3.2.1. در زمان حقیقی

top یک ابزار تعاملی است که فهرستی از فرآیندهای در حال اجرا را نمایش می‌دهد. مرتب‌سازی پیشفرض آن مبتنی بر میزان استفاده فعلی از پردازنده است که می‌تواند با کلید P مشخص گردد. سایر انواع مرتب‌سازی شامل حافظه مصرفی (کلید M)، زمان کلی پردازنده (کلید T) و شناسه فرآیند (کلید N) می‌باشند. کلید k اجازه نابودی یک فرآیند با وارد کردن شناسه‌اش را فراهم می‌کند. کلید r امکان renice یک فرآیند را فراهم می‌کند، که همان تغییر اولویت در اجرا است.
When the system seems to be overloaded, top is a great tool to see which processes are competing for processor time or consume too much memory. In particular, it is often interesting to check if the processes consuming resources match the real services that the machine is known to host. An unknown process running as the www-data user should really stand out and be investigated, since it is probably an instance of software installed and executed on the system through a vulnerability in a web application.
top ابزار بسیار منعطفی است و صفحه راهنمای آن جزئیات بیشتری را درباره سفارشی‌کردن برای نیازهای خاص کاربر نمایش می‌دهد.
ابزار گرافیکی gnome-system-monitor مشابه با top بوده که تقریبا همان ویژگی‌ها را فراهم می‌کند.

14.3.2.2. تاریخچه

بار پردازنده، ترافیک شبکه و فضای آزاد دیسک اطلاعاتی هستند که به صورت مداوم در حال تغییر می‌باشند. نگهداری تاریخچه‌ای از میزان مصرف آن‌ها درک خوبی از چگونگی کارکرد رایانه را در اختیار ما قرار می‌دهد.
ابزار اختصاصی متفاوتی برای این منظور وجود دارد. اغلب آن‌ها می‌توانند با استفاده از SNMP یا Simple Network Management Protocol اطلاعات را به صورت مرکزی دریافت کنند. یک مزیت اینکار دریافت داده از عناصر شبکه‌ای است که رایانه‌های همه منظوره به حساب نمی‌آیند، از جمله مسیریاب‌ها یا سوئیچ‌های شبکه.
This book deals with Munin in some detail (see قسمت 12.4.1, “راه‌اندازی Munin” ) as part of فصل 12: “مدیریت پیشرفته. Debian also provides a similar tool, cacti. Its deployment is slightly more complex, since it is based solely on SNMP. Despite having a web interface, grasping the concepts involved in configuration still requires some effort. Reading the HTML documentation (/usr/share/doc/cacti/html/Table-of-Contents.html) should be considered a prerequisite.

14.3.3. Avoiding Intrusion

Attackers try to get access to servers by guessing passwords, which is why strong passwords must always be used. Even then, you should also establish measures against brute-force attacks. A brute-force attack is an attempt to log into an unauthorized software system by performing multiple login attempts in a short period of time.
The best way to stop a brute-force attack is to limit the number of login attempts coming from the same origin, usually by temporarily banning an IP address.
Fail2Ban is an intrusion prevention software suite that can be configured to monitor any service that writes login attempts to a log file. It can be found in the package fail2ban.
Fail2Ban is configured through a simple protocol by fail2ban-client, which also reads configuration files and issues corresponding configuration commands to the server, fail2ban-server. It has four configuration file types, all stored in /etc/fail2ban/:
  • fail2ban.conf. Global configuration (such as logging).
  • filter.d/*.conf. Filters specifying how to detect authentication failures. The Debian package already contains filters for many common programs.
  • action.d/*.conf. Actions defining the commands for banning and “unbanning“ of IP addresses.
  • jail.conf. It is where jails, the combinations of filters and actions, are defined.
Let us have a look at the configuration of sshd in /etc/fail2ban/jail.conf to better understand how Fail2Ban works...
[...]
[DEFAULT]
[...]
bantime   = 10m
[...]
findtime  = 10m
[...]
maxretry  = 5
[...]
[sshd]
port     = ssh
logpath  = %(sshd_log)s
backend  = %(sshd_backend)s
Fail2Ban will check for failed login attempts for sshd using Python regular expressions defined in /etc/fail2ban/filter.d/sshd.conf against the log file of sshd, which is defined in the variable sshd_log in the file /etc/fail2ban/paths-common.conf. If Fail2Ban detects five failed login attempts within 10 minutes, it will ban the IP address where those attempts originated for 10 minutes.
To enable, disable, or configure “jails“, the main configuration file /etc/fail2ban/jail.conf is not supposed to be altered. Instead this is supposed to be done in /etc/fail2ban/jail.d/defaults-debian.conf or files within the same directory.
Fail2Ban is a very simple and effective way to protect against the most common brute-force attacks, but it cannot protect against distributed brute-force attacks, which is when an attacker uses a large number of machines spread around the Internet.
A good way to provide extra protection against distributed brute force attacks is to artificially increase the login time after each failed attempt.

14.3.4. تشخیص تغییرات

Once the system is installed and configured, and barring security upgrades, there is usually no reason for most of the files and directories to evolve, data excepted. It is therefore interesting to make sure that files actually do not change: any unexpected change would therefore be worth investigating. This section presents a few tools able to monitor files and to warn the administrator when an unexpected change occurs (or simply to list such changes).

14.3.4.1. بازرسی بسته‌ها با استفاده از dpkg --verify

dpkg --verify یا dpkg -V ابزار جالبی است چرا که امکان جستجوی فایل‌های تغییر یافته از زمان نصب را فراهم می‌کند (که احتمالا توسط مهاجم تغییر یافته‌اند) اما اینکار باید با احتیاط بیشتری صورت پذیرد. برای اینکه بتواند کار خود را انجام دهد نیازمند checksum ذخیره‌سازی شده در پایگاه‌داده dpkg روی هارد دیسک می‌باشد (این فایل‌ها می‌توانند در /var/lib/dpkg/info/package.md5sums پیدا شوند)؛ یک مهاجم بالقوه با بروزرسانی این فایل‌ها از تشخیص فایل‌های تغییر یافته جلوگیری بعمل می‌آورد.
اجرای dpkg -V تمام بسته‌های نصب شده را مورد بررسی قرار داده و به ازای هر کدام که در این آزمون شکست بخورند در خط جداگانه‌ای نمایش داده می‌شود. قالب خروجی مشابه با rpm -V است که در آن هر کاراکتر بیانگر یک آزمون روی اطلاعات جانبی بسته است. متاسفانه dpkg اطلاعات جانبی مورد نیاز بسته را ذخیره‌سازی نمی‌کند و آن‌ها را به صورت علامت سوال در خروجی نمایش می‌دهد. در حال حاضر تنها آزمون checksum منجر به تولید "5" در سومین کاراکتر آن (زمانی که شکست بخورد) می‌شود.
# dpkg -V
??5??????   /lib/systemd/system/ssh.service
??5?????? c /etc/libvirt/qemu/networks/default.xml
??5?????? c /etc/lvm/lvm.conf
??5?????? c /etc/salt/roster
In the sample above, dpkg reports a change to SSH's service file that the administrator made to the packaged file instead of using an appropriate /etc/systemd/system/ssh.service.d/override.conf override (which would be stored below /etc like any configuration change should be). It also lists multiple configuration files (identified by the "c" letter on the second field) that had been legitimately modified.

14.3.4.2. بازرسی بسته‌ها: debsums و محدودیت‌های آن

debsums is the ancestor of dpkg -V and is thus mostly obsolete. It suffers from the same limitations than dpkg. Fortunately, some of the limitations can be worked-around (whereas dpkg does not offer similar workarounds).
از آنجا که نمی‌توان به داده روی دیسک اعتماد کرد، debsums پیشنهاد می‌کند که بجای پایگاه‌داده dpkg از فایل‌های .deb به منظور آزمون استفاده شود. برای دانلود فایل‌های .deb بسته‌های نصب شده، می‌توان روی مکانیزم احرازهویت APT حساب باز کرد. این عملیات می‌تواند کند و خسته‌کننده باشد، پس نباید به عنوان تکنیکی موثر به صورت روزانه مورد استفاده قرار گیرد.
# apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
# debsums -p /var/cache/apt/archives --generate=all
به یاد داشته باشید که در این مثال از دستور grep-status واقع در بسته dctrl-tools استفاده شده است، که به صورت پیشفرض نصب نمی‌باشد.
debsums can be run frequently as a cronjob setting CRON_CHECK in /etc/default/debsums. To ignore certain files outside the /etc directory, which have been altered on purpose or which are expected to change (like /usr/share/misc/pci.ids) you can add them to /etc/debsums-ignore.

14.3.4.3. مانیتورینگ فایل‌ها: AIDE

ابزار AIDE یا Advanced Intrusion Detection Environment امکان بررسی جامعیت فایل را فراهم می‌کند و هرگونه تغییر مقابل image نسخه پیشین از سیستم معتبر را تشخیص می‌دهد. این image به عنوان یک پایگاه‌داده ذخیره‌سازی می‌شود (/var/lib/aide/aide.db) که شامل اطلاعات مرتبط درباره تمام فایل‌های سیستم است (اثرانگشت‌ّها، مجوزها، بازه‌های زمانی و از این قبیل). این پایگاه‌داده ابتدا توسط aideinit راه‌اندازی می‌شود؛ سپس به صورت روزانه توسط اسکریپت /etc/cron.daily/aide به منظور بررسی برای عدم تغییر فایل‌های مرتبط استفاده می‌گردد. زمانی که تغییر تشخیص داده شود، AIDE آن‌ها را در فایل‌های گزارش (/var/log/aide/*.log) ثبت کرده و مشاهدات خود ار از طریق ایمیل برای مدیر سیستم ارسال می‌کند.
گزینه‌های بسیاری در /etc/default/aide وجود دارد که می‌تواند برای تغییر عملکرد بسته aide مورد استفاده قرار گیرد. فایل‌های پیکربندی AIDE در /etc/aide/aide.conf و /etc/aide/aide.conf.d/ ذخیره‌سازی شده‌اند (در حقیقت، این فایل‌ها تنها توسط update-aide.conf برای تولید /var/lib/aide/aide.conf.autogenerated مورد استفاده قرار می‌گیرند). پیکربندی شامل ویژگی‌های خاص هر فایل می‌باشد که باید مورد بررسی قرار گیرند. برای نمونه، محتوای فایل‌های گزارش به صورت مداوم تغییر می‌یابد و اینگونه تغییرات مادامی که مجوزهای این فایل‌ها تغییر نکند می‌توانند نادیده گرفته شوند، اما هر دو محتوا و مجوزهای برنامه‌های اجرایی باید ثابت باقی بمانند. با اینکه ساختار پیچیده‌ای ندارد، شیوه نگارش پیکربندی آن نیز ساده نیست و مطالعه صفحه راهنمای aide.conf(5) توصیه می‌گردد.
یک نسخه جدید از پایگاه‌داده به صورت روزانه در /var/lib/aide/aide.db.new تولید می‌شود؛ اگر تمام تغییرات ثبت شده قانونی باشند، می‌تواند جایگزین پایگاه‌داده مرجع شود.

14.3.5. تشخیص نفوذ (IDS/NIDS)

suricata (in the Debian package of the same name) is an NIDS — a Network Intrusion Detection System. Its function is to listen to the network and try to detect infiltration attempts and/or hostile acts (including denial of service attacks). All these events are logged in multiple files in /var/log/suricata. There are third party tools (Kibana/logstash) to better browse all the data collected.
Configuring suricata involves reviewing and editing /etc/suricata/suricata.yaml, which is very long because each parameter is abundantly commented. A minimal configuration requires describing the range of addresses that the local network covers (HOME_NET parameter). In practice, this means the set of all potential attack targets. But getting the most of it requires reading it in full and adapting it to the local situation.
On top of this, you should also edit it to define the network interface. You might also want to set LISTENMODE=pcap because the default LISTENMODE=nfqueue requires further configuration to work properly (the netfilter firewall must be configured to pass packets to some user-space queue handled by suricata via the NFQUEUE target).
To detect bad behavior, suricata needs a set of monitoring rules: you can find such rules in the snort-rules-default package. snort is the historical reference in the IDS ecosystem and suricata is able to reuse rules written for it.
Alternatively, oinkmaster (in the package of the same name) can be used to download Snort rule sets from external sources.