calendar
|
@ -6,7 +6,8 @@
|
|||
- [aaaa/seeing-stars](aaaa/seeing-stars)
|
||||
- [aaaa/spacebook](aaaa/spacebook)
|
||||
- [comms/56k](comms/56k)
|
||||
- [ground-segment/phasors-to-stun](ground-segment/phasors-to-stun)
|
||||
- [comms/phasors-to-stun](comms/phasors-to-stun)
|
||||
- [payload/calendar](payload/calendar)
|
||||
- [payload/leakycrypto](payload/leakycrypto)
|
||||
- [satellite-bus/bytes-away](satellite-bus/bytes-away)
|
||||
- [satellite-bus/magic-bus](satellite-bus/magic-bus)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Phasors to Stun
|
||||
|
||||
**Category:** Ground Segment
|
||||
**Category:** Communication Systems
|
||||
**Points (final):** 62
|
||||
**Solves:** 71
|
||||
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 240 KiB |
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
|
@ -0,0 +1,32 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
RUN apt-get update -y && apt-get install -y \
|
||||
cmake \
|
||||
freeglut3 \
|
||||
freeglut3-dev \
|
||||
gcc \
|
||||
g++ \
|
||||
git \
|
||||
iproute2 \
|
||||
libffi-dev \
|
||||
libgdbm-dev \
|
||||
libgdbm5 \
|
||||
libgstreamer-plugins-base1.0-dev \
|
||||
libgstreamer1.0-dev \
|
||||
libncurses5-dev \
|
||||
libreadline6-dev \
|
||||
libsmokeqt4-dev \
|
||||
libssl-dev \
|
||||
libyaml-dev \
|
||||
net-tools \
|
||||
qt4-default \
|
||||
qt4-dev-tools \
|
||||
ruby2.5 \
|
||||
ruby2.5-dev \
|
||||
vim \
|
||||
zlib1g-dev
|
||||
|
||||
RUN apt-get install -y bundler
|
||||
|
||||
WORKDIR /cosmos
|
||||
CMD /bin/bash
|
|
@ -0,0 +1,78 @@
|
|||
# That's not on my calendar
|
||||
|
||||
**Category:** Payload Modules
|
||||
**Points (final):** 80
|
||||
**Solves:** 52
|
||||
|
||||
>Time for a really gentle introduction to cFS and Cosmos, hopefully you can schedule time to learn
|
||||
>it!
|
||||
>
|
||||
>Build instructions:
|
||||
>
|
||||
>$ ./setup.sh $ source ~/.bashrc $ rm Gemfile.lock $ bundle install
|
||||
>
|
||||
>Hint: You will need to enable telemetry locally on the satellite, the udp forwarder will provide it
|
||||
>to you as TCP from there
|
||||
|
||||
## Write-up
|
||||
|
||||
by [haskal](https://awoo.systems)
|
||||
|
||||
Two files are provided, one is a [COSMOS](https://cosmosrb.com/) directory tree for accessing a
|
||||
virtual satellite running [NASA's Core Flight System](https://cfs.gsfc.nasa.gov/) that can be booted
|
||||
up using the provided netcat endpoint. COSMOS is an open-source command and control framework for
|
||||
satellites using cFS. Booting up COSMOS is enormously complicated, so Docker can be used to automate
|
||||
the setup. We adapted the Ball Aerospace COSMOS Docker image, and created a script to configure
|
||||
COSMOS to connect to the CTF's satellite instance automatically by writing the configuration file at
|
||||
`cosmos/config/tools/cmd_tlm_server/cmd_tlm_server.txt`. When COSMOS is successfully connected to
|
||||
the CTF instance it looks like this (no themes were installed in the Docker container so it looks
|
||||
like Windows 95, I'm so sorry,)
|
||||
|
||||
![Main COSMOS screen](cosmos1.png)
|
||||
|
||||
The second file is an archive of some JSON configuration for the satellite operating system.
|
||||
Importantly, it contains the types of telemetry messages the satellite can send, and the default
|
||||
scheduler table that configures when the satellite sends the messages. There is a telemetry packet
|
||||
that sends us the flag configured here
|
||||
|
||||
```json
|
||||
{"message": {
|
||||
"name": "KIT_TO_SEND_FLAG_MID",
|
||||
"descr": "Super Secret Flag Sending Telemetry Message",
|
||||
"id": 42,
|
||||
"stream-id": 33304,
|
||||
"seq-seg": 192,
|
||||
"length": 256
|
||||
}},
|
||||
```
|
||||
|
||||
As hinted in the description, we can send a KIT_TO ENABLE_TELEMETRY command using the COSMOS command
|
||||
sender. KIT_TO is the subsystem for Telemetry Output, and it has commands available to control the
|
||||
telemetry sending.
|
||||
|
||||
![COSMOS sending an ENABLE_TELEMETRY command](cosmos2.png)
|
||||
|
||||
However we find that even after telemetry is enabled, we're not getting the flag telemetry even
|
||||
though we start to receive other types of telemetry messages.
|
||||
|
||||
![COSMOS telemetry viewer, we have 0 flag packets](cosmos3.png)
|
||||
|
||||
This is because, if we look back at the JSON config we find that the scheduler doesn't have any
|
||||
slots where it sends flag telemetry packets. The key part of this challenge is that the scheduler
|
||||
can be configured at runtime using commands for KIT_SCH (the scheduler subsystem), as we found out
|
||||
by exploring the available commands in COSMOS. Particularly there is a command LOAD_SCH_ENTRY that
|
||||
allows us to overwrite one of the scheduler entries. We can use the command sender to send this
|
||||
command and load slot 0, activity 0 (or any slot, it doesn't matter) to be for message ID 42 (the
|
||||
flag packet ID), and to be enabled (1).
|
||||
|
||||
![COSMOS sending this LOAD_SCH_ENTRY command](cosmos4.png)
|
||||
|
||||
Once we write the scheduler entry, the satellite will start sending COSMOS flags, which can be seen
|
||||
in the Packet Viewer.
|
||||
|
||||
![COSMOS packet viewer showing the flag](cosmos5.png)
|
||||
|
||||
## Resources and other writeups
|
||||
|
||||
* <https://cosmosrb.com/>
|
||||
* <https://cfs.gsfc.nasa.gov/>
|
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 58 KiB |
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
docker run -it -e DISPLAY -e QT_X11_NO_MITSHM=1 --net=host -v $PWD/cosmos:/cosmos cosmos2 bash
|