How to check Freak vulnerability (CVE-2015-0204)

บทนำ (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

  1. เข้าไปที่ Web site (https://www.ssllabs.com/ssltest/)
  2. จากนั้นใส่ “URL” ที่ต้องการตรวจสอบไปที่ “Domain name”poodle1
  3. สามารถตรวจสอบได้ว่า “Server” มีช่องโหว่ “FREAK” หรือไม่ freak1
  4. สามารถตรวจสอบ “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

  1. เราสามารถใช้โปรแกรม “NMAP” สำหรับตรวจสอบ “FREAK” ได้โดยการดาวน์โหลดและติดตั้งจาก (https://nmap.org/download.html)
  2. จากนั้นเรียกใช้งานโปรแกรมจาก “command prompt” และใช้คำสั่งดังนี้สำหรับการ “Scan”
    nmap.exe -p 443 --script ssl-enum-ciphers -oN freak_443 10.10.10.255
    
  3. จากข้างต้นสามารถอธิบายคำสั่งได้ดังนี้
    -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
  4. จากนั้นตรวจสอบระดับความแข็งจาก (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

  1. ดาวน์โหลด “script” จาก (https://github.com/drwetter/testssl.sh)
  2. Run คำสั่งใน Kali หรือ Backtrack ดังนี้ (script ถูกวางไว้ที่หน้า Desktop)
    root@kali:~# cd /root/Desktop/
    root@kali:~/Desktop# ./testssl.sh xxx.com
    
  3. จากนั้นมาดูในส่วนของทดสอบช่องโหว่ พบว่า “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  
    

ใส่ความเห็น