Falco را همچون ابزاری برای Kubernetes می‌شناسند، و تقریباً هر راهنمایی درباره‌اش برای خوشه‌ها نوشته شده. اما به خوشه‌ها بسته نیست: فراخوان‌های سامانه را پایش می‌کند، و روی سروری معمولی که سایتی دارد این دقیقاً به همان شیوه کار می‌کند. تنها اینکه درباره این حالت تقریباً کسی نمی‌نویسد.

و آنجا سودمند است که ابزارهای دیگر خاموش‌اند. وب‌شل روی سایت هیچ مجوزی را نقض نمی‌کند، ورود ناموفقی نمی‌سازد، و اگر با دست نوشته شده باشد با هیچ امضایی همخوان نیست. اما رفتاری دارد که برای وب‌سرور نابهنجار است: فرایند PHP-FPM پوسته‌ای اجرا می‌کند. و همین است آنچه Falco می‌بیند.

چه چیزی را می‌بیند

رویدادهای معمول روی سروری عادی:

  • پوسته‌ای که وب‌سرور یا فرایند PHP زاده — عملاً نشانه‌ای بی‌ابهام از وب‌شل؛
  • برنامه‌ای که از /tmp یا /dev/shm یا /var/tmp اجرا شده؛
  • خواندن فایل‌های حساس (/etc/shadow، کلیدهای خصوصی) به‌دست فرایندی که کاری با آن‌ها ندارد؛
  • تغییر فایل‌های دودویی سامانه؛
  • اتصال خروجی از فرایندی که نباید از شبکه استفاده کند.

نصب

گزینش کلیدی هنگام نصب انجام می‌شود: Falco فراخوان‌های سامانه را چگونه می‌گیرد. گزینه امروزی بر eBPF استوار است و نه ساخت پیمانه هسته می‌خواهد و نه سرایندهای هسته:

sudo falcoctl driver config --type modern_ebpf
sudo systemctl restart falco

پیمانه هسته کلاسیک سرایند می‌خواهد و پس از هر به‌روزرسانی هسته بازساخته می‌شود — و روی سروری که به‌روزرسانی‌ها خودکار نصب می‌شوند این سرچشمه‌ای تکرارشونده برای سرویسی مرده است. اگر هسته به‌اندازه کافی تازه است (۵٫۸ و بالاتر) eBPF را برگزینید و این مسئله را فراموش کنید.

برای اطمینان از اینکه رویدادها واقعاً می‌رسند:

sudo systemctl status falco
sudo journalctl -u falco -n 50

نویز و برداشتنش

و این کار اصلی است. مجموعه قواعد استاندارد رو به محیط‌های ظرف دارد، و روی سروری معمولی بخش چشمگیری از آن یا کاربردی نیست یا پیوسته فعال می‌شود.

قواعد فرستاده‌شده (/etc/falco/falco_rules.yaml) ویرایش نمی‌شوند — فایل هنگام به‌روزرسانی جایگزین می‌گردد. تغییرهای شما به /etc/falco/falco_rules.local.yaml می‌روند، و قواعد ناخواسته هم همان‌جا خاموش می‌شوند:

- rule: Terminal shell in container
  enabled: false

آنچه معمولاً روی سروری بدون ظرف نیاز به تنظیم دارد:

  • همه قواعد ظرف — بدون ظرف تنها در گزارش جا می‌گیرند؛
  • «Write below etc» — در هر نصب بسته و در هر ویرایش شما روی فایلی از پیکربندی فعال می‌شود. و به استثنایی برای apt و dpkg و unattended-upgrades نیاز دارد، وگرنه رویدادها سیل‌آسا می‌آیند؛
  • «Read sensitive file untrusted» — روی عامل‌های پایش و ابزارهای پشتیبان‌گیری و ابزارهای ممیزی مانند Lynis فعال می‌شود؛
  • اجرا از پوشه‌های موقت — استثناهای مشروع هست: ساخت برنامه‌ای، یا مرورگری خودکار که راه‌اندازی را در پوشه‌ای موقت باز می‌کند. چنین رویدادهایی نگران‌کننده به نظر می‌رسند اما توضیح‌پذیرند، و ارزش دارد بی‌درنگ برای همان مسیر مشخص استثنایی بیفزایید نه اینکه هر بار از نو دریابیدش.

ترتیب معقول همان است که با هر ابزار شناسایی دیگر: هفته نخست تنها پایش کنید و استثنا بیفزایید، و تنها پس از آن رویدادی را که پیدا می‌شود نشانه بشمارید. و قاعده ساده است — اگر گزارش مرتب رویدادهایی دارد که نمی‌خوانید، برای شما هیچ کاری نمی‌کند.

رویدادها را کجا بفرستیم

خروجی در /etc/falco/falco.yaml تنظیم می‌شود: فایل، ژورنال سامانه، یا لوله‌کردن به برنامه‌ای بیرونی. و برای یک سرور فایلی با چرخش پس از آن بس است — چرخش را فراموش نکنید، فایل رویدادها مانند هر گزارش دیگری رشد می‌کند و به‌صورت پیش‌فرض کسی پایشش نمی‌کند.

و ارزش دارد از اولویت‌ها برای جداسازی استفاده کنید: رویدادهای بحرانی به جایی بروند که بی‌درنگ می‌بینیدشان، و بقیه به ژورنال عمومی برای بررسی بعدی.

Falco و auditd یکی نیستند

هر دو فراخوان‌های سامانه را پایش می‌کنند، اما با هدف‌هایی متفاوت. auditd آنچه را رخ می‌دهد ثبت می‌کند تا تصویر بعدها بازسازی شود: چیزی را ارزیابی نمی‌کند و از چیزی گزارش نمی‌دهد، ژورنالی نگه می‌دارد. اما Falco قواعد را در لحظه رویداد اعمال می‌کند و می‌گوید «این مشکوک به نظر می‌رسد» — یعنی نشانه‌ای می‌دهد نه ثبتی.

و نگه‌داشتن هر دو معقول است: ژورنال برای بازسازی و نشانه‌ها برای واکنش. اگر باید یکی را برگزینید، auditd روی سروری سودمندتر است که بازسازی ترتیب رویدادها پس از یک رخداد بیش از همه اهمیت دارد؛ و Falco آنجا که نشانه‌ای زودهنگام درباره استخراج‌کننده‌ای در حال اجرا یا وب‌شلی می‌خواهید.

آیا روی سروری کوچک ارزش جا گرفتن دارد

پاسخ صادقانه: نه همیشه. Falco فراخوان‌های سامانه را پردازش می‌کند و روی ماشینی شلوغ اثرش بر پردازنده محسوس است. و اگر روی سرور یک سایت است و هنوز نه پایش یکپارچگی دارید و نه به‌روزرسانی خودکار درست‌وحسابی، آغاز از اینجا نیست.

لحظه‌اش بعدتر می‌رسد — پس از آنکه پایه‌ها انجام شد و تنها این پرسش ماند که روی سرور چه می‌گذرد که گزارش‌ها نشانش نمی‌دهند. و یک دسته از رویدادها را بهتر از همه دیگران روی هم پوشش می‌دهد: پوسته‌ای که فرایند وب‌سرور اجرایش کرده است. شکل رویدادها جداشده بر پایه اولویت و قاعده را صفحه نمایشی پایین نشان می‌دهد.