การใช้งาน API ที่ไม่ปลอดภัย

หมวดหมู่ 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 เป็นหนึ่งในโซลูชันที่เป็นไปได้

แหล่งข้อมูล