远程团队安全最佳实践指南
已发表: 2022-03-11每当我告诉我的朋友我为一个从未见过的客户远程工作时,他们都会问我:你远程工作安全吗? 我的回答是响亮的“是的……但是,这取决于您创建远程工作者安全策略的程度。”
我住在巴基斯坦,在那里我编写对地球另一端的客户有价值的代码。 我的客户从未与我握手,也从未见过我在哪里工作。 然而,我希望确保客户机密和代码受到保护。 在您的团队成员不熟悉您的面孔或声音的世界中,您如何防止安全漏洞? 答案是:非常小心。
不久前,我们认为为了保证应用程序的性能和安全性,我们需要在我们的私有数据中心中运行它们。 然后云出现了,我们接受了在可扩展的按需平台上运行应用程序的成本和性能优势,而无需在房间内维护一组服务器。
让我告诉你一个众所周知的秘密:
这只是别人的电脑。
现在,Uber 1和 Stripe 2等公司在云提供商的服务器上存储和处理实时客户位置信息以及信用卡和支付,同时遵守 PCI 合规等严格的安全标准。 他们通过采取严格的政策来做到这一点,以确保他们的生产数据保持安全。
如果公司可以保证他们的整个生产环境在他们的私有数据中心之外运行时仍然安全,我们当然可以使用远程开发团队来确保您的开发安全。 毕竟,整个公司都能够完全远程运行。 Toptal 是一家仅限远程的公司,我们正在招聘。
什么是“安全”以及如何“确保安全”
在整篇文章中,当我谈到“安全”时,我指的是信息安全。
“信息安全”一词是指保护信息和信息系统免受未经授权的访问、使用、披露、中断、修改或破坏。 – 44 美国法典§ 3542
没有完美的安全性,但“安全”意味着您已采取合理的措施来加强信息安全。
具体来说,当您说“我的工作环境是安全的”时,您的意思是说您已采取合理措施保护您所关心的数据、代码或其他机密信息,并确保其完整性。 您还采取措施确保您访问敏感信息系统的权限不会被您自己或未经授权的个人以不利于拥有此信息的组织和这些系统的目标的方式使用。
远程团队确实比集中式团队拥有更大的攻击面。 与您可以在防火墙和公司工作站后面物理锁定机密信息的集中式团队不同,作为远程工作人员,我们鼓励甚至要求您携带自己的设备 (BYOD)。 更重要的是,由于您的大部分通信都是在线进行的,因此您更容易受到社会工程和身份盗窃的影响。 但是,有了正确的策略集,您当然可以将违规风险降到最低。
安全方面没有灵丹妙药。 通常,在安全性和便利性之间存在权衡,由您决定您希望采取多远的安全实践,但请记住,您的团队只有最弱的成员才安全。 让我们看一下一些常见的安全攻击、防御策略,最后讨论一个示例远程安全工作者策略。
三种最常见的对抗性攻击类型
如果你不知道你将要面对的是什么,你就没有准备好。 对手可以在攻击中使用多种策略,但大多数策略可分为三类。 虽然此列表并不详尽,但以下是恶意黑客可能使用的三种常见攻击媒介类型:
- 社会工程学
- 网络钓鱼
- 恶意软件感染
社会工程学
也被认为是人类黑客,社会工程是操纵人们以不符合他们最大利益的方式行事的做法; 这可能包括泄露机密信息。
社会工程攻击可能会试图利用您的同情心,试图让您规避良好做法,或者制造一种紧迫感,让您通过担心如果您不遵守会对您采取负面行动而绕过最佳做法。
社会工程学的例子包括:
- 一位女士打电话给手机运营商,并说服支持人员更改某人的帐户,而 YouTube 上播放了一段婴儿哭泣的视频。
- 攻击者通过 CFO 的电子邮件地址向 CEO 发送电子邮件,并授权 180 万美元的资金转移。
网络钓鱼
网络钓鱼是窃取您的凭据的最常见方法。 想象一个看起来像 Facebook 的网站,你登录后认为它是真实的。 网络钓鱼是指攻击者创建的网站看起来合法但不合法。
你能认出假脸书吗? 提示:它不在 Facebook.com 上。
有时黑客可以毒害你的互联网并将他们的网站注入 Facebook 域,这被称为中间人攻击,但不要担心,你的浏览器会警告你这些。
鱼叉式网络钓鱼是另一种形式的网络钓鱼,其中网络钓鱼页面可能是为您或您的组织定制的。 这使您更有可能爱上它,尤其是与社会工程学结合使用时。
我给你讲一个故事:当我在学校时,一个最近了解网络钓鱼的人创建了一个虚假的 Facebook 网站,并将计算机实验室的主页更改为他的创作。 接下来他知道,这个人有三百个脸书账号密码。 这次攻击专门针对我的学校,结果证明是一次成功的鱼叉式网络钓鱼攻击。
并且认为只要有人费心查看地址栏,所有这些密码就会保持安全。
恶意软件感染
那里有数百种不同类型的恶意软件。 有些是无害的或只是烦人,但有些可能非常危险。 需要注意的最重要的恶意软件类型是:
- 间谍软件:静默安装并记录您的击键、屏幕、音频和视频。
- 远程管理工具 (RAT):允许完全控制您的计算机。
- 勒索软件:加密所有重要文件并让您为解密密钥付费。
为了故意让您在计算机上安装自定义恶意软件,攻击者通常使用社交工程:
- 攻击者在公司停车场周围放置“丢失”的 USB 驱动器以获取员工登录凭据。
- 一名男子将咖啡洒在简历上,要求接待员为他打印一份副本,因为他正在接受采访,从而导致公司计算机被 USB 中的恶意负载感染。 (来自人类黑客艺术的例子)。
您现在需要的七种网络防御策略
我们已经讨论了最常见的对抗性攻击方法,但我们如何避免它们?
策略 1:正确的密码管理
我讨厌密码。 在那里,我说了算。 我坚信用户名和密码组合是现有的最弱的用户身份验证形式。 密码只不过是由现有的最糟糕的伪随机数生成器生成的一串短字符串:人类的大脑。
我需要一个秘密词,嗯? 我的中间名和出生年份怎么样,肯定没有人能猜到! – 每个人曾经
更糟糕的是,为了方便起见,人们倾向于重复使用密码。 这使得某人可以使用相同的密码登录银行和家庭 WiFi,同时密码很可能以他们最喜欢的乐队的名称结尾。 惊恐的事件!
多年前,我决定做以下事情:
- 使用密码管理器
- 使用强密码短语而不是密码
使用密码管理器
当我说在安全性和便利性之间进行权衡时,它不适用于这里。 要么您是安全的并使用密码管理器,要么您不是。 中间没有。 您必须使用密码管理器以获得良好的密码安全性。 我会解释的。
- 您的所有密码都是唯一的吗?
- 如果我发现了您的一些密码,您的其余密码会保持安全吗?
- 您的所有密码都是使用至少 32 位熵创建的吗?
- 您的密码是否仅以加密形式存储?
- 您是否完全记得注册时使用的每一个密码?
- 您是否对本网站的密码泄露持肯定态度?
如果您对上述任何问题的回答为“否”,则您需要一个密码管理器。 一个好的密码管理器会为您随机生成密码,并安全地存储它们。 您使用什么密码管理器并不重要,只要您使用一个即可!
我使用 LastPass 是因为我喜欢他们的事件报告的透明性、与朋友分享我的凭据并随时撤消分享的能力,而且我喜欢移动同步是他们免费计划的一部分这一事实。
我已经使用 LastPass 多年了,他们的安全挑战告诉我,我是他们前 1% 的安全意识用户。
强密码短语而不是密码
这听起来可能违反直觉,因为我在上面要求您使用密码管理器,但在某些情况下密码是不可避免的:您需要为您的密码管理器设置一个强主密码,或者登录您的计算机。 在这些情况下,请使用具有高熵的安全且令人难忘的密码。
说到熵,让我们来谈谈它。 我所说的这个“熵”是什么?
熵是一个统计参数,它在某种意义上衡量语言中文本的每个字母平均产生多少信息。 如果以最有效的方式将语言翻译成二进制数字(0 或 1),则熵 H 是原始语言每个字母所需的二进制数字的平均数。 ——克劳德·香农
如果那句话很难消化,那也没关系。 基本上,密码的熵是从集合中随机选择的,是以 2 为基数表示的集合中元素的总数。例如:如果您的密码长度为 4 个字符,且只能包含小写字母,则熵为随机生成的密码为 19 位,因为:
- 小写字母有26个元素
- 由这些字母组成的 4 个字符串是
26^4
= 456,976 - 以 2 为底的 456,976 是
log(456,976) / log(2)
= 19 位(四舍五入到最接近的位)
高熵密码的问题在于它们最终难以记住,例如c05f$KVB#*6y
。 为了让它们更容易记住,如果我们不使用单个字母,而是使用整个单词呢? 并使用了一千个单词的字典? 突然我们的字母表变成了一千个元素,我们可以用 7 个单词实现与 11 个字符相同的熵。
现在的不同之处在于,我们使用的不是密码,而是密码短语,它的长度要长得多。
以下 XKCD 漫画最好地解释了这个概念:
生成安全随机密码的最简单方法是前往此处。
策略 2:使用多因素身份验证 (MFA)
两因素身份验证 (2FA) 或两步验证都是同一事物的名称。 这是需要稍微习惯的事情之一,但 2FA 的安全优势远远超过成本,并且两次让我免于帐户泄露!
MFA 背后的想法很简单。 我们可以使用三件事来验证您的身份:
- 你知道的事情(秘密)
- 你有的东西(令牌)
- 你是什么(你的生物学)
使用两个比只使用一个更安全。
大多数网站通过要求密码来支持第一个身份验证因素,但越来越多的服务也开始支持第二个因素。 第三个因素通常被 Web 服务忽略,因为它需要专门的硬件; 就像手机上的指纹传感器一样。
如果您是团队的管理员,请考虑为用户创建强制策略以进行 2FA 设置。 这可确保密码泄露不会导致帐户泄露。
“你拥有的东西”有两种流行的形式:
- 您的手机
- U2F 键
使用手机进行 2FA
我想说的是:不要将 SMS 代码用于 2FA。 恶意人员劫持您的电话号码已成为常见做法。 故事几乎总是一样的:有人对运营商进行社交工程,将您的电话号码转移到另一家运营商。 我认识至少一个人成为这次袭击的受害者。
相反,使用基于时间的一次性密码 (TOTP),也称为“Google Authenticator”方法。 但是,我建议不要使用 Google Authenticator,而是使用 Authy,因为它会在云上加密和备份您的 2FA 令牌。 然后,即使您更换了设备,您也可以恢复您的 2FA 令牌……事实上,您可以在多个设备上使用相同的令牌。 这很方便。
使用 U2F 密钥进行 2FA
这是最简单、最强大的 2FA 方法。 我有一个 Yubikey Neo,可以在手机和电脑上使用。 为了证明我的身份,我只需插入我的硬件令牌并按下一个按钮。 我的代币是独一无二的,是一种实物代币; 我可以把它放在钥匙链上或钱包里。
策略三:时刻保持警惕
无论您认为自己有多安全,适度的怀疑都是一件好事。 警惕人们要求你做任何不寻常的事情。 您是否收到有人要求您重设密码的短信? 等一下,然后与他们进行视频通话。 请他们证明自己的身份。 没有人会因为你的谨慎而责怪你。
如果他们真的想抓住你,这不是妄想症。 ——哈罗德·芬奇,相关人士
他们真的是来抓你的。 有时,恶意用户没有理由去做他们所做的事情,除了这样做的意愿。
我的一个朋友曾经收到一位老熟人的消息,询问他们是否愿意成为他们在 Facebook 上的“可信赖联系人”。 我的朋友同意了,并被要求回复一个他们会在手机上收到的代码,我的朋友立即给出了这个代码……这就是我的朋友被社会工程学为她的 Gmail 帐户提供重置令牌的方式。 如果我的朋友从一开始就保持警惕,她就永远不会丢失电子邮件。
策略四:根据最小特权原则设计系统
最小权限原则要求在计算环境的特定抽象层中,每个模块(如进程、用户或程序,取决于主题)必须能够仅访问必要的信息和资源出于其合法目的。 – 维基百科
如果用户、应用程序或服务不需要某些特权,请不要将其授予。 您可以从这个原则推导出许多规则,但我将把它们留到下一节安全策略中。
让我告诉你一个故事:我曾经设计过一个应用程序,它可以接受用户在为他们生成的唯一地址上的比特币付款,然后将它们转发到一个中央安全存储地址。 如果你不熟悉比特币的工作原理,这里有一个简化的解释:你需要一个公钥来接收比特币(比如一个帐号)和一个相应的私钥来消费它(比如一个账户密码)。 比特币中的帐号和密码是加密链接的,不能更改。
我有几个选择来设计这个系统,但我决定走更长的路线。 我决定为了提示用户付款,应用程序不需要访问私钥。 因此,我没有设计一个可以接收和转发比特币支付的大型系统,而是设计了两个系统:
- 接收系统:从用户那里接收比特币并托管在公共互联网上。 它只包含地址的公钥。
- 转发系统:这是一个完全独立且锁定的系统,其唯一工作是监视比特币网络地址上的交易并将它们转发到安全地址。 它包含地址的公钥和私钥。
很久以后,在我停止维护应用程序后,公共接收系统被破坏了。 我立即将其关闭,但攻击者从未设法窃取比特币,因为公共系统根本不包含任何私钥。
策略 5:使用常识最佳实践
有些做法不需要解释。 您可能知道它们很重要,但我经常对有多少人(包括我自己)忘记拨动几个开关感到惊讶。 我将把这份清单留在这里:
- 打开你的防火墙
- 加密您的磁盘
- 启用加密备份
- 使用 SSH 密钥
- 使用安全的互联网连接
打开你的防火墙
防火墙根据一组规则控制进出您的计算机的网络流量。 它通过明确询问您是否允许新程序访问您的网络来工作,并且是您的第一道防线。
您的操作系统可能带有内置的防火墙。确保它已打开。
加密您的磁盘
全盘加密是一种神奇的能力,可以在没有密码的情况下使整个磁盘的内容变得无用。 如果您的笔记本电脑丢失或被盗,您可以放心,没有人可以访问您的数据。 启用此功能就像在 Mac 上打开 FileVault 一样简单。
现代手机还默认启用全盘加密。
加密您的备份
硬件出现故障,这是不争的事实。 你的机器有一天会出现故障,或者病毒会感染你的电脑,或者(颤抖)勒索软件病毒会接管你的电脑。 但作为一个务实的人,您可能已经设置了备份流程,我敢肯定……不是吗?
但是,即使有备份,您也必须保持警惕。 确保您的备份已加密,这样即使它们丢失或被盗,您也可以放心,您已采取合理措施保护受托数据的安全。
如果您有 Mac,Mac 上的 Time Machine 应用程序会自动加密备份。
使用 SSH 密钥
如果您从本文中拿走任何东西,请停止使用密码通过 SSH 连接到机器。 密码很难共享,如果它们被泄露,您的整个机器都会受到损害。 相反,只需运行ssh-keygen
即可创建 SSH 密钥。
要登录远程机器,只需将本地~/.ssh/id_rsa.pub
的内容复制到远程机器中的~/.ssh/authorized_keys
/.ssh/authorized_keys 即可。 您可能需要在远程机器上重新启动 SSH 服务,但仅此而已。
将您整个团队的 SSH 密钥添加到远程计算机上,无需任何人再次输入密码。 撤销团队成员的密钥就像从远程机器上移除密钥一样简单。
使用安全的互联网连接
当您与某人共享 Internet 连接时,您共享的不仅仅是带宽。 根据网站和您的互联网的配置,它们至少可以检测您访问的网站,最坏的情况是读取您传输的所有信息,包括密码、消息或电子邮件。
这很容易启用,也非常容易搞砸。 采取合理的预防措施以确保您的连接是私密的。 确保没有未经授权的人可以访问您的互联网连接。
使用 WPA2 密码保护您自己的个人 WiFi,如果您在当地咖啡店(或任何公共 WiFi)工作,则假设您正在被监视并使用 VPN 代理。
我对使用基于订阅的 VPN 犹豫不决,特别是因为滚动你自己的 VPN 是如此简单。 使用此单线 VPN 解决方案来托管您自己的。
策略六:小心对待秘密
秘密不是要公开的。 这就是为什么它们被称为秘密。 尽管如此,您有多少次因为通过 Facebook Messenger 将密码发送到生产 PostgreSQL 数据库而感到内疚? 确保您始终:
- 加密传输中的秘密
- 经常旋转它们
加密传输中的秘密
如果您必须通过聊天等渠道共享机密,请确保它们已加密。 作为练习,访问您经常使用和最旧的聊天客户端。 它可能是 Facebook 消息或 Whatsapp。 不管它是什么,打开并在您的消息中搜索短语“密码”。
如果这些机密已被加密,任何有权访问您的消息的人都无法使用它们。
经常轮换秘密
秘密存在的时间越长或被共享的次数越多,它被泄露的可能性就越大。 在一段时间后轮换秘密和密码被认为是一种很好的做法。
策略 7:建立加密身份
这当然是一种先进的策略,但我个人不明白为什么这不是一种普遍的做法。 考虑一下:您的同事认为您受到了损害。 他们如何将信息传达给真实的你? 如果互联网上的某个人必须共享重要的漏洞信息,他们如何安全地发送? 您如何确保您的员工在传输过程中安全地共享信息?
我最喜欢的例子是 Coinbase 的 keybase 配置文件,他们在其中对员工的 PGP 密钥进行加密签名。 他们更进一步,为合规部门提供了 PGP 密钥。 说真的,Coinbase,干得好!
就我个人而言,如果有人合理怀疑我的在线身份已被泄露,只需要求我使用我的密钥库配置文件中可用的 PGP 密钥签署一条消息。 我是唯一有权访问此 PGP 密钥的人,并且我已采取合理的预防措施以确保此密钥的安全,即使我的其他身份被泄露。
如果对消息的真实性有疑问,请让我签名。 如果您需要向我发送秘密,请使用我的公钥对其进行加密。
实施明确的远程工作人员安全策略
安全策略是对系统、组织或其他实体安全意味着什么的定义。 对于一个组织来说,它解决了对其成员行为的限制,以及门、锁、钥匙和墙壁等机制对对手施加的限制。 – 维基百科
安全策略是执行操作时必须遵循的强制性规则或协议。 上述策略很有帮助,但为了使它们更容易遵循,请为您的团队提供一组简单的规则来遵循。 当您的团队确切知道该做什么时,就更难搞砸安全性了。
让我们讨论要实施的远程工作人员安全策略的示例。
为您的员工实施的政策:
- NDA 和合同:确保没有适当的法律基础,任何员工都无法访问任何机密资源。
- 紧急联系信息:如果您的远程团队成员没有响应,请记下您员工的完整和紧急联系信息。
- 仅授予基本权限:如果您的团队成员不需要访问某些区域来执行其职能,请不要授予他们访问权限。 销售团队的成员不需要访问您的代码存储库。
- 密码管理器:确保您的员工可以使用密码管理器
- 强大的身份验证策略
- 最小的密码强度:我个人讨厌密码,对于我是管理员的组织,我要求密码至少包含 50 个字母数字字符。 如果您使用的是密码管理器,则遵守此政策是微不足道的。
- 强制密码重置:确保员工的密码经常过期以经常轮换密码。
- 双重身份验证:到处使用 2FA
- PGP 密钥
- 加密硬盘
- 加密备份
员工离开,但他们不应该随身携带您的信息。 即使您的员工离开公司,也要调整这些政策以保留数据:
- 公司电子邮件帐户:在您自己的域中为您的员工提供电子邮件帐户允许您禁用和审核他们的通信。
- 实时交流:尽管电子邮件很棒,但有时您的团队需要实时交流。 确保您的团队有一个集中的 Slack 或 IRC 频道。 这使您能够根据需要禁用或审核他们的通信。
- 集中式代码存储库:确保所有公司代码都存储在公司代码存储库中。 除非您需要对所有员工代码进行细粒度控制,否则公司对 GitHub 等公共 SaaS 产品的计划很好。 在后一种情况下,请考虑获取您自己的 GitLab 实例。
保护您的基础设施的政策:
- 保持系统更新:每天都会发现和修补安全漏洞,确保您应用这些修复程序是您的工作。 没有什么比发现漏洞是由几周前修补的漏洞造成的更糟糕的了。
- 锁定生产和登台环境:任何员工都不应访问生产或登台环境。 有时他们只是搞砸了。
- 创建强大的 CI/CD 流程:您总是希望部署“好的”代码,而直接的 CI/CD 流程始终可以确保这一点。
- 保护祝福存储库:如果您有一个自动化的 CI/CD 流程,请确保您的祝福存储库只能由项目经理编辑。
- 定义一个审查过程:为了确保没有“坏”代码通过被忽视,创建一个审查过程。 这可以像在合并之前要求最后一个独立的“我觉得不错”(LGTM)评论一样简单。
- SSH 密钥:如果您的应用程序需要提供 SSH 访问权限,请确保它们使用 SSH 密钥而不是密码。
- 考虑放弃 BYOD:预算团队可能认为 BYOD 是自无纸办公室以来最好的策略创新,但如果您负担得起,请考虑为您的团队提供可以实施严格安全策略的公司机器。
- 加密备份:您的数据很重要。
编写代码时的策略:
- 代码中没有秘密:由于版本控制的性质,在代码中添加数据时可能很难删除,而密钥很容易找到。
- 存储密码时使用 Bcrypt:在设计身份验证系统时,使用 bcrypt 对密码进行散列和加盐,而不是设计系统,或 (gulp) 以纯文本形式存储。
- 从日志中过滤敏感信息:无论是您的全局胡椒、应用程序的会话签名密钥还是用户的登录尝试,请确保这些信息不会泄露到您的系统日志文件中,任何有权访问的人都可以阅读它们。
- 授予所需的最低权限:如果您的应用程序只需要
READ
权限,请不要授予它WRITE
权限。 坚持最小权限原则。
创建响应计划
安全漏洞确实有时会发生,虽然在事后分析中会有足够的时间进行学习,但重要的是有一条明确的途径来保护所有数字资产。
如果确实发生安全漏洞,请花时间制定应急计划。 考虑您在以下情况下的操作:
- 您丢失了包含敏感数据的设备。
- 您的基础设施可能已被未经授权的一方访问。
- 您观察到团队中的某个人的行为与他们自己不同。
- 发现了一个安全漏洞。
您的应对计划中应包括的事项:
- 勤奋的文档:启用屏幕录制,为您的团队设置一个 wiki 以共享他们遇到的所有内容。
- 违规遏制:根据违规的范围,这可能就像禁用用户帐户、使服务器离线或关闭生产并联系您的用户一样简单。
- 建立内部沟通:启动一个专门的 Slack 频道,或者找到一种方法让任何人报告他们遇到的事情。
- 寻求帮助:呼叫所有受违规影响的团队。 这可能也是联系当局的好时机。
- 调查:找出被破坏的内容、破坏的程度以及我们可以采取哪些措施来恢复正常运营。
- 重新上线:创建、测试和发布修复程序以尽快恢复正常操作。 您的用户依赖您的服务来工作,一旦您可以保证稳定、安全的服务,就可以重新上线。
- 与您的用户交谈:不要让您的用户蒙在鼓里。 你能做的最糟糕的事情是停止你的服务而不向你的用户解释发生了什么。 建立实时更新通道; 这可能就像使用 Twitter 让他们了解情况一样简单。 处理完事件后,发布一份事后报告,讲述发生了什么、如何发生以及您为防止未来发生类似违规行为而采取的措施。
安全事件发生。 重要的是你如何处理你的反应。 到目前为止,我最喜欢的回应之一是在 2015 年,当 LastPass 在检测到异常网络活动时发布强制主密码重置。 我一直是 LastPass 的长期用户,尽管他们最近出现了安全问题,但我喜欢他们通过将客户的需求放在首位来回应客户的方式。
推荐阅读
重申:没有完美的安全性。 重要的是您确保您已做出合理的努力来保护您的数据安全。
这些安全实践应该使您和您的远程团队更难被黑客入侵。
如果你想读一个逃犯黑客的真实故事,我推荐 Kevin Mitnick的 Ghost in the Wires 。
如果你想进一步了解对方的想法,我推荐阅读:
- 社会工程:克里斯托弗·哈德纳吉(Christopher Hadnagy)的人类黑客艺术
- Kevin Mitnick 和 William L. Simon的欺骗艺术
我的罪行是好奇心。