취약한 암호 알고리즘 사용

Use of Weak Cryptographic Algorithms

설명

취약한 암호 알고리즘 사용은 더 이상 안전하지 않은 해시(MD5, SHA-1)나 대칭키 알고리즘(DES, 3DES, RC4)을 계속 사용하는 것을 의미합니다. 이 알고리즘들은 충돌 공격(서로 다른 입력이 같은 해시를 가짐) 또는 키/평문을 유추할 수 있는 여러 연구 결과가 있어, 공격자가 위조된 데이터에 같은 해시를 만들거나 암호화된 내용을 복호화하는 데 악용할 수 있습니다.

잠재적 영향

  • 무결성 위조 공격(데이터 변조 위장): MD5, SHA-1 충돌 공격으로 서로 다른 데이터를 같은 해시로 만들 수 있어, 서명 검증·파일 무결성 검증을 우회할 수 있습니다.

  • 기밀성 훼손(암호 해독): DES, 3DES, RC4는 키 길이 부족, 알고리즘 구조 취약점 때문에 브루트포스나 통계적 분석으로 평문·키를 복구당할 위험이 큽니다.

  • 인증 우회 및 위조(토큰/서명 위조): 취약한 해시로 만든 인증 토큰, 쿠폰, 라이선스 키 등은 공격자가 충돌 또는 사전 계산(레인보우 테이블) 공격으로 위조할 수 있습니다.

  • 규제/컴플라이언스 위반: PCI-DSS, ISO 27001 등 대부분의 보안 기준에서 MD5, SHA-1, DES, RC4 사용을 금지하거나 비권장하며, 이를 위반하면 감사·인증 실패로 이어질 수 있습니다.

해결 방법

  • 강력한 해시 사용: MD5, SHA-1 대신 SHA-256 이상(SHA-2 계열) 또는 SHA-3 계열 사용.

  • HMAC 사용: 단순 해시 대신 HMAC-SHA256 같이 키가 포함된 해시를 사용하여 위조 난이도 증가.

  • 안전한 블록 암호 사용: DES, 3DES, RC4 대신 AES-128/AES-256 사용. Go에서는 crypto/aes 패키지 사용.

  • 안전한 모드 선택: AES 사용 시 ECB 금지, GCM, CBC(랜덤 IV와 함께) 등 검증된 모드 사용.

  • 키 관리: 하드코딩된 키 사용 금지, 환경변수나 Secret Manager 등 안전한 저장 방식 사용.

  • 레거시 코드 점검: 기존 코드에서 MD5, SHA-1, DES, RC4 사용 부분을 정기적으로 검색하여 안전한 알고리즘으로 마이그레이션.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 위 비준수 코드에서는 다음과 같은 문제가 있습니다.

    • MD5, SHA-1: 이미 충돌 공격이 실용적인 수준으로 알려져 있어 파일 무결성 검증, 서명, 토큰 검증에 사용할 경우 공격자가 다른 데이터를 같은 해시로 만들어 검증을 우회할 수 있습니다.

    • DES/3DES: 키 길이가 짧고 설계가 오래되어, 브루트포스 및 여러 공격 기법으로 현실적으로 깨질 수 있는 수준입니다. 민감 데이터 암호화에 사용하면 복호화될 가능성이 큽니다.

    • RC4: 스트림 생성 방식에 구조적 취약점이 있어, 다수의 실제 프로토콜(TLS 등)에서 사용이 금지되었습니다. 같은 키 재사용 시 특히 위험하며, 트래픽 분석으로 평문이 유출될 수 있습니다.

  • 안전한 코드: 준수 코드에서는 다음과 같이 안전한 대안을 사용합니다.

    • 무결성 검증에 SHA-256 사용: 현재 널리 권장되는 강한 해시 함수로, MD5·SHA-1에 비해 충돌 공격에 훨씬 강합니다.

    • HMAC-SHA256: 해시 계산 시 비밀 키를 함께 사용하여 단순 해시에 비해 위조 난이도가 매우 높아지며, 인증 토큰·서명에 적합합니다.

    • AES-GCM: 현대적으로 검증된 블록 암호(AES)와 인증된 암호 모드(GCM)를 조합하여, 기밀성뿐 아니라 무결성까지 동시에 보호합니다. 랜덤 nonce를 사용해 동일한 키·평문이 반복되어도 패턴이 노출되지 않도록 합니다. 이렇게 취약한 알고리즘을 강한 암호 알고리즘으로 교체함으로써, 데이터 기밀성과 무결성을 현재 보안 기준 수준으로 끌어올릴 수 있습니다.

참조

Last updated