如何保护本地套接字?

信息安全 linux 安卓 授权
2021-08-17 11:14:52

我已经制作了一个用 c 编写的服务,它作为核心服务在 Android 操作系统上运行。我有一些通过套接字连接(Java -> C)与该服务通信的 Android 应用程序。

我的问题是任何人都可以打开到我的服务的连接,如果他们知道它正在使用哪个端口。这些应用程序没有凭据,仅在 Android 沙箱中运行。

我可以使用哪些方法至少尝试防止不良应用访问此服务?因为它在本地主机 ssl 上似乎不相关?

这两个应用程序都已编译,因此我可以在它们之间共享一个密钥,但 Android 应用程序可以被反编译。

您通常如何保护同一台机器上的客户端/服务器连接?

2个回答

这感觉像是XY 问题的一个实例

简短的回答是:

通常,这是您从应用程序提供信息,然后控制对该信息的访问的方式。

更长的答案:

您正在使用套接字将信息从您的服务传递到其他应用程序,但这并不是真正的“Android-y”做事方式。Android 有一个使用Intents进行进程间通信的系统。不过,这与特定于安全性的问题有点距离,所以如果您对 Android 文档感兴趣,请随时在 StackOverflow 上提问!

结果是,这个 Intents 和 Permissions 系统是 Android 用于限制应用程序访问的工具。请注意,这与传统的桌面模型(基于用户,而不是应用程序)不同,因为移动开发针对的是单用户用例。

从我对嵌入式 Android 一书的阅读来看,Android 内部通常使用本地套接字来提供硬件服务,因此这种架构对于 Android 来说并不完全不同寻常。本地套接字在 Linux 上获取其包含目录的权限:

在 Linux 实现中,文件系统中可见的套接字尊重它们所在目录的权限。它们的所有者、组和权限可以更改。如果进程在创建套接字的目录上没有写入和搜索(执行)权限,则新套接字的创建将失败。连接到套接字对象需要读/写权限。

这种行为与许多忽略 UNIX 域套接字权限的 BSD 派生系统不同。便携式程序不应依赖此功能来确保安全。

http://man7.org/linux/man-pages/man7/unix.7.html