SQL 인젝션

설명

SQL 및 NoSQL 인젝션 취약점을 확인합니다. SQL 인젝션 공격은 클라이언트에서 애플리케이션으로의 입력 데이터로 SQL 쿼리를 삽입하거나 “주입”하는 것으로 구성됩니다. 성공적인 SQL 인젝션 공격은 데이터베이스에서 민감한 데이터를 읽고, 데이터베이스 데이터를 수정(삽입/업데이트/삭제)하며, 데이터베이스 관리 시스템(DBMS)을 종료하는 등의 관리 작업을 실행하고, DBMS 파일 시스템에 존재하는 특정 파일의 내용을 복구하며, 경우에 따라 운영 체제에 명령을 발행할 수 있습니다. SQL 인젝션 공격은 SQL 명령이 데이터 평면 입력에 주입되어 미리 정의된 SQL 명령의 실행에 영향을 미치기 위한 주입 공격의 일종입니다. 이 검사는 요청의 매개변수(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 SQL 또는 NoSQL 쿼리에서 구문 오류를 생성하려고 시도합니다. 그런 다음 로그와 응답을 분석하여 오류가 발생했는지 감지하려고 합니다. 오류가 감지되면 취약점이 존재할 가능성이 높습니다.

수정 사항

소프트웨어는 업스트림 구성 요소에서 외부 영향을 받은 입력을 사용하여 SQL 명령의 전부 또는 일부를 구성하지만, 다운스트림 구성 요소에 전송될 때 의도된 SQL 명령을 수정할 수 있는 특수 요소를 중화하거나 잘못 중화하지 않습니다.

사용자가 제어할 수 있는 입력에서 SQL 문법을 충분히 제거하거나 인용하지 않으면 생성된 SQL 쿼리가 이러한 입력이 일반 사용자 데이터 대신 SQL로 해석되도록 할 수 있습니다. 이는 보안 검사를 우회하도록 쿼리 논리를 변경하거나 백엔드 데이터베이스를 수정하는 추가 명령문을 삽입하는 데 사용될 수 있으며, 시스템 명령 실행을 포함할 수 있습니다.

SQL 인젝션은 데이터베이스 기반 웹사이트에서 일반적인 문제로 발전해 왔습니다. 이 결함은 쉽게 발견되고 쉽게 악용될 수 있으며, 따라서 최소한의 사용자 기반이 있는 사이트나 소프트웨어 패키지는 이러한 유형의 공격 시도의 대상이 될 가능성이 높습니다. 이 결함은 SQL이 제어 평면과 데이터 평면 간의 실제 구분을 하지 않는 사실에 의존합니다.

링크