설명
민감 데이터를 지우기 위한 일반 memset은 최적화 과정에서 제거될 수 있어 비밀 값이 메모리에 남을 수 있습니다.
잠재적 영향
- 메모리 덤프, use-after-free, 스왑 또는 코어 덤프를 통해 비밀 값이 노출될 수 있습니다.
해결 방법
대상 플랫폼이 제공하는 memset_s, explicit_bzero, SecureZeroMemory처럼 최적화로 삭제가 제거되지 않는 API를 사용하세요. API의 제공 여부와 사용 조건을 확인하고, 다른 메모리 위치에 남은 복사본도 별도로 관리하세요.
예시
변경 전
c
char password[64];
memset(password, 0, sizeof(password));
변경 후
c
char password[64];
explicit_bzero(password, sizeof(password));
설명:
- 변경 전: 컴파일러가 사용되지 않는
memset을 제거할 수 있습니다. - 변경 후: 보안 지우기 전용 API를 사용합니다. 비밀번호를 채우고 사용하는 부분은 생략했으며,
explicit_bzero를 제공하는 환경의 발췌입니다.