树莓派以及许多其他类似的廉价计算机主板已成为“物联网”或 IoT 革命的一部分。互联网连接的计算设备已经超越了传统的服务器、台式机、笔记本电脑和移动设备。现在,你的电视、DVR(数字录像机)、恒温器、冰箱、互联网收音机、树莓派和其他设备也都在网络上。
物联网对于实验和创新来说非常重要。但是,随着项目被匆忙完成,忽略安全性已经造成了严重的后果。这既适用于商业产品,也适用于业余项目。本文将专门讨论树莓派,因此本文更侧重于 DIY 项目。
你的树莓派上的安全
因为你的树莓派是一个 Linux 系统,所以适用于大型系统的安全建议也适用于你的项目。如果你在网上搜索 IoT 安全,大多数结果都是针对商业开发者的产品。有些也适用于 IT 员工,他们必须处理网络上出现的预期和意外设备。这些文章可能有很长的需求列表,看起来令人望而却步。但请记住,在商业领域,他们正在处理安全漏洞的各种监管后果。他们也有培训预算和薪水来激励员工克服长长的需求列表。
对于你和你在树莓派上的业余项目,坦率地说,我不想阻止你进行实验。 让我们以正确的角度看待问题——我希望扩大你对考虑安全需求的视野。例如,将你的设备暴露给攻击者会允许他们使用它从你的网络攻击其他人。或者你的设备可能包含你宁愿保密的数据。本文将为你提供一些工具,以及一些思考问题的方法。
不幸的是,风险是互联网生活的现实。 那里是一个丛林,或者有时更像一个战区。 但是,你可以采取明智的步骤来合理地保护你的树莓派和其他 IoT 设备。 所以不要让它吓跑你。
树莓派的考虑因素
在其他任何事情之前,必须首先提出的一个技巧是。 更改设备上的密码——不要将它们保留在默认设置。 默认密码很容易查找。 因此,这是攻击者总是会尝试的常见事情。
你的设备是什么样的目标?
在考虑你的设备的安全时,重要的是它的用途和它上面的内容。 你需要考虑是什么会使它成为目标。 这些攻击可能来自各种不同的来源,例如由操作系统的某人安装的病毒,从网络自动闯入的蠕虫,或手动执行攻击的个人。 考虑到这一点,让我们看看是什么可能使你的系统成为目标。
设备上有哪些数据? 密码或许可以重用来攻击其他系统。 设备是否具有 Web 界面,攻击者可以分析该界面以查找更多攻击方法? DIY IoT 设备不应具有财务或医疗数据 - 但会发生糟糕的想法。
你的设备控制哪些硬件? 你不希望摄像头受陌生人控制。 家庭自动化和电器是你希望正常运行的东西 - 攻击者可以控制或禁用什么? 我之前看过一些文章,讲述了一些树莓派或 Arduino 项目,它们通过来自电话或 NFC(近场通信)标签的信号自动解锁前门。 如果有人闯入该系统,他们可以解锁门。
该设备与什么通信? 如果你的项目是网络路由器,攻击者是否可以使用它来监视你的网络流量? 这些是可以安装加密 MiTM(“中间人”)攻击以窃听加密数据的地方。
设备显示哪些信息? 攻击者是否可以禁用或破坏显示器? 例如,如果你有一个树莓派在办公室的监视器上显示工人时间表或软件构建状态,你肯定不希望它突然显示广告或更糟的东西。
仅仅在网络上就可以使其成为目标。 即使设备上没有其他对你有价值的东西,它连接到 Internet 这一事实对攻击者来说也是有价值的。 不安全的设备容易受到蠕虫的自动收割。 它可能成为僵尸网络的一部分,或者可以用作匿名中继来攻击其他站点。 这使得攻击者更难追踪,直到调查要求你提供信息。 你可能不想处理这个问题。 所以不要让你的设备暴露给它。
识别攻击面
在计算机安全中,“攻击面”一词是指系统暴露于潜在攻击的所有方式的集合。 这些不一定是漏洞,只是寻找它们的地方。 在此步骤中,我将考虑所有可能的外部访问暴露。 它包括网络、物理接口、数据库、Web API,甚至操作它的人员。 一个有用的资源是 OWASP(开放 Web 应用程序安全项目)的攻击面分析速查表。
正如速查表所说,该列表很快变得令人难以承受。 你需要一些方法来考虑如何优先处理实际重要的潜在攻击路径。 你要避免不重要的时间浪费。
表 1:风险矩阵的示例。
表 1 显示了风险矩阵的示例。 它比较了事件的可能性及其影响的程度。 你可以确定它的严重程度以及如何针对竞争问题进行优先排序。 虽然它很简单,但像这样的决策会延续到生活的其他领域。 例如,业务经理通常必须根据人员、资源、金钱和时间的潜在用途做出决策,而这些需求超出了可用范围。 在航空领域,FAA 制作了一个类似的表格来训练飞行员进行航空决策。 例如,如果在飞行中发生紧急情况(机械、医疗、天气等),则使用这种思维方式来决定是继续前往目的地、转移到另一个机场还是返回飞行起点。
同样,当你分析树莓派项目的攻击面时,有些事情比其他事情重要得多。 解锁你的前门或控制安全摄像头的树莓派也是你家物理安全的一部分。 它至关重要。 但是,显示游戏且未连接到网络的树莓派可能不是紧急安全问题。 这就是你可以缩小压倒性列表的方式。
让我们看看是什么构成了你项目的攻击面。
如果在网络上,即使在防火墙后面,那也是一种暴露。 所有侦听网络套接字的程序都成为攻击面的一部分。 以 root 身份运行 netstat -ap 会显示哪些程序正在侦听套接字。 关闭并卸载任何不需要侦听网络的软件。 这会减少系统的攻击面。
在需要运行的程序中,查看服务器程序和 Web API。 确保你拥有最新的安全更新,并知道在哪里查找新更新。 确保软件已针对其安全建议正确配置。 在基于 Debian Linux 的 Linux 发行版(例如 Raspbian 和 Ubuntu)上,使用此命令更新系统上安装的所有软件包。
sudo apt-get update && sudo apt-get upgrade
在基于 RPM 的 Linux 发行版(例如 Fedora)上,此命令将更新系统的软件包。
sudo dnf update
物理接口也需要考虑。 键盘和鼠标很明显。 即使你删除了它们,是否有攻击者可以连接自己的 USB 端口? USB 记忆棒是否能够在系统上运行程序?
窃取树莓派的启动 SD 卡或整个板呢? 如果你的项目是一个科学展览项目或会议展位,它将暴露给公众成员。 竞争对手或小孩可能会带走不安全的设备。 在这种情况下,适当锁定的外壳将减少项目的攻击面。
当考虑其他一切时,周围的人员可能是攻击面的一部分。 “社会工程学”是一种欺骗手段,有人说服授权用户做一些不应该做的事情或泄露不应该泄露的信息。 例如,如果你的团队可以查找客户数据,当有人声称是客户但实际上是竞争对手或小偷时会发生什么? 你能充分识别你的客户并抓住这样的诡计吗?
询问你的家庭安全系统的友好人士呢? 这可能是为盗窃做准备。 因此,请确保家中的每个人都知道不要讨论安全系统。 如果信息不经意地泄露,请更改系统。
物联网 (IoT) 考虑事项
当前计算机安全方面的建议是,从设计阶段就考虑到安全性。但是,如果您只是将您的 Raspberry Pi 用作 DIY 项目进行实验呢? 您可能只是在学习过程中逐步添加东西。 所以没有设计阶段。 尽力而为就好。 请记住本文和其他资源。
代码审查
在专业或开源软件开发中,强烈建议进行“代码审查”以帮助发现错误。 这是处理不可避免的人为错误的好方法。 仅仅是让另一双眼睛阅读任何代码,通常就能发现作者忽略的错误。 对于您自己的 DIY 项目,您可以利用这种经验,请朋友互相审查彼此的项目,以发现错误和安全问题。
加密
对于网络连接,请使用加密。 即使是最初的 Raspberry Pi 1 也足够强大,可以进行加密。 将 Web 服务器配置为使用带有 SSL/TLS 的 HTTPS。 使用 SSH 进行远程登录。 几乎在任何情况下,您都可以使用软件包。 因此,您不必成为密码学家才能使用密码学。 让我们快速了解一下加密的类型。
密钥加密使用相同的密钥字符串来加密和解密。 所以它也被称为“对称”加密。 危险在于如何存储密钥并将其分发给授权用户。 一旦暴露,攻击者就可以使用它来解密所有用它加密的内容。 它被称为“密钥”,因为您必须对密钥保密。
还有 公钥加密,它具有单独的数学相关密钥,每个密钥都可以解密另一个密钥加密的内容。 由于它使用不同的密钥,因此也称为“非对称”加密。 通常的用法是,一个密钥是私钥,必须保密。 另一个密钥可以公开发布,它被称为公钥。 公钥可用于解密任何用私钥加密的内容,并证明它来自您。 公钥/私钥对可以代表个人用户或服务器机器。 这就是 SSL/TLS 用于保护您的 HTTPS Web 请求的方式。
另一种形式的加密是单向哈希。 任何哈希算法都会将字符串转换为短的、固定大小的值。 我强烈建议将密码存储为哈希值,而不是纯文本。 这样,用户知道他或她的密码,并且软件通过哈希算法运行它以验证它是否与存储的哈希值匹配。 攻击者无法轻易地反转存储的哈希值。 即便如此,我们仍然需要告诉用户不要使用字典中的单词作为密码。 因为获取密码哈希值的攻击者可以尝试哈希字典中的所有单词,以查看是否存在匹配项。 这被称为字典攻击。
密码绝不应在未经加密的情况下“以明文”存储或传输。
现有的软件包
在构建项目时,尽可能使用现有的软件包。 原因是,通常情况下,重新发明轮子会导致无意中产生更多的漏洞。 现有系统更有可能经过审查并已修补漏洞。
连接到互联网
如果您的 Raspberry Pi 项目不需要连接到互联网,您可以断开网络连接,从而消除大量攻击面。 如果您需要它在网络上,请考虑使用多层防御,例如 iptables 防火墙,以及关闭不必要的服务器程序。
请务必考虑连接的客户端和服务器端的网络安全。 Raspberry Pi 可以是客户端或服务器。
如果可能,请尝试将 SELinux(安全增强 Linux)切换到强制模式。 它会自动捕获许多滥用行为。 不幸的是,这需要学习一些手册——当它拒绝您打算执行的操作时,请记住只允许该操作。 如果您养成了简单地允许 SELinux 抱怨的所有事情的习惯,最终您将为攻击者打开大门。
如果您的项目具有 Web 界面,请考虑并避免 OWASP 十大 Web 应用程序安全错误。
安全警报
请注意 Raspberry Pi 项目中使用的软件的安全警报和补丁。 首先要查找通知的地方是您安装的软件的开发人员。 检查他们的网站上的邮件列表、RSS 源、社交媒体或他们分发警报的任何方式。
以下是一些更有用的软件安全警报来源。
- 美国计算机应急准备小组 (U.S. CERT),DHS(美国国土安全部)
- 国家漏洞数据库,NIST(美国国家标准与技术研究院)
- CVE(通用漏洞和披露),Mitre Corp.,与 DHS 签订合同
玩得开心! 心中要有安全
在短暂的历史中,物联网已经因安全问题而声名狼藉。 最近一个重要的新闻是 2016 年 10 月对 Dyn Networks 的 DDoS(分布式拒绝服务)攻击。事实证明,Dyn 的互联网域名服务器是一个单点故障,一旦禁用,就会关闭 Twitter、Netflix、CNN、The Guardian 以及北美和欧洲的许多其他主要网站。 它是如何发生的? 数以千计的物联网设备被攻击者控制,并变成了机器人军队或“僵尸网络”,这些僵尸网络以网络流量淹没了 Dyn 的服务器。 在巨大的负载下,他们无法为合法用户提供服务。 攻击者甚至不必闯入这些网站。 他们只是禁用了网络,以便用户无法访问它们。
因此,您的首要任务不是成为该问题的一部分。 不要创建不安全的设备,这些设备可能成为僵尸网络的一部分。
您可能已经猜到保护您的设备包括保护您的设备免受互联网的侵害。 但事实证明,您还需要考虑保护互联网免受设备的侵害。 您不想受到攻击 - 并且您不想帮助攻击他人,即使是无意中。
但是,还有其他更直接的后果。 根据您的设备的功能,它可能包含有关您的数据。 如果设备在家中或周围有安全摄像头,那么隐私影响是显而易见的。 但是很多其他数据也很敏感。 如果其他人无权拥有它,那它就是敏感的。
计算机和网络安全领域还有很多内容,最近称为网络安全。 但我没有足够的篇幅在这篇文章中讨论。 我希望我已经让您在适合您的 Raspberry Pi 和 IoT 项目的水平上思考了安全性,而没有吓跑您去玩耍、实验和创新。 这就是关于取得平衡。 不要让挑战阻止您尝试。 只要了解保护项目安全的全局即可。 随着事物的变化,我们所有人总是需要学习更多。
您可以在 Twitter 上找到我 @KO6YQ。 我要感谢 Tony Vargas 在本文的初步审查中提供的帮助。
5 条评论