DEEP DIVE REPORT

Your AI Coding Assistant Is Still Hashing Passwords Like It Is 2009

SecurityDesk
2026.07.06 조회 11

동향 요약

AI 코딩 도구가 비밀번호 해싱에 2009년 수준의 취약한 알고리즘(MD5, SHA-1)을 제안하는 문제가 지속되고 있다. Claude Code, GitHub Copilot, Cursor 등 주요 AI 코딩 도구가 비밀번호 저장 코드를 요청하면 솔트 없는 MD5 또는 SHA-1을 권장하는 사례가 빈번하다. 이는 AI 모델이 과거 StackOverflow와 PHP 튜토리얼에서 MD5 비밀번호 해싱을 표준으로 학습한 결과다. 최신 GPU에서 MD5는 초당 수십억 개, SHA-256도 수십억 개의 해시를 계산할 수 있어 데이터베이스 유출 시 대규모 크래킹이 가능하다. OWASP는 Argon2id, bcrypt, scrypt 같은 느리고 메모리 집약적인 알고리즘 사용을 권고한다.

배경 및 현황

최근 개발자가 자신의 사이드 프로젝트를 검토해 달라고 요청했는데, 인증과 회원가입은 정상 작동했으나 비밀번호 저장 파일에 hashlib.md5(password.encode()).hexdigest() 한 줄이 있었다. 솔트도 없고 워크 팩터도 없는 원시 MD5 해시가 그대로 사용자 테이블에 저장되고 있었다. 개발자가 작성한 코드가 아니었다. Cursor가 작성한 것이었다. 이런 사례는 드물지 않다. Claude Code도 그렇고 Copilot도 그렇고, 대부분의 AI 코드 편집기에 "비밀번호 해싱 코드"를 요청하면 MD5 또는 SHA-1을 반환받을 가능성이 높다.

취약한 코드 예시는 다음과 같다.

import hashlib
# 빠른 해시, 솔트 없음, 워크 팩터 없음 (CWE-916)
def store_password(password):
    return hashlib.md5(password.encode()).hexdigest()

때로는 SHA-1을 제안하기도 하고 SHA-256을 제안하기도 한다. 어느 것이든 상관없다. 이들은 모두 빠르게 설계된 알고리즘이다. 속도는 비밀번호 해싱에 원하는 것과 정반대다.

원인 분석

이 문제가 계속 발생하는 이유는 학습 데이터에 있다. MD5 비밀번호 해싱은 십 년 넘게 StackOverflow와 PHP 튜토리얼에서 표준 조언이었다. 수백만 개의 예제가 존재한다. 모델은 패턴이 어디에나 있었기 때문에 이 패턴을 학습했다. 2012년에 LinkedIn이 솔트 없는 SHA-1 비밀번호 650만 개가 유출되었고 대부분 며칠 안에 크래킹되었다는 사실은 모르고 있다. "비밀번호 해싱"과 "md5"라는 단어가 함께 자주 나타난다는 것만 알고 있을 뿐이다.

실제로 수학이 공격을 가능하게 한다. 현대 GPU 리그는 초당 수십억 개의 MD5 해시를 계산한다. 사용자 데이터베이스가 유출되고 데이터베이스는 항상 유출되기 때문에, 모든 일반적인 비밀번호는 거의 즉시 무너진다. 솔트가 없으면 두 사용자가 같은 비밀번호를 사용하면 같은 해시를 얻게 되므로 단 하나의 레인보우 테이블로 전체 테이블을 한 번에 크래킹할 수 있다.

영향 범위

엔터프라이즈 환경

기업 환경에서 개발자의 AI 코딩 도구 의존도가 급증하고 있다. 생산성 향상을 위해 AI 코딩 도구를 개발 워크플로우에 통합하는 조직이 늘어나고 있다. 그러나 보안 코드 리뷰 단계에서 AI가 제안한 코드가 그대로 적용되는 위험이 존재한다. 보안 전문가가 아닌 일반 개발자는 AI가 제안한 코드가 보안에 취약하다는 사실을 인식하지 못할 수 있다.

데이터 유출 위험

데이터베이스 유출 시 비밀번호 크래킹으로 인한 2차 피해가 확산될 수 있다. 솔트 없는 MD5/SHA-1 해시는 레인보우 테이블로 대규모 크래킹이 가능하다. 유출된 해시에서 비밀번호를 복구한 공격자는 사용자의 다른 서비스 계정에도 접근할 수 있다(자격증명 스터핑). 2026년 기준 GPU 클라우드 서비스에서 저렴한 비용으로 초당 수십억 개의 해시를 계산할 수 있어, 일반적인 비밀번호는 몇 분 안에 크래킹된다.

규제 및 컴플라이언스

개인정보보호법, 정보보안 관리체계 인증(ISMS-P), PCI DSS 등에서 비밀번호 저장에 적절한 해싱 알고리즘 사용을 요구한다. OWASP Password Storage Cheat Sheet는 Argon2id, bcrypt, scrypt, PBKDF2 사용을 권고한다. MD5와 SHA-1은 더 이상 비밀번호 저장에 적합하지 않다. NIST SP 800-63B도 SHA-1을 2030년 이후 새로운 사용에 금지한다.

교훈 및 대응

알고리즘 선택

비밀번호용으로 설계된 느린 해시를 사용해야 한다. bcrypt, scrypt, Argon2id가 있다. 이들은 의도적으로 계산 비용이 비싸다. 단일 로그인에는 비용이 보이지 않지만 수십억 개의 추측을 실행하는 공격자에게는 치명적이다.

올바른 코드 예시는 다음과 같다.

import bcrypt
# 솔트 자동 처리, 의도적으로 느림, 튜닝 가능한 워크 팩터
def store_password(password):
    return bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))

def verify_password(password, stored):
    return bcrypt.checkpw(password.encode(), stored)

bcrypt는 솔트를 자동으로 처리하므로 개발자가 직접 솔트을 관리할 필요가 없다. 2026년 기준으로 rounds=12는 합리적인 기본값이다. 현재 베스트 프랙티스를 원한다면 argon2-cffi 라이브러리를 통한 argon2id가 OWASP 권장 선택이다.

정적 분석 도구

AI 코딩 도구는 MD5/SHA-1 비밀번호 해싱을 경고하지 않는다. 유효한 Python이고 실행되고 테스트를 통과한다. 위반 통지가 도착할 때까지는 잘못되었다는 것을 알려주는 것이 아무것도 없다.

Semgrep 같은 정적 분석 도구로 미리 탐지할 수 있다. 기본 pre-commit hook으로도 대부분을 잡을 수 있다. 중요한 것은 컨텍스트를 유지하는 동안, 어떤 도구를 사용하든 잡아내는 것이다. Semgrep 규칙 예시는 다음과 같다.

rules:
  - id: weak-password-hash-md5
    pattern: hashlib.md5(...)
    message: MD5 is not suitable for password hashing. Use bcrypt or argon2id instead.
    languages: [python]
    severity: ERROR

  - id: weak-password-hash-sha1
    pattern: hashlib.sha1(...)
    message: SHA-1 is not suitable for password hashing. Use bcrypt or argon2id instead.
    languages: [python]
    severity: ERROR

AI 코딩 도구 보안 검증

SafeWeave 같은 도구가 Cursor와 Claude Code에 MCP 서버로 연동되어 암호화(md5/sha1 비밀번호 해싱) 같은 취약한 보안을 다음 파일로 넘어가기 전에 플래그를 지정한다. AI 코딩 도구가 제안한 코드의 보안 취약점을 자동으로 탐지하고 경고한다.

개발자 교육

보안 코드 리뷰 교육 강화가 필요하다. 비밀번호 해싱, 솔트, 워크 팩터의 개념을 이해해야 한다. AI가 제안한 코드를 맹목적으로 신뢰하지 말고 보안 관점에서 검토하는 습관을 들여야 한다. 보안 체크리스트를 제공하고 정기적인 훈련을 실시해야 한다.

엔터프라이즈 대응 체크리스트

대응 단계 즉시 (24시간 이내) 단기 (1주 이내) 장기 (1개월 이내)
코드 검사 기존 코드베이스에서 MD5/SHA-1 비밀번호 해싱 탐지 정적 분석 도구(Semgrep 등) 통합 CI/CD 파이프라인에 자동 탐지 추가
알고리즘 마이그레이션 새로운 코드에서 bcrypt/Argon2id 사용 강제 기존 비밀번호 해싱 알고리즘 업그레이드 계획 수립 레거시 시스템의 알고리즘 전체 교체
보안 도구 pre-commit hook에 Semgrep 규칙 추가 SafeWeave 같은 AI 보안 검증 도구 도입 AI 코딩 도구와 통합된 보안 검증 시스템 구축
교육 개발팀에 비밀번호 해싱 베스트 프랙티스 공지 보안 코드 리뷰 워크숍 실시 정기적인 보안 훈련 프로그램 운영
모니터링 Git 히스토리에서 취약한 해싱 코드 커밋 감시 보안 이슈 트래킹 시스템 구축 실시간 코드 보안 점수 시각화

참고문헌


본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9