OWASP Top 10 2021
OWASP คือ องค์กรที่ไม่แสวงหากำไรที่ดูแลด้านความปลอดภัยบน Web Application ในยุคเริ่มต้นปัจจุบันก็มีบทความ เครื่องมือและ Top 10 Risks ของทั้งบน Web Application, CI/CD risks, Mobile Application, Cloud Security, IoT Security และอื่นๆ
OWASP Top 10 คือ 10 อันดับของความเสี่ยงของ Web Application ที่จัดอันดับโดย OWASP ซึ่ง Risks ในแต่ละข้อจะมีช่องโหว่หลายช่องโหว่(มีหลาย CWE)
OWASP Top 10 แต่ละข้อเป็นความเสี่ยง(Risk) ไม่ใช่ ช่องโหว่(Vulnerability)
A1 Broken Access Control
ปัญหาที่ใหญ่ที่สุดของการพัฒนา Web Application คือการจัดการ Access Control หรือ Authorization ปัญหานี้เราจะพบได้เยอะมากๆ เนื่องจากการทดสอบให้ครบถ้วนนั้นทำได้ยาก ยกตัวอย่างเช่น ถ้าการทำ Access Control นั้นถูกเขียนไว้ในฝั่ง Client-side(JavaScript) ถ้าเราทดสอบผ่านทาง UI เราจะหาไม่เจอเราต้องทดสอบที่ Back-end หรือที่ฝั่ง Server เท่านั้น
ปัญหานี้ขยับขึ้นมาจากอันดับที่ 5 ใน OWASP Top 10 2017 เป็นเพราะปริมาณของจุดอ่อน(Weakness)นั้นมีถึง 34 CWE ซึ่งเยอะมากเลยถูกจัดขึ้นมาไว้ในอันดับที่ 1 เอาชนะแชมป์เก่าอย่าง Injection ไปอย่างขาดลอย
A2 Cryptographic Failures
ปัญหานี้มาจาก Sensitive Data Exposure อันดับที่ 3 ใน OWASP Top 10 2017 ซึ่งเราจะอธิบายทีละตัว
Sensitive Data Exposure คือปัญหาที่มี Sensitive Data(ข้อมูลที่เป็นความลับ) หลุดออกไป ณ จุดต่างๆ ไม่ว่าจะเป็นการส่งผ่าน protocol ที่ไม่ได้เข้ารหัสอย่าง http หรือ จะเป็นการเก็บ Token สำหรับการเชื่อมต่อกับ Third-party ไว้ใน JavaScript
Cryptographic Failures คือปัญหาที่เกิดจากกการไม่ได้เข้ารหัส เข้ารหัสด้วย Weak Algorithm หรือการจัดเก็บ Key ที่ไม่มีความปลอดภัย
ดังนั้นจะเห็นว่า OWASP เปลี่ยนจาก Sensitive Data Exposure ไปเป็น Cryptographic Failures เพื่อ Scope ปัญหาให้แคบลงเพราะทุกปัญหาใน Crpytographic Failures นั้นจะอยู่ใน Sensitive Data Exposure ทุกตัวอยู่แล้ว ซึ่งนั่นแสดงให้เราเห็นถึงความสำคัญของการทำความเข้าใจวิธีการเลือก Algorithm ที่แข็งแรงและวิธีการจัดการ Key ที่มีความปลอดภัย
A3 Injection
Injection ถือว่าเป็นแชมป์เก่าที่ยืนอันดับ 1 มาอย่างยาวนาน เป็นปัญหาที่ใหญ่มากๆ โดยเฉพาะ SQL Injection ที่แทบจะเรียกได้ว่าเป็น Security 101 เลยก็ว่าได้ทุกคนที่เริ่มจ้นศึกษา Security ก็มักจะเริ่มต้นที่ SQL Injection
ปํญหา Injection นั้นไม่ได้มีแค่ SQL Injection เท่านั้นแต่ยังมี
- NoSQL Injection
- Command Injection
- Script Injection
- LDAP Injection
- XPath Injection
เยอะมากๆ แต่ทุกปํญหาจะเกิดจากสาเหตุเดียวกันคือ คุณนำตัวแปรไปต่อกับ String แล้วนำ String นั้นไป query โดยที่ไม่ได้ validate ให้ดี
และในปีนี้ OWASP ได้รวมเอา Cross-Site Scripting(XSS) เข้ามาใน อันดับที่ 3 นี้ด้วยเพราะการทำ Cross-Site Scripting(XSS) นั้นก็ถือว่าเป็นการโจมตีที่มีวิธีการคล้ายกับ Injection มากๆ รวมทั้งวิธีการป้องกันก็ยังใกล้เคียงกันอีกต่างหาก
Cross-Site Scripting(XSS) อยู่ในอันดับที่ 7 ใน OWASP TOP 10 2017
แล้วทำไมถึงตกมาอยู่อันดับที่ 3 ในปี 2021 นี้ นั่นก็เพราะว่าในปัจจุบันเราใช้ ORM กันเป็นส่วนใหญ่(เราเขียน SQL น้อยลง) ก็เลยทำให้ปัญหา SQL Injection ที่เป็นส่วนใหญ่ของ Injection นั้นลดลง แต่แน่นอนปัญหานี้มันรุนแรงมากๆ จึงยังคงอยู่ในอันดับที่ 3 ในปีนี้
A4 Insecure Design
ปัญหานี้ค่อนข้างแปลกกว่าปัญหาอื่นๆ เพราะส่วนใหญ่ OWASP จะพูดถึงแต่ปํญหาของ Product แต่ Insecure design นั้นอยู่ในส่วนของ Process(กระบวนการทำงาน) ซึ่งจริงๆแล้วปัญหานี้ค่อนข้างใหญ่เลยทีเดียว เพราะการที่ออกแบบมาไม่ดีหรือไม่ได้มองในมุมของ Security เลยจะทำให้ web application ของเรามีช่องโหว่ที่ปิดได้ยาก(กว่าจะรู้ตัวก็แก้ไม่ทันแล้ว)
ดังนั้นเราต้อง Design ระบบให้มีความปลอดภัย โดยจะต้องพิจารณาถึงความเสี่ยงที่ี web application นั้นมีด้วยการทำ Risk Assessment, Threat Modeing หรือ Attacker stories ตั้งแต่ก่อนเขียน Code
A5 Security Misconfiguration
ปํญหานี้ก็เป็นอีกหนึ่งข้อที่อยู่มาอย่างยาวนานและอันดับไม่ค่อยเปลี่ยน Security Misconfiguration หมายถึง การปรับ Configuration ที่ผิดพลาดทุกๆจุดตั้งแต่ Configuration ของ database, Configuration ของ Framework รวมไปจนถึง Configuration บน Operating system ซึ่งในปัจจุบันเราก็จะรวมถึงการเขียน Dockerfile และการปรับ Config ของ service ต่างๆบน cloudด้วย
ส่วนใหญ่ปัญหาของการ Configuration คือเราไม่ได้ปิด service ที่ไม่ได้ใช้ และการกำหนด Permission ให้เกินกว่าที่จะใช้งาน
และใน A5 นี้ได้รวมเอา XML External Entities(XXE) ซึ่งเป็นปัญหาอันดับที่ 4 ใน OWASP Top 10 2017 อีกด้วย ซึ่งที่เค้านำมาไว้รวมกันในข้อนี้เพราะเราสามารถป้องกัน XML External Entities(XXE) ได้ด้วยการ disable DTD ซึ่งเป็นต้นเหตุของปัญหา ในปี 2021 เลยได้รวมเอา XXE เข้ามาในข้อนี้ด้วย
A6 Vulnerable and Outdate Components
ในปัจจุบันการพัฒนา Web application ขึ้นมาซักตัวเราไม่ได้เขียน Code เองทุกๆบรรทัดเราจะใช้ framework หรือเครื่องมือที่เป็๋น Open-source เข้ามาใช้งาน ดังนั้นเราต้องคอยตรวจสอบดูว่า Framework หรือ Library ต่างๆที่เรานำมาใช้นั้นมีช่องโหว่รึเปล่า ถ้ามีเราต้องรีบ Patch(update version) โดยด่วน
A7 Identification and Authentication Failures
Authentication ถือว่าเป็นประตูทางเข้าสู่ระบบของเราดังนั้นถ้าเรามีประตูที่แข็งแรง ระบบของเราก็จะแข็งแรงตามไปด้วย และจุดที่มีความสำคัญมากๆของ Authentication คือการยืนยันตัวตน(Identity) สุดท้ายเมื่อคุณ Authentication ผ่านแล้วต้องสามารถยืนยันตัวตนของผู้ใช้งานได้
ในปัจจุบันการทำ Authentication ถือว่าเป็น 1 รูปแบบของ E-signature(ลายเซ็นอิเลคทรอนิกส์) เช่นถ้าเรา Login ผ่าน line ถือว่าเราได้ลงลายเซ็นต์ไว้ในทุกๆ message ที่เราพิมพิ์ ไม่ว่าเราจะทำการยืมเงินใคร ก็จะเปรียบเสมือนเราลงลายเซ็นในสัญญาการกู้ยืมเงินทันที นั่นคือสาเหตุว่าทำไม Authentication นั้นจึงเป็นส่วนที่สำคัญมากๆใน Web application
A8 Software and Data Integrity Failures
การทำ Software และ data มาใช้งานนั้นจำเป็นต้องมีการตรวจสอบความถูกต้องก่อนนำมาใช้งาน โดยเราจะใช้ hashing ในการตรวจสอบ ถ้าเราเอา library หรือ data นั้นมา hash แล้วไม่ตรงกับค่าที่กำหนดไว้(ถ้าเป็น library เราจะได้ค่านี้ตอน build แต่ถ้าเป็น data เราจะได้ integrity จากแหล่งกำเนิดของ data) แสดงว่าข้อมูลหรือ library ที่เรานำมาใช้ถูกดัดแปลงแก้ไข
Algorithm ที่ใช้ในการ Hash ณ ปัจจุบันเราจะใช้
- SHA512
- SHA384
- SHA256(Weak ที่สุดแนะนำให้ใช้ 2 ตัวด้านบนแทน)
A9 Security Logging and Monitoring Failures
Logging และ Monitoring จะเป็นส่วนที่สำคัญกับ Application มากๆ โดยเราจะแยกออกเป็น 2 ส่วน ดังนี้
- Logging จะใช้เป็นหลักฐานที่มัดตัวผู้กระทำความผิดหรือค้นหาต้นเหตุ(root cause)ของปํญหา หลังจากที่เกิดปัญหาขึ้นมาแล้ว ดังนั้นเราต้องเก็บ Log ให้ครบทุก Layer ทั้ง Log ของ OS, Web server, database และอื่นๆ
- Monotoring จะใช้ข่้อมูลทั้งจาก Log และ Metric(ค่าวัด ณ จุดใดจุดหนึ่งของระบบ) มาทำการคำนวนเพื่อหาความผิดปกติผ่านทาง AI หรือตรวจสอบว่าเข้าเงื่อนไขใน rules ที่เราได้เขียนไว้หรือไม่ ซึ่งถ้าเข้าเงื่อนไขระบบจำต้อง response หรือ alert ไปยัง Incident response team(ผู้ที่คอยตรวจจับและรับมือกับผู้บุกรุก) ทันที
A10 Server-Side Request Forgery(SSRF)
ปัญหานี้ถือได้ว่าเป็นน้องใหม่ล่าสุดใน OWASP Top 10 เป็นปัญหาที่เกิดจากการ Call service ต่อเนื่องกันไปเรื่อยๆ เช่น ถ้าเราส่งคำสั่งซื้อสินค้าผ่านทาง API สิ่งที่เกิดขึ้นคือจะมี request ส่งไปที่
- API Gateway เพื่อคัดกรองผู้ที่มีสิทธใช้บริการ
- Order service เพื่อบันทึกคำสั่งซื้อ และส่งต่อไปยัง payment service
- Payment Service ทำหน้าที่ตัดเงินออกจากบัญชีของลูกค้า
ดังนั้นเมื่อการทำงานของระบบจะเป็นการส่ง request ต่อไปเรื่อยๆแบบนี้ โดยเฉพาะใน Microservices Atchitecture ก็จะทำให้การโจมตี service ที่อยู่หลังบ้านโดยการส่ง request ต่อกันไปเรื่อยๆ เช่นถ้าเราต้องการโจมตี payment service เราต้องส่ง malicious request(request ที่มีอันตราย) ผ่านไปยัง api gateway และ order service
การป้องกันปัญหานี้เราต้องทำ Access control และ input validation ในทุกๆ service ต้องถือว่า request ที่มาจาก service ก่อนหน้านั้นเป็น request ที่ไม่ปลอดภัยเสมอ
จาก OWASP Top 10 2017 สู่ 2021
จากรูปเราจะเห็นว่าเกิดการเปลี่ยนแปลงที่เยอะมากพอสมควรทั้งการเปลี่ยนมือของ อันดับ 1 ซึ่งทำให้เราเห็นว่าปํญหา ณ ปัจจุบันเกิดจากการทำ Access control ที่ไม่ครบถ้วน และปัญหานี้ไม่สามารถใช้ tool มาช่วย scan ได้ เราต้องทดสอบด้วยตัวเอง และการเข้ามาของน้องใหม่อย่าง Server-Side Request Forgery(SSRF) ที่สอดคล้องกับการเปลี่ยนเข้าสู่ยุคของ Microservices Architecture อย่างเต็มตัว
OWASP API Top 10
และนอกจาก OWASP TOP 10 ที่เป็น 10 อันดับความเสี่ยงที่เกิดขึ้นบน Web Application แล้ว OWASP ยังได้จัดอันดับ OWASP API Security Top 10 ซึ่งแยกออกมาเป็นปัญหาของ API(Backend เท่านั้น)
OWASP Mobile Top 10
สำหรับผู้พัฒนา Mobile Application สามารถเข้าไปดูความเสี่ยงที่เกิดขึ้นกับ Mobile Application ทั้ง Android และ iOS ได้ที่ OWASP Mobile Top 10