최소 권한 액세스를 적용하고, 사용자 입력을 삭제하며, 데이터베이스 프로시저를 제한하면 SQL 삽입과 그에 따른 데이터 유출을 방지하는 데 도움이 됩니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
관련 콘텐츠
인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!
글 링크 복사
구조화된 질의 언어 삽입(SQLi)은 공격자가 SQL 데이터베이스에 있는 중요한 정보를 검색, 조작, 파기할 수 있도록 하는 코드 삽입 공격입니다. 이러한 공격은 SQL 쿼리 필드에 특수 명령을 삽입하는 방식으로 작동하며, 이 명령이 실행되면 공격자는 정상적인 사용자의 신원을 스푸핑하고 보호된 데이터를 보거나 검색할 수 있으며 서버에 대한 루트 액세스 권한까지 획득할 수 있습니다.
공격자는 합법적인 코드와 신뢰할 수 없는 코드를 제대로 구분할 수 없는 애플리케이션 프로그래밍 인터페이스(API)의 취약점을 악용하여 SQLi를 실행하는 경우가 많습니다. 변경된 명령이나 쿼리를 감지할 수 없는 경우, 이들 API는 웹 애플리케이션 방화벽(WAF) 또는 인증 조치를 우회하는 등 악의적 요청을 실행하는 데 사용될 수 있습니다.
일반적으로 SQLi는 다음 세 가지 방법 중 하나를 사용하여 수행됩니다.
양성 및 악성 SQL 쿼리의 실제 사례를 보려면 SQL 삽입이란?을 읽어보세요.
SQL 삽입은 가장 널리 퍼진 API 위협 중 하나이지만, 올바른 예방 전략을 통해 효과적으로 방지할 수 있습니다. SQL 삽입을 방지하는 데 유용한 접근 방식에는 데이터베이스 프로시저 제한, 데이터베이스 입력 삭제, 최소 권한 액세스 시행 등이 있습니다.
SQL 삽입은 대체로 공격자의 데이터 입력 및 데이터베이스 함수 조작 능력에 따라 달라집니다. 이러한 입력을 제한하고 수행할 수 있는 데이터베이스 프로시저의 유형을 제한함으로써 조직에서는 무단 또는 악의적인 쿼리의 위험을 최소화할 수 있습니다. 그 방법에는 다음이 포함됩니다.
모든 SQL 데이터베이스에 대한 사용자 입력은 정기적으로 모니터링, 유효성 검사, 삭제하여 악성 코드를 제거해야 합니다. 입력 유효성 검사는 데이터가 미리 정해진 기준에 따라 올바르게 검사되고 형식이 지정되었는지 확인하며, 입력 정리는 유효하지 않거나 안전하지 않은 문자를 제거하고 필요에 따라 다시 포맷하여 입력을 수정(또는 "삭제")합니다. 입력 유효성 검사를 보장하는 방법은 다음과 같습니다.
최소 권한 액세스는 사용자에게 역할에 필요한 만큼만 보호된 리소스에 액세스할 권한을 부여하는 원칙입니다. 예를 들어, 데이터베이스에 대하여 관리자 수준의 권한을 부여하는 사용자 수를 제한하거나 나중에 취소할 수 있는 임시 관리자 수준의 액세스 권한을 사용자에게 부여할 수도 있습니다.
역할 기반 수준에서 사용자 액세스를 제한하면 도난당한 자격 증명을 사용하여 데이터베이스를 침해하는 공격자도 마찬가지로 보호된 데이터를 확인, 수정, 도용, 파기할 수 있는 능력이 제한되므로 침해의 영향을 최소화하는 데 도움이 됩니다. 같은 이유로 조직에서는 여러 웹 사이트 및 애플리케이션에서 데이터베이스에 대한 공유 액세스를 제한해야 합니다.
Cloudflare에서는 강력한 애플리케이션 및 API 보안 포트폴리오를 통해 조직에서 SQLi 공격에 대한 복원력을 개선할 수 있도록 지원합니다.
매개변수화된 쿼리는 매개변수를 실행 코드가 아닌 리터럴 값으로 처리하여 사용자 입력에서 SQL 코드를 분리합니다. 이 기술은 공격자가 악의적인 SQL 문을 삽입하는 것을 방지하는 데 도움이 됩니다.
최소 권한은 데이터베이스 사용자를 특정 기능에 절대적으로 필요한 권한으로만 제한합니다. 그렇게 하면 공격자가 입힐 수 있는 잠재적 피해가 제한됩니다. 공격자가 SQL 삽입 공격을 성공적으로 수행하고 합법적인 로그인 자격 증명을 획득한다고 해도 최소 권한 원칙을 통해 계정 도난으로 인해 발생할 수 있는 피해를 억제할 수 있습니다.
허용 목록은 악의적인 콘텐츠만 찾는 것이 아니라 허용된 특정 문자 또는 패턴 집합을 기준으로 입력의 유효성을 검사합니다. 이 접근 방식에서는 가능한 모든 공격 패턴이 감지되는 대신 명시적으로 허용된 입력만 허용되므로 가능한 공격 벡터의 수가 제한됩니다.
저장 프로시저는 데이터베이스 서버에 안전하게 전달된 매개변수를 사용하여 사전 정의된 SQL 문을 실행합니다. 저장 프로시저 덕분에 악의적인 당사자가 데이터베이스 자체에서 직접 코드를 실행하는 것이 방지됩니다.
2차 삽입 방지 방법에는 최소 권한 원칙 적용, 매개변수화된 쿼리 사용, 입력 유효성 검사, 새니타이제이션(sanitization) 등이 포함됩니다.