HTTPS ไม่ปลอดภัยอย่างที่คิดเสมอไป พบช่องโหว่ใน 5,5% ของไซต์ HTTPS

HTTPS ไม่ปลอดภัยอย่างที่คิดเสมอไป พบช่องโหว่ใน 5,5% ของไซต์ HTTPS
หนึ่งในไซต์ยอดนิยมของ Alexa (วงกลมกลาง) ปลอดภัยโดย HTTPS พร้อมโดเมนย่อย (สีเทา) และการอ้างอิง (สีขาว) ซึ่งมีช่องโหว่ (แรเงาเส้นประ)

ทุกวันนี้ ไอคอนการเชื่อมต่อที่ปลอดภัย HTTPS ได้กลายเป็นมาตรฐานและแม้แต่คุณลักษณะที่จำเป็นของไซต์ที่ร้ายแรงใดๆ ถ้า ใบรับรอง หายไป เบราว์เซอร์ล่าสุดเกือบทั้งหมดแสดงคำเตือนว่า การเชื่อมต่อกับเว็บไซต์นั้น "ไม่ปลอดภัย" และไม่แนะนำให้โอนข้อมูลที่เป็นความลับไป

แต่ปรากฎว่าการมี "ล็อค" ในแถบที่อยู่ไม่ได้รับประกันการป้องกันเสมอไป ตรวจสอบเว็บไซต์ชั้นนำกว่า 10 แห่ง จากการให้คะแนน Alexa แสดงให้เห็นว่าหลายรายการอยู่ภายใต้ช่องโหว่ที่สำคัญในโปรโตคอล SSL / TLS ซึ่งโดยปกติจะผ่านโดเมนย่อยหรือการอ้างอิง จากการศึกษาของผู้เขียน ความซับซ้อนของเว็บแอปพลิเคชันสมัยใหม่จะเพิ่มพื้นผิวการโจมตีอย่างมาก

ผลการศึกษา

การศึกษาดำเนินการโดยผู้เชี่ยวชาญจากมหาวิทยาลัยเวนิส Ca' Foscari (อิตาลี) และมหาวิทยาลัยเทคนิคเวียนนา พวกเขาจะนำเสนอรายงานโดยละเอียดที่การประชุม IEEE Symposium on Security and Privacy ครั้งที่ 40 ซึ่งจะจัดขึ้นในวันที่ 20-22 พฤษภาคม 2019 ในซานฟรานซิสโก

มีการทดสอบไซต์ HTTPS 10 อันดับแรกของ Alexa และโฮสต์ที่เกี่ยวข้อง 000 รายการ ตรวจพบการกำหนดค่าการเข้ารหัสที่มีช่องโหว่บนโฮสต์ 90 โฮสต์ นั่นคือประมาณ 816% ของทั้งหมด:

  • 4818 เสี่ยงต่อ MITM
  • 733 เสี่ยงต่อการถอดรหัส TLS เต็มรูปแบบ
  • 912 เสี่ยงต่อการถอดรหัส TLS บางส่วน

ไซต์ 898 ไซต์เปิดให้แฮ็กได้อย่างสมบูรณ์ นั่นคืออนุญาตให้แทรกสคริปต์ภายนอก และไซต์ 977 ไซต์โหลดเนื้อหาจากเพจที่มีการป้องกันไม่ดีซึ่งผู้โจมตีสามารถโต้ตอบได้

นักวิจัยเน้นย้ำว่าในบรรดาแหล่งข้อมูล 898 แห่งที่ “ถูกบุกรุกโดยสมบูรณ์” ได้แก่ ร้านค้าออนไลน์ บริการทางการเงิน และเว็บไซต์ขนาดใหญ่อื่นๆ 660 จาก 898 ไซต์ดาวน์โหลดสคริปต์ภายนอกจากโฮสต์ที่มีช่องโหว่: นี่คือแหล่งที่มาหลักของอันตราย ผู้เขียนกล่าวว่าความซับซ้อนของเว็บแอปพลิเคชันสมัยใหม่จะเพิ่มพื้นผิวการโจมตีอย่างมาก

นอกจากนี้ยังพบปัญหาอื่นๆ อีก: 10% ของแบบฟอร์มการอนุญาตมีปัญหาเกี่ยวกับการส่งข้อมูลที่ปลอดภัย ซึ่งขู่ว่ารหัสผ่านจะรั่วไหล 412 ไซต์อนุญาตให้สกัดกั้นคุกกี้และการไฮแจ็คเซสชัน และ 543 ไซต์อาจถูกโจมตีเพื่อความสมบูรณ์ของคุกกี้ (ผ่านโดเมนย่อย) .

ปัญหาคือในช่วงไม่กี่ปีที่ผ่านมาโปรโตคอลและซอฟต์แวร์ SSL / TLS ระบุช่องโหว่จำนวนหนึ่ง: พุดเดิ้ล (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE-2013-3587) และ Heartbleed (CVE-2014-0160) เพื่อป้องกันสิ่งเหล่านี้ จำเป็นต้องมีการตั้งค่าจำนวนหนึ่งบนเซิร์ฟเวอร์และฝั่งไคลเอ็นต์เพื่อหลีกเลี่ยงการใช้เวอร์ชันเก่าที่มีช่องโหว่ แต่นี่เป็นขั้นตอนที่ค่อนข้างไม่สำคัญ เนื่องจากการตั้งค่าดังกล่าวเกี่ยวข้องกับการเลือกจากชุดรหัสและโปรโตคอลที่กว้างขวาง ซึ่งค่อนข้างยากที่จะเข้าใจ ไม่ชัดเจนเสมอไปว่าชุดการเข้ารหัสและโปรโตคอลใดที่ถือว่า "ปลอดภัยเพียงพอ"

การตั้งค่าที่แนะนำ

ไม่มีใครได้รับการอนุมัติอย่างเป็นทางการและเห็นด้วยกับรายการการตั้งค่า HTTPS ที่แนะนำ ดังนั้น, ตัวสร้างการกำหนดค่า Mozilla SSL มีตัวเลือกการกำหนดค่าหลายตัว ขึ้นอยู่กับระดับการป้องกันที่ต้องการ ตัวอย่างเช่น นี่คือการตั้งค่าที่แนะนำสำหรับเซิร์ฟเวอร์ nginx 1.14.0:

โหมดทันสมัย

ไคลเอนต์ที่รองรับที่เก่าแก่ที่สุด: Firefox 27, Chrome 30, IE 11 บน Windows 7, Edge, Opera 17, Safari 9, Android 5.0 และ Java 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, Java 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

ที่มา: will.com