遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。 显示详细资料
[](https://www.bestpractices.dev/projects/8380)
<a href="https://www.bestpractices.dev/projects/8380"><img src="https://www.bestpractices.dev/projects/8380/badge"></a>
Gramine (formerly called Graphene) is a lightweight library OS, designed to run a single application with minimal host requirements. Gramine can run applications in an isolated environment with benefits comparable to running a complete OS in a virtual machine -- including guest customization, ease of porting to different OSes, and process migration.
https://github.com/gramineproject/gramine/blob/master/CONTRIBUTING.rst#pull-requests, https://github.com/gramineproject/gramine/blob/master/CONTRIBUTING.rst#style-guidelines, https://github.com/gramineproject/gramine/blob/master/Documentation/devel/coding-style.rst
https://github.com/gramineproject/gramine/blob/master/DCO
https://github.com/gramineproject/gramine/blob/master/CHARTER.rst, https://github.com/gramineproject/gramine/blob/master/Documentation/management-team.rst.
https://github.com/gramineproject/gramine/blob/master/CODE_OF_CONDUCT.rst
https://github.com/gramineproject/gramine/blob/master/Documentation/management-team.rst
Gramine project has distributed maintainers across different institutions and countries: https://github.com/gramineproject/gramine/blob/master/Documentation/management-team.rst and is managed under the technical charter: https://github.com/gramineproject/gramine/blob/master/CHARTER.rst.
Using the truck-factor tool: https://github.com/aserg-ufmg/Truck-Factor, we have a TF of 4 (at the time of 2/20/2024, commit 2cef387481ba47fff2df16b02fa49acf6fc1e94e).
https://github.com/orgs/gramineproject/projects/1/views/1
https://gramine.readthedocs.io/en/latest/devel/features.html
The overview security design and considerations of Gramine are covered in https://gramine.readthedocs.io/en/latest/devel/features.html. The specific security expectations of Gramine manifest options are described in https://gramine.readthedocs.io/en/latest/manifest-syntax.html.
https://gramine.readthedocs.io/en/latest/index.html, https://gramine.readthedocs.io/en/latest/run-sample-application.html.
Documentation is maintained and released with each tagged release of the software (e.g., https://gramine.readthedocs.io/en/v1.6/index.html for the 1.6 release). Additionally, the master branch documentation is updated and maintained at https://github.com/gramineproject/gramine/tree/master/Documentation (https://gramine.readthedocs.io/en/latest). Documentation defects are tracked along with code defects in our Github issues.
https://github.com/gramineproject/gramine, https://gramineproject.io/.
Gramine is a lightweight library OS without any user interface or textual output. This can come as part of an application on top of Gramine, but Gramine itself does not have any end-user facing interface that needs to be internationalised.
Gramine project does not store passwords for this purpose.
Previous software releases are available from https://github.com/gramineproject/gramine/releases.
https://github.com/gramineproject/gramine/issues
Gramine follows https://github.com/gramineproject/gramine/blob/master/SECURITY.md and one example: https://github.com/gramineproject/gramine/pull/1570/commits/a390e33e16ed374a40de2344562a937f289be2e1.
https://github.com/gramineproject/gramine/blob/master/SECURITY.md
https://github.com/gramineproject/gramine/blob/master/Documentation/devel/coding-style.rst
Gramine is using Meson to build binaries which does support the above and does honor environment variables.
The debugging information is preserved if requested in the relevant flags (buildtype).
buildtype
Any cross dependencies will cause a rebuild of the dependent component.
Gramine had this in plan and conducted some preliminary experiments on reproducible builds: https://github.com/gramineproject/gramine/issues/153, but it's not yet done.
Build and install from source: https://github.com/gramineproject/gramine/blob/master/Documentation/devel/building.rst; install from packages: https://github.com/gramineproject/gramine/blob/master/Documentation/installation.rst, .
By default, Meson uses installation prefix /usr/local but this can be changed via meson --prefix=<prefix>. See https://github.com/gramineproject/gramine/blob/master/Documentation/devel/building.rst#installation-prefix for more details.
/usr/local
meson --prefix=<prefix>
Build and install from source: https://github.com/gramineproject/gramine/blob/master/Documentation/devel/building.rst.
External dependencies are managed by Meson: https://github.com/gramineproject/gramine/blob/master/meson.build. See https://github.com/gramineproject/gramine/tree/master/subprojects, https://github.com/gramineproject/gramine/blob/master/subprojects/README.rst for details on the dependencies.
We update dependencies regularly: https://github.com/gramineproject/gramine/blob/master/subprojects/README.rst.
https://github.com/gramineproject/gramine/tree/master/subprojects, https://github.com/gramineproject/gramine/blob/master/subprojects/README.rst.
Gramine project uses minimal external APIS, e.g., from mbedTLS. We verify usage of those APIs on constant basis and remove any obsolete usage when found or reported.
Gramine has a set of CI pipelines: https://github.com/gramineproject/gramine/tree/master/.ci
https://github.com/gramineproject/gramine/tree/master/libos/test/regression, https://github.com/gramineproject/gramine/tree/master/pal/regression.
Gramine is a LibOS that can't be run with all features enabled (statements covered), the coverage of some areas is not measured yet.
https://gramine.readthedocs.io/en/latest/devel/onboarding.html#typical-gramine-development-flows, https://gramine.readthedocs.io/en/latest/devel/onboarding.html#adding-new-features.
https://gramine.readthedocs.io/en/latest/devel/onboarding.html#fixing-a-bug, https://gramine.readthedocs.io/en/latest/devel/onboarding.html#implementing-a-new-system-call, https://gramine.readthedocs.io/en/latest/devel/onboarding.html#adding-new-features.
Build system compiles and fails when met with warnings. CI also catch potential issues before being accepted into the code.
Gramine is designed and implemented with security in mind: https://github.com/gramineproject/gramine/blob/master/Documentation/devel/features.md, and focuses on quality and security rather than speed of development.
There are no default usages for weak crypto, SSH is not being used and is not supported.
Gramine uses a fixed set of crypto algorithms: it uses TLS-PSK 1.2 with AES-GCM 128 and SHA256 for Inter-Process Communication (IPC) when the application’s enclaves (parent, its children) communicate via pipes/sockets; ISO KE (authenticated Diffie-Hellman, RFC3526 MODP_3072_P/G) for IPC, when two enclaves of the application establish a new channel and must generate a unique shared key; AES-GCM 128 for Protected File System: Encryption/decryption of the protected files during read/write; RSA PKCS#1 v1.5, 3072 bits for RA-TLS.
This is application specific and is out of scope for the project. Mechanism to support this requirement are provided in general terms. Application developer will have to follow best practices for their use-case.
Gramine internally uses TLS-PSK 1.2 with AES-GCM 128 and SHA256 for Inter-Process Communication (IPC) when the application’s enclaves (parent, its children) communicate via pipes/sockets. Gramine provides RA-TLS shared lib that runs on top of Gramine, which integrates SGX RA with the establishment of the standard TLS secure channel protocol. The main difference from normal TLS lib is in the X.509 cert and TLS handshake verification. The use of TLS (e.g., versions, configurations) is application specific and is out of scope for the project.
Gramine uses TLS-PSK 1.2 with AES-GCM 128 and SHA256 for Inter-Process Communication (IPC) when the application’s enclaves (parent, its children) communicate via pipes/sockets, which is not based on certificate verification. Gramine provides RA-TLS shared lib that runs on top of Gramine, which integrates SGX RA with the establishment of the standard TLS secure channel protocol. RA-TLS requires certificate verification but the use of TLS (e.g., versions, configurations) is application specific and is out of scope for the project.
It's in plan: https://github.com/gramineproject/gramine/issues/235 but not yet done.
Gramine does input sanitization from potentially untrusted sources (e.g. malicious hosts) to ensure they are valid.
Gramine is built with stack-protector where supported.
The project maintains internal and external documentation of current threat models, identification of assets, and trust boundaries: https://github.com/gramineproject/gramine/blob/master/Documentation/devel/features.md.
We run Coverity (https://www.synopsys.com/software-integrity/static-analysis-tools-sast/coverity.html) and BDBA (https://www.synopsys.com/software-integrity/software-composition-analysis-tools/binary-analysis.html) on every release (including point release).
We run with sanitizers (ASAN, UBSAN) enabled for every commit and conduct syzkaller-based fuzzing regularly.
后退