FixVibe
Covered by FixVibecritical

SQL 인젝션: 무단 데이터베이스 접근 방지

SQL 주입(SQLi)은 공격자가 애플리케이션의 데이터베이스 쿼리를 방해하는 심각한 취약점입니다. 공격자는 악의적인 SQL 구문을 삽입하여 인증을 우회하고, 비밀번호, 신용카드 정보와 같은 민감한 데이터를 보거나, 기본 서버를 손상시킬 수도 있습니다.

CWE-89

SQL 주입의 영향

SQL 주입(SQLi)을 사용하면 공격자가 애플리케이션이 데이터베이스 [S1]에 대해 수행하는 쿼리를 방해할 수 있습니다. 주요 영향에는 사용자 비밀번호, 신용 카드 정보, 개인 정보 [S1] 등 민감한 데이터에 대한 무단 액세스가 포함됩니다.

데이터 도난 외에도 공격자는 종종 데이터베이스 기록을 수정하거나 삭제하여 애플리케이션 동작의 지속적인 변화 또는 데이터 손실 [S1]로 이어질 수 있습니다. 심각도가 높은 경우에는 SQLi를 에스컬레이션하여 백엔드 인프라를 손상시키거나, 서비스 거부 공격을 활성화하거나, 조직의 시스템 [S1][S2]에 지속적인 백도어를 제공할 수 있습니다.

근본 원인: 안전하지 않은 입력 처리

SQL 주입의 근본 원인은 SQL 명령 [S2]에 사용된 특수 요소의 부적절한 중화입니다. 이는 애플리케이션이 외부 영향을 받은 입력을 쿼리 문자열 [S1][S2]에 직접 연결하여 SQL 쿼리를 구성할 때 발생합니다.

입력이 쿼리 구조에서 적절하게 분리되지 않기 때문에 데이터베이스 해석기는 사용자 입력의 일부를 리터럴 데이터 [S2]로 처리하지 않고 SQL 코드로 실행할 수 있습니다. 이 취약점은 SELECT 문, INSERT 값 또는 UPDATE 문 [S1]를 포함하여 쿼리의 다양한 부분에서 나타날 수 있습니다.

구체적인 수정 및 완화

매개변수화된 쿼리 사용

SQL 주입을 방지하는 가장 효과적인 방법은 준비된 문 [S1]라고도 알려진 매개변수화된 쿼리를 사용하는 것입니다. 개발자는 문자열을 연결하는 대신 데이터와 코드 [S2]를 분리하는 구조화된 메커니즘을 사용해야 합니다.

최소 권한 원칙

애플리케이션은 해당 작업 [S2]에 필요한 가장 낮은 권한을 사용하여 데이터베이스에 연결해야 합니다. 웹 애플리케이션 계정에는 관리 권한이 없어야 하며 해당 기능 [S2]에 필요한 특정 테이블 또는 작업으로 제한되어야 합니다.

입력 검증 및 인코딩

입력 검증은 매개변수화를 대체하지는 않지만 심층적인 방어 [S2]를 제공합니다. 애플리케이션은 입력이 예상 유형, 길이 및 형식 [S2]와 일치하는지 검증하는 알려진 양호 승인 전략을 사용해야 합니다.

FixVibe가 이를 테스트하는 방법

FixVibe는 이미 게이트된 active.sqli 스캐너 모듈을 통한 SQL 주입을 다루고 있습니다. 활성 스캔은 도메인 소유권 확인 및 증명 후에만 실행됩니다. 검사는 쿼리 매개변수를 사용하여 동일한 출처의 GET 엔드포인트를 크롤링하고, 기준 응답을 설정하고, SQL 관련 부울 예외를 찾고, 여러 지연 길이에 걸쳐 타이밍 확인 후 결과만 보고합니다. 또한 리포지토리 스캔은 템플릿 보간으로 구축된 원시 SQL 호출에 플래그를 지정하는 code.web-app-risk-checklist-backfill를 통해 근본 원인을 조기에 파악하는 데 도움이 됩니다.