Project 4C
Internet Of Things Security

INTRODUCTION:

The Internet Of Things is populated with an ever expanding range of sensors and appliances. Initially such devices were likely to be connected to monitoring and control devices over purely local/personal networks (e.g. infra-red, Bluetooth, ZigBee), but it is increasingly common to connect such devices (directly or via a bridge) to the internet. This enables remote monitoring and control, but it also exposes them to a variety of remote attacks.

For some targets (e.g. a national power grid or Uranium separation centrifuges) their stratigic importance and need for protection should be clear. It might not be immediatly obvious how one might hijack simple devices (e.g. light switches or temperature/humidity sensors) for nefarious purposes, but:

Prudence suggests that all communications and control for IOT devices should be encrypted.

In this project we will extend your embedded temperature sensor to accept commands from, and send reports back to a network server. You will do this over both unencrypted and encrypted channels.

RELATION TO READING AND LECTURES:

This project applies the principles discussed in the reading and lectures on Cryptography, Distributed Systems Security, and Secure Socket Layer encryption.

PROJECT OBJECTIVES:

DELIVERABLES:

A single compressed tarball (.tar.gz) containing:

PREPARATION:

PROJECT DESCRIPTION:

Part 1: Communication with a Logging Server

Write a program (called lab4c_tcp) that:

The ID number will appear in the TCP server log (follow the TCP server URL), and will permit you to find the reports for your sessions. To protect your privacy, You do not have to use your student ID number, but merely a nine-digit number that you will recognize and that will be different from the numbers chosen by others.

From the server status page, you will also be able to see, for each client, a log of all commands sent to and reports received from that client in the most recent session.

To facilitate development and testing I wrote my program to, if compiled with a special (-DDUMMY) define, include mock implementations for the mraa_aio_ functionality, enabling me to do most of my testing on my desktop. I then modified my Makefile run the command "uname -r", check for the presence of the string "edison" in that output, and if not found, build with a rule that passed the -DDUMMY flag to gcc.

Part 2: Authenticated TLS Session Encryption

Write a program (called lab4c_tls) that:

The ID number will appear in the TLS server log (follow the TLS server URL), and will permit you to find the reports for your sessions.

Note that you may choose to:

SUMMARY OF EXIT CODES:

SUBMISSION:

Your tarball should have a name of the form lab4c-studentID.tar.gz. You can sanity check your submission with this test script which should run on your Edison or (if with appropriately dummied sensor access) on your usual Linux development environment.

Note that the sanity checker works, in part, by checking the server logs for entries corresponding to the student ID you have given as a parameter. Thus, in order to pass the sanity check, you must have had recent successful sessions using your own student ID number (or at least the same number you have used to name your submission tarball).

Your README file (and all source files) must include lines of the form:

GRADING:

Points for this project will be awarded:

value feature
Packaging and build (10% total)
3% un-tars expected contents
3% clean build of correct program w/default action (no warnings)
2% Makefile has working clean, dist targets
2% reasonableness of README contents
Unencrypted (50% total)
20% establishes TCP session, and presents ID
10% reports temperatures
10% correct command processing
10% command and data logging
Encrypted Server Sessions (40% total)
20% establishes TLS session, presents ID
10% reports temperatures
10% correct command processing