From: Julien Grall <julien.grall@linaro.org>
To: Volodymyr Babchuk <volodymyr_babchuk@epam.com>,
jens.wiklander@linaro.org
Cc: Julien Grall <julien.grall@arm.com>,
nd@arm.com, Stefano Stabellini <sstabellini@kernel.org>,
xen-devel@lists.xen.org
Subject: Re: [RFC 0/4] TEE mediator framework + OP-TEE mediator
Date: Thu, 2 Nov 2017 13:17:26 +0000 [thread overview]
Message-ID: <a6d70a01-acd6-2d82-d339-f370a5a4147a@linaro.org> (raw)
In-Reply-To: <20171024190228.GB23118@EPUAKYIW2556.kyiv.epam.com>
Hi Volodymyr,
On 24/10/17 20:02, Volodymyr Babchuk wrote:
>>>>>> If it is not safe, this means you have a whitelist solution and therefore
>>>>>> tie Xen to a specific OP-TEE version. So if you need to use a new function
>>>>>> you would need to upgrade Xen making the code of using new version
>>>>>> potentially high.
>>>>> Yes, any ABI change between OP-TEE and its clients will require mediator
>>>>> upgrade. Luckilly, OP-TEE maintains ABI backward-compatible, so if you'll
>>>>> install old XEN and new OP-TEE, OP-TEE will use only that subset of ABI,
>>>>> which is known to XEN.
>>>>>
>>>>>> Also, correct me if I am wrong, OP-TEE is a BSD 2-Clause. This means you
>>>>>> impose anyone wanted to modify OP-TEE for their own purpose can make a
>>>>>> closed version of the TEE. But if you need to introspect/whitelist call, you
>>>>>> impose the vendor to expose their API.
>>>>> Basically yes. Is this bad? OP-TEE driver in Linux is licensed under GPL v2.
>>>>> If vendor modifies interface between OP-TEE and Linux, they anyways obligued
>>>>> to expose API.
>>>>
>>>> Pardon me for potential stupid questions, my knowledge of OP-TEE is limited.
>>>>
>>>> My understanding is the OP-TEE will provide a generic way to access
>>>> different Trusted Application. While OP-TEE API may be generic, the TA API
>>>> is custom. AFAICT the latter is not part of Linux driver.
>>> Yes, you are perfectly right there.
>>>
>>>> So here my questions:
>>>> 1) Are you planning allow all the guests to access every Trusted
>>>> Applications?
>>> This is a good question. There are two types of TAs supported in
>>> OP-TEE: real TAs (as they are described in GlobalPlatform specs) and
>>> PseudoTAs. The latter ones are statically linked right into OP-TEE
>>> kernel and execute at S-EL1 level.
>>> Real TAs are provided by client. That means that NW userspace
>>> supplicant loads TA into OP-TEE. OP-TEE checks signature for the TA
>>> and then runs it in S-EL0.
>>> So, I'm planning to allow client to work with any real TA. I can't see
>>> real problem there.
>>
>> Are the real TAs going to be shared between guests? Or will each guest have
>> their own one?
> No, we don't plan this. At least at this momoent. Every guest will have
> own instance of TA.
>
>> Will you allow every guests loading real TAs?
> Yes, if guest has access to TEE, it can load TA. Either there is no
> sense to use TEE. OP-TEE core itself does not provide useful services
> to clients.
In a previous e-mail you mentioned OP-TEE has limited memory. How will
you ensure that guest A will not use all the memory of OP-TEE and
prevent guest B to load TAs?
[...]
>> Not really, you could the domain could block when issuing an SMC until the
>> mediator is up and running.
> Do you mean, that if domain tries to execute SMC, and mediator is not
> ready, then hypervisor should pause all domain's vCPUs? That can be
> destructive for hw domain.
Xen is free to unschedule any vCPU at any time. So why would it be
destructive?
[...]
>>>>>>> And yes, it seems obvious, but I want to say this explicitly: generic
>>>>>>> TEE mediator framework should and will use XSM to control which domain
>>>>>>> can work with TEE. So, if you don't trust your guest - don't let it
>>>>>>> to call TEE at all.
>>>>>>
>>>>>> Correct me if I am wrong. TEE could be used by Android guest which likely
>>>>>> run the user apps... right? So are you saying you fully trust that guest and
>>>>>> obviously the user installing rogue app?
>>>>> I don't think that app downloaded from Play Marget can access OP-TEE directly.
>>>>> OP-TEE can be used by Android itself as a key storage or to access to a SE,
>>>>> for example. But 3rd app that issues TEE calls... I don't think so.
>>>>
>>>> You didn't get my point here. That rogue app may be able to break into
>>>> kernel via an exploit or have enough privilege to break the guest. Who knows
>>>> what it will be able to do after...
>>> Only what hypervisor and TEE will allow it to do. Look, OP-TEE was not designed
>>> to rule the machine. There is ARM TF for that :) OP-TEE's task is to provide
>>> some safer environment for sensitive data and code. This environment has
>>> well-defined interfaces and is desgined to be as safe as possible.
>>>
>>> If rogue app breaks into kernel, then it can issue any SMC which it wants.
>>> But OP-TEE does not trust to NW. Hypervisor does not trust to guests.
>>> Mediator should be written in the same way.
>>>
>>> So, what can do rogue kernel? As I know - it can cause DoS in OP-TEE. This is
>>> known issue. If there is a security bug in OP-TEE, it probably can overcome
>>> whole system. But this is true for any system running OP-TEE.
>>
>> I agree that if you take over OP-TEE, you will take over any system. This is
>> not specific to hypervisor.
> Yes. But it just occured to me that mediator+OP-TEE *can* be more
> secure then just OP-TEE. You see, mediator should perform own security
> checks before forwarding call to OP-TEE. So if OP-TEE misses
> something, mediator can back it up. I wouldn't rely on this. It just
> interesting thought :-)
>
>> Baremetal OS taking down the platform will only harm itself. A guest OS
>> could harm the whole platform.
> Can't argument with that. I think that this feature (shared TEE) is
> not suitable for, say, VPSes. But it can work just fine on smartphones
> or on another embedded devices, where vendor defines whole system.
I guess your use case is "vendor defines whole system". But I am
struggling understand how this would more suitable there.
That guest OS may be "controlled" by the user. So how is that safer?
>
>> What I am not sure yet, maybe because of my lack of knowledge around OP-TEE,
>> who is going to protect a TA to access all the NS memory?
> TAs is runing in S-EL0. It can't control MMU. Before every TA
> invocation, OP-TEE setups MMU in such way, so TA sees only shared
> memory arguments passed by client for this particular invocation.
Can you give a bit more details here? Particularly what is the life of
that mapped region? Is it just for a command? If not, who is going to
unmap it and when?
>
>>>
>>> If there is a security flaw in mediator - it can compromise either hypervisor,
>>> or DomMediator and all TEE-capable guests. Yes, this is a risk.
>>>
>>>> The whole point of using an hypervisor is to isolate guest from each other.
>>>> So what is the isolation model with OP-TEE and the mediator?
>>> OP-TEE is written to isolate TAs, resources and clients from each other.
>>> Currently there are no plans for interaction between TAs from different VMs,
>>> no resource sharing, nothing like this.
>>> What do you mean under "isolation model"? Can you give some example?
>>
>> By that I meant, who is going to prevent guest A to access guest B data. I
>> think you partly answered to my question by the "OP-TEE is written to
>> isolate TAs". The access to NS memory question above will fill the rest I
>> think.
> Yes. Every TA is running in own context, and there are no trust even
> between TAs.
Glad to hear that.
[...]
>>>>>>>> To be clear, this series don't look controversial at least for OP-TEE. What
>>>>>>>> I am more concerned is about DomU supports.
>>>>>>> Your concern is that rogue DomU can compromise whole system, right?
>>>>>>
>>>>>> Yes. You seem to assume that DomU using TEE will always be trusted, I think
>>>>>> this is the wrong approach if the use is able to interact directly with
>>>>>> those guests. See above.
>>>>> No, I am not assuming that DomU that calls TEE should be trusted. Why do you
>>>>> think so? It should be able to use TEE services, but this does not mean that
>>>>> XEN should trust it.
>>>>
>>>> In a previous answer you said: "So, if you don't trust your guest - don't
>>>> let it". For me, this clearly means you consider that DomU using TEE are
>>>> trusted.
>>>>
>>>> So can you clarify by what you mean by trust then?
>>> Well... In real world "trust" isn't binary option. You don't want to
>>> allow all domains to access TEE. Breached TEE user domain doesn't
>>> automatically mean that your whole system is compromised. But this
>>> certainly increases attack surface. So it is safer to give TEE access
>>> only to those domains, which really require it. You can call them
>>> sligtly more trusted, then others.
>>
>> Do you have an example of guest you would slightly trust more?
> I have an example of guest I would trust less: if I'm running server,
> and I'm selling virtual machines on that server, I don't want to them
> to access TEE.
Make sense.
>
> I will trust slightly more to my own guest.
I kind of agree if there are either no interaction with the user or the
user is not able to gain privilege permissions.
>
>>>
>>>>> Even now, XEN processes requests from DomUs without
>>>>> trusting them. Why do you think, that TEE mediator usage will differ?
>>>>
>>>> I guess you are comparing with vGIC and PL011? IHMO, the main difference is
>>>> Xen is taking care alone of the isolation between guest. Here in the TEE
>>>> case, you rely on a combination of both TEE and Xen to do the isolation.
>>> Yes. This is will be less secure, than TEE-only or hypervisor-only system.
>>
>> Can you expand here?
> If TEE has one security flaw and hypervisor has one security flaw,
> then you have two security flaws in your system. And any of them can
> compromise whole system.
Make sense.
>>>
>>>>>
>>>>> Look, I generally not against idea of TEE mediator in stubdoms. But this
>>>>> approach require many changes in existing XEN code:
>>>>>
>>>>> 1. Load domains before Dom0.
>>>>>
>>>>> 2. Add special API for mediator. Or alter existing ones. You can't use
>>>>> existing APIs as it, because you need to enforce stricter XSM rules
>>>>> on them.
>>>>
>>>> Mind giving more explanation....? Xen has a default policy for XSM and
>>>> indeed may not fit your use case. But you can write your own policy and load
>>>> it.
>>> Yes. You need policy "allow this stubdom to map memory only from TEE-enabled
>>> guests". AFAIK, this is not possible right now. But I can be wrong, I'm
>>> not very familiar with XSM.
>>
>> I believe XSM could do that. IIRC, you can "label" your domain and use that
>> to say "stubdom is allowed to access memory with domain using the given
>> label".
> Aha. This is good news. Thanks. Looks like I need to dig deeper into XSM...
>
>>>
>>>>>
>>>>> 3. Changes in scheduling to allow TEE mediator use credits/slices of
>>>>> calling guest.
>>>>>
>>>>> 4. Support boilerplate code in stubdom. You know, you can't simply
>>>>> write mediator in stubdom. You need a kernel. You need to
>>>>> maintain it.
>>>>
>>>> Well, in a way or another someone will have to maintain the mediator... The
>>>> kernel does not need to be specific to TEE, it could be a unikernel.
>>> Right. But for me XEN looks better maintained "kernel" :)
>>> IMHO, XEN is mature, there are less bugs (especially security ones)
>>> than in any other kernel.
>>>
>>>> And before you say again no-one in the community seem to be interested. I
>>>> should remind you that Arm is working on it (see development update).
>>> You are talking about that "unicore" project by NEC guys? Sorry,
>>> can't find mentioned development update. Looks like search on markmail
>>> is down (or I'm doing something terribly wrong).
>>
>> Sorry, I meant Mini-OS. I don't know any work on "unicore" for Arm64 for
>> now.
> Ah, good to hear. So there will be active maintainer for ARM64
> Mini-OS? Sorry, still can't find that "development update".
At the moment, the series is still in development. But yet the plan is
to get Arm64 fully supported in Mini-OS.
>
>>>
>>>>>
>>>>> This is a lot of a work. It requires changes in generic parts of XEN.
>>>>> I fear it will be very hard to upstream such changes, because no one
>>>>> sees an immediate value in them. How do you think, what are my chances
>>>>> to upstream this?
>>>>
>>>> It is fairly annoying to see you justifying back most of this thread with
>>>> "no one sees an immediate value in them".
>>>>
>>>> I am not the only maintainers in Xen, so effectively can't promise whether
>>>> it is going to be upstreamed. But I believe the community has been very
>>>> supportive so far, a lot of discussions happened (see [2]) because of the
>>>> OP-TEE support. So what more do you expect from us?
>>> I'm sorry, I didn't mean to offend you or someone else. You, guys, can
>>> be harsh sometimes, but I really appreciate help provided by the
>>> community. And I, certainly, don't ask you about any guarantees or
>>> something of that sort.
>>>
>>> I'm just bothered by amount of required work and by upstreaming
>>> process. But this is not a strong argument against mediators in
>>> stubdoms, I think :)
>>>
>>> Currently I'm developing virtualization support in OP-TEE, so in
>>> meantime we'll have much time to discuss mediators and stubdomain
>>> approach (if you have time). To test this feature in OP-TEE I'm
>>> extending this RFC, making optee.c to look like full-scale mediator.
>>> I need to do this anyways, to test OP-TEE. When I'll finish, I can
>>> show you how mediator can look like. Maybe this will persuade you to
>>> one or another approach.
>>
>> I think this would be useful. Can you also keep both Stefano (I assume he
>> wants too) and I in the loop for the OP-TEE virtualization side?
> Okay. I'm planning to produce first RFC for OP-TEE folks in a few
> days. I'll subscribe you. In then meantime you can check out [2]
Thank you!
> [1] http://markmail.org/message/tdbg5mgxjvsoj2ph
> [2] https://github.com/OP-TEE/optee_os/issues/1890
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-11-02 13:17 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-11 19:01 [RFC 0/4] TEE mediator framework + OP-TEE mediator Volodymyr Babchuk
2017-10-11 19:01 ` [RFC 1/4] arm: add SMC wrapper that is compatible with SMCCC Volodymyr Babchuk
2017-10-16 14:53 ` Julien Grall
2017-10-11 19:01 ` [RFC 2/4] arm: add generic TEE mediator framework Volodymyr Babchuk
2017-10-16 13:00 ` Julien Grall
2017-10-17 16:22 ` Volodymyr Babchuk
2017-10-17 16:39 ` Julien Grall
2017-10-17 17:22 ` Volodymyr Babchuk
2017-10-17 17:35 ` Julien Grall
2017-10-11 19:01 ` [RFC 3/4] arm: tee: add OP-TEE header files Volodymyr Babchuk
2017-10-16 14:04 ` Julien Grall
2017-10-17 16:24 ` Volodymyr Babchuk
2017-10-17 16:41 ` Julien Grall
2017-10-11 19:01 ` [RFC 4/4] arm: tee: add basic OP-TEE mediator Volodymyr Babchuk
2017-10-16 14:36 ` Julien Grall
2017-10-17 17:08 ` Volodymyr Babchuk
2017-10-17 17:30 ` Julien Grall
2017-10-17 18:57 ` Volodymyr Babchuk
2017-10-19 14:01 ` Julien Grall
2017-10-19 15:33 ` Volodymyr Babchuk
2017-10-19 16:12 ` Julien Grall
2017-10-19 16:37 ` Volodymyr Babchuk
2017-10-19 16:52 ` Julien Grall
2017-10-16 12:00 ` [RFC 0/4] TEE mediator framework + " Julien Grall
2017-10-17 15:59 ` Volodymyr Babchuk
2017-10-20 13:11 ` Julien Grall
2017-10-20 16:57 ` Tamas K Lengyel
2017-10-20 17:46 ` Volodymyr Babchuk
2017-10-20 17:37 ` Volodymyr Babchuk
2017-10-23 16:59 ` Julien Grall
2017-10-23 20:11 ` Volodymyr Babchuk
2017-10-23 21:26 ` Stefano Stabellini
2017-10-24 16:33 ` Volodymyr Babchuk
2017-10-24 21:33 ` Stefano Stabellini
2017-10-27 13:47 ` Julien Grall
2017-10-27 19:59 ` Stefano Stabellini
2017-10-27 20:06 ` Julien Grall
2017-10-24 17:33 ` Julien Grall
2017-10-24 19:02 ` Volodymyr Babchuk
2017-11-02 13:17 ` Julien Grall [this message]
2017-11-02 16:53 ` Volodymyr Babchuk
2017-11-02 17:49 ` Julien Grall
2017-11-02 20:07 ` Volodymyr Babchuk
2017-11-07 16:03 ` Julien Grall
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-all 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=a6d70a01-acd6-2d82-d339-f370a5a4147a@linaro.org \
--to=julien.grall@linaro.org \
--cc=jens.wiklander@linaro.org \
--cc=julien.grall@arm.com \
--cc=nd@arm.com \
--cc=sstabellini@kernel.org \
--cc=volodymyr_babchuk@epam.com \
--cc=xen-devel@lists.xen.org \
/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;
as well as URLs for NNTP newsgroup(s).