정보 노출 (Information Disclosure)
웹 취약점 여섯 개 정리의 마지막. 정보 노출은 그 자체로도 피해지만, 더 무서운 건 다른 공격의 발판이 된다는 점이다.
정의
공개되면 안 되는 정보(시스템 정보·소스코드·개인정보·인증정보)가 의도치 않게 외부에 드러나는 취약점.
왜 생기나
해킹이라기보다 개발·운영의 부주의에서 나온다. 실수로 열어둔 문이라고 보면 된다.
유형과 공격
| 유형 | 무엇이 새나 | 왜 위험한가 |
|---|---|---|
| 상세 에러 메시지 | 질의문·테이블명·서버 경로 | SQL 인젝션의 힌트를 준다 |
| 소스코드·설정 파일 | .git 폴더, config.php.bak | DB 접속 정보·API 키가 통째로 |
| 디렉터리 리스팅 | 폴더의 파일 목록 | 숨긴 파일까지 다 보임 |
| 응답 헤더 | 서버·프레임워크 버전 | 알려진 취약점을 겨냥당함 |
| 클라우드 저장소 공개 | 저장소 안 데이터 전부 | URL만 알면 접근 |
- 에러 메시지가 대표적이다. DB 오류 화면에 질의문과 경로가 그대로 찍히면, 공격자는 그걸 읽고 인젝션 공격을 정교하게 다듬는다. 앞의 다섯 개 공격의 준비 단계가 되는 셈이다.
.git노출은 배포할 때 소스 관리 폴더를 함께 올려버려서 생긴다. 누구나 전체 소스코드와 그 안에 하드코딩된 비밀번호를 내려받을 수 있다.
실제 사례
- 클라우드 스토리지 공개 설정 사고: 저장소 접근 권한을 공개로 둔 탓에 고객 개인정보·내부 문서가 인터넷에 그대로 노출된 사고가 여러 기업에서 반복됐다. 해킹 기술 없이 URL만 알면 접근돼 피해 규모가 컸다.
.git노출: 소스와 그 안의 인증 정보가 통째로 내려받아진 사례가 꾸준히 보고된다.
막는 법
- 운영 환경에서는 상세 에러를 사용자에게 보이지 않는다. 로그로만 남긴다.
.git, 백업 파일, 설정 파일을 웹 경로에서 차단한다.- 디렉터리 리스팅을 끈다.
- 응답 헤더에서 서버 버전 정보를 숨긴다.
- 클라우드 저장소는 기본을 비공개로 두고 필요한 것만 연다.
여섯 개를 묶으며
웹 취약점 여섯 개를 관통하는 관점 하나. 절반은 입력을 안 믿어서 생기고(SQL 인젝션·XSS·파일 업로드), 절반은 권한을 안 지켜서 생긴다(IDOR·인증 우회·정보 노출). 방어의 큰 방향도 이 둘뿐이다. 입력은 값·글자로 가두고, 권한은 서버가 매 요청마다 다시 확인한다. 진단하다 취약점을 찾으면 이 둘 중 어디에 속하는지부터 분류하면 대책이 빨리 나온다.
용어: 디렉터리 리스팅은 폴더 접근 시 파일 목록이 그대로 노출되는 설정. .git은 소스 버전 관리 폴더로, 웹에 노출되면 전체 코드가 복원된다.