เปิดตัวการปักหมุดคีย์สาธารณะด้วยการรายงาน HPKP

เอมิลี สตาร์ก

การใช้ SSL ในเว็บไซต์เป็นสิ่งสำคัญในการรักษาความปลอดภัยและความเป็นส่วนตัวสำหรับผู้ใช้ แต่การเปิดใช้ SSL ก็ไม่ใช่จุดสิ้นสุดของปัญหานี้ ยังมีอีกหลายขั้นตอนที่คุณทำได้เพื่อเสริมความปลอดภัยให้กับเว็บไซต์ ตั้งแต่การตั้งค่าแอตทริบิวต์ Secure ในคุกกี้ไปจนถึงการเปิด HTTP Strict Transport Security ไปจนถึงการใช้นโยบายรักษาความปลอดภัยเนื้อหาเพื่อล็อกสิทธิ์ของเว็บไซต์ แต่การใช้ฟีเจอร์ที่มีประสิทธิภาพเหล่านี้ อาจยุ่งยากเล็กน้อย เพื่อช่วยให้คุณเริ่มใช้ SSL รูปแบบที่เข้มงวดขึ้น Chrome 46 จะจัดส่งฟีเจอร์ที่เรียกว่าการรายงาน HPKP

ตัวย่อทั้งหมดนี้หมายถึงอะไร

การรักษาความปลอดภัยบนเว็บในปัจจุบันต้องอาศัยใบรับรอง SSL ซึ่งเป็นลายเซ็นการเข้ารหัสเพื่อพิสูจน์ว่าเว็บไซต์เป็นใคร เมื่อเบราว์เซอร์ส่งคำขอไปยัง URL เช่น https://developers.google.com เซิร์ฟเวอร์จะให้ใบรับรอง SSL และหากใบรับรองถูกต้อง เบราว์เซอร์จะอนุญาตให้คำขอดำเนินการต่อและแสดง URL ของเว็บไซต์ที่มีแม่กุญแจสีเขียวในแถบที่อยู่

แล้วใบรับรองที่ถูกต้องคืออะไรล่ะ ในการพิจารณาว่าถูกต้อง ใบรับรองจะต้องได้รับการลงนามโดยผู้ออกใบรับรอง (CA) หรือใบรับรองอื่นที่ลงชื่อโดย CA (เรียกว่า CA ระดับกลาง) เบราว์เซอร์และระบบปฏิบัติการมีรายชื่อ CA หลายร้อยรายที่ได้รับความเชื่อถือในการออกใบรับรอง แต่ปัญหาก็คือโดยค่าเริ่มต้น CA เหล่านี้สามารถออกใบรับรองให้กับเว็บไซต์ใดก็ได้ หากมีเครื่องมือใดไฟล์หนึ่งที่ถูกบุกรุกหรือทำงานผิดปกติ นั่นอาจเป็นความเสียหายร้ายแรงสำหรับทั้งเว็บ

ป้อนการปักหมุดคีย์สาธารณะ HTTP หรือ HPKP มาตรฐานนี้อนุญาตให้เว็บไซต์ส่งส่วนหัว HTTP ที่สั่งให้เบราว์เซอร์จดจำ (หรือ "ตรึง") ส่วนต่างๆ ของห่วงโซ่ใบรับรอง SSL ของตน จากนั้นเบราว์เซอร์จะปฏิเสธการเชื่อมต่อ ที่ไม่ตรงกับ PIN ที่ได้รับก่อนหน้านี้ นี่คือตัวอย่างส่วนหัว HPKP

Public-Key-Pins:  
       pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
       max-age=259200

ส่วนหัวนี้ระบุแฮชใบรับรอง 2 รายการเป็น PIN ประเภทแรกคือแฮชของใบรับรองในห่วงโซ่ใบรับรองของเว็บไซต์ และอีกรายการเป็น PIN สำรองหรือแฮชของใบรับรองที่เว็บไซต์สามารถใช้ในกรณีที่จำเป็นต้องหมุนเวียนใบรับรอง ส่วนหัวยังมีค่า max-age ด้วย หลังจากเวลาผ่านไป เป็นจำนวนวินาที เบราว์เซอร์จะลืม PIN

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ HPKP โดยทั่วไป โปรดดูข้อกำหนดหรือบล็อกโพสต์ที่ยอดเยี่ยมของ Chris Palmer นักพัฒนาซอฟต์แวร์ Chrome ของ Chris Palmer

ฉันควรเปิด HPKP ตอนนี้เลยไหม

ไม่จำเป็นเสมอไป เมื่อติดตั้งใช้งาน HPKP เป็นเรื่องง่ายที่จะเกิดความผิดพลาด และ DoS เว็บไซต์ของคุณโดยไม่ตั้งใจ หากคุณปักหมุดเว็บไซต์ไว้ที่ใบรับรอง 1 ชุดแล้วต้องใช้งานใบรับรองใหม่ ผู้ใช้ที่เห็นหมุดจะเข้าถึงเว็บไซต์ไม่ได้จนกว่า PIN จะหมดอายุ (ขึ้นอยู่กับค่า max-age ในส่วนหัว)

เนื่องจากตอนนี้การโจมตี HPKP นั้นทำได้ยาก จึงใช้ HPKP มักจะเป็นไซต์ระดับสูงที่ให้ความสำคัญกับความปลอดภัย ซึ่งมีอยู่จำนวนหนึ่งเท่านั้นในขณะนี้ ถ้าคุณตัดสินใจเปิดใช้ HPKP คุณควรเริ่มต้นด้วยค่าอายุสูงสุดที่สั้นมากๆ แล้วค่อยๆ เพิ่มขึ้นถ้าคุณไม่มีปัญหาใดๆ

การรายงาน HPKP คืออะไรและมีประโยชน์อย่างไร

การรายงาน HPKP ใน Chrome 46 คือฟีเจอร์ที่คุณใช้ตรวจหา การกำหนดค่าที่ไม่ถูกต้องเมื่อเปิดตัว HPKP

ก่อนอื่น คุณสามารถเริ่มด้วยการส่งส่วนหัว Public-Key-Pins-Report-Only แทนส่วนหัว คีย์สาธารณะ ดังนี้

Public-Key-Pins-Report-Only: 
       max-age=2592000;  
       pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";  
       pin-sha256="LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=";  
report-uri="https://example.net/pkp-report"

เมื่อเว็บไซต์ส่งส่วนหัวดังกล่าว Chrome จะตรวจสอบว่าการเชื่อมต่อปัจจุบันตรงกับ PIN หรือไม่ และจะส่งรายงานไปยัง report-uri หากไม่ Chrome จะไม่บล็อกคำขอตามการปักหมุดในส่วนหัว "รายงานเท่านั้น" ดังนั้นนี่จึงเป็นวิธีที่ปลอดภัยในการทดลองใช้ HPKP และดูว่าจะสร้างปัญหาต่อผู้ใช้โดยที่ไม่มีความเสี่ยงจากการ DoSing ของเว็บไซต์หรือไม่

โปรดทราบว่าส่วนหัว "รายงานเท่านั้น" จะใช้เฉพาะกับคำขอที่ได้รับเท่านั้น เบราว์เซอร์จะไม่จำการปักหมุด "รายงานเท่านั้น" เหมือนกับการปักหมุดจริง วิธีนี้ช่วยให้คุณทดสอบการกำหนดค่าได้โดยไม่ต้องกังวลเกี่ยวกับการแคชค่าที่ไม่ถูกต้องในเบราว์เซอร์ของผู้ใช้ และคุณยังทยอยเปิดตัวได้ (เช่น ในทรัพยากรเดียว) เพื่อหลีกเลี่ยงการทำให้รายงานมีข้อมูลท่วมท้นในเซิร์ฟเวอร์

เมื่อคุณเปิดตัวส่วนหัว Public-Key-Pins จริงเพื่อเริ่มบังคับใช้ PIN คุณสามารถใส่ค่า report-uri ในส่วนหัวนั้นได้ด้วยเพื่อให้รับรายงานต่อไปได้หากมีปัญหาใดๆ เกิดขึ้น

รายงานการละเมิด HPKP ต้องมีข้อมูลอะไรบ้าง

รายงานการละเมิด HPKP คือข้อความ JSON ที่ส่งในคำขอ HTTP POST ไปยัง report-uri ที่กำหนดค่าไว้ของคุณ สามารถดูรายการช่องได้ในspec แต่ฉันจะไฮไลต์ 2 ช่อง ใน served-certificate-chain และ validated-certificate-chain served-certificate-chain เป็นใบรับรองตามที่ Chrome ได้รับขณะตั้งค่าการเชื่อมต่อ SSL สำหรับคำขอ ในทางกลับกัน validated-certificate-chain เป็นห่วงโซ่ที่ Chrome สร้างขึ้นใหม่เมื่อพยายามตรวจสอบใบรับรองของเซิร์ฟเวอร์ ซึ่งแตกต่างจาก served-certificate-chain เป็นอย่างมาก ไคลเอ็นต์ต่างๆ จะดำเนินการตรวจสอบใบรับรองด้วยวิธีที่แตกต่างกัน และนี่อาจเป็นสาเหตุที่พบบ่อยของการกำหนดค่า HPKP ที่ไม่ถูกต้อง อย่าลืมตรวจสอบช่องนี้หากคุณได้รับรายงานที่ไม่คาดคิด

"จ่าย" อันสุดท้าย

หากคุณกำลังทำให้การรายงาน HPKP ใช้งานได้ โปรดทราบว่า Chrome จะตรวจสอบการปักหมุดสำหรับคำขอทั้งหมด รวมถึงคำขอการส่งรายงานด้วย ดังนั้น หากคุณติดตั้งใช้งาน HPKP สำหรับเว็บไซต์ของคุณ คุณอาจต้องการส่งรายงาน HPKP ไปยังโดเมนอื่นที่คุณยังไม่ได้ปักหมุดไว้ มิฉะนั้น การละเมิดการปักหมุดในเว็บไซต์จะเรียกใช้ รายงานไปยังโดเมนเดียวกัน ซึ่งจะทำให้การละเมิดการปักหมุดล้มเหลว และคุณจะไม่ได้รับรายงาน

หากยังไม่มีโดเมนอื่น ให้ลองใช้บริการ เช่น report-uri.io ซึ่งจัดการรายงานการละเมิดให้กับคุณ