خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

با این 7 مرحله سرور MySQL خود را ایمن تر کنید

چگونه می توانید مطمئن شوید که پایگاه داده MYSQL شما در برابر هکرها ایمن است؟ با این چک لیست مفید، رویکرد کمربند و بند را در نظر بگیرید.

به طور خاص، تسترهای نفوذ مبتدی، تأکید کمتری بر امنیت پایگاه داده به طور کلی دارند. برنامه بدون پیکربندی پایگاه داده و تست های امنیتی نمی تواند ایمن باشد. ممکن است در حال حاضر از نرم افزار MySQL، یک سیستم مدیریت پایگاه داده استفاده کنید، پس چگونه می توانید آن را ایمن تر کنید؟ در اینجا هفت گامی که باید دنبال کنید آورده شده است.

1. از SSH Tunneling به جای Remote Connection استفاده کنید

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

از آنجایی که سرورها معمولاً بر روی یک توزیع لینوکس اجرا می شوند، مثال های زیر بر اساس توزیع دبیان هستند. فایلی که باید برای تونل کردن SSH به جای اتصال از راه دور و بستن پورت پیش فرض به دنیای خارج استفاده کنید، /etc/mysql/my.cnf است. در این فایل باید فیلدی به نام [mysqld] باز کنید و دستور زیر را بنویسید:

[mysqld]
bind-address=127.0.0.1

پس از این فرآیند فراموش نکنید که این فایل را ذخیره کنید و با دستور زیر سرویس را مجددا راه اندازی کنید:

sudo systemctl restart mysqld
# or
sudo systemctl restart mariadb.service

با این کار، سرویس MySQL فقط به آدرس محلی گوش می دهد.

اگر از MariaDB استفاده می کنید، می توانید /etc/mysql/mariadb.conf.d/50-server.cnf را نیز بررسی کنید و بررسی کنید که آیا تعریفی برای bind-address وجود دارد یا خیر.

پیکربندی MySQL توزیع mariaDB

اکنون که آدرس bind را روی 127.0.0.1 تنظیم کرده اید که یک میزبان محلی است، می توانید اسکن Nmap را اجرا کنید و خروجی را بررسی کنید:

آدرس IP لوکال هاست

می‌توانید پورت MySQL را به‌عنوان 127.0.0.1 ببینید که نشان‌دهنده لوکال هاستی است که می‌بینید. می توانید دوباره سعی کنید آدرس bind را تغییر دهید تا مطمئن شوید که این کار می کند:

مطلب مرتبط:   3 نشانه آلوده بودن مک شما به ویروس (و نحوه بررسی)

[mysqld]
bind-address=127.5.5.1

تغییر آدرس bind client-server

سپس فایل /etc/mysql/my.cnf را ذخیره کرده و سرویس MySQL را مجددا راه اندازی کنید. اگر در این مرحله دوباره اسکن Nmap را انجام دهید، نباید این آدرس bind را در لوکال هاست ببینید.

لوکال هاست پورت بسته

هنگامی که متوجه شدید که این کار می کند، از مرحله اول به تنظیمات برگردید و آدرس bind را به 127.0.0.1 برگردانید و دوباره ذخیره کنید.

2. یک مانع دسترسی به فایل محلی راه اندازی کنید

MySQL می تواند با سیستم فایل محلی ارتباط برقرار کند. با کوئری ها می توانید محتوای یک متن را در سیستم فایل محلی ببینید یا نتیجه پرس و جو را روی دیسک بسوزانید. برای جلوگیری از مهاجمان مخرب با استفاده از این ویژگی، باید از ارتباط MySQL با سیستم فایل محلی جلوگیری کنید.

برای انجام اقدامات احتیاطی می توانید از تابعی به نام local-infile استفاده کنید. به عنوان مثال، تصور کنید که فایلی به نام “/etc/secretfile.txt” دارید و در این فایل رمز عبور دارید. اگر مقدار تابع local-infile در فایل /etc/mysql/my.cnf شما 1 باشد، دسترسی باز است. بنابراین می توانید به فایل secretfile.txt دسترسی داشته باشید.

پیکربندی برای مشتری-سرور mySQL

مقدار تابع local-infile 1 است. پایگاه داده MySQL را مجدداً راه اندازی کنید تا تغییرات انجام شود. اکنون با دستور زیر به MySQL متصل شوید و بررسی کنید که آیا می توانید فایل secretfile.txt را مشاهده کنید:

SELECT LOAD_FILE("/etc/secretfile.txt");

فایل مخفی با رمز عبور

گرفتن اطلاعات در هر فایلی در رایانه کار دشواری نیست.

برای حل این مشکل، مقدار local-infile را در فایل /etc/mysql/my.cnf خود به صورت زیر تغییر دهید:

[mysqld]
local-infile=0

رمز عبور مخفی فایل مخفی

سرویس MySQL را مجددا راه اندازی کنید. دوباره به MySQL متصل شوید و مرحله قبل را تکرار کنید. دیگر نمی توانید محتویات فایل را ببینید.

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

3. کاربران و رمزهای عبور برنامه را تنظیم کنید

کاربر مدیریت پایگاه داده و کاربر MySQL که به پایگاه داده دسترسی دارد باید با یکدیگر متفاوت باشند. به عبارت دیگر، اتصال برنامه ها به MySQL با کاربران ریشه بسیار خطرناک است. در صورت امکان، کاربران برنامه هایی را که عملیات UPDATE یا INSERT را انجام نمی دهند، جداگانه تعریف کنید.

مطلب مرتبط:   Blue Teaming چیست و چگونه امنیت سایبری را بهبود می بخشد؟

نکته دیگری که در این مرحله باید به آن توجه کرد، رمز عبور کاربر است. مانند تقریباً در هر زمینه، رمزهای عبور برای کاربران MySQL باید پیچیده و غیرقابل پیش بینی باشد. اگر در این مورد به کمک نیاز دارید، سیستم های تولید کننده رمز عبور عالی وجود دارد که می توانید از آنها استفاده کنید.

4. کاربران ناشناس را حذف کنید

هنگامی که MySQL را به طور پیش فرض نصب می کنید، برخی از کاربران ناشناس ظاهر می شوند. باید اینها را حذف کنید و دسترسی آنها را مسدود کنید. برای یک سرور MySQL ایمن، نباید در نتیجه پرس و جو زیر هیچ پاسخی دریافت کنید:

SELECT * FROM mysql.user WHERE USER="";
# Example Output
Empty set (0.001 sec)

اگر نتایجی به دست آمد، باید این کاربران ناشناس را حذف کنید. به عنوان مثال، اگر یک حساب کاربری ناشناس به نام “anonuser” در محیطی به نام “localhost” وجود داشته باشد، باید از دستوری مانند زیر برای حذف این حساب استفاده کنید:

DROP USER &aposanonuser&apos@&aposlocalhost'

5. مجوزهای فایل محلی MySQL را بررسی کنید

تصور کنید که یک مدیر پایگاه داده هستید و می خواهید به داده های یک هفته قبل بازگردید. در این حالت، ممکن است مجبور شوید از طریق SSH به سرور پایگاه داده متصل شوید و فایل های MySQL را که می خواهید تغییر دهید. در حین انجام این کار، ممکن است از امتیازات کاربر ریشه لینوکس استفاده کرده باشید. یعنی مالکیت و مجوزهای فایل های داده می تواند تغییر کند. شما این را نمی خواهید.

برای بررسی مجوزهای داده شده، به دایرکتوری /var/lib/mysql نگاه کنید. آنچه در اینجا باید بررسی کنید این است که آیا مالک همه فایل ها کاربر MySQL است یا خیر. دستور زیر این کار را انجام می دهد:

sudo ls -al /var/lib/mysql

که به داده های لینوکس mysql دسترسی دارد

مجوز خواندن و نوشتن فایل ها فقط باید برای کاربر MySQL باشد. هیچ کاربر دیگری نباید هیچ مجوزی داشته باشد.

6. از MySQL SSL استفاده کنید

فکر کردن به یک مثال ملموس بهترین راه برای درک استفاده از MySQL و SSL است. تصور کنید که یکی از سرورهای منطقه ABC، که در آن سرورهای مختلف زیادی وجود دارد، توسط هکرهای مخرب تصرف شده است. هکرها یک اسکن داخلی در منطقه ABC انجام خواهند داد. به این ترتیب اطلاعات مربوط به سرورها را جمع آوری می کنند.

مطلب مرتبط:   tRPC چیست و چرا باید از آن استفاده کرد؟

اگر آنها یک سرور MySQL را در طول این فرآیند شناسایی کنند، می توانند یک حمله Man-in-the-Middle (MitM) روی سرور مورد نظر انجام دهند، به این معنی که می توانند اطلاعات جلسه برنامه ها و کاربران متصل به این سرور را سرقت کنند. یکی از بهترین راه‌ها برای جلوگیری از این امر، فعال کردن SSL در سرور MySQL است.

7. گزارش و فایل های تاریخچه

شما از گزارش های MySQL برای تجزیه و تحلیل و یافتن خطاها استفاده می کنید. با وارد کردن my.cnf به صورت زیر می توانید محل نگهداری این گزارش ها را ویرایش کنید:

# /etc/mysql/my.cnf
[mysqld]
log =/var/log/mylogfiles

شما می توانید نام یا مکان mylogfiles را به دلخواه تغییر دهید. یک فایل دیگر وجود دارد که باید بررسی کنید. هنگامی که در ترمینال لینوکس به سرور MySQL متصل می شوید و دستورات مختلفی را تایپ می کنید، این کوئری ها در فایل mysql_history ذخیره می شوند. اگر دستور زیر را اجرا کنید، می توانید کوئری هایی را که در ترمینال MySQL استفاده می کنید مشاهده کنید:

cat ~/.mysql_history

اگر نمی خواهید اطلاعاتی در مورد نوع پرس و جوهایی که در داخل سرور انجام می دهید ارائه دهید، باید محتویات این فایل را حذف کنید. برای حذف محتویات فایل از دستور زیر استفاده کنید:

sudo echo "cleaned" > ~/.mysql_history

سپس می توانید دوباره محتویات فایل را بررسی کنید.

هر کسی که مالک پایگاه داده باشد مالک سیستم است

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