SSL چیست؟
SSL یک پروتکل رمزنگاری است که برای برقراری یک ارتباطات امن بین یک سرویس دهنده و یک سرویس گیرنده طراحی شده است. در اینترنت بسیاری از وب سایتها از این پروتکل و البته جایگزین آن یعنی پروتکل TLS برای دریافت دادههای حساس کاربر مانند، کلمه عبور، اطلاعات بانکی کاربر استفاده میکنند. استفاده از این پروتکلها تضمین دهندهی این است که یک نفوذگر نباید بتواند اطلاعات رمز شده را در طول مسیر رمزگشایی (تغییر و …) کند. SSL یک پروتکل قدیمی میباشد نسخهی سوم آن مربوط به ۱۵ سال پیش میباشد اما همچنان در مرورگرها از آن پشتیبانی میشود. بیشتر وبسایت ها از نسخههای TLS استفاده میکنند اما در صورت عدم پشتیبانی مرورگر کاربر از TLS سعی میکنند از نسخههای قدیمیتر، مانند SSLv3 برای برقراری ارتباط استفاده کنند.
در هنگام اولین اتصال به سرویسدهنده (وب سرور)، سرویسگیرنده (مرورگر کاربر) سعی میکند از طریق بالاترین نسخهای که پشتیبانی میکند (مثلاً TLS 1.2) ارتباط را ایجاد کند. اگر وب سرور نیز قابلیت پشتیبانی از این نسخه را داشته باشد ارتباط برقرار میشود در غیر این صورت اگر مثلاً وب سرور از نسخهی TLS 1.0 استفاده کند، مرورگر کاربر نیز به نسخهی پایینتر یعنی TLS 1.0 سوییچ میکند. به این رویکرد downgrade گفته میشود میتواند توسط یک نفوذگر داخل شبکهی کاربر نیز اتفاق بیافتد. که در اینجا نفوذگر مرورگر کاربر را وادار میکند تا از طریق SSLv3 اتصال را برقرار نماید. در SSLv3 برای رمزنگاری از روشهای RC4 و یا یک روش رمز بلوکی در حالت CBC استفاده میشود. در ساختار رمز بلوکی در حالت CBC این پروتکل مشکلی وجود دارد که باعث میشود نفوذگر بتواند با آزمون خطا، با تعداد درخواست های اندکی، قسمتی از درخواست رمز شده بین مرورگر و وب سرور را حدس بزند. این دادهی حدس زده شده میتواند کوکی کاربر باشد که نفوذگر با استفاده از آن میتواند وارد حساب کاربر بشود.اصل مبنای تئوری این آسیب پذیری توسط Serge Vaudenay در سال ۲۰۰۱ مطرح شده بود، اما او فکر میکرده است که امکان استفاده عملی از این آسیب پذیری وجود ندارد و نهایتا این آسیبپذیری توسط مهندسان گوگل اعلام شد و Poodle نام گرفت.
کاربران هر وبسایتی (سرویس دهنده) که از SSLv3 پشتیبانی کند (در تنظیمات وب سرور غیر فعال نکرده باشد)، آسیبپذیر میباشند. در واقع حتی اگر وب سایت از نسخههای TLS استفاده کند به دلیل قابلیت downgrade (بازگشت به نسخهی قبلی) آسیبپذیر میباشد زیرا نفوذگر داخل شبکه میتواند مرورگر کاربر را وادار کند تا از طریق SSLv3 اتصال برقرار کند.
نفوذگر (داخل شبکهی کاربر) با بهرهبرداری از این آسیبپذیری میتواند اطلاعات حساس کاربر مانند (کوکی که هویت کاربر است) را برباید و در نهایت وارد حساب کاربر شود.
همانطور که نیمه شب گذشته از طریق اکانت توییتر بیان اعلام شد بهترین راه حل برای این آسیبپذیریی عدم استفاده از SSLv3 توسط سرویسدهنده (وب سرور) و سرویسگیرنده (کاربر) میباشد. البته اگر سرویس دهندهای تنها از SSLv3 استفاده کند، غیرفعال کردن آن در سمت کاربر (سرویس گیرنده) میتواند باعث عدم دسترسی به سرویسدهنده شود.
توجه داشته باشید که برای استفاده از راه حل بالا، از این پس تنها باید از طریق این میانبر مرورگر خود را اجرا کنید. به عنوان مثال اگر کروم را از طریق میانبری که در منوی Start شما قرار گرفته است اجرا کنید طبیعتا در آن حالت مرورگر شما امن نخواهد بود. البته می توانید این کار را برای سایر میانبرهای کروم نیز اجرا کنید.
بهترین راه حل برای گردانندگان سایتها (یا وب مسترها) برای جلوگیری از این آسیب پذیری غیر فعال کردن SSLv3 در تنظیمات web-server است. البته این باعث میشود که مرورگر IE6 (که البته دیگر پشتیبانی هم نمیشود و سهم کمی در مرورگرها دارد) امکان اتصال به https سایت را نداشته باشد، اما اگر امنیت و راحتی کاربران مهم است (به دلیل وجود مشکلات امنیتی و کارکردی متعدد در IE6) بهتر است این مرورگر (حداقل برای اتصال امن با https) نادیده گرفته شود.
روش غیر فعال کردن SSLv3 در سرورهای مختلف به صورت زیر است.
ضمنا باید به نکات زیر نیز توجه نمود:
کافیست تنظیم زیر در کنار بقیه تنظمیات SSL درج شود (دقت کنید که تنظیم SSLProtocol از قبل وجود نداشته باشد)
SSLProtocol All -SSLv2 -SSLv3
این خط باید به تنظیمات nginx اضافه شود: (در قسمت http یا server)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
عبارات زیر باید به تنظیمات lighttpd و بعد از خط ssl.engine = "enable"
اضافه شوند:
ssl.use-sslv2 = "disable" ssl.use-sslv3 = "disable"
* به روز رسانی: ابزار بیان برای تشخیص آن لاین این آسیب پذیری در مرورگرها و وب سایت ها: