หมวดหมู่ OWASP: MASVS-PLATFORM: การโต้ตอบระหว่างแพลตฟอร์ม
ภาพรวม
ความเสี่ยงด้านความปลอดภัยที่เชื่อมโยงกับ Deep Link มาจากความสามารถหลักของ Deep Link ในการช่วยให้การไปยังส่วนต่างๆ และการโต้ตอบภายในแอปพลิเคชันบนอุปกรณ์เคลื่อนที่เป็นไปอย่างราบรื่น ช่องโหว่ของ Deep Link เกิดจากจุดอ่อนในการใช้งานหรือการจัดการ Deep Link ผู้ไม่ประสงค์ดีอาจใช้ช่องโหว่เหล่านี้เพื่อเข้าถึงฟังก์ชันหรือข้อมูลที่มีสิทธิ์ ซึ่งอาจส่งผลให้เกิดการละเมิดข้อมูล การละเมิดความเป็นส่วนตัว และการดําเนินการโดยไม่ได้รับอนุญาต ผู้โจมตีสามารถใช้ประโยชน์จากช่องโหว่เหล่านี้ผ่านเทคนิคต่างๆ เช่น การลักลอบใช้ Deep Link และการโจมตีการตรวจสอบข้อมูล
ผลกระทบ
การไม่มีกลไกการตรวจสอบ Deep Link ที่ถูกต้องหรือการใช้ Deep Link ที่ไม่ปลอดภัยอาจช่วยให้ผู้ใช้ที่เป็นอันตรายทำการโจมตีได้ เช่น การหลบเลี่ยงการตรวจสอบโฮสต์ การใช้สคริปต์ข้ามแอป และการดำเนินการกับโค้ดจากระยะไกลภายในบริบทสิทธิ์ของแอปพลิเคชันที่เปราะบาง ซึ่งอาจส่งผลให้มีการเข้าถึงข้อมูลที่ละเอียดอ่อนหรือฟังก์ชันโดยไม่ได้รับอนุญาต ทั้งนี้ขึ้นอยู่กับลักษณะของแอปพลิเคชัน
การผ่อนปรนชั่วคราว
ป้องกันการลักลอบใช้ Deep Link
Android ออกแบบมาให้แอปหลายแอปลงทะเบียนตัวกรอง Intent สําหรับ URI ของ Deep Link เดียวกันได้ หากต้องการป้องกันไม่ให้แอปที่เป็นอันตรายขัดขวาง Deep Link ที่มีไว้สำหรับแอปของคุณ ให้ใช้แอตทริบิวต์ android:autoVerify
ใน intent-filter
ภายใน AndroidManifest
ของแอปพลิเคชัน ซึ่งจะช่วยให้ผู้ใช้เลือกแอปที่ต้องการจัดการ Deep Link ได้ เพื่อให้การดำเนินการเป็นไปตามที่ต้องการและป้องกันไม่ให้แอปพลิเคชันที่เป็นอันตรายตีความ Deep Link โดยอัตโนมัติ
Android 12 เปิดตัวการจัดการ Intent บนเว็บที่เข้มงวดขึ้นเพื่อเพิ่มความปลอดภัย ตอนนี้แอปต้องได้รับการยืนยันเพื่อจัดการลิงก์จากโดเมนที่เฉพาะเจาะจงผ่าน App Link ของ Android หรือการเลือกของผู้ใช้ในการตั้งค่าระบบ ซึ่งจะช่วยป้องกันไม่ให้แอปลักลอบใช้ลิงก์ที่ไม่ควรจัดการ
หากต้องการเปิดใช้การยืนยันการจัดการลิงก์สําหรับแอป ให้เพิ่มตัวกรอง Intent ที่ตรงกับรูปแบบต่อไปนี้ (ตัวอย่างนี้นำมาจากเอกสารประกอบยืนยัน Android App Link)
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
ใช้การตรวจสอบข้อมูลที่มีประสิทธิภาพ
Deep Link สามารถมีพารามิเตอร์เพิ่มเติมที่แสดงต่อ Intent เป้าหมาย เช่น เพื่อดําเนินการเพิ่มเติม พื้นฐานของการจัดการ Deep Link ที่ปลอดภัย คือการตรวจสอบข้อมูลที่เข้มงวด ข้อมูลขาเข้าทั้งหมดจาก Deep Link ควรได้รับการตรวจสอบและล้างออกอย่างพิถีพิถันโดยนักพัฒนาซอฟต์แวร์เพื่อป้องกันไม่ให้มีการแทรกโค้ดหรือค่าที่เป็นอันตรายภายในแอปพลิเคชันที่ถูกต้อง ซึ่งทำได้โดยการตรวจสอบค่าของพารามิเตอร์ Deep Link กับรายการที่อนุญาตของค่าที่คาดไว้ซึ่งกําหนดไว้ล่วงหน้า
แอปควรตรวจสอบสถานะภายในอื่นๆ ที่เกี่ยวข้อง เช่น สถานะการตรวจสอบสิทธิ์หรือการให้สิทธิ์ ก่อนเปิดเผยข้อมูลที่ละเอียดอ่อน ตัวอย่างเช่น รางวัลสำหรับการผ่านด่านในเกม ในกรณีนี้ คุณควรตรวจสอบเงื่อนไขเบื้องต้นของการผ่านด่าน และเปลี่ยนเส้นทางไปยังหน้าจอหลักหากไม่ผ่านด่าน
แหล่งข้อมูล
- ยืนยัน Android App Link
- การจัดการ Android App Link
- การแก้ไขความตั้งใจในเว็บ
- ลิงก์มายากลสําหรับแอป Arrive ที่จะสกัดกั้นการลักลอบใช้บัญชี
- การใช้ประโยชน์จาก Deep Link และ WebView ส่วนที่ 1
- การใช้ประโยชน์จาก Deep Link และ WebView ส่วนที่ 2
- คำแนะนำล่าสุดเกี่ยวกับปัญหา Deep Link ในการนำทางของ Jetpack