Coding Gun

OWASP Mobile Top 10 2023

ตอนนี้ OWASP Mobile Top 10 2023 ได้คลอดออกมาเรียบร้อยแล้วแต่ยังอยู่ในช่วงเริ่มต้น(Initial Release) หลังจากไม่ได้ update มาตั้งแต่ปี 2016 ซึ่งในแต่ละข้อจะเป็นความเสี่ยงอะไรบ้างมาลองดูกันทีละข้อ

M1: Improper Credential Usage

เป็นปัญหาที่เกิดขึ้นจากการเก็บ credentials(ทั้ง Token, API key และ username/password) ไม่เหมาะสม เช่น

วิธีการป้องกัน

  1. Encrypt credentials ทุกครั้งเมื่อมีการรับ-ส่งผ่าน network
  2. อย่าเก็บ credentials ไว้ใน mobile ควรจะส่งคำสั่งไปยัง server ให้ server เป็นคนเก็บ credentials
  3. ใช้วิธีการ Authentication ที่แข็งแรง
  4. ทำการเปลี่ยน API key หรือ tokens บ่อยๆ

M2: Inadequate Supply Chain Security

ปัญหานี้เกิดจากการใช้ Thid-party components ที่ไม่มีความปลอดภัย ซึ่งจะส่งผลให้ attacker สามารถฝัง code ต่างๆจำพวก malware หรือ malicious code เข้ามาดึงเอา sensitive data ออกไปจากเครื่องได้ ซึ่งผลกระทบที่เกิดจากการใช้ components ที่ไม่ปลอดภัยจะมี

วิธีการป้องกัน

  1. ต้องมีการ review source code ในทุกๆ components เพื่อให้รู้ว่ามีช่องโหว่อยู่ใน components ไหนบ้าง
  2. ต้องมีการทำ code signing(เหมือนตอนเราจะนำ application ขึ้น play store หรือ apple store)
  3. เลือกใช้ components จาก third-party ที่มีความน่าเชื่อถือ
  4. ทำการ update หรือ patch application ให้เป็น version ใหม่ล่าสุด
  5. Monitor หรือ Scan หาช่องโหว่ของ Third-party

M3: Insecure Authentication/Authorization

ปัญหานี้เป็นการโจมตีที่อาจเกิดจากการ bypass authentication(เข้าไปใช้งานระบบโดยที่ไม่มีการ authen) หรืออาจเป็นการเข้าไปใช้งาน API ที่อยู่หลังบ้านโดยตรง ซึ่งผลกระทบจากการ bypass authentication คือ

วิธีการป้องกัน

  1. ควรใช้หลาย factor ในการ authentication(Multi-factors authentication)
  2. ทำการ Authen ที่ฝั่ง server(backend) เท่านั้น
  3. ทำ Access control ที่ฝั่ง server(backend) เท่านั้น
  4. re-authenticate(เช่นใส่ password เพื่อ confirm) เมื่อต้องการทำ operation ที่สำคัญๆ
  5. ใช้ FaceID หรือ TouchID เพื่อปกป้องข้อมูลที่ใช้ในการทำ authentication เช่น API Key หรือ Tokens

M4: Insufficient Input/Output Validation

ปํญหานี้เกิดจากการส่ง input เช้ามาเพื่อโจมตีระบบ เช่น SQL Injection หรือ Cross-Site Scripting ซึ่งการแก้ปํญหาเหล่านี้คือการทำ Input Validation ดังนั้นในข้อนี้เลยหมายถึงการทำ Input Validation ที่อาจยังไม่ดีเพียงพอ ซึ่งผลกระทบที่เกิดขึ้นกับระบบ มีดังนี้

วิธีการป้องกัน

  1. ทำ Input validation ที่ฝั่ง server(backend)
  2. ทำ Input Validation ด้วย Whitelisting(ระบุให้ใส่เฉพาะอักขระที่เราอนุญาติเท่านั้น)
  3. ทำ Input Validation ให้เหมาะกับบริบทนั้นๆ เช่น หน้า file uploads ต้องป้องกันการทำ path traversal
  4. ทำการตรวจสอบความถูกต้อง(Integrity)ของ data ก่อนนำมาใช้งาน(ต้องไม่ถูกแก้ไขมาก่อน เราจะใช้ค่า Hash ในการตรวจสอบความถูกต้อง)
  5. ทำตาม Secure Coding Pratices เช่นการใช้ parameterize query หรือ การใช้ Object Relational Mapping(ORM)

M5: Insecure Communication

ในปัจจุบันคงไม่มี Application ที่สามารถทำงานได้โดยไม่มีการสื่อสาร ดังนั้นเมื่อมีการแลกเปลี่ยนข้อมูลกับ server ของเราเองหรือใช้บริการ third-party เราต้องเข้ารหัสข้อมูลหรือใช้ secure protocols เช่น https หรือ sftp เสมอ ผลกระทบของการสื่อสารที่ไม่ปลอดภัยจะมีอยู่ 2 อย่างด้วยกันคือ

วิธีการป้องกัน

  1. ใช้ TLS หรือ Https ในทุกๆการสื่อสาร
  2. ทำการ Encrypt ข้อมูลก่อนส่งไปใน network
  3. ใช้ Strong Algorithm(ต้องปรับใน configuration เรื่อยๆ)
  4. ใช้ Certificate ที่มาจาก Certificate Authority ที่น่าเชื่อถือ
  5. อย่างส่ง seneitive data ผ่านทาง SMS,MMS หรือ Notification
  6. อย่าใช้ self-sign certificate

M6: Inadequate Privacy Controls

ปัญหานี้ถูกเพิ่มเข้ามาในปี 2023 ให้เหมาะกับยุคของ Privacy data(ข้อมูลส่วนบุคคล) ถือเป็นเรื่องที่ต้องใส่ใจเป็นอย่างมากเพราะถ้าข้อมูลส่วนบุคคลหลุดออกไปเรามีสิทธิโดนฟ้องได้

ปัญหาของ Privacy Control คือ การป้องกันข้อมูลที่เรียกว่า Personally Identifiable Information (PII) ซึ่งจะประกอบไปด้วย ชื่อ, ที่อยู่, email เบอร์โทรศัพท์และอื่นๆ ซึ่ง information ต่างๆเหล่านี้สามารถนำไปใช้

วิธีการป้องกัน

  1. พยายามไม่เก็บ sensitive data(ถ้าไม่ใช้ก็ไม่ต้องเก็บ)
  2. เก็บข้อมูลให้กว้างขึ้น เช่น แทนที่จะเก็บอายุ ก็เก็บเป็นช่วงอายุแทน
  3. ทำการ deanonymized หรือ blured ซึ่งมีหลายเทคนิคมากๆ เช่นการใช้ hash หรือ noise
  4. เก็บเป็นช่วงเวลาไม่ต้องเก็บตลอดไป(กำหนด data retaintion policy)
  5. ให้ user เป็นคนเลือกว่าจะให้เก็บข้อมูลหรือไม่(consent) ในจุดที่อาจไม่ได้จำเป็นต้องเก็บ

M7: Insufficient Binary Protections

Binary สามารถ reverse engineering(ย้อนกลับไปเป็น source code) ออกมาดูได้ ดังนั้น attacker จะเข้าไปหา secret ต่างๆเช่น API Key, tokens หรือ password ที่จะเข้าสูระบบอื่นๆต่อ

วิธีการป้องกัน

  1. ป้องกันการทำ Reverse Engineering ด้วยการทำ Obfuscation(ไม่ได้ป้องกัน 100%)
  2. การทำ Security controls หรือ Access controls ต้องทำที่ฝั่ง server(backend) เท่านั้น
  3. เช็คความถูกต้องของ application ตอน load binary ขึ้นมาให้ตรวจสอบค่า hash ว่ามีการเปลี่ยนแปลงหรือไม่

M8: Security Misconfiguration

ปัญหานี้ค่อนข้างกว้างเนื่องจาการโจมตีช่องโหว่ที่เกิดจาการ set security settings หรือ permissions ที่ไม่ถูกต้อง ทำให้เกิดการโจมตี โดย malicious app(application ที่ถูกหลอกให้ download หรืออาจเป็น malware ที่ติดมาจาก application อื่นๆ) ซึ่งผลกระทบจาก security misconfiguration คือ

วิธีการป้องกัน

  1. เช็ค default configurations ว่ามีความปลอดภัยหรือไม่
  2. ไม่ใช้ default credentials(username หรือ password ที่มีให้ตอนติดตั้ง เราไม่ได้ตั้ง password เอง)
  3. กำหนดสิทธิให้น้อยที่สุด เอาแต่พอใช้งานได้ไม่ต้องกำหนดเผื่อ
  4. Secured network configuration จัดการ Network access control และ disable protocols ที่เป็น plain-text
  5. Disable debugging
  6. Disable backup mode(Android)
  7. Export activities, content providers และ services ที่จะใช้งานเท่านั้น

M9: Insecure Data Storage

ปัญหานี้เป็นการโจมตีที่ storage ซึ่งจะมีทั้ง

  1. keys-values storage เช่น plist(บน iOS) และ preferences(บน android)
  2. file (เราสร้าง file ขึ้นมาเก็บข้อมูลเอง)
  3. database เช่น SQLite หรือ Realm

ซึ่งผลกระทบที่เกิดก็จะมีทั้ง

วิธีการป้องกัน

  1. ใช้ Storage ที่มีการ Encryption เช่น SQL Cipher
  2. จัดเก็บ key ใน keychain(iOS) หรือ keystore(android)
  3. กำหนดสิทธิการเข้าถึงข้อมูลให้เหมาะสม

M10: Insufficient Cryptography

ปัญหาข้อนี้เป็นเรื่องที่ค่อนข้างซับซ้อนที่สุดเพราะ Cryptography จะแบ่งออกเป็น

วิธีการป้องกัน

  1. ใช้ Algorithm ที่มีความแข็งแรงและได้มาตรฐาน อย่าคิดเอง
  2. ใช้ key หรือ secret ที่มีความยาว(length)มากๆ
  3. จัดเก็บ key หรือ secret ใน storage ที่มีความปลอดภัย เช่น vault หรือ Hardware Security Module(HSM)
  4. ใช้ secure protocols ในการรับส่ง key
  5. ต้องทำการ Authen ก่อนเข้าถึง key
  6. ต้องมีการจัดเก็บ log ว่าใครนำ key ไปใช้บ้าง
  7. ถ้าเป็นการ hash ต้องมี salt

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

อ่านต่อเพิ่มเติม

Phanupong Permpimol
Follow me