หมวดหมู่ OWASP: MASVS-PLATFORM: การโต้ตอบกับแพลตฟอร์ม
ภาพรวม
แอปพลิเคชันบนอุปกรณ์เคลื่อนที่จำนวนมากใช้ API ภายนอกเพื่อให้บริการฟีเจอร์ต่างๆ โดยปกติแล้ว จะใช้โทเค็นหรือคีย์แบบคงที่เพื่อตรวจสอบสิทธิ์ของแอปพลิเคชันที่เชื่อมต่อกับ บริการ
อย่างไรก็ตาม ในบริบทของการตั้งค่าไคลเอ็นต์-เซิร์ฟเวอร์ (หรือแอปบนอุปกรณ์เคลื่อนที่และ API) โดยทั่วไปแล้ว การใช้คีย์แบบคงที่จะไม่ถือว่าเป็นวิธีการตรวจสอบสิทธิ์ที่ปลอดภัย สำหรับการเข้าถึงข้อมูลหรือบริการที่ละเอียดอ่อน API ภายนอกแตกต่างจากโครงสร้างพื้นฐานภายในตรงที่ทุกคนสามารถเข้าถึงและละเมิดบริการได้หากมีสิทธิ์เข้าถึงคีย์นี้
ตัวอย่างเช่น คีย์แบบคงที่อาจถูกวิศวกรรมย้อนกลับ จากแอปพลิเคชันหรือถูกสกัดกั้นเมื่อแอปพลิเคชันบนอุปกรณ์เคลื่อนที่สื่อสารกับ API ภายนอก นอกจากนี้ ยังมีแนวโน้มสูงที่คีย์แบบคงที่จะมีการฮาร์ดโค้ด ภายในแอปพลิเคชัน
ความเสี่ยงต่อข้อมูลและบริการของ API จะเกิดขึ้นเมื่อไม่ได้ใช้การตรวจสอบสิทธิ์และการควบคุมการเข้าถึงที่ปลอดภัยเพียงพอ
เมื่อใช้คีย์แบบคงที่ ผู้ไม่ประสงค์ดีอาจใช้ประโยชน์จาก API ได้โดยการเล่นคำขอซ้ำหรือสร้างคำขอใหม่โดยใช้คีย์ (ที่ดักจับหรือย้อนกลับ) โดยไม่มีข้อจำกัดด้านเวลา
ผลกระทบ
หากนักพัฒนาแอปชำระค่าบริการ AI หรือ ML API ผู้โจมตีจะขโมยคีย์นี้และสร้างหนี้ในบริการของนักพัฒนาแอปหรือใช้คีย์นี้เพื่อสร้างเนื้อหาปลอมได้ค่อนข้างง่าย
ข้อมูลผู้ใช้ ไฟล์ หรือ PII ที่จัดเก็บไว้ใน API จะพร้อมใช้งานอย่างอิสระ ซึ่งอาจนำไปสู่การรั่วไหลที่สร้างความเสียหาย
ผู้โจมตียังอาจใช้สิทธิ์เข้าถึงนี้เพื่อทำการฉ้อโกง เปลี่ยนเส้นทางบริการ และในบางกรณีที่พบได้ยาก ผู้โจมตีอาจได้รับสิทธิ์ควบคุมเซิร์ฟเวอร์อย่างเต็มรูปแบบ
การลดปัญหา
Stateful API
หากแอปพลิเคชันมีการเข้าสู่ระบบของผู้ใช้หรือมีความสามารถในการติดตามเซสชันของผู้ใช้ เราขอแนะนำให้นักพัฒนาแอปใช้บริการ API เช่น Google Cloud เพื่อการผสานรวมแบบมีสถานะกับแอป
นอกจากนี้ ให้ใช้การตรวจสอบสิทธิ์ที่ปลอดภัย การตรวจสอบไคลเอ็นต์ และการควบคุมเซสชัน ที่ได้รับจากบริการ API และพิจารณาใช้โทเค็นแบบไดนามิกแทนคีย์แบบคงที่ ตรวจสอบว่าโทเค็นหมดอายุในระยะเวลาสั้นๆ ที่สมเหตุสมผล (โดยทั่วไปคือ 1 ชั่วโมง)
จากนั้นควรใช้โทเค็นแบบไดนามิกเพื่อการตรวจสอบสิทธิ์เพื่อให้สิทธิ์เข้าถึง API หลักเกณฑ์เหล่านี้แสดงวิธีใช้ OAuth 2.0 เพื่อให้บรรลุเป้าหมายนี้ นอกเหนือจากหลักเกณฑ์เหล่านั้นแล้ว คุณยังสามารถเสริมความแข็งแกร่งให้กับ OAuth 2.0 เพื่อลด ช่องโหว่ในแอป Android ได้ด้วยการใช้ฟีเจอร์ต่อไปนี้
ใช้การจัดการข้อผิดพลาดและการบันทึกที่เหมาะสม
- จัดการข้อผิดพลาดของ OAuth อย่างเหมาะสมและชัดเจน รวมถึงบันทึกข้อผิดพลาดเพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่อง
- การลดพื้นที่ผิวของการโจมตียังช่วยให้คุณระบุและแก้ปัญหาที่อาจเกิดขึ้นได้ด้วย
- ตรวจสอบว่าข้อความที่บันทึกหรือแสดงต่อผู้ใช้มีความชัดเจน แต่ไม่มีข้อมูลที่เป็นประโยชน์ต่อผู้ไม่ประสงค์ดี
กำหนดค่า OAuth ในแอปพลิเคชันอย่างปลอดภัย
- ส่งพารามิเตอร์
redirect_uri
ไปยังทั้งปลายทางการให้สิทธิ์และโทเค็น - หากแอปใช้ OAuth กับบริการของบุคคลที่สาม ให้กำหนดค่าการแชร์ทรัพยากรข้ามโดเมน (CORS) เพื่อจำกัดการเข้าถึงทรัพยากรของแอป
- ซึ่งจะช่วยป้องกันการโจมตีแบบ Cross-Site Scripting (XSS) ที่ไม่ได้รับอนุญาต
- ใช้พารามิเตอร์สถานะเพื่อป้องกันการโจมตี CSRF
ใช้ไลบรารีความปลอดภัย
- ลองใช้ไลบรารีความปลอดภัย เช่น AppAuth เพื่อลดความซับซ้อน
ในการติดตั้งใช้งานโฟลว์ OAuth ที่ปลอดภัย
- ไลบรารี Android เหล่านี้ช่วยทำให้แนวทางปฏิบัติแนะนำด้านความปลอดภัยหลายอย่างที่กล่าวถึงก่อนหน้านี้เป็นแบบอัตโนมัติได้
วิธีการตรวจสอบสิทธิ์อื่นๆ รวมถึงโทเค็น Firebase และโทเค็นรหัส Google จะอธิบายไว้ในเอกสารประกอบ OpenAPI
Stateless API
หากบริการ API ไม่มีการป้องกันตามที่แนะนำไว้ก่อนหน้านี้ และ มีข้อกำหนดสำหรับเซสชันแบบไม่เก็บสถานะโดยไม่ต้องเข้าสู่ระบบของผู้ใช้ นักพัฒนาซอฟต์แวร์ อาจต้องจัดหาโซลูชันมิดเดิลแวร์ของตนเอง
ซึ่งเกี่ยวข้องกับการ "พร็อกซี" คำขอระหว่างแอปกับปลายทาง API วิธีหนึ่งในการดำเนินการนี้คือการใช้ JSON Web Token (JWT) และ JSON Web Signature (JWS) หรือให้บริการที่ได้รับการตรวจสอบสิทธิ์อย่างเต็มรูปแบบตามที่แนะนำไว้ก่อนหน้านี้ ซึ่งเป็นวิธีจัดเก็บคีย์แบบคงที่ที่เสี่ยงต่อการถูกโจมตี ฝั่งเซิร์ฟเวอร์แทนที่จะจัดเก็บไว้ในแอปพลิเคชัน (ไคลเอ็นต์)
การให้บริการโซลูชันแบบไม่เก็บสถานะตั้งแต่ต้นจนจบใน แอปพลิเคชันบนอุปกรณ์เคลื่อนที่นั้นมีปัญหาโดยธรรมชาติ ความท้าทายที่สำคัญที่สุดบางประการคือการตรวจสอบไคลเอ็นต์ (แอป) และการจัดเก็บคีย์ส่วนตัวหรือข้อมูลลับในอุปกรณ์อย่างปลอดภัย
Play Integrity API จะตรวจสอบความสมบูรณ์ของ แอปพลิเคชันและคำขอ ซึ่งจะช่วยลดสถานการณ์บางอย่างที่อาจมีการละเมิดการเข้าถึงนี้ สําหรับการจัดการคีย์ ในหลายกรณี ที่เก็บคีย์เป็น ตําแหน่งที่ดีที่สุดสําหรับการจัดเก็บคีย์ส่วนตัวอย่างปลอดภัย
แอปพลิเคชันบนอุปกรณ์เคลื่อนที่บางแอปใช้ระยะการลงทะเบียนเพื่อตรวจสอบความสมบูรณ์ของ แอปพลิเคชันและระบุคีย์โดยใช้การแลกเปลี่ยนที่ปลอดภัย วิธีการเหล่านี้มีความซับซ้อน และอยู่นอกขอบเขตของเอกสารนี้ อย่างไรก็ตาม Cloud Key Management Service เป็นหนึ่งในโซลูชันที่เป็นไปได้