(พื้นฐาน) ความปลอดภัย Application

Throwgether
TakoDigital
Published in
2 min readMar 5, 2024

ช่วงนี้ผู้เขียนกำลังปั้นน้องๆรุ่นใหม่ที่สนใจการเขียนแอพ
ข่าวแก๊งมิจฉาชีพแฮคมือถือก็เยอะ ความจริงเป็นยังไง ทำได้ขนาดไหน
เจาะลึกกลโกงของแอปดูดเงิน ในยุค 2567 (คุย 2 นาทีดูดเงินได้จริงหรือ)
ขอแนบบทความดีๆอันนี้ให้ไปทำความเข้าใจกัน

ในเมื่อมีนักเรียนสงสัย เราต้องพัฒนาแอพยังไงให้มันปลอดภัย

แนะนำแนวทางปฏิบัติที่ดีที่สุดสำหรับการพัฒนา Android/iOS แอพลพิเคชั่น

1. การเข้ารหัส (Encryption):

  • เข้ารหัสข้อมูลสำคัญ เช่น รหัสผ่าน ข้อมูลส่วนตัว และข้อมูลทางการเงิน
  • ใช้เทคนิคการเข้ารหัสที่เหมาะสมกับประเภทของข้อมูล Symmetric/Asymmetric
  • เก็บกุญแจ(Key)การเข้ารหัสอย่างปลอดภัย

2. การตรวจสอบสิทธิ์ผู้ใช้ (Authentication):

  • ใช้กลไกการตรวจสอบสิทธิ์ที่แข็งแกร่ง เช่น การใช้รหัสผ่าน OTP หรือ biometrics
  • จัดการข้อมูลประจำตัวผู้ใช้ (credentials) อย่างปลอดภัย
  • จำกัดการเข้าถึงข้อมูลและฟังก์ชันการทำงานของแอปพลิเคชันตามสิทธิ์ของผู้ใช้

3. การ Sanitize Input:

  • ตรวจสอบและล้างข้อมูล input จากผู้ใช้ก่อนนำไปใช้งาน
  • ป้องกันการโจมตีแบบ injection
  • ใช้ไลบรารีที่มีฟังก์ชัน Sanitize Input สำเร็จรูป

4. การอัปเดตซอฟต์แวร์ให้ทันสมัย (Keep Software Up to Date):

  • อัปเดตแอปพลิเคชันและไลบรารีที่ใช้ให้ทันสมัยอยู่เสมอ
  • ติดตั้งแพตช์ความปลอดภัยที่ออกโดย Google/Apple และผู้ผลิตอุปกรณ์
  • ยกเลิกการใช้งานแอปพลิเคชันที่ไม่ได้ใช้งาน

5. การทดสอบแอปพลิเคชัน (Test Your Application):

  • ทดสอบแอปพลิเคชันอย่างละเอียดก่อนเผยแพร่
  • ใช้เครื่องมือทดสอบ penetration testing เพื่อค้นหาช่องโหว่

ย่อๆ Pentest คือการจำลองสถานการณ์โจมตี

  • ดำเนินการทดสอบอย่างต่อเนื่องหลังจากเผยแพร่แอปพลิเคชัน

6. การสับขาหลอก (Obfuscation):

  • ย่อขนาดและทำให้โค้ดแอปพลิเคชันอ่านยากขึ้น
  • ป้องกันการ Reverse Engineering
  • ใช้เครื่องมือ obfuscation ที่เชื่อถือได้ (ProGuard, Cyclonis, Appdome)

7. การใช้ Tools ที่เชื่อถือได้

  • ใช้ App Protection เช่น Google Play App Security Scanning
  • ใช้ Secure Coding เช่น Apple Static Analyzer
  • ค้นหาและแก้ไขช่องโหว่ด้านความปลอดภัย

8. การศึกษาเกี่ยวกับภัยคุกคามทางไซเบอร์:

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

9. การออกแบบแอปพลิเคชันที่ปลอดภัย:

  • พิจารณาความปลอดภัยตั้งแต่เริ่มต้นการออกแบบ
  • ใช้สถาปัตยกรรมแอปพลิเคชันที่ปลอดภัย
  • เลือกไลบรารีและเฟรมเวิร์กที่ปลอดภัย

10. การปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด:

  • ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับการพัฒนา Android/iOS ที่ปลอดภัย
  • ศึกษาเอกสารประกอบของ Google Developer/Apple Developer

ร่ายยาวมาถึงตรงนี้ทุกคนก็พอจะนึกภาพออก ว่าแต่ละหัวข้อเราต้องดำเนินการอย่างไร

แต่! มันมีอยู่ข้อนึง ก็คือ Sanitize Input ที่ผู้เขียนไม่ค่อยพบเจอในการพัฒนา Mobile Application มันมีเหตุผลของมัน ไปดูกัน

ทำไมไม่เจอ Sanitize input ในการพัฒนา Application ทั่วไป

แม้ว่าการ Sanitize input จะเป็นแนวทางปฏิบัติด้านความปลอดภัยที่สำคัญในการพัฒนาเว็บเพื่อป้องกันการโจมตี เช่น SQL injection และ cross-site scripting (XSS) แต่ไม่จำเป็นเสมอไป นอกเหนือจากเรื่องที่ Sanitize input มักเพิ่มความยุ่งยากในการทำงาน เหตุผลคือ

1. Compiled language VS Interpreted language:

  • การพัฒนา Android/iOS ส่วนใหญ่ใช้ Compiled language : หมายความว่าโค้ดจะถูกแปลงเป็นรหัสเครื่อง (bytecode) ก่อนที่จะรันบนอุปกรณ์ ไบต์โค้ดที่คอมไพล์แล้วนี้ยากต่อการจัดการหรือแทรกโค้ดที่เป็นอันตราย
  • การพัฒนาเว็บมักใช้ Interpreted language : ซึ่งโค้ดจะถูกเรียกใช้โดยตรงบนเบราว์เซอร์ของผู้ใช้ สิ่งนี้ทำให้ง่ายสำหรับผู้โจมตีที่จะแทรกโค้ดที่เป็นอันตรายลงในอินพุตของผู้ใช้ซึ่งสามารถตีความและอาจเป็นอันตรายต่อระบบได้

2. มาตรการความปลอดภัยของ Framework : มีกลไกความปลอดภัยในตัว เช่น Sandboxing และระบบการอนุญาต(Permission) ช่วยลดความเสี่ยงจาก input ที่ไม่น่าเชื่อถือ

แต่การ Sanitize Input ก็จำเป็นถ้าต้องการป้องกันช่องโหว่

วิธีการ Sanitize Input ในการพัฒนา Application มีหลายวิธี เช่น:

1. การกรองอักขระ (Character Filtering) : ลบช่องว่างและลบอักขระที่ไม่ปลอดภัยออกจาก input ของผู้ใช้ เช่น สัญลักษณ์พิเศษ แท็ก HTML และ JavaScript

2. การแปลงตัวอักษร (Character Encoding) : แปลงตัวอักษรบางตัวให้เป็นรูปแบบที่ปลอดภัย เช่น ตัวอักษร “สวัสดี” ใน UTF-8 จะถูกเข้ารหัสเป็น 0xE0 0xBA 0x8D 0xE1 0x8A 0x9D

3. การตรวจสอบความยาว (Length Validation) : input ของผู้ใช้มีความยาวที่ถูกต้อง ไม่ยาวเกินไป

4. การตรวจสอบรูปแบบ (Format Validation) : input ของผู้ใช้ตรงกับรูปแบบที่กำหนด(RegEx) เช่น อีเมล เบอร์โทรศัพท์

5. การเข้ารหัส (Encryption) : เข้ารหัส input ของผู้ใช้ก่อนที่จะเก็บไว้

6. การ hashing (Hashing) : Hash input ของผู้ใช้ก่อนที่จะเปรียบเทียบกับรหัสผ่านที่เก็บไว้

ถึงจะเป็นเรื่องพื้นฐานแต่ก็เป็นเรื่องที่มีความสำคัญ บทความนี้อาจจะไม่ได้เจาะลึกลงไปในแต่ละหัวข้อ

อยากให้ผู้อ่านที่เป็นนักพัฒนาได้ลองนึกไปถึง Application หรือ Software ที่ได้ทำมาว่าครอบคลุมครบทุกองค์ประกอบหรือไม่ หรือมีเทคนิคดีๆ ที่จะช่วยให้แอพมีความปลอดภัยมากขึ้น ก็มาแชร์กันได้ครับ
ผิดพลาดประการใด แจ้งได้ครับ

--

--

Throwgether
TakoDigital

เมื่อเด็กเกาะเบาะต้องลงมือ Dev เอง