بتاريخ: 6 مارس 200719 سنة comment_93411 ماهو Bypassing Oracle dbms_assert؟؟؟؟الســـــــــلام عليكم ...........................................................كما تعودت ان اقدم المعلومات الجديدة المتعلقة بالأمن قرأت موضوعين من خلال التجول في المواقع والموضوع حساس وهو متعلق بتجاوز الحزمة dbms_assert وهي موجودة في الإصدار 10g .خلاصة الموضوع :أن هذه الحزمة يمكن تجاوزها باستخدام علامات الاقتباس الثنائية (")مما يؤدي لفضح البيانات الحساسة والتلاعب بها وغير ذلك.لذلك سوف اربط الموضوعين على اساس- تعريف الحزمة.- طريقة تجاوز الحزمة.- الحل لتجنب هذه المشكلة .المقال الأول :خادم قاعدة بيانات اوراكل يستخدم بشكل واسع خادم قاعدة البيانات العلائقية لمشاريع كل الحجوم , لكي تمدد الوظيفة لإدارة قاعدة البيانات تم عمل حزم إضافية مستعملة بخادم قاعدة البيانات هذه الحزم الإضافية تحتوي على (Functions & procedure) متعدده بعض من هذه الحزم في خادم قاعدة البيانات هي dbms_assertتعريف بالحزمــــــــــة: وهي تزود بآلية مركزية من حيث الإدخال . وتكون ممكنه بواسطة مستخدم او مصادر غير أمنة ويمكن ان تفحص لـ( (SQL injection stringsونوع اخر من الهجمات العنيفة وهذه الوظيفة تعمل فحص لإدخال القيم لكي يتوافق مع الخصائص الأساسية لأسم sql المشروط . والاسم المشروط يمكن ان يكون من عدة اسماء بسيطة تمثل (schema, objects, and database links) وهي تضمن ان العنصر لايحتوي على (meta-characters) مثل علامة (-) او (').الضعف قد ابلغ عنه في بعض الوظائف المتضمنه للحزمة وسبب هذا الضعف يأتي نتيجة طريقة (Functions & procedure) الموجودة في الحزمة .طريقة تجاوز الحزمة :الوظيفة verify input. QUALIFIED_SQL_NAME في الحزمة الضعيفة يمكن تجاوزها عن طريق إرفاق علامات الاقتباس الثنائية(") ولذلك الشخص المهاجم البعيد ان يدخل استعلامات sql ماكرة ويعالجها بواسطة خادم قاعدة البيانات .المهاجم او المعتد على قاعدة البيانات مع حدود صلاحياته يستطيع ان يستغل هذا الضعف بارسال سلسلة مصنوعة بعناية كبيرة تتكون من( (characters and queries مرفقة بينعلامات الاقتباس الثنائية ونتيجة لهذه السلسلة الماكرة يمكن ان تنفذ الاستعلامات في الخادم مما يؤدي لفضح البيانات الحساسة ويمكن التلاعب في البيانات وتعديلهالمقال الثاني :قام احد الباحثين في امن نظام الاوراكل بأعلام شركة الاوراكل عن بعض المشاكل المتعلقة باستخدام packages ولم تمنعه الاوراكل من نشر هذه المعلومات وذلك حسب قولها (“Oracle sees no problem with your publication of the white paper.”)تعريف بالحزمــــــــــة: لحماية حزم نظام الاوراكل PL_SQL قامت اوراكل في الإصدار 10G بتعريف حزمة جديدة تدعى الحزمة dbms_assert وهي تشمل الوظائف التالية :ENQUOTE_LITERALENQUOTE_NAMENOOPQUALIFIED_SQL_NAMESCHEMA_NAMESIMPLE_SQL_NAMESQL_OBJECT_NAMEطريقة تجاوز الحزمة :وموضوعنا متعلق بـ DBMS_ASSERT.QUALIFIED_SQL_NAMEتوجد طريقة لتجاوز الحزمة dbms_assert وهي تعتمد على استعمال بعض البارميترات المحترفة بين علامات الأقتباس .قد تمكنك من تجاوز عملية تصديق الإدخال لـلحزمة dbms_assert وإدخال كود sql .لتصبح الأمور اكثر وضوحا لنأخذ الأمثلة مثال بدون استخدام الحزمة dbms_assert:نعمل procedure يأخذ باراميتر TABLENAME وينفذ من خلال جملة dynamic SQL مثال باستخدام الحزمة dbms_assert(ولازالت ضعيفة):الان يتم تعقيم عملية إدخال المستخدم بواسطة dbms_assert.qualified_sql_name. الان نمرر الجدول 'CAT' كباراميتر وكل شيء سيعمل حسب المتوقع الان نحاول إدخال كود إضافي من هنا يتضح طريقة تقنية عمل DBMS_ASSERTمن الملاحظ ان dbms_assert.qualified_sql_name قامت بإلقاء الخطأ وتجنب تنفيذ dynamic SQL هنا خلاصة الموضوع لنقوم الان بإدخال اسم الكائن في علامات اقتباس ثنائية (")والمفاجأة انه يعمل وبذلك يتم تخطي هذه الحزمة باستخدام علامات الاقتباس الثنائية .وبذلك يستطيع مهاجمون الداتابيز بتخطي هذه الحزمة بهذه الطريقة وفعل الكثير من الكوارثالحل(لتجنب المشكلة) :ينصح لتجنب الخطر يجب سحب صلاحية1 -CREATE PROCEDURE 2ALTER PROCEDURE – وذلك لتفادي عملية تصعيد الامتياز بإدخال ((PROCEDURES&FUNCTIONS اتمنى ان تعـــــــــــــــــــــ الفائدة ـــــــــــــــــم للجميع وتحياتي .......................وهذا الملــــــــــــــــــفbypass_dbms_assert.pdfتحياتي تقديم بلاغ
بتاريخ: 7 مارس 200719 سنة comment_93490 مشكور اخي وجزاك الله خيرا على هذا الموضوع وجاري الإطلاع والظاهر انه يدوخ شوي كما ذكرت الأخت عزهتحياتي تقديم بلاغ
بتاريخ: 7 مارس 200719 سنة comment_93491 The reason Oracle sees no problem with the release of the paper is that for your technique to work the DBMS_ASSERT.QUALIFIED_SQL_NAME has to be used in the wrong context; you simply wouldn't use QUALIFIED_SQL_NAME in this manner - i.e. within quotes. I've just had a quick look through the SYS packages and find no instance of DBMS_ASSERT.QUALIFIED_SQL_NAME being used this way. If there is such a case, in other words I've missed it, then it would be a flaw in the package/procedure/function itslef and not a problem with DBMS_ASSERT - with the fix being to use the correct DBMS_ASSERT function instead of QUALIFIED_SQL_NAME or alternatively use a bind variable. تقديم بلاغ
بتاريخ: 8 مارس 200719 سنة كاتب الموضوع comment_93547 مشكورين للأطلاع على الموضوع.........................حصلت علـــــــــــــى شرح مبسط للغرض من الـ(functions ) التابعة للحزمة dbms_assert ENQUOTE_LITERAL ENQUOTE_NAME NOOP QUALIFIED_SQL_NAME SCHEMA_NAME SIMPLE_SQL_NAME SQL_OBJECT_NAME dbms_assert.doc تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.