Monday, 5 May 2008

Security Testing ตอนที่ 2

ห่างหายไปจากตอนที่หนึ่งนานมากๆ เรามาพบกันในตอนที่สองเลยครับ

Broken Access Control

คือ การที่เราสามารถเข้าไปใช้สิทธิของผู้อื่นได้ โดยเพียงแค่รู้ url ของเค้า เช่น สมมุติเรา login โดยใช้ role user ซึ่งจะไม่เห็น link สำหรับสร้าง user แต่เราไปรู้ว่าใช้ url อะไรใจการเข้า module นั้น เราก็จะสามารถเข้าไปจัดการ user โดยใช้แค่ role user
วิธีทดสอบ
ให้เปิด IE 2 หน้าต่าง โดยหน้าต่างแรก login เป็น user ธรรมดา อีกหน้าต่างหนึ่ง login เป็น user ที่มีสิทธิสูงกว่าเช่น admin จากนั้น copy link ใน module ซึ่งมีใน admin แต่ไม่มีใน user มารันใน หน้าจอของ user ถ้าสามารถเข้าได้ แสดงว่าเกิด Broken Access control
วิธีแก้ไข
ควรจะเช็คสิทธิของผู้ใช้ในทุกหน้าจอ ไม่ใช่แค่ซ่อน url เอาไว้


Error Handling

ระบบต้องไม่เปิดเผยข้อมูล Technical Error Code ที่หน้าเว็บให้ client เห็นควรมีการดักจับ แล้ว แสดงเป็นข้อความเฉพาะที่จำเป็นเพื่อสื่อให้ผู้ใช้เข้าใจ
วิธีทดสอบ
ทดสอบทำให้เกิด error ขึ้นใน web application เพื่อดูว่าจะแสดงข้อความ error แบบใด
วิธีแก้ไข
1. ควรทำหน้า error กลางที่ดักจับ error แล้วแสดงเป็นข้อความที่ผู้ใช้เข้าใจ โดยไม่แสดง error code ใดๆ ที่หน้าจอ แต่อาจจะเขียนลงไฟล์แทน
2. สำหรับ .NET เมื่อนำขึ้น production ควรปิดข้อความ error โดยสร้าง page มารับ error แล้วแก้ web.config เป็นดังด้านล่าง

defaultRedirect= “[ชื่อerror page].aspx”/>



Web server configuration

ควรจะป้องกันเรื่อง Directory traversal คือ ไม่ควรให้สามารถเข้าเว็บไปยัง directory อื่นๆ ได้
วิธีทดสอบ
ทดลองเข้าเว็บโดยระบุ url จนถึงแค่ชื่อ directory ไม่ระบุชื่อไฟล์ web page หรือ ชื่อ action path เช่น แทนที่จะเข้า ด้วย url แบบนี้ http://www.test.com/document/index.html ก็เข้าโดยใช้ แบบนี้แทน http://www.test.com.document/ เพื่อดูว่าสามารถ browse ไฟล์ใน directory นั้นได้หรือเปล่า
วิธีแก้ไข
1. สำหรับ .NET นั้นใน IIS จะมี option ให้ set ได้ว่าจะให้ directory สามารถ browse ผ่านเว็บได้หรือไม่ ดังรูป ซึ่งเราไม่ควรติ๊กเลือกให้มัน สามารถ browse ได้
2. สำหรับ SunOne สามารถ Disable Directory browsing ได้โดยเข้าไปที่ Web Admin จากนั้นเลือก manage web ที่ต้องการ แล้วเลือก tab Virtual Server Class-> แล้วคลิ๊ก ปุ่ม Manage จากนั้นคลิ๊ก tab Content Mgmt->Document Preferences-> แล้วเลือก Directory Indexing เป็น None โดยต้องใส่ชื่อไฟล์ในช่อง “File to use for error response when indexing is none:” ด้วย

Encryption

- ระบบต้องเข้ารหัสข้อมูลที่เป็นความลับ เช่น รหัสผ่าน, Connection Strings และ ข้อมูลอยู่ในระดับ Confidential หรือ Secret
- Salted Hash Techniques – ถ้าต้องมีการส่งผ่าน password หรือข้อมูลสำคัญจากระบบหนึ่งไปยังอีกระบบหนึ่งนอกจากการ encrypt ข้อมูลแล้ว ควรเพิ่มอักขระพิเศษใส่เข้าไป โดยตกลงกันในตอนส่งและตอนรับ
วิธีทดสอบ
Password ใน database ต้องถูกเข้ารหัสในแบบที่อ่านไม่เข้าใจ
วิธีแก้ไข
- ควรเข้ารหัส password
- ใช้ salt hash techniques กับ password ที่ส่งผ่านข้ามระบบ

No comments: