เราทราบกันดีอยู่แล้วว่า ณ ปัจจุบันเว็บไซด์ส่วนใหญ่เป็น HTTPS ไปหมดแล้ว ซึ่ง HTTPS ที่ว่าคือการใช้งาน protocol ssl/tls นั่นเอง ซึ่งแน่นอนว่าเมื่อมีการใช้งาน protocol ที่แตกต่างจากเดิม ปัญหาที่อาจจะเกิดขึ้นนั้นก็ต้องทดสอบแตกต่างไปจากเดิมเช่นกัน โดยปกติตัวผมเองมักจะใช้ testssl.sh ในการทดสอบหาปัญหา (issue) ของ HTTPS ต่างๆ ซึ่งเราสามารถตรวจสอบผลที่ได้จาก testssl.sh ได้โดยทำตามแต่ละ issue ดังต่อไปนี้

*** หมายเหตุ 1# ข้อ 1,2 จะไม่สามารถทดสอบได้ด้วย openssl ตัวใหม่ๆ ต้องใช้ตัวเก่าๆหรือไม่ก็เครื่องมืออื่นในการทดสอบแทนครับ

 1. SSLv2 Support

ปัญหานี้เราแค่ตรวจสอบเพื่อยืนยันว่ามีการใช้งาน sslv2 จริงหรือไม่โดยใช้คำสั่งเป็น

หาก support ตัว server จะ response กลับมาด้วย certificate 

หากไม่ support จะขึ้นเป็น

2. SSLv3 Support

อันนี้จะคล้ายๆกับ sslv3 ว่า server ปลายทาง support หรือไม่ไม่โดยใช้คำสั่งเป็น

หากสำเร็จ จะได้ผลลัพธ์ออกมาเป็น

3. ตรวจสอบ Cipher Suites

อันนี้เป็นการตรวจสอบว่า server ปลายทาง support การใช้งาน cipher suite อะไรบ้าง โดยยกตัวอย่างเช่น

TLS_RSA_WITH_AES_128_CBC_SHA

  • RSA คือ Key exchange algorithm
  • AES_128_CBC จะเป็นการเข้ารหัสที่ใช้ (AES ที่ใช้ 128 bit key ในรูปแบบของ Cipher-Block Chaining mode และใช้ SHA เป็น Message Authentication Code (MAC) นั่นเอง

เราสามารถใช้ Nmap และ NSE (Nmap Script Engine) ในการ scan ได้โดยใช้คำสั่ง

ยกตัวอย่างเช่น

3. ตรวจสอบ Certificate

การตรวจสอบ Certificate นั้นเป็นการตรวจสอบว่า certificate นั้นน่าเชื่อถือหรือไม่ 

หากต้องการตรวจสอบ certificate เราสามารถทำได้โดยใช้คำสั่ง

ตัวอย่างจาก techsuii.com

4. ตรวจสอบ Renegotiation

SSL/TLS Protocol อนุญาตให้ client และ server สามารถทำการตกลงแลกเปลี่ยน encryption ของ key ใหม่ได้ระหว่าง session ซึ่งเป็นช่องโหว่ในปี 2009 ซึ่งทำให้ attacker สามารถที่จะ inject content เข้าไปในส่วน start session ได้ ซึ่งส่งผลให้สามารถเข้าไปแก้ไขความถูกต้องของ session ได้ ซึ่งแน่นอนว่าการตรวจสอบในลักษณะของ openssl command อาจจะได้แค่การเช็คว่า server รองรับการ renegotiation เท่านั้นก็เป็นได้ ไม่ได้บ่งบอกถึงว่ามีช่องโหว่แต่อย่างใด เพราะช่องโหว่ดังกล่าวขึ้นอยู่กับ ssl library ที่ใช้อีกด้วยนั่นเอง

เราตรวจสอบการรองรับ renegotiation ได้โดยใช้คำสั่ง

หากไม่ support จะแสดงผลลัพธ์ส่วนการ Renegotiation ว่า “Secure Renegotiation is not supported”

5. ตรวจสอบ CLIENT INITIATED RENEGOTIATION

ส่วนการตรวจสอบต่อจากข้อ 4 คือ CLIENT INITIATED RENEGOTIATION จะกระทำโดย

เมื่อสร้าง connection ได้แล้ว server จะรอรับการ input ต่อไปของเรา เราสามารถเขียน เป็น

หาก server support ตัว connection จะยัง active ต่อไป

หาก Server ไม่ support feature นี้จะขึ้นเป็น

6. การตรวจสอบเรื่อง Compression

การ compression จะเกี่ยวโยงไปยัง 2 ช่องโหว่ดังคือ CRIME และ BREACH โดยเราสามารถตรวจสอบได้ว่า server นั้นรองรับการ compression ได้หรือไม่ โดยใช้คำสั่ง

หาก server support compression ผลการ response จะคล้ายๆกับตามผลด้านล่างนี้ โดยมีการเขียนว่า “Compression: zlib compression” และ “Compression: 1 (zlib compression)” ซึ่งจะบ่งบอกว่ามีช่องโหว่ CRIME attack และ

หากไม่ support จะแสดงออกมาเป็น “Compression: NONE”.

หากต้องการตรวจสอบ BREACH ให้ทำการเชื่อมต่อแบบเดิมแบบที่ทำตามข้างต้นแล้วใช้คำสั่งเป็น

หากมีการ response เป็น encoded data กลับมา ก็จะแสดงว่า support HTTP compression ซึ่งนั่นบ่งบอกถึงว่าปลายทางได้รับผลกระทบจาก BREACH ไปด้วย

7. HEARTBLEED

Heartbleed เป็นช่องโหว่ที่ดังมากใน OpenSSL. ทำให้เราสามารถเข้าไปดึง memory contents ของเครื่องออกมาได้ โดย OpenSSL ที่ได้รับผลกระทบคือ

•    OpenSSL 1.0.1 – 1.0.1f (inclusive)

ตัวที่ไม่ได้รับผลกระทบคือ

•    OpenSSL 1.0.1g 

•    OpenSSL 1.0.0 branch 

•    OpenSSL 0.9.8 branch 

เราสามารถใช้ nmap ในการตรวจสอบได้โดยใช้คำสั่ง

จะได้ผลลัพธ์ออกมาเป็น

8. CHANGE CIPHER SPEC INJECTION

อันนี้เป็นจุดอ่อนที่เกิดขึ้นใน OpenSSL โดยเกิดใน

•    OpenSSL 1.0.1 – 1.0.1g

•    OpenSSL 1.0.0 – 1.0.0l

•    OpenSSL version ก่อนหน้า 0.9.8y

เราสามารถทดสอบได้โดยการ download NSE script จาก https://nmap.org/nsedoc/scripts/ssl-ccs-injection.html. แล้วใช้คำสั่ง

ผลลัพธ์ที่ได้

Source