مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۴ دقیقه·۱ سال پیش

معرفی قابلیت جدید درپایگاه داده اوراکل ۲۳c به نام SQL FIREWALL + فیلم


مقدمه

اوراکل در پایگاه داده ۲۳c خود قابلیتی به نام SQL FIREWALL را معرفی کرده که  امکاناتی مشابه محصول Database Firewall  می باشد. البته که محصول AVDF اوراکل به مراتب کامل تر می باشد. در هر صورت امکان جدید معرفی شده در خود محصول پایگاه داده قرار دارد و امکان خوبی برای جلوگیری از sql injection و نفوذ هایی از این قبیل می باشد. در این مستند می خواهیم این امکان را مورد بررسی قرار بدیم.

SQL FIREWALL :

در خصوص معرفی عملکرد این امکان، باید در ابتدا به این نکته اشاره کرد که در ۲ مرحله آموزش و عملیات، اجرا می شود.

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

عملیات : در مرحله عملیات، از داده های ذخیره شده استفاده می شود و White list تشکیل می شود.سپس براساس این لیست فعالیت های غیر معمول شناسایی می شود. در ادامه می توان قابلیت block کردن فعالیت های خارج از white list را فعال کرد.

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

برای مشاهده فیلم اینجا کلیک کنید.

بررسی در محیط آزمایشگاهی :

در ابتدا کاربری را با نام DFADMIN ایجاد می کنیم و به آن دسترسی های لازم برای مدیریت SQL FIREWALL را می دهیم

create user DFADMIN identified by 123;

grant create session, sql_firewall_admin, audit_admin to dfadmin;

حال کاربر DEVELOPER را  ایجاد می کنیم.

create user DEVELOPER identified by 123;

grant create session,DB_DEVELOPER_ROLE to DEVELOPER;

در ادامه با کاربر DFADMIN ابتدا firewall را فعال می کنیم و کاربر DEVELOPER را به آن معرفی می کنیم تا فعالیت های آن را ذخیره کند.

EXEC dbms_sql_firewall.enable;

SELECT status FROM dba_sql_firewall_status;

EXEC dbms_sql_firewall.create_capture(‘DEVELOPER’);

SELECT username, status FROM dba_sql_firewall_captures;

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

CREATE TABLE developer.objects_new

AS

SELECT * FROM all_objects;

select count(*) from objects;

select count(*) from objects ob where rownum < 100;

بعد از مدتی که مطمئن شدیم که اطلاعات برای مرحله آموزش کافی می باشد، ذخیره سازی را با کاربر DFADMIN متوقف می کنیم.

EXEC dbms_sql_firewall.stop_capture (‘DEVELOPER’);

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

SELECT username,

ip_address,

client_program,

os_user

FROM dba_sql_firewall_session_logs

WHERE username = ‘DEVELOPER’;

SELECT *

FROM dba_sql_firewall_capture_logs

WHERE username = ‘DEVELOPER’:

با توجه به اطلاعات بدست آمده white list را تشکیل می دهیم.

EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST (‘DEVELOPER’);

با کوئری های زیر اطلاعات مربوط به list را مشاهده می کنیم.

SELECT SQL_TEXT FROM DBA_SQL_FIREWALL_ALLOWED_SQL WHERE USERNAME =’DEVELOPER’;

select ip_address from dba_sql_firewall_allowed_ip_addr where username=’DEVELOPER’;

select os_program from dba_sql_firewall_allowed_os_prog where username=’DEVELOPER’;

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

exec dbms_sql_firewall.enable_allow_list (‘DEVELOPER’);

برای آزمایش، با کاربر DEVELOPER دستورات زیر را اجرا می کنیم.

update developer.objects_new ne set ne.OBJECT_NAME = ‘masoud’ where object_id = 647;

حال با کاربر DFADMIN کوئری های زیر را اجرا می کنیم و مشاهده می کنیم این دستور را شناسایی کرده است.

select username,status,block from dba_sql_firewall_allow_list;

select username,sql_text,cause,firewall_action from dba_sql_firewall_violations;

درادامه قابلیت BLOCK کردن را با کاربر  DFADMNفعال می کنیم

exec dbms_sql_firewall.update_allow_list_enforcement (‘DEVELOPER’,block=>TRUE);

از این لحظه اگر کاربرDEVELOPER فعالیتی خارج از whitelist انجام دهد جلوی اجرای آن گرفته می شود و با خطای زیر مواجه می شود.

ORA-47605: SQL Firewall violation

برای آزمایش این دستور را با کاربر DEVELOPER بار دیگر اجرا می کنیم

update developer.objects_new ne set ne.OBJECT_NAME = ‘masoud’ where object_id = 647;

همانطور که مشاهده می کنید با خطا مواجه می شود.

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

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

oracle 23c sql firewallخدمات نگهداری اوراکلمشاوره اوراکلآموزش پایگاه داده اوراکلمسعود سلطانی راد
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید