gyumin.log

정보 노출 (Information Disclosure)

웹 취약점 여섯 개 정리의 마지막. 정보 노출은 그 자체로도 피해지만, 더 무서운 건 다른 공격의 발판이 된다는 점이다.

정의

공개되면 안 되는 정보(시스템 정보·소스코드·개인정보·인증정보)가 의도치 않게 외부에 드러나는 취약점.

왜 생기나

해킹이라기보다 개발·운영의 부주의에서 나온다. 실수로 열어둔 문이라고 보면 된다.

유형과 공격

유형무엇이 새나왜 위험한가
상세 에러 메시지질의문·테이블명·서버 경로SQL 인젝션의 힌트를 준다
소스코드·설정 파일.git 폴더, config.php.bakDB 접속 정보·API 키가 통째로
디렉터리 리스팅폴더의 파일 목록숨긴 파일까지 다 보임
응답 헤더서버·프레임워크 버전알려진 취약점을 겨냥당함
클라우드 저장소 공개저장소 안 데이터 전부URL만 알면 접근
  • 에러 메시지가 대표적이다. DB 오류 화면에 질의문과 경로가 그대로 찍히면, 공격자는 그걸 읽고 인젝션 공격을 정교하게 다듬는다. 앞의 다섯 개 공격의 준비 단계가 되는 셈이다.
  • .git 노출은 배포할 때 소스 관리 폴더를 함께 올려버려서 생긴다. 누구나 전체 소스코드와 그 안에 하드코딩된 비밀번호를 내려받을 수 있다.

실제 사례

  • 클라우드 스토리지 공개 설정 사고: 저장소 접근 권한을 공개로 둔 탓에 고객 개인정보·내부 문서가 인터넷에 그대로 노출된 사고가 여러 기업에서 반복됐다. 해킹 기술 없이 URL만 알면 접근돼 피해 규모가 컸다.
  • .git 노출: 소스와 그 안의 인증 정보가 통째로 내려받아진 사례가 꾸준히 보고된다.

막는 법

  • 운영 환경에서는 상세 에러를 사용자에게 보이지 않는다. 로그로만 남긴다.
  • .git, 백업 파일, 설정 파일을 웹 경로에서 차단한다.
  • 디렉터리 리스팅을 끈다.
  • 응답 헤더에서 서버 버전 정보를 숨긴다.
  • 클라우드 저장소는 기본을 비공개로 두고 필요한 것만 연다.

여섯 개를 묶으며

웹 취약점 여섯 개를 관통하는 관점 하나. 절반은 입력을 안 믿어서 생기고(SQL 인젝션·XSS·파일 업로드), 절반은 권한을 안 지켜서 생긴다(IDOR·인증 우회·정보 노출). 방어의 큰 방향도 이 둘뿐이다. 입력은 값·글자로 가두고, 권한은 서버가 매 요청마다 다시 확인한다. 진단하다 취약점을 찾으면 이 둘 중 어디에 속하는지부터 분류하면 대책이 빨리 나온다.

용어: 디렉터리 리스팅은 폴더 접근 시 파일 목록이 그대로 노출되는 설정. .git은 소스 버전 관리 폴더로, 웹에 노출되면 전체 코드가 복원된다.