مهدی مومنی
مهدی مومنی
خواندن ۱۲ دقیقه·۲ سال پیش

پایگاه داده و امنیت آن : Database - Database Security

به نام خدا ......

اصلا Database یا پایگاه داده یا بانک اطلاعاتی چیه ؟!...

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

( تکنیک های مدلسازی داده یا Data modelling : یک مدل داده معمولاً شبیه دیاگرامی است که بوسیله توصیف­های متنی پشتیبانی می­شود. این مدل اجزائی را که برای کسب و کار مهم هستند (مانند افراد، مکان­ها، چیزها و تبادلات کسب و کار)، ویژگی­های مرتبط با آنها و روابط مهم میان آنها را بصورت تصویری به نمایش می­ گذارد. مدل­های داده بطور گسترده­ ای هم در استخراج و تحلیل و طراحی الزامات و هم برای پشتیبانی از اجرا و بهبود مستمر بکار گرفته می­شوند. )


اصلا بیاید ببینیم داده ( Data ) یعنی چی !...

به طور کلی همه دانسته‌ها، آگاهی‌ها، داشته‌ها، آمارها، شناسه‌ها، پیشینه‌ ها و پنداشته‌ها داده که به انگلیسی معادل کلمه Data هست محسوب می‌شود.

به اعداد، حروف و علائم که جهت درک و فهم مشترک از انسان‌ها یا رایانه سرچشمه می‌گیرند داده می‌گویند

( مثلا اسم یک شخص یک داده محسوب می شود )


داده‌ها معمولاً از سوی انسان‌ها به صورت حروف، اعداد، علائم و در رایانه به صورت نمادهایی (همان رمزهای صفر و یک) قراردادی ارائه می‌شوند.


انواع پایگاه داده (Database)

  • پایگاه داده رابطه‌ای
  • پایگاه داده NoSQL
  • پایگاه داده مبتنی بر فضای ابری
  • پایگاه داده ستونی
  • پایگاه داده ستون گسترده
  • پایگاه داده شی‌گرا
  • پایگاه داده کلید مقدار
  • پایگاه داده سلسله مراتبی
  • پایگاه داده گرافی
  • پایگاه داده سری زمانی

به اختصار چندتا از انواع پایگاه داده را توضیح می دهیم :

پایگاه داده رابطه ای :

Relational Database
Relational Database

پایگاه داده‌های رابطه‌‌ای از دهه ۱۹۷۰ تا به امروز مورد استفاده قرار می‌گیرند. پایگاه داده رابطه‌ای روشی است که در آن داده‌ها در چندین جدول مرتبط ذخیره می‌شوند. درون این جدول‌ها، داده‌ها در سطرها و ستون‌های مختلف قرار دارند. سیستم مدیریت پایگاه داده رابطه‌ای (RDBMS) یک برنامه است که به واسطه آن، امکان ایجاد، به‌روزرسانی و مدیریت پایگاه داده رابطه‌ای فراهم می‌شود.


زبان پرس و جو ساختاریافته (Structured Query Language | SQL) رایج‌ ترین زبان برای خواندن، ایجاد، به‌روز‌رسانی و حذف داده‌ها است. پایگاه داده‌ رابطه‌ای بسیار قابل اعتماد است و در آن‌، از استاندارد ACID پیروی می‌شود. منظور از ACID مجموعه‌ای از استانداردها است که با کمک آن‌ها، تراکنش‌های پایگاه داده قابل‌اعتماد خواهند شد. واژه ACID از مفاهیمی همچون اتمی بودن (Atomicity)، سازگاری (Consistency)، جداسازی (Isolation) و دوام (Durability) برگرفته شده است.

از جمله مثال‌های پایگاه داده رابطه‌ای می‌توان به Microsoft SQL Server، پایگاه داده اوراکل، MySQL، پایگاه داده PostgreSQL و IBM Db2 اشاره کرد .


پایگاه داده NoSQL :

پایگاه داده NoSQL
پایگاه داده NoSQL

پایگاه های داده NoSQL داده ها را در اسناد به جای جداول رابطه ای ذخیره می کنند .

بر این اساس، ما آنها را به عنوان "نه تنها SQL" طبقه بندی می کنیم و آنها را بر اساس انواع مدل های داده انعطاف پذیر تقسیم می کنیم .

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



RDBMS : Relational Database Management System

سیستم مدیریت پایگاه داده رابطه ای



بیاید بریم سراغ زبان SQL ببینیم اصلا چیه !...

در مدل رابطه‌ای داده‌ها، زبان پرسمان ساخت‌یافته (به انگلیسی: Structured Query Language) با کوته‌نوشت SQL نوعی زبان خاص دامنه در برنامه‌نویسی است که برای مدیریت داده‌های نگهداری‌شده در سیستم مدیریت پایگاه‌داده رابطه‌ای (RDBMS) یا برای پردازش‌های جریانی در سیستم مدیریت جریان داده رابطه‌ای (RDSMS) طراحی شده‌است .

این زبان مخصوصاً برای رسیدگی به داده ساخت‌یافته مفید می‌باشد (یعنی داده‌ای که رابطه بین موجودیت‌ها و متغیرها را در خود گنجانده‌است) .

اس کیو ال ( SQL ) دو مزیت اصلی نسبت به رابط‌های کاربردی خواندن-نوشتن قدیمی تر مثل ISAM یا VSAM دارد ، اولا SQL مفهوم دسترسی به چندین رکورد با یک دستور منفرد را معرفی کرده‌است، و دوما SQL نیاز به تعیین آنکه «چگونه» باید به یک رکورد رسید را حذف نموده‌است .

واژه‌های کلیدی اس‌کیوال به گروه‌های مختلفی تقسیم می‌گردد، در زیر به برخی از آن‌ها اشاره می‌کنیم آن‌هایی که آشنا تر هستند را تنها با یک مثال شرح می‌دهیم:

  • دستور بازیابی داده‌ها: SELECT
  • دستورهای عملیات داده‌ها: INSERT,UPDATE,MERGE,TRUNCAT, DELETE
  • دستورهای تراکنش داده‌ها: COMMIT و ROLLBACK
  • دستورهای تعریف داده‌ها: CREATE وDROP
  • دستورهای کنترل داده‌ها: GRANT و REVOKE

مثالی برای دستور های SQL :

با دستور پایین یک یا چند داده را از جدول table_name پیدا میکنیم :

SELECT column1, column2, ...FROM table_name;

با دستور زیر چند داده را به یک سطر از جدول table_name اضافه میکنیم :

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

با دستور زیر یک سطر از جدول table_name را با شرط condition حذف میکنیم :

DELETE FROM table_name WHERE condition;


امنیت پایگاه داده !!!


واژه «امن» یعنی بی گزند و بی آسیب و دارای آرامش. امنیت هم یعنی بی گزندی و بی آسیبی یا حالتی که در آن گزند و خطر و آسیب راه ندارد و آرامش در آن برقرار است.

همانطور که از معنای واژه امنیت پیداست ، ما باید کار هایی انجام دهیم تا اطلاعات یا داده های ما که به منزله با ارزش ترین سرمایه های هر سازمانی تلقی میشود در امان بماند .

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

  • اما اشتباه نکنید همیشه انسان ها نیستند که پایگاه داده ی مارا به خطر می اندازند :

ما علاوه بر بستن راه نفوذ گران باید به دنبال راه هایی برای پشتیبانی گیری از داده های خود باشیم

زیرا سخت افزار و وسیله برقی هر لحظه احتمال خراب شدن و نابودی را دارد که با نابودی شرکت یا سازمان برابر است .

پس بهتر است که در دوره های کوتاه مدت از داده های خود پشتیبان گیری کنیم .


چرا امنیت پایگاه داده مهم است ؟

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

نقض امنیت داده های یک سازمان ممکن است پیامدهای جبران ناپذیری را برای آن سازمان به بار آورد.


امینت پایگاه داده عبارت است از :

  • جلوگیری از افشای غیرمجاز داده
  • جلوگیری از تغییر غیرمجاز داده
  • حفظ اطالعات و پایداری پایگاه داده


برخی از روش های نفوذ به اپلیکیشن و دیتابیس (تهدیدات دیتابیس):

1 - فیشینگ (Phishing) یا مهندسی اجتماعی :

phishing
phishing

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

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

نفوذگر میتواند با سرقت اطلاعات ادمین یا مدیر سازمان وارد دیتابیس شود و اطلاعات را سرقت کند .

2 - حملات انکار سرویس (DDoS) :

حملات DOSو DDOSیکی از خطرناک ترین و جدیدترین حملاتی است که در بستر اینترنت انجام می‌شود. DDOS مخفف چیست؟ کلمه DDOSمخفف عبارت Distributed Denial of Service است و هدف از این حملات خراب کردن سرویس مورد نظر نیست بلکه شبکه و سرور مورد نظر را وادار به ناتوانی در ارائه سرویس عادی با هدف قرار دادن پهنای باند شبکه یا اتصال پذیری می‌نماید. این حملات با ارسال بسته‌های داده به قربانی انجام می‌شود که شبکه یا ظرفیت پردازشی قربانی را غرق در بسته‌های اطلاعاتی می‌کند و مانع دستیابی کاربران و مشتریان به سرویس می‌شود.


3 - تزریق کد اس کیو ال SQL Injection :

SQL Injection
SQL Injection

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

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


4 - حملات اسکریپت نویسی بین سایتی (XSS) :

XSS attack
XSS attack


حمله XSS یا Cross Site Scripting یکی از رایج‌ترین حمله‌های سایبری تحت‌وب است که در میان انواع حملات وب در جایگاه بالایی قرار دارد. مخفف این عبارت CSS است اما برای آنکه با زبان برنامه‌نویسی اشتباه گرفته نشود به آن XSS گویند. روش حمله از طریق تزریق کدهای مخرب به صفحه‌ی وب قربانی و اجرای این کدهای جاوا اسکریپت توسط مرورگر است که در نهایت منجر به دسترسی غیرمجاز به اطلاعاتی مثل مشخصات کاربری یا اطلاعات حساب قربانی خواهد شد.

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

5 - حملات بروت فورس Brute Force :

Brute Force
Brute Force

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


6 - سرقت کوکی ها Cookie theft :

نوعی حمله هکری است که طی  آن نفوذگر دسترسی غیرمجاز به اطلاعاتی محرمانه به شیوه ای تسهیل نشده توسط کاربر و یا به session های غیرایمن دست پیدا می کند.


برخی روش‌های کنترل امنیت اطلاعات پایگاه داده :

  • کنترل دسترسی
  • رهگیری پایگاه داده (Database auditing)
  • اصالت سنجی
  • رمزگذاری
  • یکپارچگی داده
  • فرایند پشتیبان گیری
  • امنیت نرم افزار (Application security)


بررسی حمله SQL injection :

حمله SQL Injection یا تزریق کد اس کیو ال از معروف ترین روش های تست نفوز به وب اپلیکیشن ها است :

هدف از انجام این نوع تست نفوذ ، دستیابی مستقیم به رکورد های داخل پایگاه داده است . برای اینکه عملیات SQL Injection به درستی عمل کند، بدیهی است که اولین گام، تشخیص آن است. برای انجام ایـن کـار، نفوذگر ابتدا باید بعضی انواع از نشانه هایی که دلالت بر وجود خطاها در سیستم است، ایجاد کند . اگرچه، پیام های خطا خودشان نمایش داده نمی شوند، application باید توانایی جدا کردن صحیح (یک درخواست صحیح) را از باطل (یک درخواست غیرمعتبر) داشته باشد و نفوذگر به راحتی می آموزد که چطور این آثار را بشناسد، خطاها را پیدا کند و تشخیص دهد آیا آنها به SQL مربوط می باشند یا خیر .

بحث Error handling یا رسیدگی به خطاها باعث می شود که خیلی از خطا های نرم افزار با روشی که برنامه نویس تعین میکند نمایش داده شود و این امر باعث میشود نفوذگر فرایند سخت تری را در پیش بگیرد .



کنترل های امنیتی پایگاه داده :

مرحله اول: مشخص نمودن خط مشی امنیتی سازمان

  • مشخص شدن خط مشی امنیتی سیستم اطالعاتی
  • مشخص کردن نحوه ی کنترل کاربران

مرحله دوم: تعیین کنترل های امنیتی مورد نیاز

  • اقدامات امنیتی پیشگیرانه
  • اقدامات امنیتی تشخیص
  • اقدامات امنیتی جرم شناسی


مشخص نمودن خط مشی امنیتی سازمان :

خط مشی امنیتی سازمان
خط مشی امنیتی سازمان

مشخص کردن خط مشی امنیتی :

• مشخص کردن اطالعاتی که نیاز به محافظت دارند

• دسته بندی اطالعات براساس اهمیت آن ها

• شناسایی تهدیدات

• ارزیابی ریسک

• تعریف نقش های کاربران پایگاه داده

• تعریف حساب های کاربرای بر اساس نقش ها وکاربران

• تخصیص مجوزهای دسترسی به آنها با توجه به نیاز آنها

• بازبینی نقش ها و مجوزهای دسترسی به طور مداوم برای اطمینان از مناسب بودن آنها با توجه به شرایط فعلی پس از اعمال هر گونه تغییر در سازمان

•تعریف خط مشی برای ثبت فعالیت ها

• مشخص کردن هدف از ثبت اطالعات

• تعریف خط مشی برای ثبت فعالیت ها اطالعات سیستم عامل، برنامه کاربردی، پایگاه داده

• مشخص کردن نوع دسترسی ها و شرایط رخ دادن آن ها زمان، اطالعات درخواست شده، ورود به سیستم

• مشخص کردن جزئیات اطالعات ثبت شده زمان، شناسه ی کاربر، آدرس IP

• مشخص کردن نحوه ی نگهداری اطالعات ثبت شده و کنترل دسترسی به آن ها


نحوه ی کنترل کاربران :

تبیین قوانین امنیتی برای کاربران سیستم

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

تبیین قوانین انضباطی برای متخلفان

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

تبیین قوانین انضباطی برای متخلفان

مدیریت پایگاه داده

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

آموزش کارکنان و همکاران

کنترل های امنیتی پایگاه داده در قبال دسترسی غیرمجاز



کنترل های امنیتی – اقدامات پیشگیرانه :

پیکربندی اولیه

  • نصب آخرین وصله های امنیتی ارائه شده
  • انتخاب و نصب حداقل ویژگی های مورد نیاز و حذف ویژگی های اضافی
  • محدود کردن دسترسی پایگاه داده

احراز هویت

مدیریت حساب های کاربری

  • ایجاد حساب های مورد نیاز
  • حذف حساب های اضافه
  • مسدود کردن ورودهای ناموفق

مدیریت کلمه عبور

  • پیچیدگی کلمه عبور
  • تغییر دوره ای کلمه عبور
  • تعیین تاریخ انقضا برای کلمه عبور


رمزنگاری :

رمزنگاری داده های در حال انتقال بین کارگزار و کارخواه

  • SSL/TLS

رمزنگاری داده های ذخیره شده در پایگاه داده

  • فایل های داده
  • فایل های ثبت
  • فایل های پشتیبان
  • مدیریت کلیدهای رمزنگاری


کنترل دسترسی :

اطمینان از مجاز بودن دسترسی به داده

مولفه های کنترل دسترسی

  • خط مشی دسترسی: مشخص کننده ی دسترسی های مجاز به سیستم
  • مکانیزم کنترل دسترسی: پیاده سازی و اعمال خط مشی دسترسی
  • کنترل دسترسی اختیاری
  • کنترل دسترسی اجباری
  • کنترل دسترسی نقش مبنا

کنترل های امنیتی – اقدامات تشخیص و جرم شناسی :

  • تهیه ی گزارش های مناسب برای تشخیص مشکل و تحلیل جرم
  • مدیریت اطالعات ثبت شده Logs
  • محافظت از اطالعات ثبت شده
  • تشخیص چالش برای دسترسی غیرمجاز
  • تحلیل اطالعات ثبت شده برای مشخص شدن نقص امنیتی


نتیجه گیری :

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

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

منابع :

wikipedia.org

couchbase.com

w3schools.com

faradars.org

مرکز آپا دانشگاه یزد : cert.yazd.ac.ir

مرکز آپا دانشگاه صنعتی شریف : cert.sharif.edu


مهدی مومنی

موفق و پیروز باشید .......

sql injectiondatabaseامنیتبرنامه نویسیبرنامه نویس
مهدی مومنی هستم علاقه مند به برنامه نویسی وب ، بیشتر از دو سال که python و django کار می کنم و دوست دارم چیز هایی که یاد میگیرم را با بقیه به اشتراک بزارم .... وبسایت شخصی من https://mahdimomeni.ir
شاید از این پست‌ها خوشتان بیاید