취약하거나 위험한 암호화 알고리즘(MD5) 사용

Use of a Broken or Risky Cryptographic Algorithm

설명

MD5와 같은 취약한 해시 알고리즘을 비밀번호 해싱에 사용하는 경우, 공격자가 해시값을 크랙(복호화)하는 것이 매우 쉽기 때문에 보안에 큰 문제가 됩니다. 레인보우 테이블(미리 계산된 해시값 목록)이나 고속 브루트포스 공격을 통해 사용자의 비밀번호가 빠르게 탈취될 수 있습니다.

잠재적 영향

  • 비밀번호 유출(비밀번호 탈취): 공격자가 쉽게 해시값을 복호화 하여 사용자 비밀번호를 알아낼 수 있습니다.

  • 계정 권한 탈취: 공격자가 비밀번호를 알아내어 사용자 계정에 무단으로 접근할 수 있습니다.

해결 방법

  • MD5, SHA1 등 빠르게 계산 가능하거나 취약한 해시 알고리즘 사용을 금지합니다.

  • bcrypt, scrypt, Argon2 와 같이 비밀번호 해싱을 위해 설계된 안전한 알고리즘을 사용해야 합니다.

  • 해시 알고리즘 사용 시에는 반드시 salt(솔트)를 추가하여 해시값 충돌 및 사전공격을 방지해야 합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

const crypto = require('crypto');

function setUserPassword(user, pwtext) {
  const hash = crypto.createHash('md5').update(pwtext).digest('hex');
  user.setPassword(hash);
}

안전한 코드

설명:

  • 취약한 코드: 위 코드는 MD5 알고리즘을 사용하여 비밀번호를 해싱합니다. MD5는 보안이 매우 약하여 해시가 쉽게 복호화되거나 충돌될 수 있어 공격자가 비밀번호를 손쉽게 알아낼 수 있습니다.

  • 안전한 코드: bcrypt와 같은 안전한 해시 함수를 사용하고, 자동으로 강력한 salt와 느린 계산 과정을 적용하여, 비밀번호 크랙이 매우 어렵습니다. 따라서 공격자가 해시값만으로는 실제 비밀번호를 쉽게 알 수 없습니다.

참조

Last updated