SQL 인젝션
SQL 인젝션은 애플리케이션이 사용자 입력을 데이터와 명령으로 안전하게 분리하지 못할 때 공격자가 데이터베이스 질의의 의미를 바꾸는 취약점입니다.
SQL 인젝션
SQL 인젝션은 입력값이 문자열 결합을 통해 동적 SQL 문에 포함될 때 발생할 수 있습니다. 공격자는 입력을 이용해 인증 조건을 바꾸거나 데이터 조회·수정·삭제 범위를 확장하려고 시도합니다.
핵심 방어는 준비된 문장과 매개변수화 질의를 사용해 입력값을 데이터로 처리하는 것입니다. 입력 검증과 이스케이프는 보조 통제이며 데이터베이스 계정의 최소권한과 네트워크 분리도 피해 범위를 줄입니다.
핵심 특성
사용 맥락과 작동 원리
웹 폼, URL 매개변수, HTTP 헤더, API JSON, 배치 파일 등 데이터베이스 질의에 도달하는 모든 입력이 공격면이 될 수 있습니다. 오류 메시지가 DB 종류와 질의 구조를 노출하면 공격자가 취약점을 파악하기 쉬워집니다.
ORM을 사용해도 원시 질의를 문자열로 구성하거나 정렬·열 이름을 직접 삽입하면 취약점이 생길 수 있습니다. 저장 프로시저도 내부에서 동적 SQL을 안전하지 않게 만들면 위험합니다.
유출·오용 시 위험
성공한 SQL 인젝션은 대량 개인정보 유출, 관리자 계정 탈취, 데이터 위변조로 이어질 수 있습니다. 데이터베이스와 운영체제 권한이 과도하면 파일 접근과 추가 침투 가능성이 커집니다.
공격이 오랜 기간 반복되면 로그에 비정상 오류, 긴 매개변수, 평소와 다른 조회량이 남을 수 있습니다. WAF 차단 기록만으로 취약점 제거를 완료했다고 판단해서는 안 됩니다.
사건 공지에서 확인할 항목
- 취약한 입력 지점과 영향을 받은 API·페이지 범위를 확인합니다.
- 데이터 조회, 변경, 삭제, 관리자 권한 사용 정황을 확인합니다.
- DB 계정 권한과 파일·운영체제 접근 가능성을 확인합니다.
- 공격 기간과 실제 반출된 개인정보 범위를 확인합니다.
- 코드 수정, 자격증명 교체, 로그 보존, 재시험 완료 여부를 확인합니다.
개인이 취할 조치
- 이용자는 기관이 발표한 유출 항목과 계정 조치를 확인합니다.
- 비밀번호와 인증정보가 포함되면 고유 비밀번호 변경과 MFA 설정을 수행합니다.
- 결제·신원정보가 포함되면 관련 알림과 모니터링을 설정합니다.
- 취약점 확인을 명목으로 접근하는 비공식 연락에 정보를 제공하지 않습니다.
조직의 보호조치
- 모든 데이터 값을 준비된 문장과 매개변수화 질의로 처리합니다.
- 동적 열·정렬 값은 허용목록으로 제한합니다.
- 애플리케이션 DB 계정에 최소한의 테이블·명령 권한만 부여합니다.
- 오류 메시지의 내부정보 노출을 막고 보안 로그를 별도로 기록합니다.
- SAST, DAST, 코드리뷰, 침투시험으로 수정 효과를 검증합니다.
혼동하기 쉬운 개념
입력 검증은 허용되는 형식과 범위를 확인합니다. 매개변수화는 입력과 명령의 구조를 분리합니다. XSS는 브라우저에서 스크립트가 실행되는 취약점입니다. 명령 인젝션은 운영체제 명령 구성에 입력이 개입하는 취약점입니다.