‫ برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها- قانون IDS17-J

شماره:IRCAR201503252
تاريخ:08/01/94
اولين موضوعي كه به طور كلي در برنامه نويسي امن (رجوع شود به مقاله اصول برنامه نويسي امن) و همچنين در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي‌گيرد مربوط به اعتبار سنجي ورودي و پاكسازي داده‌ها است. در ادامه به قانون IDS17-J پرداخته خواهد شد.
قانون IDS17-J – جلوگيري از حملات موجوديت خارجي XML
اعلان‌‍‌هاي موجوديت، ميانبرهايي را به متن‌هاي معمول مورد استفاده يا كاراكترهاي خاص تعريف مي‌كند. اين اعلان‌ها ممكن است يك موجوديت دروني يا خارجي را تعريف كند. در مورد موجوديت‌هاي دروني، محتواي موجوديت در داخل اعلان داده مي‌شود. اما در مورد موجوديت‌هاي خارجي، محتوا بوسيله شناسه منبع يكنواخت (URI) مشخص خواهد شد.
موجوديت‌ها ممكن است تجزيه شوند يا نشوند. به محتواهاي موجوديت تجزيه شده به عنوان متن جايگزين آن اشاره مي‌شود. موجوديت تجزيه نشده منبعي است كه محتواي آن ممكن است متن باشد يا نباشد، و در صورت متن بودن ممكن است متني به جز XML باشد. موجوديت‌هاي تجزيه شده بوسيله نام و با استفاده از ارجاع موجوديت (entity refrence) فراخواني مي‌شود؛ موجوديت‌هاي تجزيه نشده توسط نام فراخواني مي‌شوند.
با توجه به بخش 4-4-3 ("included if validating") از توصيه‌هاي XML W3C:
زماني كه پردازشگر XML، ارجاعي به يك موجوديت تجزيه شده را تشخيص بدهد، براي اعتبارسنجي مستند، پردازشگر بايد متن جايگزين آنرا دارا باشد. اگر موجوديت خارجي باشد و پردازشگر مستند XML را اعتبارسنجي نكند، پردازشگر ممكن است، و نه لزوماً، متن جايگزين موجوديت را دارا باشد.
از آنجايي كه دارا بودن متن جايگزين از يك موجوديت خارجي اختياري است، تمام پردازشگران XML نسبت به حملات موجوديت خارجي در حين اعتبارسنجي آسيب پذير نيستند.
حمله موجوديت خارجي XML (XXE) زماني اتفاق ميافتد كه ورودي XML حاوي ارجاعي به موجوديت خارجي، بوسيله يك تجزيه كننده XML كه به صورت نامناسب پيكربندي شده، پردازش شود. ممكن است مهاجم از حمله XXE و با دستكاري URI موجوديت، براي اشاره به فايل‌هاي درون سيستم فايل محلي براي اخذ دسترسي به اطلاعات حساس استفاده كند؛ اين فايل‌ها ممكن است حاوي داده حساس مانند كلمات عبور يا داده خصوصي كاربر باشد. ممكن است مهاجم يك حمله DoS را به طور مثال، از طريق مشخص كردن /dev/random يا /dev/tty به عنوان URIهاي ورودي انجام دهد و اينكار منجر به crash يا مسدود كردن نامحدود برنامه شود.
يك نمونه ناسازگار با قانون
در اين مثال، فايل evil.xml تجزيه و هر گونه خطايي گزارش مي‌شود و سپس برنامه به اتمام مي‌رسد.تجزيه‌گر SAX (API ساده براي XML) يا DOM (Document Object Model) براي دسترسي به URI مشخص شده توسط خصوصيت SYSTEM تلاش خواهد كرد، اين بدان معني است كه برنامه براي خواندن محتواي فايل محلي /dev/tty تلاش مي‌كند. در سيستم‌هاي POSIX، خواندن اين فايل منجر به مسدود شدن برنامه تا زمان ارسال داده ورودي به كنسول ماشين مي‌شود. در نتيجه مهاجم مي‌تواند از اين فايل XML مخرب براي از كار انداختن برنامه استفاده كند.
در صورتيكه فايل evil.xml حاوي عبارات زير باشد، از اين برنامه مي‌توان براي حمله راه دور XXE استفاده كرد:
راه حل سازگار با قانون (EntityResolver)
اين راه حل سازگار، كلاسي به نام CustomResolver را تعريف مي‌كند كه واسط org.xml.sax.EntityResolver را پياده سازي مي‌كند. اين واسط به برنامه كاربردي SAX امكان سفارشي كردن نحوه كنترل موجوديت‌هاي خارجي را مي‌دهد. اين برنامه كنترلي سفارشي شده، از يك ليست سفيد ساده براي موجوديت‌هاي خارجي استفاده مي‌كند. هنگاميكه ورودي نتواند با هيچكدام از مسيرهاي منبع موجوديت ايمنِ مشخص شده تطبيق كند، متد resolveEntity()، يك InputSource خالي را به عنوان خروجي برمي‌گرداند.
متد setEntityResolver()، نمونه را همراه با درايور SAX مربوطه رجيستر مي‌كند. در زمان تجزيه ورودي مخرب، InputSource خالي كه توسط برنامه برگردانده مي‌شود، منجر به صدور استثناء java.net.MalformedURLExeption مي‌گردد. توجه داشته باشيد كه شيء XMLReaderاي بايد ايجاد شود كه در آن تطبيق كننده موجوديت سفارشي شده تنظيم گردد.
ارزيابي خطر
كوتاهي در امن سازي ورودي كاربر قبل از پردازش يا ذخيره آن مي‌تواند منجر به حملات تزريق شود.
آسيب پذيري‌هاي مرتبط
طبق آسيب پذيري شماره CVE-2008-2370، تامكت آپاچي نسخه 4.1.0 تا 4.1.37، 5.5.0 تا 5.5.26 و 6.0.0 تا 6.0.16 داراي آسيب پذيري است. زماني كه از RequestDispatcher استفاده مي‌شود، تامكت نرمال كردن مسير را قبل از حذف رشته پرس و جو از URI انجام مي‌دهد كه اين كار به مهاجمان راه دور، امكان اجراي حملات پيمايش دايركتوري و خواندن فايل‌هاي دلخواه از طريق يك .. (دو نقطه) در پارامتر درخواست را مي‌دهد.
جزئيات پياده سازي آندرويد
اين قانون از سرور MS SQL به عنوان مثالي براي نمايش اتصال پايگاه داده استفاده مي‌كند. البته در آندرويد، از DatabaseHelper در SQLite براي اتصال پايگاه داده استفاده مي‌شود. از آنجايي كه برنامه‌هاي كاربردي آندرويد ممكن است داده غيرمعتمدي را از طريق اتصالات شبكه دريافت كنند، اين قانون قابل اعمال است.
مطالب مرتبط:
برنامه‌نويسي امن با زبان جاوا - آشنايي
برنامه‌نويسي امن با زبان جاوا - اعتبارسنجي ورودي و پاكسازي داده‌ها
برنامه‌نويسي امن با زبان جاوا – نشت اطلاعات حساس
برنامه‌نويسي امن با زبان جاوا – نشت قابليت ها
برنامه‌نويسي امن با زبان جاوا – انكار سرويس
برنامه‌نويسي امن با زبان جاوا – ارتقاي حق دسترسي
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها - آشنايي
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS00-J – قسمت دوم
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS00-J – قسمت اول
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS01-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS02-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS03-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS04-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS05-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS06-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS07-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS08-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانونIDS09-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها –قانونIDS10-J و IDS11-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها –قوانينIDS13-JوIDS14-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها –قوانينIDS15-JوIDS16-J
 
منبع:

نظرات

بدون نظر
شما برای نظر دادن باید وارد شوید

نوشته

 
تاریخ ایجاد: 8 فروردین 1394

دسته‌ها

امتیاز

امتیاز شما
تعداد امتیازها:0