정의
개인 정보 수정 페이지 및 회원 가입 과정에서 주요 개인정보 (주민번호 등)가 HTML 페이지 내에 평문으로 저장되어 있어 정보가 노출되는
취약점을 의미한다. 개인 정보가 제일 많이 포함되어 있는 곳은 정보 수정 페이지, 이력서 페이지 등이 있다. 사용자 들이 자신의 개인정보
수정페이지에 접근하게 되면 기본적으로 이메일 정보, 전화번호, 주소 등이 포함되어져 있고, 보안이 심각한 경우에는 주민번호가 페이지에
그대로 평문으로 노출되는 경우도 있다.
흐름도
본 테스트는 OWASP Broken Apps에 포함된 WebGoat을 이용한다. WebGoat의 항목 중에 Insecure Communication – Insecure Login
항목을 누르면 다음과 같이 나타난다.
비밀번호를 스니핑하고 로그인 후에 질문에 답하라고 하며, 비밀번호 스니핑은 와이어샤크를 이용한다. 와이어샤크로 캡쳐 중에 Submit을
누르면 다음과 같이 패킷 목록이 나타난다.
위의 사진에서는 WebGoat이 동작되고 있는 웹 서버의 아이피 (49.1.xxx.xxx)로 패킷을 1차적으로 필터링 한 화면이다.
위의 패킷에서 다음과 같이 WebGoat의 URL과 동일한 URL에 데이터를 전송하는
패킷의 상세정보를 보면 ID와 PW가 노출되는 것을 볼 수 있다.
lear user = Jack
lear_pass = sniffy
암호화
- 표준 암호화 알고리즘을 사용한다. 개인만의 암호화 알고리즘 사용을 금지하고 이미 검증된 암호화 알고리즘을 사용해야 한다.
- 저장된 데이터의 복호화가 어려운 알고리즘을 택한다. RC3~4, MD5, SHA-1과 같은 알려진 취약점이 있는 알고리즘은 피하는 것이 좋다.
- 비대칭 키 암호화 시스템 사용 시 개인키를 안전하게 저장(기밀성)해야 한다.
- Hash 함수의 추가 방안
1). Salting
Salt(솔트)는 단방향 해시 함수에서 다이제스트를 생성할 때 추가되는 바이트 단위의 임의 문자열이다. 그리고 원본 메시지에
이 문자열을 추가하여 다이제스트를 생성하는 행위를 Salting(솔팅)이라 한다.
2). 키 스트레칭
입력한 패스워드의 다이제스트를 생성하고, 생성된 다이제스트를 입력 값으로 하여 다이제스트를 생성하고, 또 이를 반복하는
일련의 방법으로 다이제스트를 생성할 수 있다. 위와 같은 행위를 거치면 패스워드를 동일한 회수만큼 해시 함수를 사용하여 해시해야
입력한 패스워드의 일치 여부를 확인할 수 있다.
3). Salting + 키 스트레칭 과정