KR102258956B1 - 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버 - Google Patents

관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버 Download PDF

Info

Publication number
KR102258956B1
KR102258956B1 KR1020200157084A KR20200157084A KR102258956B1 KR 102258956 B1 KR102258956 B1 KR 102258956B1 KR 1020200157084 A KR1020200157084 A KR 1020200157084A KR 20200157084 A KR20200157084 A KR 20200157084A KR 102258956 B1 KR102258956 B1 KR 102258956B1
Authority
KR
South Korea
Prior art keywords
input field
field data
specific
specific input
server
Prior art date
Application number
KR1020200157084A
Other languages
English (en)
Inventor
김종민
정찬혁
한거남
Original Assignee
(주)시큐레이어
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)시큐레이어 filed Critical (주)시큐레이어
Priority to KR1020200157084A priority Critical patent/KR102258956B1/ko
Application granted granted Critical
Publication of KR102258956B1 publication Critical patent/KR102258956B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24537Query rewriting; Transformation of operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Computing Systems (AREA)
  • Computer And Data Communications (AREA)

Abstract

본 발명에 따르면, 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법으로서, (a) 서버가, 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 단계; (b) 상기 서버가, 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 단계; (c) 상기 서버가, 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 단계; 및 (d) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 것을 특징으로 하는 방법이 제공된다.

Description

관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버 {METHOD FOR DETECTING ATTACK IN ENVIRONMENT WITH USING SQL FOR MANAGING RELATIONAL DATABASE, AND SERVER USING THE SAME}
본 발명은 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버에 대한 것이다.
웹 사이트에 대한 공격 한 종류로서, SQL 인젝션(injection) 공격이 있다. 해커(공격자)는, 공격 대상인 웹 사이트가 SQL 인젝션 취약점을 가지는지를 확인하고, 해당 웹 사이트에서 의도하지 않은 SQL 쿼리가 실행되도록 하기 위하여 공격을 위한 입력 데이터의 삽입을 시도하게 된다.
한 언론사의 기사("숙박예약 사이트 개인정보 1,610건 또 노출! 페이스트빈 어쩌나", 보안뉴스 김경애 기자, 2018년 10월 9일) 를 보면, 개인정보 탈취에 SQL 인젝션 공격이 사용되었으며, 이러한 공격에 대비하기 위해서 웹사이트의 시큐어코딩 및 서버 필터 사용 등이 필요함을 확인할 수 있다.
위 문헌에서 언급하고 있는 시큐어코딩 및 서버 필터의 한 형태로서, 기존의 보안 솔루션은 SQL 인젝션 공격에 사용될 수 있는 키워드를 필터링하여, 공격 여부를 탐지하는 방법을 사용하고 있다.
하지만, 이와 같은 키워드 기반의 공격 탐지 방법은, 해당 키워드가 공격의 목적이 아닌 경우에도 이를 공격으로 탐지할 위험이 있으며, 또한 새로운 공격 기법이 계속하여 개발되어 웹 사이트의 공격에 사용됨에 따라 키워드 기반으로는 공격을 정확히 탐지하는 데 어려움이 있는 것이 사실이다.
따라서, 키워드 기반이 아니라 새로운 공격 기법에도 대응할 수 있는 공격 탐지 방법이 필요한 실정이다.
따라서, 본 발명은, 상술한 문제점을 모두 해결하는 것을 그 목적으로 한다.
또한, 본 발명은, 패킷 또는 로그 전체가 아니라 특정 파라미터에 대응되어 입력된 특정 입력 필드 데이터에 대하여 검사를 수행하도록 하여 공격 탐지의 효율성을 높이는 것을 다른 목적으로 한다.
또한, 본 발명은, 특정 입력 필드 데이터의 문법 검사에 기반하여 공격을 탐지함으로써, 새로운 공격 기법에도 대응할 수 있는 공격 탐지 방법을 제공하는 것을 다른 목적으로 한다.
또한, 본 발명은, 특정 입력 필드 데이터에 싱글쿼터(single quote), 더블쿼터(double quote), 및 주석문자가 포함되어 있는지의 여부를 고려하여, SQL 쿼리의 주석 처리 부분을 추가로 확인함으로써 더 정확한 공격 탐지가 가능한 방법을 제공하는 것을 다른 목적으로 한다.
또한, 본 발명은, 특정 입력 필드 데이터에 대한 공격 탐지가 오탐인 경우, 이를 별도로 관리하는 방법을 제공함으로써 오탐을 효과적으로 관리하는 방법을 제공하는 것을 다른 목적으로 한다.
상기한 바와 같은 본 발명의 목적을 달성하고, 후술하는 본 발명의 특징적인 효과를 실현하기 위한, 본 발명의 특징적인 구성은 하기와 같다.
본 발명의 일 태양에 따르면, 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법으로서, (a) 서버가, 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 단계; (b) 상기 서버가, 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 단계; (c) 상기 서버가, 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 단계; 및 (d) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 (a) 단계 이전에, (a0) 상기 서버가, (i) 상기 SQL에서 사용되는 복수개의 함수들 또는 복수개의 연산자들 각각에 대하여, 상기 복수개의 함수들 또는 상기 복수개의 연산자들 각각에 필요한 필수 인자에 대한 정보인 제1 필수 인자 정보를 획득하는 프로세스, 및 (ii) 상기 SQL에서 사용되는 복수개의 DML(Data Manipulation Language)문 각각 - 상기 DML은, (1) SELECT문, (2) INSERT문, (3) UPDATE문, 및 (4) DELETE문 중 적어도 하나를 포함함 - 에 필요한 필수 인자에 대한 정보인 제2 필수 인자 정보 중 적어도 일부를 획득하는 프로세스를 수행하는 단계; 를 추가로 포함하고, 상기 (c) 단계에서, 상기 서버는, (i) 상기 복수개의 함수들 중 특정 함수가 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제1 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하고, (ii) 상기 복수개의 DML문 중 특정 DML문이 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제2 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 (c) 단계에서, 상기 소정의 알고리즘은, 트리 구조의 AST(Abstract Syntax Tree)를 생성하여, 이를 바탕으로 문법의 정오를 판단하는 것임을 특징으로 하고, 상기 SQL 필터 모듈은, 상기 AST를 생성하기 위한 AST 생성기 서브모듈을 포함하는 것을 특징으로 하며, 상기 서버가, (i) 상기 SQL 필터 모듈로 하여금, 상기 AST 생성기 서브모듈을 사용하여 상기 특정 입력 필드 데이터에 대응되는 특정 AST를 생성하도록 하고, (ii) 상기 생성된 특정 AST를 참조하여 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 특정 AST는, 상기 특정 입력 필드 데이터가 상기 제1 특정 파라미터와 서로 대응된다는 의미를 가지는 조건연산문을 하나의 노드로서 포함하는 것을 특징으로 하고, 상기 조건연산문은, (i) 상기 특정 입력 필드 데이터를 상기 제1 구성요소로 하고, (ii) 상기 제1 특정 파라미터를 제2 구성요소로 하는 것을 특징으로 하며, 상기 (d) 단계에서, 상기 제1 구성요소에 대응되는 하위노드가, 상기 조건연산문에 대응되는 상기 노드에 대하여 2 이상의 깊이를 가지도록 생성되거나 생성되어야 하는 경우에는, 상기 서버가, 상기 특정 입력 필드 데이터의 상기 문법이 틀린 것으로 판단하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 특정 입력 필드 데이터는, 그에 대응되는 상기 제1 특정 파라미터와 함께 상기 패킷 또는 상기 로그의 특정 부분에 포함되어 있는 것을 특징으로 하고, 상기 (b) 단계에서, 상기 서버가, 상기 SQL 필터 모듈로 하여금, 상기 제1 특정 파라미터를 참조하여 상기 특정 입력 필드 데이터를 획득하도록 하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 (a) 단계에서, 상기 클라이언트의 상기 요청에 대응되어 생성되는 상기 패킷 또는 상기 로그는, HTTP(Hyper Text Transfer Protocol)에 기반하여 생성되는 것을 특징으로 하고, 상기 (b) 단계에서, 상기 서버는, 상기 SQL 필터 모듈로 하여금, 상기 패킷 또는 상기 로그에 대한 메쏘드 필드 - 상기 메쏘드 필드는, 상기 패킷 또는 상기 로그의 요청 라인(request line)에 포함되어 있음 - 를 참조하여 HTTP 메쏘드의 종류를 판단하도록 하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 상기 요청 라인으로 판단하도록 하고, 상기 요청 라인에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 바디(body) 부분으로 판단하도록 하고, 상기 바디 부분에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 SQL 필터 모듈은, (i) URL(Uniform Resource Locator) 콜렉터(Collector) 서브모듈, 및 (ii) 파라미터 파서(Parser) 서브모듈을 포함하는 것을 특징으로 하고, 상기 (b) 단계에서, 상기 서버는, 상기 SQL 필터 모듈로 하여금, 상기 URL 콜렉터 서브모듈을 사용하여, 상기 패킷 또는 상기 로그가 전송되는 URL에 대한 정보를 획득하고, 상기 파라미터 파서 서브모듈을 사용하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 요청 라인 부분에 포함된 상기 URL에 대응되는 정보로부터 상기 제1 특정 파라미터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 바디(body) 부분으로부터 상기 제1 특정 파라미터를 추출하도록 함으로써, 상기 제1 특정 파라미터에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 특정 입력 필드 데이터에, 상기 SQL에서 문자열임을 표시하는 특수문자인 싱글쿼터(single quote) 또는 더블쿼터(double quote)가 포함되어 있고, 상기 싱글쿼터 또는 상기 더블쿼터 다음에 상기 SQL에서 주석임을 표시하는 주석문자가 함께 포함되어 있는 경우, 상기 서버가, 상기 특정 입력 필드 데이터에서 상기 주석문자 및 상기 주석문자에 의하여 주석으로 처리되는 부분을 제외하고 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하되, 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되는 경우에는, 상기 특정 입력 필드 데이터를 추가적인 검사가 필요한 대상으로 판단하여 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 서버는, 상기 특정 입력 필드 데이터가 상기 추가 검사 대상으로 분류된 경우, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리에서 상기 주석문자에 의해 영향을 받는 주석 처리 부분을 추가로 확인하여, 상기 주석 처리 부분에 상기 전체 파라미터 중 적어도 하나의 제2 특정 파라미터가 포함되어 있는 경우에는, 상기 특정 입력 필드 데이터가 상기 제2 특정 파라미터를 무시하도록 하기 위한 목적이 있는 것으로 판단하여, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하는 것을 특징으로 하는 방법이 제공된다.
일례로서, 상기 (d) 단계 이후에, (e) 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단하여 상기 공격으로 탐지하였으나 오탐인 경우, (i) 상기 특정 입력 필드 데이터를 포함하는 오탐 정보를 별도의 데이터베이스에 저장하여 관리하는 프로세스, 및 (ii) 상기 제1 특정 파라미터에 대응되는 상기 입력 필드에, 상기 특정 입력 필드 데이터와 동일한 추후 입력 필드 데이터가 다시 입력되면, 상기 데이터베이스를 참조하여, 상기 추후 입력 필드 데이터에 대하여 상기 문법 검사를 생략하고 상기 추후 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단하거나, 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 방법이 제공된다.
또한, 본 발명의 다른 태양에 따르면, 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 서버로서, 인스트럭션들을 저장하는 적어도 하나의 메모리; 및 상기 인스트럭션들을 실행하기 위해 구성된 적어도 하나의 프로세서; 를 포함하고, 상기 프로세서가, (I) 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 프로세스, (II) 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 프로세스, (III) 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 프로세스; 및 (IV) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 프로세스를 수행하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 (I) 프로세스 이전에, (I-0) 상기 프로세서가, (i) 상기 SQL에서 사용되는 복수개의 함수들 또는 복수개의 연산자들 각각에 대하여, 상기 복수개의 함수들 또는 상기 복수개의 연산자들 각각에 필요한 필수 인자에 대한 정보인 제1 필수 인자 정보를 획득하는 서브 프로세스, 및 (ii) 상기 SQL에서 사용되는 복수개의 DML(Data Manipulation Language)문 각각 - 상기 DML은, (1) SELECT문, (2) INSERT문, (3) UPDATE문, 및 (4) DELETE문 중 적어도 하나를 포함함 - 에 필요한 필수 인자에 대한 정보인 제2 필수 인자 정보 중 적어도 일부를 획득하는 서브 프로세스를 수행하는 프로세스를 추가로 수행하고, 상기 (III) 단계에서, 상기 프로세서는, (i) 상기 복수개의 함수들 중 특정 함수가 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제1 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하고, (ii) 상기 복수개의 DML문 중 특정 DML문이 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제2 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 (III) 프로세스에서, 상기 소정의 알고리즘은, 트리 구조의 AST(Abstract Syntax Tree)를 생성하여, 이를 바탕으로 문법의 정오를 판단하는 것임을 특징으로 하고, 상기 SQL 필터 모듈은, 상기 AST를 생성하기 위한 AST 생성기 서브모듈을 포함하는 것을 특징으로 하며, 상기 프로세서가, (i) 상기 SQL 필터 모듈로 하여금, 상기 AST 생성기 서브모듈을 사용하여 상기 특정 입력 필드 데이터에 대응되는 특정 AST를 생성하도록 하고, (ii) 상기 생성된 특정 AST를 참조하여 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 특정 AST는, 상기 특정 입력 필드 데이터가 상기 제1 특정 파라미터와 서로 대응된다는 의미를 가지는 조건연산문을 하나의 노드로서 포함하는 것을 특징으로 하고, 상기 조건연산문은, (i) 상기 특정 입력 필드 데이터를 상기 제1 구성요소로 하고, (ii) 상기 제1 특정 파라미터를 제2 구성요소로 하는 것을 특징으로 하며, 상기 (IV) 프로세스에서, 상기 제1 구성요소에 대응되는 하위노드가, 상기 조건연산문에 대응되는 상기 노드에 대하여 2 이상의 깊이를 가지도록 생성되거나 생성되어야 하는 경우에는, 상기 프로세서가, 상기 특정 입력 필드 데이터의 상기 문법이 틀린 것으로 판단하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 특정 입력 필드 데이터는, 그에 대응되는 상기 제1 특정 파라미터와 함께 상기 패킷 또는 상기 로그의 특정 부분에 포함되어 있는 것을 특징으로 하고, 상기 (II) 프로세스에서, 상기 프로세서가, 상기 SQL 필터 모듈로 하여금, 상기 제1 특정 파라미터를 참조하여 상기 특정 입력 필드 데이터를 획득하도록 하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 (I) 프로세스에서, 상기 클라이언트의 상기 요청에 대응되어 생성되는 상기 패킷 또는 상기 로그는, HTTP(Hyper Text Transfer Protocol)에 기반하여 생성되는 것을 특징으로 하고, 상기 (II) 프로세스에서, 상기 프로세서는, 상기 SQL 필터 모듈로 하여금, 상기 패킷 또는 상기 로그에 대한 메쏘드 필드 - 상기 메쏘드 필드는, 상기 패킷 또는 상기 로그의 요청 라인(request line)에 포함되어 있음 - 를 참조하여 HTTP 메쏘드의 종류를 판단하도록 하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 상기 요청 라인으로 판단하도록 하고, 상기 요청 라인에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 바디(body) 부분으로 판단하도록 하고, 상기 바디 부분에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 SQL 필터 모듈은, (i) URL(Uniform Resource Locator) 콜렉터(Collector) 서브모듈, 및 (ii) 파라미터 파서(Parser) 서브모듈을 포함하는 것을 특징으로 하고, 상기 (II) 프로세스에서, 상기 프로세서는, 상기 SQL 필터 모듈로 하여금, 상기 URL 콜렉터 서브모듈을 사용하여, 상기 패킷 또는 상기 로그가 전송되는 URL에 대한 정보를 획득하고, 상기 파라미터 파서 서브모듈을 사용하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 요청 라인 부분에 포함된 상기 URL에 대응되는 정보로부터 상기 제1 특정 파라미터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 바디(body) 부분으로부터 상기 제1 특정 파라미터를 추출하도록 함으로써, 상기 제1 특정 파라미터에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 특정 입력 필드 데이터에, 상기 SQL에서 문자열임을 표시하는 특수문자인 싱글쿼터(single quote) 또는 더블쿼터(double quote)가 포함되어 있고, 상기 싱글쿼터 또는 상기 더블쿼터 다음에 상기 SQL에서 주석임을 표시하는 주석문자가 함께 포함되어 있는 경우, 상기 프로세서가, 상기 특정 입력 필드 데이터에서 상기 주석문자, 및 상기 주석문자에 의하여 주석으로 처리되는 부분을 제외하고 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하되, 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되는 경우에는, 상기 특정 입력 필드 데이터를 추가적인 검사가 필요한 대상으로 판단하여 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 프로세서는, 상기 특정 입력 필드 데이터가 상기 추가 검사 대상으로 분류된 경우, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리에서 상기 주석문자에 의해 영향을 받는 주석 처리 부분을 추가로 확인하여, 상기 주석 처리 부분에 상기 전체 파라미터 중 적어도 하나의 제2 특정 파라미터가 포함되어 있는 경우에는, 상기 특정 입력 필드 데이터가 상기 제2 특정 파라미터를 무시하도록 하기 위한 목적이 있는 것으로 판단하여, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하는 것을 특징으로 하는 서버가 제공된다.
일례로서, 상기 (IV) 프로세스 이후에, (V) 상기 프로세서가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단하여 상기 공격으로 탐지하였으나 오탐인 경우, (i) 상기 특정 입력 필드 데이터를 포함하는 오탐 정보를 별도의 데이터베이스에 저장하여 관리하는 프로세스, 및 (ii) 상기 제1 특정 파라미터에 대응되는 상기 입력 필드에, 상기 특정 입력 필드 데이터와 동일한 추후 입력 필드 데이터가 다시 입력되면, 상기 데이터베이스를 참조하여, 상기 추후 입력 필드 데이터에 대하여 상기 문법 검사를 생략하고 상기 추후 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단하거나, 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 서버가 제공된다.
본 발명에 의하면, 다음과 같은 효과가 있다.
본 발명은, 패킷 또는 로그 전체가 아니라 특정 파라미터에 대응되어 입력된 특정 입력 필드 데이터에 대하여 검사를 수행하도록 하여 공격 탐지의 효율성을 높이는 효과가 있다.
또한, 본 발명은, 특정 입력 필드 데이터의 문법 검사에 기반하여 공격을 탐지함으로써, 새로운 공격 기법에도 대응할 수 있는 효과가 있다.
또한, 본 발명은, 특정 입력 필드 데이터에 싱글쿼터(single quote), 더블쿼터(double quote), 및 주석문자가 포함되어 있는지의 여부를 고려하여, SQL 쿼리의 주석 처리 부분을 추가로 확인함으로써 더 정확한 공격 탐지가 가능한 효과가 있다.
또한, 본 발명은, 특정 입력 필드 데이터에 대한 공격 탐지가 오탐인 경우, 이를 별도로 관리하는 방법을 제공함으로써 오탐을 효과적으로 관리할 수 있는 효과가 있다.
도 1은 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버를 개략적으로 나타내는 도면이다.
도 2는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버가 클라이언트와 연동된 전체 시스템을 개략적으로 나타내는 도면이다.
도 3는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버에 대하여 필수 인자 정보가 사전에 입력될 수 있는 SQL 함수들의 목록을 개략적으로 나타내는 도면이다.
도 4a는 본 발명의 일 실시예에 따른, 클라이언트의 요청에 대응되어 생성된 패킷 또는 로그가 GET 메쏘드에 해당되는 경우를 개략적으로 나타내는 도면이다.
도 4b는 본 발명의 일 실시예에 따른, 클라이언트의 요청에 대응되어 생성된 패킷 또는 로그가 POST 메쏘드에 해당되는 경우를 개략적으로 나타내는 도면이다.
도 5a는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버가, 입력 필드 데이터의 문법 검사를 위해 AST(Abstract Syntax Tree)를 생성하는 경우에, 입력 필드 데이터의 문법이 맞아 공격으로 탐지되는 경우의 AST를 개략적으로 나타내는 도면이다.
도 5b는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버가, 입력 필드 데이터의 문법 검사를 위해 AST(Abstract Syntax Tree)를 생성하는 경우에, 입력 필드 데이터의 문법이 틀려 공격이 아닌 것으로 판단되는 경우의 AST를 개략적으로 나타내는 도면이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명의 목적들, 기술적 해법들 및 장점들을 분명하게 하기 위하여 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 통상의 기술자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다.
또한, 본 발명의 상세한 설명 및 청구항들에 걸쳐, "포함하다"라는 단어 및 그것의 변형은 다른 기술적 특징들, 부가물들, 구성요소들 또는 단계들을 제외하는 것으로 의도된 것이 아니다. 통상의 기술자에게 본 발명의 다른 목적들, 장점들 및 특성들이 일부는 본 설명서로부터, 그리고 일부는 본 발명의 실시로부터 드러날 것이다. 아래의 예시 및 도면은 실례로서 제공되며, 본 발명을 한정하는 것으로 의도된 것이 아니다.
더욱이 본 발명은 본 명세서에 표시된 실시예들의 모든 가능한 조합들을 망라한다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 바람직한 실시예들에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
참고로, 아래에서 '{}'의 표시는 '{'와 '}' 자체를 제외하고, 그 안에 포함된 문자 또는 문자열을 의미하는 것으로 사용되었으며, 이는 본 발명에서 싱글쿼터(single quote, ')와 더블쿼터(double quote, ")가 사용됨에 따른 혼동을 피하기 위한 것임을 밝혀둔다. 예를 들어, {abc}로 표시된 경우, 이는 abc를 의미한다.
도 1은 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버를 개략적으로 나타내는 도면이다.
도 1을 참조하면, 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 서버(100)는 메모리(110), 프로세서(120) 및 SQL 필터 모듈(130)를 포함할 수 있다. 이 때, 메모리(110)는, 프로세서(120)의 인스트럭션들을 저장할 수 있는데, 구체적으로, 인스트럭션들은 서버(100)로 하여금 특정의 방식으로 기능하게 하기 위한 목적으로 생성되는 코드로서, 컴퓨터 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장될 수 있다. 인스트럭션들은 본 발명의 명세서에서 설명되는 기능들을 실행하기 위한 프로세스들을 수행할 수 있다.
그리고, 프로세서(120)는, MPU(Micro Processing Unit) 또는 CPU(Central Processing Unit), 캐쉬 메모리(Cache Memory), 데이터 버스(Data Bus) 등의 하드웨어 구성을 포함할 수 있다. 또한, 운영체제, 특정 목적을 수행하는 애플리케이션의 소프트웨어 구성을 포함할 수 있다.
또한, SQL 필터 모듈(130)은, 메모리(110) 및 프로세서(130)와 연동되어, 서버(100)가 획득하는 요청에 대응되는 패킷 또는 로그를 필터링하여, 해당 요청이 공격을 위한 것인지를 판단하기 위하여 필요한 정보를 추출하고, 이를 바탕으로 가공된 정보를 생성할 수 있다. 이때, 상기 공격은 SQL 인젝션 공격에 해당되는 것일 수 있다.
구체적으로, SQL 필터 모듈(130)은, 서브모듈로서 URL 콜렉터 서브모듈(131), 파라미터 파서 서브모듈(132), 및 AST 생성기 서브모듈(133) 중 적어도 일부를 포함하고 있을 수 있다. 이때, 서버(100)는, SQL 필터(130)로 하여금, URL 콜렉터 서브모듈(131)을 사용하여 상기 요청에 의하여 생성된 패킷 또는 로그에 대한 URL 정보를 추출하도록 할 수 있고, 파라미터 파서 서브모듈(132)을 사용하여 상기 패킷 또는 로그에 포함된 파라미터를 추출하도록 할 수 있으며, AST 생성기 서브모듈(133)을 사용하여 특정 입력 필드 데이터에 대한 AST(Abstract Syntax Tree)를 생성하도록 할 수 있다. 이에 대한 자세한 내용은 후술하도록 하겠다.
다음으로, 서버(100)는 SQL 함수에 대한 정보, SQL 연산자에 대한 정보, DML(Database Manipulate Language)문에 대한 정보 등과 같이 SQL이 사용되는 환경에서 공격을 탐지하기 위하여 필요한 정보를 포함하는 데이터베이스(200)와 연동될 수 있다. 이 때, 데이터베이스는 플래시 메모리 타입(flash memory type), 하드디스크 타입(hard disk type), 멀티미디어 카드 마이크로 타입(multimedia card micro type), 카드 타입의 메모리(예를 들어 SD 또는 XD 메모리), 램(Random Access Memory, RAM), SRAM(Static Random Access Memory), 롬(ReadOnly Memory, ROM), EEPROM(Electrically Erasable Programmable ReadOnly Memory), PROM(Programmable ReadOnly Memory), 자기 메모리, 자기 디스크, 광디스크 중 적어도 하나의 타입의 저장매체를 포함할 수 있으며, 이에 한정되지 않으며 데이터를 저장할 수 있는 모든 매체를 포함할 수 있다. 또한, 데이터베이스는 서버(100)의 내부에 설치되어 데이터를 전송하거나 수신되는 데이터를 기록할 수도 있으며, 이는 발명의 실시 조건에 따라 달라질 수 있다.
이와 같은 서버(100)는, 적어도 하나의 클라이언트와 소정의 프로토콜에 따른 요청 및 응답을 주고받을 수 있다.
도 2는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버가 클라이언트와 연동된 전체 시스템을 개략적으로 나타내는 도면이다.
도 2를 참조하면, 적어도 하나의 클라이언트(300-1, 300-2,..., 이하 300)로부터 서버(100)에 대한 요청이 발생하면, 해당 요청이 발생된 클라이언트(300)에서는 소정의 프로토콜에 기반하여 상기 요청에 대응되는 패킷을 생성하고, 생성된 패킷을 서버(100)로 전송함으로써 그에 대응되는 SQL 쿼리가 서버(100)에서 실행될 수 있다.
예를 들어, 클라이언트(300)에 {id} 파라미터에 대응되는 입력 필드(310)가 제공되고, 사용자로부터 해당 입력 필드에 {guest} 라는 입력 필드 데이터가 입력되어, 이를 서버(100)로 전송하도록 하는 요청이 발생하면, 클라이언트(300)는 {id} 파라미터와 {guest} 입력 필드 데이터를 포함하는 패킷을 생성하여 서버(100)로 전송할 수 있고, 관계형 데이터베이스를 관리하기 위한 SQL이 사용되는 환경인 서버(100)에서는 {id} 파라미터와 {guest} 입력 필드 데이터를 사용하는 다음과 같은 SQL 쿼리가 일 예시로서 실행될 수 있다.
[예시 1]
SELECT * FROM users where id='guest'
이 때, {SELECT *}는 테이블의 모든 필드를 대상으로 함을 의미하고, {FROM users}는 상기 테이블의 테이블명이 {users}임을 의미하며, {where id='guest'}는 조건절으로서, {id} 파라미터에 해당되는 필드에 {guest}의 값을 가지는 데이터가 존재하는지에 대한 조건을 의미한다.
위 {users} 테이블의 일 예는 아래의 [표 1]과 같다.
name id pw
김xx guest guestpw
정oo guest1 guest1pw
이++ guest2 guest2pw
[표 1]을 참조하면, {users} 테이블은, {name} 필드, {id} 필드, 및 {pw} 필드를 각각의 열(column)로서 포함하고 있다.참고로, 관계형 데이터베이스의 종류 또는 발명의 실시 형태에 따라, 상기 필드는 [표 1]과 달리 각 행(row)으로 구성될 수도 있으나, 아래에서는 [표 1]과 같은 형태를 바탕으로 설명하기로 한다.
그리고, 위 [그림 1]의 SQL 쿼리는, {users} 테이블의 모든 필드 중에서 {id} 파라미터에 해당되는 필드에 {guest}가 포함되어 있는지를 확인하고, 위 [표 1]과 같은 경우 {김xx}에 해당되는 행의 정보를 그 결과로서 제공할 수 있다.
또한, 서버(100)는, 클라이언트(300)로부터 전송되는 패킷을 실시간으로 획득할 수도 있으나, 소정의 시간 이전에 클라이언트(300)로부터 서버(100)에 전송되었던 로그를 획득할 수도 있으며, 서버(100)는 획득한 패킷 또는 로그를 분석하여, 클라이언트(300)로부터 발생된 요청에 의하여 서버(100)에서 실행되는 SQL 쿼리가 공격인지의 여부를 판단할 수 있다.
구체적으로, 서버(100)는, 적어도 하나의 클라이언트(300)로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하고, 소정의 SQL 필터 모듈(130)로 하여금, 획득된 패킷 또는 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드(310)에 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 로그 파일로부터 추출하도록 할 수 있다.
그리고 나서, 서버(100)는, 소정의 알고리즘을 바탕으로 하여, 추출된 특정 입력 필드 데이터에 대하여 SQL의 문법 규칙에 기반한 문법 검사를 수행할 수 있다. 그 결과, (i) 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 서버(100)는, 상기 특정 입력 필드 데이터를 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 서버(100)에 대한 공격으로 탐지할 수 있고, (ii) 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 서버(100)는, 특정 입력 필드 데이터를 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리가 서버(100)에 대한 공격이 아닌 것으로 판단할 수 있다. 이는, 공격을 목적으로 입력되는 특정 입력 필드 데이터는 그에 대응되어 실행되는 SQL 쿼리가 의도된 바와 같이 변형되어 실행되도록 하기 위하여 그 자체가 SQL 문법에 맞게 입력될 가능성이 높기 때문이다.
예를 들어, 서버(100)가 SQL 필터(130)로 하여금 추출하도록 하여 획득된 특정 입력 필드 데이터에 {and}와 같은 조건연산자에 해당되는 문자열이 포함되어 있는 경우, 서버(100)는 {A and B}와 같이 {and}와 연결되는 {A} 구성요소와 {B} 구성요소가 함께 포함되어 있어야 해당 특정 입력 필드 데이터의 문법이 맞는 것으로 판단할 수 있지만, 만약 획득된 특정 입력 필드 데이터가 {A and}인 경우에는, 필요한 구성요소인 {B}가 없기 때문에 해당 특정 입력 필드 데이터의 문법이 틀린 것으로 판단할 수 있다.
또한, 발명의 다른 일 예로서, 서버(100)가 클라이언트(300)의 요청에 의하여 생성된 패킷 또는 로그를 획득하기 이전에, (i) SQL에서 사용되는 복수개의 함수들 또는 복수개의 연산자들 각각에 대하여, 그 각각에 필요한 필수 인자에 대한 정보인 제1 필수 인자 정보를 획득하는 프로세스, 및 (ii) SQL에서 사용되는 복수개의 DML(Data Manipulation Language)문 각각에 필요한 필수 인자에 대한 정보인 제2 필수 인자 정보 중 적어도 일부를 획득하는 프로세스를 수행할 수 있다.
그리고 나서, 서버(100)는, (i) 상기 복수개의 함수들 또는 상기 복수개의 연산자 중 특정 함수 또는 특정 연산자가 특정 입력 필드 데이터에 포함되어 있는 경우, 제1 필수 인자에 대한 정보를 참조하여, 특정 입력 필드 데이터에 대한 문법 검사를 수행하고, (ii) 상기 복수개의 DML 중 특정 DML이 특정 입력 필드 데이터에 포함되어 있는 경우, 제2 필수 인자에 대한 정보를 참조하여, 특정 입력 필드 데이터에 대한 문법 검사를 수행할 수 있다.
도 3는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버에 대하여 필수 인자 정보가 사전에 입력될 수 있는 SQL 함수들의 목록을 개략적으로 나타내는 도면이다.
도 3을 참조하면, SQL에서 사용되는 복수개의 함수들이 도시되어 있음을 확인할 수 있는데, 서버(100)는 그 중 그 각각이 SQL 쿼리로 실행되기 위하여 필수적으로 갖추어야 하는 구성요소인 필수 인자에 대한 정보를 제1 필수 인자 정보로 사전에 획득할 수 있다. 물론, 제1 필수 인자 정보를 획득하는 대상이 되는 함수는 도 3에 도시된 함수들로 한정되는 것은 아니며, 발명의 실시 조건에 따라 그 일부만이 대상이 될 수도 있고, 도 3에는 도시되지 않은 추가적인 함수가 그 대상이 될 수도 있다.
예를 들어, {ascii}함수는, 입력된 특정 문자를 그에 대응되는 아스키코드값으로 변환하여 출력하기 위한 함수로서, 해당 함수가 SQL 쿼리로 실행되기 위하여 다음과 같은 형태를 갖추어야 한다.
[예시 2]
ascii ('문자')
이 때, {ascii} 함수의 제1 필수 인자는 {문자}가 될 것이며, 다른 함수들의 경우도 이와 유사하므로, 자세한 설명은 생략하도록 하겠다.
그리고, 도 3에는 도시되어 있지 않으나, SQL에서는 다양한 연산자가 사용될 수 있는데, 예를 들어 {UNION} 연산자는 집합연산자로서, {SELECT}와 함께 사용되어 선택된 테이블의 데이터를 병합하고, 중복된 데이터는 한번만 출력하도록 하는 기능을 수행하기 위하여 SQL 쿼리에서 사용될 수 있다. 따라서, {UNION} 연산자의 제1 필수 인자는 {SELECT}가 될 수 있다. 하지만, 다른 예로서, SQL 쿼리에는 {UNION}과 유사한 집합연산자로서 {UNION ALL}연산자가 사용될 수도 있는데, 이는 {UNION}을 포함하지만 SQL 쿼리상에서 그 뒤에 {ALL}이 존재하게 되므로, 이와 같은 경우를 고려하여 {UNION} 연산자의 제1 필수 인자에서 {ALL}은 제외하도록 할 수 있고, 이와 같은 예외 조건은 발명의 실시 조건에 따라 다르게 정해질 수 있을 것이다.
또한, SQL에서는 관계형 데이터베이스의 테이블에 포함된 데이터를 조작하기 위한 DML(Data Manipulation Language)이 사용될 수 있는데, 상기 DML에는 (1) SELECT, (2) INSERT, (3) UPDATE, 및 (4) DELETE 중 적어도 하나가 포함되어 있을 수 있다.
예를 들어, {SELECT}는 상술한 바와 같은 [예시 1]의 형식으로 SQL 쿼리에서 사용될 수 있으며, 이 때 {SELECT}가 필수적으로 갖추어야 하는 구성요소인 제2 필수 인자는 테이블에서 선택되는 적어도 하나의 필드명일 수 있는데, 위 [예시 1]과 같은 경우에는 모든 필드명을 지정하는 {*}(asterisk)가 그에 해당될 수 있다. 즉, {SELECT}는 적어도 하나의 필드명을 제2 필수 인자로서 필수적으로 갖추어야 SQL 쿼리에서 정상적으로 실행될 수 있으며, 이와 같은 정보를 서버(100)가 사전에 획득할 수 있다.
{INSERT}, {UPDATE}, 및 {DELETE}의 경우에도 제2 필수 인자에 대한 내용은 {SELECT}와 유사하므로, 자세한 설명은 생략하도록 하겠다.
그리고, 발명의 다른 일 예로서, 클라이언트(300)에 입력되어 획득되는 특정 입력 필드 데이터는, 그에 대응되는 제1 특정 파라미터와 함께 패킷 또는 로그의 특정 부분에 포함되어 있을 수 있고, 서버(100)는, SQL 필터 모듈(130)로 하여금, 제1 특정 파라미터를 참조하여 상기 패킷 또는 상기 로그에서 제1 특정 파라미터가 존재하는 특정 부분을 확인하고, 그에 대응되어 함께 포함되어 있는 특정 입력 필드 데이터를 획득하도록 할 수 있다.
이때, 상기 클라이언트(300)와 상기 서버(100)가 패킷을 송수신하기 위하여 사용되는 소정의 프로토콜은 HTTP(Hyper Text Transfer Protocol)일 수 있고, 클라이언트(300)로부터의 요청에 대응되어 생성되는 패킷은 여러 개의 HTTP 메쏘드들(method) 중 하나일 수 있는데, 상기 HTTP 메쏘드들에는 GET 메쏘드와 POST 메쏘드가 포함될 수 있다.
상술한 바와 같은 [예시 1] 및 [표 1]과 같이, 클라이언트(300)에 제1 특정 파라미터인 {id} 파라미터에 대응되는 입력 필드(310)가 제공되고, 사용자로부터 해당 입력 필드에 {guest}가 특정 입력 필드 데이터로서 입력되어, 이를 서버(100)로 전송하도록 하는 요청이 발생하면, 클라이언트(300)는 {id} 파라미터와 {guest} 특정 입력 필드 데이터를 포함하는 패킷을 생성하여 서버(100)로 전송할 수 있는데, 이 때 사용되는 HTTP 메쏘드의 종류에 따라, {id} 파라미터 및 그에 대응되는 {guest} 특정 입력 필드 데이터의 위치가 다른 패킷이 생성될 수 있다.
도 4a는 본 발명의 일 실시예에 따른, 클라이언트의 요청에 대응되어 생성된 패킷 또는 로그가 GET 메쏘드에 해당되는 경우를 개략적으로 나타내는 도면이고, 도 4b는 본 발명의 일 실시예에 따른, 클라이언트의 요청에 대응되어 생성된 패킷 또는 로그가 POST 메쏘드에 해당되는 경우를 개략적으로 나타내는 도면이다.
도 4a 및 도 4b를 참조하면, 클라이언트(300)의 요청에 대응되어 생성되는 패킷은 요청 라인(request line)부분, 헤더(header) 부분, 및 바디(body) 부분을 포함하고 있을 수 있는데, HTTP 메쏘드 중 GET 메쏘드를 사용하는 경우, 패킷의 요청 라인에, GET 메쏘드임을 나타내는 메쏘드 필드(410-1), 및 패킷이 전송되는 URL에 대응되는 정보(420)가 포함되어 있을 수 있으며, 상기 URL에 대응되는 정보(420)에 제1 특정 파라미터 정보 및 특정 입력 데이터 정보(421)가 포함되어 있을 수 있다. 또한, HTTP 메쏘드 중 POST 메쏘드를 사용하는 경우, 생성된 패킷의 요청 라인에는 POST 메쏘드임을 나타내는 메쏘드 필드(410-2)가 포함되고, 바디 부분(430)에 제1 특정 파라미터 정보 및 특정 입력 데이터 정보(431)가 포함되어 있을 수 있다.
이와 같을 때, 서버(100)는, SQL 필터 모듈(130)로 하여금, 상기 패킷 또는 상기 로그의 요청 라인(request line)에 포함되어 있는 메쏘드 필드를 참조하여 HTTP 메쏘드의 종류를 판단하도록 하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우에는, 상기 특정 부분을 상기 패킷 또는 상기 로그의 요청 라인으로 판단하도록 하고, 해당 요청 라인에서 제1 특정 파라미터를 확인하여 그에 대응되는 특정 입력 필드 데이터를 추출하도록 할 수 있고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우에는, 상기 특정 부분을 상기 패킷 또는 상기 로그의 바디(body) 부분으로 판단하도록 하고, 해당 바디 부분에서 제1 특정 파라미터를 확인하여 그에 대응되는 특정 입력 필드 데이터를 추출하도록 할 수 있다.
이 때, 발명의 일 예로서, SQL 필터 모듈(130)은, (i) URL(Uniform Resource Locator) 콜렉터(Collector) 서브모듈(131), 및 (ii) 파라미터 파서(Parser) 서브모듈(132)을 포함하고 있을 수 있고, 서버(100)는, SQL 필터 모듈(130)로 하여금, URL 콜렉터 서브모듈(131)을 사용하여, 상기 패킷 또는 상기 로그가 전송되는 URL에 대한 정보를 획득할 수 있다. 이때, 해당 URL은, 상기 패킷 또는 상기 로그를 서버(100)로 전송하기 위하여 클라이언트(300)에 입력되는 요청으로서, 'http://1.2.3.4/board.html'과 같은 형태일 수 있다. 그리고, 서버(100)는, 파라미터 파서 서브모듈(132)을 사용하여, (i) 상기 패킷 또는 상기 로그의 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 요청 라인 부분에 포함되어 있는 상기 URL에 대응되는 정보(420)로부터 제1 특정 파라미터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 바디(body) 부분(430)으로부터 제1 특정 파라미터를 추출하도록 함으로써, 추출된 제1 특정 파라미터에 대응되는 특정 입력 필드 데이터를 추출하도록 할 수 있다.
또한, 발명의 다른 일 예로서, 제1 특정 입력 필드 데이터의 문법 검사를 수행하기 위한 소정의 알고리즘은 트리 구조의 AST(Abstract Syntax Tree)를 생성하여, 이를 바탕으로 문법의 정오를 판단하는 것일 수 있다.
도 5a는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버가, 입력 필드 데이터의 문법 검사를 위해 AST를 생성하는 경우에, 입력 필드 데이터의 문법이 맞아 공격으로 탐지되는 경우의 AST를 개략적으로 나타내는 도면이고, 도 5b는 본 발명의 일 실시예에 따른, SQL이 사용되는 환경에서 공격을 탐지하기 위한 서버가, 입력 필드 데이터의 문법 검사를 위해 AST를 생성하는 경우에, 입력 필드 데이터의 문법이 틀려 공격이 아닌 것으로 판단되는 경우의 AST를 개략적으로 나타내는 도면이다.
도 5a 및 도 5b를 참조하면, SQL 필터 모듈(130)은, AST를 생성하기 위한 AST 생성기 서브모듈(132)를 포함하고, 서버(100)는, (i) SQL 필터 모듈(130)로 하여금, AST 생성기 서브모듈(132)을 사용하여 특정 입력 필드 데이터에 대응되는 특정 AST를 생성하도록 하고, (ii) 생성된 특정 AST를 참조하여 특정 입력 필드 데이터에 대한 문법 검사를 수행하도록 할 수 있다.
이때, 발명의 일 예로서, 상기 특정 AST는, 특정 입력 필드 데이터가 제1 특정 파라미터와 서로 대응된다는 의미를 가지는 조건연산문을 하나의 노드로서 포함할 수 있으며, 상기 조건연산문은, (i) 특정 입력 필드 데이터를 제1 구성요소로 하고, (ii) 제1 특정 파라미터를 제2 구성요소로 할 수 있다. 즉, 도 5a 및 도 5b에 도시된 바와 같이, 특정 입력 필드 데이터에 대응되어 생성되는 AST는 제1 특정 파라미터인 {id} 파라미터(621,711)와, 특정 입력 파라미터의 적어도 일부(622,712) 각각을 하위노드로 가지는 조건연산문(=)을 하나의 노드(620,710)로 포함할 수 있다.
또한, 서버(100)는, 상기 제1 구성요소에 대응되는 하위노드가, 상기 조건연산문에 대응되는 노드에 대하여 2 이상의 깊이를 가지도록 생성되거나 생성되어야 하는 경우, 특정 입력 필드 데이터의 문법이 틀린 것으로 판단할 수 있다.
구체적으로, 도 5a에는, 제1 특정 파라미터인 {id}에 대응되는 특정 입력 필드 데이터가 {hack' UNION SELECT 1,2, #} 인 경우에 생성되는 AST가 도시되어 있다.
이 때, 아래와 같은 SQL 쿼리가 일 예시로서 실행될 수 있다.
[예시 3]
SELECT * FROM users where id='hack' UNION SELECT 1,2, #'
이때, SQL 쿼리에서 주석 처리되는 부분을 의미하는 주석문자인 {#}에 의하여 그 뒷부분이 주석으로 처리될 수 있고, 해당 주석문자는 AST 생성에서 제외될 수 있다. 또한, 이와 같은 주석 처리는, SQL의 종류 및 발명의 실시 조건에 따라 다른 주석문자가 사용되어 이루어질 수도 있는데, {--}, {/* */} 등이 사용될 수 있다. 특히, 특정 범위를 주석 처리하기 위해서 {/*}문자와 {*/}문자가 주석문자로서 사용될 수 있는데, 이는 아래에서 예시로서 다시 설명할 것이다.
이 때, 도 5a에 도시된 바와 같이, 특정 입력 필드 데이터에 대응되어 생성된 AST 트리는, 특정 입력 필드 데이터의 {UNION}을 상위 노드(610)로 하여, 그에 대응되는 {SELECT}를 하나의 하위 노드(630)으로 하며, 제1 특정 파라미터에 대응되는 조건연산문(=)을 또 하나의 하위 노드(620)으로 하여 완성된 트리 형태로 생성되기 때문에, 서버(100)는 이를 참조하여 {hack' UNION SELECT 1,2, #} 특정 입력 필드 데이터의 문법이 맞는 것으로 판단하여, 이를 공격 목적이 있는 것으로 보아 위 [예시 3]과 같은 SQL 쿼리를 공격으로 탐지할 수 있다.
이와는 달리, 도 5b에는, 제1 특정 파라미터인 {id}에 대응되는 특정 입력 필드 데이터가 {UNION SELECT} 인 경우에 생성되는 AST가 도시되어 있다.
이 때, SQL 쿼리가 다음과 같이 생성될 수 있다.
[예시 4]
SELECT * FROM users where id='UNION SELECT'
이와 같은 경우, 생성되는 AST 트리는 제1 구성요소에 해당되는 하위노드만이 2의 깊이를 가질 뿐 아니라, {SELECT}는 필수 인자를 필요로 함에도 해당 필수 인자가 없는 미완성된 형태로 생성되기 때문에, 서버(100)는 이를 참조하여 {UNION SELECT} 특정 입력 필드 데이터의 문법이 틀린 것으로 판단하여, 이를 공격 목적이 아닌 것으로 보고 위 [예시 4]와 같은 SQL 쿼리를 공격이 아닌 것으로 판단할 수 있다.
그리고, 발명의 다른 일 예로서, 서버(100)는, 특정 입력 필드 데이터에, SQL에서 문자열임을 표시하는 특수문자인 싱글쿼터(single quote, ') 또는 더블쿼터(double quote, ")가 포함되어 있고, 상기 싱글쿼터 또는 상기 더블쿼터 다음에 상기 SQL에서 주석임을 표시하는 주석문자가 함께 포함되어 있는 경우, 특정 입력 필드 데이터에서 해당 주석문자 및 해당 주석문자에 의하여 주석으로 처리되는 부분을 제외하고 특정 입력 필드 데이터에 대한 문법 검사를 수행할 수 있으며, 그 결과 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되는 경우에는, 특정 입력 필드 데이터를 추가적인 검사가 필요한 대상으로 판단하여 별도의 추가 검사 대상으로 분류할 수 있다.
예를 들어, 다음과 같은 SQL 쿼리가 실행될 수 있다.
[예시 5]
SELECT * FROM users where id='UNION SELET'/*' and pw='*/ or id='guest'
제1 특정 파라미터인 {id}에 대응되는 입력 필드에 {UNION SELECT '/*}가 입력되고, 제2 특정 파라미터인 {pw}에 대응되는 입력 필드에 {*/ or id='guest1} 이 입력됨으로써, {pw} 파라미터가 주석 처리되어 무시된 상태로 위 SQL 쿼리가 실행될 수 있다. 따라서, 이와 같은 경우 서버(100)는 우선 특정 입력 필드 데이터인 {UNION SELECT'/*}에서 주석문자 {/*}를 제외하고 {UNION SELECT'}에 대해서만 문법 검사를 수행하되, 문법이 틀렸음에도 이를 공격의 목적이 아닌 것으로 바로 판단하지 않고, 특정 입력 필드 데이터에 주석문자 {/*}가 포함되어 있기 때문에 이를 추가 검사 대상으로 분류할 수 있다.
위와 같이 특정 입력 필드 데이터가 추가 검사 대상으로 분류된 경우 발명의 일 예로서, 서버(100)는, 해당 특정 입력 필드 데이터에 대응되는 SQL 쿼리에서 주석문자에 의해 영향을 받는 주석 부분을 추가로 확인하여, 해당 주석 부분에 상기 패킷 또는 상기 로그에 포함된 전체 파라미터 중 적어도 하나의 제2 특정 파라미터가 포함되어 있는 경우, 해당 특정 입력 필드 데이터가 상기 제2 특정 파라미터를 무시하도록 하기 위한 목적이 있는 것으로 판단하여, 해당 특정 입력 필드 데이터를 공격을 위하여 입력된 데이터로 판단함으로써 그에 대응되는 SQL 쿼리를 서버(100)에 대한 공격으로 탐지할 수 있다.
즉, 위 [예시 5]를 다시 참조하면, 해당 SQL 쿼리에서 주석 처리되는 부분 중에 {pw} 파라미터가 포함되어 있으므로, 서버(100)는 특정 입력 필드 데이터를 제2 특정 파라미터인 {pw} 파라미터를 무시하도록 하기 위한 목적이 있는 것으로 판단할 수 있으며, 그에 따라 해당 SQL 쿼리를 서버(100)에 대한 공격으로 탐지할 수 있다.
또한, 발명의 다른 일 예로서, 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단하여 상기 공격으로 탐지하였으나 오탐인 경우, 서버(100)는, (i) 해당 특정 입력 필드 데이터를 포함하는 오탐 정보를 별도의 데이터베이스에 저장하여 관리할 수 있고, 그 이후, 제1 특정 파라미터에 대응되는 입력 필드(310)에, 상기 특정 입력 필드 데이터와 동일한 추후 입력 필드 데이터가 클라이언트(300)에 다시 입력되면, 서버(100)는, 상기 데이터베이스를 참조하여, 추후 입력 필드 데이터에 대하여 문법 검사를 생략하고 해당 추후 입력 필드 데이터를 공격을 위하여 입력된 데이터가 아닌 것으로 판단하거나, 별도의 추가 검사 대상으로 분류하여 오탐을 관리할 수 있다.
또한, 이상 설명된 본 발명에 따른 실시예들은 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서 본 발명이 구체적인 구성요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나, 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명이 상기 실시예들에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형을 꾀할 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등하게 또는 등가적으로 변형된 모든 것들은 본 발명의 사상의 범주에 속한다고 할 것이다.
100 : 서버 110 : 메모리
120 : 프로세서 130 : SQL 필터 모듈
131 : URL 콜렉터 서브모듈 132 : 파라미터 파서 서브모듈
133 : AST 생성기 서브모듈 200 : 데이터베이스
300 : 클라이언트 400-1 : GET 메쏘드의 패킷 또는 로그
400-2 : POST 메쏘드의 패킷 또는 로그
410-1, 410-2 : 메쏘드 필드 420 : URL 대응 정보
421 : GET 메쏘드의 패킷 또는 로그에 포함된 제1 특정 파라미터 및 특정 입력 필드 데이터
430 : 바디 부분
431 : POST 메쏘드의 패킷 또는 로그에 포함된 제1 특정 파라미터 및 특정 입력 필드 데이터

Claims (20)

  1. 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법으로서,
    (a) 서버가, 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 단계;
    (b) 상기 서버가, 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 단계;
    (c) 상기 서버가, 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 단계; 및
    (d) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 것을 특징으로 하되,
    상기 (a) 단계 이전에,
    (a0) 상기 서버가, (i) 상기 SQL에서 사용되는 복수개의 함수들 또는 복수개의 연산자들 각각에 대하여, 상기 복수개의 함수들 또는 상기 복수개의 연산자들 각각에 필요한 필수 인자에 대한 정보인 제1 필수 인자 정보를 획득하는 프로세스, 및 (ii) 상기 SQL에서 사용되는 복수개의 DML(Data Manipulation Language)문 각각 - 상기 DML은, (1) SELECT문, (2) INSERT문, (3) UPDATE문, 및 (4) DELETE문 중 적어도 하나를 포함함 - 에 필요한 필수 인자에 대한 정보인 제2 필수 인자 정보 중 적어도 일부를 획득하는 프로세스를 수행하는 단계;
    를 추가로 포함하고,
    상기 (c) 단계에서,
    상기 서버는, (i) 상기 복수개의 함수들 중 특정 함수가 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제1 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하고, (ii) 상기 복수개의 DML문 중 특정 DML문이 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제2 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하는 방법.
  2. 삭제
  3. 삭제
  4. 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법으로서,
    (a) 서버가, 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 단계;
    (b) 상기 서버가, 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 단계;
    (c) 상기 서버가, 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 단계; 및
    (d) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 것을 특징으로 하되,
    상기 (c) 단계에서,
    상기 소정의 알고리즘은, 트리 구조의 AST(Abstract Syntax Tree)를 생성하여, 이를 바탕으로 문법의 정오를 판단하는 것임을 특징으로 하고,
    상기 SQL 필터 모듈은, 상기 AST를 생성하기 위한 AST 생성기 서브모듈을 포함하는 것을 특징으로 하며,
    상기 서버가, (i) 상기 SQL 필터 모듈로 하여금, 상기 AST 생성기 서브모듈을 사용하여 상기 특정 입력 필드 데이터에 대응되는 특정 AST를 생성하도록 하고, (ii) 상기 생성된 특정 AST를 참조하여 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하며,
    상기 특정 AST는, 상기 특정 입력 필드 데이터가 상기 제1 특정 파라미터와 서로 대응된다는 의미를 가지는 조건연산문을 하나의 노드로서 포함하는 것을 특징으로 하고,
    상기 조건연산문은, (i) 상기 특정 입력 필드 데이터를 제1 구성요소로 하고, (ii) 상기 제1 특정 파라미터를 제2 구성요소로 하는 것을 특징으로 하며,
    상기 (d) 단계에서,
    상기 제1 구성요소에 대응되는 하위노드가, 상기 조건연산문에 대응되는 상기 노드에 대하여 2 이상의 깊이를 가지도록 생성되거나 생성되어야 하는 경우에는, 상기 서버가, 상기 특정 입력 필드 데이터의 상기 문법이 틀린 것으로 판단하는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    상기 특정 입력 필드 데이터는, 그에 대응되는 상기 제1 특정 파라미터와 함께 상기 패킷 또는 상기 로그의 특정 부분에 포함되어 있는 것을 특징으로 하고,
    상기 (b) 단계에서,
    상기 서버가, 상기 SQL 필터 모듈로 하여금, 상기 제1 특정 파라미터를 참조하여 상기 특정 입력 필드 데이터를 획득하도록 하는 것을 특징으로 하는 방법.
  6. 제5항에 있어서,
    상기 (a) 단계에서,
    상기 클라이언트의 상기 요청에 대응되어 생성되는 상기 패킷 또는 상기 로그는, HTTP(Hyper Text Transfer Protocol)에 기반하여 생성되는 것을 특징으로 하고,
    상기 (b) 단계에서,
    상기 서버는, 상기 SQL 필터 모듈로 하여금, 상기 패킷 또는 상기 로그에 대한 메쏘드 필드 - 상기 메쏘드 필드는, 상기 패킷 또는 상기 로그의 요청 라인(request line)에 포함되어 있음 - 를 참조하여 HTTP 메쏘드의 종류를 판단하도록 하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 상기 요청 라인으로 판단하도록 하고, 상기 요청 라인에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 바디(body) 부분으로 판단하도록 하고, 상기 바디 부분에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 방법.
  7. 제6항에 있어서,
    상기 SQL 필터 모듈은, (i) URL(Uniform Resource Locator) 콜렉터(Collector) 서브모듈, 및 (ii) 파라미터 파서(Parser) 서브모듈을 포함하는 것을 특징으로 하고,
    상기 (b) 단계에서,
    상기 서버는, 상기 SQL 필터 모듈로 하여금, 상기 URL 콜렉터 서브모듈을 사용하여, 상기 패킷 또는 상기 로그가 전송되는 URL에 대한 정보를 획득하고, 상기 파라미터 파서 서브모듈을 사용하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 요청 라인 부분에 포함된 상기 URL에 대응되는 정보로부터 상기 제1 특정 파라미터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 바디(body) 부분으로부터 상기 제1 특정 파라미터를 추출하도록 함으로써, 상기 제1 특정 파라미터에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 방법.
  8. 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법으로서,
    (a) 서버가, 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 단계;
    (b) 상기 서버가, 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 단계;
    (c) 상기 서버가, 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 단계; 및
    (d) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 것을 특징으로 하되,
    상기 특정 입력 필드 데이터에, 상기 SQL에서 문자열임을 표시하는 특수문자인 싱글쿼터(single quote) 또는 더블쿼터(double quote)가 포함되어 있고, 상기 싱글쿼터 또는 상기 더블쿼터 다음에 상기 SQL에서 주석임을 표시하는 주석문자가 함께 포함되어 있는 경우, 상기 서버가, 상기 특정 입력 필드 데이터에서 상기 주석문자 및 상기 주석문자에 의하여 주석으로 처리되는 부분을 제외하고 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하되, 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되는 경우에는, 상기 특정 입력 필드 데이터를 추가적인 검사가 필요한 대상으로 판단하여 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 방법.
  9. 제8항에 있어서,
    상기 서버는, 상기 특정 입력 필드 데이터가 상기 추가 검사 대상으로 분류된 경우, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리에서 상기 주석문자에 의해 영향을 받는 주석 처리 부분을 추가로 확인하여, 상기 주석 처리 부분에 상기 전체 파라미터 중 적어도 하나의 제2 특정 파라미터가 포함되어 있는 경우에는, 상기 특정 입력 필드 데이터가 상기 제2 특정 파라미터를 무시하도록 하기 위한 목적이 있는 것으로 판단하여, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하는 것을 특징으로 하는 방법.
  10. 제1항에 있어서,
    상기 (d) 단계 이후에,
    (e) 상기 서버가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단하여 상기 공격으로 탐지하였으나 오탐인 경우, (i) 상기 특정 입력 필드 데이터를 포함하는 오탐 정보를 별도의 데이터베이스에 저장하여 관리하는 프로세스, 및 (ii) 상기 제1 특정 파라미터에 대응되는 상기 입력 필드에, 상기 특정 입력 필드 데이터와 동일한 추후 입력 필드 데이터가 다시 입력되면, 상기 데이터베이스를 참조하여, 상기 추후 입력 필드 데이터에 대하여 상기 문법 검사를 생략하고 상기 추후 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단하거나, 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 방법.
  11. 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 서버로서,
    인스트럭션들을 저장하는 적어도 하나의 메모리; 및
    상기 인스트럭션들을 실행하기 위해 구성된 적어도 하나의 프로세서; 를 포함하고,
    상기 프로세서가,
    (I) 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 프로세스, (II) 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 프로세스, (III) 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 프로세스; 및 (IV) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 프로세스를 수행하는 것을 특징으로 하되,
    상기 (I) 프로세스 이전에,
    (I-0) 상기 프로세서가, (i) 상기 SQL에서 사용되는 복수개의 함수들 또는 복수개의 연산자들 각각에 대하여, 상기 복수개의 함수들 또는 상기 복수개의 연산자들 각각에 필요한 필수 인자에 대한 정보인 제1 필수 인자 정보를 획득하는 서브 프로세스, 및 (ii) 상기 SQL에서 사용되는 복수개의 DML(Data Manipulation Language)문 각각 - 상기 DML은, (1) SELECT문, (2) INSERT문, (3) UPDATE문, 및 (4) DELETE문 중 적어도 하나를 포함함 - 에 필요한 필수 인자에 대한 정보인 제2 필수 인자 정보 중 적어도 일부를 획득하는 서브 프로세스를 수행하는 프로세스를 추가로 수행하고,
    상기 (III) 프로세스에서, 상기 프로세서는, (i) 상기 복수개의 함수들 중 특정 함수가 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제1 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하고, (ii) 상기 복수개의 DML문 중 특정 DML문이 상기 특정 입력 필드 데이터에 포함되어 있는 경우, 상기 제2 필수 인자에 대한 정보를 참조하여, 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하는 서버.
  12. 삭제
  13. 삭제
  14. 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 서버로서,
    인스트럭션들을 저장하는 적어도 하나의 메모리; 및
    상기 인스트럭션들을 실행하기 위해 구성된 적어도 하나의 프로세서; 를 포함하고,
    상기 프로세서가,
    (I) 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 프로세스, (II) 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 프로세스, (III) 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 프로세스; 및 (IV) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 프로세스를 수행하는 것을 특징으로 하되,
    상기 (III) 프로세스에서,
    상기 소정의 알고리즘은, 트리 구조의 AST(Abstract Syntax Tree)를 생성하여, 이를 바탕으로 문법의 정오를 판단하는 것임을 특징으로 하고,
    상기 SQL 필터 모듈은, 상기 AST를 생성하기 위한 AST 생성기 서브모듈을 포함하는 것을 특징으로 하며,
    상기 프로세서가, (i) 상기 SQL 필터 모듈로 하여금, 상기 AST 생성기 서브모듈을 사용하여 상기 특정 입력 필드 데이터에 대응되는 특정 AST를 생성하도록 하고, (ii) 상기 생성된 특정 AST를 참조하여 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하는 것을 특징으로 하며,
    상기 특정 AST는, 상기 특정 입력 필드 데이터가 상기 제1 특정 파라미터와 서로 대응된다는 의미를 가지는 조건연산문을 하나의 노드로서 포함하는 것을 특징으로 하고,
    상기 조건연산문은, (i) 상기 특정 입력 필드 데이터를 제1 구성요소로 하고, (ii) 상기 제1 특정 파라미터를 제2 구성요소로 하는 것을 특징으로 하며,
    상기 (IV) 프로세스에서,
    상기 제1 구성요소에 대응되는 하위노드가, 상기 조건연산문에 대응되는 상기 노드에 대하여 2 이상의 깊이를 가지도록 생성되거나 생성되어야 하는 경우에는, 상기 프로세서가, 상기 특정 입력 필드 데이터의 상기 문법이 틀린 것으로 판단하는 것을 특징으로 하는 서버.
  15. 제11항에 있어서,
    상기 특정 입력 필드 데이터는, 그에 대응되는 상기 제1 특정 파라미터와 함께 상기 패킷 또는 상기 로그의 특정 부분에 포함되어 있는 것을 특징으로 하고,
    상기 (II) 프로세스에서,
    상기 프로세서가, 상기 SQL 필터 모듈로 하여금, 상기 제1 특정 파라미터를 참조하여 상기 특정 입력 필드 데이터를 획득하도록 하는 것을 특징으로 하는 서버.
  16. 제15항에 있어서,
    상기 (I) 프로세스에서,
    상기 클라이언트의 상기 요청에 대응되어 생성되는 상기 패킷 또는 상기 로그는, HTTP(Hyper Text Transfer Protocol)에 기반하여 생성되는 것을 특징으로 하고,
    상기 (II) 프로세스에서,
    상기 프로세서는, 상기 SQL 필터 모듈로 하여금, 상기 패킷 또는 상기 로그에 대한 메쏘드 필드 - 상기 메쏘드 필드는, 상기 패킷 또는 상기 로그의 요청 라인(request line)에 포함되어 있음 - 를 참조하여 HTTP 메쏘드의 종류를 판단하도록 하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 상기 요청 라인으로 판단하도록 하고, 상기 요청 라인에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 특정 부분을 상기 패킷 또는 상기 로그의 바디(body) 부분으로 판단하도록 하고, 상기 바디 부분에서 상기 제1 특정 파라미터를 확인하여 그에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 서버.
  17. 제16항에 있어서,
    상기 SQL 필터 모듈은, (i) URL(Uniform Resource Locator) 콜렉터(Collector) 서브모듈, 및 (ii) 파라미터 파서(Parser) 서브모듈을 포함하는 것을 특징으로 하고,
    상기 (II) 프로세스에서,
    상기 프로세서는, 상기 SQL 필터 모듈로 하여금, 상기 URL 콜렉터 서브모듈을 사용하여, 상기 패킷 또는 상기 로그가 전송되는 URL에 대한 정보를 획득하고, 상기 파라미터 파서 서브모듈을 사용하여, (i) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 GET 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 요청 라인 부분에 포함된 상기 URL에 대응되는 정보로부터 상기 제1 특정 파라미터를 추출하도록 하고, (ii) 상기 패킷 또는 상기 로그의 상기 HTTP 메쏘드가 POST 메쏘드에 해당되는 경우, 상기 패킷 또는 상기 로그의 상기 바디(body) 부분으로부터 상기 제1 특정 파라미터를 추출하도록 함으로써, 상기 제1 특정 파라미터에 대응되는 상기 특정 입력 필드 데이터를 추출하도록 하는 것을 특징으로 하는 서버.
  18. 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 서버로서,
    인스트럭션들을 저장하는 적어도 하나의 메모리; 및
    상기 인스트럭션들을 실행하기 위해 구성된 적어도 하나의 프로세서; 를 포함하고,
    상기 프로세서가,
    (I) 적어도 하나의 클라이언트로부터 발생한 요청에 대응되어 생성된 패킷 또는 로그 파일을 획득하는 프로세스, (II) 소정의 SQL 필터 모듈로 하여금, 상기 획득된 패킷 또는 상기 획득된 로그에 포함된 전체 파라미터 중 제1 특정 파라미터에 대응되는 입력 필드에 대하여 상기 클라이언트를 통하여 입력된 데이터인 특정 입력 필드 데이터를 상기 획득된 패킷 또는 상기 획득된 로그 파일로부터 추출하도록 하는 프로세스, (III) 소정의 알고리즘을 바탕으로 하여, 상기 특정 입력 필드 데이터에 대하여 상기 SQL의 문법 규칙에 기반한 문법 검사를 수행하는 프로세스; 및 (IV) 상기 문법 검사를 수행한 결과, (i) 상기 특정 입력 필드 데이터의 문법이 맞는 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하고, (ii) 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되면, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단함으로써, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리가 상기 서버에 대한 공격이 아닌 것으로 판단하는 프로세스를 수행하는 것을 특징으로 하되,
    상기 특정 입력 필드 데이터에, 상기 SQL에서 문자열임을 표시하는 특수문자인 싱글쿼터(single quote) 또는 더블쿼터(double quote)가 포함되어 있고, 상기 싱글쿼터 또는 상기 더블쿼터 다음에 상기 SQL에서 주석임을 표시하는 주석문자가 함께 포함되어 있는 경우, 상기 프로세서가, 상기 특정 입력 필드 데이터에서 상기 주석문자, 및 상기 주석문자에 의하여 주석으로 처리되는 부분을 제외하고 상기 특정 입력 필드 데이터에 대한 상기 문법 검사를 수행하되, 상기 특정 입력 필드 데이터의 문법이 틀린 것으로 판단되는 경우에는, 상기 특정 입력 필드 데이터를 추가적인 검사가 필요한 대상으로 판단하여 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 서버.
  19. 제18항에 있어서,
    상기 프로세서는, 상기 특정 입력 필드 데이터가 상기 추가 검사 대상으로 분류된 경우, 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리에서 상기 주석문자에 의해 영향을 받는 주석 처리 부분을 추가로 확인하여, 상기 주석 처리 부분에 상기 전체 파라미터 중 적어도 하나의 제2 특정 파라미터가 포함되어 있는 경우에는, 상기 특정 입력 필드 데이터가 상기 제2 특정 파라미터를 무시하도록 하기 위한 목적이 있는 것으로 판단하여, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단함으로써 상기 특정 입력 필드 데이터에 대응되는 상기 SQL 쿼리를 상기 서버에 대한 공격으로 탐지하는 것을 특징으로 하는 서버.
  20. 제11항에 있어서,
    상기 (IV) 프로세스 이후에,
    (V) 상기 프로세서가, 상기 특정 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터로 판단하여 상기 공격으로 탐지하였으나 오탐인 경우, (i) 상기 특정 입력 필드 데이터를 포함하는 오탐 정보를 별도의 데이터베이스에 저장하여 관리하는 프로세스, 및 (ii) 상기 제1 특정 파라미터에 대응되는 상기 입력 필드에, 상기 특정 입력 필드 데이터와 동일한 추후 입력 필드 데이터가 다시 입력되면, 상기 데이터베이스를 참조하여, 상기 추후 입력 필드 데이터에 대하여 상기 문법 검사를 생략하고 상기 추후 입력 필드 데이터를 상기 공격을 위하여 입력된 데이터가 아닌 것으로 판단하거나, 별도의 추가 검사 대상으로 분류하는 것을 특징으로 하는 서버.
KR1020200157084A 2020-11-20 2020-11-20 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버 KR102258956B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200157084A KR102258956B1 (ko) 2020-11-20 2020-11-20 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200157084A KR102258956B1 (ko) 2020-11-20 2020-11-20 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버

Publications (1)

Publication Number Publication Date
KR102258956B1 true KR102258956B1 (ko) 2021-06-02

Family

ID=76372715

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200157084A KR102258956B1 (ko) 2020-11-20 2020-11-20 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버

Country Status (1)

Country Link
KR (1) KR102258956B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090058271A (ko) * 2007-12-04 2009-06-09 (주)모니터랩 웹-데이터베이스 공격 탐지 로그 데이터 상관관계 추적에의한 통합 보안 시스템 및 방법
KR100989347B1 (ko) * 2009-08-21 2010-10-25 펜타시큐리티시스템 주식회사 보안규칙 기반의 웹공격 탐지 방법
KR101005927B1 (ko) * 2010-07-05 2011-01-07 펜타시큐리티시스템 주식회사 웹 어플리케이션 공격 탐지 방법
JP2012043344A (ja) * 2010-08-23 2012-03-01 Canon Inc 情報処理装置、情報処理方法、及びプログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090058271A (ko) * 2007-12-04 2009-06-09 (주)모니터랩 웹-데이터베이스 공격 탐지 로그 데이터 상관관계 추적에의한 통합 보안 시스템 및 방법
KR100989347B1 (ko) * 2009-08-21 2010-10-25 펜타시큐리티시스템 주식회사 보안규칙 기반의 웹공격 탐지 방법
KR101005927B1 (ko) * 2010-07-05 2011-01-07 펜타시큐리티시스템 주식회사 웹 어플리케이션 공격 탐지 방법
JP2012043344A (ja) * 2010-08-23 2012-03-01 Canon Inc 情報処理装置、情報処理方法、及びプログラム

Similar Documents

Publication Publication Date Title
Aliero et al. An algorithm for detecting SQL injection vulnerability using black-box testing
US10628129B2 (en) Intellectual automated security, performance and code generation framework
CN112131882A (zh) 一种多源异构网络安全知识图谱构建方法及装置
CN103744802B (zh) Sql注入攻击的识别方法及装置
US11562090B2 (en) Enforcing sensitive data protection in security systems
US9864855B2 (en) Verification data processing method and device and storage medium
RU2722693C1 (ru) Способ и система выявления инфраструктуры вредоносной программы или киберзлоумышленника
Yeole et al. Analysis of different technique for detection of SQL injection
CN109768992A (zh) 网页恶意扫描处理方法及装置、终端设备、可读存储介质
CN112199677A (zh) 一种数据处理方法和装置
CN113609261B (zh) 基于网络信息安全的知识图谱的漏洞信息挖掘方法和装置
JP2020126641A (ja) Apiマッシュアップ探査及びリコメンデーション
CN113961930A (zh) Sql注入漏洞检测方法、装置及电子设备
CN110020161B (zh) 数据处理方法、日志处理方法和终端
ÐURIĆ WAPTT-Web application penetration testing tool
US9600644B2 (en) Method, a computer program and apparatus for analyzing symbols in a computer
CN109657462B (zh) 数据检测方法、系统、电子设备和存储介质
Marquardt et al. Déjà Vu? Client-Side Fingerprinting and Version Detection of Web Application Software
KR102258956B1 (ko) 관계형 데이터베이스를 관리하기 위한 언어인 SQL(Structured Query Language)이 사용되는 환경에서 공격을 탐지하기 위한 방법 및 이를 사용한 서버
WO2016173327A1 (zh) 用于检测网站攻击的方法和设备
Zhang et al. Research on SQL injection vulnerabilities and its detection methods
CN115599345A (zh) 一种基于知识图谱的应用安全需求分析推荐方法
Ablahd et al. Using flask for SQLIA detection and protection
KR102258965B1 (ko) HTTP 프로토콜의 메쏘드 필드 정보와 content-type 필드 정보를 이용해 웹 공격 유형 범위를 분류하는 방법 및 장치
US10235450B2 (en) Semantic layer for processing machine data

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant