草庐IT

Android Binder 安全

coder 2023-06-09 原文

Android 中 Binder 提供的进程间通信是否可以防止中间人攻击?是否有任何文档提供此信息?

最佳答案

Binder 使用基于能力的安全模型。每个活页夹对象代表一个能力;将该对象交给另一个进程授予该进程对该功能的访问权限。从这个角度来看,您可以通过不将重要的活页夹对象交给中间人来防止中间人攻击。如果一个进程没有得到一个活页夹对象,它就不能以任何方式访问它。

关于论文中讨论的“跨绑定(bind)引用伪造”问题,如果我理解他们所谈论的具体场景,我认为他们关于用户空间的附录比我同意的要弱一些。他们犯了一个错误,我认为查看为 ServiceManager 编写的特殊 C 代码。正式地,我将 C++ 用户空间代码(特别是由 Parcel 组成)视为 Binder 架构的一部分。当您调用 readBinder() 和相关方法时,此代码特别确保处理此类欺骗尝试。

我不同意内核不能完全确保数据完整性是一个缺陷的说法。我能想到的唯一方法是为活页夹交易定义一个标准的类型化数据结构,以便它可以读取和验证包裹的内容。在我看来,这在内核中投入了太多知识,并没有真正的好处。不管你在那里放了多少,用户空间都需要对传入的交易进行某种验证,以确保它符合预期。今天,这是在验证 Parcel 上的原始数据读取操作(readBinder()、readString16()、readInt() 等)被写入以避免攻击的级别上完成的。向内核推送更多验证仍然需要在用户空间验证数据类型是否正确,现在您实际上已经将一些攻击机会(由于此代码中的错误)从用户空间转移到内核。

关于 binder 安全性的最后一件事是,重要的是要意识到在平台级别有另一个重要的安全模型在 binder 基础架构之上实现。这是基于权限/uid 的系统,服务可以在其中检查传入调用的​​ uid,以根据允许的权限验证它们。

此安全模型还有另一个必须处理的欺骗漏洞。一个典型的场景是应用程序接收 Activity 管理器服务的 IBinder(因为每个人都可以得到它)。 Activity Manager Service 的 API 深深地基于检查传入调用的 uid 以确定允许的内容——例如,如果调用 bindService(),它将检查该 uid 是否有权绑定(bind)到给定的服务。恶意应用程序可能会尝试通过将 Activity 管理器 IBinder 交给另一个系统服务来玩游戏,例如作为 IWindow 交给窗口管理器。如果它知道第二个系统服务将进行的事务,它可以进行设置,以便进行它认为是 resizeWindow() 的调用,但当它进入 Activity 时实际上最终变成对 bindService() 的调用manager(如果这两个调用映射到相同的事务 ID)。

这个漏洞的存在是因为活页夹系统没有以任何方式输入,“方法”调用只是使用整数事务代码和数据缓冲区发送的事务。

为了防止这种情况发生,aidl 生成的用户空间类型化接口(interface)总是在其事务缓冲区的开头放置他们打算调用的接口(interface)的名称,并且事务的接收代码检查缓冲区前面的接口(interface)名称以确保它匹配自己的交互。这样,当 Activity 管理器看到它有一个接口(interface)是窗口的传入调用时,上面场景中的欺骗者将被捕获。

无论如何,对于 Android 开发人员的大多数实际使用,基于 uid 的安全性与核心绑定(bind)器功能模型一样相关。在某些情况下,您将通过限制哪些进程访问活页夹来加强安全性。一个例子是如何有一个 IBinder 代表每个 Activity ,只有系统进程和运行 Activity 的进程共享。

在其他情况下,IBinder 对象将与任何感兴趣的进程共享,但在基于 uid 的调用点强制执行安全性。如果您使用 aidl 来提供此类接口(interface)的标准实现,则可以根据要应用于 uid 的含义来完成此类安全性的自己实现。例如,您可以使用标准工具将权限与 uid 相关联,并询问包管理器传入的 uid 是否具有权限。

关于Android Binder 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686686/

有关Android Binder 安全的更多相关文章

  1. 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

  2. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  3. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  4. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  5. ruby - 使写入文件线程安全 - 2

    我在一个ruby​​文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}

  6. ruby-on-rails - 最灵活的 Rails 密码安全实现 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我需要实现具有各种灵活需求的密码安全。这些要求基本上取自Sanspasswordpolicy:Strongpasswordshavethefollowingcharacteristics:Containatleastthreeofthe

  7. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  8. ruby - 为什么我必须对 Net::HTTP 请求的安全字符进行 URI.encode? - 2

    我尝试使用Net::HTTP向Twitter发送GET请求(出于隐私原因替换了用户ID):url=URI.parse("http://api.twitter.com/1/friends/ids.json?user_id=12345")resp=Net::HTTP.get_response(url)这会在Net::HTTP中引发异常:NoMethodError:undefinedmethodempty?'for#from/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1

  9. 使用时 Rubygems 2.0.14 不是线程安全的 bundle 程序安装消息 - RUBYGEMS VERSION : 2. 4.5.1 - 2

    运行bundle安装时,我收到以下消息:Rubygems2.0.14isnotthreadsafe,soyourgemswillbeinstalledoneatatime.UpgradetoRubygems2.1.0orhighertoenableparallelgeminstallation.这很奇怪,因为在我的RubyGems环境中它说我的RubyGems版本是:2.4.5.1(见下文)~/w/Rafftopia❯❯❯gemenvRubyGemsEnvironment:-RUBYGEMSVERSION:2.4.5.1-RUBYVERSION:2.2.5(2016-04-26patc

  10. ruby - ZeroMQ 安全地通过互联网 - 2

    我一直在使用zeroMQ,我希望能够通过Internet安全连接。我在ruby​​中,可以使用SSL和/或某种shh连接,但找不到有关如何执行此操作的任何示例。我找到了这个旧的stackoverflow链接,HowdoeszeromqworktogetherwithSSL?说他们正在研究某种安全性,但那是一年前的事了,我找不到任何新的引用资料。即使这不是内置在zeroMQ中,我也假设会有一些方法可以使用OpenSSL或类似的东西来设置它。注意:如果您想要安全传输,zeroMQ网站提到使用VPN或其他东西。我不想使用VPN。一定有更好的方法。 最佳答案

随机推荐