在将其连接到Internet(尤其是在公共IP地址上)之前,如何防止入侵和恶意软件?


60

由于大量的Raspberry Pi在野外,并且它们的大组配置完全相同(当安装了带有少量可用映像之一的新闪存SD卡时),它们很可能成为诱人的目标恶意软件,包括僵尸网络。

如何减轻这种情况?

众所周知,应该更改“ pi”用户(Debian)和“ root”(Arch)的密码。但是其他系统帐户(例如“ tli”,“ pnd”)又如何呢?通用密码在所有单位上都相同吗?

Pi的SD映像中安装的其他软件包中是否存在任何已知漏洞(例如,由于硬件限制或这些软件包的简化版本)?

我特别担心sshmysql和可能在新安装的映像上运行的任何其他服务。

Answers:


23

到目前为止,我对股票Debian Squeeze图片的注意事项:

  • / etc / shadow包含一堆用于非pi帐户(buildbot等)的密码哈希。当然,如果您还没有更改pi帐户的密码(或为自己创建一个新用户帐户并删除pi帐户),还可以编辑其他条目,并用* s代替散列。注意/ etc / passwd包含pi帐户的重复条目,这会使adduser / deluser变得混乱,只需删除其中一个即可。

  • 默认的ssh守护程序配置允许远程root登录。这应该被禁用。

  • 值得使用netstat来检查侦听连接的事物集;与典型的最小Debian netinst相比,正在运行的东西数量惊人。它通常是减少接触只是你的东西是一个好主意需要,所以首先禁用或防火墙关闭一切,然后暴露只是你刻意想在公共互联网上可见(通常只是SSH或ssh + HTTP)的服务。

  • 您需要更改ssh主机密钥,而不是使用映像中的密钥(AIUI,最新映像实际上是在首次启动时重新生成它们)


1
我不认为您的第一句话有问题。这些额外的用户有什么用?他们不应该被禁止登录吗?您可以尝试尝试检查su它们。
Jivings 2012年

2
我将给出-1。主要是因为建议您手动编辑阴影文件。这是一个非常糟糕的主意。
Jivings 2012年

@Jivings不,他没有。他可能暗示会使用vipw; 那是个坏主意吗?不,这不对。+1表示使用vipw
user2497'7

41

解决漏洞的方法有很多,但是您首先应该知道Linux不像其他操作系统那样容易受到入侵。这主要是由于缺少针对* NIX的恶意软件。不过,您希望了解可以访问系统的方式。

密码

首先,您应该更改所有能够登录的用户的默认密码。对于Debian,这只是默认用户Pi。对于Arch Linux,这是超级用户root。以用户身份登录时,通过passwd在命令行上输入密码可以更改。

鼓励使用安全的密码策略,因为对默认用户进行蛮力字典攻击非常简单。选择一个体面的中等长度密码。

朦胧

远程访问可能是最重要的安全漏洞。我们在这里可以使用的名称被默默地称为安全。常见的攻击方法是扫描一定范围的IP地址中的开放端口。因此,我们可以采取的最简单的对策之一就是成为不使用默认端口的用户

这里要做的就是更改常用协议的默认端口。例如,默认的SSH端口为22,FTP为21。在我的系统上,SSH使用222和FTP 221,这应该使这些协议不受任何自动攻击的影响。

连接安全

首先,最重要的安全问题是root帐户应该能够通过SSH登录。您可以/etc/ssh/sshd_config通过注释或删除以下行来禁用文件中的root登录:

PermitRootLogin yes

默认情况下应将其设置为no,但是最好确保。


如果您经常使用SSH,并且担心中间人攻击,针对您的密码的字典攻击,那么您可以使用SSH Keys

与密钥认证相比,基于密钥的认证具有多个优点,例如,与纯口令相比,密钥值的暴力破解难度要大得多。

要设置SSH密钥身份验证,您需要首先创建密钥对。这最容易在客户端计算机(您要用来访问Pi的计算机)上完成。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

如您所见,这已经创建了两个文件,私钥id_rsa和公钥id_rsa.pub

私钥只有您自己知道,应该加以保护。相比之下,公共密钥可以与您要连接的任何SSH服务器自由共享。

所以,我们希望做的就是复制公开密钥到树莓派。我们可以很容易地做到这一点:

ssh-copy-id pi@address

piRaspberry Pi用户名在哪里,是Pi address的IP地址。

我要重申,我们分配公共密钥。私钥是您的。紧紧抓住它,释放该键会破坏系统的安全性。

拱维基对如何工作的一个很好的说明:

当SSH服务器记录了您的公共密钥并看到您请求连接时,它将使用您的公共密钥来构造并向您发送挑战。此挑战就像一条编码消息,在服务器授予您访问权限之前,必须先对其进行适当的响应。使此编码消息特别安全的原因是,只有具有私钥的人才能理解它。虽然可以使用公共密钥对消息进行加密,但是不能将其用于解密相同的消息。只有您(私钥的持有者)才能正确理解挑战并做出正确的响应。

有关公钥身份验证安全性的更多信息,Wikipedia进行了详尽的解释

有了SSH安全性,您就可以进行大量的加密安全数据传输。实际上,如果需要,其他所有端口连接都可以通过SSH进行路由。您甚至可以通过SSH转发X会话,以便它出现在另一台计算机上。

举一个有趣的例子,昨天我在台式机上运行Eclipse,在Raspberry Pi上查看它,并通过上网本控制鼠标和键盘。这就是SSH的功能。

权限

文件权限是Linux安全系统的关键。它们会影响谁可以看到您的文件和文件夹,并且对于保护数据非常重要。例如,以普通用户身份登录到Raspberry Pi并运行:

cat /etc/shadow

shadow文件包含系统上用户的加密密码,因此我们不希望任何人看到它!因此,您应该看到以下响应:

cat: /etc/shadow: Permission denied

我们可以通过查看文件的权限来了解为什么这样做:

ls -l /etc/shadow
-rw------- 1 root root 821 Jun 11 22:13 /etc/shadow

这告诉我们该文件由root拥有,并且只有所有者具有读/写权限。让我们分解一下输出。

-rw-------

这是权限的状态。第一位告诉我们文件的类型(-表示常规文件)。接下来的三位代表提供的有关行动所有者的文件。后三位代表group,后三位代表其他人或其他人。因此具有完全权限的目录如下所示:

drwxrwxrwx  10 root root   280 Jun 20 11:40 tmp/

这就是所有者,组和其他所有人的读取,写入和执行权限。

下一个重要部分是两个名称。就我们而言root root。第一个用户是文件的所有者。第二个是用户组。例如,通常会看到:

drwxr-xr-x  10 pi users   280 Jun 20 11:40 home/pi

这将允许该用户pi在其主目录上具有读/写访问权限,而对所有其他用户具有读访问权限。

最常使用八进制值引用和控制权限。例如,如果我们只想为所有者设置rw,我们将输入:

chmod 600 /path/to/file

这是一个基本概述,有关Linux文件权限的更多详细信息,这是一篇不错的文章。


在保护文件和文件夹时,这种理解很重要。例如,假设我们刚刚设置了SSH密钥。我们绝对不希望任何其他用户看到我们的~/.ssh目录,否则他们将可以获取我们的私钥。因此,我们删除了他们的读取特权:

chmod 700 ~/.ssh
ls -la ~/.ssh 
drwx------   2 james users  4096 Jun 18 03:05 .

我希望这可以消除您对保护Linux的担忧。从中您应该能够看到它是一个相当安全的系统,并且如果您小心的话,应该不会有安全问题。


10
我不同意您的晦涩言论,它会花费几秒钟的时间来映射设备上打开的端口并找到ssh服务器。禁用密码登录并坚持正常端口。我怀疑您根本不需要ftp,而是使用scp。
Alex Chamberlain 2012年

2
@AlexChamberlain对于攻击者来说,这是一个暂时的减速,但绝不是一个完整的解决方案。
Jivings 2012年

4
更改默认端口往往会降低门的敲门声,这通常会导致字典攻击。当然,这是一个非常小的安全措施,但它还有其他好处,即可以限制日志膨胀。它比安全性更像是一种预防措施,但仍然值得考虑。
Beeblebrox

2
@AlexChamberlain,在debian ssh密钥崩溃期间,我们在端口22上记录了很多尝试,其他地方都没有。在这种情况下,在黑客试图找出哪些被利用主机有价值的同时,在其他端口上运行将为您节省大量时间。如果攻击者专门针对您,SBO的帮助几乎没有。
约翰·拉鲁伊

1
我同意。我的观点是,这不仅是假说的 -在最近的记忆中,有一段时间SBO确实提供帮助,并且发挥重要作用。
约翰·拉鲁伊

6

为了防止暴力破解攻击,您可以安装和配置fail2ban。它将解析日志文件(例如/var/log/auth.log),并尝试检测几次登录尝试是否失败。然后,它将自动使用禁止源IP地址iptables

互联网上有很多howto。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.