Haliviq
Security

การเปลี่ยน API key ที่รั่วไม่เท่ากับการยกเลิก session

session ที่เซ็นด้วย key เก่ายังใช้ได้อีก 24 ชั่วโมงหลังเราเปลี่ยน key ผู้ไม่หวังดีจึงยังใช้ได้อยู่ เช็กลิสต์รับมือเหตุการณ์ของเรามีขั้นตอนยกเลิก session และ token ที่ยังเปิดอยู่เสมอ นอกจากเปลี่ยน key แล้ว ยังไล่ดู log ด้วยว่ามีใครใช้ key เก่าอยู่หรือไม่

เกิดอะไรขึ้น

หลังจาก 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. 1เปลี่ยน key ที่รั่ว และเอา key เก่าออกจากการ verify
  2. 2ยกเลิก session และ token ที่อาจออกด้วย key เก่า
  3. 3ลดหรือข้าม grace period ของ key เก่าระหว่างเกิดเหตุ
  4. 4ไล่ดู log ว่ามีการใช้ key เก่าหรือ session ที่น่าสงสัยไหม
  5. 5บันทึกสิ่งที่พบไว้ใน incident notes

จำไว้สั้น ๆ

หลัง key รั่ว ให้เปลี่ยน key และยกเลิกสิ่งที่ key นั้นเคยเซ็นไว้ด้วย แล้วเช็ก log ว่ามีใครใช้ key เก่าไหม

เราอยากฟังว่าคุณกำลังสร้างอะไรอยู่

คุยกับเรา