RCA
危険な暗号化アルゴリズムが使用されています
プログラムが機密データを処理する場合、または通信チャネルを保護する場合、暗号化を使えば攻撃者がこれらを読み取れないようにすることができます。攻撃に対する脆弱性があることが分かっているいくつかの廃止された暗号化アルゴリズムがあります。
RCA チェッカーは、既知の破られたりリスクがあったりする暗号化アルゴリズムの特定のセットの使用を検出します。
脆弱性とリスク
プログラムがデータ処理に破られた、または危険なアルゴリズムを使用している場合、プログラムがセキュリティ上脆弱となる可能性があります。CWE-327 および NIST 特別発表 800-131A リビジョン 1 では、破られていたり、リスクがあったりして使用できないアルゴリズムとして以下のアルゴリズムを一覧表示しています。CBC-MAC、DES、DES-X、Two-key Triple DES、MD2、MD4、MD5、RC2、RNG in ANSI X9.31、SHA-0、SHA-1、SKIPJACK。これらのアルゴリズムは、使用は推奨されないものの、暗号ライブラリではまだサポートされています。
軽減と防止
報告されている弱いアルゴリズムをより強いもので置き換えることを考慮してください。たとえば、SHA-256 や SHA-512 を SHA-1 や MD5 の代わりにすることができ、AES を DES の代わりにすることができます。
例 1
関数呼び出しがリスクのあるアルゴリズムを呼び出します (またはそれを表すオブジェクトを初期化します)。
#include <openssl/md5.h>
void foo( const unsigned char *msg, unsigned int len) {
unsigned char md5digest[MD5_DIGEST_LENGTH];
MD5(msg, len, md5digest); // <== RCA reported
// .。。。。
}
例 2
リスクのあるアルゴリズムを特定する定数 C 文字列リテラルがそれを実行する機能に渡されるか、それを表すオブジェクト インスタンスを初期化します。
#include <Bcrypt.h>
void demo()
{
NTSTATUS status;
BCRYPT_ALG_HANDLE hAlg;
status = BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_MD4_ALGORITHM, 0, 0); // <== RCA reported
// use(hAlg)
}
例 3
危険なアルゴリズムを表すクラスのインスタンスが作成されます。
#include <cryptopp/sha.h>
using namespace CryptoPP;
void bar() {
SHA1 *hashfunc = new SHA1(); // <== RCA reported
// use(hashfunc)
}
例 4
カスタムクラスが、危険なアルゴリズムを表すクラスから継承されています。
#include <cryptopp/sha.h>
class MyAlgo : public CryptoPP::SHA1 { // <== RCA reported
// .。。。。
};
外部参考資料
暗号アルゴリズムの概要および承認ステータス:
-
NIST.SP.800-131Ar1: NIST 特別発表 800-131A リビジョン 1。移行: 暗号アルゴリズムとキーの長さの以降に関する勧告 (2015 年 11 月)
破られた暗号アルゴリズムに関する報告と記事:
- CWE-327: 破られたまたは危険な暗号化アルゴリズムの使用
- OWASP A2:2021 暗号化の失敗
-
Dual_EC_DRBG: Matthew Green.The Many Flaws of Dual_EC_DRBG.
-
Dual_EC_DRBG: Kristian Gjøsteen.Comments on Dual-EC-DRBG/NIST SP 800-90
-
MD5: J. Black, M. Cochran, T. Highland.A study of the MD5 attacks: insights and improvements
-
SHA-1: M. Stevens, P. Karman, T. Peyrin.Freestart collision for full SHA-1
-
SHA-1: C. McDonald, P. Hawkes, J. Pieprzyk.Differential path for SHA-1 with complexity O(2^52)
-
SKIPJACK: Bruce Schneier.Declassifying Skipjack, July 15, 1998
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。