HTTPS همیشه آنقدر که به نظر می رسد امن نیست. آسیب پذیری هایی در 5,5 درصد از سایت های HTTPS یافت شده است

HTTPS همیشه آنقدر که به نظر می رسد امن نیست. آسیب پذیری هایی در 5,5 درصد از سایت های HTTPS یافت شده است
یکی از سایت‌های برتر الکسا (دایره مرکزی) که توسط HTTPS ایمن شده است، با زیر دامنه‌ها (خاکستری) و وابستگی‌ها (سفید) که در میان آن‌ها موارد آسیب‌پذیر (سایه‌زنی چین‌دار) وجود دارد.

امروزه نماد اتصال امن HTTPS به یک استاندارد و حتی یک ویژگی ضروری برای هر سایت جدی تبدیل شده است. اگر گواهی نامه از دست رفته، تقریباً همه مرورگرهای اخیر هشداری را نشان می دهند که اتصال به سایت "ایمن نیست" و انتقال اطلاعات محرمانه به آن را توصیه نکنید.

اما معلوم می شود که وجود "قفل" در نوار آدرس همیشه تضمین کننده محافظت نیست. بررسی 10 سایت پیشرو از رتبه‌بندی، الکسا نشان داد که بسیاری از آنها در معرض آسیب‌پذیری‌های حیاتی در پروتکل‌های SSL/TLS، معمولاً از طریق زیر دامنه‌ها یا وابستگی‌ها هستند. به گفته نویسندگان این مطالعه، پیچیدگی برنامه های کاربردی وب مدرن، سطح حمله را تا حد زیادی افزایش می دهد.

نتایج مطالعه

این مطالعه توسط کارشناسان دانشگاه ونیز Ca' Foscari (ایتالیا) و دانشگاه فنی وین انجام شد. آنها گزارش مفصلی را در چهلمین سمپوزیوم IEEE در مورد امنیت و حریم خصوصی، که در 40 تا 20 می 22 در سانفرانسیسکو برگزار می شود، ارائه خواهند کرد.

10 سایت برتر لیست الکسا HTTPS و 000 هاست مرتبط مورد آزمایش قرار گرفتند. پیکربندی‌های رمزنگاری آسیب‌پذیر روی 90 میزبان شناسایی شدند، یعنی تقریباً 816٪ از کل:

  • 4818 در برابر MITM آسیب پذیر است
  • 733 در برابر رمزگشایی کامل TLS آسیب پذیر هستند
  • 912 در برابر رمزگشایی جزئی TLS آسیب پذیر هستند

898 سایت کاملاً برای هک باز هستند، یعنی اجازه تزریق اسکریپت های اضافی را می دهند و 977 سایت محتوا را از صفحات ضعیف محافظت شده بارگیری می کنند که مهاجم می تواند با آنها تعامل داشته باشد.

محققان تاکید می کنند که در بین 898 منبع "کاملاً در معرض خطر" فروشگاه های آنلاین، خدمات مالی و سایر سایت های بزرگ هستند. 660 سایت از 898 سایت اسکریپت های خارجی را از میزبان های آسیب پذیر دانلود می کنند: این منبع اصلی خطر است. به گفته نویسندگان، پیچیدگی برنامه های کاربردی وب مدرن، سطح حمله را تا حد زیادی افزایش می دهد.

مشکلات دیگری نیز مشاهده شد: 10 درصد از فرم‌های مجوز دارای مشکلاتی در انتقال امن اطلاعات هستند که تهدید به افشای گذرواژه‌ها می‌کند، 412 سایت اجازه رهگیری کوکی‌ها و ربودن جلسه را می‌دهند، و 543 سایت در معرض حمله به یکپارچگی کوکی (از طریق زیر دامنه‌ها) هستند. .

مشکل این است که در سال های اخیر در پروتکل ها و نرم افزارهای SSL/TLS تعدادی از آسیب پذیری ها را شناسایی کرد: POODLE (CVE-2014-3566)، BEAST (CVE-2011-3389)، CRIME (CVE-2012-4929)، BREACH (CVE-2013-3587)، و Heartbleed (CVE-2014-0160). برای محافظت در برابر آنها، تعدادی تنظیمات در سمت سرور و کلاینت مورد نیاز است تا از استفاده از نسخه های آسیب پذیر قدیمی جلوگیری شود. اما این یک روش نسبتاً بی اهمیت است، زیرا چنین تنظیماتی شامل انتخاب از مجموعه گسترده ای از رمزها و پروتکل ها است که درک آنها بسیار دشوار است. همیشه مشخص نیست که کدام مجموعه رمز و پروتکل "به اندازه کافی امن" در نظر گرفته می شود.

تنظیمات توصیه شده

هیچ کس به طور رسمی لیست تنظیمات توصیه شده HTTPS را تأیید و توافق نکرده است. بنابراین، Mozilla SSL Configuration Generator بسته به سطح حفاظتی مورد نیاز، چندین گزینه پیکربندی را ارائه می دهد. به عنوان مثال، در اینجا تنظیمات توصیه شده برای سرور nginx 1.14.0 آمده است:

حالت مدرن

قدیمی ترین مشتریان پشتیبانی شده: فایرفاکس 27، کروم 30، IE 11 در ویندوز 7، اج، اپرا 17، سافاری 9، اندروید 5.0 و جاوا 8

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;


# modern configuration. tweak to your needs.
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

پشتیبانی متوسط

قدیمی ترین مشتریان پشتیبانی شده: Firefox 1، Chrome 1، IE 7، Opera 5، Safari 1، Windows XP IE8، Android 2.3، Java 7

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

پشتیبانی قدیمی

قدیمی ترین مشتریان پشتیبانی شده: ویندوز XP IE6، جاوا 6

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# old configuration. tweak to your needs.
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

توصیه می شود همیشه از مجموعه کامل رمزنگاری و آخرین نسخه OpenSSL استفاده کنید. مجموعه رمز در تنظیمات سرور، اولویتی را که در آن استفاده خواهد شد، بسته به تنظیمات مشتری، مشخص می کند.

تحقیقات نشان می دهد که فقط نصب گواهی HTTPS کافی نیست. "در حالی که ما مانند سال 2005 از کوکی ها استفاده نمی کنیم، و "TLS مناسب" رایج شده است، به نظر می رسد که این موارد اساسی برای ایمن سازی تعداد شگفت انگیزی از سایت های بسیار محبوب کافی نیستند." آنها می گویند نویسندگان اثر برای محافظت مطمئن از کانال بین سرور و کلاینت، باید به دقت زیرساخت ها را از زیر دامنه های خود و میزبان های شخص ثالثی که محتوای سایت از آنها تهیه می شود نظارت کنید. شاید منطقی باشد که از یک شرکت شخص ثالث که متخصص در امنیت اطلاعات است، دستور حسابرسی بدهید.

HTTPS همیشه آنقدر که به نظر می رسد امن نیست. آسیب پذیری هایی در 5,5 درصد از سایت های HTTPS یافت شده است

منبع: www.habr.com