草庐IT

ios - 处理滥用自定义 URL 方案进行网络钓鱼攻击的最佳实践

coder 2023-09-21 原文

场景:

一个 Web 应用程序,一旦新用户完成注册,就会发送一封电子邮件,其中包含一个 URL,一旦从 iOS 设备中点击该 URL,iOS 应用程序就会启动。该场景是让用户使用移动应用的经典场景。

在实现它(使用 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 中包含的任何数据,并且它的作者可以自由地对您的应用程序中包含的任何行为进行逆向工程,以便它可以模仿您的用户界面和您的应用程序尝试执行的任何验证。然而,我们也可以假设恶意应用程序包含在它自己的沙箱中,因此您的应用程序可以私下与您的后端通信。恶意应用程序可以模仿任何此类通信,但这确实允许我们构建恶意应用程序未知的 secret 。这至少让我们有机会设计一些对策。

一个选项可能是:

  1. 作为注册的一部分,构建公钥/私钥对并将其存储在您的应用中。
  2. 在注册过程中将公钥发送到您的网络后端。
  3. 使用该公钥对您的 URL 的有效负载进行编码。

现在我们已经将数据发送到您的应用程序,这些数据可能会被重定向到恶意应用程序,但恶意应用程序无法读取这些数据。这是一个部分解决方案。我们仍然需要小心设计一个 UI,它不会鼓励用户陷入网络钓鱼攻击,因为 URL 可能仍会启动冒名顶替者。

编码数据可能是我们可以用来对用户进行身份验证的 token ,因此永远不会要求他们在应用程序中重新进行身份验证。然后就没有可模仿的登录屏幕(尽管巧妙的伪造可能仍然足以诱使用户泄露其凭据)。

另一种方法可能是使用存储在客户端上的类似的每个用户的 secret 作为盐与用户的密码相结合。他们的密码本身可能不足以进行身份​​验证,因此捕获他们凭据的恶意应用无法立即访问他们的帐户。

另一种设计可能是允许用户以可识别的方式定制他们的体验。您可以在登录屏幕上显示他们选择的个人资料图片。如果只有您的应用知道该选择,那么模仿者应该无法可靠地复制它(同样,不能保证用户会被欺骗)。

所有这些都需要权衡;用户可能仍然会被诱骗向恶意应用程序泄露信息,无论它们与您的合法客户端有多么不同,客户端 secret 可以通过其他攻击提取,并且您需要一个计划来支持更换、丢失或升级设备的用户。您必须决定其中的任何一项是否真的提高了用户的安全性,以及是否值得实现这些成本。

关于ios - 处理滥用自定义 URL 方案进行网络钓鱼攻击的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30461145/

有关ios - 处理滥用自定义 URL 方案进行网络钓鱼攻击的最佳实践的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  5. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  7. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  8. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  9. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  10. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

随机推荐