This rule aims to prevent the use of hardcoded keys or initialization vectors (IVs) in cryptographic operations. Hardcoding sensitive cryptographic material directly in the source code poses significant security risks, as it makes keys easily discoverable and vulnerable to unauthorized access.
To comply with this rule, developers should generate encryption keys and IVs dynamically at runtime using secure methods or retrieve them securely from protected storage mechanisms. For example, instead of Blob key = Blob.valueOf('0000000000000000');, a compliant approach would be Blob key = Blob.valueOf(getRandomValue()); where getRandomValue() produces a secure, random key.
Non-Compliant Code Examples
class NotCompliant {
public void notCompliant() {
Blob data = Blob.valueOf('some data');
Blob encrypted = Crypto.encrypt('AES128', '0000000000000000', 'Hardcoded IV 123', data);
}
}
class NotCompliant {
public void notCompliant() {
Blob encryptedText = Blob.valueOf('Some encrypted cipher text');
Blob IV = Blob.valueOf(generateEncryptionIV());
Blob key = Blob.valueOf('0000000000000000');
Blob encrypted = Crypto.encrypt('AES128', key, IV, data);
}
}
class NotCompliant {
public void notCompliant() {
Blob IV = Blob.valueOf(generateEncryptionIV());
Blob hardCodedKey = Blob.valueOf('0000000000000000');
Blob data = Blob.valueOf('Data to be encrypted');
Blob encrypted = Crypto.encrypt('AES128', hardCodedKey, IV, data);
}
}
class NotCompliant {
public void notCompliant() {
Blob hardCodedIV = Blob.valueOf('Hardcoded IV 123');
Blob key = Blob.valueOf(generateEncryptionKey());
Blob data = Blob.valueOf('Data to be encrypted');
Blob encrypted = Crypto.encrypt('AES128', key, hardCodedIV, data);
}
}
class NotCompliant {
public void notCompliant() {
Blob hardCodedIV = Blob.valueOf('Hardcoded IV 123');
Blob hardCodedKey = Blob.valueOf('0000000000000000');
Blob data = Blob.valueOf('Data to be encrypted');
Blob encrypted = Crypto.encrypt('AES128', hardCodedKey, hardCodedIV, data);
}
}
Compliant Code Examples
class Compliant {
public void compliantExample() {
Blob encryptedText = Blob.valueOf('foobar');
Blob IV = Blob.valueOf(generateEncryptionIV());
Blob key = Blob.valueOf(getRandomValue());
Blob encrypted = Crypto.encrypt('AES128', key, IV, data);
}
}
class NotCompliant {
public void goodCryptoEncryption() {
Blob IV = Blob.valueOf(getRandomValue());
Blob key = Blob.valueOf(getRandomValue());
Blob data = Blob.valueOf('Data to be encrypted');
Blob encrypted = Crypto.encrypt('AES128', key, IV, data);
}
}
원활한 통합. Datadog Code Security를 경험해 보세요
Datadog Code Security
이 규칙을 사용해 Datadog Code Security로 코드를 분석하세요
규칙 사용 방법
1
2
rulesets:- apex-security # Rules to enforce Apex security.
리포지토리 루트에 위의 내용을 포함하는 static-analysis.datadog.yml을 만듭니다
무료 IDE 플러그인을 사용하거나 CI 파이프라인에 Code Security 검사를 추가합니다