Coding Gun

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 เท่านั้นแต่ยังมี

เยอะมากๆ แต่ทุกปํญหาจะเกิดจากสาเหตุเดียวกันคือ คุณนำตัวแปรไปต่อกับ 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 ณ ปัจจุบันเราจะใช้

A9 Security Logging and Monitoring Failures

Logging และ Monitoring จะเป็นส่วนที่สำคัญกับ Application มากๆ โดยเราจะแยกออกเป็น 2 ส่วน ดังนี้

A10 Server-Side Request Forgery(SSRF)

ปัญหานี้ถือได้ว่าเป็นน้องใหม่ล่าสุดใน OWASP Top 10 เป็นปัญหาที่เกิดจากการ Call service ต่อเนื่องกันไปเรื่อยๆ เช่น ถ้าเราส่งคำสั่งซื้อสินค้าผ่านทาง API สิ่งที่เกิดขึ้นคือจะมี request ส่งไปที่

  1. API Gateway เพื่อคัดกรองผู้ที่มีสิทธใช้บริการ
  2. Order service เพื่อบันทึกคำสั่งซื้อ และส่งต่อไปยัง payment service
  3. 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

OWASP TOP 10 2017 to 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

อ่านต่อเพิ่มเติม

Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security