Security Working Group meeting - Wednesday March 29 - results

Joseph Reynolds jrey at linux.ibm.com
Thu Mar 30 08:09:20 AEDT 2023


An OpenBMC Security Working Group meeting was held on Wednesday March 29 
at 10:00am PDT.

MEETING ACCESS ON DISCORD VOICE
First, join Discord via https://discord.gg/69Km47zH98 
<https://discord.gg/69Km47zH98> and confirm via email.
Then, to join: navigate Discord > OpenBMC > Voice channels >  Security ~ 
https://discord.com/channels/775381525260664832/1002376534377635860 
<https://discord.com/channels/775381525260664832/1002376534377635860>

Access and notes about the Security Working Group are in the OpenBMC 
Security wiki:
https://github.com/openbmc/openbmc/wiki/Security-working-group 
<https://github.com/openbmc/openbmc/wiki/Security-working-group>

The meeting agenda and minutes are in 
<https://docs.google.com/document/d/1b7x9BaxsfcukQDqbvZsU2ehMq4xoJRQvLxxsDUWmAOI>, 
items proposed on the Discord OpenBMC #security channel, and anything 
else that comes up:

Attended: Joseph Reynolds, dsp (Dhananjay), Daniil Engeranov, jejb, cacih

TOPICS:

1 Joseph: Is there a common use case to get “service” access to the 
BMC?  A “service user” means a person authorized by the system 
manufacturer or OEM who is trusted to access BMC internals as needed to 
diagnose or fix problems on the BMC; they are allowed to use interfaces 
which are not accessible to BMC admin user, for example REST APIs only 
allowed to “service” users, or to get root user access to the BMC 
command shell.


For context, assume the BMC admin user does not have access to the BMC 
command shell and can only access the BMC’s REST APIs and similar 
external interfaces; that is, the BMC admin has no access to BMC 
internals.  Also, assume the BMC admin has access to the BMC’s 
management network, and can share that access with a service user.


DISCUSSION (joseph and dsp):

Joseph discussed IBM’s custom Access Control File (ACF) solution, and 
Dhananjay discussed Microsoft's Secure Unlock.


IBM ACF: Joseph reviewed the steps for an IBM service agent to get 
service access to a customer BMC.  The steps are:

 1.

    The customer calls for service and gives the system serial number to
    the service rep.

 2.

    The service rep uses their access (access to the private key, which
    is stored behind their organization’s firewall) to create a token
    (an ACF file).  This ACF file contains a request to access to BMC,
    identifies a date range, and identifies the system serial number. 
    It is digitally signed by a private key held by the service
    organization, and the BMC can validate the signature via a public
    key which is built into the BMC firmware.

 3.

    The service rep gives the ACF file to the customer/admin.  (The ACF
    file has no secrets other than the secure hash of the service
    account’s password.)

 4.

    The BMC admin uploads the ACF to the BMC.  Doing so enables the
    service user password access.

 5.

    The service user can now login to the BMC, using the password stored
    in the ACF.

 6.

    If desired, the admin or service agent can delete the ACF, or allow
    it to expire.

WIP Design: https://gerrit.openbmc.org/c/openbmc/docs/+/45201 
<https://gerrit.openbmc.org/c/openbmc/docs/+/45201>  .  The 
implementation is in IBM’s public downstream (github.com/ibm-openbmc) 
version of bmcweb and phosphor-certificate-manager.

Note: the ACF is ASN.1-encoded (binary file) but is not an x.509 
certificate.


Microsoft Secure Unlock: Dhananjay reviewed Secure Unlock.  The 
approximate steps are:

 1.

    Retrieve info from BMC’s RoT.

 2.

    This info goes to the service organization (behind the firewall),
    which uses it to create a token needed to access the BMC.

 3.

    This access token is uploaded to BMC.

Touchpoint: a use case for this token is to disable secure boot


The common use case?

There is a common use case for REST APIs to:

  *

    Initiate a request for service access to the BMC.

  *

    Upload a service access token to the BMC.

With additional APIs desired for inspecting and deleting the access token.

[Although not discussed, I presume at most 1 access token at a time is 
allowed.]


A common use case:

In addition to the use case to get BMC root access…

Recover admin account access.  Customers regularly call for service 
because they lost access to their admin account.  Recovery means, for 
example: recreate the admin account or set it to a usable state, and set 
its password to a known value, reset its password lockout, etc.

It is desired to be able to create an access token which performs only 
this admin account recovery, and does not grant general access to BMC 
internals.


There are at least 2 shared use cases for the access token.  That is, 
the access token can be create for one of these purposes:

 1.

    Enable service user login.

 2.

    Recover access to the BMC’s admin account.

There are multiple other purposes; one mentioned is to disable secure boot.

In other words, the token encodes a specific action, such as listed above.

Each manufacturer would have a different set of purposes for the tokens, 
and we do not image these would be shared.


Anti-replay protection for these access tokens is assumed.  For example, 
an access token used to get access to a BMC command shell could not be 
used twice: the second attempt to upload it should result in permission 
denied with reason: anti-replay protection.  (In this example, login 
access is allowed multiple times until the ACF expires or is deleted.)


TODO for Joseph: We decided to start a design for this. Daniil asked: 
Create a new bitbake image feature to optionally build in the “service 
access” APIs.  When present a system integrator would have to hook up an 
appropriate implementation ~ 
https://github.com/openbmc/openbmc/wiki/Configuration-guide 
<https://github.com/openbmc/openbmc/wiki/Configuration-guide>.

When the service access APIs are built into the image, should there be 
an API to disable it?




- Joseph


More information about the openbmc mailing list