Basic Security

From Phobos Wiki
Jump to: navigation, search

This is a basic guideline for securing TELEM-GWM. It is assumed that reader is familiar with TELEM-GWM configuration software gws.exe and has used Linux command line interface before.

Account Management

As the configuration of the TELEM-GWM is done over SSH it is important to change the default accounts passwords. As a minimum change the passwords for users martem and root.

Changing the Default Account Credentials

TELEM-GWM chips with default accounts and known passwords. By default two accounts have passwords set. Only user martem can be used for changing the configuration of the device as root is not permit by SSH daemon configuration.
Here is the default /etc/shadow files content:

root@Telem-GWM ~ $ cat /etc/shadow
root:$1$Urv3LxYa$hf.UwazXZLYQmhZ2KWfdk1:10933:0:99999:7:::
bin:*:10933:0:99999:7:::
daemon:*:10933:0:99999:7:::
adm:*:10933:0:99999:7:::
lp:*:10933:0:99999:7:::
sync:*:10933:0:99999:7:::
shutdown:*:10933:0:99999:7:::
halt:*:10933:0:99999:7:::
uucp:*:10933:0:99999:7:::
operator:*:10933:0:99999:7:::
nobody:*:10933:0:99999:7:::
default:*:10933:0:99999:7:::
martem:$1$9Z9vTc0h$eWWGwJgXC6H2o65V1p0Tl1:14477:0:99999:7:::
root@Telem-GWM ~ $


From command prompt issue command passwd to change current users password. For instance:

root@Telem-GWM ~ $ passwd
Changing password for root
New password: 
Retype password: 
Password for root changed by root
root@Telem-GWM ~ $

changes password for root. Similarly password for user martem can be changed.
gws.exe can be used to change passwords by pressing “Change Password” at “SSH Settings” dialog.
In order to change password for root first change the password for regual user. Then log in again and chage the root password with command passwd.

Adding New Users and Removing Old Accounts

New user can be created with command adduser. For instance:

root@Telem-GWM ~ $ adduser myco
Changing password for myco
New password: 
Retype password: 
Password for myco changed by root
root@Telem-GWM

creates new user myco. If new user needs the ability to configure the device it needs to be in the group gws. This can be done with command adduser. For instance:

root@Telem-GWM ~ $ adduser -G gws myco2
Changing password for myco2
New password: 
Retype password: 
Password for myco2 changed by root
root@Telem-GWM ~ $

creates new user myco2 and adds it to group gws so that myco2 can change configuration.

Now user martem can be deleted with command deluser. For instance:

root@Telem-GWM ~ $ deluser martem
root@Telem-GWM ~ $ rm -r /home/martem/
root@Telem-GWM ~ $

deletes user martem and it's home directory.

Restoring Default Accounts

Default accounts with their passwords are kept in default setup which can be restore with DIP switch.

Plain Text Passwords and Keys in Configuration

Passwords for SIM card, http and https are kept in plain text in different configuration files.

SIM card unlock pin is kept in sim1_chat or in sim2_chat.

Passwords for web access is kept in gwSetup.bin. gwSetup.bin is a configuration file for telem-gw, which is main application that runs on Telem-GWM. Setup in XML format is available from web as well. If this is not desirable then this can be disabled from Webservers configuration by un checking the “Enable configuration(gw6config.xml)” selection.

SSL, OpenVPN and IPsec private and public keys are kept in plain text inside the TELEM-GWM filesystem.

Setup History

TELEM-GWM backups automatically old setups. Old and current setup is kept in /usr/local/etc/telem.

myco2@Telem-GWM ~ $ ls -la /usr/local/etc/telem/
total 104
drwxrws--T    3 root     gws           1680 Dec 14 14:29 .
drwxr-xr-x    3 root     root           224 Dec 10 13:13 ..
-rw-rw----    1 root     gws            452 Dec 13 13:34 asciiart
-rw-r--r--    1 root     gws           4095 Dec 14 14:29 config.xml
lrwxrwxrwx    1 root     gws             27 Jan  1  1970 gpio -> /usr/local/etc/telem/gpio.2
drw-rw----    2 root     gws            720 Dec 14 13:31 gpio.2
-rw-rw----    1 root     gws           1936 Dec 14 14:29 gwSetup.bin
-rw-rw----    1 root     gws            292 Nov  7 11:21 gwSetup.bin.0.old
-rw-rw----    1 root     gws           5594 Nov  7 11:14 gwSetup.bin.1.old
-rw-rw----    1 root     gws            292 Dec 14 13:23 gwSetup.bin.new
-rw-rw----    1 root     gws            878 Dec 14 14:29 hw-run.xml
-rw-rw----    1 root     gws            878 Dec 13 13:34 hw.xml
-rw-rw----    1 root     gws           2967 Dec 13 13:34 log-conf.xml
-rw-rw----    1 myco2    gws           5480 Dec 14 14:28 setup.tar.xz
-rw-rw----    1 root     gws           5260 Dec 14 13:23 setup.tar.xz.0
-rw-rw----    1 1001     gws           7396 Dec 10 09:56 setup.tar.xz.1
-rw-rw----    1 1001     gws           6160 Dec  7 06:50 setup.tar.xz.2
-rw-rw----    1 1001     gws           6092 Dec  6 07:19 setup.tar.xz.3
-rw-rw----    1 1001     gws           5744 Dec  6 07:16 setup.tar.xz.4
-rw-rw----    1 root     gws             21 Dec 13 13:34 version
-rw-rw----    1 root     gws             54 Dec 13 13:34 version-GwLinux-git
-rw-rw----    1 root     gws             61 Dec 13 13:34 version-Telem-GW-git
-rw-rw----    1 root     gws             62 Dec 13 13:34 version-buildroot
myco2@Telem-GWM ~ $

Old setups can be deleted with command rm.

root@Telem-GWM ~ $ rm /usr/local/etc/telem/setup.tar.xz.*
root@Telem-GWM ~ $ rm /usr/local/etc/telem/gwSetup.bin.*
root@Telem-GWM ~ $ ls -la /usr/local/etc/telem/
total 48
drwxrws--T    3 root     gws           1088 Dec 14 15:09 .
drwxr-xr-x    3 root     root           224 Dec 10 13:13 ..
-rw-rw----    1 root     gws            452 Dec 13 13:34 asciiart
-rw-r--r--    1 root     gws           4095 Dec 14 14:29 config.xml
lrwxrwxrwx    1 root     gws             27 Jan  1  1970 gpio -> /usr/local/etc/telem/gpio.2
drw-rw----    2 root     gws            720 Dec 14 13:31 gpio.2
-rw-rw----    1 root     gws           1936 Dec 14 14:29 gwSetup.bin
-rw-rw----    1 root     gws            878 Dec 14 15:08 hw-run.xml
-rw-rw----    1 root     gws            878 Dec 13 13:34 hw.xml
-rw-rw----    1 root     gws           2967 Dec 13 13:34 log-conf.xml
-rw-rw----    1 myco2    gws           5480 Dec 14 14:28 setup.tar.xz
-rw-rw----    1 root     gws             21 Dec 13 13:34 version
-rw-rw----    1 root     gws             54 Dec 13 13:34 version-GwLinux-git
-rw-rw----    1 root     gws             61 Dec 13 13:34 version-Telem-GW-git
-rw-rw----    1 root     gws             62 Dec 13 13:34 version-buildroot
root@Telem-GWM ~ $ sync

After updating the configuration the /usr/local/etc/telem folder looks something like so:

root@Telem-GWM ~ $ ls -la /usr/local/etc/telem/
total 60
drwxrws--T    3 root     gws           1160 Dec 14 15:12 .
drwxr-xr-x    3 root     root           224 Dec 10 13:13 ..
-rw-rw----    1 root     gws            452 Dec 13 13:34 asciiart
-rw-r--r--    1 root     gws           4111 Dec 14 15:12 config.xml
lrwxrwxrwx    1 root     gws             27 Jan  1  1970 gpio -> /usr/local/etc/telem/gpio.2
drw-rw----    2 root     gws            720 Dec 14 13:31 gpio.2
-rw-rw----    1 root     gws           1938 Dec 14 15:12 gwSetup.bin
-rw-rw----    1 root     gws            878 Dec 14 15:12 hw-run.xml
-rw-rw----    1 root     gws            878 Dec 13 13:34 hw.xml
-rw-rw----    1 root     gws           2967 Dec 13 13:34 log-conf.xml
-rw-rw----    1 myco2    gws           5484 Dec 14 15:11 setup.tar.xz
-rw-rw----    1 myco2    gws           5480 Dec 14 14:28 setup.tar.xz.0
-rw-rw----    1 root     gws             21 Dec 13 13:34 version
-rw-rw----    1 root     gws             54 Dec 13 13:34 version-GwLinux-git
-rw-rw----    1 root     gws             61 Dec 13 13:34 version-Telem-GW-git
-rw-rw----    1 root     gws             62 Dec 13 13:34 version-buildroot
root@Telem-GWM ~ $

Secure the Setup and Logs

As setup contains sensitive information it is best to keep it in a safe place. Use special PC or a virtual machine for configuration purposes. Keep the setups in encrypted volume or drive. Don't send setups to third parties. Don't send your setup to Martem. If you must send it to Martem for trouble shooting or any other purposes PLEASE remove the VPN certificates and keys or replace them with empty ones.

All most the same applies to logs as well. Just send relevant part from logs.

What If

Lets assume that regular group gws account got compromised.
How easy it would be to install rough firmware?
Firmware is packed with 7Zip. Lets create a empty file and send it as firmware. After upload it appears that it got rejected, here is the output from err.txt:

martem@telem-gw6e ~ $ ls -la gwupd/
total 16
drwx--S---    2 martem   martem         616 Jun 12 10:28 .
drwxr-sr-x    4 martem   martem         360 Jun 12 10:30 ..
-rw-------    1 martem   martem          52 Jun 12 10:28 PACKED
-rw-------    1 martem   martem           0 Jun 12 10:28 Telem-GWM
-rw-------    1 martem   martem          59 Jun 12 10:28 VERSION
-rw-------    1 martem   martem           0 Jun 12 10:28 VMX53
-rw-r--r--    1 root     martem          34 Jun 12 10:28 err.txt
-rw-------    1 martem   martem          42 Jun 12 10:28 md5sums
-rw-------    1 martem   martem           0 Jun 12 10:28 upd.tar
martem@telem-gw6e ~ $ cat gwupd/err.txt
Checksum is BAD, aborting update!
martem@telem-gw6e ~ $

"Checksum is BAD", so we need to calculate something. I'll leave it as an exercie to figure out what to calculate(HINT: unpack the actual firmware and go from there), but after we know, we get this:

martem@telem-gw6e ~ $ ls -la gwupd/
total 16
drwx--S---    2 martem   martem         616 Jun 12 10:31 .
drwxr-sr-x    4 martem   martem         360 Jun 12 10:31 ..
-rw-------    1 martem   martem          52 Jun 12 10:31 PACKED
-rw-------    1 martem   martem           0 Jun 12 10:31 Telem-GWM
-rw-------    1 martem   martem          59 Jun 12 10:31 VERSION
-rw-------    1 martem   martem           0 Jun 12 10:31 VMX53
-rw-------    1 martem   martem          42 Jun 12 10:31 md5sums
-rw-r--r--    1 root     martem          60 Jun 12 10:31 res.txt
-rw-------    1 martem   martem           0 Jun 12 10:31 upd.tar
martem@telem-gw6e ~ $ cat gwupd/res.txt
Checksum is OK
Entering temporary folder
Extracting tarball
martem@telem-gw6e ~ $ cat gwupd/V
VERSION  VMX53
martem@telem-gw6e ~ $ cat gwupd/VERSION
Telem-GWM VMX53 2013.05.13-next-01-6d1c73d-bluelabel-dirty
martem@telem-gw6e ~ $ cat /VERSION
Telem-GW6e VMX53 2013.06.12-next-01-6bae75c-bluelabel-dirty
martem@telem-gw6e ~ $

Success! Not yet as there is no done file. Another try:

martem@telem-gw6e ~ $ ls -la
total 8
drwxr-sr-x    4 martem   martem         432 Jun 12 10:35 .
drwxrwxr-x    3 root     root           224 Jun 11 13:18 ..
-rw-------    1 martem   martem         156 Jun 12 10:36 .ash_history
drwxr-sr-x    2 martem   martem         160 Jun 11 13:18 .ssh
-rw-r--r--    1 root     martem         129 Jun 12 10:35 done
drwx--S---    2 martem   martem         704 Jun 12 10:35 gwupd_done
martem@telem-gw6e ~ $ cat done
bd139d18d87dbb65420219ae69b06eaccde2d0f89b143c022dba59ea7367552ebfbf53c6c281e4fc29f860def85e42bc0dce97e9e145361063482e30d3d2e305
martem@telem-gw6e ~ $ ls -la gwupd_done/
total 20
drwx--S---    2 martem   martem         704 Jun 12 10:35 .
drwxr-sr-x    4 martem   martem         432 Jun 12 10:35 ..
-rw-r--r--    1 martem   martem           0 Jun 12 10:34 2013.05.15-hacked-stable
-rw-r--r--    1 martem   martem          48 Jun 12 10:34 PACKED
-rw-r--r--    1 martem   martem           0 Jun 12 10:34 Telem-GWM
-rw-r--r--    1 martem   martem          41 Jun 12 10:34 VERSION
-rw-r--r--    1 martem   martem           0 Jun 12 10:34 VMX25
-rw-r--r--    1 root     martem          34 Jun 12 10:35 err.txt
-rw-r--r--    1 martem   martem          42 Jun 12 10:34 md5sums
-rw-r--r--    1 root     martem         908 Jun 12 10:35 res.txt
martem@telem-gw6e ~ $ cat gwupd_done/err.txt
Wed Jun 12 10:35:11 EEST 2013 - 1
martem@telem-gw6e ~ $ cat gwupd_done/res.txt
Checksum is OK
Entering temporary folder
Extracting tarball
Starting update script: /tmp/gwupd/upd.sh
Log continues in file: /home/martem/gwupd/res.txt
Wed Jun 12 10:35:11 EEST 2013 - Checking if update is applied.
Wed Jun 12 10:35:11 EEST 2013 - Starting update to Telem-GWM VMX25 2013.05.15-hacked-stable, Packed at Mon May 15 15:57:00 EEST 2013 on win7
Wed Jun 12 10:35:11 EEST 2013 - Starting UpdateSystem.sh
Wed Jun 12 10:35:11 EEST 2013 - Starting update from version 2
Wed Jun 12 10:35:11 EEST 2013 - Hardware        : Voipac Technologies VMX53 Board
Wed Jun 12 10:35:11 EEST 2013 - Product name mismatch ('Telem-GW6e' != 'Telem-GWM'), stopping update!
Wed Jun 12 10:35:11 EEST 2013 - Writing done 'bd139d18d87dbb65420219ae69b06eaccde2d0f89b143c022dba59ea7367552ebfbf53c6c281e4fc29f860def85e42bc0dce97e9e145361063482e30d3d2e305' to '/home/martem/done'
Wed Jun 12 10:35:11 EEST 2013 - Update script finished.
martem@telem-gw6e ~ $

Better, but there is hardware versioning. Ok another try:

martem@telem-gwm ~ $ ls -la
total 8
drwxr-sr-x    4 martem   martem         432 Jun 12 10:56 .
drwxrwxr-x    3 root     root           224 Jun 11 13:21 ..
-rw-------    1 martem   martem        1067 Jun 12 10:57 .ash_history
drwxr-sr-x    2 martem   martem         232 Jun 11 13:21 .ssh
-rw-r--r--    1 root     martem         129 Jun 12 10:55 done
drwx--S---    2 martem   martem         704 Jun 12 10:55 gwupd_done
martem@telem-gwm ~ $ cat done
91df6dd2d663428b3af2f2539e961783792623c29904b307b41a06fadfeb09ada3227090b82992ee687a72ae8c2694266bbb1aa1eded018478ea871d7761d536
martem@telem-gwm ~ $ ls -la gwupd_done/
total 20
drwx--S---    2 martem   martem         704 Jun 12 10:55 .
drwxr-sr-x    4 martem   martem         432 Jun 12 10:56 ..
-rw-r--r--    1 martem   martem           0 Jun 12 10:54 2013.05.15-hacked-stable
-rw-r--r--    1 martem   martem          48 Jun 12 10:54 PACKED
-rw-r--r--    1 martem   martem           0 Jun 12 10:54 Telem-GWM
-rw-r--r--    1 martem   martem          41 Jun 12 10:54 VERSION
-rw-r--r--    1 martem   martem           0 Jun 12 10:54 VMX25
-rw-r--r--    1 root     martem          34 Jun 12 10:55 err.txt
-rw-r--r--    1 martem   martem          42 Jun 12 10:54 md5sums
-rw-r--r--    1 root     martem         932 Jun 12 10:55 res.txt
martem@telem-gwm ~ $ cat gwupd_done/err.txt
Wed Jun 12 10:55:18 EEST 2013 - 1
martem@telem-gwm ~ $ cat gwupd_done/res.txt
Checksum is OK
Entering temporary folder
Extracting tarball
Starting update script: /tmp/gwupd/upd.sh
Log continues in file: /home/martem/gwupd/res.txt
Wed Jun 12 10:55:18 EEST 2013 - Checking if update is applied.
Wed Jun 12 10:55:18 EEST 2013 - Starting update to Telem-GWM VMX25 2013.05.15-hacked-stable, Packed at Mon May 15 15:57:00 EEST 2013 on win7
Wed Jun 12 10:55:18 EEST 2013 - Starting UpdateSystem.sh
Wed Jun 12 10:55:18 EEST 2013 - Starting update from version 2
Wed Jun 12 10:55:18 EEST 2013 - Hardware        : Voipac Technologies VMX53 Board
Wed Jun 12 10:55:18 EEST 2013 - CPU type mismatch ('Hardware    : Voipac Technologies VMX53 Board' != 'VMX25'), stopping update.
Wed Jun 12 10:55:18 EEST 2013 - Writing done '91df6dd2d663428b3af2f2539e961783792623c29904b307b41a06fadfeb09ada3227090b82992ee687a72ae8c2694266bbb1aa1eded018478ea871d7761d536' to '/home/martem/done'
Wed Jun 12 10:55:18 EEST 2013 - Update script finished.
martem@telem-gwm ~ $

Success at last! No. There is board versions as well. And some minutes later:

martem@telem-gwm ~ $ ls -la
total 8
drwxrwxrwx    4 root     root           520 Jun 12 11:14 .
drwxrwxrwx    4 root     root           288 May 15 15:56 ..
-rw-------    1 martem   martem        1300 Jun 12 11:16 .ash_history
drwxr-sr-x    2 martem   martem         232 Jun  4 13:26 .ssh
-rw-r--r--    1 root     root           129 Jun 12 11:14 done
drwx--S---    2 martem   martem         640 Jun 12 11:14 gwupd_done
-rwxrwxrwx    1 root     root             0 May 15 15:27 you-have-been-hacked.txt
martem@telem-gwm ~ $ cat you-have-been-hacked.txt
martem@telem-gwm ~ $ ls -la gwupd_done/
total 16
drwx--S---    2 martem   martem         640 Jun 12 11:14 .
drwxrwxrwx    4 root     root           520 Jun 12 11:14 ..
-rw-r--r--    1 martem   martem           0 Jun 12 11:13 2013.05.15-hacked-stable
-rw-r--r--    1 martem   martem          48 Jun 12 11:13 PACKED
-rw-r--r--    1 martem   martem           0 Jun 12 11:13 Telem-GWM
-rw-r--r--    1 martem   martem          41 Jun 12 11:13 VERSION
-rw-r--r--    1 martem   martem           0 Jun 12 11:13 VMX25
-rw-r--r--    1 martem   martem          42 Jun 12 11:13 md5sums
-rw-r--r--    1 root     martem         863 Jun 12 11:14 res.txt
martem@telem-gwm ~ $ cat gwupd_done/res.txt
Checksum is OK
Entering temporary folder
Extracting tarball
Starting update script: /tmp/gwupd/upd.sh
Log continues in file: /home/martem/gwupd/res.txt
Wed Jun 12 11:14:11 EEST 2013 - Checking if update is applied.
Wed Jun 12 11:14:11 EEST 2013 - Starting update to Telem-GWM VMX25 2013.05.15-hacked-stable, Packed at Mon May 15 15:57:00 EEST 2013 on win7
Wed Jun 12 11:14:11 EEST 2013 - Starting UpdateSystem.sh
Wed Jun 12 11:14:11 EEST 2013 - Starting update from version 2
Wed Jun 12 11:14:11 EEST 2013 - Hardware        : Voipac VMX25 module (Freescale i.MX25)
Wed Jun 12 11:14:11 EEST 2013 - Update filesystem
Wed Jun 12 11:14:12 EEST 2013 - Writing done '2a66559728f4e6dd443114a1760e1abe4f171ab52c28e4bfe69b14460117b085a87879cebf71a0b6d3d22017c7831205596b1924711e5984a2bb54155c195d32' to '/home/martem/done'
Wed Jun 12 11:14:12 EEST 2013 - Update script finished.
martem@telem-gwm ~ $ cat gwupd_done/VERSION
Telem-GWM VMX25 2013.05.15-hacked-stable
martem@telem-gwm ~ $ cat /VERSION
Telem-GWM VMX25 2013.06.05-next-06-b982885-bluelabel-dirty
martem@telem-gwm ~ $ cat /PACKED
Packed at Mon May 15 15:57:00 EEST 2013 on win7
martem@telem-gwm ~ $ cat gwupd_done/PACKED
Packed at Mon May 15 15:57:00 EEST 2013 on win7
martem@telem-gwm ~ $

Yes! Success!