บทนำ (Overview)
จากบทความที่แล้วกล่าวถึงวิธีการทดสอบหาช่องโหว่ “POODLE” (http://blog.itselectlab.com/?p=3867) มาในคราวนี้เครื่องมือชุดเดิมก็สามารถตรวจสอบ ช่องโหว่ที่เรียกว่า “FREAK” ได้เช่นกัน
“FREAK” ย่อมาจากคำว่า (Factoring RSA Export Keys) นั้นก็คือช่องโหว่ที่เกิดจาก “Hacker” หลอกลวงให้ เหยื่อ เชื่อมต่อกับ “Hacker” โดยใช้ รูปแบบการเข้ารหัส (Cipher suite) ที่ไม่แข็งแรง ของโปรโตคอล “SSL/TLS” ดังนั้น “Hacker” จึงสามารถถอดรหัสเพื่อดูข้อมูลที่สำคัญได้ (Man-in-the middle)
เจ้า “Cipher suite” ที่มีปัญหานั้นถูกเรียกว่า “Export-grade” แปลตามชื่อมันเลยก็คือ นี้มันเกรดส่งออกนี้หวา..แต่ทำไมเกรดส่งออกถึงห่วยจัง (อันนี้ต้องถามอเมริกาซะแล้ว) ซึ่งใน “Cipher suite” จะมีคำว่า “EXPORT” หรือ “EXP” ลองมาดูตามขั้นตอนกันเลย
ขั้นตอน (Steps)
On the Web
- เข้าไปที่ Web site (https://www.ssllabs.com/ssltest/)
- จากนั้นใส่ “URL” ที่ต้องการตรวจสอบไปที่ “Domain name”
- สามารถตรวจสอบได้ว่า “Server” มีช่องโหว่ “FREAK” หรือไม่
- สามารถตรวจสอบ “Cipher suite” ที่ไม่แข็งแรงได้ เมื่อมีการใช้ “EXPORT” จะส่งผลให้การเข้าหัสอัลกลิทึม “RSA” จะใช้กุญแจยาวไม่เกิน “512 bits” ซึ่งถือว่ายังไม่แข็งแรงพอ
TLS_RSA_EXPORT_WITH_DES40_CBC_SHA (0x8) INSECURE 40 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 (0x6) INSECURE 40 TLS_RSA_EXPORT_WITH_RC4_40_MD5 (0x3) INSECURE 40
Nmap
- เราสามารถใช้โปรแกรม “NMAP” สำหรับตรวจสอบ “FREAK” ได้โดยการดาวน์โหลดและติดตั้งจาก (https://nmap.org/download.html)
- จากนั้นเรียกใช้งานโปรแกรมจาก “command prompt” และใช้คำสั่งดังนี้สำหรับการ “Scan”
nmap.exe -p 443 --script ssl-enum-ciphers -oN freak_443 10.10.10.255
- จากข้างต้นสามารถอธิบายคำสั่งได้ดังนี้
-p 443:อันนี้จะระบุ “Port” ที่จะ “Scan” แต่โดยทั่วไป “SSL/TLS” ใช้ “443” เราสามารถเพิ่ม “Port” เองได้ตัวอย่างเช่น -p 443,1234,8080,8888 โดยใช้คอมม่าคั่นไว้
–script ssl-enum-ciphers: จะทำการค้นหา “Cipher suite” ของ “Server” ที่เรากำลังจะ “Scan”
-oN freak_443: ผล “Scan” อยู่ใน “format” ของ “freak_443.nmap”
10.10.10.255: ระบุเป้าหมายที่จะ Scan - จากนั้นตรวจสอบระดับความแข็งจาก (A ไป F) โดยในช่องโหว่ “Freak” ให้ดูคำว่า “RSA_EXPORT” จะพบว่ามีเกรดคือ “E”
Starting Nmap 6.49BETA4 ( https://nmap.org ) at 2015-09-21 23:56 SE Asia Standard Time Nmap scan report for 10.10.10.255 Host is up (0.015s latency). PORT STATE SERVICE 443/tcp open https | ssl-enum-ciphers: | SSLv3: | ciphers: | TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 512) - C | TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C | TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E | TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - E | TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 256) - C | TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 512) - C | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A | TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 512) - A | TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_RC4_128_SHA (dh 256) - A | TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A | TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A | compressors: | NULL | cipher preference: server | warnings: | CBC-mode cipher in SSLv3 (CVE-2014-3566) | Ciphersuite uses MD5 for message integrity | Weak certificate signature: SHA1 | TLSv1.0: | ciphers: | TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 512) - C | TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C | TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E | TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - E | TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 256) - C | TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 512) - C | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A | TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 512) - A | TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_RC4_128_SHA (dh 256) - A | TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A | TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A | compressors: | NULL | cipher preference: server | warnings: | Ciphersuite uses MD5 for message integrity | Weak certificate signature: SHA1 | TLSv1.1: | ciphers: | TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 512) - C | TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C | TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E | TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - E | TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 256) - C | TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 512) - C | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A | TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 512) - A | TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_RC4_128_SHA (dh 256) - A | TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A | TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A | compressors: | NULL | cipher preference: server | warnings: | Ciphersuite uses MD5 for message integrity | Weak certificate signature: SHA1 | Weak cipher RC4 in TLSv1.1 or newer not needed for BEAST mitigation | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (dh 256) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (dh 256) - A | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 512) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 512) - A | TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A | TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (dh 256) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (dh 256) - A | TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 512) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 512) - A | TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A | TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A | TLS_DHE_RSA_WITH_DES_CBC_SHA (dh 512) - C | TLS_RSA_WITH_DES_CBC_SHA (rsa 2048) - C | TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - E | TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - E | TLS_RSA_EXPORT_WITH_RC4_40_MD5 - E | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 256) - C | TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 512) - C | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (dh 256) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 512) - A | TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 512) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A | TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 512) - A | TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_RC4_128_SHA (dh 256) - A | TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A | TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A | compressors: | NULL | cipher preference: server | warnings: | Ciphersuite uses MD5 for message integrity | Weak certificate signature: SHA1 | Weak cipher RC4 in TLSv1.1 or newer not needed for BEAST mitigation |_ least strength: E Nmap done: 1 IP address (1 host up) scanned in 16.52 seconds
testSSL.sh script
- ดาวน์โหลด “script” จาก (https://github.com/drwetter/testssl.sh)
- Run คำสั่งใน Kali หรือ Backtrack ดังนี้ (script ถูกวางไว้ที่หน้า Desktop)
root@kali:~# cd /root/Desktop/ root@kali:~/Desktop# ./testssl.sh xxx.com
- จากนั้นมาดูในส่วนของทดสอบช่องโหว่ พบว่า “FREAK (CVE-2015-0204) VULNERABLE (NOT ok)”
--> Testing vulnerabilities Heartbleed (CVE-2014-0160) not vulnerable (OK) (timed out) CCS (CVE-2014-0224) not vulnerable (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) no HTTP compression (OK) (only "/" tested) POODLE, SSL (CVE-2014-3566) VULNERABLE (NOT ok) , uses SSLv3+CBC (no TLS_FALLBACK_SCSV mitigation tested) FREAK (CVE-2015-0204), experimental VULNERABLE (NOT ok) , uses EXPORT RSA ciphers