เกิดอะไรขึ้น
หลังจาก key รั่ว เราเปลี่ยน key แล้วคิดว่าความเสี่ยงจบแล้ว ผ่านไปสักพักก็รู้ว่า session ที่ออกในช่วงที่ key เก่ายังใช้อยู่ ยังถูกยอมรับต่ออีกนานถึง 24 ชั่วโมงหลังการเปลี่ยน
แปลว่าใครที่ได้ session ที่ใช้ได้ไปแล้ว ก็ยังใช้ต่อได้ แม้ key ที่รั่วจะใช้ไม่ได้แล้ว
ทำไมถึงเป็นแบบนั้น
key กับ session เป็นคนละอย่างและมีอายุคนละแบบ session แบบ stateless ที่เซ็นไว้มีวันหมดอายุในตัว และจะถูกยอมรับจนกว่าจะหมดอายุ เว้นแต่ server จะเช็ก revocation list หรือ session version ด้วย การเปลี่ยน key ไม่ได้ทำให้ทุกอย่างที่ key นั้นเคยช่วยสร้างใช้ไม่ได้โดยอัตโนมัติ
พฤติกรรมจริงขึ้นกับการตั้งค่า ถ้า session เซ็นด้วย secret ที่รั่ว และเราลบ signing key เก่าออกทันที ปกติมันจะ verify ไม่ผ่านอีก แต่ถ้าตัว verify ยังรับ key เก่าในช่วง grace period ซึ่งพบบ่อยตอนหมุน key มันก็ยังใช้ได้จนหมดช่วงนั้นหรือหมดอายุของมันเอง
ตอนนี้เราทำอย่างไร
เช็กลิสต์รับมือเหตุการณ์ของเราถือว่าการเปลี่ยน key เป็นแค่ขั้นแรก เราเปลี่ยน key แล้วยกเลิก session และ token ที่อาจถูกออกด้วย key เก่า ด้วยการเพิ่ม session version, deny list หรือลบออกจาก store
จากนั้นไล่ดู log ว่ามีการใช้ key เก่า หรือ session ในช่วงที่เสี่ยงหรือไม่ เพื่อรู้ว่ามีใครใช้จริงไหม และเอาไปประกอบการตัดสินใจว่าต้องแจ้งหรือรีเซ็ตอะไรเพิ่ม
เช็กลิสต์สั้น ๆ
- 1เปลี่ยน key ที่รั่ว และเอา key เก่าออกจากการ verify
- 2ยกเลิก session และ token ที่อาจออกด้วย key เก่า
- 3ลดหรือข้าม grace period ของ key เก่าระหว่างเกิดเหตุ
- 4ไล่ดู log ว่ามีการใช้ key เก่าหรือ session ที่น่าสงสัยไหม
- 5บันทึกสิ่งที่พบไว้ใน incident notes
จำไว้สั้น ๆ
หลัง key รั่ว ให้เปลี่ยน key และยกเลิกสิ่งที่ key นั้นเคยเซ็นไว้ด้วย แล้วเช็ก log ว่ามีใครใช้ key เก่าไหม