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 
      // .....
 };

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。