ایمن سازی پایگاه داده
"در این مقاله با برخی از اصول اساسی ایمن سازی پایگاه داده آشنا میشوید. چه از MSSQL چه از پایگاههای داده دیگر استفاده میکنید باید پایگاه داده خود را قرنطینه کنید تا دادههای خصوصی خود را ایمن نگه دارید."
ایمن سازی پایگاه داده
چه از Microsoft SQL Server استفاده کنید، چه از پایگاههای داده منبع باز مانند MySQL، باید پایگاه داده خود را قرنطینه کنید تا دادههای خصوصی خود را ایمن نگه دارید. مراحل گفته شده در این مقاله شما را با برخی از اصول اساسی امنیت پایگاه داده و نحوه پیاده سازی آنها آشنا میکند. یک پیکربندی سرسخت وبسرور، از تبدیل شدن شبکه شما به نقطه ورود جلوگیری میکند و از انتشار اطلاعات شما در اینترنت جلوگیری میکند. هنگام تهیه یک سرور SQL جدید، به یاد داشته باشید که از همان ابتدا امنیت را در نظر بگیرید و این باید بخشی از فرآیند عادی شما باشد، نه چیزی که به صورت عطف به در آینده انجام شود. زیرا برخی از اقدامات امنیتی کلیدی نیاز به تغییرات اساسی در پیکربندی برای سرورها و برنامه های کاربردی پایگاه داده نصب شده ناامن دارند.
سرور پایگاه داده را ایزوله کنید
سرورهای پایگاه داده تا حد امکان از سایر برنامهها و سرویسها جدا باشند. سرورهای پایگاه داده اختصاصی ردپای (FootPrint) کوچکتری دارند، از این رو سطح حمله کمتری دارند و نیازی به نگرانی در مورد منابع متضاد یا ترافیک متضاد نیست. سیستمعاملها باید سبک باشند و فقط سرویسهای لازم نصب و اجرا شوند. برنامههای کاربردی دیگر را نصب نکنید مگر اینکه توسط SQL Server مورد نیاز باشند.
بسته به اندازه محیط خود باید SQL Server را در یک بخش شبکه VLAN محدود قرار دهید تا فقط ترافیک مجاز به آن منتقل شود. به طور معمول فقط برنامه سرور یا وبسرور باید با پایگاه داده در ارتباط باشد، بنابراین سیاست محدود کردن شبکه نسبتا میتواند از اتصالات غیر قانونی جلوگیری کند. این نکته را فراموش نکنید هرگز پایگاه داده خود را روی پورت های 1433/1434 (MSSQL) و 3306/3307 (MySQL) به اینترنت باز نکنید.
نصب پایگاه داده را تنظیم کنید
هر دو Microsoft SQL Server و MySQL چندین ویژگی اضافی را ارائه میدهند که ممکن است برای اکثر نیازهای شما کاربردی نداشته باشند. با حذف قابلیتهایی که نیاز ندارید، احتمال حمله برای سوء استفاده را کاهش میدهید. اگر میخواهید قابلیتی را برای سرگرمی نگه دارید که هنوز از آن استفادهای نمیکنید، بهتر است این کار را در یک محیط آزمایشی انجام دهید و تا حد امکان از نصب قابلیتهای اضافی جلوگیری کنید؛ به خصوص قبل از شروع شدن تاثیرات ماژول نصب شده بر روی محیط شما.
پایگاه داده را بروز نگه دارید
هر دو MSSQL و MySQL به صورت منظم پَچ (Patch) میشوند، بنابراین مطمئن شوید که از آخرین بروزرسانی استفاده میکنید. بیشتر آسیبپذیریهای که شناخته شده بیشتر از یک سال از آنها گذشته، بنابراین پَچهای امنیتی به موقع میتوانند با مهر و موم کردن این نواقص از بیشتر حملات جلوگیری کند. داشتن یک برنامه و پروتکل پَچ منظم میتواند به پیادهسازی بهروزرسانیها در یک محیط آزمایشی کمک کند، بنابراین میتوان هرگونه تأثیر منفی را بدون وقفه هنگام تولید کشف کرد.
بسیاری از کسب و کارها به نحوی دیگر این کار را انجام میدهند و بروزرسانیها را مستقیما روی سرور نصب میکنند. خوشبختانه این روش معمولا جواب میدهد، اما همیشه اینطور نیست و در صورت پَچ اشتباه به سرعت میتواند پایگاه داده شما خراب شود. بنابراین راه بازگشت را برای خود باز نگه دارید و دقیقا تغییرات هنگام پَچ کردن را درک کنید.
عملیات پایگاه داده را محدود کنید
حساب کاربری که سرویس پایگاه داده تحت آن اجرا میشود، دسترسی کامل به تمام کارهای پایگاه داده را تعیین میکند. این حساب کاربری را به صورت ایمن برای خود نگه دارید. بیشتر برنامههای پایگاه داده مانند MySQL و MSSQL یک حساب کاربری با حداقل مجوز را دارند که برای بقیه سرورها استفاده میشوند. در صورتی که حساب کاربری پیش فرض برای همه جا استفاده میکنید در شرایط بحرانی و پس از وقوع بحران مثل عیب یابی قطعی ممکن است دسترسی شما به سرور پایگاه داده قطع شود و نتوانید پیکربندی مجدد را انجام دهید.
هنگام نصب MSSQL در ویندوز سیستم محلی با یک حساب مدیر اجرا میشود و به فرآیندهای پایگاه داده، از جمله رویه های ذخیره شده و رابط های پوسته فرمان مانند xp_cmdshell، اجازه دسترسی کامل را می دهد. در حالت ایده آل، MSSQL باید به عنوان یک حساب محلی اختصاصی و غیر مدیر با حداقل امتیازات اجرا شود. ویزارد نصب MSSQL میتواند این مرحله را به صورت خودکار برای شما انجام دهد، بنابراین اگر یک سرور پایگاه داده جدید نصب میکنید حتما این گزینه را پیکربندی کنید. سایر سرویسهای SQL مانند SQL Agent نیز باید به توسط حسابهای محلی محدود همراه با مجوزهای مورد نیاز اجرا شوند. عدم انجام این مرحله میتواند یک پایگاه داده را در معرض خطر قرار دهد و احتمال نفوذ به شبکه برای آسیب و سایر قسمتهای پایگاه داده بیشتر میشود.
ترافیک SQL را محدود کنید
همانطور که در مرحله اول گفته شد سرورهای پایگاه داده معمولا روی همان سرور نیاز به اتصال دارند. در این صورت دسترسی به سرور پایگاه داده در پورتهای دیگر برای هر جای دیگری باید مسدود شود. تنها با اجازه دادن IPهای تعیین شده به ترافیک SQL میتوانید مطمئن باشید که یک عامل مخرب یا کلاینت آلوده به فایروال سرور شما حمله نمیکند. در برخی موارد کلاینتها نیاز دارند که خود مستقیما به پایگاه داده متصل شوند، در اینجا اتصالات SQL را با IPهای خاص که به آن نیاز دارید محدود کنید. از آنجایی که این کار میتواند نقطه ورود باشد، مطمئن باشید که این کار را به صورت صحیح و ایمن انجام میدهید، زیرا بدافزارها میتوانند سرورهای SQL را اسکن کرده و به آنها حمله کنند. در لینوکس میتوانید این کار را با iptables و در ویندوز با فایروال انجام دهید یا ترجیحاً یک دستگاه فایروال اختصاصی استفاده کنید.
هنگام تخصیص مجوزها از حداقل امتیاز استفاده کنید
کاربران پایگاه داده نیز مانند کاربران هر سیستم دیگری تنها به عملیاتی که برای انجام وظایف خود نیاز دارند، دسترسی داشته باشند و و حداقل امتیاز را داشته باشند. در صورت امکان از کمک گزینههای "ALL" در MySQL و عضویت در نقش sysadmin در MSSSQL خودداری فرمایید. در صورت لزوم برای محافظت از فیلدهای حساس، به جای دسترسی مستقیم به جداول، دسترسی خواندن Viewها را در نظر بگیرید. Stored Procedureها، برنامههای تعمیر و نگهداری و سایر وظایف خودکار باید توسط کاربران اختصاصی با مجموعهای از مجوزها اجرا شوند. این اقدام بخشهای مختلف پایگاه داده که در معرض خطر هستند یا تخریب کل سیستم توسط مهاجمان سایبری جلوگیری میکند.
بیشتر اوقات دستورالعملهای برنامه از شما میخواهد که کاربران آنها را در نقش مدیر با دسترسی کامل قرار دهید. این برخلاف رویه عمومی است و معمولا نشان دهنده عدم تجربه برنامهنویس است که تمایل به دسترسی بیشتر از نیاز، یا تمایل به حذف ملاحظات امنیتی دارد که هیچ کدام به نفع دادههای شما نیست. بنابراین همیشه در نظر بگیرید که پیادهسازی حسابهای برنامه نیز میتواند تاثیرگذار باشد.
رمز عبور قوی برای مدیریت تنظیم کنید
در MSSQL هر زمان که احراز هویت ترکیبی انتخاب شده باشد از حساب sa استفاده میشود. مایکروسافت استفاده از احراز هویت یکپارچه ویندوز را توصیه میکند اما بسیاری از برنامهها برای پشتیبانی از کاربران پایگاه داده و رشتههای اتصال به حالت ترکیبی نیاز دارند. اگر احراز هویت ترکیبی را فعال کردهاید، مطمئن شوید که حساب sa را با یک رمز عبور پیچیده ایمن کردهاید تا از حملات brute force جلوگیری کنید. به طور مشابه کاربر ریشه برای MySQL باید یک رمز عبور پیچیده داشته باشد. اگر شخصی سرور پایگاه داده شما را اسکن کند، اولین کاری که میخواهد انجام دهد تلاش برای ورود با حساب مدیریت پیشفرض است، بنابراین قفل نبودن آن میتواند منجر به خط افتادن کلی سیستم شود.
حسابرسی ورود به پایگاه داده
ورود به سیستم پایگاه داده باید شامل مانیتورینگ و حسابرسی باشد. حداقل این کار، استفاده از این سوابق در مراجع قضایی است اما اگر به صورت منظم نظارت شود و با یک سیستم اعلان خودکار ادغام شود میتواند ورود ناموفق مکرر، حملات و سایر موارد بحرانی را قبل هشدار دهد و به شما این امکان را دهد که کاربرانی که سیستم را در معرض خطر قرار میدهند غیر فعال یا کلمه عبور آنها را تغییر دهید.
بکآپهای خود را ایمن نگه دارید
پشتیبانگیریهای شما دادههای مشابهی با پایگاه داده اصلی شما دارند و باید به انداز خود سرور و با دقت ایمن شوند. این کار میتواند با قفل کردن دایرکتوری پشتیبان، محدود کردن دسترسی به سرور یا فضای ذخیره سازی هاست، امنیت فیزیکی رسانههای قابل جابجایی و بررسی افرادی که به نسخه پشتیبان دسترسی دارند، انجام شود. فراموش نکنید که پشتیبانگیریها بخشی از اکوسیستم دادههای شما هستند و ممکن است شخصی فقط از پنجره عبور کند تا بتواند از درهای مسدود شده عبور کند.
محافظت در برابر SQL Injection
هنگامی که یک برنامه وب ورودی کاربر را میپذیر و آن را به پایگاه داده ارسال میکند، دادههای آلوده میتوانند که مخرب را به سرود «تزریق» کنند و بسته به پیکربندی سرور، وظایف غیرمجاز از جمله دسترسی کامل به سیستم را انجام دهند. برای محافظت در برابر حملات SQL Injection چندین راه وجود دارد از جمله مرحله «هنگام تخصیص مجوزها از حداقل امتیاز استفاده کنید» که در بالا گفته شد و با محدود کردن توانایی کاربران برای انجام عملیات غیر مجاز، این کار انجام میشود. اما در واقع تنها یک راه برای جلوگیری از آنها وجود دارد و آن استفاده از Stored Procedureها به جای کوئری مستقیم SQL در تعامل با وباپلیکیشنها است.
استور پروسیجرها فقط پارامترهای از پیش تعیین شده را میپذیرند و میتوانند وظایف توابع را محدود کنند، بنابراین از تزریق داده به یک پرس و جوی SQL خام جلوگیری میکند. این بهترین روش برای سالهای متمادی بوده است، اما بسیاری از برنامههای کاربردی همچنان کدهایی با آسیبپذیریهای SQL تولید میکنند که یکی از رایجترین آسیبپذیریهای مورد استفاده در اینترنت است.
ارزیابی مستمر میدان دید
راه اندازی و پیکربندی ایمن همه چیز میتواند شما را از مشکلات زیادی نجات دهد. اما تنها راه برای اطمینان از ایمن ماندن سیستم پایگاه داده شما، مشاهده دائمی وضعیت پیکربندی با آزمایشهای بر خلاف سیاستهای ایجاد شده توسط شما است. برای مثال هنگامی که چیزی تغییر میکند به شما اطلاع داده شود، مثلا زمانی که یک کاربر به عنوان sysadmin به پایگاه داده اضافه شد یا مجوزهای مالک پایگاه داده (db_owner) تغییر کرد. بدون چیزی شبیه به این، اساسا حدس میزنید که از آخرین باری که بررسی های لازم را انجام دادهاید، هنوز چیزی تغییر نکرده است در حالی که ممکن است چنین نباشد. یا حتی اگر بخواهید به صورت دستی این کار را انجام دهید و اطلاعات پیکربندی خود را مداوم جمع آوری کنید، برای انجام این کار با زمان زیادی را صرف کنید و در نهایت بیهوده است.