7 วิธีป้องกันการเจาะระบบ สำหรับนักพัฒนาโปรแกรม

Datafarm
4 min readMar 13, 2024

--

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

https://www.ncsc.gov.uk/blog-post/cyber-security-governance-the-role-of-the-board

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

1. การทำ Input Validation

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

https://forums.appgyver.com/t/input-validation-for-forms/1253

1.1 ตรวจสอบรูปแบบ (Format Checking)

ตรวจสอบข้อมูลถูกต้องว่าเป็นไปตามเงื่อนไขที่กำหนดหรือไม่ เช่น ตรวจสอบว่าอีเมลมีรูปแบบที่

1.2 ตรวจสอบความครบถ้วน (Completeness Checking)

ตรวจสอบความครบถ้วนว่าเป็นไปตามที่ต้องการหรือไม่ เช่น ตรวจสอบว่าผู้ใช้ได้กรอกข้อมูลทุกช่องหรือไม่ หรือตรวจสอบว่าข้อมูลที่จำเป็นต้องใช้มีการส่งมาพร้อมกันหรือไม่

1.3 ตรวจสอบขอบเขต (Range Checking)

ตรวจสอบว่าค่าที่รับมาอยู่ในช่วงที่กำหนดหรือไม่ เช่น ตรวจสอบค่าอายุว่าอยู่ในช่วง 1–100 หรือไม่

1.4 การตรวจสอบปลอดภัย (Security Checking)

ตรวจสอบการรับข้อมูลที่มีสตริงที่อาจเป็นโค้ดที่อาจก่อให้เกิดปัญหาความปลอดภัย เช่น ตรวจสอบว่าไม่มีสตริงที่มีการแทรก HTML หรือ JavaScript ในข้อมูลที่รับมา

1.5 การตรวจสอบระดับอนุญาต (Permission Checking)

ตรวจสอบว่าผู้ใช้มีสิทธิ์ในการเข้าถึงหรือใช้งานข้อมูลหรือไม่ เช่น ตรวจสอบว่าผู้ใช้ที่ล็อกอินมีสิทธิ์ในการเข้าถึงข้อมูลที่ร้องขอหรือไม่

1.6 การใช้พารามิเตอร์ไบนารี (Prepared Statements)

ในกรณีที่มีการสร้างคำสั่ง SQL เพื่อสื่อสารกับฐานข้อมูล การใช้พารามิเตอร์ไบนารีเพื่อสร้างคำสั่ง SQL จะช่วยป้องกันการโจมตี SQL Injection โดยป้องกันการแทรกรหัส SQL ลงในข้อมูลที่ผู้ใช้ป้อนเข้ามา

2. การป้องกัน Injection Attacks

https://www.sitepoint.com/how-to-protect-your-website-against-sql-injection-attacks/#google_vignette

ใช้พื้นฐานของการเขียนโปรแกรมและเครื่องมือที่เหมาะสมเพื่อป้องกันการโจมตีแบบ Injection เช่น SQL Injection หรือ XSS (Cross-Site Scripting) การป้องกัน Injection Attacks เป็นเรื่องสำคัญที่ต้องใส่ใจเมื่อพัฒนาโปรแกรมหรือเว็บไซต์ เนื่องจากการโจมตีแบบ Injection เป็นวิธีการโจมตีที่พบได้บ่อยและเป็นที่นิยมของผู้ไม่ประสงค์ดี โดยมักจะเป็นเป้าหมายของผู้ไม่ประสงค์ดีที่ต้องการทำลายหรือรั่วไหลข้อมูลในการป้องกัน Injection Attacks สามารถทำได้โดยใช้วิธีการต่อไปนี้

2.1 ใช้ Prepared Statements หรือ Parameterized Queries ในกรณีของ SQL Injection

เพื่อสร้างคำสั่ง SQL ที่ไม่อาจโจมตีได้ โดยป้องกันการแทรกข้อมูลลงในคำสั่ง SQL โดยตรง

สามารถป้องกันได้โดยการ Query แบบกำหนดพารามิเตอร์ (หรือเรียกอีกอย่างว่าprepared statements) แทนการต่อ string ภายใน query

String query = “SELECT * FROM products WHERE category = ‘“+ input + “‘“;
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);

Code นี้สามารถเขียนใหม่ได้ในลักษณะที่ป้องกันไม่ให้ user input ข้อมูลรบกวน query structure

PreparedStatement statement = connection.prepareStatement(“SELECT * FROM products WHERE category = ?”);
statement.setString(1, input);
ResultSet resultSet = statement.executeQuery();

2.2 การตรวจสอบและคัดกรองข้อมูลที่ได้รับมาจากผู้ใช้งานให้ดี

เนื่องจากกรณี xss หรือ cross site scripting คือการส่งสคริปต์ข้ามเว็บไซต์ เพื่อโจมตีเหยื่อที่เปิดเข้าไป หรือโจมตีหน้าเว็บเพจโดยอาศัยช่องโหว่ของเว็บจำพวกเว็บบอร์ด เป็นต้น เพื่ออัป Script ซึ่งเขียนด้วย java Scrip การป้องกันปัญหาความปลอดภัย XSS อาศัยการกรองอินพุตจากผู้ใช้เป็นหลัก โดยอินพุตต่าง ๆ ไม่ควรถูกนำมาใช้งานในทันที แต่ต้องมีการกรองก่อนทุกครั้ง และต้องมั่นใจได้ว่าผู้ใช้ไม่สามารถวางสคริปต์ใด ๆ ลงในเว็บได้ ซึ่งการกรองเหล่านนี้ไม่ใช่เพียงแท็ก script เท่านั้น แต่รวมไปถึง attribute หลายตัว เช่น onload, onclick รวมเป็น Event Handler และ CSS ในบางกรณีอีกด้วย

2.3 การใช้เทคโนโลยีอื่น ๆ

ใช้เทคโนโลยีเพื่อป้องกันการโจมตีที่เป็นทั่วไป เช่น การใช้ Web Application Firewall (WAF), Intrusion Detection Systems (IDS), และ Intrusion Prevention Systems (IPS)

3. การใช้ Authentication และ Authorization

https://www.okta.com/identity-101/authentication-vs-authorization/

3.1 Authentication (การพิสูจน์ตัวตน)

เป็นการยืนยันตัวตนของผู้ใช้ว่าเป็นผู้ที่มีสิทธิ์ในการเข้าถึงระบบหรือไม่ มักจะเป็นการใช้ชื่อผู้ใช้ (username) และรหัสผ่าน (password) เพื่อรับรองตัวตน โดยเว็บไซต์จะต้องมีกลไกการทำ Authentication ที่มีความปลอดภัยเพื่อป้องกันการถูกโจมตีแบบ Brute-force attack หรือ Dictionary attack ที่ผู้ไม่ประสงค์ดีอาจใช้งานเพื่อลอกข้อมูลการเข้าสู่ระบบของผู้ใช้

3.2 Authorization (การให้สิทธิ์)

การกำหนดสิทธิ์การเข้าถึงและการใช้งานข้อมูลหรือฟังก์ชันต่าง ๆ ซึ่งอาจจะแยกออกเป็นกลุ่มสิทธิ์ต่าง ๆ เช่น ผู้ดูแลระบบ (Administrator), ผู้ใช้ทั่วไป (User), แขก (Guest) ฯลฯ เพื่อให้ผู้ใช้ได้รับสิทธิ์ที่เหมาะสมในการเข้าถึงและใช้งานข้อมูล

การใช้งานสิทธิ์ที่ไม่เหมาะสมอาจทำให้เกิดความเสี่ยงต่อความปลอดภัยในการป้องกัน และการแฝงตัวในเว็บไซต์ด้วย Authentication และ Authorization มักจะใช้เทคนิคและมาตรการต่าง ๆ เช่น

  1. การใช้วิธีการทำ Authentication ที่ปลอดภัย: การใช้เทคโนโลยีที่มีความปลอดภัย เช่นการใช้ HTTPS, การใช้งานวิธีการเข้ารหัสรหัสผ่านที่แข็งแกร่ง, การใช้ Multi-factor authentication (MFA) เป็นต้น เพื่อการป้องกันการโจมตี และการแฝงตัวเข้าไปในระบบโดยไม่ได้รับอนุญาต
  2. การใช้งาน Access Control: การกำหนดสิทธิ์การเข้าถึงข้อมูลและฟังก์ชันต่าง ๆ อย่างเหมาะสม เพื่อป้องกันการเข้าถึงข้อมูลที่ไม่เหมาะสม และป้องกันการเข้าถึงระบบโดยไม่ได้รับอนุญาต
  3. การใช้งาน Captcha หรือการทำ Verification: เพื่อระงับการทำ Brute-force attack โดยการกำหนดการทำ Captcha หรือการให้ผู้ใช้ทำ Verification เมื่อมีการพยายามเข้าสู่ระบบหลายครั้ง
  4. การจำกัดการเข้าถึง: การจำกัดจำนวนครั้งที่ผู้ใช้สามารถพยายามเข้าสู่ระบบในหนึ่งช่วงเวลา เพื่อป้องกันการโจมตีแบบ Brute-forceภัยของระบบ

4. การป้องกันที่มาจากเครือข่าย

การป้องกันการโจมตีที่มาจากเครือข่ายโดยใช้เทคโนโลยีที่เหมาะสม มีวิธีการ ดังนี้

https://us.norton.com/blog/privacy/firewall

4.1 การใช้ HTTPS (Hypertext Transfer Protocol Secure)

เป็นการป้องกันที่มาจากเครือข่ายที่สำคัญเพื่อให้การเชื่อมต่อเป็นการเชื่อมต่อที่ปลอดภัยขึ้น โดยมีคุณสมบัติหลัก ๆ ดังนี้

  • การเข้ารหัสข้อมูล: HTTPS ใช้โปรโตคอล SSL/TLS เพื่อเข้ารหัสข้อมูลที่ส่งผ่านเครือข่าย ซึ่งทำให้ข้อมูลที่ส่งไปยังเว็บเซิร์ฟเวอร์และกลับมาที่เบราว์เซอร์ เป็นการเชื่อมต่อที่ปลอดภัยและไม่สามารถอ่านได้โดยง่ายโดยบุคคลที่ไม่ใช่เจ้าของข้อมูล
  • การยืนยันตัวตนของเว็บไซต์: HTTPS ช่วยให้ผู้ใช้มีความมั่นใจในการเชื่อมต่อกับเว็บไซต์ที่ถูกต้อง โดยเมื่อเปิดเว็บไซต์ที่ใช้ HTTPS เบราว์เซอร์จะแสดงสัญลักษณ์การรับรองด้วยเล็กน้อยที่ชี้ว่าการเชื่อมต่อเป็นที่ปลอดภัย
  • ป้องกันการโจมตีกลางและการแทรกแซง: การใช้ HTTPS ช่วยป้องกันการโจมตีแบบกลางต่อกลาง (Man-in-the-Middle) โดยการเข้ารหัสข้อมูลที่ส่งผ่านเครือข่าย ซึ่งลดความเสี่ยงในการถูก- แทรกแซงข้อมูล
  • การป้องกันการโจมตีตามสถานที่ (Location-based Attacks): การใช้ HTTPS ช่วยลดความเสี่ยงที่ข้อมูลที่ส่งผ่านเครือข่ายจะถูกดักและโจมตีจากผู้ไม่ประสงค์ดีที่อยู่ในเครือข่ายเดียวกัน
  • การเพิ่มความน่าเชื่อถือให้กับเว็บไซต์: เว็บไซต์ที่ใช้ HTTPS มักจะถือเป็นเว็บไซต์ที่มีความเชื่อถือสูงกว่า เนื่องจากมีการรับรองความปลอดภัยของข้อมูลที่ส่งผ่าน

4.2 Firewalls (ระบบป้องกันการบุกรุก)

Firewalls จะตรวจสอบและควบคุมการเข้าถึงของข้อมูลที่เข้าหรือออกจากเครือข่าย โดยบล็อกการเข้าถึงที่ไม่ได้รับอนุญาตหรือที่มีลักษณะที่เสี่ยงต่อความปลอดภัย เช่น การบล็อกการเข้าถึงจาก IP Address ที่ไม่น่าเชื่อถือ หรือการบล็อกการเข้าถึงที่มีลักษณะของการโจมตี

4.3 Virtual Private Network (VPN)

การใช้ Virtual Private Network (VPN) เพื่อเชื่อมต่อระบบเครือข่ายออกไปยังอินเทอร์เน็ต โดยที่ข้อมูลที่ส่งระหว่างเครือข่ายจะถูกเข้ารหัส ทำให้ผู้ไม่ประสงค์ดีไม่สามารถอ่านข้อมูลที่ถูกส่งไปมาได้

5. การประมวลผลข้อมูลและเก็บข้อมูล

การเก็บข้อมูลที่เข้ารหัสอย่างเหมาะสมเพื่อป้องกันการรั่วไหลข้อมูล และใช้เทคโนโลยีที่เหมาะสมเพื่อประมวลผลข้อมูลที่ปลอดภัย ได้แก่

5.1 การใช้ Hashing

ทำให้ไม่สามารถอ่านหรือเดารหัสผ่านได้จากค่า Hash นั้น ๆ อย่างง่ายๆ ด้วยตัวเอง

5.2 การใช้ Encryption (การเข้ารหัส)

เป็นเทคนิคที่สำคัญในการรักษาความปลอดภัยของข้อมูล โดยเฉพาะข้อมูลที่เป็นข้อมูลที่อาจถูกเข้าถึงโดยไม่พึงประสงค์หรือมีความลับ

5.3 การสำรองข้อมูล (Backup)

การสำรองข้อมูลเป็นกระบวนการที่สำคัญที่จะรักษาข้อมูลที่ปลอดภัย

5.4 การใช้บริการคลาวด์ที่มีมาตรฐานเริ่มต้นที่สูง

บริการคลาวด์ที่มีมาตรฐานเริ่มต้นที่สูงมักมีระบบความปลอดภัยที่ดีที่สุดในท้องตลาด ซึ่งรวมถึงการเข้ารหัสข้อมูล การตรวจจับการบุกรุก และการควบคุมการเข้าถึงข้อมูล

https://www.prosoftibiz.com/Article/Detail/101065

6. การอัปเดตและการดูแลรักษาความปลอดภัย

การดูแลรักษาความปลอดภัยควรเป็นกระบวนการที่ต่อเนื่องและสม่ำเสมอ เนื่องจากภัยคุกคามทางไซเบอร์มีความเปลี่ยนแปลงอยู่ตลอดเวลา การป้องกันและการตอบสนองต่อภัยคุกคามเหล่านี้เป็นการลงทุนที่สำคัญที่มีผลต่อความมั่นคงและความเชื่อถือขององค์กร นี่คือบางแนวทางในการป้องกันการเจาะระบบและการดูแลรักษาความปลอดภัย

  • การอัปเดตและการปรับปรุงระบบ เพื่อปิดช่องโหว่ที่เจาะจง (vulnerabilities)
  • การใช้งานระบบป้องกันการเจาะระบบ (Intrusion Prevention Systems)
  • การใช้งานซอฟต์แวร์แอนตี้ไวรัส (Antivirus Software):
  • การใช้งานระบบการตรวจจับการบุกรุก (Intrusion Detection Systems)
  • การสร้างและการใช้งานกฎเพื่อควบคุมการเข้าถึง (Access Control Policies)
  • การตรวจสอบรายการเข้าถึง (Audit Logs)

7. การฝึกอบรมและการตรวจสอบรหัส

การฝึกอบรมทีมพัฒนาให้เข้าใจเกี่ยวกับหลักการความปลอดภัยของโปรแกรมโดยมีแนวทาง ดังนี้

  • การฝึกอบรมเจ้าหน้าที่และพนักงานเกี่ยวกับเทคนิคและแนวทางในการป้องกันการเจาะระบบ เช่น การรู้เทคนิคการสังเกตการณ์และการระบุการโจมตี การใช้เครื่องมือป้องกันและตรวจสอบ
  • การฝึกอบรมเกี่ยวกับความลับและความปลอดภัยของข้อมูล
  • การสร้างนโยบายและมาตรการในการจัดการรหัสผ่านที่แข็งแรง รวมถึงการใช้งานรหัสผ่านที่ซับซ้อนและการเปลี่ยนรหัสผ่านเป็นประจำ
  • การตรวจสอบโค้ดและการทดสอบเจาะระบบ (Code Review and Penetration Testing): การตรวจสอบโค้ดเพื่อค้นหาช่องโหว่และระบบที่เปิดเผยข้อมูล รวมถึงการทดสอบเจาะระบบเพื่อค้นหาจุดบกพร่องและช่องโหว่ที่อาจเกิดขึ้น
  • การทำการประเมินความเสี่ยงเพื่อระบุและจัดการกับความเสี่ยงที่อาจเกิดขึ้นต่อการเจาะระบบ
  • การพัฒนานโยบายและแนวทางที่เกี่ยวข้องกับความปลอดภัยของข้อมูลและระบบ เพื่อให้มีการทำงานอย่างมีประสิทธิภาพและปลอดภัย

สรุป

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

--

--