Summary (สรุป)

อย่างที่ผมหวังว่าจะได้อธิบายไว้ในบทนี้ การสร้างระบบที่ปลอดภัยไม่ใช่แค่การทำสิ่งใดสิ่งหนึ่งเท่านั้น มันต้องการมุมมองแบบองค์รวมต่อระบบของคุณ โดยใช้กิจกรรม threat modeling บางรูปแบบ เพื่อทำความเข้าใจว่า security control ประเภทใดที่จำเป็นต้องนำมาใช้

เมื่อคิดถึง control เหล่านี้ การผสมผสานเป็นสิ่งจำเป็นในการสร้างระบบที่ปลอดภัย Defense in depth ไม่ได้หมายถึงแค่การมีการป้องกันหลายชั้นเท่านั้น แต่ยังหมายถึงการมีแนวทางที่หลากหลายในการสร้างระบบที่ปลอดภัยมากขึ้นด้วย

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

สำหรับมุมมองที่กว้างขึ้นเกี่ยวกับ application security โดยทั่วไป ผมแนะนำหนังสือ Agile Application Security โดย Laura Bell และคณะ 17

ต่อไป เราจะไปดูว่าเราจะทำให้ระบบของเรามีความน่าเชื่อถือมากขึ้นได้อย่างไร เมื่อเราเปลี่ยนไปพูดถึงหัวข้อเรื่อง resilience

1 ขอร้องเถอะ อย่าทำให้ทุกอย่างกลายเป็นเรื่อง Brexit ไปหมด

2 ผมพยายามหาแหล่งที่มาดั้งเดิมของโครงร่างการจัดประเภทนี้แล้วแต่ก็หาไม่เจอ

3 ผมขอแนะนำหนังสือ Understanding Design Thinking, Lean, and Agile (O’Reilly) ของ Jonny สำหรับมุมมองเพิ่มเติมของเขา

4 มันเป็นการโต้เถียงแบบ passive-aggressive มากกว่า ซึ่งบ่อยครั้งไม่มีส่วนที่ “passive” เลยด้วยซ้ำ

5 Adam Shostack, Threat Modeling: Designing for Security (Indianapolis: Wiley, 2014)

6 Troy Hunt, “Passwords Evolved: Authentication Guidance for the Modern Era,” 26 กรกฎาคม 2017, https://oreil.ly/T7PYM .

7 Neil McAllister, “Code Spaces Goes Titsup FOREVER After Attacker NUKES Its Amazon-Hosted Data,” The Register , 18 มิถุนายน 2014, https://oreil.ly/mw7PC .

8 บางคนกังวลเกี่ยวกับข้อเท็จจริงที่ว่า secret ถูกเก็บเป็น plain text การที่สิ่งนี้จะเป็นปัญหากับคุณหรือไม่นั้นขึ้นอยู่กับ threat model ของคุณเป็นหลัก เพื่อให้ secret ถูกอ่านได้ ผู้โจมตีจะต้องมีสิทธิ์เข้าถึงระบบหลักที่รัน cluster ของคุณโดยตรง ซึ่ง ณ จุดนั้นก็เถียงได้ว่า cluster ของคุณถูกโจมตีจนไร้ทางแก้ไปแล้ว

9 ผมเชื่อแน่ว่าเป็นคนคิดคำนี้ขึ้นมา แต่ก็คิดว่าเป็นไปได้สูงเช่นกันว่าผมไม่ใช่คนเดียวที่คิดคำนี้

10 เช่นเดียวกับที่ Niels Bohr เคยโต้แย้งว่าแมวของ Schrödinger นั้นทั้งเป็นและตายไปพร้อมกัน จนกว่าคุณจะเปิดกล่องเพื่อตรวจดูจริงๆ

11 Jan Schaumann (@jschauma), Twitter, 5 พฤศจิกายน 2020, 16:22 น., https://oreil.ly/QaCm2 .

12 ตัวอักษร “S” ใน “HTTPS” เดิมทีเกี่ยวข้องกับ Secure Socket Layer (SSL) ที่เก่ากว่า ซึ่งถูกแทนที่ด้วย TLS ด้วยเหตุผลหลายประการ แต่ที่น่าสับสนคือคำว่า SSL ก็ยังคงถูกใช้อยู่แม้ว่าจริงๆ แล้วจะเป็น TLS ก็ตาม library อย่าง OpenSSL ยกตัวอย่างเช่น ถูกใช้อย่างแพร่หลายเพื่อ implement TLS จริงๆ และเมื่อคุณได้รับ SSL certificate มันก็จะเป็นสำหรับ TLS จริงๆ นั่นเอง เราไม่ได้ทำให้เรื่องนี้ง่ายกับตัวเองเลยจริงไหม?

13 เราไม่เข้ารหัสรหัสผ่านขณะพักนิ่ง เพราะการเข้ารหัสหมายความว่าใครก็ตามที่มี key ที่ถูกต้องสามารถอ่านรหัสผ่านกลับมาได้

14 ก่อนหน้านี้เราจะพูดถึง two-factor authentication (2FA) MFA คือแนวคิดเดียวกันแต่เพิ่มแนวคิดที่ว่าเรามักจะอนุญาตให้ผู้ใช้ของเราให้ factor เพิ่มเติมจากอุปกรณ์ที่หลากหลาย เช่น secure token, แอป mobile authentication หรือ biometrics คุณสามารถมอง 2FA เป็นส่วนย่อยของ MFA ได้

15 ผมรับเครดิตเรื่องนั้นไม่ได้!

16 เว็บไซต์ JWT มีภาพรวมที่ยอดเยี่ยมว่า library ไหนรองรับ public claim ไหนบ้าง—มันเป็นแหล่งข้อมูลที่ดีเยี่ยมโดยทั่วไปสำหรับทุกเรื่องเกี่ยวกับ JWT

17 Laura Bell และคณะ, Agile Application Security (Sebastopol: O’Reilly, 2017)