Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'doc/development/fips_compliance.md')
-rw-r--r--doc/development/fips_compliance.md144
1 files changed, 144 insertions, 0 deletions
diff --git a/doc/development/fips_compliance.md b/doc/development/fips_compliance.md
new file mode 100644
index 00000000000..0b6d1751668
--- /dev/null
+++ b/doc/development/fips_compliance.md
@@ -0,0 +1,144 @@
+---
+stage: none
+group: unassigned
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# FIPS compliance
+
+FIPS is short for "Federal Information Processing Standard", a document which
+defines certain security practices for a "cryptographic module" (CM). It aims
+to ensure a certain security floor is met by vendors selling products to U.S.
+Federal institutions.
+
+WARNING:
+GitLab is not FIPS compliant, even when built and run on a FIPS-enforcing
+system. Large parts of the build are broken, and many features use forbidden
+cryptographic primitives. Running GitLab on a FIPS-enforcing system is not
+supported and may result in data loss. This document is intended to help
+engineers looking to develop FIPS-related fixes. It is not intended to be used
+to run a production GitLab instance.
+
+There are two current FIPS standards: [140-2](https://en.wikipedia.org/wiki/FIPS_140-2)
+and [140-3](https://en.wikipedia.org/wiki/FIPS_140-3). At GitLab we usually
+mean FIPS 140-2.
+
+## Current status
+
+GitLab Inc has not committed to making GitLab FIPS-compliant at this time. We are
+performing initial investigations to see how much work such an effort would be.
+
+Read [Epic &5104](https://gitlab.com/groups/gitlab-org/-/epics/5104) for more
+information on the status of the investigation.
+
+## FIPS compliance at GitLab
+
+In a FIPS context, compliance is a form of self-certification - if we say we are
+"FIPS compliant", we mean that we *believe* we are. There are no external
+certifications to acquire, but if we are aware of non-compliant areas
+in GitLab, we cannot self-certify in good faith.
+
+The known areas of non-compliance are tracked in [Epic &5104](https://gitlab.com/groups/gitlab-org/-/epics/5104).
+
+To be compliant, all components (GitLab itself, Gitaly, etc) must be compliant,
+along with the communication between those components, and any storage used by
+them. Where functionality cannot be brought into compliance, it must be disabled
+when FIPS mode is enabled.
+
+## FIPS validation at GitLab
+
+Unlike FIPS compliance, FIPS validation is a formal declaration of compliance by
+an accredited auditor. The requirements needed to pass the audit are the same as
+for FIPS compliance.
+
+A list of FIPS-validated modules can be found at the
+NIST (National Institute of Standards and Technology)
+[cryptographic module validation program](https://csrc.nist.gov/projects/cryptographic-module-validation-program/validated-modules).
+
+## Setting up a FIPS-enabled development environment
+
+The simplest approach is to set up a virtual machine running
+[Red Hat Enterprise Linux 8](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening#switching-the-system-to-fips-mode_using-the-system-wide-cryptographic-policies).
+
+Red Hat provide free licenses to developers, and permit the CD image to be
+downloaded from the [Red Hat developer's portal](https://developers.redhat.com).
+Registration is required.
+
+After the virtual machine is set up, you can follow the [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit)
+installation instructions, including the [advanced instructions for RHEL](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/advanced.md#red-hat-enterprise-linux).
+Note that `asdf` is not used for dependency management because it's essential to
+use the RedHat-provided Go compiler and other system dependencies.
+
+### Working around broken frontend asset compilation
+
+A known bug affects asset compilation with FIPS mode enabled: [issue #322883](https://gitlab.com/gitlab-org/gitlab/-/issues/322883).
+Until this is resolved, working on frontend issues is not feasible. We can still
+work on backend issues by compiling the assets while FIPS is disabled, and
+placing GDK into [static asset mode](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/configuration.md#webpack-settings):
+
+1. Modify your `gdk.yml` to contain the following:
+
+ ```yaml
+ webpack:
+ host: 127.0.0.1
+ port: 3808
+ static: true
+ ```
+
+1. In the GitLab repository, apply this patch to prevent the assets from being
+ automatically deleted whenever GDK is restarted:
+
+ ```diff
+ diff --git a/scripts/frontend/webpack_dev_server.js b/scripts/frontend/webpack_dev_server.js
+ index fbb80c9617d..114720d457c 100755
+ --- a/scripts/frontend/webpack_dev_server.js
+ +++ b/scripts/frontend/webpack_dev_server.js
+ @@ -15,7 +15,7 @@ const baseConfig = {
+ // run webpack in compile-once mode and watch for changes
+ if (STATIC_MODE) {
+ nodemon({
+ - exec: `rm -rf public/assets/webpack ; yarn run webpack && exec ruby -run -e httpd public/ -p ${DEV_SERVER_PORT}`,
+ + exec: `ruby -run -e httpd public/ -p ${DEV_SERVER_PORT}`,
+ watch: [
+ 'config/webpack.config.js',
+ 'app/assets/javascripts',
+ ```
+
+1. Run this command in the GitLab repository to generate the asset files
+ to be served:
+
+ ```shell
+ bin/rails gitlab:assets:compile
+ ```
+
+Every time you change a frontend asset, you must re-run this command
+(with FIPS mode disabled) before seeing the changes.
+
+### Enable FIPS mode
+
+After the assets are generated, run this command (as root) and restart the
+virtual machine:
+
+```shell
+fips-mode-setup --enable
+```
+
+You can check whether it's taken effect by running:
+
+```shell
+fips-mode-setup --check
+```
+
+In this environment, OpenSSL refuses to perform cryptographic operations
+forbidden by the FIPS standards. This enables you to reproduce FIPS-related bugs,
+and validate fixes.
+
+You should be able to open a web browser inside the virtual machine and log in
+to the GitLab instance.
+
+You can disable FIPS mode again by running this command, then restarting the
+virtual machine:
+
+```shell
+fips-mode-setup --disable
+```