บทนำ (Overview)
“BEAST” (Browser Exploit Against SSL/TLS) คือการโจมตีโดยใช้ช่องโหว่ของโปรโตคอล “SSL” ที่ใช้ “Block Cipher” ทำงานแบบ “CBC Mode” บนโปรโตคอล “SSL3.0” และ “TLS 1.0” เท่านั้น สามารถอ่านรายละเอียดของ โปโตคอล “SSL” แบบง่าย ๆ ได้ที่บทความ (What is the SSL (Secure Socket Layer Protocol))
ในการใช้ Key แบบ Symmetric ในการเข้ารหัสนั้นเราก็สามารถเลือกใช้ได้ 2 แบบ คือ
- Stream cipher: โดยวิธีนี้จะเข้ารหัส 1 bit ต่อ 1 ครั้ง ตัวอย่างอัลกอลึทึม คือ RC4
- Block cipher (CBC): โดนวิธีจะเข้ารหัสเป็นกลุ่ม bit (chunks) ต่อหนึ่งครั้ง มีอัลกอลึทึมเช่น DES และ AES เป็นต้น

โดยภาพข้างต้นสามารถอธิบายง่าย ๆ คือ
- ในแต่ละข้อความ (Pain text) ที่จะส่งไปยังผู้รับ จะต้องเข้ารหัสเพื่อให้อ่านไม่ออก (Cipher text) โดยใช้กุญแจดอกเดียวกันทั้งเข้ารหัส (Encrypt) และถอดรหัส (De-crypt)
- แต่จะแบ่งเข้ารหัสเป็นกลุ่ม ๆ ที่เราเรียกว่า “Block cipher” จากภาพตัวอย่าง 1 ข้อความ (messages) ถูกแบ่งออกเป็น 3 กลุ่ม
- โดยแต่ละกลุ่ม คือกลุ่ม “Bit” ของข้อความที่ถูกแบ่งออกเป็นกลุ่มละเท่า ๆ กัน
- โดยกลุ่ม กลุ่มแรกจะทำการเข้ารหัสก่อน เมื่อเสร็จ (กลุ่มแรกที่ผ่านการเข้ารหัส จะไปแทน IV กลุ่มถัดไป) จะไปรวมกับกลุ่มสองและทำซ้ำ ไปเรื่อยๆ จนครบทุกกลุ่ม
- กลับมาที่กลุ่มแรกจะมีการสุ่มค่า “IV” (Initialization vector) เพื่อทำให้แต่ละข้อความ (Messages) ไม่ซ้ำกัน
- โดยค่า IV และ Key จะถูกนำมายำรวมกันอย่างมีหลักการเรียกว่า “XOR” (การใช้วิธี “XOR” ดูตัวอย่างเพื่อศึกษาเพิ่มเติม https://en.wikipedia.org/wiki/XOR_cipher)
โดยเจ้าตัว “Block cipher” นี้มีปัญหาเนื่องจาก “SSL version 3” กับ “TLS version 1.0” ใช้ “IV” ที่เป็น “cipher text” กลุ่มสุดท้ายจาก “Message” ที่แล้ว จนทำสามารถการดักข้อมูลที่ส่งผ่านระหว่างเว็บบราวเซอร์ (Web browser) และ เว็บเซิร์ฟเวอร์ (Web server) ซึ่งเรียกว่า “session hijacking” แต่มันจะเป็นช่องโหว่เพื่อโดนโจมตีได้ก็ต่อเมื่อ
- มีช่องโหว่ “SSL” เรื่องของ “CBC” ข้างต้น และโดยเฉพาะค่า IV ที่สามารถคาดเดาได้ ทำให้ถอดรหัสข้อมูลที่เข้ารหัสในโปรโตคอล “SSL”
- แต่ก่อนที่จะถอดรหัสได้ต้องดักจับข้อมูลที่เข้ารหัสให้ได้เสียก่อน (Network Sniffing)
- ซึ่งเราจะโขมย “session cookie” บน “Header HTTP” จำเป็นต้องใช้ “JavaScript” หรือ “Applet”
จาก ปัจจัยที่ (3) เราจะพบว่าถ้าเว็บไซต์ ตั้งค่า “HttpOnly” ไว้จะทำให้ “JavaScript” หรือ “Applet” ไม่สามารถดึงค่า “Session Cookie” ส่งไปยัง “Hacker” ได้ ถ้าอย่างโอกาสที่จะขโมย “session cookie” ให้ได้คือต้องถอดรหัส “SSL” ให้ได้ ต่อให้มี HttpOnly ก็สามารถขโมย “session cookie” ได้
ขั้นตอน (Steps)
- ดาวน์โหลด “script” จาก (https://github.com/drwetter/testssl.sh)
- Run คำสั่งใน Kali หรือ Backtrack ดังนี้ (script ถูกวางไว้ที่หน้า Desktop)
root@kali:~# cd /root/Desktop/ root@kali:~/Desktop# ./testssl.sh xxx.com
- จากนั้นมาดูในส่วนของทดสอบช่องโหว่ พบว่า “BEAST (CVE-2011-3389)”
--> Testing vulnerabilities Heartbleed (CVE-2014-0160) VULNERABLE (NOT ok) CCS (CVE-2014-0224) VULNERABLE (NOT ok) Secure Renegotiation (CVE 2009-3555) not vulnerable (OK) Secure Client-Initiated Renegotiation not vulnerable (OK) CRIME, TLS (CVE-2012-4929) not vulnerable (OK) BREACH (CVE-2013-3587) NOT ok: uses gzip HTTP compression (only "/" tested) POODLE, SSL (CVE-2014-3566) VULNERABLE (NOT ok) , uses SSLv3+CBC (no TLS_FALLBACK_SCSV mitigation tested) FREAK (CVE-2015-0204), experimental not vulnerable (OK) BEAST (CVE-2011-3389) SSL3: EDH-RSA-DES-CBC3-SHA DES-CBC3-SHA TLS1: EDH-RSA-DES-CBC3-SHA DES-CBC3-SHA -- but also supports higher protocols (possible mitigation): TLSv1.1 TLSv1.2 RC4 (CVE-2013-2566, CVE-2015-2808) VULNERABLE (NOT ok): RC4-SHA