اقدامات امنیتی ضروری در پایگاه داده اوراکل
اقدامات امنیتی ضروری در پایگاه داده اوراکل
در این مطلب چند گام اولیه ضروری به منظور افزایش امنیت سرورهای پایگاه داده اوراکل را مورد بحث قرار میدهیم.
کلمات عبور پیشفرض اوراکل
اوراکل چندین Schema به صورت پیشفرض ایجاد میکند و هر کدام دارای یک کلمه عبور پیشفرض میباشد، هر چند اغلب این کاربران در وضعیت Locked قرار دارند با این حال تعویض کلمات عبور پیشفرض اقدام مفیدی در جهت محدودیت دسترسی غیر مجاز به آنها خواهد بود. از سوی دیگر برخی کاربران کلمات عبور خود را به نحوی تغییر میدهند که با نام کاربری خود یکسان باشد، که این امر میتواند از لحاظ امنیتی خطراتی در پی داشته باشد.
ابزار Oracle Default Password Auditing Tool که توسط Pete Finnigan ارائه شده است به بررسی کلمات عبور پیشفرض و همچنین بررسی کاربرانی که کلمه عبور یکسانی با نام کاربری خود دارند میپردازد و روش مناسبی برای کاهش این نوع خطرات امنیتی است. برای استفاده از این ابزار ابتدا فایل فشرده شده آن را دریافت نموده، فایل اسکریپت osp_install.sql را به منظور نصب آن اجرا نمایید و فایل اسکریپت ops_exec.sql را برای اجرای ابزار استفاده نمایید.
در اوراکل نسخه ۱۱g یک View جدید به نام DBA_USERS_WITH_DEFPWD وجود دارد که تمامی کاربران دارای کلمه عبور پیشفرض را نمایش میدهد.
SELECT * FROM dba_users_with_defpwd ORDER BY username;
USERNAME
——————————
APPQOSSYS
BI
DIP
EXFSYS
IX
MDDATA
MDSYS
OLAPSYS
ORACLE_OCM
ORDDATA
ORDPLUGINS
ORDSYS
OUTLN
OWBSYS
PM
SCOTT
SI_INFORMTN_SCHEMA
SPATIAL_CSW_ADMIN_USR
SPATIAL_WFS_ADMIN_USR
WMSYS
XDB
XS$NULL
۲۲ rows selected.
SQL>
مدیریت کلمه عبور
Lock نمودن حسابهای کاربری بدون استفاده
پایگاهداده اوراکل دارای قابلیتهایی برای کمک به افزایش امنیت کاربران است. حسابهای بدون استفاده باید Lock شوند و همینطور آن دسته از حسابهایی که به صورت متناوب مورد استفاده قرار میگیرند نیز باید تنها در هنگام نیاز Unlocked شوند.
ALTER USER scott ACCOUNT UNLOCK;
— Use the schema.
ALTER USER scott ACCOUNT LOCK;
همانطوری که در زیر نشان داده شده است، طول عمر، تاریخ انقضاء و تاریخچه کلمه عبور به وسیله Profile ها قابل مدیریت است.
CONN sys/password AS SYSDBA
CREATE PROFILE my_profile LIMIT
FAILED_LOGIN_ATTEMPTS 3 — Account locked after 3 failed logins.
PASSWORD_LOCK_TIME 5 — Number of days account is locked for. UNLIMITED required explicit unlock by DBA.
PASSWORD_LIFE_TIME 30 — Password expires after 90 days.
PASSWORD_GRACE_TIME 3 — Grace period for password expiration.
PASSWORD_REUSE_TIME 120 — Number of days until a specific password can be reused. UNLIMITED means never.
PASSWORD_REUSE_MAX 10 — The number of changes required before a password can be reused. UNLIMITED means never.
/
ALTER USER scott PROFILE my_profile;
پارامترهای PASSWORD_REUSE_TIME و PASSWORD_REUSE_MAX به طور پیوسته با هم عمل میکنند به نحویکه اگر یکی از این دو پارامتر به صورت نامحدود تنظیم شود از استفاده مجدد کلمه عبور جلوگیری میشود.
تأیید اعتبار کلمه عبور: اجرای اجباری فرآیند پیچیدهسازی
پیچیدهسازی کلمه عبور فرآیندی است که اجرای یکسری عملیاتهای تأیید اعتبار کلمه عبور را اجباراً اعمال میکند. اوراکل در فایل $ORACLE_HOME/rdbms/admin/utlpwdmg.sql یک نمونه ساده از فرآیند تأیید اعتبار کلمه عبور را قرار داده است؛ حتی در صورت نیاز به اعمال پیچیدهتر در این فرآیند میتوانید نسخه تأیید اعتبار اختصاصی خود را تولید نمایید. این فرآیند سه پارامتر نام کاربری، کلمه عبور و کلمه عبور قبلی را دریافت میکند و یک مقدار منطقی بازمیگرداند، در صورتی که مقدار بازگردانده شده برابر True باشد نشانگر معتبر بودن کلمه عبور است. در نمونه زیر تنها طول حداقل ۸ کاراکتری برای کلمه عبور تعیین شده است.
CREATE OR REPLACE FUNCTION my_verification_function (
username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2)
RETURN BOOLEAN AS
BEGIN
IF LENGTH(password) < 8 THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
END my_verification_function;
/
زمانی که این عملگر در SYS Schema اجرا شود، میتواند توسط پارامتر PASSWORD_VERIFY_FUNCTION یک Profile فراخوانی شود.
ALTER PROFILE my_profile LIMIT
PASSWORD_VERIFY_FUNCTION my_verification_function;
قطعه کد زیر یک Profile کامل را به یک کاربر اختصاص داده و آن را تست مینماید.
SQL> ALTER USER scott PROFILE my_profile;
User altered.
SQL> ALTER USER scott IDENTIFIED BY small;
ALTER USER scott IDENTIFIED BY small
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-28003: password verification for the specified password failed
SQL> ALTER USER scott IDENTIFIED BY much_bigger;
User altered.
SQL>
یک نمونه بهتر از عملگر تأیید اعتبار کلمه عبور در اسکریپت $ORACLE_HOME/rdbms/admin/utlpwdmg.sql آورده شده است.
در صورتی که برای انتخاب کلمه عبور مناسب دچار چالش هستید میتوانید از ابزارهایی مانند RandPass.com برای تولید کلمه عبور استفاده نمایید که میتواند کلمات عبور مناسب تولید نماید.
در اوراکل نسخه ۱۱g اسکریپت $ORACLE_HOME/rdbms/admin/utlpwdmg.sql به منظور بهبود عملگر تأیید اعتبار کلمه عبور بهروزرسانی شده است و همچنین این عملگر بر روی Profile پیشفرض نیز به کار گرفته شده است و برای تمام کاربران فعال است.
کلمات عبور حساس به وضعیت حروف
از اوراکل نسخه ۱۱g به بعد، کلمات عبور میتوانند به حالت حروف خود حساس باشند. (Case Sensitive)
ابطال دسترسیهای Job-Related
پیش از اوراکل نسخه ۱۰g، هر کاربری که دارای دسترسی به DBMS_JOB Package بود توانایی تنظیم Job های پایگاهداده را داشت. در آن نسخهها این وضعیت یک خطر امنیتی بالفعل محسوب نمیشد، اما میتوانست به کاربران امکان Schedule بسیاری از عملیاتهای نامناسب را بدهد که بر روی کارایی پایگاهداده تأثیر منفی بگذارد، به همین دلیل پیشنهاد میشود دسترسی عمومی به DBMS_JOB Package غیر فعال شود.
REVOKE EXECUTE ON dbms_job FROM PUBLIC;
اوراکل نسخه ۱۰gr1 یک Scheduler جدید، به همراه مفهومی از Job های External را معرفی نمود. امنیت این Scheduler به وسیله دو پارامتر جدید CREATE JOB و CREATE ANY JOB تأمین میشود و هیچکدام از آنها مجوز (Privilege) پیشفرضی ندارند که در نگاه اول یک مزیت به حساب میآید در حالیکه ایجاد Job توسط هر کاربر امکان دسترسی کامل به کاربر SYS و تمام مجوزها و دسترسیهای آن را فراهم میآورد. به همین علت هیچ دلیلی برای اعطاء مجوز CREATE ANY JOB به کاربر وجود ندارد و توصیه میشود در صورت امکان مجوز CREATE JOB نیز لغو شود.
تهدید External Job ها نیز مانند آن است که اجازه دسترسی کامل به سیستمعامل شامل امکان اتصال سیستمعامل به پایگاهداده فراهم شده باشد.
در اوراکل ۱۰gr1 تمایزی بین Internal Job و External Job وجود ندارد، بنابراین حتی مجوز CREATE JOB نیز یک ضعف امنیتی به حساب میآید. این شرایط در اوراکل ۱۰gr2 به وسیله اضافه شدن مجوز CREATE EXTERNAL JOB بهبود یافته است و میتوان مجوز جداگانه دسترسی برای Internal Job و External Job در نظر گرفت، با این حال اعطاء دسترسی Scheduler باید بسیار محتاطانه انجام شود.
ابطال مجوزهای غیر ضروری
بر اساس یک قاعده کلی باید به کاربران کمترین میزان مجوزها و دسترسیها جهت انجام اعمالشان داده شود. ابطال مجوزهای غیر ضروری از بروز حملات امنیتی بالقوه جلوگیری مینماید.
REVOKE CREATE DATABASE LINK FROM connect;
REVOKE EXECUTE ON utl_tcp FROM public;
REVOKE EXECUTE ON utl_smtp FROM public;
REVOKE EXECUTE ON utl_http FROM public;
REVOKE EXECUTE ON utl_mail FROM public;
REVOKE EXECUTE ON utl_inaddr FROM public;
REVOKE EXECUTE ON utl_file FROM public;
REVOKE EXECUTE ON dbms_java FROm public;
همچنین ایجاد Role های غیر ضروری نیز خطر آفرین است و توصیه میشود Role ها تنها به مجوزهای واقعاً مورد نیاز آنها ایجاد گردد.
امنیت Listener
کلمه عبور TNS listener در نسخههای ماقبل اوراکل ۱۰gr1 با استفاده از ابزارهای lsnrctl یا netmgr GUI اعمال میشد. در هنگام استفاده از ابزار lsnrctl ، دستور change_password به منظور تنظیم کلمه عبور برای اولین بار و یا تغییر کلمه عبور قبلی مورد بهرهبرداری قرار میگرفت.
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myserver.mydomain)(PORT=1521)))
Password changed for LISTENER
The command completed successfully
LSNRCTL>
در صورت تخصیص اولین کلمه عبور مقدار قبلی در این دستور خالی قرار داده میشود و پس از تنظیم کلمه عبور تنظیمات با دستور save_config ذخیره میگردد.
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myserver.mydomain)(PORT=1521)))
Saved LISTENER configuration parameters.
Listener Parameter File /u01/app/oracle/product/10.1.0/db_1/network/admin/listener.ora
Old Parameter File /u01/app/oracle/product/10.1.0/db_1/network/admin/listener.bak
The command completed successfully
LSNRCTL>
پس از تخصیص کلمه عبور، تلاشهای بعدی برای اجرای اعمالی مانند Stop موفقیت آمیز نخواهد بود تا زمانیکه از دستور set password استفاده شود.
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL>
تصویر زیر فرآیند مشابه را در ابزار Oracle Net Manager (netmgr) GUI نشان میدهد.
علاوه بر محافظت توسط کلمه عبور پیشنهاد میشود پورت پیشفرض ۱۵۲۱ برای TNS listener را به پورت دیگری تغییر دهیم. این عمل باعث جلوگیری از حملات Worm ها به پورت پیشفرض ۱۵۲۱ میشود ولی تنها تأخیر اندکی در حمله تا پیدا شدن پورتهای باز سیستم مورد هجوم به وجود میآورد.
تنظیمات پورت TNS listener توسط ویرایش فایل $ORACLE_HOME/network/admin/listener.ora و راهاندازی مجدد Listener تغییر میکند و علاوه بر این محتویات LDAP یا محتویات فایل $ORACLE_HOME/network/admin/tnsnames.ora در هر Client برای اعمال تغییرات باید ویرایش شود.
دسترسی Client ها به سرور نیز به وسیله قطعه کد زیر در فایل محدود میشود.
tcp.validnode_checking = YES
tcp.excluded_nodes = {list of IP addresses}
tcp.invited_nodes = {list of IP addresses}
تنظیمات بالا در معماری tier-3 و در محیطی که تنها تعداد اندکی Applicaton Server به پایگاهداده متصل است به خوبی عمل میکند.
محدودیت دسترسی Schema فقط به یک IP آدرس اختصاصی
یک AFTER LOGON trigger میتواند برای محدودیت دسترسی Schema استفاده شود. Trigger زیر دسترسیهای USER1 و USER2 را تنها زمانیکه ارتباط از طریق IP های ۱۹۲٫۱۶۸٫۰٫۱۰۱ و ۱۹۲٫۱۶۸٫۰٫۱۰۲ باشد برقرار میسازد.
CREATE OR REPLACE TRIGGER system.check_ip_addresses
AFTER LOGON
ON DATABASE
BEGIN
IF USER IN (‘USER1’, ‘USER2’) THEN
IF SYS_CONTEXT(‘USERENV’, ‘IP_ADDRESS’) NOT IN (‘192.168.0.101′,’192.168.0.102’) THEN
RAISE_APPLICATION_ERROR(-20000, ‘Can not log in from this IP address (‘ || l_ip_address || ‘)’);
END IF;
END IF;
END;
/
میتوان این نوع Trigger ها را به صورت جداگانه و یا در حالت ادغام شده با هم استفاده نمود، این نکات را فراموش نکنید:
• Trigger باید روی پایگاهداده استفاده شود تا از RAISE_APPLICATION_ERROR یک Schema خاص در هنگام Login جلوگیری شود.
• Trigger بر روی تمامی Connection Attempt ها اعمال میشود پس از محدودیتهای User های خود مطمئن باشید تا از مقدار Overhead سیستم کاسته شود.
چند نکته دیگر دراقدامات امنیتی ضروری در پایگاه داده اوراکل:
• در هنگام نصب سیستمعامل و پایگاهداده فقط امکانتی که واقعاً مورد نیاز است را فعال نمایید، برخی امکانات از قبیل HTTP Server و XML DB در برابر حملات امنیتی بسیار آسیبپذیر میباشند مگر آنکه اقدامات امنیتی بر روی آنها اعمال شود. همچنین برخی امکانات دیگر نیز به Schema خاص خود نیاز دارند که باید از لحاظ امنیتی مورد توجه قرار گیرد.
• امنیت سیستمعامل سرور پایگاهداده را افزایش دهید، این نکات کوچک میتواند امنیت پایگاهداده شما را در زمانیکه سیستمعامل از لحاظ امنیتی ضعیف باشد حفط کند:
• از فعال بودن Firewall سیستم مطمئن باشید.
• تعداد افرادی که به سرور دسترسی دارند را کنترل نمایید.
• در هر وضعیتی از کلمات عبور مناسب استفاده نمایید.
• بخشهای حساس سیستمعامل را محافظت نمایید.
• تمامی Security Patche ها را در اسرع وقت اعمال نمایید.
• توصیه میشود که data dictionary protection با تغییر پارامتر اولیه ۰۷_DICTIONARY_ACCESSIBILITY به مقدار False فعال شود، این امر اعمال تغییرات کاربران با مجوز ALL-type system را در data dictionary محدود مینماید، حتی اگر آنها دارای مجوز DBA-privileged باشند.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.