Access Log
مقاله
  • ۲۹ بهمن ۱۴۰۲
  • CYBERSECURITY 101
  • ۸ دقیقه خواندن

Access Log

لاگ دسترسی، یک فایل لاگ است که تمام وقایع مرتبط با کلاینت‌اپلیکیشن‌ها و دسترسی‌های کاربران به یک منبع در کامپیوتر را ثبت می‌کند. به‌عنوان مثال، لاگ دسترسی ممکن است شامل لاگ‌های مرتبط با دسترسی به وب‌سرور، لاگ‌های دستورات FTP یا لاگ‌ Queryهای یک پایگاه داده باشد.

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

به‌طور معمول لاگ‌های دسترسی شامل بعضی اطلاعات رایج می‌شوند. برای نمونه:

  • تاریخ و زمان دسترسی کلاینت
  • آدرس IP کلاینت یا نام‌ میزبان
  • نام کاربری
  • وضعیت یا بحرانی بودن رویداد
  • موفقیت یا شکست در عملیات
  • هرگونه پیام مرتبط

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

انواع لاگ‌های دسترسی

به‌‌صورت کلی می‌توانیم لاگ‌های دسترسی را ‌به سه دسته‌ی اصلی زیر طبقه‌بندی کنیم:

  • لاگ‌های فعالیت
  • لاگ‌های دسترسی به سرور
  • لاگ‌های خطا

لاگ‌های فعالیت

کلیه‌ی اقداماتی را که در طول یک نشست یا Session توسط کاربر انجام شده است، ثبت می‌کنند. چنین فعالیت‌هایی، اجرای دستورات، بازدید از URL‌ها و دسترسی به فایل‌ها را شامل می‌شود. برخی از نمونه‌های لاگ‌های فعالیت عبارت‌اند از:

  • لاگ Query عمومی MySQL
  • لاگ فعالیت Azure
  • لاگ دسترسی به وب‌سرور Apache
  • لاگ‌های ممیزی اکتیو دایرکتوری

لاگ‌های دسترسی به سرور

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

  • Linux Lastlog
  • لاگ امنیتی ویندوز
  • لاگ دسترسی به سرور AWS S3 Bucket
  • لاگ دسترسی به سرور Oracle Directory
  • ممیزی‌های ورود SQL Server

لاگ‌های خطا

شامل اطلاعاتی هستند که در خطاهای مربوط به نشست‌های کلاینت رخ می‌دهند. این لاگ‌ها برای ایرادیابی خطاهای برنامه و سامانه مفید هستند. برای مثال:

  • Nginx error log
  • IBM z/Transaction Processing Facility system error log

برای ساده‌تر کردن موضوع، در این مقاله تمرکز خود را بر لاگ‌های دسترسی وب‌سرور قرار خواهیم داد. به‌طور معمول، لاگ‌های دسترسی وب‌سرور شامل سه نوع اطلاعات (دسترسی کاربر، فعالیت کاربران و خطاهای درخواست) هستند.

چرا باید لاگ‌ دسترسی را ثبت کنیم؟

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

مهندسان امنیتی نیز از لاگ‌های دسترسی وب‌سرور برای یافتن رفتارهای  نامعمول استفاده می‌کنند. به‌عنوان مثال، می‌توان به افزایش غیرمنتظره‌ی درخواست‌های HTTP GET از یک محدوده‌ی آدرس IP خاص اشاره کرد. این وضعیت ممکن است نشانگر حمله‌ی DDoS از مجموعه کامپیوترهای قربانی‌شده باشد، یا اگر وب‌سرور فقط باید ترافیک HTTP/HTTPS را از فایروال برنامه‌ی وب قبول کند، درخواست‌های مستقیم HTTP از آدرس IP دیگر، ممکن است نشانگر دسترسی غیرمجاز باشد.

گزارش دسترسی شامل چه مواردی است؟

به‌طور معمول، گزارش دسترسی به وب‌سرور، شامل اطلاعات زیر است:

تاریخ و ساعت دسترسی به سایت یا صفحه، که ممکن است به UTC یا به وقت محلی وب‌سرور باشد. Date and time
آدرس IP دستگاه کلاینت. Source IP
آدرس IP وب‌سرور. Destination IP
نام کامل دامنه‌ی وب‌سرور. Destination FQDN
پورت درخواستی در وب‌سرور که به‌طور معمول 80 (پیش‌فرض برای HTTP) یا 443 (پیش‌فرض برای HTTPS) است؛ اما بسته به پورتی که وب‌سایت در‌حال اجرا است، ممکن است
هر‌ چیزی باشد.
Destination port
پروتکل شبکه‌ی دسترسی کلاینت، یک مثال معمولی HTTP 1.1 است. Protocol
دسترسی کاربر به وب‌سایت (اگر ناشناس باشد، با خط فاصله مشخص می‌شود). Username
صفحه یا عنصر درخواست‌شده. Resource
این روش درخواست HTTP (مانند GET ،POST و غیره). HTTP method
کد وضعیت بازگردانده‌شده توسط وب‌سرور (مانند 200 OK ،404 Page Not Found و غیره). HTTP status code
درخواست برنامه، به‌عنوان بخشی از درخواست HTTP به وب‌سایت ارسال می‌شود. URI Query
آدرس IP یا URL که کلاینت را به این وب‌سایت هدایت می‌کند. HTTP referrer
نوع و نسخه‌ی مرورگر کلاینت. HTTP user agent
تعداد بایت‌های دریافت‌شده توسط وب‌سرور از کلاینت. Bytes received
تعداد بایت‌های ارسال‌شده توسط وب‌سرور به کلاینت. Bytes sent

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

116.35.41.41 - - [21/May/2022:11:22:41 +0000] "GET/aboutus.html HTTP
/1.1" 200 6430 "https://34.227.9.153/" "Mozilla/
5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15"

در اینجا، لاگ دسترسی یک درخواست کلاینت از آدرس IP 116.35.41.41 در تاریخ ۲۱ مه ۲۰۲۲ ساعت ۱۱:۲۲ صبح به وقت محلی سرور نشان داده شده است. کلاینت به صفحه‌ی aboutus.html در روت‌دایرکتوری وب‌سایت دسترسی پیدا کرده است. کد وضعیت HTTP 200 و آدرس وب‌سایت مرجع https://34.227.9.153/ بوده است؛ یعنی درخواست کلاینت با‌‌موفقیت انجام شده است. مرورگر کاربر Safari، شرکت Apple بوده و زمانی که وب‌سرور صفحه را ارائه کرده، 6430 بایت به کلاینت فرستاده شده است.

با جمع‌آوری این اطلاعات از لاگ دسترسی، می‌توانید موارد زیر را پیدا کنید:

  • تعداد بازدیدکنندگان هر صفحه یا صفحه‌های بازدید‌شده توسط هر بازدید‌کننده
  • مکان جغرافیایی بازدید‌کنندگان سایت
  • پربازدیدترین قسمت‌های سایت
  • پرکاربردترین Queryهای کاربر
  • تعداد کل کدهای مختلف وضعیت HTTP

چگونگی پیدا کردن لاگ دسترسی

مکان لاگ دسترسی یک وب‌سرور، به سیستم‌عامل و نوع آن وب‌سرور بستگی دارد. به‌عنوان مثال، مکان پیش‌فرض لاگ دسترسی وب‌سرور Apache در سیستم‌های مبتنی‌بر RHEL در var/log/httpd/ است. در سیستم‌های مبتنی‌بر Debian، مانند Ubuntu، مکان آن var/log/apache2/ است. برای Nginx، به‌طور پیش‌فرض، لاگ دسترسی در  Directory/var/log/nginx در هر دو دسته سیستم‌عامل‌های مبتنی‌بر RHEL و Debian است.

محل لاگ دسترسی پیش‌فرض برای وب‌سرور IIS که روی سرور ویندوز اجرا می‌شود %SystemDrive%\inetpub\logs\LogFiles\W3SVC است. %SystemDrive% به‌طور معمول \:C و site_id شناسه‌ی وب‌سایت میزبان IIS است. راه‌های مختلفی برای خواندن لاگ دسترسی وب‌سرور وجود دارد. مدیر سایت در سیستم‌های مبتنی‌بر لینوکس می‌تواند با استفاده از دستوراتی، مانند cat ،tail و grep با استفاده از SSH به فایل دسترسی پیدا کند و آن را بخواند. گاهی اوقات، مدیران وب‌سایت‌ها باید از پنل کنترل ارائه‌دهنده‌ی میزبانی، مانند Cpanel برای باز کردن و خواندن لاگ دسترسی استفاده کنند.

شیوه‌ی پیکربندی لاگ دسترسی

می‌توانید خصوصیات لاگ دسترسی وب‌سرور را (مانند بیشتر تنظیمات) در پروند‌ه‌ی پیکربندی آن تنظیم کنید. مکان پرونده‌ی پیکربندی اصلی یک وب‌سرور، به نوع وب‌سرور و سیستم‌عامل بستگی دارد. در اینجا یک لیست است:

Main Configuration File OS Webserver
 etc/httpd/conf/httpd.conf/ RHEL-based Apache
 etc/apache2/apache2.conf/ Debian-based Apache
 etc/nginx/nginx.conf/ RHEL-based Nginx
 etc/nginx/nginx.conf/ Debian-based Nginx
%WinDir%\System32\Inetsrv\Config\ApplicationHost.config Windows Server IIS

بعضی از تنظیمات رایج لاگ دسترسی در هر وب‌سرور عبارت‌اند از:

  • مکان لاگ
  • فرمت لاگ
  • سطح لاگ
  • دوره‌بندی لاگ (Log Rotation)

مکان لاگ دسترسی برای هر وب‌سایتی که در وب‌سرور میزبانی می‌شود، ممکن است متفاوت باشد. به‌عنوان مثال، دستور زیر در Apache، مکان لاگ دسترسی در سراسر سرور را تنظیم می‌کند:

CustomLog "/var/log/httpd2/access_log" common

اما برای VirtualHost می‌توان آن را بازنویسی کرد:

<VirtualHost *:80>
    ServerName www.mysite.com
    ServerAlias test.com
    DocumentRoot/var/www/html/test.com
    ErrorLog/var/log/httpd/mysite.com/error_log
    CustomLog/var/log/httpd/mysite.com/access_log combined
</VirtualHost>

پیکربندی فرمت لاگ دسترسی، فیلدهایی را که در ورودی‌های لاگ قرار می‌گیرد، مشخص می‌کند. فرمت لاگ دسترسی ممکن است عمومی (Common) یا ترکیبی (Combined) باشد. تصویر زیر، نمونه‌ای از یک پیکربندی را نشان می‌دهد:

LogFormat "%h %l %u %t\"%r\" %>s %b" common

به‌گونه‌ای که:

  • %h نام میزبان Remote است.
  • %l نام لاگ Remote از Identd است. (اگر در دسترس باشد.)
  • %u شناسه‌ی کاربری کلاینت  است. (اگر در دسترس باشد.)
  • %t زمان دریافت درخواست است.
  • %r اولین خط درخواست HTTP است.
  • %>s کد وضعیت HTTP بازگشت‌داده‌شده توسط وب‌سرور است.
  • %b اندازه‌ی منبع بازگشتی به بایت است.

شما می‌توانید به مستندات Apache مراجعه کنید تا متوجه شوید چگونه از ماژول Custom log برای پیکربندی فرمت لاگ دسترسی خود استفاده کنید.

تنظیمات پیکربندی لاگ دسترسی Apache شامل Log Level و Log Rotation است. Log Level فقط رویدادهای خاصی را که با سطح بحرانی خاصی مطابقت دارند، شامل می‌شود. این سطوح بحرانی شامل Debug ،Info ،Notice ،Warn ،Error ،Crit ،Alert ،Emerg و بین Trace1 تا Trace8 است. هرچه Log Level کمتر باشد، ورودی‌های لاگ، جزئیات بیشتری خواهند داشت. در تصویر زیر، لاگ دسترسی را به‌منظور ضبط پیام‌های سطح هشدار (Warn) و بالاتر پیکربندی می‌کنیم:

1.LogLevel warn

از این مثال، می‌توان برای VirtualHost‌های Apache استفاده کرد. همچنین، شما می‌توانید Apache Log Rotation را با استفاده از ابزار Logrotate لینوکس یا برنامه‌ی Rotatelog Apache تنظیم کنید.