Skip to main content

V6.2.5 Algorithms

Requirement:#

Verify that known insecure block modes (i.e. ECB, etc.), padding modes (i.e. PKCS#1 v1.5, etc.), ciphers with small block sizes (i.e. Triple-DES, Blowfish, etc.), and weak hashing algorithms (i.e. MD5, SHA1, etc.) are not used unless required for backwards compatibility.

Explanation:#

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² обСспСчСнии Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ криптографичСских Π±Π»ΠΎΠΊΠΎΠ², Ρ€Π΅ΠΆΠΈΠΌΡ‹ подшивки, ΡˆΠΈΡ„Ρ€Ρ‹ с ΠΌΠ°Π»Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ° ΠΈ слабыС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ использовались, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для поддСрТания совмСстимости со старыми систСмами.

Remediation:#

1.Β Insecure Block Modes (e.g., ECB).

Π Π΅ΠΆΠΈΠΌ ECB считаСтся нСбСзопасным, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ΡΡ нСзависимо, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ восприимчивым ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π°Ρ‚Π°ΠΊΠ°ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌ ECB Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ криптографичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ cryptography Π² Python:

'cryptography' library in Python
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
def verify_block_mode(cipher):
if isinstance(cipher.mode, modes.ECB):
raise Exception("Insecure block mode (ECB) used!")
# Example usage
cipher = Cipher(algorithms.AES(key), modes.ECB())
verify_block_mode(cipher)
  1. Padding Modes (e.g., PKCS#1 v1.5).

Π’Π°ΠΊΠΈΠ΅ схСмы, ΠΊΠ°ΠΊ PKCS#1 v1.5, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ уязвимости, поэтому ΠΈΡ… слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных криптографичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ бСзопасныС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ OAEP padding. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ cryptography для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Padding Mode:

using the 'cryptography' library to verify the padding mode
from cryptography.hazmat.primitives.asymmetric import padding
def verify_padding_mode(pad):
if isinstance(pad, padding.PKCS1v15):
raise Exception("Insecure padding mode (PKCS#1 v1.5) used!")
# Example usage
pad = padding.PKCS1v15()
verify_padding_mode(pad)
  1. Ciphers with Small Block Sizes (e.g., Triple-DES, Blowfish).

Π¨ΠΈΡ„Ρ€Ρ‹ с ΠΌΠ°Π»Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ уязвимы для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π°Ρ‚Π°ΠΊ, особСнно Π² соврСмСнных Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… срСдах. РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ„Ρ€Ρ‹ с большим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ AES. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠ° ΡˆΠΈΡ„Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ cryptography:

Example of checking the block size of a cipher using the cryptography library
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
def verify_block_size(cipher):
block_size = cipher.algorithm.block_size
if block_size <= 64: # Adjust the threshold as needed
raise Exception("Cipher with small block size used!")
# Example usage
cipher = Cipher(algorithms.TripleDES(key), modes.ECB())
verify_block_size(cipher)

4. Weak Hashing Algorithms (e.g., MD5, SHA1)#

Π‘Π»Π°Π±Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ MD5 ΠΈ SHA1, большС Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ бСзопасными для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° криптографичСских Ρ†Π΅Π»Π΅ΠΉ. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ SHA256 ΠΈΠ»ΠΈ SHA3. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ hashlib Π² Python:

example of verifying the hashing algorithm using the hashlib library in Python
import hashlib
def verify_hash_algorithm(hash_algo):
weak_algorithms = ["md5", "sha1"]
if hash_algo.name.lower() in weak_algorithms:
raise Exception("Weak hashing algorithm used!")
# Example usage
hash_algo = hashlib.sha1()
verify_hash_algorithm(hash_algo)

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ упомянутыС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ссли это явно Π½Π΅ трСбуСтся ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

Additional:#

CWE - CWE-326: НСдостаточная Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ (4.10) (mitre.org)

php - mcrypt is deprecated, what is the alternative? - Stack Overflow

PHP: Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² PHP 7.1.x - Руководство