Categories
Security

กฏ 27 ข้อ จากหนังสือ INNOCENT CODE

อ่านมาจากบล็อกของคุณ Somkiat Puisungnoen แล้วรู้สึกว่าดีมากเลย เป็นเบสิกด้าน Security ที่ต้องตระหนักในการพัฒนาระบบต่างๆ จึงอยากเก็บไว้เพื่อเตือนตัวเอง, ใช้ในการตรวจสอบระบบงานที่ทำต่อไป ซึ่งพอมาคิดๆดูก็พบว่างานที่เคยเขียนก็ยังมีช่องโหว่หลายอย่างอยู่ ซึ่งตงต้องตามไปปิดให้หมด

ที่มา http://www.somkiat.cc/innocent-code/

1. อย่าประเมินความสามารถของผู้บุกรุกต่ำเกินไป ( พลังด้านมึดมันน่ากลัวมาก )
2. แนะนำให้ใช้ HTTP POST เมื่อต้องการเปลี่ยนแปลงข้อมูลต่างๆ ของระบบ
3. อย่าไว้ใจข้อมูลที่ส่งมาจากฝั่งผู้ใช้งาน (Client side)
4. อย่าใช้ข้อมูลใน Referer header มาใช้ทำการ authentication และ authorisation
5. ควรที่จะสร้าง session id ใหม่ เมื่อผู้ใช้งานทำการ login เข้าระบบ
6. อย่าส่งรายละเอียดของความผิดพลาดไปยังผู้ใช้งาน
7. ตรวจสอบข้อมูล ก่อนที่จะส่งไปให้ระบบอื่นๆ ก่อนเสมอ
8. ตรวจสอบข้อมูล ที่ได้รับมาจากระบบอื่นๆ ก่อนนำไปใช้งานก่อนเสมอ
9. ควรมีระบบตรวจสอบข้อมูลเพียงที่เดียว ไม่กระจัดกระจาย เพราะว่าสามารถจัดการได้ง่าย
10. ในการตรวจสอบข้อมูล ต้องดูด้วยว่าระบบที่นำไปใช้งานคืออะไร เพื่อให้การตรวจสอบข้อมูลเหมาะสม
11. ต้องใช้ความพยายามอย่างมากในการต่อสู้กับการโจมตีรูปแบบต่างๆ เพราะว่าการต้องมีการเตรียมพร้อมในหลายๆ ส่วน ไม่ใช่เพียงการ coding เท่านั้น
12. อย่าเชื่อเอกสารของ API มากนัก เพราะว่ามันอาจจะผิดก็ได้ ดังนั้นต้องมีการตรวจสอบอยู่เสมอ
13. ต้องทำการตรวจสอบที่มาของข้อมูลเข้าเสมอ ห้ามละเลย ว่ามาจากที่เราอนุญาตไว้หรือไม่
14. ต้องทำการตรวจสอบข้อมูลเข้าทุกๆ ตัว เสมอ โดยไม่มีข้อยกเว้น
15. ในการกรองข้อมูล ให้ใช้วิธีการ whitelist นะ
16. อย่าอนุญาตให้ข้อมูลเข้าที่มันไม่ถูกต้อง ทำงานโดยเด็ดขาด บางครั้งระบบชอบไปลบข้อมูลที่ไม่ถูกต้อง แล้วให้ทำงานต่อไป ซึ่งน่ากลัวมากๆ
17. ระบบงานต้องมีการเก็บ logging ในการใช้งานระบบทั้งหมดไว้เสมอ
18. อย่าทำการตรวจสอบข้อมูลในฝั่ง client เพียงอย่างเดียวโดยเด็ดขาด
19. ถ้าเป็นไปได้ อย่าใช้ข้อมูลที่ส่งมาจากผู้ใช้งาน มาทำงานโดยตรง
20. ระหว่าง client และ server ควรส่งข้อมูลให้มีขนาดเล็กมากที่สุดเท่าที่จะทำได้
21. อย่าคิดว่า request ของผู้ใช้งานจะมาเรียงต่อกัน  หรือมาในแบบเดิมเสมอนะ เพราะว่าผู้ใช้งานสามารถทำได้มากกว่านั้น
22. ต้องทำการกรองข้อมูล ก่อนนำไปแสดงผลเสมอ
23. ในการเข้ารหัสข้อมูล ควรใช้ algorithm ที่เป็นมาตรฐาน
24. อย่าเก็บข้อมูล password ในรูปแบบ plain-text หรือเข้ารหัสแบบง่ายๆ โดยเด็ดขาด
25. อย่างส่งข้อมูลที่มีความสำคัญผ่าน HTTP GET โดยเด็ดขาด
26. จำไว้ว่า code ทุกๆ ตัวในฝั่ง server นั้นสามารถถูกโจมตีได้เสมอ
27. จำไว้ว่า security มันไม่ใช่ product แต่มันคือ process ที่ต้องเกิดขึ้นอยู่ตลอดเวลา

 

Categories
Security

10 เทคนิคยอดฮิตที่ใช้ในการจู่โจมเว็บไซต์ของปี 2010

นิตยสาร PC World ได้ทำการจัดอันดับช่องโหว่ที่ใช้ในการจู่โจมเว็บไซต์เมื่อปี 2010 ที่ผ่านมา โดยทั้ง 10 อันดับนี้จะถูกโหวตจากผู้เชี่ยวชาญและจากบุคคลทั่วไป (Open Vote)

ช่องโหว่ทั้ง 10 จัดอันดับได้ดังต่อไปนี้

  1. Padding Oracle Crypto Attack: อาศัยช่องโหว่จาก Microsoft’s Web Framework ASP.NET ที่ใช้ในการป้องกัน AES encryption Cookies ได้ซึ่งถ้าตัวข้อมูลของ Cookies ที่เข้ารหัสถูกเปลี่ยนแปลงตัว ASP.NET ที่ทำการดูแลข้อมูลพวกนี้อยู่จะหลุดข้อมูลบางอย่างซึ่งสามารถถอดรหัสข้อมูลได้ ด้วยจำนวนครั้งในการเปลี่ยนที่มากพอ แฮคเกอร์สามารถคาดเดาคีย์ที่ใช้ในการเข้ารหัสได้ง่ายขึ้น (โดย Juliano Rizzo และ Thai Duong)
  2. Evercookie: เทคนิคนี้จะเป็นการใช้จาวาสคริปต์เพื่อสร้าง cookies ไปซ่อนยังที่ต่างๆ 8 ที่เพื่อทำให้การทำลายนั้นยากยิ่งขึ้น ซึ่งทำให้แฮคเกอร์สามารถระบุตัวตนของเครื่องได้แม้ว่าตัว cookies หลักได้ถูกลบออกไปแล้วก็ตาม (สร้างโดย Samy Kamkar)
  3. Hacking Autocomplete: ฟีเจอร์ Auto-completion นี้คือสิ่งอำนวยความสะดวกเวลากรอกฟอร์มบนเว็บต่างๆ ซึ่งหลายคนแม้กระทั่งผมเองใช้เป็นประจำ (ขี้เกียจเวลามานั่งกรอกที่อยู่โดยเฉพาะเวลาเป็นภาษาอังกฤษ) ซึ่งถ้าเกิดใช้ฟีเจอร์นี้ในเว็บที่เป็นอันตรายแล้ว จะมีสคริปต์ซึ่งบังคับให้ตัวเว็บไซต์สามารถสั่งการให้เบราว์เซอร์ทำการเติมข้อมูลส่วนบุคคล แล้วทำการดักข้อมูลต่างซึ่งเก็บไว้ในเครื่องของเหยื่อ (สร้างโดย Jeremiah Grossman)