노출된 데이터베이스 백업: /backup.sql에 접근할 수 있으면 벌어지는 일
데이터베이스 백업(.sql 파일, 압축 덤프, 데이터베이스 zip 아카이브)은 웹에서 접근 가능한 디렉터리에 바로 생성된 채 방치되는 경우가 있습니다. /backup.sql이나 /dump.sql에 대한 요청 한 번만 성공해도 공격자는 애플리케이션 로직을 건드리지 않고 모든 테이블의 모든 행을 손에 넣습니다.
무엇인가요
백업 스크립트, 호스팅 제어판, 수동 내보내기 도구는 backup.sql, dump.sql, database.sql, db.sql.gz, backup.zip처럼 예측하기 쉬운 이름으로 덤프 파일을 저장하는 경우가 많습니다. 이 파일들이 웹 루트 안에 놓이고 서버가 명시적으로 차단하지 않으면 평범한 다운로드 가능 파일이 됩니다. 공격자는 도달할 수 있는 모든 호스트에 이런 흔한 이름 수십 개를 요청하는 자동 스캔을 실행합니다.
AppSafe는 /backup.sql, /dump.sql, /database.sql, /db.sql.gz 등 가장 흔한 경로를 확인하고, SQL 덤프나 아카이브처럼 보이는 내용과 함께 200 응답을 반환하는 경로를 보고합니다. 이 검사는 일반 텍스트 SQL과 압축 형식을 모두 탐지합니다.
왜 중요한가요
SQL 덤프에는 생성 시점의 모든 테이블의 모든 행이 들어 있습니다. 사용자 계정, 비밀번호 해시, 이메일 주소, 개인정보, 세션 토큰, 결제 내역, 애플리케이션 내부 상태 등입니다. 덤프를 내려받는 데는 HTTP 요청 한 번이면 충분하며 애플리케이션 로그에는 흔적이 남지 않습니다. 웹 서버가 다른 정적 파일처럼 제공하기 때문입니다.
유출된 API 키와 달리 유출된 데이터베이스는 교체할 수 없습니다. 누군가 users 테이블의 사본을 손에 넣는 순간, 해당 사용자들에게 침해는 영구적입니다. 덤프 내용에 따라 GDPR, CCPA, HIPAA에 따른 침해 통지 의무가 생길 수 있으며, 영향을 받은 모든 사용자에게 알리는 운영 비용도 발생합니다.
고치는 방법
올바른 해결책은 웹 서버가 도달할 수 없는 디렉터리에 백업 파일을 저장하는 것입니다. /var/www/의 하위 디렉터리가 아니라 /var/backups/ 같은 경로나 비공개 ACL이 적용된 객체 스토리지 버킷을 사용하세요. cron 작업이나 백업 스크립트를 검토하고 저장 경로를 업데이트하세요.
심층 방어 차원에서, 파일이 어디에 저장되어 있든 SQL 파일과 흔한 아카이브 확장자에 대한 요청을 서버 수준에서 거부하세요.
location ~* \.(sql|sql\.gz|bak|dump|tar|tar\.gz|tar\.bz2|zip)$ {
deny all;
return 404;
}노출된 파일을 발견하면 즉시 삭제하세요. 그런 다음 어떻게 그곳에 놓였는지 조사하고, 파일을 배치한 스크립트나 절차를 수정하여 다음 예약 실행 때 다시 나타나지 않도록 하세요.
정리한 후 흔한 경로들이 차단되었는지 확인하세요.
for path in /backup.sql /dump.sql /database.sql /db.sql.gz; do
code=$(curl -so /dev/null -w "%{http_code}" "https://yourdomain.com$path")
echo "$path → $code"
done
# Every line must print 404자주 묻는 질문
공격자는 어떻게 제 사이트에서 /backup.sql을 시도할 생각을 하나요?
특별히 당신을 노리는 것이 아닙니다. 자동 스캐너는 수백만 개의 호스트를 대상으로 흔한 백업 이름 수십 개를 끊임없이 요청합니다. 존재하는 파일은 200을 반환하고, 확인해 볼 생각을 하기도 전에 다운로드됩니다.
파일은 한 시간 동안만 있었습니다. 이미 피해가 발생했나요?
그럴 수 있습니다. 자동 스캔은 24시간 돌아가며, 파일은 나타난 지 몇 분 안에 발견되는 경우가 많습니다. 접근 로그가 있다면 해당 경로가 요청되었는지 확인하세요. 요청되었다면 침해가 확정된 것으로 간주하세요.
파일을 옮기는 대신 비밀번호로 보호하면 안 되나요?
단일 파일에 대한 Basic 인증은 취약하고 잘못 설정하기 쉽습니다. 올바른 답은 웹에서 접근 가능한 모든 위치에서 파일을 완전히 제거하는 것입니다. 백업은 HTTP 서버가 도달할 수 없는 곳에 있어야 합니다.
관련 가이드
열린 디렉터리 인덱스: 파일 서버가 모든 것을 나열할 때
내용을 나열하는 파일 서버는 공격자에게 무료 목록을 건네주는 것과 같습니다.
.env 파일 노출: 공격자가 시크릿을 찾아내는 방법
접근 가능한 .env 하나가 전체 스택을 넘겨줄 수 있습니다.
Supabase Row Level Security(RLS): 테이블을 확실하게 잠그기
anon 키는 공개되어 있습니다. 그것과 데이터 사이에 있는 것은 RLS뿐입니다.
노출된 .git 디렉터리: 눈앞에 숨어 있는 소스 코드 유출
접근 가능한 /.git은 전체 코드베이스와 커밋 히스토리를 그대로 넘겨줍니다.