使Android键盘具有抵御键盘记录器攻击的弹性 [已关闭]

2022-09-02 10:23:19

作为Android上键盘记录器攻击的受害者,我想为Android的键盘记录器攻击开发一个解决方案。我对基本的Java有所了解,对Android有所了解,对信息安全知之甚少。我也意识到,无论我拥有什么知识,都不足以弄清楚并制定解决方案。我只是喜欢讨论我的想法,看看它是否可行。

这是我所拥有的:

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

我刚刚意识到,屏幕截图可以用来获取用户使用最新的图像2文本软件的类型。但恕我直言,这是一个完全不同的领域。

那么,您对此有何看法?有可能做到吗?

更新

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


答案 1

不现实。

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

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

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

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

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


答案 2

以下是我为Android实现安全输入法范式(如问题中所述)的方法:

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

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

  1. 输入方法
  2. 输入方法会话

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

现在,来到您要实现的安全框架:

让我们将其称为安全输入法 - SIM - 并让我们将安全域定义为您的IME和希望使用SIM卡的应用程序。以下是第二个接口输入方法会话的意义

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

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

您甚至可以通过定义一些键序列(例如Windows中的Control + Alt + Del)来自定义整个机制,该序列由用户自己启动整个操作,您甚至可以在键盘上提供视觉指示(例如,闪亮的绿色图标),表明输入通道是安全的...可能性是多种:)

希望这有帮助。