โดยปกติแล้วผู้ที่ทำงานคอมพิวเตอร์ที่เกี่ยวข้องกับความปลอดภัยของข้อมูลน่าจะเคยรู้จัก CVE (Common Vulnerabilities and Exposures) แน่ๆ และนักพัฒนาซอฟแวร์เองก็คงเคยผ่านตากันมาบ้างเวลาที่มี patch ทางด้านความปลอดภัยออกมา งานนี้ผมขอละ CVE ไว้ก่อน แล้วหันมาพูดถึง CWE บ้างดีกว่า (เอ๊าววว แล้วมรึงจะพูดถึง CVE ทำหอกอะไรวะ)
เท่าที่สอบถามคนรอบๆ ข้าง ก็ไม่มีใครใคร่จะสนใจไอ้เจ้า CWE นัก (บางคนรู้ว่าเขียน code แบบ บาปๆ เป็นยังไง แต่ไม่เคยรู้จัก CWE) ซึ่งผมคิดว่ามันจำเป็นเหมือนกันที่นักพัฒนาซอฟแวร์ต้องรู้จักกับมัน ต้องรู้ว่ามันพูดถึงอะไรบ้าง แล้วก็ต้องคอยติดตาม Update ความรู้กันอย่างสม่ำเสมอด้วย มิฉะนั้นปัญหามันจะมากองอยู่กับพวกปลายน้ำอย่าง IT Security Team แทน
CWE คือ รายการประเภทของความไม่ปลอดภัยของซอฟแวร์ ( list of software weakness types) เช่น
CWE-22 เกี่ยวกับเรื่อง Path Traversal
CWE-89 ก็เกี่ยวกับเรื่อง SQL-Injection
CWE-120 ก็พวก Classic Buffer Overflow
ในรายละเอียดของ CWE แต่ละตัว มันก็จะมีคำอธิบายว่ามันเกี่ยวกับอะไร ส่งผลถึงความไม่ปลอดภัยกับระบบคอมพิวเตอร์อย่างไร ตัวอย่าง Code ที่ทำให้เกิดปัญหานั้นเป็นอย่างไร เรียกได้ว่าอธิบายอย่างละเอียดเลย แถมมีตัวอย่างให้ดูหลายภาษา Perl , PHP, C#, Java, Ruby, Shell Script ฯลฯ
อย่าง CWE-78 ที่เกี่ยวกับ OS Command Injection : มันทำให้ผู้บุกรุกสามารถประมวลผลคำสั่งที่ไม่ได้รับอนุญาตบนเครื่องเป้าหมายได้ ซึ่งเขาก็ยกตัวอย่างให้เราดูว่า ถ้าเราเขียน code PHP แบบนี้
$userName = $_POST[“user”];$command = ‘ls -l /home/’ . $userName;system($command);
แล้วถ้าหากผู้บุกรุกมันดันส่งชื่อ user มาเป็นแบบนี้
;rm -rf /
มันก็ทำให้มันจะไปประมวลผลคำสั่งดังนี้
ls -l /home/;rm -rf /
ฉิบหายไหมล่ะครับ
ผมเชื่อว่าหากทีมนักพัฒนาใส่ใจรายละเอียดส่วนนี้สักหน่อย … งานของ IT Security Team ก็น่าจะลดลงบ้าง 🙂 …
หรือถ้าใครมี Pen Tester อยู่ข้างตัว … ก็ช่วยกันทำงานได้นะครับ
ว่าแล้วก็เข้าไปศึกษากันที่นี่ได้เลยครับ http://cwe.mitre.org/top25/index.html