Qtopia 手机安全

作者:Lorn Potter

没有人想要不安全的系统,尤其是在移动或 VoIP 电话上。用户和运营商都希望确信他们的手机不会被秘密地用于发送数千条垃圾邮件或病毒,或传输大量文件。移动领域的 Linux 向所有人敞开了大门——包括恶意代码的开发者。一个锁定且安全的系统不一定意味着源代码是封闭的。

Security in Qtopia Phones

图 1. Qtopia 的主屏幕

人们最不希望在他们的手机上看到的是恶意软件应用程序,它会秘密地将他们的详细信息发送到某个地方,或者使用他们昂贵的 GPRS 帐户发起 DOS 攻击。Trolltech 的安全执行环境 (SXE) 与 Linux 入侵检测系统 (LIDS) 结合使用,提供了一个安全的环境,可以在其中执行不受信任的应用程序。如果没有 SXE 和 LIDS,毫无戒心的用户可能会安装未知的软件包。这可能会启动 Qtopia 的 QCop,它使用设置为其自身 libc 库的 LD_PRELOAD 处理 Qtopia 的进程间通信 (IPC)。这意味着它自己的代码被加载,而不是系统中已知的 libc,这可能会对用户的数据造成灾难性后果,或者更糟,中断紧急通信。

Trolltech 有一个答案。

Trolltech 最近宣布了包含 SXE 的 Qtopia GPL 版本,以及 GSM 和支持 VoIP 的电话所需的电话库。Trolltech 花费了大量人工时开发 SXE,以帮助确保运营商和用户都对安装原生编译的应用程序充满信心。我在这里说人工时,是因为 SXE 大部分生命周期的首席开发者是 Sarah Smith——Trolltech 的第一位女性开发者。

SXE 有点像防火墙。它通过域控制阻止应用程序访问未经授权的服务和硬件。它超越了仅仅是简单地沙盒化应用程序,沙盒化可能会盲目地拒绝程序访问系统资源。它为每个程序组件和 IPC 应用策略规则。Qtopia 应用程序在想要打开窗口或发送 SMS 时会发送 IPC 或 QCop 消息。

安装后,应用程序会指定运行所需的安全域,并由 Qtopia 沙盒化。如果程序被执行,然后尝试访问超出其被授予的服务,则会记录安全漏洞,并且应用程序将被终止和禁用。系统会向用户发出关于违规行为的对话框和 SMS 消息。LIDS 可以通过控制对硬件、系统级服务、程序和文件的访问来完善安全环境。

Qtopia Greenphone 是一个 SXE 和 LIDS 工作实现的示例,本文讨论的是 Qtopia 4.3.0 版本。最近为 FIC 的开源 Neo 手机发布的 Qtopia 开源版本也将受益于 SXE 和启用 LIDS 的内核。

注意

虽然 Greenphone 的销售已经停止,但对其的支持和开发并未停止——Qtopia 的 SXE 开发也没有停止。在本文中,我主要使用 Greenphone 作为示例。

Trolltech 建议对开源 Qtopia 手机感兴趣的人购买 FIC Neo 1973,因为它已将 Qtopia 移植到该设备,并计划以与 Greenphone SDK 相同的方式支持 SDK,计划与 4.3.1 版本一起发布。

应用程序开发

SXE 应用程序从开发者创建 Qtopia 应用程序并将其打包到 Qpkg 中开始,Qpkg 基于 Itsy Package,但解决了一些安全问题。即,Qtopia 不允许应用程序安装运行任意脚本,而且,软件包必须指定它需要访问哪些域才能运行。然后,Qtopia 只允许(或拒绝)该软件包访问其请求的那些域。

SXE 域只是允许的访问权限策略的名称。Qtopia 中的一些默认域及其访问权限是

  • docapi:用户文档。

  • pim:个人信息管理数据。

  • window:图形显示。

  • graphics:全屏图形显示。

  • net:访问 WAP、GSM 和 GPRS。

Qtopia 使用更多域,其中一些域(例如基本域)绝不应允许任何不受信任的应用程序访问。运营商或集成商可以使用默认的 Qtopia 域或创建自己的域。

然后,第三方开发者在包控制文件中指定应用程序需要哪些域才能运行。与传统的 ipkg 非常相似,qpk 只是应用程序所在的文件结构的 gzipped tarball、类似于 KDE 和 GNOME 中使用的桌面文件,以及指定参数(例如应用程序的名称、维护者、域、文件大小等)的控制文件。

Greenphone SDK 通过使用 gph 脚本简化了此操作,该脚本可以配置、编译、构建软件包并在 Greenphone 上安装或运行它。开发者只需要知道应用程序将要使用哪些域。在 SXE_DISCOVERY_MODE 中启动 Qtopia 的调试版本,并启用 SXE 日志记录,可以帮助记录这些域请求和随后的拒绝。在发现模式下运行时,性能会显着下降。它仅用于调试过程,而不是最终版本。然后,开发者可以将相应的域添加到应用程序的 .pro 文件中。

安装时间

在配置 Package Manager 以查看 feed 服务器后,Qtopia 会读取服务器上名为 packages.list 的纯文本文件。此文件包含服务器上所有可用软件包的列表、软件包请求的域,以及每个软件包的描述、名称、维护者、大小、许可证和 md5sum。

当用户想要安装新软件包时,他们会从列表中选择它。然后,系统会提示用户一个对话框,其中包含应用程序请求访问的特定域(图 2)。用户可以选择是否安装。然后,软件包将被下载到临时存储,安装并沙盒化。默认情况下,不受信任的软件包位于 /home/Packages 中,md5sum 用作目录名——例如,home/Packages/1e67fa93917fedb17f575fe0f2ee2cd8/bin/screenshot。

Security in Qtopia Phones

图 2. 软件包安装

Packages 目录具有文件结构,例如 bin/lib/pics/,它符号链接到实际二进制文件所在的位置。这些符号链接在名称中使用 md5sum,例如 1e67fa93917fedb17f575fe0f2ee2cd8_screenshot → ../1e67fa93917fedb17f575fe0f2ee2cd8/bin/screenshot。

Qtopia 知道此文件路径,因此它可以找到您闪亮的新应用程序,然后将其添加到主应用程序列表中。此信息现在位于 Qtopia 内容数据库中。在以前版本的 Qtopia 中,所有这些数据都只是存在于文件系统中,Qtopia 扫描以查找应用程序。然后,Package Manager 运行 sxe_sandbox 脚本来为此应用程序创建 LIDS 规则。

运行时

用户通过单击主菜单中的图标来启动不受信任的应用程序。在 Qtopia 4.3.0 之前的版本中,可以从“已安装软件包”应用程序访问不受信任和已安装的应用程序。为了确保应用程序仅尝试访问其被授予的域,Qtopia 使用 SXEMonitor 监视服务访问请求。如果应用程序尝试访问它最初未请求的内容,例如 phonecomm 域,则会注册违规行为(图 3)。应用程序将被终止,Qtopia 会通过对话框提醒用户。但是,它还会直接向用户的“消息”收件箱发送 SMS 消息。如果此应用程序继续创建违规行为,Qtopia 将完全禁用该程序。

Security in Qtopia Phones

图 3. 安全违规警报

Security in Qtopia Phones

图 4. 主菜单中的已安装软件包

LIDS 在这一切中都起着不可或缺的作用。SXE 与 LIDS 策略协同工作,以确保不应访问的文件不会被访问。您必须在内核中启用 LIDS 才能利用 SXE。LIDS 中的强制访问控制 (MAC) 系统控制较低级别的文件系统访问。如果没有它,Qtopia 可以拒绝应用程序访问域策略中的 Qtopia 服务和任务,但是没有什么可以阻止应用程序将这些访问权限更改为对恶意应用程序更有利的东西。

Security in Qtopia Phones

图 5. 显示 SXE 和 LIDS 状态的安全信息

许多脚本模板随 Qtopia 一起提供,它们位于 etc/sxe_qtopia 中,有助于在根文件系统创建和软件包安装期间创建 LIDS 规则。启用 LIDS 的 Greenphone 在系统更新闪存后的首次启动期间写入这些策略规则。当然,运营商可以在部署前对文件系统执行此操作。

当集成商创建新的应用程序或服务时,他们需要将它们添加到 Qtopia 的 etc/sxe.profiles 文件中。此文件包含域列表以及与它们关联的服务和 QCop 消息。它在安装时由 Qtopia 处理以创建 SXE 策略。集成商可能还需要将其添加到 Package Manager 的源代码中,以便它可以向用户显示域的详细特征。这有助于用户至少做出明智的选择,以决定是否安装软件包。

Qtopia.net 设置了两个 feed,其中包含模拟恶意软件软件包以进行测试,分别用于 4.3.0 Greenphone (qtopia.net/packages/feed/4.3/greenphone) 及其 SDK (qtopia.net/packages/feed/4.3/sdk)。在那里,您可以获取最新的 Greenphone SDK 来亲自试用(图 6)。

Security in Qtopia Phones

图 6. Qtopia.net Feed 上的虚假恶意软件软件包列表

要启用 LIDS 内核,请从 LIDS 网站下载 LIDS 补丁,构建修补后的内核,构建 LIDS 文件系统并配置策略脚本。Qtopia 附带脚本,可帮助根据域定义 LIDS 策略。例如,脚本 etc/sxe_domains/sxe_qtopia_bluetooth 创建了一个 LIDS 规则,如下所示

lidsconf -A POSTBOOT -s ${BIN} -o LIDS_SOCKET_CREATE -j ENABLE

适用于被授予蓝牙域访问权限的应用程序。

我不会深入介绍创建 LIDS 策略的详细信息,但更多信息可以在 LIDS 网站 (lids.org) 和 Trolltech 文档 (doc.trolltech.com/qtopia4.3/sxe.html) 中找到。

SXE 和 LIDS 可以让您的 Linux 手机更加愉快和无忧,让您确信您下载的不受信任的应用程序只会执行允许它们执行的操作。

Lorn Potter 在 Trolltech 的系统组 MES 担任软件工程师。他是一位美国人,与他的澳大利亚妻子、两岁的儿子和新生女儿一起住在阳光明媚的澳大利亚布里斯班。他之前曾担任 Qtopia 社区经理,并从事开源软件开发已有七年。他还曾在科罗拉多州、阿拉斯加州和密歇根州上半岛担任音乐家、音响工程师和滑雪爱好者。

加载 Disqus 评论