public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: phlamorim@riseup.net
To: devel@edk2.groups.io, lersek@redhat.com
Subject: Re: [edk2-devel] Interpretation of specification
Date: Fri, 15 Nov 2019 15:51:31 -0300	[thread overview]
Message-ID: <7e4784d1-998c-303b-711b-30f6beb33656@riseup.net> (raw)
In-Reply-To: <748ab441-35e4-31d2-1d94-be2a3c4752c8@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 5609 bytes --]

Im implementing a mechanism which will depends on time based
authenticated variables, but i got stucked when the SetVariable from
RuntimeServices return me a code of Security Violation. I started to
develop my code using the EDK2 and OVMF on QEMU to test the correctness
of my UEFI Applications, and the code worked properly to set the
authenticated variables on OVMF, but when i tried the same at the Dell
Inspiron which uses the AMI implementation as base of UEFI, i always got
a Security Violation return.

UEFI Spec give a lot of verifications about setting authenticated
variables, and my code worked on the open source reference
implementation, so i got stucked because i cant found out which
validation is making the SetVariable fails on Dell's BIOS implementation.

Im using an UEFI Application to call the SetVariable twice one for set
the variable file_name and other to set variable file_hash, i used a
script to prepare the payload with the Auth Descriptor using well known
tools: openssl(1.1.1c 28 May 2019) and sbvarsign(0.9.2).

- genkeys.sh https://pastebin.com/jjrZGrAB
This is the script im using to create the keys

- create_auth_var_files.sh https://pastebin.com/jPQgG0nB
This is the script to generate the payloads used in the UEFI Application
to set the authenticated variables, the toc16 is just a code to convert
an char to CHAR16, the script receive one parameter, which is a file
name, so it create two files file_name.signed and file_hash.signed,
which are the payloads to set variable file_name and file_hash using
time based authentication.

- TestPkg.c https://pastebin.com/DnwhfuKk This one is the UEFI
Application which call the SetVariable using the payloads generated by
create_auth_var_files.sh, TestPkg is supposed to run with the
file_*.signed in the same path, so it can open and copy the payload to
use on SetVariable.

I tried to follow your suggestion (though i skipped the opensource
plataform "target" because i dont have access to one). As i said, i'm
using a Dell Inspiron, so i opened a thread in Dell Community:

https://www.dell.com/community/Inspiron/SetVariable-from-UEFI-RuntimeServices-is-not-working-as-expected/m-p/7411885.


I informed the BIOS Version which is 2.9.0 from Dell Inc, but later i
receive a private message saying the support in this case is limited.

I got an output of UEFI v2.40 (American Megatrends, 0x0005000B) from
command ver in the UEFI Shell, i tried to contact the technical support
of AMI, which gave me the following answer:

"Unless the motherboard is manufactured by AMI, we are not authorized to
provide support for it. The motherboard manufacturers license our
generic BIOS and modify it to fit their motherboard specifications;
thus, we do not have access to the changes made to the BIOS. For
support, BIOS, and driver updates for your motherboard, please contact
your motherboard manufacturer. You can also contact the place of
purchase and inquire if they can provide assistance for you."

I need to know where in the verification my code is returning a Security
Violation so i can fix, i can provide all the other files eg: inf and
dsc files used to compile the code and the directory tree im using too.

Regards

Em 24/10/2019 09:33, Laszlo Ersek escreveu:
> On 10/23/19 19:12, phlamorim@riseup.net wrote:
>> The following commit on edk2 added a new a check on format of Authenticated variables: https://github.com/tianocore/edk2/commit/c035e37335ae43229d7e68de74a65f2c01ebc0af ( https://github.com/tianocore/edk2/commit/c035e37335ae43229d7e68de74a65f2c01ebc0af )
>>
>> After this point some implementations started to have differences in the validation of the format of Authenticator Descriptor as we can se here: https://blog.hansenpartnership.com/uefi-secure-boot/#comment-48351
>>
>> This case make me reach the following discussions: https://bugzilla.tianocore.org/show_bug.cgi?id=586 where i have seen lots of tools(more on linux) dont generate the correct format to use on the payload for TimeBased authenticated variables, at this time i was just trying to create a private authenticated variable, first thig which worked is to use this patch: https://patchew.org/EDK2/1525903747.5882.11.camel@HansenPartnership.com/ ( https://patchew.org/EDK2/1525903747.5882.11.camel@HansenPartnership.com/ )
>>
>> But this patch never got merged, so i realized the tools on linux received upgrades to work properly with Authentication Variables of the edk2, but the same code just dont worked at a real machine using a ASROCK board. So my question is, where the developers should trust to consume the UEFI APIs in a trusted way. Another example i had is the path separator "\" or "/", edk2 uses "/" but the spec allow both, ASROCK mix both sometimes it can lead to some errors. I want to know if i can trust if my code work on EDK2 it should work on all other implementations too, and how we will try to remove these ambiguities of interpretation.
> I suggest writing code against the published UEFI spec, and testing at
> least with edk2. If edk2 does not behave in accordance with the UEFI
> spec, then it could be a bug in edk2, or in the spec. Report the issue
> on edk2-devel, and the community will try to figure out which half is wrong.
>
> If your code seems correct, according to both the UEFI spec and to an
> open source edk2 platform, but it breaks on a particular vendor
> platform, I suggest talking to that vendor.
>
> So, I would suggest the following order of "targets":
> - spec
> - reference implementation (edk2)
> - open source platforms (edk2-platforms)
> - vendor platform
>
> Thanks
> Laszlo
>
>
> 
>

[-- Attachment #2: Type: text/html, Size: 7846 bytes --]

  reply	other threads:[~2019-11-15 18:51 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-23 17:12 Interpretation of specification phlamorim
2019-10-24 12:33 ` [edk2-devel] " Laszlo Ersek
2019-11-15 18:51   ` phlamorim [this message]
2019-11-15 21:32     ` Laszlo Ersek
2019-11-23  4:59     ` Eugene Khoruzhenko
2019-11-23 13:08       ` Paulo Henrique Lacerda de Amorim
2019-11-26  6:08         ` Eugene Khoruzhenko
2019-11-26 15:22           ` Paulo Henrique Lacerda de Amorim
2020-01-03 19:52             ` Eugene Khoruzhenko
2020-01-04 17:17               ` Paulo Henrique Lacerda de Amorim
2020-01-07 18:13                 ` Eugene Khoruzhenko
2020-01-08 11:24                   ` Laszlo Ersek
2020-01-08 19:13                     ` James Bottomley
2020-01-09 17:17                       ` Laszlo Ersek
2020-01-09 17:20                         ` James Bottomley
2020-01-10 10:55                           ` Laszlo Ersek
2020-01-10 16:04                             ` James Bottomley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7e4784d1-998c-303b-711b-30f6beb33656@riseup.net \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox