จริงๆ มางาน Code Mania 101 เพราะ Session นี้เลยครับ เนื่องจาก Project ที่ยื่นเข้าประกวดล่าสุดติดปัญหาทาง Technical เยอะพอสมควรเลย และเรื่อง Security เป็นหนึ่งในนั้นครับ สำหรับ Session เป็นกูรูด้าน Security พี่นฤดม รุ่งศิริวงศ์ ครับ
Software Security Fundamental
- ส่วนใหญ่อะไรที่เป็น Fundamental คนมักจะข้ามกัน ไป Advance ให้มันตรงกับงานที่สนใจก่อน พอเจอปัญหาแล้ว เราถึงกลับมามองที่ Fundamental
Security
- Security ภาษาไทยแปลตรงตัวเลย "ความมั่นคง" ซึ่งมันมั่นคงอย่างไร มันมีการแจกแจงเฉพาะเจาะจงลงไป เช่น Operation, Network, Physical และอื่นๆครับ
- แต่ในตอนนี้เจาะลงไปในส่วนของ Information(ข้อมูล) โดยต้องมอง 3 state ทั้งในส่วนของ Software และ Hardware
- Use - การใช้
- Store - การจัดเก็บ
- Transmit - การขนส่ง (ส่วนใหญ่เน้นอันนี้กันเยอะ)
Software Security (3R)
- Reliability - Function งาน ใช้งานแล้วมันน่าเชื่อถือได้ หรือป่าว
- Resiliency- Software เนี่ย มันยืดหยุ่น สามารถรองรับอะไรแปลกๆ พิสดาร ได้ในระดับนึงไหม
- Intentionally - attack expliots
- Accidentally - user error
- Recoverability - พังแล้ว กู้คืนมาใช้ได้ไหม
Security Concept
- สำหรับผมมันเป็น Framework แล้วให้แต่ละองค์กรไปทำ Assessment และดูว่ามีตรงกับ Framework หรือยัง ?
- ส่วนแรก Core (CIA)
- Confidentiality - Authentication: มีสิทธิไหม
- Integrity - Authorization: ได้รับอนุญาติ หรือป่าว
- Availability - Accountability: พร้อมใช้งาน ในหน้าที่ที่ได้รับ
- ส่วนแรก Design (อันนี้ขึ้นกับคน และกระบวนการและ) เนื่องจากเวลาที่จำกัดทางวิทยากรเลย ยกตัวอย่างที่สำคัญมาอธิบายครับ ได้แก่
- Least Privilege - ใช้สิทธิเท่าที่จำเป็น ไม่ต้องเผื่ออนาคตเยอะ
- Separation of duties - มีหน้าเอาไว้ตรวจสอบ คานกัน เข้าใจว่าฝั่งการเงินใช้เยอะ พวกการทำรายงาน และการอนุมัติรายการ เป็นต้น
- Defense in Depth - ไม่มีอะไรดีที่สุด ขนาดประตูในบ้านของแต่ละห้อง เรายังต้องทำกุญแจไว้ ระบบก็ควรมี ไม่ใช้ว่ามีกุญแจแล้ว กลายเป็นพระเจ้าของระบบเลย
- Security ไม่ได้ขึ้นกับทีม Network หรือ System ใน Code ของระบบงานต้องมีการป้องกันด้วย อย่างการโจมตีผ่านทาง Business Process ที่มีช่องโหว่
- Quality Attribute - Security เป็นปัจจัยหนึ่งที่ต้องสนใจ ที่ต้องสนใจตั้งแต่ช่วงแรกของการพัฒนาระบบ ถ้าพลาดไปแก้ไขในภายหลังมีค่าใช้จ่ายสูงมาก
Coding Security Practices
1. Input Validation
อะไรที่เป็น Input บ้าง ? - ทุก Byte ที่ส่งไป Server ไม่ใช้จากหน้า UI อย่างเดียว รับบ้อมูลที่ตกลงกันได้ที่ลักษณะ formal(เป็นทางการ มีการตกลงกันไว้) และจัดการกับข้อมูลที่ผิดได้
มี 2 แบบ
- Syntactic - ตาม Pattern มักใช้ Regular เช่น เลขบัตรประชาชน (อันนี้ตรวจจับง่าย)
- Semantic - ตาม Business Logic ตรงนี่พวก Tools/HW ฝั่ง Security ตรวจสอบไม่ได้ เช่น การโอนเงิน ซึ่งภายในมีลำดับกระบวนการของแต่ละธุรกิจซ่อนอยู่
ควรป้องกันในด้านแรก ทำกันให้ได้ในด้านแรกๆเลย แล้วควรทำที่ไหน ถ้ามี Client และ Server
- Client-Side - เร็ว เน้น User Experience
- Server-Side - กันอีกขั้น ป้องกันการปลอม Request ส่งข้อมูลเข้ามา
Implementation Guideline
- Data Type Validation
- Schema Validation JSON XSD
- Range Validation
- Pattern Validation -Regular Expression
- White List vs Black List - ใครทำอะไรได้ เช่น กำหนดใน XSD Schema
ทำแล้วได้อะไร -Comply with
- OWASP Top 10 2013: A1(Injection) / A3 (Cross-Site Scripting (XSS))
- OWASP Mobile Top 10 2016: M7 (Client Slide Injection)
2. Output Handling
อะไรที่ต้อง Clean บ้าง ? - ทุกอย่างที่ออกจากระบบ โดย Output ที่ออกจากระบบของเรามีคุณภาพ ไม่มีปัญหากับระบบอื่นๆ ที่นำข้อมูลไปใช้งานต่อ เวลาทำเรื่องนี้ควรทำที่ฝั่ง Server เพราะมันน่าเชื่อถือมากกว่าง
มี 2 กลยุทธ์ที่ใช้
- Sanitization - Clean Data ให้เรียบร้อยก่อนส่งต่อ เช่น
- remove tag หรือ remove อะไรที่อาจจะสามารถไป Execute ได้เป็น เช่น SQL. XML เป็นต้น
- Filtering - ตัด Data ที่มีปัญหาทิ้งไปเลย - จัดการเรื่องของ Encoding ให้เรียบร้อย
ทำแล้วได้อะไร -Comply with
- OWASP Top 10 2013: A1(Injection) / A3 (Cross-Site Scripting (XSS))
- OWASP Mobile Top 10 2016: M7 (Client Slide Injection)
3. Parameterized Queries
- SQL ควรเป็น SQL ที่ได้จากระบบ ไม่มีข้อมูล หรือคำสั่งแปลก เข้ามาเสริม หรือเพิ่มเติมได้
- อย่าสร้างเอา SQL Command แบบต่อ String เพราะ ตัว Query สามารถถูกแก้ได้
- ทางแก้ การทำ Parameterize ซึ่งในทุกภาษารองรับอยู่แล้ว ซึ่งการทำแบบนี้เป็นการ Lock ให้เอาข้อมูลมาหยอดลองตาม Pattern ไม่สามารถแทรกคำสั่งได้ หรือถ้าแทรกไปได้ มันผิด Syntax ไม่สามารถที่จะ Execute ได้
- ใน ORM ส่วนใหญ่มีการทำให้เรียบร้อยแล้ว แต่อาจจะมีกรณีที่ Query มัน Advance มากๆ แล้ว ORM Framework ยอมให้ Query ตรงๆ อย่าง Hibernate ยังมี HQL เคสนี้ DEV ต้องจัดการกับ Query ดีๆครับ
ทำแล้วได้อะไร -Comply with
- OWASP Top 10 2013: A1(Injection)
- OWASP Mobile Top 10 2014: M1 (Weak Server Side Controls)
4. Identity and Authentication Control
Three Term
- Authentication การยืนยันตัวตน เป็นผู้ที่มีสิทธิเข้าระบบ มาทำงานบางอย่างได้
- Session Management - เจ้า Session มัน คือ จัวเป็น State ของฝั่ง Server พยายามให้ Session ใช้ได้ในช่วงเวลาหนึ่งพอ เช่น Login ได้ปุบ ทำลาย Session ทิ้ง แล้วสร้างอันใหม่สำหรับงานถัดไป
- Identity Management - ผมมองว่าเป็นงานด้านพวก Policy หรือ Process นะ ที่ทำยังไงให้มันมั่นคง เช่น
- เปลี่ยน Password ต้องมีขั้นตอนอย่างไร
- งานที่มันสำคัญมากต้องมีการ Re-Authentication ไหม ? อย่างโอนเงิน มันมี OTP ครอบดักอีกที
Implementation Technique
- Multi-Factor Authentication
- Token Based - ใช้กับพวก Micro Service กันเยอะ
- Secure Password Storage - วิธีการที่ดีที่สุดในตอนนี้ พวก Hash เข้าแล้วถอดไม่ได้ และไม่จำเป็นอย่างเขียน Algorithm ด้านนี้เอง ถ้าทำเองแล้วคงต้องมีพวก Paper รายงานการทดสอบอีกเยอะ
- Process
ทำแล้วได้อะไร -Comply with
- OWASP Top 10 2013: A2(Broken Authentication and Session Management)
- OWASP Mobile Top 10 2016: M4 (Insecure Authentication)
5. Access Controls
- ในส่วนนี้ คือ การบอกว่า ผ่านจาก Authentication มาแล้ว เราให้สิทธิอะไร ทำอะไรได้บ้าง ? โดยต้องทำจากฝั่ง Server นะ
- มันคล้ายกับ Security Concept ในส่วนของ Design ครับ อาทิ เช่น
- Deny by Default - มองว่าทุกที่เข้ามาไม่มีสิทธิ
- และ ให้สิทธิที่จำเป็น (Least Privilege)
- ทุกอย่างขั้นตอน(Request) ต้องผ่านกระบวนการตรวจสอบ ไม่มีการทำ By Pass
- ไม่มี God Mode - Hard Code Access Control เช่น ถ้า user id -3 ทำอะไรกับระบบได้ทั้งหมดเลย - บาง Framework มีทำให้แล้วนะ อย่างตัว Spring เองมี Spring Security
ทำแล้วได้อะไร -Comply with
- OWASP Top 10 2013: A4(Insecure Direct Object References) / A7(Missing Function Level Access Control)
- OWASP Mobile Top 10 2016: M6 (Insecure Authorization)
6. More Coding Security Practices
- Cryptography
- Logging and Intrusion Detection
- Leverage Security Frameworks and Libraries
- Error and Exception Handling
- Data Validation
- Tokenization
เนื่องจากเวลาจำกัด แล้วเนื้อหาช่วงหลังไปเร็วมากครับ หากผมเขียนอะไรแล้วงง สามารถไปดู Slide ของ Speaker ประกอบได้ครับ
Slide: Coding Security
Note 2017-06-19 ขอเพิ่ม Comment จากพี่นฤดม เผื่อใครมา Search Google นะครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.