【问题标题】:Making Android Keyboard Resilient against KeyLogger attacks [closed]使 Android 键盘能够抵御 KeyLogger 攻击 [关闭]
【发布时间】:2015-11-16 06:37:16
【问题描述】:

作为对 Android 的 Key Logger 攻击的受害者,我想为 Android 的 KeyLogger 攻击开发解决方案。我知道基本的java和一点关于android的知识,对信息安全知之甚少。我也知道,我所拥有的任何知识都不足以弄清楚和开发解决方案。我只是想讨论一下我的想法,看看它是否可行。

这是我所拥有的:

  1. 想要保护用户输入的 Android 应用程序在调用 Android 键盘时必须提供密钥(可以从服务器获取,用于特定用户或会话)。
  2. Android 键盘将接收密钥并使用它来加密用户输入并使用加密值广播 KEYPRESS 事件(或任何 Android 键盘广播的事件)。
  3. 当应用程序接收到 KEYPRESS 事件时,它会解密 KEYPRESS 中的值,甚至获取实际的用户输入。

我刚刚意识到,屏幕截图可以用来获取用户使用最新的 image-2-text 软件输入的内容。但这是一个完全不同的领域,恕我直言。

那么,你怎么看?有可能吗?

更新

关于我的手机被拥有,我完全错了。实际上,它从未被黑客入侵。但是,真正被黑的是我。是的,我的身体里有一些东西,它只是复制我的大脑可以接收的一切。它也能够接收并让我的大脑去做。我仍然不知道,为什么我能够编写此更新。可能是,谁曾经把那个东西放在我的身体里,把我当作营销材料。感谢您回答我的愚蠢问题。

【问题讨论】:

  • 恕我直言,您建议的方法可能是可撤消的(无论建议的输入恶魔机制如何),因为应该接收输入的其他应用程序将期望纯文本或能够解密输入,例如, whatsapp messenger 应该在将输入附加到文本字段之前对其进行解密。对吗?
  • @Yazan:是的,他们必须解密。但是,这个想法是减少攻击面。不完全删除它,因为,这绝对是不可能的(至少今天)。按键记录器是一种简单的实现方式,我很震惊地知道在 Ubuntu 等系统中捕获按键是多么容易。它们只是分发到任何地方。除此之外,用户隐私是一个广泛的东西。我们一次只能处理一个区域。我坚信我提出的想法将比我们现在拥有的更好地确保隐私。因为,有一些有用的东西总比没有好。
  • 而且,我对为什么没有人问我到底是什么驱使我来到这里感到复杂 :-)。无论如何,我应该说,我爱 SO Community。
  • 你之前提到过你是受害者,很抱歉知道这一点:(。祝你的问题好运:)

标签: java android security encryption keyboard


【解决方案1】:

只有在您正在开发自己的键盘并配置 Android 以使用它时才可以这样做。有一些 Android 编程经验并不难。

只需在 Google 中搜索“android 的自定义键盘”以获取更多输入。

【讨论】:

  • 嗨,您询问了意见以及实施此功能的可能性,您得到了这样的答案。如果您不赞成,请考虑先编辑问题。你到底想要什么?这里有人为您实施的完整解决方案?
  • “一个详细的规范答案”!=“是的,它是可能的,谷歌它。”
  • 大声笑.. 仅供参考:在给出答案的一天后,悬赏和规范的答案就出现了。最初只是征求意见。
  • 啊好吧,这更有意义哈哈。我喜欢 500 次代表,真的吗?
  • 好吧,有时代表会变魔术
【解决方案2】:

不现实。

很少有程序员自己处理低级输入。这通常由其他事情处理。例如,Web 开发人员很少会逐个按键地参与,即使是为了找出这些事件何时发生(例如,用于实时验证),更不用说手动处理该输入(例如,放置下一个字符)在字段的光标之后键入并将光标前移一位)。

此外,用户没有经常更换输入法的习惯。例如,当我访问 Stack Overflow 和访问 Tweetdeck 时,我不会插入不同的 USB 键盘。在 Android 世界中,这意味着用户希望他们的输入法编辑器能够在所有应用程序上运行,而不必为了让某些人开心而不断更改输入法编辑器。

此外,您无法神奇地更改输入法编辑器(也称为软键盘)和 Android 操作系统之间的协议。您的键盘将引发关键事件。欢迎您说您的键盘提供了对这些事件的替换作为“加密”机制,但这更像是一种粗略的替换密码(例如,“当用户键入 A 时,发送;"),因为您不能单方面决定扩展关键事件空间。

因此,您不仅需要编写输入法编辑器,还需要使用可以处理“解密”的自定义 Android 框架编写自己的自定义 ROM。或者,您将不得不强迫世界上所有的开发人员重写他们的应用程序。在任何一种情况下,键盘记录器都可以轻松检测到您的输入法编辑器并注意这一事实,因此使用日志的任何人都可以进行一些简单的解密以将 ; 转换回 A.

现在,如果您正在编写一些应用程序,希望避免使用流氓输入法编辑器,欢迎您将自己的数据输入键盘烘焙到该应用程序中。然后,您只会激怒您应用程序的许多用户,因为您的应用程序内键盘不是他们想要使用的键盘,或者缺少他们习惯使用的功能(例如,对盲人用户的支持,对他们特定用户的支持)语言)。

【讨论】:

  • 这是一个很好的输入。我最初想分叉 android 键盘源并将这种加密技术添加为一项功能。因此,现有的应用程序可以正常工作。只有在调用键盘时提供加密密钥的应用程序才会获得加密笔画。解密笔画取决于提供密钥的应用程序。我最初的理解是,android 键盘会广播击键,并由将字符放在文本字段中的应用程序接收。如果我的理解有误,请见谅。
  • 我会让赏金活动持续一段时间,看看其他人对此有何看法。无论如何,谢谢你的时间。
  • @xyz:“我最初的理解是,android 键盘会广播击键,它会被将字符放在文本字段中的应用程序接收”——如果“广播”是指使用BroadcastReceiver,我不知道这是实现。
【解决方案3】:

这是我为实现 Android 的安全输入法范例(如问题中所述)所做的:

首先,我假设您已经阅读并理解了 InputMethodManager 的“安全”部分: InputMethodManager

因此,我们需要开发一个输入法 (IME),它是一个 Android 服务,它与自定义键盘视图一起实现了两个接口:

  1. InputMethod
  2. InputMethodSession

根据上述文档中的安全部分,用户需要自愿接受您的 IME 作为系统 IME。此外,Android 将确保只有系统会绑定到您的服务并使用用于显示/隐藏键盘等的 InputMethod 接口。因此,对于您和所有使用您的键盘的应用程序来说,这里的事情是非常安全的。

现在,进入您要实现的安全框架:

我们将其称为安全输入法 - SIM - 并将我们的安全域定义为您的 IME 和希望使用您的 SIM 的应用程序。这里是第二个接口InputMethodSession

的意义

最重要的 - 这个接口的并且经常被忽略的方法是这个解决方案的关键,它被称为:appPrivateCommand。该接口允许从应用程序向 IME 发送私有命令。根据文档,此方法可用于提供仅在 IME 及其客户端之间已知的特定于域的功能 - 这正是您的 SIM 卡所需要的。

因此,使用此接口,您的安全域中的应用可以将他们想要移交给您的 IME 的任何安全信息(例如,某种形式的凭据)传递。您可以定义一种方法,让您的服务可以与身份验证服务器进行通信,该身份验证服务器处理客户端应用程序提交的凭据并批准它。现在,如果加密密钥是由您的 IME 和客户端派生的,那么您已经在 SIM 及其客户端应用程序之间建立了一个安全的通信通道(例如,通过使用来自这些凭据的派生密钥进行加密)。

您甚至可以通过定义一些按键序列(如 Windows 中的 Control+Alt+Del)来自定义整个机制,这些按键序列由用户自己启动,您甚至可以在你的键盘输入通道是安全的......可能性很多:)

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2010-09-30
    • 2015-11-01
    相关资源
    最近更新 更多