Giter Site home page Giter Site logo

enclaive / enclaive-docker-nodejs-sgx Goto Github PK

View Code? Open in Web Editor NEW
5.0 1.0 1.0 46 KB

SGX-ready Enclaive Docker Image for Node

Dockerfile 50.38% JavaScript 49.62%
cloudsec confidential-computing container container-escape cybersecurity devops docker gdpr javascript kubernetes

enclaive-docker-nodejs-sgx's Introduction


nodejs-sgx
Nodejs-SGX

Nodejs-SGX: Execute Javascript applications in the safest Confidential Compute runtime

packed by enclaive


#intelsgx #confidentialcompute #jssecurity
Contribute · Report Bug · Request Feature


Demo-Video: NodeJS Express and Protection against Runtime Leakage (read more)

TL;DR

docker pull enclaive/nodejs-sgx
cd example && yarn install
docker-compose up -d

Warning: This quick setup is only intended for development environments. You are encouraged to change the insecure default credentials and check out the available configuration options in the build section for a more secure deployment.

What is Nodejs and SGX?

Node.js is an open-source, cross-platform, back-end JavaScript runtime environment that runs on a JavaScript Engine
and executes JavaScript code outside a web browser, which was designed to build scalable network applications. Node.js lets developers use JavaScript to write command line tools and for server-side scripting—running scripts server-side to produce dynamic web page content before the page is sent to the user's web browser. Consequently, Node.js represents a "JavaScript everywhere" paradigm, unifying web-application development around a single programming language, rather than different languages for server-side and client-side scripts. Overview of Nodejs

Intel Security Guard Extension (SGX) delivers advanced hardware and RAM security encryption features, so called enclaves, in order to isolate code and data that are specific to each application. When data and application code run in an enclave additional security, privacy and trust guarantees are given, making the container an ideal choice for (untrusted) cloud environments.

Overview of Intel SGX

Application code executing within an Intel SGX enclave:

  • Remains protected even when the BIOS, VMM, OS, and drivers are compromised, implying that an attacker with full execution control over the platform can be kept at bay
  • Benefits from memory protections that thwart memory bus snooping, memory tampering and “cold boot” attacks on images retained in RAM
  • At no moment in time data, program code and protocol messages are leaked or de-anonymized
  • Reduces the trusted computing base of its parent application to the smallest possible footprint

Why use Nodejs-SGX (instead of "vanilla" Nodejs) images?

Following benefits come for free with Nodejs-SGX :

  • Protect data, Javascript applications, services, APIs, (AI) models against intelectual property theft/violation irrespectively where the container runs thanks to full fledge memory container encryption and integrity protection at runtime
  • Shield container application against container escalation attacks with hardened security against kernel-space exploits, malicious and accidental privilege insider attacks, UEFI firmware exploits and other "root" attacks using the corruption of the application to infiltrate your network and system
  • Build and deploy Javasript application as usual while inheriting literally for free security and privacy through containerization including
    • strictly better TOMs (technical and organizatorial measures)
    • privacy export regulations compliant deployment anywhere, such as Schrems-II
    • GDPR/CCPA compliant processing ("data in use") of user data (in the cloud) as data is anonymized thanks to the enclave

How to deploy NGINX-SGX in a zero-trust cloud?

The following cloud infrastractures are SGX-ready out of the box

Confidential compute is a fast growing space. Cloud providers continiously add confidential compute capabilities to their portfolio. Please contact us if the infrastracture provider of your preferred choice is missing.

Getting started

Platform requirements

Check for Intel Security Guard Extension (SGX) presence by running the following

grep sgx /proc/cpuinfo

Alternatively have a thorough look at Intel's processor list. (We remark that macbooks with CPUs transitioned to Intel are unlikely supported. If you find a configuration, please contact us know.)

Note that in addition to SGX the hardware module must support FSGSBASE. FSGSBASE is an architecture extension that allows applications to directly write to the FS and GS segment registers. This allows fast switching to different threads in user applications, as well as providing an additional address register for application use. If your kernel version is 5.9 or higher, then the FSGSBASE feature is already supported and you can skip this step.

There are several options to proceed

  • If: No SGX-ready hardware
    Azure Confidential Compute cloud offers VMs with SGX support. Prices are fair and have been recently reduced to support the developer community. First-time users get $200 USD free credit. Other cloud provider like OVH or Alibaba cloud have similar offerings.

  • Elif: Virtualization
    Ubuntu 21.04 (Kernel 5.11) provides the driver off-the-shelf. Read the release. Go to download page.

  • Elif: Kernel 5.9 or higher
    Install the DCAP drivers from the Intel SGX repo

    sudo apt update
    sudo apt -y install dkms
    wget https://download.01.org/intel-sgx/sgx-linux/2.13.3/linux/distro/ubuntu20.04-server/sgx_linux_x64_driver_1.41.bin -O sgx_linux_x64_driver.bin
    chmod +x sgx_linux_x64_driver.bin
    sudo ./sgx_linux_x64_driver.bin
    
    sudo apt -y install clang-10 libssl-dev gdb libsgx-enclave-common libsgx-quote-ex libprotobuf17 libsgx-dcap-ql libsgx-dcap-ql-dev az-dcap-client open-enclave
  • Else: Kernel older than version 5.9
    Upgrade to Kernel 5.11 or higher. Follow the instructions here.

Software requirements

Install the docker engine

 sudo apt-get update
 sudo apt-get install docker-ce docker-ce-cli containerd.io
 sudo usermod -aG docker $USER    # manage docker as non-root user (obsolete as of docker 19.3) 

Use docker run hello-world to check if you can run docker (without sudo).

Get this image

The recommended way to get the enclaive Nodejs-SGX runtime Docker Image is to pull the prebuilt image from the Docker Hub Registry.

docker pull enclaive/nodejs-sgx:latest

To use a specific version, you can pull a versioned tag. You can view the list of available versions in the Docker Hub Registry.

docker pull enclaive/nodejs-sgx:[TAG]

Build the image

If you wish, you can also build the image yourself.

docker build -t enclaive/nodejs-sgx:latest 'https://github.com/enclaive/enclaive-docker-nodejs-sgx.git#master'

Modify the Image

Copy your nodejs project to folder example/src. Make sure npm is installed and executed

cd example
npm install

Run

docker compose up

Node serves the application on port 3000.

Accessing your server from the host

To access the node container from your host machine you can ask Docker to map a random port on your host to ports 3000 exposed in the container.

docker run --name nodejs-sgx -p 3000:3000 \  
    --device=/dev/sgx_enclave \ 
    -v /var/run/aesmd/aesm.socket:/var/run/aesmd/aesm.socket \ 
    enclaive/nodejs-sgx:latest

Access your node in the browser by navigating to https://localhost:3000.

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Support

Don't forget to give the project a star! Spread the word on social media! Thanks again!

License

Distributed under the Apache License 2.0 License. See LICENSE for more information.

Contact

enclaive.io - @enclaive_io - [email protected] - https://enclaive.io

Acknowledgments

This project greatly celebrates all contributions from the gramine team. Special shout out to Dmitrii Kuvaiskii from Intel for his support.

Trademarks

This software listing is packaged by enclaive.io. The respective trademarks mentioned in the offering are owned by the respective companies, and use of them does not imply any affiliation or endorsement.

enclaive-docker-nodejs-sgx's People

Contributors

klassiker avatar sebastiangajek avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

soelangen

enclaive-docker-nodejs-sgx's Issues

WebAssembly can not allocate memory properly

Problem:

I'm trying to run a simple snarkjs sample in sgx enclave, but process can not start up normally.
It seems that process fail to request WebAssembly memory allocation.
Expanding enclave size to 16G still does't work.
image

CPU:

Intel(R) Xeon(R) Gold 5318Y CPU

Snarkjs Sample:

const snarkjs = require("snarkjs")
const express = require('express')
const morgan = require('morgan')
const fs = require('fs')

const app = express()
const port = 3000

// create a write stream (in append mode)
const accessLogStream = fs.createWriteStream('/data/access.log', { flags: 'a' })

app.use(morgan('combined', { stream: accessLogStream }))

app.get('/hello', (req, res) => {
    res.send(run())
})

app.get('/shutdown', (req, res) => {
    process.exit()
})

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

async function run() {
    const { proof, publicSignals } = await snarkjs.plonk.fullProve({a: 3, b: 11}, "/app/demo/circuit_js/circuit.wasm", "/app/demo/circuit_final.zkey");

    console.log("Proof: ");
    console.log(JSON.stringify(proof, null, 1));

    const vKey = JSON.parse(fs.readFileSync("/app/demo/verification_key.json"));

    const res = await snarkjs.plonk.verify(vKey, publicSignals, proof);

    if (res === true) {
        console.log("Verification OK");
    } else {
        console.log("Invalid proof");
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.