Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> ความปลอดภัยเครือข่าย

พินนิ่ง (Pinning) ในความปลอดภัยเครือข่ายคืออะไร?

พินนิ่ง (Pinning) ในความปลอดภัยทางไซเบอร์คืออะไร?

พินนิ่ง (Pinning) เป็นเทคนิคที่ช่วยลดความเสี่ยงด้านความปลอดภัยผ่านการ Certificate Pinning ซึ่งจำกัดให้ใช้เฉพาะใบรับรอง (Certificate) ที่กำหนดไว้ล่วงหน้าสำหรับเว็บไซต์หรือบริการเฉพาะ แทนที่จะอนุญาตให้ใช้ใบรับรองใดๆ ที่ได้รับความเชื่อมั่นจาก Certificate Authority (CA) ทั้งหมด ผู้ดูแลระบบสามารถ "พิน" (Pin) ไว้ที่ CA เฉพาะ, Public Key หรือ Entity Certificate ที่เลือกไว้ได้

ทำไมจึงต้องพินใบรับรอง (Certificate Pinning)?

SSL/TLS เป็นโปรโตคอลที่สร้างการเชื่อมต่อที่ปลอดภัยและเชื่อถือได้ระหว่างเซิร์ฟเวอร์และไคลเอนต์ (เช่น บราวเซอร์) การพิน Public Key หรือ Certificate ของโฮสต์เป้าหมายช่วยให้แอปพลิเคชันตรวจสอบว่าเซิร์ฟเวอร์ที่ติดต่ออยู่คือเซิร์ฟเวอร์ที่แท้จริง ไม่ใช่ผู้โจมตีที่แอบแฝงอยู่ในระหว่างทาง (Man-in-the-Middle)

โจมตี SSL Pinning คืออะไร?

SSL Pinning ใช้ป้องกัน Man-in-the-Middle (MitM) Attacks ด้านไคลเอนต์ หลังจาก SSL Handshake เสร็จสิ้น แอปจะตรวจสอบใบรับรองของเซิร์ฟเวอร์อีกครั้งด้วยค่าที่พินไว้ล่วงหน้า มี 2 รูปแบบหลัก:

  • Certificate Pinning: พินใบรับรองทั้งใบ (รวมวันหมดอายุ Subject, Issuer ฯลฯ)
  • Public Key Pinning (SPKI Pinning): พินเฉพาะ Public Key (Subject Public Key Info) ทำให้ยืดหยุ่นกว่าเมื่อต้องต่ออายุใบรับรอง

TLS Pinning คืออะไร?

TLS Pinning เป็นการขยายแนวคิดของ SSL Pinning ไปสู่โปรโตคอล TLS (Transport Layer Security) ซึ่งเป็นมาตรฐานรุ่นใหม่ที่ทดแทน SSL การทำงานคล้ายกันแต่ใช้กับการเชื่อมต่อ TLS ทุกประเภท (HTTPS, SMTP, API, v.v.)

ควรพินใบรับรองหรือไม่?

การพินใบรับรองหรือ Public Key เหมาะสมเมื่อ:

  • ต้องการยืนยันตัวตนโฮสต์ระยะไกลอย่างเข้มงวด
  • ทำงานในสภาพแวดล้อมที่เป็นอันตราย (Hostile Environment) เช่น Wi-Fi สาธารณะ
  • แอปจัดการข้อมูลละเอียดอ่อน (ธนาคาร, สุขภาพ, ระบบภายในองค์กร)

อย่างไรก็ตาม ต้องวางแผนการหมุนเวียนคีย์ (Key Rotation) และมีกลุ่มคีย์สำรอง (Backup Pins) เพื่อไม่ให้บริการขาดหายเมื่อใบรับรองหมดอายุหรือถูกเพิกถอน

SSL Pinning จำเป็นหรือไม่?

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

Certificate Pinning ปลอดภัยหรือไม่?

Certificate Pinning ถือเป็น Best Practice สำหรับแอปมือถือและแอปที่จัดการข้อมูลสำคัญ มันเพิ่มชั้นความปลอดภัยเหนือ HTTPS/SSL ทั่วไป อย่างไรก็ตาม การนำไปใช้ผิดวิธี (เช่น ไม่มี Backup Pin, ไม่มีแผน Rotation) อาจทำให้แอปใช้งานไม่ได้เมื่อใบรับรองเปลี่ยน

SSL Pinning ทำงานอย่างไร?

  1. แอปเก็บ Public Key หรือ Certificate Fingerprint (SHA-256) ของเซิร์ฟเวอร์ไว้ล่วงหน้า (Hardcode หรือผ่าน Config)
  2. เมื่อเชื่อมต่อ TLS Handshake เซิร์ฟเวอร์ส่ง Certificate Chain มา
  3. แอปคำนวณ Fingerprint ของใบรับรองที่ได้รับ และเปรียบเทียบกับค่าที่พินไว้
  4. ถ้าตรงกัน → อนุญาตการเชื่อมต่อ | ถ้าไม่ตรง → ปฏิเสธการเชื่อมต่อทันที

ข้อเสียของ Certificate Pinning

Pinning อาจผิดพลาดได้ หาก:

  • ตั้งค่า Pin ผิด (Wrong Pin) → แอปไม่สามารถเชื่อมต่อเซิร์ฟเวอร์ตัวเองได้
  • ไม่มี Backup Pin → เมื่อต้องต่ออายุ/เปลี่ยนใบรับรอง แอปจะใช้งานไม่ได้จนกว่าจะอัปเดตเวอร์ชันใหม่
  • HPKP (HTTP Public Key Pinning) ในบราวเซอร์ถูก Deprecated แล้วเพราะความเสี่ยงสูงและยากจัดการ

วิธีดึงค่า Certificate Pin (Fingerprint)

# ด้วย OpenSSL
openssl s_client -connect example.com:443 -servername example.com 

ค่าที่ได้ (Base64 SHA-256 SPKI) คือค่าที่นำไป Pin ในแอป

ความหมายของ "Pin ใบรับรอง"

หมายถึงการผูกมัด (Bind) X.509 Certificate หรือ Public Key ของมันกับโฮสต์/โดเมนเฉพาะ ระบบจะยอมรับเฉพาะคีย์/ใบรับรองที่ตรงกับค่าที่พินไว้เท่านั้น

SSL Pinning ป้องกันอะไร?

  • Man-in-the-Middle (MitM) Attacks
  • การแทรกสคริปต์/โฆษณา/มัลแวร์ในトラフィคที่เข้ารหัส
  • การขโมย Session Token, Credentials, ข้อมูลส่วนบุคคล
  • การใช้ Proxy ที่แตก TLS (TLS Interception) โดยไม่ได้รับอนุญาต

ทำไม SSL Pinning จึงสำคัญ?

ช่วยปกป้องผู้ใช้แอปมือถือ (Android/iOS) จากโจมตี MitM บนเครือข่ายที่ไม่น่าเชื่อถือ เหมาะสำหรับแอปธนาคาร, E-commerce, Health-tech, Enterprise App ที่จัดการข้อมูล nhạy cảm