Skip to main content

V2.7.5 Out of Band Verifier

Requirement:#

Verify that the out of band verifier retains only a hashed version of the authentication code.

Explanation:#

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ внСшний Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сохраняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ внСшний Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ фактичСский ΠΊΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ тСкста ΠΈΠ»ΠΈ Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ. ВмСсто этого внСшний Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, которая прСдставляСт собой ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ создаСт Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ фиксированной Π΄Π»ΠΈΠ½Ρ‹ (Ρ…ΡΡˆ). ЦСль сохранСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… внСшнСго Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ скомпромСтирована, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Π½Π΅ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ фактичСскиС ΠΊΠΎΠ΄Ρ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ВмСсто этого ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ вСрсиям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для Π½ΠΈΡ… бСсполСзны, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ с Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Remediation:#

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ исправлСниС для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ внСшний Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сохраняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  • Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ: Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SHA-256, для Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ соль: создайтС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ соль для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Боль Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ вычислСнныС Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  • ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ соль ΠΈ ΠΊΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ соль с ΠΊΠΎΠ΄ΠΎΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
  • Π₯ΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ соль ΠΈ ΠΊΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: Ρ…Π΅ΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ соль ΠΈ ΠΊΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.
  • Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ…ΡΡˆ-ΠΊΠΎΠ΄: сохранитС Ρ…ΡΡˆ-ΠΊΠΎΠ΄ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… внСшнСго Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подлинности ΠΊΠΎΠ΄Π°: ΠΊΠΎΠ³Π΄Π° Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΎΠ½ Ρ…Π΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, прСдоставлСнный ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΅Π³ΠΎ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ солью ΠΈ сравниваСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсиСй, хранящСйся Π² Π΅Π³ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Если Π΄Π²Π° Ρ…ΡΡˆΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, ΠΊΠΎΠ΄ считаСтся ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Ρ‹ΠΌ.Β 

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

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шагов исправлСния Π² Python:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бСзопасного Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°
import hashlib
import os
def hash_authentication_code(code, salt):
# Combine the salt and code
combined = salt + code
# Hash the combined value using SHA-256
hashed = hashlib.sha256(combined.encode()).hexdigest()
return hashed
def verify_authentication_code(code, hashed, salt):
# Hash the provided code using the same method as before
hashed_input = hash_authentication_code(code, salt)
# Compare the hashed input with the stored hashed value
if hashed_input == hashed:
return True
else:
return False
# Generate a new salt for each authentication code
salt = os.urandom(16).hex()
# Hash the authentication code
hashed_code = hash_authentication_code("123456", salt)
# Verify the authenticity of a code
if verify_authentication_code("123456", hashed_code, salt):
print("Code is authentic.")
else:
print("Code is not authentic.")

Π’ этом ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ соли ΠΈ SHA-256, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΡƒΡ‚Π΅ΠΌ сравнСния Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° с сохранСнным Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Additional:#