“HeartBleed” Security Bug คือภัยคุกคามซ่อนเร้นที่น่ากลัว ?
บทความนี้ Highlight อยู่ที่ตอนท้ายครับ
คำจำกัดความ
“HeartBleed” คือชื่อเรียก จุดบกพร่อง หรือความผิดพลาด ในโปรแกรมคอมพิวเตอร์ ที่เกี่ยวข้องกับความปลอดภัย (Security BUG) ของโปรแกรมที่ชื่อว่า “OpenSSL”
“OpenSSL” คือ โปรแกรมฟรี (Open-Source) สำหรับช่วยเข้ารหัสข้อมูลซึ่งเป็นที่นิยมในการนำไปใช้งานบน Web Server ทั่วโลก (เช่น หน้า Login ของ Web site ชื่อดังต่าง ๆ เหล่านี้ Facebook, Google Mail, Yahoo, Dropbox)
ประเด็นที่ HeartBleed Security Bug เป็นที่โด่งดังและได้รับความสนใจก็เนื่องจากประเด็นโดยสรุปย่อดังนี้
1. OpenSSL เป็นที่นิยมใช้กันมากบน Web Server ที่ให้บริการอยู่ในโลก Internet (จากการสำรวจข้อมูล ณ เมษายน 2557 ใช้ OpenSSL กันถึง 66% ทั่วโลก)
2. Hacker สามารถขโมย รหัสผ่าน เลขที่บัตรเครดิต หรือข้อมูลสำคัญที่จัดเก็บอยู่ในหน่วยความจำของ Server ที่ติดตั้ง OpenSSL Version ที่มี HeartBleed Bug นี้ออกไปได้ โดยที่ไม่สามารถระบุผู้กระทำความผิดได้เลย
3. Web Site ชื่อดังต่าง ๆ บนโลก Internet ต่างได้รับผลกระทบต่อ Security Bug ครั้งนี้ ซึ่ง Web Site ต่าง ๆ เหล่านี้มีจำนวนสมาชิกอยู่เป็น ”จำนวนมากมหาศาล” และยังไม่รวมถึง Web Site ที่เกี่ยวข้องกับธุรกรรมทางการเงิน
วันที่ถูกค้นพบ / ผู้คนพบ
ผู้ที่ค้นพบช่องโหว่นี้คือ Neel Mehta ซึ่งเป็นทีมงาน ด้านความปลอดภัยของ Google โดยวันที่เริ่มแจ้งการค้นพบคือ 1 เมษายน 2557 และได้รับการประกาศช่องโหว่อย่างเป็นทางการจาก OpenSSL วันที่ 7 เมษายน 2557 ในวันถัดไป Neel Mehta ได้ Tweet ข้อความผ่าน Twitter แจ้งเตือนให้ทั้งโลกทราบว่าต้อง Patch อย่างเร่งด่วน
Security Bug นี้ถูกตั้งชื่อโดยวิศวกรของบริษัท Codenomicon ซึ่งเป็นบริษัทที่ทำงานเกี่ยวกับความปลอดภัย และได้ออกแบบ Logo เป็นรูปหัวใจ ที่มีเลือดไหลออกมา รวมถึงได้ตั้ง Web Site http://heartbleed.com/ เพื่อเป็นแหล่งข้อมูลสำหรับการป้องกันและวิธีการแก้ไขให้กับผู้ที่ได้รับผลกระทบแบบฟรี! การค้นพบ Security Bug นี้ เป็นการค้นพบที่วิศวกรของทั้งสองหน่วยงาน (Google และ Codenomicon) ต่างค้นพบขึ้นเองโดยไม่ได้อาศัยข้อมูลซึ่งกันและกัน
Version ของโปรแกรม OpenSSL ที่ได้รับผลกระทบ
1. OpenSSL เวอร์ชัน 1.0.1
2. OpenSSL เวอร์ชัน 1.0.1:beta1 ถึง 1.0.1:beta3
3. OpenSSL เวอร์ชัน 1.0.1a ถึง 1.0.1f
4. OpenSSL เวอร์ชัน 1.0.2-beta1
ระบบปฏิบัติการที่ได้รับผลกระทบ
1. Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
2. Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
3. CentOS 6.5, OpenSSL 1.0.1e-15
4. Fedora 18, OpenSSL 1.0.1e-4
5. OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012)
6. FreeBSD 10.0 – OpenSSL 1.0.1e 11 Feb 2013
7. NetBSD 5.0.2 (OpenSSL 1.0.1e)
8. OpenSUSE 12.2 (OpenSSL 1.0.1c)
แนวทางการแก้ไขปัญหา
ทำการ Upgrade OpenSSL ให้เป็น Version 10.0.1g.
รายละเอียดของช่องโหว่ทางเทคนิค
ช่องโหว่ดังกล่าวอยู่ในส่วนของการเชื่อมต่อ ระหว่างการเข้ารหัสลับของ Protocol TLS/DTLS (Transport
Layer Security และ Datagram Transport Layer Security) ในส่วนที่เป็น Heartbeat extension ซึ่งแปลว่าการเต้นของหัวใจ
ในการติดต่อระหว่าง Client ไปยัง Server จะมีการส่ง Connection เพื่อรับส่งระหว่าง Server กับ Client ซึ่งในระหว่างการเข้ารหัส หรือรับส่งข้อมูล อาจมีการล่าช้าในการรับส่งซึ่งจะมีผลทำให้ Server ตัดการเชื่อมต่อไปยัง Client นั้น ๆ เพื่อประหยัด Bandwidth
การแก้ปัญหา Server ตัดการเชื่อมต่อนี้ ก็คือการใช้ Heartbeat Extension ให้ Client สามารถเปิด Connection ค้างไว้โดย Protocol Heartbeat การฟังเสียงหัวใจของทั้งสองฝ่ายนี้ ทำให้ Server ไม่ตัด Connection กับ Client ซึ่งจะมีการส่ง Payload และ Size of payload
ซึ่งการรับส่ง Payload และ Size of payload ตามปกตินี้จะมีจำนวนเท่ากับ 16384 Byte หรือ 16kB ตามมาตรฐาน RFC6520 ขององค์กร Internet Engineering Task Force (IETF) กำหนดไว้
ขออ้างอิงจากรูปภาพโดยอธิบายเพิ่มเป็นภาษาไทยดังนี้ (รูป Copy มาจาก http://xkcd.com/1354/)
1. ฝั่ง Client ส่งข้อความไปยัง Server ว่าถ้ายังเชื่อมต่อกันได้อยู่ ให้ Server ตอบกับมาด้วยข้อความจำนวน 6 ตัวอักษรโดยตอบกลับเป็นประโยค = POTATO
2. หลังจาก Server ได้รับ Message นี้ก็นำไปประมวลผลและตอบกลับไปยัง Client ตามที่ร้องของ จำนวน 6 ตัวอักษรโดยตอบกลับเป็นประโยค = POTATO
คราวนี้ Security Bug ของ payload นี้คือไม่ถูก Lock การร้องขอที่มากกว่า 16kB ทำให้ Client สามารถหลอก Server ให้ตอบกลับข้อมูลอะไรก็ได้ที่อยู่ในหน่วยความจำโดยเพิ่มจำนวนตอบกลับได้มากถึง 64kB
3. ฝั่ง Client ส่งข้อความไปยัง Server ว่าถ้ายังเชื่อมต่อกันได้อยู่ ให้ Server ตอบกับมาด้วยข้อความจำนวน 500ตัวอักษรโดยตอบกลับเป็นประโยค = HAT
4. หลังจาก Server ได้รับ Message นี้ก็นำไปประมวลผลและตอบกลับไปยัง Client ตามที่ร้องของ จำนวน 500ตัวอักษรโดยดึงข้อมูลอื่น ๆ ในหน่วยความจำมาประกอบให้ครบ 500 ตัวอักษร ซึ่งอาจจะเป็น User + Password หรือ Private Key ของ Digital Signature หรือเลขที่บัตรเครดิต และตอบกลับเป็นประโยคนำว่า = HAT + xxxxxxxxxxxxxxxxxxx
ตัวอย่างเพิ่มเติม
สามารถชม VDO ตัวอย่างการ Hack จริงในรูปแบบภาษาไทยได้ที่ URL นี้ http://www.youtube.com/watch?v=8uUOLVlkLPI ซึ่งแสดงถึงการตอบกลับจาก Server ที่เป็น User + Password ที่จัดเก็บอยู่บน Memory ของ Server
การตรวจสอบช่องโหว่ด้วยตัวเอง
ปัจจุบันมี Web site มากมายที่เปิดบริการช่วยตรวจสอบความปลอดภัยว่า Web site ของท่านมีช่องโหว่นี้อยู่หรือไม่ ยกตัวอย่างที่น่าเชื่อถือเช่น
ลำดับ | ผู้ให้บริการตรวจสอบ | URL |
1 | THAICERT | https://al2014ad002.thaicert.or.th/ |
2 | SYMANTEC | https://ssltools.websecurity.symantec.com/checker/views/certCheck.jsp |
3 | McAfee | http://tif.mcafee.com/heartbleedtest |
4 | Filippo Valsorda | https://filippo.io/Heartbleed/ |
สิ่งที่ต้องเฝ้าระวัง
เนื่องจาก Module OpenSSL ที่มีปัญหา Security Bug นี้ได้ถูกนำมาใช้ตั้งแต่ปี 2012 ซึ่งแหล่งข่าวที่น่าเชื่อถือมั่นใจว่ามี Hacker จำนวนมากค้นพบช่องโหว่นี้ตั้งแต่ 2 ปีที่ผ่านมา โดยที่ ณ ปัจจุบัน ไม่สามารถทราบได้เลยว่า ใครได้รหัสผ่าน หรือข้อมูลลับอะไรออกไปบ้างจาก Web Site ที่มีช่องโหว่นี้อยู่
หากธนาคารที่มีปัญหานี้อยู่มี Hacker ได้ข้อมูลบัตรเครดิต และ CVV ไปด้วย ธนาคารต่าง ๆ เหล่านี้จะกล้าเรียกคืนบัตรเครดิตทั้งหมดที่มีอยู่ในระบบหรือไม่ ? นี่คือปัญหาระดับโลก ที่ยังไม่มีรายงานผู้รับผิดชอบและกล้าแจ้งเตือนไปยังสมาชิกที่มีอยู่ในระบบทั้งหมด
แหล่งอ้างอิง
- http://en.wikipedia.org/wiki/Heartbleed
- http://heartbleed.com/
- http://blog.cloudflare.com/answering-the-critical-question-can-you-get-private-ssl-keys-using-heartbleed
- https://www.thaicert.or.th/alerts/admin/2014/al2014ad002.html
- http://mashable.com/2014/04/09/heartbleed-bug-websites-affected/
- http://news.netcraft.com/archives/2014/04/02/april-2014-web-server-survey.html
- http://www.youtube.com/watch?v=8uUOLVlkLPI
- http://www.cnet.com/how-to/which-sites-have-patched-the-heartbleed-bug/
- http://xkcd.com/1354/