mirror of
https://github.com/Cisco-Talos/clamav.git
synced 2025-10-19 10:23:17 +00:00
FIPS & FIPS-like limits on hash algs for cryptographic uses
ClamAV will not function when using a FIPS-enabled OpenSSL 3.x. This is because ClamAV uses MD5 and SHA1 algorithms for a variety of purposes including matching for malware detection, matching to prevent false positives on known-clean files, and for verification of MD5-based RSA digital signatures for determining CVD (signature database archive) authenticity. Interestingly, FIPS had been intentionally bypassed when creating hashes based whole buffers and whole files (by descriptor or `FILE`-pointer):78d4a9985a
Note: this bypassed FIPS the 1.x way with: `EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);` It was NOT disabled when using `cl_hash_init()` / `cl_update_hash()` / `cl_finish_hash()`. That likely worked by coincidence in that the hash was already calculated most of the time. It certainly would have made use of those functions if the hash had not been calculated prior:78d4a9985a/libclamav/matcher.c (L743)
Regardless, bypassing FIPS entirely is not the correct solution. The FIPS restrictions against using MD5 and SHA1 are valid, particularly when verifying CVD digital siganatures, but also I think when using a hash to determine if the file is known-clean (i.e. the "clean cache" and also MD5-based and SHA1-based FP signatures). This commit extends the work to bypass FIPS using the newer 3.x method: `md = EVP_MD_fetch(NULL, alg, "-fips");` It does this for the legacy `cl_hash*()` functions including `cl_hash_init()` / `cl_update_hash()` / `cl_finish_hash()`. It also introduces extended versions that allow the caller to choose if they want to bypass FIPS: - `cl_hash_data_ex()` - `cl_hash_init_ex()` - `cl_update_hash_ex()` - `cl_finish_hash_ex()` - `cl_hash_destroy_ex()` - `cl_hash_file_fd_ex()` See the `flags` parameter for each. Ironically, this commit does NOT use the new functions at this time. The rational is that ClamAV may need MD5, SHA1, and SHA-256 hashes of the same files both for determining if the file is malware, and for determining if the file is clean. So instead, this commit will do a checks when: 1. Creating a new ClamAV scanning engine. If FIPS-mode enabled, it will automatically toggle the "FIPS limits" engine option. When loading signatures, if the engine "FIPS limits" option is enabled, then MD5 and SHA1 FP signatures will be skipped. 2. Before verifying a CVD (e.g. also for loading, unpacking when verification enabled). If "FIPS limits" or FIPS-mode are enabled, then the legacy MD5-based RSA method is disabled. Note: This commit also refactors the interface for `cl_cvdverify_ex()` and `cl_cvdunpack_ex()` so they take a `flags` parameters, rather than a single `bool`. As these functions are new in this version, it does not break the ABI. The cache was already switched to use SHA2-256, so that's not a concern for checking FIPS-mode / FIPS limits options. This adds an option for `freshclam.conf` and `clamd.conf`: FIPSCryptoHashLimits yes And an equivalent command-line option for `clamscan` and `sigtool`: --fips-limits You may programmatically enable FIPS-limits for a ClamAV engine like this: ```C cl_engine_set_num(engine, CL_ENGINE_FIPS_LIMITS, 1); ``` CLAM-2792
This commit is contained in:
parent
51adfb8b61
commit
13c4788f36
33 changed files with 1305 additions and 239 deletions
|
@ -102,6 +102,11 @@ Path to a directory containing ClamAV CA certificate files used to verify signed
|
|||
.br
|
||||
Default: @CERTSDIR@
|
||||
.TP
|
||||
\fBFIPSCryptoHashLimits BOOL\fR
|
||||
Enforce FIPS\-like limits on using hash algorithms for cryptographic purposes. Will disable MD5 & SHA1 FP sigs and will require '.sign' files to verify CVD authenticity.
|
||||
.br
|
||||
Default: no
|
||||
.TP
|
||||
\fBOfficialDatabaseOnly BOOL\fR
|
||||
Only load the official signatures published by the ClamAV project.
|
||||
.br
|
||||
|
|
|
@ -291,6 +291,9 @@ Print the file type after each file scanned.
|
|||
.TP
|
||||
\fB\-\-cvdcertsdir=DIR\fR
|
||||
Specify a directory containing the root CA cert needed to verify detached CVD digital signatures. If not provided, then clamscan will look in the default directory.
|
||||
.TP
|
||||
\fB\-\-fips\-limits\fR
|
||||
Enforce FIPS\-like limits on using hash algorithms for cryptographic purposes. Will disable MD5 & SHA1 FP sigs and will require '.sign' files to verify CVD authenticity.
|
||||
|
||||
.SH "ENVIRONMENT VARIABLES"
|
||||
.LP
|
||||
|
|
|
@ -71,6 +71,11 @@ Path to a directory containing ClamAV CA certificate files used to verify signed
|
|||
.br
|
||||
Default: @CERTSDIR@
|
||||
.TP
|
||||
\fBFIPSCryptoHashLimits BOOL\fR
|
||||
Enforce FIPS\-like limits on using hash algorithms for cryptographic purposes. Will disable MD5 & SHA1 FP sigs and will require '.sign' files to verify CVD authenticity.
|
||||
.br
|
||||
Default: no
|
||||
.TP
|
||||
\fBForeground BOOL\fR
|
||||
Don't fork into background.
|
||||
.br
|
||||
|
|
|
@ -145,6 +145,9 @@ Unpack FILE (CVD) to a current directory.
|
|||
.TP
|
||||
\fB\-\-unpack\-current\fR
|
||||
Unpack a local CVD file (main or daily) to current directory.
|
||||
.TP
|
||||
\fB\-\-fips\-limits\fR
|
||||
Enforce FIPS\-like limits on using hash algorithms for cryptographic purposes. Will disable MD5 & SHA1 FP sigs and will require '.sign' files to verify CVD authenticity.
|
||||
|
||||
.SH "COMMANDS FOR WORKING WITH CDIFF PATCH FILES"
|
||||
.LP
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue