View Full Version : حفاظت دیتابیس ها روی سرور
b2never
دوشنبه 12 تیر 1391, 16:30 عصر
با سلام
قبل صورت مسئله یه سری مقدمه باید بگم :
از دید امنیتی ، کاربرای در ارتباط با یک پایگاه داده یا یا اون کار میکنن و باهاش ارتباط دارن یا به نوعی در بخش زیربنایی دسترسی دارن ( مدیریت سرور هایی که دیتابیس روی اون هاست مثل هاست ها )
منظور همون کاربر های Local Administrator روی سرور دیتابیس هستند که با لوکال ادمین میشناسیمشون
بحث مربوط به دسترسی گروه اول یعنی مباحث مربوط به لاگین روی دیتابیس ، role ها و مپ شدن رو مسلما دی بی ای ها واردن:لبخند:
برای لوکال ادمین ها اولین راه همیشه اینه که دسترسیشون از طریق غیر فعال کردن Built-in Administrators بسته بشه:چشمک:
خب در این مورد هم باز کاربرانی که به اون یورز نیمی که SQL Server Service با اون اجرا میشه دسترسی دارن به نوعی و با یه سری ترفند میتونن وارد اس کیو ال بشن به عنوان sysadmin:تشویق:
مشکل اینه
این کاربران میتونن سرویس اس کیو ال رو غیر فعال کنن و حتی فایل دیتابیس رو کامل حذف کنن :عصبانی:
برای اینکار بنده خودم دو راه پیدا کردم که هر دو اینها مشکلاتی دارن:ناراحت:
راه اول :
اعمال تنظیمات امنیتی روی درایو بکاپ یا فایل های داده اس کیو ال data file - mdf,... که این درایو باید NTFS باشه و میشه اونوقت دسترسی کاربرای دیگه رو به این درایو محدود کرد
البته این درایو باید برای کاربری که agent اس کیو ال باهاش اجرا میشه دسترسی های لازمو داشته باشه
یک مشکل این راه اینه که اگه ویندوز دچار مشکل بشه و از بین بره گاها دسترسی به اون فایل ها هم کاملا از دست میره :متعجب:
راه دوم :
استفاده از GPO - group policy managemen
(http://social.technet.microsoft.com/Forums/en-US/winserverGP/thread/2758d69a-60e8-4a5b-83dd-fc7d8e15bdc1/)این راه با استفاده از اکتیو دایرکتوری و تعریف یه سری policy خاصه که باعث میشه حتی کاربران ادمین هم روی یک سری سرویس ها دسترسی نداشته باشن ، این روش به نظر روش خوبیه
مشکل اینه که در این روش شما باید حتما دسترسی به دامین ادمین داشته باشی !:اشتباه:
یک مشکل کلی هم هست
کاربران ادمین می تونن پسورد کاربرای ادمین رو ریست کنن
که البته به نظرم این راه قابل جلوگیریه (به نظر بنده):متفکر:
خب حالا هر کسی از دوستان نظرشو بده که با توجه به موارد بالا چطور میشه از خراب کاری های لوکال ادمین ها روی سرور دیتابیس جلوگیری کرد و دسترسی اونها رو محدود کرد:افسرده:
حمیدرضاصادقیان
سه شنبه 13 تیر 1391, 09:49 صبح
سلام.
خود شما مسائل رو کامل بررسی کردید.
یک موردی که به نظرم میرسه استفاده از Encrypt دیتابیس هست که نتونن بهش دسترسی داشته باشند.
بعد یک راه دیگه اینه که دسترسی به سرور دیتابیس نباید به این راحتی باشه. به نظرم بهتره سرور دیتابیس از سرورهای دیگه جدا باشه و عضو SubDomain باشه و فقط به کاربرای خاصی دسترسی بدیم که بتونن با اون سرور کار کنند.
یعنی یک بحث رعایت امنیت نرم افزاری هست و یک بحث هم رعایت مسائل امنیتی سخت افزاری و فیزیکی.
چون هرچقدر هم پیچیدگی امنیت نرم افزاری بالا بره و امنیت فیزیکی کم باشه ، باز راه فرار پیدا میشه.
b2never
سه شنبه 13 تیر 1391, 12:26 عصر
سلام.
خود شما مسائل رو کامل بررسی کردید.
یک موردی که به نظرم میرسه استفاده از Encrypt دیتابیس هست که نتونن بهش دسترسی داشته باشند.
بعد یک راه دیگه اینه که دسترسی به سرور دیتابیس نباید به این راحتی باشه. به نظرم بهتره سرور دیتابیس از سرورهای دیگه جدا باشه و عضو SubDomain باشه و فقط به کاربرای خاصی دسترسی بدیم که بتونن با اون سرور کار کنند.
یعنی یک بحث رعایت امنیت نرم افزاری هست و یک بحث هم رعایت مسائل امنیتی سخت افزاری و فیزیکی.
چون هرچقدر هم پیچیدگی امنیت نرم افزاری بالا بره و امنیت فیزیکی کم باشه ، باز راه فرار پیدا میشه.
اگه منظور شما از انکریپت ارتباطه که اون بحث TDE رو در بر داره
اینکه شما فرمودین دیتابیس باید جدا از سرور های دیگه باشه منهم عرض کردم در بهترین حالت دی سی سرور و دی بی سرور از هم جدا هستن
بحث من در مورد راهکاریه که بشه از قطع شدن سرویس به هر علتی جلوگیری کرد ، یعنی روشی که فقط یه کاربر ادمین خاص بتونه کلا به بانک و فایل های داده و سرویس های مربوطه دسترسی داشته باشه
در مورد اون راهی هم که فرمودین بحث شبکه است و بهترین حالت اینه که شما از ریموت یه سرور عمومی ریموت سرور دی بی رو بگیری ، مثل کاری که شما در مورد سرور های مجازی وی ام می کنید .با این روش دسترسی اینترنتی به اون سرور کماکان برقراره اما به جز کاربران وی پی ان و لوکال معتبر کسی از خارج به اون سرور دی بی دسترسی نخواهد داشت
با تشکر از شما ، منتظر نظرات بیشتر از شما و سایر دوستان هستم
حمیدرضاصادقیان
سه شنبه 13 تیر 1391, 12:56 عصر
کلا ما دو روش برای امنیت بیشتر نداریم. یا باید از SQL Authentication استفاده کنیم یا از Windows Authentication .
اگر از SQL Authentication استفاده کنید باید یک User هم برای سرویس ها تعریف کنید که هرکاربری نتونه اونو Stop کنه. اینجا فقط کاربر Admin میمونه که فکر نکنم (حداقل من راهکاری براش سراغ ندارم) بشه کاریش کرد فقط باید بهش اعتماد کرد.Admin Local خود سیستم زیاد کاری نداره چون دیگه اینجا فقط سرور مطرح هست.ولی کلا پیشنهاد خود Microsoft هم برای امنیت بیشتر استفاده از Windows Authentcation و استفاده از Active Directory هست .درنهایت فکر کنم هرچقدر هم تدابیر امنیتی زیاد باشه ادمین شبکه باید آدم مطمئنی باشه..
حمیدرضاصادقیان
سه شنبه 13 تیر 1391, 13:11 عصر
همچنین فکر کنم این کتاب (http://www.amazon.com/Implementing-Database-Security-Auditing-Includes/dp/1555583342/ref=pd_sim_b_2) کمکتون کنه.
b2never
سه شنبه 13 تیر 1391, 13:16 عصر
جناب صادقیان من یه نکته ای رو دوباره یاد آوری کنم .بحث سر ورود به دیتابیس نیست چون این کار راه های زیادی واسه جلوگیریش هست مثلا حتی نوشتن تریگر برای کاربر جاری که بهش دسترسی به بانک بده یا نده
کلا میخوام ببینم از خود اس کیو ال یا ویندوز راهی هست که ما غیرفعال کردن سرویس اس کیو ال رو قطع کنیم ؟ برای نمونه شما به حالت عادی و بدون دردسر نمیتونین سرویس Eset رو غیرفعال کنین حتی با دسترسی ادمین
بحث استفاده از یوزر های اکتیو دایرکتوری مشکلات خاص خودشو داره و صد البته فواید خودشو مثل استفاده از GPO
سوالی که مدیران بنده از من پرسیدن در این مورده که بنده چطور میتونم کاری کنم که ادمین های لوکال هاست نتونن در دیتا و خود اس کیو ال اختلال ایجاد کنن .
حمیدرضاصادقیان
سه شنبه 13 تیر 1391, 13:41 عصر
این موردی که شما فرمودید در مورد ESET این هست که اینها یک Device Driver می نویسند در ring0 که دائم داره اون سرویس رو کنترل میکنه و اجازه Stop اونو به شما نمیده. من هم درمورد ورود به دیتابیس بحث نکردم. عرضم این هست که باید مثلا یک User در Domain ایجاد کرده و SQL Server با اون start بشه و دسترسی Local Host رو از این مورد در Group Policy بگیریم که اجازه ندیم کاربر بتونه سرویس رو دستکاری کنه.اینجا (http://msdn.microsoft.com/en-us/library/ms144228.aspx) و اینجا (http://msdn.microsoft.com/en-us/library/ms191543.aspx) هم توضیحاتی در مورد مواردی که عرض کردم بیان کرده.
b2never
سه شنبه 13 تیر 1391, 14:09 عصر
با تشکر ویژه از اشاره تون به مورد انتی ویروس نود
در مورد دامین عرض کردم مشکلات خاص خودشو داره
مثلا چیزی که مافوق بنده اشاره کرده و در بعضی جاها مشاهده شده اینه که سرویس اس کیو ال قبل از ادمین کنترلر اجرا میشه و چون authenticate نمیشه به خطا میخوره
البته این همون راهیه که خیلیا پیشنهاد کردن همون group policy management هستش که شما و بنده هر دو به اون اشاره کردیم
متاسفانه اون روش چون در حیطه کاری من نیست و بهشم دسترسی ندارم نمیتونم تست کنم و به مدیریت پیشنهادی بدم
در مورد روش حفاظت از سرویس اگه ممکنه توضیح بیشتری بدین . راهی داره ما همچین برنامه ای بنویسیم ؟ نوشتن برنامه یه طرف اینکه کاربر نتونه اونو تسک کیل کنه یه طرف .
Felony
سه شنبه 13 تیر 1391, 14:59 عصر
در مورد روش حفاظت از سرویس اگه ممکنه توضیح بیشتری بدین . راهی داره ما همچین برنامه ای بنویسیم ؟ نوشتن برنامه یه طرف اینکه کاربر نتونه اونو تسک کیل کنه یه طرف .
بله ، میتونید ؛ برنامه هایی که به صورت معمول در سطح ویندوز نوشته میشن User Mode هستن و در Ring3 اجرا میشن و به صورت مستقیم به پردازنده و حافظه و سخت افزار دسترسی ندارن و فقط از طریق API هایی که سیستم عامل در اختیار برنامه نویس قرار داده میشه با سطح پائیین ارتباط بر قرار کرد و نه بیشتر ولی در Ring0 همه چیز به صورت صریح در اختیار برنامه نویس هست ، به صورت مستقیم میتونید با سخت افزارها ارتباط برقرار کنید و حافظه به صورت Wide در اختیارتون هست ، بنابراین در این سطح میتونید از اجرای کدهای سطح Ring3 جلوگیری کنید یا نحوه عکس العمل به کدها رو تغییر بدید یا ...
شما هر برنامه ای هم که در سطح User Mode بنویسید با راهکارهایی میشه kill کردش حالا ممکنه با روش هایی کار کمی سخت تر بشه ولی میشه ؛ چون در نهایت دارید از توابع User Mode که سیستم عامل در اختیارتون قرار میده استفاده میکنید ولی وقتی برنامه Kernel mode نوشته بشه دیگه به صورت عادی نمیشه kill کردش چون توابع سطح User Mode اولویتی نسبت به توابع سطح Kernel ندارن .
برنامه نویسی سطح Kernel با برنامه نویسی سطح User خیلی فرق میکنه و کوچکترین اشتباهی میتونه پایداری سیستم عامل رو از بین ببره چون همه چیز بدون هیچ کنترل خاصی در اختیار برنامه نویس هست .
برای برنامه نویسی سطح کرنل نیاز به DDK دارید که میتونید از سایت مایکروسافت به صورت رایگان دریافتش کنید .
h.satan
پنج شنبه 22 تیر 1391, 16:43 عصر
با سلام
اخیرا به یک مشکلی بر خوردم و هنوز راه حل مناسبی برای اون بدست نیاوردم خدمتتون این مشکل رو عرض میکنم امیدوارم کسی بتونه راه حل مناسبی ارائه کنه؟
سرور HP که روی اون SQL 2008 R2 نصب هست و دیتا بیس ما هم روی اون هست دو هفته پیش وقتی اس کیو ال رو باز کردم متوجه شدم دیتا بیس مورد نظر من پاک شده!!!!! دقت کنید که سرور در شبکه هستش و اینترنت هم متصل نیست
علت پاک شدن دیتا بیس هنوز مشخص نیست
حتی ما Trigger هم گداشیتیم برای اینکه مانع از پاک شدن مجدد بشیم و همینطور یک LogEvent هم گذاشتیم تا بتونیم اگه کسی در شبکه اقذام به پاک کردن دیتابیس کرد برامون Log بندازه و مشخص بشه چه کسی این کار رو کرده اما فردا دوباره دیتا بیس پاک شده بود!!
چیزی که تا الان بتونه جلوی پاک شدن دیتا بیس ما رو بگیره نتونستم گیر بیارم و تا الان شالد بیش از 10 مرتبه این اتفاق افتاده و ما نتونستیم راه کار مناسبی بدست بیاریم امیدوارم شماها بتونید کمکم کنید... هنوز برام سوال هست که این دیتا بیس چرا پاک میشه!!!
حتی من چند دیتا بیس تست هم ایجاد کردم ولی فقط همین دیتا بیس پاک میشه و اونها پاک نمیشه!!!!
حتی یه دیتا بیس دیگه هم با نام دیگه Restor و ایجاد کردم که اینم پاک شد!!!1
دلایلی که من تا الان تونستم بدست بیارم براتون میگم:
1- شاید برنامه مخربی از طرف شخصی ایجاد شده و توی Source یا رجیستری هستش که فقط و فقط دیتا بیس موجود با Table هی موجود رو شناسایی میکنه و پاک میکنه؟؟؟؟؟؟؟؟؟؟؟؟؟
2- شاید ویروس یا همچین چیزی هستش؟؟؟؟؟
3- جدیدا 3 روز یک بار این اتفاق ( پاک کردن DataBase ) می افته و من فقط از آخرین BackUp استفاده میکنم که در دسترس هست
4- امیدوارم کسی بتونه راه حل مناسبی بهم ارائه کنه
اطلاعات برام خیلی مهمه و چون باید سرور همیشه آپ باشه نمیتونم سرور رو یک روز دان کنم تا همه چیز رو از اول نصب و پیاده سازی کنم
از کمکها و راهنمایی هاتوم پیشاپیش تشکر میکنم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.