User-friendly Lightweight TPM Remote Attestation over Bluetooth

Related tags

Bluetooth ultrablue
Overview

Ultrablue

Ultrablue (User-friendly Lightweight TPM Remote Attestation over Bluetooth) is a solution to allow individual users to perform boot state attestation with their phone.

It consists of a server, running on a computer, acting as the attester, and a client graphical application, running on a trusted phone, acting as the verifier.

Installation

To install Ultrablue, please refer to the specific documentation: Linux server / IOS client / Android client

Usage

The classical Ultrablue control flow consists of several steps:

1. Enrollment

To enroll a phone as a verifier, start the server in enroll mode. This will display a QR code on the terminal. From the phone, run the client app, and tap the + icon on the top right corner to show a QR code scanner. On scan, an encrypted Bluetooth Low Energy channel will be established, and the enrollment will run automatically. Upon success, a device card will appear on the home page of the client application.

2. Initramfs configuration (optional)

Once enrolled, you have to re-generate your initramfs in order to include the ultrablue dracut module in it, you hence have to install server/dracut/90ultrablue in the /usr/lib/dracut/modules.d/ module directory. You can then run the following dracut command:

dracut --add ultrablue /path/to/initrd --force

That's it, you can pass to the attestation part.

3. Attestation

If you did the initramfs configuration step, Ultrablue server will run automatically during the boot. Otherwise, manually start the server in attestation mode. Once started, the server will wait for a verifier (phone) to connect.

From the phone, click on the ▶️ icon of the device card. This will run the attestation. When finished, the client application will display the attestation result.


The Ultrablue project has been developped at ANSSI (ssi.gouv.fr) by Loïc Buckwell, under the supervision of Nicolas Bouchinet and Gabriel Kerneis.

Comments
  • Android client

    Android client

    This pull request ends the Android client part of the protocol.

    It also adds support for PCR extension on both server and client side: If the --pcr-extend option is used during the enrollment (with --enroll), a secret will be generated on client side, and sent back on each attesatation. The server will then extend the 9th PCR with it. This allows the user to base disk decryption of his machine on the attestation response.

    opened by ghost 2
  • Android client

    Android client

    This pull request ends the Android client part of the protocol.

    It also adds support for PCR extension on both server and client side: If the --pcr-extend option is used during the enrollment (with --enroll), a secret will be generated on client side, and sent back on each attesatation. The server will then extend the 9th PCR with it. This allows the user to base disk decryption of his machine on the attestation response.

    opened by lfalkau 0
  • Testbed

    Testbed

    Adds a test environment to the ultablue project, it's able to generate a linux distro image which includes the ultrablue server, its dracut module and systemd unit. Once the image is generated one can use it to enroll an ultrablue client and test a remote attested boot.

    opened by nbouchinet-anssi 0
  • Binary releases

    Binary releases

    Hi!

    I watched your talk on OSFC 2022 and I would like to give this project a go. However, I have basically zero experience compiling Android apps. Thus I was wondering if you have any plans on releasing binaries for the clients and server?

    Ideally being able to just install ultrablue through dnf and Google Play Store would be extremely nice.

    Thanks for your work!

    opened by bluecmd 0
  • Review protocol more carefully

    Review protocol more carefully

    Review open comments in https://github.com/ANSSI-FR/ultrablue/pull/12 against current code.

    In particular, pay attention to whether replaying the event log rehashes the events to validate hash values or only chains the provided hashes, and whether we check that TPM is a physical one (ie. the key is derived from the key of a known manufacturer).

    android 
    opened by kerneis-anssi 0
  • IOS client

    IOS client

    Commits before bee4b1015f5949169fc50a0a076a40c6340d210e in this pull request comes from the Android PR, from which several changes are also needed here.

    I wasn't able to test it before the Pull Request again because of an issue with xcode, but nothing should have changed from the last time I used the application.

    opened by lfalkau 2
  • Server crash with latest client (in testbed)

    Server crash with latest client (in testbed)

    When testing PR #7, I get the following error in the testbed, running the server in --enroll mode and the latest client on a Pixel 4a:

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x5dbce7]
    
    goroutine 16 [running]:
    main.parseAttestEK(0xc000136c30)
    	/root/src/protocol.go:98 +0x1a7
    main.registration(0xc000013860?, 0xc0000495d0)
    	/root/src/protocol.go:115 +0x113
    main.ultrablueProtocol(0xc0000a0480?)
    	/root/src/protocol.go:250 +0xde
    created by main.getConnectionState
    	/root/src/state.go:95 +0x185
    

    The last message I see on the Android side is Getting EkPub and EkCert.

    This does not happen when running the server outside of the testbed. My guess is that this comes from the fact that I don't have clean build of the testbed, so my server and client are out-of-sync.

    However, the server should not crash, even if the client sends garbage data. We should investigate this crash and makes sure the server handles the situation properly.

    bug server 
    opened by kerneis-anssi 3
  • Firebase request in logcat

    Firebase request in logcat

    I see the following in logcat:

    2022-07-28 17:09:32.961 29017-29216/fr.gouv.ssi.ultrablue D/TransportRuntime.CctTransportBackend: Making request to: https://firebaselogging.googleapis.com/v0cc/log/batch?format=json_proto3
    

    Why is this happening? We shouldn't make requests to external servers.

    android 
    opened by kerneis-anssi 2
Owner
ANSSI
ANSSI
Android Bluetooth Helper Library, Bluetooth Device Finder

Bluetooth Helper Allows you to access the Bluetooth of your mobile device, manage turn-on - turn off, and discover bluetooth devices around you. Getti

Tolga Bolatcan 44 Jul 15, 2022
Kotlin Asynchronous Bluetooth Low Energy provides a simple Coroutines-powered API for interacting with Bluetooth Low Energy devices.

Kotlin Asynchronous Bluetooth Low Energy provides a simple Coroutines-powered API for interacting with Bluetooth Low Energy devices.

JUUL Labs 275 Sep 14, 2021
This library allows for easy access to a Bluetooth LE device's AdRecord and RSSI value. It offers additional functionality for iBeacons.

Bluetooth LE Library for Android This library allows for easy access to a Bluetooth LE device's Advertisement Records. It also offers: A simple runnin

Alexandros Schillings 843 Dec 13, 2022
Smooth communication via bluetooth with other android devices or microcontrollers such as Arduino.

Android Smooth Bluetooth Smooth communication via bluetooth with other android devices or microcontrollers such as Arduino. Getting Started Add Gradle

Mantas Palaima 191 Nov 28, 2022
A reactive, interface-driven central role Bluetooth LE library for Android

RxCentralBle RxCentralBle provides a simple reactive paradigm for connecting to and communicating with Bluetooth LE peripherals from the central role.

Uber Open Source 198 Nov 29, 2022
An Android Library for handling Bluetooth Low Energy on Android Easy

An Android Library for handling Bluetooth Low Energy on Android Easy

Leandro SQ 42 Jan 3, 2023
A Bluetooth kotlin multiplatform "Cross-Platform" library for iOS and Android

Blue-Falcon A Bluetooth "Cross Platform" Kotlin Multiplatform library for iOS, Android, MacOS, Raspberry Pi and Javascript. Bluetooth in general has t

Andrew Reed 220 Dec 28, 2022
Kotlin Asynchronous Bluetooth Low-Energy

Kable Kotlin Asynchronous Bluetooth Low Energy provides a simple Coroutines-powered API for interacting with Bluetooth Low Energy devices. Usage is de

JUUL Labs 493 Dec 25, 2022
An Android library that solves a lot of Android's Bluetooth Low Energy problems

A library that makes working with Bluetooth LE on Android a pleasure. Seriously.

Nordic Semiconductor 1.4k Jan 7, 2023
A non-trivial Bluetooth LE app using Kable and app architecture best practices

kable_mvvm_demo The intention of this project is to demonstrate a non-trivial Bluetooth LE app using Kable and app architecture best practices. ⚠️ The

Chris Laplante 14 Aug 18, 2022
BluePass extracts two factor authentication codes (2FA) from SMS and sends them to a paired device via Bluetooth RFCOMM.

BluePass extracts two factor authentication codes (2FA) from SMS and sends them to a paired device via Bluetooth RFCOMM.

Manuel Huber 15 Dec 4, 2022
BLESSED Coroutines, a Bluetooth Low Energy (BLE) library for Android using Kotlin Coroutines

BLESSED for Android with Coroutines - BLE made easy BLESSED is a very compact Bluetooth Low Energy (BLE) library for Android 8 and higher, that makes

Martijn van Welie 82 Jan 1, 2023
Open-source weight and body metrics tracker, with support for Bluetooth scales

Open-source weight and body metrics tracker, with support for Bluetooth scales

OliE 1.3k Jan 4, 2023
Simple bluetooth flutter project

bluetooth_simple Simple bluetooth implementation. Getting Started This project is a starting point for a Flutter application. A few resources to get y

Aleksey Vasiliev 0 Nov 25, 2021
The purpose is to share the Internet capability of one device to the entire Bluetooth LAN.

bluenet The purpose is to share the Internet capability of one device to the entire Bluetooth LAN. To make a prototype of a soft bus, or actually, I w

yunlong.wen 1 Jun 28, 2022
RxBle: Use Android Bluetooth API in Rx way

RxBle: Use Android Bluetooth API in Rx way A lightweight encapsulation of Android Bluetooth API. Use Android Bluetooth API in Rx way. Support multiple

null 3 Dec 2, 2022
A simple, lightweight library intended to take away some of the cruft and tediousness of using the Android BLE.

Blueteeth What Is Blueteeth? Blueteeth is a simple, lightweight library intended to take away some of the cruft and tediousness of using the Android B

Robot Pajamas 103 Nov 26, 2022
YASNAC (short for Yet Another SafetyNet Attestation Checker) is an Android app that demonstrates SafetyNet Attestation API.

YASNAC YASNAC (short for Yet Another SafetyNet Attestation Checker) is an Android app that demonstrates SafetyNet Attestation API. YASNAC is written w

Rikka 361 Dec 31, 2022
[UNMAINTAINED][Android] Bluetooth Serial Port Profile which comfortable to developer application to communication with microcontroller via bluetooth

⚠ WARNING: This project is no longer being maintained Android-BluetoothSPPLibrary Bluetooth Serial Port Profile which comfortable to developer applica

Akexorcist 1.7k Dec 31, 2022
Android Bluetooth Helper Library, Bluetooth Device Finder

Bluetooth Helper Allows you to access the Bluetooth of your mobile device, manage turn-on - turn off, and discover bluetooth devices around you. Getti

Tolga Bolatcan 44 Jul 15, 2022