บั๊ก Heartbleed ที่ถูกค้นพบเมื่อไม่กี่วันก่อน ส่งผลสะเทือนไปทั่วโลกไอที เหตุเพราะตัวซอฟต์แวร์ OpenSSL นั้นถูกใช้อย่างกว้างขวางในฐานะซอฟต์แวร์พื้นฐานสำหรับการเข้ารหัส SSL/TLS เพื่อส่งข้อมูลแบบ HTTPS, VPN และทราฟฟิกเข้ารหัสแบบอื่นๆ
การค้นพบช่องโหว่ Heartbleed ถือเป็นการ "เจาะที่หัวใจ" ทำลายความน่าเชื่อถือของการส่งข้อมูลผ่าน SSL/TLS ลงอย่างมาก (ตามสัดส่วนการใช้ OpenSSL) เพราะการเข้ารหัสที่เรา "เชื่อว่าปลอดภัย" นั้นกลับไม่ปลอดภัยอย่างที่เคยคิดกันไว้
บทความนี้จะอธิบายลักษณะของ Heartbleed โดยพื้นฐาน เพื่อให้ผู้อ่าน Blognone เข้าใจมากขึ้นว่ามันเกิดอะไรขึ้นกันแน่นะครับ
อย่างแรกเลยต้องเข้าใจพื้นฐานของการเข้ารหัสข้อมูลหรือ encryption เสียก่อน การเข้ารหัสในปัจจุบันมักใช้รูปแบบ "กุญแจคู่อสมมาตร" คือสุ่มสร้างกุญแจ (key) ออกมาสองตัวพร้อมกัน (แต่กุญแจไม่เหมือนกัน = อสมมาตร) คือ private key และ public key
กุญแจสาธารณะ (public key) จะถูกส่งออกไปในที่สาธารณะ เช่น อินเทอร์เน็ต (ในมิติของความปลอดภัยคือ untrusted space) ส่วนกุญแจส่วนตัว (private key) จะถูกเก็บไว้ในเครื่องของผู้ใช้งานเท่านั้น (มองว่าเป็น trusted หรือ safe space)
เมื่อ A ต้องการส่งข้อมูลลับให้ B ภายใต้สถาปัตยกรรมการเข้ารหัสแบบนี้ A จะนำ public key ของ B (ที่อยู่บนอินเทอร์เน็ต) มาผสมกับตัว "ข้อมูล" (data) ที่ต้องการส่ง เพื่อไม่ให้ใครคนอื่นอ่านได้ยกเว้นแต่ B ที่มีกุญแจคู่กันคือ private key ที่เก็บอยู่กับตัวของ B เท่านั้น
ภาพประกอบจาก Microsoft/MSDN
ความน่าเชื่อถือของการเข้ารหัสข้อมูลลักษณะนี้จึงอยู่ที่ความน่าเชื่อถือในการเก็บรักษา private key ที่ใช้เป็นเครื่องมือถอดรหัสนั่นเอง (แอดมินระบบจึงต้องรักษา private key ให้ดียิ่งกว่าชีวิตของตัวเอง)
ผู้สนใจสามารถอ่านรายละเอียดได้จากบทความเก่า Asymmetric Cryptography: แตกต่างแต่เข้าใจกัน นะครับ
การทำงานของ SSL/TLS อิงอยู่บนแนวคิดของการเข้ารหัสด้วยกุญแจคู่อสมมาตร แต่เพิ่มแนวคิดเรื่อง "ใบรับรอง" (certificate) ขึ้นมาเพื่อยืนยันตัวตนของผู้รับหรือผู้ส่งข้อมูลอีกชั้นหนึ่ง
กระบวนการออกใบรับรองจำเป็นต้องมี "คนกลาง" เพื่อมายืนยันตัวตน ซึ่งคนกลางคนนี้จะถูกเรียกว่า หน่วยงานออกใบรับรอง (Certification Authority หรือ CA) ส่วนกระบวนการทั้งหมดตั้งแต่ต้นน้ำยันปลายน้ำจะเรียกรวมๆ ว่า public-key infrastructure หรือ PKI
เพื่อให้เข้าใจง่ายๆ ลองดูวิดีโอแนะนำการทำงานเบื้องต้นของ SSL กันก่อนครับ
SSL/TLS เป็น "มาตรฐาน" ที่อยู่บนกระดาษ (เวอร์ชันล่าสุดคือ TLS 1.2) ในทางปฏิบัติจำเป็นต้องมี "ซอฟต์แวร์" ขึ้นมาทำงานเข้ารหัสตามมาตรฐานดังกล่าว ซึ่งในโลกเราก็มีซอฟต์แวร์ SSL หลายตัว อย่างไรก็ตาม ซอฟต์แวร์ที่ได้รับความนิยมสูงสุดคือ OpenSSL ซึ่งเป็นซอฟต์แวร์โอเพนซอร์สที่ถูกใช้งานในวงกว้างมาก (ไมโครซอฟท์มีซอฟต์แวร์ SSL ของตัวเองที่ไม่มีบั๊กดังกล่าวเลยรอดหมดในกรณีนี้)
ตามมาตรฐาน SSL/TLS จะมีตัวเลือกหนึ่งที่ชื่อว่า heartbeat (แปลตรงตัวคือ "หัวใจเต้น") เพื่อให้คอมพิวเตอร์ฝั่งใดฝั่งหนึ่งส่งข้อความสั้นๆ ไปยังอีกคอมพิวเตอร์ฝั่งหนึ่งเพื่อเช็คว่าอีกฝั่งยังออนไลน์อยู่
ปัญหาของ OpenSSL ที่เราเรียกกันว่า Heartbleed (ล้อตามชื่อ heartbeat) คือ OpenSSL ดัน "พลาด" เปิดโอกาสให้คอมพิวเตอร์ฝั่งหนึ่งสามารถส่งข้อความในฟอร์แมตพิเศษ เมื่ออีกฝั่งหนึ่งได้รับข้อความนี้ก็จะส่งข้อมูล (ที่อยู่ในหน่วยความจำ) แถมกลับไปให้ด้วย
ข้อมูลแถมที่ว่านี้จึง "มีความเป็นไปได้" ที่จะเป็น private key ที่อยู่ในเครื่องปลายทางครับ
เพื่อให้เข้าใจง่ายลองดูการ์ตูนของ xkcd ที่อธิบายเรื่องนี้ได้ดีมาก
บั๊ก Heartbleed ถูกแก้ไขใน OpenSSL เวอร์ชันล่าสุดเรียบร้อยแล้ว แก้ง่ายมากแค่อัพเวอร์ชันหรือลงแพตช์ก็หาย
แต่ประเด็นคือไม่มีใครทราบว่า private key ที่ถูกส่งผ่าน OpenSSL มาตั้งแต่ปี 2012 ถูกเจาะผ่านบั๊ก Heartbleed นั้นมีจำนวนเท่าไร และมีเว็บไซต์ไหนที่โดนเจาะบ้าง
ในทางทฤษฎี ผลสะเทือนของ Heartbleed กว้างมาก แต่ในทางปฏิบัติไม่มีใครทราบว่าเคยมีใครใช้ช่องโหว่ Heartbleed มาเจาะข้อมูลแบบนี้ไปก่อนหรือไม่ (แต่ทุกคนมโนกันว่า NSA เคยทำแน่ๆ ฮา)
เมื่อ private key หลุดออกไปจึงทำให้ข้อมูลที่ถูกเข้ารหัสด้วย key อันนั้น (เช่น รหัสผ่านที่เราใช้เข้าเว็บไซต์ เลขบัตรเครดิต) ไม่ปลอดภัยตามไปด้วยนั่นเองครับ
ตอนนี้คงเป็นหน้าที่ของเว็บไซต์และบริการออนไลน์ต่างๆ ที่จะสอบสวนดูว่าตัวเองได้รับผลกระทบจาก Heartbleed มากน้อยแค่ไหน รายละเอียดลองดูในข่าวเก่าๆ ของ Blognone
ผู้ใช้คงทำอะไรไม่ได้มากนักเพราะไม่เกี่ยวข้องกับ Heartbleed โดยตรง (ปล่อยแอดมินอุดเซิร์ฟเวอร์กันไป) แต่สิ่งที่ทำได้ (บ้าง) คือแก้ไขข้อมูลส่วนตัวที่อาจ(ย้ำว่า "อาจ") ไม่ปลอดภัยเพราะ Heartbleed เช่น รหัสผ่าน
นอกจากนี้เราอาจใช้มาตรการด้านความปลอดภัยอื่นๆ นอกเหนือจากรหัสผ่านในการปกป้องข้อมูลของเรา (เพราะรหัสผ่านอย่างเดียวอาจไม่ปลอดภัยจาก Heartbleed) เช่น เปิดใช้งาน Two-step Verification บนเว็บไซต์หรือบริการออนไลน์ต่างๆ
บทความนี้ไม่ได้อธิบายรายละเอียดเชิงเทคนิคของ Heartbleed แบบลงลึก ใครที่สนใจสามารถดูได้จากวิดีโอข้างล่างครับ (ทำโดย Zulfikar Ramzan ผู้เชี่ยวชาญด้านความปลอดภัยจากบริษัท Elastica)
บทความอ่านประกอบ: รายละเอียด Heartbleed จากต้นฉบับ, Vox