정보 누출이란?
웹 사이트에 중요정보(개인정보, 계정정보, 금융정보 등)가 노출되거나 에러 발생 시 과도한 정보(애플리케이션 정보, DB 정보, 웹 서버 구성 정보, 개발 과정의 코멘트 등)가 노출되는 취약점이다. 과도한 정보 누출은 공격자들의 2차 공격을 위한 정보로 활용될 수 있다.
웹 사이트에 노출되는 중요정보는 마스킹을 적용하여야 하며, 발생 가능한 에러에 대해 최소한의 정보 또는 사전에 준비된 메시지만 출력해야 한다.
정보 누출 점검
점검 내용 | 웹 서비스 시 불필요한 정보가 노출되는지 여부 점검 |
점검 목적 | 웹 서비스 시 불필요한 정보가 노출되는 것을 방지함으로써 2차 공격에 활용될 수 있는 정보 노출을 차단하기 위함 |
점검 대상 | 웹 애플리케이션 소스코드, 웹 서버 |
1. 웹 사이트에 중요정보가 평문으로 노출되고 있는지 확인
중요 정보에 해당하는 비밀번호는 마스킹 되어 노출되고 있다.
2. 웹페이지에 마스킹 된 중요정보가 웹페이지 소스에 평문으로 노출되고 있는지 확인
비밀번호를 입력하는 부분의 소스 코드이다.
입력한 내용이 평문으로 노출되고 있지 않은 것을 확인할 수 있다.
3. 에러 메시지 또는 에러 페이지에서 과도한 정보가 노출되는지 확인
해당 에러는 비밀번호가 SQL 비밀번호 규정에 적절하지 않아서 생기는 것이다.
에러가 난 파일과 그 경로를 나타내고 있기 때문에 위험하다고 할 수 있을 것 같다.
4. 인코딩된 중요정보는 디코딩 가능한지 확인
로그인 창의 소스 코드이다.
역시 소스 코드에 인코딩한 중요 정보를 노출하고 있지 않기 때문에 안전하다.
5. 임의의 계정으로 로그인을 시도하여 반환되는 에러 메시지를 통해 특정 ID의 가입 여부를 식별할 수 있는지 확인
보안 설정 방법
- 사용자가 주민등록번호 뒷자리, 비밀번호 입력 시 별표 표시하는 등 마스킹 처리를 하여 주변 사람들에게 노출되지 않도록 한다.
- 개인정보의 조회, 출력 시 아래와 같은 원칙으로 일부 정보에 마스킹을 적용하여 표시한다.
- 성명 중 이름의 가운데 글자 (ex : 홍*동)
- 생년월일 (ex : ****년 **월 **일
- 전화번호 또는 휴대전화번호 (ex : 02-****-5678, 010-****-5678)
- 주소의 읍/면/동 (ex : 서울시 송파구 ***동)
- IP v4 주소의 경우 17~24bit, IP v6 주소의 경우 113~128bit
- 웹페이지를 운영 서버에 이관 시 주석은 모두 제거하여 이관한다.
- 중요정보(개인정보, 계정정보, 금융정보 등)를 HTML 소스에 포함하지 않도록 한다.
- 로그인 실패 시 반환되는 에러 메시지는 특정 ID의 가입 여부를 식별할 수 없게 구현한다. (예: ‘가입하지 않은 아이디이거나, 잘못된 비밀번호입니다.’)
- 일반적으로 웹에서 발생하는 에러 메시지는 400, 500번대의 에러 코드를 반환하는데 이러한 에러 코드에 대해 별도의 에러 페이지로 Redirect 하거나 적절한 에러처리 루틴을 설정하여 처리되도록 한다.(전체적인 통합 에러 페이지를 작성한 후 모든 에러 코드에 대해 통합 에러 페이지로 Redirect 되도록 설정)
Apache 서버 설정
- ErrorDocument 500 “Error Message”
- ErrorDocument 404 “/your web root/error.html”
- ErrorDocument 404 “/your web root/error.html”
- ErrorDocument 402 http:/xxx.com/error.html
위와 같이 특정 에러 코드에 대해 에러 메시지를 출력할 수도 있고 특정 웹 페이지로 Redirect 시킬 수 있으며, 이 설정은 httpd.conf 의 전역 설정에 추가하거나 원하는 가상 호스트의 <VirtualHost> 태그 쌍 사이에 추가하면 된다.