Secure ROS ::Secure ROS
Imposing secure communication in a ROS system
Aravind Sundaresan and Leonard Gerardaravind@ai.sri.com, leolchat@gmail.com
SRI International, Menlo Park, CA 94025

Abundant Robotics

September 21, 2017

Aravind Sundaresan :: Secure ROS :: Slide 1 of 13

Secure ROS :: ROS is insecure

ROS is insecure

ROS was built as an open robust, general-purpose robotics platform to encourage
collaborative development. As such, ROS has no security.
Any node on the network can publish or subscribe to any topic.
Any process on the network can kill any node.
Any new process with nodename will supersede existing node.

Aravind Sundaresan :: Secure ROS :: Slide 2 of 13

Secure ROS :: ROS is insecure

An example ROS system
Publisher
Subscriber
sensor

Hardware device/sensor

ROS topic

driver1

ROS node

VM1/sensorVM2

rosmaster/actuator
VM3

driver1/goal
Computerpathplannerocu

driver2

sensoractuator

joystick

Joystick controlled robot with a planner
Aravind Sundaresan :: Secure ROS :: Slide 3 of 13

Secure ROS :: ROS is insecure

An example ROS system: malicious attack
PublisherSubscriber
sensor

Hardware device/sensor

ROS topic

driver1

ROS node

VM1/sensorVM2

rosmaster/actuator
VM3

driver1/goal
Computerpathplanner

Malicious computer

ocu

ocu

joystickhackerdriver2

sensoractuator

Joystick controlled robot with a planner
Aravind Sundaresan :: Secure ROS :: Slide 4 of 13

Secure ROS :: Secure ROS

Secure ROS

Secure ROS is an overlay ”package” that enables secure communication between ROS
nodes.
ROS public API is the same so that existing nodes can be re-used.
A security configuration file can be used to specify authorized publishers,subscribers, node names, etc based on IP address.
(If no file is specified, Secure ROS behaves like regular ROS.)
Modified ROS master and client libraries (C++, Python) to enforce security rules.
IPSec is used to ensure that IP packets are encrypted and authenticated.

Aravind Sundaresan :: Secure ROS :: Slide 5 of 13

Secure ROS :: Secure ROS

Authorization configuration example

aliases:vm2: [192.168.10.202]
vm3: [192.168.10.203]
topics:/chatter:publishers: [vm2]subscribers: [vm3]/counter:publishers: [vm2]subscribers: [vm3]
nodes:/talker: [vm2]/listener: [vm3]Aravind Sundaresan :: Secure ROS :: Slide 6 of 13

Secure ROS :: Secure ROS

Secure publish-subscribe example

Authorized Publisher
Authorized Subscriber
Failed Publisher
Failed Subscriber
VM1

VM2

rosmaster/chatter/counter
VM3

VM4
mal1

talkermal2
listener

Aravind Sundaresan :: Secure ROS :: Slide 7 of 13

Secure ROS :: Secure ROS

Secure publish-subscribe steps
5)

:1234
0.203

ROS master.168.1

scribrSubgiste1) relistener3)

192
tter”,“/cha5):2234

02.10.2
2.168r”, 19ett
a/chdate(“er(psherUpubli2) registerPublisher(“/chatter”, 1924) requestTopic(“/chatter”, protocols), returns TCPROS://192.168.10.202:33345

192.168.10.203.168.10.202:22345)
talker
192.168.10.202

5) make socket connection to TCPROS://192.168.10.202:33345

1

Master: Is 192.168.10.203 allowed to subscribe to /chatter?

2

Master: Is 192.168.10.202 allowed to publish to /chatter?

3

Client: Is publisherUpdate() coming from Master?

4

Client: Is 192.168.10.203 allowed to requestTopic(/chatter)?

5Client: Is 192.168.10.203 allowed to make socket connection to tcpros://192.168.10.202:33345?

Aravind Sundaresan :: Secure ROS :: Slide 8 of 13

Secure ROS :: Secure ROS

More Secure ROS features

You can also specify parameters and services in authorization file.
parameters:/param/a:setters: [vm2]getters: [vm3]services:/service/b:
providers: [vm2]
requesters: [vm3]

Only “master” node can kill nodes.
Each machine can only get information that it needs (rostopic, rosparam, etc.).

Aravind Sundaresan :: Secure ROS :: Slide 9 of 13

Secure ROS :: Status

Secure ROS status

Secure ROS can be merged into ROS.
Pull request 1080 being reviewed.
https://github.com/ros/ros comm/pull/1080

Secure ROS deb packages available for download.
secure-ros-lunar-secure-ros 0.9.3-1 amd64.deb
secure-ros-kinetic-secure-ros 0.9.3-1 amd64.deb

Install as overlay.
/opt/secure ros/lunar/

Aravind Sundaresan :: Secure ROS :: Slide 10 of 13

Secure ROS :: Configuring IPSec

Configuring IPsec (1)Install secure ros tools
sudo apt-get install racoon ipsec-tools python-pip
sudo pip install git+https://github.com/SRI-CSL/secure_ros_tools.git

Create YAML file (e.g. “hosts.yaml“)
machine1: 192.168.10.201
machine2: 192.168.10.202
machine3: 192.168.10.203

Generate configuration files for IPsec.
create_ipsec_conf -i hosts.yaml

Aravind Sundaresan :: Secure ROS :: Slide 11 of 13

Secure ROS :: Configuring IPSec

Configuring IPsec (2)Copy to appropriate machines. E.g., on “machine1“,sudo tar xzf machine1.tgz -C /List of files on each machine. E.g., on “machine1“,/etc/ipsec-tools.conf/etc/racoon/certs/machine1/etc/racoon/certs/machine1.pub/etc/racoon/certs/machine2.pub/etc/racoon/certs/machine3.pub/etc/racoon/racoon.conf

Aravind Sundaresan :: Secure ROS :: Slide 12 of 13

Secure ROS :: Resources

Resources

Secure ROS: http://secure-ros.csl.sri.com/
Download: http://secure-ros.csl.sri.com/download/
Documentation: http://SRI-CSL.github.io/secure ros
Github:https://github.com/SRI-CSL/secure ros.git
https://github.com/SRI-CSL/secure ros tools.githttps://github.com/SRI-CSL/ros comm.git
https://github.com/SRI-CSL/nodelet core.git

Aravind Sundaresan :: Secure ROS :: Slide 13 of 13