处理滥用自定义 URL 方案进行网络钓鱼攻击的最佳实践 ios
Best practices in dealing with the abuse of custom URL scheme to make phishing attack ios
场景:
一个网络应用程序,一旦新用户完成注册,就会发送一封电子邮件,其中包含一个 URL,一旦从 iOS 设备中点击,iOS 应用程序将推出。这个场景是让用户使用手机APP的经典场景。
在实施时(使用 URL 方案),我们开始怀疑这种方法的安全性如何?理论上 - 恶意应用程序可以注册相同的 URL 方案,根据 Apple 的说法:
Note: If more than one third-party app registers to handle the same URL scheme, there is currently no process for determining which app will be given that scheme.
Implementing Custom URL Schemes by Apple
在这种情况下,如果用户点击电子邮件中的 url,则不知道将启动两个(或更多应用程序)中的哪一个 - 我们的还是恶意的。假设正在启动一个不同的应用程序 - 如果它真的是恶意的,理论上它可以模仿我们应用程序的登录页面并获取用户的凭据。
有没有处理这种情况的最佳实践?我读过很多关于这个问题的文章,他们都声称唯一的解决办法是等待 Apple 使这些 url 方案独一无二。
example1,
example2
如果存在问题的任何解决方案,我很乐意听到,
提前致谢!
尝试这样的事情:
在您的电子邮件中,说明单击 URL 将启动应用程序并让您首次登录,然后提示用户输入新密码。在 URL 中包含一个令牌,当您的应用处理该令牌时,它会执行一次性登录并将用户置于 "New Password" 页面。
如果恶意应用程序也注册了您的自定义 URL 并窃取了 link,他们应该(希望)无法对其做太多事情。即使他们复制您的界面并提示用户输入新密码,也无济于事。
编辑:进一步思考后,只要你有一个活跃的攻击者,你就完蛋了。攻击者可以继续模拟您的应用程序,有效地对您进行 MITMing,无论您做什么,只要他们能够劫持初始 URL。我的解决方案只适用于最基本的情况,并不可靠。
我们必须假设恶意应用程序可以拦截此 url 中包含的任何数据,并且它的作者可以自由地对您应用程序中包含的任何行为进行逆向工程,以便它可以模仿您的 UI以及您的应用尝试执行的任何验证。然而,我们也可以假设恶意应用程序包含在它自己的沙箱中,因此您的应用程序可以私下与您的后端通信。恶意应用程序可以模仿任何此类通信,但这确实允许我们构建恶意应用程序未知的秘密。这至少让我们有机会设计一些对策。
一个选项可能是:
- 作为注册的一部分,构建一个 public/private 密钥对并将其存储在您的应用程序中。
- 在注册过程中将 public 密钥发送到您的网络后端。
- 使用 public 密钥对您 URL 的有效负载进行编码。
现在我们已经将数据发送到您的应用程序,这些数据可能会被重定向到恶意应用程序,但恶意应用程序无法读取这些数据。这是一个部分解决方案。我们仍然需要小心设计一个 UI,因为 URL 可能仍然会启动冒名顶替者。
编码数据可能是我们可以用来验证用户身份的令牌,因此永远不会要求他们在应用程序中重新进行身份验证。然后就没有可以模仿的登录屏幕(尽管巧妙的伪造可能仍然足以诱使用户泄露他们的凭据)。
另一种方法可能是使用存储在客户端上的类似的每用户密码作为盐与用户密码结合使用。他们的密码可能不足以进行身份验证,因此捕获他们凭据的恶意应用无法立即访问他们的帐户。
另一种设计可能是允许用户以可识别的方式自定义他们的体验。您可以在登录屏幕上显示他们选择的个人资料图片。如果只有您的应用程序知道该选择,那么模仿者应该无法可靠地复制它(同样,不能保证用户会被欺骗)。
所有这些都需要权衡;用户可能仍然会被诱骗向恶意应用程序泄露信息,无论它们与您的合法客户端有多么不同,客户端机密可以通过其他攻击提取,并且您需要一个计划来支持更换、丢失或升级设备的用户。您必须决定其中任何一项是否真的提高了用户的安全性,以及是否值得实施成本。
场景:
一个网络应用程序,一旦新用户完成注册,就会发送一封电子邮件,其中包含一个 URL,一旦从 iOS 设备中点击,iOS 应用程序将推出。这个场景是让用户使用手机APP的经典场景。
在实施时(使用 URL 方案),我们开始怀疑这种方法的安全性如何?理论上 - 恶意应用程序可以注册相同的 URL 方案,根据 Apple 的说法:
Note: If more than one third-party app registers to handle the same URL scheme, there is currently no process for determining which app will be given that scheme.
Implementing Custom URL Schemes by Apple
在这种情况下,如果用户点击电子邮件中的 url,则不知道将启动两个(或更多应用程序)中的哪一个 - 我们的还是恶意的。假设正在启动一个不同的应用程序 - 如果它真的是恶意的,理论上它可以模仿我们应用程序的登录页面并获取用户的凭据。
有没有处理这种情况的最佳实践?我读过很多关于这个问题的文章,他们都声称唯一的解决办法是等待 Apple 使这些 url 方案独一无二。 example1, example2
如果存在问题的任何解决方案,我很乐意听到, 提前致谢!
尝试这样的事情:
在您的电子邮件中,说明单击 URL 将启动应用程序并让您首次登录,然后提示用户输入新密码。在 URL 中包含一个令牌,当您的应用处理该令牌时,它会执行一次性登录并将用户置于 "New Password" 页面。
如果恶意应用程序也注册了您的自定义 URL 并窃取了 link,他们应该(希望)无法对其做太多事情。即使他们复制您的界面并提示用户输入新密码,也无济于事。
编辑:进一步思考后,只要你有一个活跃的攻击者,你就完蛋了。攻击者可以继续模拟您的应用程序,有效地对您进行 MITMing,无论您做什么,只要他们能够劫持初始 URL。我的解决方案只适用于最基本的情况,并不可靠。
我们必须假设恶意应用程序可以拦截此 url 中包含的任何数据,并且它的作者可以自由地对您应用程序中包含的任何行为进行逆向工程,以便它可以模仿您的 UI以及您的应用尝试执行的任何验证。然而,我们也可以假设恶意应用程序包含在它自己的沙箱中,因此您的应用程序可以私下与您的后端通信。恶意应用程序可以模仿任何此类通信,但这确实允许我们构建恶意应用程序未知的秘密。这至少让我们有机会设计一些对策。
一个选项可能是:
- 作为注册的一部分,构建一个 public/private 密钥对并将其存储在您的应用程序中。
- 在注册过程中将 public 密钥发送到您的网络后端。
- 使用 public 密钥对您 URL 的有效负载进行编码。
现在我们已经将数据发送到您的应用程序,这些数据可能会被重定向到恶意应用程序,但恶意应用程序无法读取这些数据。这是一个部分解决方案。我们仍然需要小心设计一个 UI,因为 URL 可能仍然会启动冒名顶替者。
编码数据可能是我们可以用来验证用户身份的令牌,因此永远不会要求他们在应用程序中重新进行身份验证。然后就没有可以模仿的登录屏幕(尽管巧妙的伪造可能仍然足以诱使用户泄露他们的凭据)。
另一种方法可能是使用存储在客户端上的类似的每用户密码作为盐与用户密码结合使用。他们的密码可能不足以进行身份验证,因此捕获他们凭据的恶意应用无法立即访问他们的帐户。
另一种设计可能是允许用户以可识别的方式自定义他们的体验。您可以在登录屏幕上显示他们选择的个人资料图片。如果只有您的应用程序知道该选择,那么模仿者应该无法可靠地复制它(同样,不能保证用户会被欺骗)。
所有这些都需要权衡;用户可能仍然会被诱骗向恶意应用程序泄露信息,无论它们与您的合法客户端有多么不同,客户端机密可以通过其他攻击提取,并且您需要一个计划来支持更换、丢失或升级设备的用户。您必须决定其中任何一项是否真的提高了用户的安全性,以及是否值得实施成本。