String 메모리 노출 취약점 해결

이성민·2025년 6월 2일
0

안드로이드

목록 보기
19/19

이번 프로젝트에 실물 카드와 계좌를 연동하는 핀테크 사업 관련 작업이 있어 비밀번호 보안 키패드 작업을 진행하던 중 보안 심사에 걸려 추가 작업을 해야 하는 상황이 발생하였다. 메모리 덤프 파일에 비밀번호가 평문으로 올라온다는 이슈였다. 이를 해결하기 위해 String 관련 보안 취약점에 관해 알아보게 되었다.

문제점

Java에서 String 객체는 불변 객체로서 메모리에 한번 쓰여지면 수정되지 않는다. 즉, 입력 후 초기화하여도 메모리에 남아있으며, 메모리 덤프를 통해 평문으로 된 비밀번호 정보를 알아내는게 가능하다.

String 객체에 null 을 할당한다고 해도 메모리에는 여전히 평문으로 남아있다. null은 새로운 메모리 주소에 할당되기 때문이다.

이를 해결하기 위해서 어떤 방법이 있을까?

해결방안

답은 비밀번호와 같은 중요한 정보값을 String 에 담지말고 charArray 로 처리하는 것이다.

데이터 타입을 char[] 타입으로 받아 메모리상의 데이터를 덮어주면서 덤프를 떠서 확인해도 다른 데이터가 보이도록 한다.

char[] password = { 'a', 'b', 'c', 'd' }
Arrays.fill(password, '0')

정리

1. 중요 정보는 String 타입에 넣지 말고, char 배열에 담아 사용하자.

2. 사용 후에는 반드시 다른 값으로 채워주자.

보안 관련된 이슈를 해결해 본 경험이 없어 이번 프로젝트를 통해 개발 시야가 조금 더 넓어진 듯 하여 뿌듯하다.

참고
https://mixup.tistory.com/10
https://sunny-develop.tistory.com/19

profile
Android Developer 이성민입니다

0개의 댓글