Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

แนะนำการพัฒนา Android app ให้ปลอดภัยมากขึ้น

$
0
0

จากเอกสารเรื่อง Best Practice for Security and Privacy ได้อธิบายแนวปฏิบัติต่าง ๆ สำหรับการพัฒนา Android app ให้ปลอดภัย ประกอบไปด้วยเรื่องที่น่าสนใจดังนี้
  • Networking
  • Intent
  • Data storage
  • เรื่องอื่น ๆ เช่น Emulator, Debug, Root, Obfuscation เป็นต้น
ดังนั้นจึงทำการสรุปไว้นิดหน่อย
ปล. มี Android developer คนไหนอ่านและศึกษากันบ้างนะ ?

1. เรื่องของ Network

คงปฏิเสธไม่ได้ว่า Android app ส่วนใหญ่ มีการดึงข้อมูลจาก server ต่าง ๆ ผ่าน internet ดังนั้นเรื่องความปลอดภัยของข้อมูลที่ส่งไปมานั้นมันจึงสำคัญมาก ๆ ลองคิดดูสิถ้ามีคนพยายามมาดักข้อมูลที่ส่งไปมา (Man In The Middle) ระหว่าง Android app กับ server โดยที่ข้อมูลส่งเป็น plain text กันชัดเจนมาก ๆ แถมข้อมูลเหล่านั้นเป็น sensitive data หรือเป็นข้อมูลส่วนตัวของแต่ละคน น่าจะส่งผลไม่ดีอย่างแน่นอน ดังนั้นลองมาตรวจดูสิว่า Android app ของเรานั้นปลอดภัยกันบ้างไหม ?
  • ใช้ HTTPS ไหม ? แต่ถึงใช้ก็ยังไม่ปลอดภัยนะ
  • ข้อมูลที่รับส่งไปมานั้น ทำการเข้ารหัสบ้างหรือไม่ ? encrypt นะ ไม่ใช้ encode !!
แก้ไขข้อมูลเรื่องของ DH  ขอขอบคุณข้อมูลจากบทความเรื่อง ผู้เชี่ยวชาญด้านความปลอดภัยแอพพลิเคชั่นในไทย ?
  • รวมทั้งใช้ SSL pinning เพื่อเสริมความแข็งแกร่งให้มากขึ้น
โดยที่มี library ที่สนับสนุนทั้ง HTTPS และ SSL Pinning เช่น OkHTTP และ Retrofit เป็นต้น
ลองดู app ที่เราพัฒนาสิว่า จำเป็นต้องมีระดับความปลอดภัยของข้อมูลที่รับส่งกันในระดับไหน ?

2. การใช้งาน Intent

ในการติดต่อระหว่าง Android app จะผ่านสิ่งที่เรียกว่า Intent ซึ่งประกอบไปด้วย Explicit intent และ Implicit intent โดยทั้งสองต่างมีข้อดีและข้อเสียดังนี้ Explicit intent ข้อดีคือ ไม่สามารถดักจับข้อมูลที่ส่งไปมาได้ ข้อเสียคือ สามารถใช้ได้เฉพาะใน app เดียวกันเท่านั้น Implicit intent ข้อดีคือ ใช้ที่ไหนก็ได้ ข้อเสียคือ ง่ายต่อการดักจับข้อมูล ดังนั้นถ้าเราใช้งาน Implicit intent โดยที่ไม่ได้เข้าใจ จะทำให้สามารถโดนดักจับข้อมูล หรือ ขโมยข้อมูลได้ง่าย ๆ แต่เราสามารถแก้ไขปัญหานี้ ด้วยการระบบชื่อ package ไปเลยดังนี้ [gist id="8e53a682e2f86601731ab2355a6b48fc" file="1.java"] และถ้ามี service ใด ๆ ไม่ต้องเปิดให้ใครใช้ก็ปิดซะ [gist id="8e53a682e2f86601731ab2355a6b48fc" file="2.xml"]
ดังนั้นถ้าให้ดีแนะนำให้ใช้ Explicit intent เป็นหลักของ app นะครับ

3. เรื่องของ Data Storage

ใน Android app นั้นส่วนใหญ่นักพัฒนา จะทำการเก็บข้อมูลต่าง ๆ ที่ต้องดึงจาก server นั้น มักจะทำการเก็บข้อมูลไว้ในมือถือด้วย เพื่อลดการดึงข้อมูลจากระบบ network ที่สำคัญทำให้ app ทำงานรวดเร็วขึ้นมาก ๆ จะเรียกว่า caching data ซึ่งสามารถทำได้หลายแบบ วิธีการที่ยากต่อการขโมยข้อมูล คือ การสร้างไฟล์ชั่วคราวใน Memory cache ซะ เนื่องจากถ้าต้องการจะขโมยข้อมูลใน Memory cache นั้น ต้องทำการ dump memory เท่านั้น ซึ่งต้อง ROOT access เท่านั้น ข้อมูลที่ต้องเก็บใน caching, database และ shared preference นั้นต้องเข้ารหัสก่อนเสมอ ตัวอย่างเช่นการใช้งาน Cipher เป็นต้น ส่วนข้อมูลที่ต้องเก็บลง SharedPreference ต้องเป็น MODE_PRIVATE เท่านั้น หรือสามารถใช้งาน SecureSharedPreference ก็ได้ อีกอย่างที่สำคัญคือ การเก็บ Key สำหรับ algorithm การเข้าและถอดรหัส เป็นสิ่งที่สำคัญมาก ๆ ถ้า key นี้ถูกขโมยไปได้ง่าย ๆ มันก็แย่เลยนะ แต่ถ้าเก็บไว้ใน app ก็เป็นการยากต่อการซ่อน ดังนั้นสิ่งที่ควรทำคือ สร้างความซับซ้อนในการหาหรือเข้าถึง key นี้ซะ ทั้งการใช้งาน KeyStore แต่มีใน API 18 ขึ้นไป ทั้งการใช้งาน JNI ซึ่งยากต่อการ decompile code ทั้งการซ่อนไว้ในไฟล์ที่ไม่น่าจะอยู่ เช่นซ่อนไว้ในไฟล์รูปภาพเป็นต้น !!
ปล. Algorithm ในการเข้ารหัสข้อมูลมีมากมาย แน่นอนว่าก็สามารถ hack ได้นั่นแหละ แต่ผมคิดว่า ก็ดีกว่าไม่ทำอะไรเลยนะ
วิธีการที่ดีที่สุดคือ อย่าเก็บอะไรไว้ที่มือถือนะครับ !! แต่หลาย ๆ กรณีมันเป็นไปไม่ได้นะ

ยังมีวิธีการอื่น ๆ อีกเช่น

  • ตรวจสอบว่า run อยู่บน Emulator หรือไม่ ?
  • ตรวจสอบว่า device ทำการ ROOT มาหรือไม่ ?
  • ตรวจสอบว่าทำการเปิด debugger ไว้หรือไม่ ? ด้วย code สั้น ๆ Debug.isDebuggerConnected()
  • ก่อนจะ release APK ออกไปใช้ Proguard, DexGuard และ DexProtector กันบ้างหรือยัง ?
  • แนะนำตัวอย่างการใช้งาน Proguard
วันนี้นักพัฒนา Android app สนใจเรื่อง security ของ app กันแล้วหรือยัง ? Reference Websites https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Top_10_Mobile_Risks https://www.qdtricks.net/android-penetration-testing-apps/ https://medium.com/uptech-team/how-to-make-your-android-application-secured-21c054b371e7#.ek01gzrnz

Viewing all articles
Browse latest Browse all 1997

Trending Articles