۸ مرداد ۱۳۹۹
تعداد بازدید: 359
راهکارهای اختصاصی بالا بردن امنیت وب
قسمت اول
در پی انتشار نسخه اخیر مرورگر گوگل کروم ۸۳ و نسخه مرورگر فایرفاکس ۷۹ که به زودی عرضه خواهد شد، توسعهدهندگان وب راهکار امنیتی قدرتمندی را برای حفاظت از آسیبپذیریهایی رایج برنامههای وب ایجاد کردهاند. در این مقاله که برگرفته از وبلاگ امنیتی گوگل میباشد صحبت از چالشهایی شده است که سالهاست توسعهدهندگان در راستای ایجاد برنامههای کاربردی امن با آن مواجه هستند. از این رو گوگل و برخی شرکتهای سازنده مرورگر دو سالی است که با همکاری هم افزودن مکانیزمهای امنیتی به مرورگرها برای کمک به توسعه دهندگان برنامههای کاربردی را آغاز کردهاند. در طی دو قسمت به بررسی این مکانیزمها میپردازیم.
تاریخچه
امروزه کاربران از طریق مرورگرها میتوانند به طیف وسیعی از برنامههای کاربردی دست یابند، به طور مثال دسترسی به ویرایشگر اسناد و یا برنامههای کاربردی رایانامه از طریق مرورگرها به راحتی امکان پذیر است. اما همین موضوع حفاظت از دادههای کاربران در برابر مهاجمان را بسیار سختتر کرده و به یکی از دغدغههای توسعهدهندگان تبدیل شده است. زیرا مهاجمین با سوءاستفاده از آسیبپذیریهای وب میتوانند به دادههای کابران دست یابند. در حالی که پلتفرم وب، در ایزولهسازی سیستم عامل عملکرد خوبی داشته اما در خصوص ایزولهسازی برنامههای کاربردی از یکدیگر داستان اینگونه نبوده است و امروزه XSS، CSRF و cross-site به جنبههای ناخوشایند توسعه وب تبدیل شده و تقریبا هر وب سایتی را به نحوی تحت تاثیر قرار داده است.
این آسیبپذیریها عواقب ناخواستهی برخی از شگفتانگیزترین خصوصیات وب هستند: سازگاری، بازبودن و سهولت توسعه. به بیان سادهتر، ایده اولیه شکلگیری وب به عنوان شبکهای از اسناد به هم پیوسته، هیچگاه ایجاد چنین اکوسیستمی متشکل از برنامههای کاربردی وببنیان که اطلاعات شخصی میلیونها نفر در سراسر جهان را مدیریت میکند پیشبینی نمیکرد. بنابراین قابلیتهای امنیتی پتلفرم وب که به توسعهدهندگان کمک میکند تا از اطلاعات کاربران خود حفاظت کنند تکامل آهستهای داشته و تنها از بخشی از آسیبپذیریهای رایج محافظت میکند.
توسعهدهندگان وب به طور سنتی با ایجاد ابزارها و فرآیندهای امنیتی اضافی، از کاستیهای برنامههای خود در برابر حملات رایج حفاظت میکنند. نگهداری و توسعه چنین زیرساختهایی اغلب از نظر هزینهای گران تمام میشوند. با ادامه این تغییرات، برنامههای کاربردی وببنیان به منظور ارائه قابلیتهای چشمگیرتر به توسعهدهندگان وب حیاتیتر شده و نیاز به روشهای امنیتی قدرتمندتر و همهجانبه که مستقیماً در پلتفرم وب قرار دارند بیشتر میشود.
آسیبپذیریهای تزریق (دستورات)
در طراحی سیستمها، ترکیب کردن کد و دادهها یکی از الگوهای ضد امنیتی متعارف است که باعث میشود آسیبپذیری نرمافزارها به اندازه دهه ۱۹۸۰ به عقب بازگردد. این موضوع دلیل اصلی آسیبپذیریهایی همچون تزریق دستورات SQL است که سرویسدهندههای برنامههای کاربردی و پایگاههای داده را به خطر میاندازد.
در وب، کد برنامه با دادههای موجود در صفحات در هم تنیده شدهاند. نشانهگذاری HTML مثل عناصر اسکریپت یا ویژگیهای مدیریت رویداد (onclick یا onload) اجرای جاوا اسکریپت را مجاز میکند. حتی یک URL معمولی هم میتواند حامل کد بوده و هنگام هدایت به یک لینک جاوا اسکریپت موجب اجرای اسکریپت گردد. گاهی اوقات نتیجه نهایی این طرح، دادهای است که از آن برای ساخت صفحه HTML استفاده میشود و به راحتی مورد تزریق اسکریپتهای ناخواسته قرار گرفته و کنترل برنامه کاربردی را در مرورگر کاربر در اختیار میگیرد مگر اینکه برنامه به نحوی از خودش محافظت کند. رفع این مشکل به صورت اصولی نیازمند این است که برنامه بتواند دادههای خود را از کد جدا کند. این کار با فعال کردن دو ویژگی امنیتی جدید امکانپذیر است: ” Trusted Types” و “Content Security Policy” مبتنی بر ویژگی Script nonce.
توابع جاوا اسکریپت که توسط توسعهدهندگان برای ساخت برنامههای کاربردی وببنیان مورد استفاده قرار میگیرند اغلب به تجزیه ساختار دلخواه رشتهها متکی هستند. رشتهای که به نظر میرسد حاوی داده باشد، زمانی که به یک API معمولی منتقل شود میتواند مستقیماً تبدیل به کد گردد مثل ویژگی innerHTML . این موضوع دلیل اصلی بیشتر حملات DOM-based XSS میباشد.
ویژگی Trusted Types به طور پیشفرض از طریق محدود کردن عملیات پرخطر مثل تولید HTML یا ایجاد اسکریپت که نیاز به یک Object خاص قابل اعتماد دارد، کد جاوا اسکریپت را امن میکند. مرورگر اطمینان حاصل میکند که هرگونه استفاده از توابع خطرناک DOM تنها در صورتی مجاز است که Object صحیح آن توسط تابع مورد نظر فراهم گردد. تا زمانی که برنامه، این Objectها را به صورت امن در یک خط مشی Trusted Types مرکزی تولید کند، فاقد هرگونه آسیبپذیری DOM-based XSS خواهد بود. این ویژگی با تنظیم پاسخ سرآیند به صورت زیر قابل فعالسازی است:
گوگل اخیراً ویژگی Trusted Types را برای تمام کاربران سرویس My Google Activity فعال نموده و تیمهای بسیاری در این شرکت با سازندگان فریمورک جاوا اسکریپت همکاری میکنند تا کدهایشان از این ویژگی امنیتی مهم پشتیبانی کند. نسخه ۸۳ مرورگر گوگل کروم و سایر مرورگرهای مبتنی بر کرومیوم از ویژگی Trusted Types پشتیبانی میکنند و یک Polyfill نیز برای سایر توسعهدهندگان موجود است.
ویژگی Content Security Policy مبتنی بر Script nonce
ویژگی Content Security Policy یا به طور خلاصه CSP به توسعهدهندگان این اجازه را میدهد تا هر اسکریپت در صفحه وب به یک مقدار محرمانه و ناشناخته برای مهاجمین نیاز داشته باشد. ویژگی nonce برای هر مرتبه بارگذاری صفحه، یک عدد غیر قابل پیشبینی تنظیم میکند و بدین ترتیب تضمین میکند که اسکریپت مورد نظر تحت کنترل برنامه باشد. حتی اگر مهاجم بتواند اسکریپتهای مخرب را به بخشی از صفحه وب تزریق کند در صورتی که این اسکریپتها با nonce صحیح همخوانی نداشته باشند، مرورگر به آنها اجازه اجرا نخواهد داد. این تکنیک تأثیر هرگونه آسیبپذیری تزریق کد در سمت سرور مثل Reflected XSS و Stored XSS را کاهش میدهد. ویژگی CSP با اعمال دستورات زیر فعال میشود:
این سرآیند به کلیه اسکریپتهای موجود در قالب HTML نیاز دارد تا ویژگی nonce را با یک مقدار مطابق با آنچه که در پاسخ سرآیند وجود دارد درج نماید:
ابزار ارزیابی CSP شرکت گوگل میتواند در پیکربندی یک سیاست قوی به توسعهدهندگان کمک کند. از زمان ارائه CSP در گوگل، سیاستهای محکمی بر روی ۷۵% ترافیک خروجی برنامههایی مثل Gmail، Google Docs و Google Drive اعمال شده است. این ویژگی در دوسال گذشته احتمال سوءاستفاده از بیش از ۳۰ آسیبپذیری XSS با درجه اهمیت بالا را در محصولات گوگل کاهش داده است. ویژگی CSP مبتنی بر nonce توسط مرورگرهای کروم، فایرفاکس، مایکروسافت Edge و سایر مرورگرهای مبتنی بر کرومیوم پشتیبانی میشود. مرورگر سافاری نیز به صورت جزئی از این ویژگی پشتیبانی میکند.
ادامه دارد…
آرمان داده پویان ارائهدهنده تست نفوذ برنامههای کاربردی وببنیان
با ما تماس بگیرد