2022-01-22 15:04:17 +01:00
|
|
|
OCTOPUS
|
|
|
|
---
|
|
|
|
|
2022-01-22 15:09:33 +01:00
|
|
|
Samuel AUBERTIN - EURECOM - 2022
|
2022-01-22 15:04:17 +01:00
|
|
|
|
|
|
|
![SPECTRE Octopus Logo](logo.png "SPECTRE Octopus Logo")
|
|
|
|
|
2022-01-27 15:37:10 +01:00
|
|
|
**OCTOPUS** is a [Spectre](https://spectreattack.com/spectre.pdf) V1 (_Bounds Check Bypass_) + V2 (_Branch Target Injection_) compiler flag tester.
|
2022-01-22 15:04:17 +01:00
|
|
|
|
2022-01-27 15:36:02 +01:00
|
|
|
It measures the success rate of the attacks using different compilers:
|
2022-01-23 19:37:24 +01:00
|
|
|
|
|
|
|
- GCC
|
|
|
|
- CLANG
|
|
|
|
|
|
|
|
And compilation/linking flags such as:
|
2022-01-22 15:09:33 +01:00
|
|
|
|
|
|
|
- Optimisation levels (```-O```)
|
2022-01-28 16:42:43 +01:00
|
|
|
- Static/dynamic linking
|
|
|
|
- Masking and lfence as mitigation against Spectre V1
|
|
|
|
- RETPOLINE as mitigation against Spectre V2
|
|
|
|
|
|
|
|
## Results
|
|
|
|
|
|
|
|
Results are stored as JSON objects in an unique file for each run, following this pattern: ```result-$(UUID).json```
|
2022-01-22 15:09:33 +01:00
|
|
|
|
|
|
|
## Dependencies
|
2022-01-22 15:04:17 +01:00
|
|
|
|
2022-01-23 20:00:32 +01:00
|
|
|
- ```clang``` and ```lld```
|
2022-01-23 19:37:24 +01:00
|
|
|
- ```gcc```
|
|
|
|
- ```sftp```
|
|
|
|
- ```uuid```
|
2022-01-28 16:42:43 +01:00
|
|
|
- The libC static symbols: ```glibc-static```
|
2022-01-22 15:04:17 +01:00
|
|
|
|
2022-01-22 15:09:33 +01:00
|
|
|
## Execution
|
2022-01-22 15:04:17 +01:00
|
|
|
|
2022-01-28 16:42:43 +01:00
|
|
|
Will build, execute and upload the results.
|
2022-01-22 15:04:17 +01:00
|
|
|
|
2022-01-28 16:42:43 +01:00
|
|
|
```make```
|
2022-01-27 15:36:02 +01:00
|
|
|
|
|
|
|
### Build only
|
|
|
|
|
2022-01-28 16:42:43 +01:00
|
|
|
```make [-j XXX] build``` where ```XXX``` is the number of parallel processes.
|
2022-01-27 15:36:02 +01:00
|
|
|
|
2022-01-22 15:09:33 +01:00
|
|
|
## Results aggregation
|
2022-01-22 15:04:17 +01:00
|
|
|
|
2022-01-28 16:42:43 +01:00
|
|
|
Results are automatically uploaded to a server with a dedicated account using ```sftp```.
|
2022-01-23 19:37:24 +01:00
|
|
|
|
|
|
|
Here is an exhaustive list of the data sent:
|
|
|
|
- CPU model name and microcode version.
|
|
|
|
- Kernel version and compilation date.
|
|
|
|
- GCC and clang versions.
|
|
|
|
- The list of mitigations enabled at runtime.
|
|
|
|
- The cache timings of the processor computed by the ```calibrate_threshold()``` function.
|
|
|
|
- Each spectre execution success rate.
|
|
|
|
|
|
|
|
**NONE** of this data will be used for anyhting else except this experiment.
|
2022-01-22 15:09:33 +01:00
|
|
|
|
2022-01-28 16:42:43 +01:00
|
|
|
## References
|
|
|
|
|
|
|
|
Both implementations are heavily inspired by:
|
2022-01-22 15:09:33 +01:00
|
|
|
|
|
|
|
- [ErikAugust gist](https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6)
|
|
|
|
- [genua GmbH PoC](https://github.com/genua/meltdown)
|