EDP author here. Feel free to ping me any time with any security/support 
questions regarding Fortanix EDP. Either on GitHub, or on 
[Slack](https://fortanix.com/runtime-encryption-slack).

> Fortanix EDP is not designed for security, so it has assumptions of trusting 
> the OS.

Both these things are completely, entirely, 100% incorrect. (@dingelish I'd be 
interested to know how you came to this understanding. I'd also appreciate it 
if you take security concerns directly to Fortanix instead of claiming 
incorrect things in a public forum.)

In fact, the Fortanix EDP is designed from the ground up to be the most secure 
and easy to use enclave interface and platform out there.

* Unlike every single other enclave platform out there, there is no C code 
whatsoever in the enclave.† This protects you from dangerous memory safety 
vulnerabilities exposing your enclave secrets.
* There is only a [small 
interface](https://edp.fortanix.com/docs/api/fortanix_sgx_abi/index.html) with 
the untrusted environment that is the *same* for all enclaves, such that its 
security can be evaluated and implementation audited once instead of for each 
enclave separately. The security implications of every part of this interface 
have been carefully designed, evaluated, and tested.
* Even if you want to use raw user memory for communication, there are user 
reference primitives for dealing with pointers to user space. These primitives 
use Rust's borrowing and ownership mechanism to avoid data races and TOCTTOU 
issues, and also prevent creating dangerous Rust references to user memory. 
However, we strongly recommend you use byte streams instead, which is why 
Rust's core byte stream primitive (`std::net::TcpStream`) is made available to 
developers.
* All code that you're required to bring into the enclave (say, to get “hello 
world” running) is from official Rust repositories, which receive far more 
scrutiny from 3rd parties than external Rust forks.

> For example, the atomicity of EDP's SGX RwLock is untrusted.
> ...
> Technically, Fortanix EDP maintains an event queue in untrusted space and 
> RwLock's atomicity roots from it -- resulting in untrusted atomicity.
> ...
> The JoinHandle is implemented using untrusted Mutex

Wrong. All locks are protected using in-enclave state.

Yes, there is an event queue in untrusted space. But since enclave state is the 
source of truth for locks, if userspace decides to ignore the event queue and 
wake up the wrong thread, nothing bad can happen. Since the OS is already free 
to schedule/deschedule enclave threads at any time, this gives you the exact 
same security as using spinlocks, except without the CPU overhead in case locks 
are held for a long time.

> For other input/output, they are all interacting with untrusted input/output 
> sources.

I don't understand your point here, SGX doesn't have trusted I/O. Everyone has 
to do this. [We 
recommend](https://edp.fortanix.com/docs/concepts/rust-std/#stream-networking) 
you use TLS to protect all enclave communications.

> they provide a LibOS-like Rust-SGX environment without any ability to 
> control/audit the usercalls in compile time. It sounds like pushing the 
> programmers to the edge of a cliff and say: you have the choice to not step 
> forward. As an experienced researcher, you can hardly got away from the 
> falling down because too much stuffs depends on their usercalls. The bad 
> design is not desired by Fortanix, but a result of combining libstd to an 
> environment without thread/fs/time/env/process/net.

Developing for SGX (or for any environment, really) requires the programmer to 
have certain background knowledge. However, there is only so much the developer 
can actively keep track off. This is the complexity budget. Everything else 
that doesn't fit in this budget needs to be reviewed and audited by others.

We've clearly chosen a different trade-off here than you. I'd say reviewing 
your enclave codebase for usage of `std::net` and letting the programmer use 
familiar interfaces such as HTTP REST and gRPC scores far better in terms of 
complexity than requiring developers to learn a new language and paradigm (EDL) 
for describing their enclave interface.

> Con: malicious operator could deny availability by blocking network access

This is not a drawback specifically of Fortanix EDP. A malicious operator can 
always do this for any SGX application.

Again, feel free to ping me any time with questions.

† When using panic=abort.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/dmlc/tvm/issues/2887#issuecomment-492752317

Reply via email to