Hack, Programing

CWE (Common Weakness Enumeration)

โดยปกติแล้วผู้ที่ทำงานคอมพิวเตอร์ที่เกี่ยวข้องกับความปลอดภัยของข้อมูลน่าจะเคยรู้จัก 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

Leave a comment