ช่องโหว่ประเภท Broken Authentication and Session Management

stock_lock_brokenช่องโหว่ด้านความปลอดภัยที่ถูกจัดให้อยู่ในลำดับที่ 2 ของ OWASP TOP 10 2013 คือ Broken Authentication and Session Management (BASM)โดยช่องโหว่ประเภทนี้ถูกพบเจอได้บ่อยเนื่องจากเว็บแอปพลิเคชันส่วนใหญ่มีการทำ user authentication (user login) ไม่เพียงแต่จะเป็นช่องโหว่ที่พบได้บ่อย ช่องโหว่ประเภท BASM ยังเป็นช่องโหว่ที่สามารถสร้างความเสียหายให้กับผู้ใช้งานเว็บแอปพลิเคชันได้อย่างมาก บทความนี้จะอธิบายเกี่ยวกับสาเหตุที่ทำให้เกิดช่องโหว่และแนวทางการแก้ไข Keep Reading

ส่วนประกอบของ Web Application (Website)

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

ส่วนประกอบของเว็บแอปพลิเคชัน

เว็บแอปพลิเคชันในปัจจุบันประกอบไปด้วยการทำงานของเทคโนโลยีต่าง ๆ มากมาย ไม่ว่าจะเป็นตัวโปรแกรมเว็บแอปพลิเคชั่น (web application) เว็บเซิร์ฟเวอร์ (web server) เว็บเซิร์ฟเวอร์ซอฟต์แวร์ (web server software) ฐานข้อมูล (database) เว็บเบราว์เซอร์ (web browser) และอื่น ๆ ซึ่งแต่ละส่วนก็จะมีหน้าที่และการทำงานที่แตกต่างกันออกไป เราสามารถแยกส่วนประกอบของการทำงานของเว็บแอปพลิเคชันออกเป็นสองส่วนหลัก ๆ คือ เทคโนโลยีฝั่งผู้ใช้งาน (client-side technology) และ เทคโนโลยีฝั่งเซิร์ฟเวอร์ (server-side technology)

Screen Shot 2559-01-11 at 10.55.34 AM

Keep Reading

Web Session และ Web Cookie

cookieweb session และ web cookie เป็นพื้นฐานความรู้ที่นักพัฒนาเว็บแอปพลิเคชันต้องมีความเข้าใจอย่างลึกซึ้งเพราะเทคนิคเหล่านี้ถูกใช้ในการทำ authentication และ authorization บทความจะอธิบายเกี่ยวกับหลักการทำงานของ web session และ web cookie พร้อมทั้งความแตกต่างและวิธีการใช้งานอย่างถูกต้องปลอดภัย

Keep Reading

การโจมตีและช่องโหว่ประเภท Code Injection

Code Injection เป็นการโจมตีประเภท injection อีกชนิดหนึ่งที่สามารถสร้างความเสียหายต่อเว็บแอปพลิเคขันได้รุนแรง อย่างไรก็ตาม Code Injection นั้นพบได้ไม่บ่อยเท่ากับ SQL injection เนื่องจากเว็บแอปพลิเคชันที่มีช่องโหว่ประเภท Code Injection จะต้องมีการนำข้อมูลที่ได้รับมาจากผู้ใช้งาน (user input) มาเป็นส่วนหนึ่งในการประมวลผล

อะไรคือ Code Injection

Code Injection มีความหมายค่อนข้างกว้าง หากแปลตรงตัวก็จะได้ว่าเป็นการใส่ซอร์สโค้ดลงไปในเว็บแอปพลิเคชันเพื่อจุดประสงค์บางอย่าง ดังนั้น นักพัฒนาระบบบางกลุ่มก็เรียกการโจมตีประเภท Cross-site scripting (XSS) ว่า Code Injection เหมือนกันเพราะเป็นนการใส่ JavaScript ลงไปในเว็บแอปพลิเคชัน อย่างไรก็ตามในบทความนี้จะยึดตามหลักการของ OWASP ที่จัดประเภทของ Code Injection แยกออกจาก XSS โดย Code Injection ที่ผมจะอธิบายในบทความนี้จะหมายถึง การที่เว็บแอปพลิเคชันมีช่องโหว่ที่ผู้ใช้งานสามารถแทรกซอร์สโค้ดแปลกปลอมลงใน back-end เท่านั้น Keep Reading

การป้องกัน SQL Injection

จากบทความเรื่อง การโจมตีและช่องโหว่ประเภท SQL Injection เราได้ทราบถึงวิธีการ สาเหตุ และผลกระทบที่อาจจะเกิดขึ้นกับข้อมูลและเว็บแอปพลิเคชัน ในบทความนี้เราจะพูดถึงแนวทางในการป้องกัน SQL Injection อย่างมีประสิทธิภาพ

สาเหตุของ SQL Injection

จะเห็นได้ว่าสาเหตุหลักของช่องโหว่ประเภท SQL Injection นั้นเกิดจากการที่เว็บแอปพลิเคชันนำข้อมูลที่ได้รับมาจากผู้ใช้งานมาสร้าง SQL query โดยไม่ได้ทำการตรวจสอบก่อนว่าข้อมูลนั้นมีความถูกต้องเหมาะสมหรือไม่ ดังนั้นวิธีการป้องกัน SQL Injection ก็ต้องเริ่มต้นที่การตรวจสอบข้อมูลที่ได้รับมาจากผู้ใช้งาน Keep Reading

การโจมตีและช่องโหว่ประเภท SQL Injection

SQL Injection

SQL Injection เป็นหนึ่งในช่องโหว่ที่ร้ายแรงและพบได้มากเป็นอันดับต้น ๆ ของช่องโหว่ในเว็บแอปพลิเคชันจนถูกจัดให้เป็นช่องโหว่อันดับ 1 ใน OWASP TOP 10 ทั้งในปี 2010 และ 2013 ในบทนี้เราจะมาอธิบายถึงรูปแบบการโจมตีด้วย SQL Injection รวมถึงลักษณะของ SQL Injection ประเภทต่าง ๆ เช่น Blind SQL Injection และ Piggy-backed Queries พร้อมทั้งวิธีที่นักพัฒนาเว็บสามารถนำไปประยุกต์ใช้ในการป้องกันการโจมตีประเภทนี้

รู้จักกับ SQL

ต้องยอมรับว่าในปัจจุบัน ฐานข้อมูล นับว่าเป็นส่วนประกอบสำคัญในเว็บแอปพลิเคชันเกือบทุกเว็บ เนื่องด้วยฐานข้อมูลเป็นแหล่งที่ใช้ในการเก็บข้อมูลของเว็บแอปพลิเคชัน ไม่ว่าจะเป็นข้อมูลผู้ใช้งาน ข้อมูลกระดานสนทนา หรือข้อมูลอื่น ๆที่แตกต่างกันไปตามชนิดของเว็บ เรียกได้ว่าการทำงานระหว่างเว็บแอปพลิเคชันและฐานข้อมูลนั้นมีความสัมพันธ์กันอย่างใกล้ชิด โดยปกติเมื่อเว็บแอปพลิเคชันต้องการเรียกดู แก้ไข เพิ่ม หรือลบข้อมูลในฐานข้อมูลก็จะส่งสิ่งที่เรียกว่า SQL statement หรือเรียกอีกชื่อ SQL query ไปให้กับฐานข้อมูล ดังนั้นเราสามารถเรียกได้ว่า SQL เป็นภาษาที่ใช้ในการสั่งการฐานข้อมูลนั่นเอง Keep Reading

การโจมตีและช่องโหว่ประเภท Injection Attack

จุดเริ่มต้นของ Injection Attack

syringeในสมัยก่อน (ยุคกำเนิด Internet และ World Wide Web) เว็บไซต์ในสมัยนั้นถูกออกแบบให้เป็นแบบ static นั่นคือสามารถแสดงผลข้อมูลแต่ไม่สามารถรับข้อมูลจากผู้ใช้งานได้ เว็บไซต์โดยส่วนมากถูกสร้างขึ้นเพื่อใช้ในการแชร์ข้อมูลให้กับผู้ใช้งานอินเทอร์เน็ตเพียงเท่านั้น เมื่ออินเทอร์เน็ตและเว็บเทคโนโลยีได้รับความนิยมและพัฒนามากขึ้น ทำให้เกิดสิ่งที่เรียกว่า dynamic web application หรือเว็บแอปพลิเคชันที่สามารถมีปฏิสัมพันธ์กับผู้ใช้งานได้ เช่น การรับข้อมูลจากผู้ใช้งาน การแสดงผลข้อมูลที่เปลี่ยนแปลงไปตามลักษณะของการใช้งานและผู้ใช้งาน การพัฒนาการของ dynamic web application นับเป็นก้าวสำคัญของเว็บเทคโนโลยีเนื่องจากเว็บแอปพลิเคชันต้องมีการรับข้อมูลและคำสังจากผู้ใช้งาน ซึ่งช่องทางที่เว็บแอปพลิเคชันรับข้อมูลจากผู้ใช้งานก่อให้เกิดช่องทางในการโจมตีชนิด Injection ขึ้นมาในภายหลัง

อะไรคือ Injection Attack

Injection Attack (การโจมตีด้วยการฉีด) เป็นการจำแนกประเภทของการโจมตีเว็บแอปพลิเคชัน โดยการโจมตีประเภท Injection นั้นผู้ไม่หวังดีจะทำการส่งซอร์สโค้ด หรือข้อมูลที่เป็นอันตรายไปให้เว็บแอปพลิเคชันประมวลผลหรือจัดเก็บ เพื่อหวังผลในการ โจรกรรม ลบ แก้ไข หรือ หยุดการทำงานของเว็บแอปพลิเคชัน โดยการโจมตีประเภทนี้ถูกจัดเป็นการโจมตีมีสามารถส่งผลกระทบร้ายแรงต่อเว็บแอปพลิเคชัน เซิร์ฟเวอร์ และฐานข้อมูล นอกจากนี้ช่องโหว่ประเภท Injection ยังเป็นช่องโหว่ที่สามารถพบได้บ่อยจนถูกจัดให้อยู่ในลำดับที่ 1 ของช่องโหว่ใน OWASP TOP 10 ที่ได้อธิบายไปในบทความที่แล้ว

Screen Shot 2559-01-05 at 3.35.17 PM Keep Reading

รู้จักกับ OWASP TOP 10 (อะไรคือ OWASP TOP 10)

ในปี 2010 OWASP ได้ทำการจัดอันดับช่องโหว่ที่มีความรุนแรงและพบเจอได้บ่อยในเว็บแอปพลิเคชัน 10 อันดับขึ้นมาเป็นครั้งแรก และได้รับกระแสการตอบรับอย่างดีจากนักพัฒนาเว็บแอปพลิเคชันทั่วโลก โดย OWASP TOP 10 2010 ได้รับการยึดถือเป็นมาตรฐานการตรวจสอบช่องโหว่เว็บแอปพลิเคชันก่อนในหลายองค์กร และในปี 2013 OWASP ได้เผยแพร่เอกสาร OWASP TOP 10 2013 ที่อธิบายรายละเอียดช่องโหว่ที่พบได้บ่อยและมีความรุนแรง 10 อันดับแรกขึ้นมาอีกครั้ง บทความนี้จะเขียนอธิบายช่องโหว่ของ OWASP TOP 10 ปี 2013 พร้อมคำอธิบายโดยสังเขป หากผู้อ่านต้องการทราบถึงรายละเอียดแต่ละช่องโหว่สามารถคลิกเข้าไปอ่านรายละเอียดพร้อมตัวอย่างได้ในแต่ละหัวข้อ

จุดเริ่มต้นด้านความปลอดภัยของเว็บแอปพลิเคชัน

ในยุคปัจจุบันคงไม่มีใครไม่รู้จักคำเว็บไซต์และอินเทอร์เน็ต จำนวนผู้ใช้งานอินเทอร์เน็ตและเว็บไซต์เพิ่มขึ้นหลายเท่าตัวในช่วง 10 ปีที่ผ่านมา โปรแกรมคอมพิวเตอร์ต่างถูกเปลี่ยนมาพัฒนาเป็นเว็บแอปพลิเคชันเพื่อให้สามารถใช้งานได้จากทุกที่ทุกเวลาทำให้เทคโนโลยีในการพัฒนาเว็บแอปพลิเคชันมีความก้าวหน้าและซับซ้อนกว่ายุคแรกเริ่มอย่างมาก ไม่เพียงแต่เว็บแอปพลิเคชันจะมีความซับซ้อนมากขึ้น ข้อมูลที่ถูกเก็บและใช้งานบนเว็บแอปพลิเคชันก็เริ่มที่จะมีความสำคัญมากขึ้นด้วยเช่นกัน ไม่ว่าจะเป็นข้อมูลการทำธุรกรรมการเงินผ่านอินเทอร์เน็ต การชำระเงินด้วยบัตรเครดิตเพื่อซื้อสินค้าออนไลน์ การเก็บข้อมูลที่เป็นความลับ เช่น ข้อมูลส่วนบุคคล ประวัติผู้ป่วย ไว้ในเว็บแอปพลิเคชันให้ผู้ใช้งานสามารถเข้าถึงได้สะดวกมากขึ้น ทำให้เว็บแอปพลิเคชันตกเป็นเป้าหมายลำดับต้น ๆ ของอาชกรรมบนอินเทอร์เน็ต (Cyber Crime) เนื่องด้วยข้อมูลสำคัญเหล่านี้มีคุณค่ามหาศาล

รู้จัก OWASP

Open Web Application Security Project (OWASP) เป็นองค์การไม่แสวงหาผลกำไร (Non-profit organization) ถูกจัดตั้งขึ้นที่ประเทศสหรัฐอเมริกาเมื่อวันที่ 21 เมษายน 2004 โดยมีจุดประสงค์เพื่อเป็นองค์กรสากลที่เป็นศูนย์ร่วมในการร่วมมือจากนักพัมนาเว็บแอปพลิเคชันทั่วโลกในการสร้างเว็บแอปพลิเคชันให้มีความปลอดภัย โดย OWASP ได้รับการสนับสนุนจากบริษัท IT ชั้นนำทั่วโลกในการจัดสัมนาและการจัดอบรมเกี่ยวกับความปลอดภัยเว็บแอปพลิเคชัน อีกทั้งยังมีเว็บไซต์ที่ใช้ในการเก็บรวบรวมและเผยแพร่ความรู้เกี่ยวกับช่องโหว่ที่พบได้บ่อยและวิธีการป้องกัน

owasp_logo

Keep Reading

กำเนิด World Wide Web (WWW)

ก่อนที่จะพูดถึงความมั่นคงปลอดภัยเว็บแอปพลิเคชัน นักพัฒนาเว็บแอปพลิเคชั่นควรจะมีพื้นฐานความรู้เกี่ยวกับการทำงานของเว็บแอปพลิเคชั่นที่แข็งแกร่ง ในบทนี้จะอธิบายเนื้อหาการทำงานของเว็บแอปพลิเคชั่นโดยละเอียดตั้งแต่ยุคเริ่มต้นของ World Wide Web (WWW) เพื่อให้ผู้อ่านได้เข้าใจหลักการและแนวคิดของการสร้างเว็บแอปพลิเคชั่น ซึ่งจะเป็นพื้นฐานสำคัญในการศึกษาความมั่นคงปลอดภัยเว็บแอปพลิเคชั่น

กำเนิด World Wide Web (WWW) : Static Web Application

เทคโนโลยีเว็บถูกพัฒนามาตั้งแต่ปี 1990 โดย Sir Tim Berners-Lee ซึ่งเป็นชาวอังกฤษ Berners เป็นผู้พัฒนา World Wide Web (WWW) ซึ่งเป็น Protocol ที่ใช้ในการแลกเปลี่ยนข้อมูลตัวอักษร ซึ่งปัจจุบัน Berners ถูกนับว่าเป็นบิดาของ WWW โดยคนทั่วโลก

การทำงานของ WWW ในยุคแรกนั้นเป็นแบบ Static นั่นคือเว็บไซต์จะเป็นเพียงผู้ให้บริการข้อมูลกับผู้ใช้งานเท่านั้น การทำงานจะเรียบง่าย นั่นคือ Client (User) ส่ง HTTP request ไปเพื่อขอข้อมูลตัวหนังสือจากเซิร์ฟเวอร์ เมื่อเซิร์ฟเวอร์ได้รับข้อมูลก็ส่งข้อมูลตอบกลับมาเป็น HTTP response ให้กับ Client

Screen Shot 2559-01-04 at 2.11.24 PM

Berners เป็นผู้วางรากฐานสำคัญของ Web Technology นั่นคือ

  1. Hypertext Markup Language (HTML) เป็นภาษา HTML ที่เรารู้จักกันในปัจจุบัน
  2. Hypertext Transfer Protocol (HTTP) เป็นมาตรฐานการแลกเปลี่ยนข้อมูลระหว่าง browser กับ web server application
  3. Uniform Resource Identifier (URI) และ Uniform Resource Locator (URL) เป็นสิ่งที่ใช้ในการค้นหาไฟล์ข้อมูล หรือเราเรียกว่า Web Address นั่นเอง เช่น www.google.com/maps
  4. Web Browser เป็นซอฟต์แวร์ที่ใช้ในการเข้าถึงเว็บไซต์ โดยซอฟต์แวร์ตัวนี้จะต้องรู้จัก HTTP และเข้าใจภาษา HTML เพื่อแสดงผลให้กับผู้ใช้งานได้อย่างถูกต้อง
  5. Web Server Software เป็นซอฟต์แวร์ที่ถูกติดตั้งอยู่ในเซิร์ฟเวอร์เพื่อให้บริการผู้ใช้งาน โดย Web Server Software จะคอยฟัง HTTP request จาก Client ประมวลผลเพื่อนำเอาข้อมูลที่ถูกร้องขอส่งเป็น HTTP response กลับไปให้กับ Web Browser

 

จะเห็นได้ว่าการทำงานของ WWW ในยุคแรกเริ่มมีความเรียบง่ายไม่ซับซ้อน โดยกระบวนการมีเพียงแค่ Client ส่ง HTTP request โดย HTTP request ต้องระบุว่าต้องการข้อมูลจากไฟล์ไหน Web Server Software ทำการประมวลผล HTTP request ค้นหาและเปิดอ่านไฟล์ที่ถูกร้องขอเพื่อนำบรรจุใส่ HTTP response ส่งกลับให้กับ Client เมื่อ Client ได้รับ HTTP response ทำการเปิดอ่านข้อมูลซึ่งประกอบไปด้วย HTML และนำผลไปแสดงให้กับผู้ใช้งานและเป็นต้นกำหนดของเว็บแอปพลิเคชันในยุคถัดไป

สวัสดีปีใหม่ 2016! (Happy New Year 2016!)

สวัสดีปีใหม่ 2016! (Happy New Year 2016!)

ขอถือโอกาสในนี้ในการเริ่มเขียน blog เพื่อเผยแพร่ความรู้เกี่ยวกับ Information Security, Web Application Development, Programming และ อื่น ๆ โดยส่วนมากจะเป็นความรู้เทคนิคเชิงลึก เนื่องจากปัจจุบันบทความเทคนิคเชิงลึกในภาษาไทยยังไม่ค่อยมี จำได้ว่าตอนเรียนนี่ภาษาอังกฤษผมก็ไม่ค่อยดีทำให้ศึกษาเกี่ยวกับเทคโนโลยีได้ยากมาก ทางที่ดีอยากให้คนไทยอ่านภาษาอังกฤษให้คล่อง ๆ เข้าไว้จะได้หาความรู้ได้ด้วยตนเองได้ อย่างไรก็ตามจนกว่าจะถึงวันนั้นขอเป็นส่วนหนึ่งที่ช่วยให้คนไทยมีแหล่งเรียนรู้เทคโนโลยีที่มีคุณภาพเพิ่มอีกหนึ่งเว็บไซต์ ตั้งใจไว้ว่าจะหาเวลาว่างมาเขียน blog ทุก ๆ อาทิตย์ อย่างน้อยอาทิตย์ละ 1 บทความ จะเขียนไปเรื่อย ๆ จนกว่าจะหมดแรงเขียน 🙂