취약한 해시 함수 사용
Use of Weak Hash
설명
취약한 해시 함수 사용(Use of Weak Hash)은 보안 강도가 충분히 검증되지 않았거나 더 이상 권장되지 않는 해시 알고리즘을 계속 사용하는 경우를 말합니다. 여기서는 SHA-224 / SHA3-224 같이 224-bit 길이의 해시가 예시입니다. 이런 알고리즘은 최신 보안 기준(NIST, 각국 가이드라인 등)에서 신규 설계 또는 민감 정보 보호 용도로는 비권장 또는 사용 제한 상태입니다. 공격자는 충돌 공격(서로 다른 입력에 대해 같은 해시를 찾는 것)이나 해시 강도 부족을 악용해 데이터 무결성을 속이거나, 약한 해시를 인증·서명·토큰 검증 등에 사용했을 때 이를 우회할 수 있습니다.
잠재적 영향
무결성 검증 약화: 취약한 해시로 인해 데이터 위·변조를 제대로 탐지하지 못할 수 있음
인증/서명 우회 가능성: 해시 기반 서명, 토큰, 패스워드 저장 등에서 해시 강도 부족으로 인해 공격자가 인증 절차를 우회할 가능성 증가
규제 및 보안 정책 비준수: NIST, 국내·국제 보안 가이드라인에서 비권장 알고리즘 사용으로 컴플라이언스 위반 위험
해결 방법
SHA-224 / SHA3-224 대신 SHA-256, SHA-384, SHA-512 이상 강도의 해시를 사용합니다.
비밀번호 저장에는 단순 SHA 계열 대신 bcrypt, scrypt, Argon2 같은 password hashing function을 사용합니다.
디지털 서명, 토큰(JWT 등), 무결성 검증에 사용하는 해시 알고리즘을 정기적으로 점검하고, 조직/규제에서 요구하는 최소 비트 길이(예: 256bit 이상)를 준수합니다.
기존에 SHA-224를 사용하던 프로토콜이나 포맷을 마이그레이션할 때는, 신규 필드(예: hash_v2)를 추가해 점진적으로 강한 해시로 전환하는 전략을 사용합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: non_compliant 예제에서는
crypto/sha256패키지의sha256.New224()를 사용해 SHA-224 해시를 계산하고 있습니다. SHA-224는 224-bit 출력으로, 최신 보안 정책과 가이드라인에서 더 강한 해시(SHA-256 이상) 사용을 요구하는 경우가 많습니다. 이 코드를 다음과 같이 사용할 경우 문제가 됩니다:소스 코드 무결성 검증, 파일 검증, 로그 위·변조 검출 등 중요한 무결성 확인
토큰, 세션 ID, 서명 등 보안 민감한 데이터 보호 이 상황에서 상대적으로 짧은 출력 길이는 공격자가 충돌을 찾거나 보안 요구사항을 우회할 위험을 증가시키며, 규제 및 내부 보안 정책을 위반할 수 있습니다.
안전한 코드: compliant 예제에서는
sha256.New224()대신sha256.New()를 사용하여 SHA-256 해시를 계산합니다. SHA-256은 256-bit 출력 길이를 가지며, 많은 국제 표준과 국내·국제 보안 가이드라인에서 최소 권장 수준으로 취급됩니다. 이 변경으로 다음과 같은 효과가 있습니다:더 긴 해시 길이로 인해 충돌을 찾기 위한 공격 난이도가 크게 증가합니다.
최신 암호 정책과 규제를 준수할 가능성이 높아집니다.
동일한 코드 구조를 유지하면서 해시 알고리즘만 교체하므로, 기존 로직 수정 부담을 최소화하면서 보안성을 향상시킬 수 있습니다.
참조
Last updated