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를 통해 근본 원인을 조기에 파악하는 데 도움이 됩니다.
