หมวดหมู่ OWASP: MASVS-CODE: คุณภาพของโค้ด
ภาพรวม
การเผยแพร่บิลด์เวอร์ชันที่ใช้งานจริงซึ่งมีฟีเจอร์การทดสอบหรือการแก้ไขข้อบกพร่องอาจ ส่งผลเสียต่อท่าทีด้านความปลอดภัยของแอปพลิเคชัน ฟังก์ชันการทำงานเหล่านี้ ใช้เพื่อช่วยนักพัฒนาแอปในการค้นหาและระบุข้อบกพร่องภายใน Use Case ของแอปพลิเคชันที่ต้องการ ก่อนหรือหลังการเปิดตัวเวอร์ชันใหม่ และไม่ควร เข้าถึงได้แบบสาธารณะ
ตัวอย่างฟีเจอร์การทดสอบ/ การแก้ไขข้อบกพร่อง ได้แก่
- เมนูที่ซ่อน
- ตัวเลือกในการเปิดใช้บันทึกการแก้ไขข้อบกพร่อง
- ตัวเลือกในการแก้ไขขั้นตอนการสมัคร
- ตัวเลือกในการหลีกเลี่ยงกระบวนการชำระเงินหรือการสมัครใช้บริการ
- ตัวเลือกในการหลีกเลี่ยงการตรวจสอบสิทธิ์
- การทดสอบสำหรับกิจกรรมเฉพาะแอปพลิเคชัน
ผู้ใช้ที่เป็นอันตรายสามารถใช้ประโยชน์จากทั้งหมดที่กล่าวมาเพื่อเปลี่ยนโฟลว์ที่ตั้งใจไว้ของแอปพลิเคชันหรือดึงข้อมูลระบบเพื่อปรับแต่งการโจมตีเพิ่มเติม
ความเสี่ยงที่เกิดจากการปล่อยให้ฟีเจอร์การทดสอบหรือการแก้ไขข้อบกพร่องที่เปิดเผยไว้อาจแตกต่างกัน ตามการดำเนินการที่เชื่อมโยงกับความสามารถในการแก้ไขข้อบกพร่องเอง
อีกจุดหนึ่งที่แอปพลิเคชันมีความเสี่ยงคือแอตทริบิวต์ android:debuggable
ซึ่งตั้งค่าไว้ในองค์ประกอบ AndroidManifest.xml <application>
ดังที่รายงานไว้ในบทความandroid:debuggable
การติดตั้งใช้งานแอปพลิเคชันที่ใช้งานจริงโดยตั้งค่าดังกล่าวข้างต้นจะอนุญาตให้
ผู้ใช้ที่เป็นอันตรายเข้าถึงทรัพยากรของผู้ดูแลระบบซึ่งปกติแล้ว
จะเข้าถึงไม่ได้
ผลกระทบ
ผู้ใช้ที่เป็นอันตรายซึ่งโต้ตอบกับฟีเจอร์การทดสอบหรือการแก้ไขข้อบกพร่องในบิลด์ที่ใช้งานจริงอาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิด ผลกระทบของการดำเนินการใดๆ จะเชื่อมโยงโดยตรงกับสิทธิ์ที่กำหนดให้กับฟีเจอร์ ยิ่งมี สิทธิ์มากเท่าใด การโจมตีที่ใช้งานอยู่ก็ยิ่งส่งผลกระทบมากขึ้นเท่านั้น ฟังก์ชันดังกล่าวภายในแอปพลิเคชันสามารถใช้เพื่อหลีกเลี่ยงการป้องกันหลายอย่าง ข้ามเพย์วอลล์ ดึงข้อมูลที่เกี่ยวข้องกับระบบหรือผู้ใช้ หรือทริกเกอร์กิจกรรมการทดสอบ
การลดปัญหา
หลีกเลี่ยงการใช้คอมโพเนนต์การแก้ไขข้อบกพร่อง
ไม่ควรนำฟังก์ชันการทดสอบหรือการแก้ไขข้อบกพร่องไปใช้ภายในคอมโพเนนต์ของแอปพลิเคชันเวอร์ชันที่ใช้งานจริง เช่น กิจกรรม ตัวรับสัญญาณออกอากาศ บริการ หรือผู้ให้บริการเนื้อหา เนื่องจากหากมีการส่งออก คอมโพเนนต์เหล่านี้จะเรียกใช้ได้โดยกระบวนการอื่นๆ ในอุปกรณ์ การตั้งค่าคอมโพเนนต์การแก้ไขข้อบกพร่องเป็นไม่ได้ส่งออก (android:exported="false") ไม่ถือเป็นการป้องกันที่ถูกต้องสำหรับความสามารถ เนื่องจากอุปกรณ์ที่รูทแล้วยังคงเรียกใช้ผ่านเครื่องมือ Android Debug Bridge (ADB) ได้ หากเปิดใช้ตัวเลือกการแก้ไขข้อบกพร่อง
จำกัดฟีเจอร์การแก้ไขข้อบกพร่องหรือการทดสอบไว้เฉพาะบิลด์เวอร์ชันทดสอบ
การเรียกใช้ฟังก์ชันทดสอบหรือแก้ไขข้อบกพร่องใดๆ ภายในแอปพลิเคชันควร จำกัดเฉพาะชุดการสร้างเวอร์ชัน Staging ที่จำกัดเพื่อให้เฉพาะนักพัฒนาแอปเท่านั้นที่ แก้ไขข้อบกพร่องหรือทดสอบฟีเจอร์ของแอปพลิเคชันในสภาพแวดล้อมที่มีการควบคุม ซึ่งทำได้โดยการสร้างการทดสอบเฉพาะหรือการสร้างการแก้ไขข้อบกพร่องของ แอปพลิเคชัน และการทดสอบแบบมีเครื่องควบคุมขั้นสูงสำหรับแอปพลิเคชันนั้น เพื่อให้มั่นใจว่าฟีเจอร์การทดสอบหรือการแก้ไขข้อบกพร่องจะทำงานในเวอร์ชันที่แยกต่างหาก
ใช้การทดสอบ UI อัตโนมัติ
เมื่อทำการทดสอบในแอปพลิเคชัน ให้เลือกใช้การทดสอบ UI อัตโนมัติเนื่องจาก ทำซ้ำได้ ดำเนินการในสภาพแวดล้อมที่แยกต่างหากได้ และไม่เกิด ข้อผิดพลาดจากมนุษย์
แหล่งข้อมูล
- คำแนะนำสำหรับนักพัฒนาแอปเกี่ยวกับการตั้งค่าการทดสอบขั้นสูง
- คำแนะนำสำหรับนักพัฒนาซอฟต์แวร์เกี่ยวกับการทดสอบ UI อัตโนมัติ
- android:debuggable
- android:exported
- แอปที่แก้ไขข้อบกพร่องได้ใน Android Market
- โค้ดการแก้ไขข้อบกพร่องทำให้เกิดช่องโหว่ด้านความปลอดภัยได้ไหม