Notes about undocumented facilities of Cisco IP Phone and CNU-OS

Cisco IP Phone - SSH access

Overview

Here we just try to aggregate information about Cisco IP Phone, in patricular, the ability of SSH access and related "known-how" about CNU-OS.

Заинтересовавшись некоторое время назад этим вопросом, я обнаружил, что информации в открытых источниках недостаточно мало. Я предлагаю постараться общими силами расширить знания о структуре, возможностях операционной системы CNU-OS, различных hackish ways. Приветствуется любая помощь, советы, комментарии, опыт других людей, ссылки на любую литературу по данной теме. В качестве площадки выбран этот простой блог только потому, что это было наиболее простое и быстрое решение.

What we know


Cisco IP Phone is based around a Broadcom BCM1100 IP Phone Processor (PDF datasheet) which includes a 100 MHz (110 DMIPS) RISC processor, 40 MHz DSP with dual-MAC (280 MIPS), 10/100 Ethernet switch and three analog CODECs capable of supporting narrowband and wideband sampling. Attached to this core is 32MB of DRAM and 16MB of Flash Memory (source link 1, 2).

Это становится ясно из команды:

$ uname -a
CNU-OS  8.3(2.27) 3.3(0.2) CP-7911G Titan2-1(MIPS32)
$ uname -a
CNU-OS 8.1(0.89) 3.3(0.1) CP-7931G Titan2-1(MIPS32)
$ uname -a
CNU6-OS 8.5(2TH1.9) 3.3(0.3) CP-7941G BCM1100-C1(MIPS32)
$ uname -a
CNU6-OS  8.5(2TH1.9) 3.3(0.3) CP-7970G BCM1100-C1(MIPS32)
$ df -h
Filesystem    Size   Used  Avail Capacity  Mounted on
/dev/rd0a     812K   812K     0B     100%  /
/dev/fd0a      15M     7M     8M      45%  /flash0
/dev/fd1a     129K    30K    99K      23%  /flash1
/dev/rd0c      54K    53K     2K      98%  /usr/cache
/dev/rd0d     104K   104K     0B     100%  /usr/ram
Но для того, чтобы ее выполнить, сначала необходимо попать в shell операционной системы телефона. В современных Cisco IP Phone серии 7911, 7941, ... есть возможность войти по SSH. Для этого в конфигурационном файле телефона (Default.cnf.xml) должны быть заданы следующие параметры (source):

<device>
 ...
  <sshUserId>user</sshUserId>
  <sshPassword>pass</sshPassword>
 ...
<device>
Как сделать так, чтобы телефон получил эти параметры. Существует масса возможностей это сделать. В конечном итоге, вам необходимо любым способом указать TFTP-сервер, который сожержит cnf.xml файл с вышеуказанными параметрами.

В CUCME (CME) (Cisco Unified Communications Manager Express) в версии 7.0 и выше появилась специальная команда:

cucme#conf t
cucme(config)#telephony-service
cucme(config-telephony)#ssh userid user password pass
В CUCM (CCM) (Cisco Unified Communications Manager) в CCMAdmin интерфейсе есть спец. поля для этого.

В случае использования IP PBX Asterisk, наверное, необходимо руками править cnf.xml.

Common universal step-by-step solution for SSH access to Cisco IP Phone 7911, 7941, ...
  • Допустим, вы на работе/дома, перед вами стоит телефон, который подключен к неизвестному IP PBX (CUCME, CUCM, Asterisk, any other) и который работает по любому протоколу (SCCP, SIP).
  • Сначала необходимо выяснить IP address телефона. Для этого мы смотрим параметр Settings > Preference > Network settings > IP Address.
  • Теперь выясним есть ли какие-то препятствия в виде Access-Lists (ACL) between IP Phone and you computer. Common way for that is http://phone_ip/ from your computer or "telnet phone_ip 22". Если это работает, значит можно перейти к следующему пункту.
  • Launch TFTP-server on your computer. It may be one of the known free utilities: TFTP32 (win), tftpd or atftpd (nix). Create configuration file Default.cnf.xml in TFTP-server root dir.
  • Create common (XMLDefault.cnf.xml) or specified for certain IP Phone (SEP001122223333.cnf.xml) configuration file, witch must contain «callManager» section with any parameters. Otherwise it will not be effective (it is true for at least Cisco IP Phone with modern SCCP firmware). Shortest and working configuration file list below:
<device>
<devicePool>
<callManagerGroup>
<members>
<member  priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
</ports>
<processNodeName>127.0.0.1</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>
<sshUserId>user</sshUserId>
<sshPassword>pass</sshPassword>
</device>
  • Copy configuration file in TFTP server root folder.
  • Set parameter Alternate TFTP as Yes and point out TFTP Server 1 as IP address of you computer.
  • Restart Phone e.g. by pressing «Settings» then **#**
  • Try to SSH access to IP Phone using e.g. PuTTY (download «PuTTY Portable» for Windows v0.60 rev 3). Note that after login as user defined in .cnf.xml configuration file (user/pass) prompt will change and you need to login as one of internal users, such as default/user (source).
login as: user
password: pass
login: default
password: user
$ id
uid=256(default) gid=256(usr) 

CNU-OS Users

Username Password Function
default user Non-root user. Default shell is «/bin/sh».
debug debug User for debug only. From default user we also can use «/bin/debugsh». For further information you can look at Cisco IP Phone debug interface description by Eric Shalov.
log log User for viewing log only like «tail -f /var/log*». From default user we can use «/sbin/strace» (probably like system call tracer strace).

$ cat /etc/passwd
root:8:0:0:Superuser:/:/bin/nologin
syslog:8:1:0:System Logging:/usr:/bin/nologin
netwk:8:2:0:Network Admin:/etc/inetd:/bin/nologin
security:8:3:1:Security Processes:/usr:/bin/nologin
debug:BQTMQYWL:4:256:Debug Shell:/usr/local:/bin/debugsh
log:OYPTEZXR:5:256:trace shell:/var:/sbin/strace
default:MZPUHGQY:256:256:Default User:/home/default:/bin/sh
$ cat /etc/group
sys::0:root,netwk,syslog
sec::1:security
usr::256:default,debug,log

CNU-OS Shells


/bin/sh
/bin/cnush
/bin/debugsh

How to transfer file

  • For transfer file to Cisco IP Phone you can use tftp client from user 'default':
$ tftp
 
   TFTP: usage - tftp -s address srcFile dstFile 
 tftpAddr = address of tftp server - ex: 10.1.1.1 
 srcFile  = file to be retrieved - ex: sepxxx.cnf.xml 
 dstFile  = filename in CNU file system - ex: /bin/sepxxx.cnf.xml 
 
$ tftp -s 192.168.1.1 filename /usr/cache/
Requesting filename from 192.168.1.1
Finished --> rcvd 46 bytes

  • For transfer file from Cisco IP Phone you can use a trick with copy interest file to temporary folder (/etc/load.hist) which accessible via http (http://PHONE_IP/FS/cache/load.hist):

$ cp /etc/load.hist /usr/cache/

Если у вас будут какие-либо предложения, то я готов их реализовать незамедлительно.

What we want to know
  • Exact name of CNU-OS, transcript of abbreviation (Cisco Networking Unix?).
  • Method for generate relevant password from «challenge».
  • Any how to login as root.
  • How to manage .sbn files (how to extract jar*.sbn) and any related information.
  • Interesting experience with CNU-OS.
Related links
Thanks

No comments: