KR100670209B1 - 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법 - Google Patents

파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법 Download PDF

Info

Publication number
KR100670209B1
KR100670209B1 KR1020040110944A KR20040110944A KR100670209B1 KR 100670209 B1 KR100670209 B1 KR 100670209B1 KR 1020040110944 A KR1020040110944 A KR 1020040110944A KR 20040110944 A KR20040110944 A KR 20040110944A KR 100670209 B1 KR100670209 B1 KR 100670209B1
Authority
KR
South Korea
Prior art keywords
function
source code
parameter
list
vulnerability
Prior art date
Application number
KR1020040110944A
Other languages
English (en)
Other versions
KR20060072353A (ko
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 KR1020040110944A priority Critical patent/KR100670209B1/ko
Publication of KR20060072353A publication Critical patent/KR20060072353A/ko
Application granted granted Critical
Publication of KR100670209B1 publication Critical patent/KR100670209B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/211Syntactic parsing, e.g. based on context-free grammar [CFG] or unification grammars
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates

Abstract

본 발명은 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법에 관한 것으로, 특히 각종 함수에 대한 목록을 사전에 정의하여 관리하는 함수특성 사전정의부(100); 소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하는 어휘 분석부(200); 웹 응용프로그램의 일반적인 구문을 인식하기 위해 함수 호출의 특성을 파악하는 구문 분석부(300); 구문에 따른 상태 변화와 함수 특성에 따른 상태 변화를 추적하는 파라미터 상태 추적부(400); 및 출력 지점에서 변수의 특정 취약점에 대한 발생 가능성을 보고하는 취약 결과 보고부(500)로 구성된 것을 특징으로 하며, 이러한 본 발명은 현재 문제가 되고 있는 주요 웹 취약점을 점검하여 보안 취약점을 제거해 준다는 뛰어난 효과가 있다.
파라미터 상태 추적, 웹 응용프로그램 취약점, 소스코드 분석 장치, 사용자 입력 검증, SQL 삽입, 명령어 삽입, 크로스 사이트 스크립팅,

Description

파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법{DEVICE OF ANALYZING WEB APPLICATION SOURCE CODE BASED ON PARAMETER STATUS TRACING AND METHOD THEREOF}
도 1은 본 발명을 설명하기 위해 입력 값 검증을 위한 문자열 필터링 개념을 나타낸 도면,
도 2는 본 발명의 일 실시예에 따른 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치의 구성을 나타낸 기능 블록도,
도 3은 본 발명의 일 실시예에 따른 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 방법을 나타낸 동작 플로우챠트,
도 4는 본 발명을 설명하기 위한 함수 특성에 따른 파라미터 상태 변화의 처리 과정을 나타낸 도면,
도 5는 본 발명을 설명하기 위한 구문 변화에 따른 파라미터 상태 변화의 처리 과정을 나타낸 도면이다.
<도면의 주요 부분에 대한 부호의 설명>
100 : 함수특성 사전정의부 200 : 어휘 분석부
300 : 구문 분석부 400 : 파라미터 상태 추적부
500 : 취약 결과 보고부 600 : 함수 리스트 데이터베이스
700 : 파라미터 리스트 데이터베이스
본 발명은 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법에 관한 것으로, 더욱 상세하게는 정보흐름 분석을 통해 사용자 입력 값의 상태를 정의하고 그 값의 상태 변화를 추적하여 출력 지점에 이르기 전까지의 입력 값에 대한 검증이 이루어졌는지의 여부를 확인해 줌으로 취약점 발생가능성을 분석하는 파라미터 상태 추적을 이용하여, 보안 취약점 중 사용자 입력 값 검증과 관련된 취약점을 탐지해주는 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법에 관한 것이다.
주지하다시피, 웹 응용프로그램은 HTTP 프로토콜(Protocol)을 이용하여 사용자나 다른 시스템에 서비스를 제공하는 클라이언트/서버(Client/Server) 응용프로그램으로 정의될 수 있다. 초기의 웹 서비스(Web Service)에서는 다수의 페이지를 서버에 고정적인 형태로 제공했지만, 동적으로 변화하는 내용을 제공하기 위해 기존의 고정적 웹 페이지에 추가적으로 "cgi, php, jsp, java, python"과 같은 프 로그램 코드를 추가하여 동적인 기능을 구현하게 되었으며, 이것이 웹 응용프로그램이다. 웹 응용프로그램은 다수의 사용자들에 대한 서비스를 제공하는 것이 보통이므로, 그 백엔드에 데이터베이스를 사용하는 것이 보통이다.
최근에는 많은 수의 언어와 다수의 프로그램들이 빠른 속도로 개발됨에 따라 많은 수의 보안 문제점들이 발생하였고, 실제로 대단히 많은 웹 서비스에서 문제점이 발견되고 있다. 웹 응용프로그램의 보안에 많은 문제점이 발생한 이유로는 크게 두 가지의 요인을 들 수 있는데, 첫째 기존의 서버 응용프로그램들에 비하여 웹 응용프로그램이 단기간에 급속하게 개발되었다는 점과, 둘째 웹 응용프로그램에서 발생한 새로운 종류의 보안 취약점을 들 수 있다.
주요 국가/공공기관의 경우 인터넷 침해사고에 대응하기 위해 침입탐지시스템 및 침입차단시스템을 설치하여 주요 서비스를 제외한 불필요한 포트를 차단하여 보안성을 강화하고 있다. 그러나, 외부 서비스를 제공해야 하는 웹의 경우에는 다수의 취약점이 발견되고 있으며, 침해사고 발생 시 내부 시스템으로의 침입 경로로 악용될 수 있으므로 웹 보안의 중요성이 강조되고 있다. 하지만, 이러한 침입의 위협에도 불구하고 웹 개발자의 보안 의식 부족과, 보안 관련 표준 미제정으로 인해 "jsp, asp" 등의 웹 스트립트 언어로 개발된 웹 응용프로그램에서 취약점이 계속적으로 다수 존재하며, 따라서 이러한 취약점의 차단이 중요한 문제가 되고 있다.
현재는 웹 환경의 발전으로 인해, 웹 서버가 제공하는 웹 응용프로그램의 취약점을 통해 주요 데이터에 접근하는 침해사고가 급증하고 있다. 이 때, 주요한 웹 응용프로그램의 취약점을 분석해 보면, 전통적인 데몬 프로그램의 취약점인 버퍼 오버플로우도 있지만, SQL 삽입(SQL Injection), 명령어 삽입(Command Injection), 크로스 사이트 스크립팅(Cross-Site Scripting, XSS) 등 새로운 종류의 취약점의 문제가 대두되고 있다. 이러한 취약점은 주로 사용자 입력 값을 제대로 검증하지 않고 사용함으로써 생기는 문제들이다.
이 때, 공격자는 웹 응용프로그램의 실행 스택에 오류를 내기 위해 버퍼 오버플로우를 사용하며, 웹 응용프로그램에 교묘한 입력을 보냄으로써 머신 대신 효율적으로 임의의 코드를 실행시키도록 할 수 있다. 이러한 버퍼 오버플로우는 발견하기가 용이하지 않고, 발견 되었을 때에도 악용하기가 쉽지 않지만, 그럼에도 불구하고, 공격자는 생산과 컴포넌트의 배열을 동요시키는 버퍼 오버플로우를 찾아낸다. 이것과 매우 유사한 취약점은 포맷 스트링(format string) 공격으로 알려졌다.
이러한 버퍼 오버플로우 결함은 사이트의 동적인 부분과 정적인 부분 모두를 수반하는 웹 서버와 응용프로그램 서버의 결과 내지는 웹 응용프로그램 자체에 나타날 수 있다. 이 때, 서버의 결과를 사용하는 버퍼 오버플로우는 널리 알려지기 쉽고 이 결과는 사용자에게 중대한 위험을 줄 수 있다.
또한, 입력값 검증 부재는 사용자가 입력한 악의적인 HTTP 요청 정보를 검증하지 못해 발생하는 취약점이다. 이 때, 웹 요청 정보가 사용되기 전에 검사되지 않는다면, URL, 쿼리 문장, HTTP 헤더, 쿠키, 폼 필드와 히든 필드(hidden field) 등에 악의적인 입력 값을 사용하여 보안 메커니즘을 우회할 수 있다. 이러한 파 라미터 변조 기법은 강제적인 브라우징, 명령어 삽입(Command Injection), SQL 삽입(SQL Injection), 쿠키 변조(cookie poisoning), 히든 필드 변조와 같은 취약점에 사용될 수 있다.
따라서, 웹 응용프로그램의 보안이 허술하다면, HTTP 요청, 파라미터, 검증 결함을 이용하여 중요한 정보가 누출될 수 있다. 그러므로, 파라미터 조작을 막기 위한 사용자 입력 값 검사가 필요한데, 클라이언트측 검사는 실행하거나 사용하기에는 좋지만, 사용자가 조작할 수 있으므로 사용하는 것이 좋지 않으며 서버 측에서 수행하는 것이 안전하다. 또한, 파라미터를 검증하기 전에 HTML, URL 인코딩 등을 통해 가장 단순한 형태로 변환되어야 하는데, 그 이유는 악의적인 입력 값이 파라미터 검사를 우회할 수 있기 때문이다. 이러한 공격은 꾸준히 증가하고 있는 추세이며, 개발자가 사용자 입력을 사용하기 전에 검증한다면 취약점은 제거될 수 있다.
한편, 크로스 사이트 스크립팅(Cross-Site scripting, XSS) 취약점은 공격자가 자바 스크립트 같은 악의적인 코드를 다른 사용자에게 보내기 위해 웹 응용프로그램을 사용할 때 일어난다. 웹 응용프로그램이 출력하는 부분에 대한 필터링이 제대로 이루어지지 않은 채 사용자로부터의 입력을 허용할 때, 악의적인 사용자는 그 입력에 악성 내용을 삽입하고, 웹 응용프로그램은 그 내용을 사용자에게 보낸다. 이 때, 사용자는 해당 서버의 서비스인 것으로 오해하여 웹 응용프로그램을 믿게 되고, 정상적으로는 허락되지 않는 일들을 행하는 악성 내용이 실행된다. 한편, 악의적인 사용자는 유니 코드 사용 등 악의적인 태그 부분을 다 양하게 인코딩하여 보내기도 하여 점검을 우회하기도 한다.
XSS 공격은 일반적으로 저장과 반향 두 카테고리로 분류된다. 저장은 데이터베이스, 사용자 게시판, 방명록 등의 목표 서버에 영구적으로 삽입된 코드가 저장되는 것이며, 반향은 삽입된 코드가 이메일 메시지나 다른 서버와 같은 다른 희생자로 가는 것을 의미한다. 사용자가 링크를 클릭하거나 폼을 수락하는 속임수에 넘어가면, 삽입된 코드는 취약한 웹 서버를 통해 사용자 브라우저에 악의적인 내용을 되돌려 보낸다. 이 때, 브라우저는 그 코드가 신뢰성 있는 서버로부터 왔기 때문에 그 코드를 실행한다.
XSS 공격의 결과는 저장인지 반향인지에 관계없이 동일하며 다른 점은 서버에 어떻게 도착하느냐의 문제이다. 대부분의 심각한 XSS 취약점은 사용자의 세션과 계정을 가로챌 수 있으며, 사용자 세션 쿠키를 노출시킬 수도 있다. 또 다른 악성 행위로는 사용자의 파일, 트로이 목마(Trojan horse) 프로그램의 설치, 다른 사이트 자동 접속 등이 있다. 이처럼, 악의적인 스크립트를 웹 응용프로그램에 보내는 방법이 다양하므로 웹 사이트가 XSS 취약점을 포함하고 있을 가능성이 높다.
한편, 삽입(Injection) 취약점은 웹 응용프로그램을 통해 서버에 악의적인 코드를 보내 SQL을 통해 데이터베이스를 호출하는 것과 같이 시스템 호출을 통한 시스템 명령어 실행을 가능하게 한다. "Perl, PHP" 등과 같은 대부분의 스크립트는 제대로 설계되지 못한 웹 응용프로그램에 삽입되고 실행될 수 있으므로, 이러한 인터프리터를 사용하는 웹 응용프로그램은 삽입(Injection) 취약점을 가지고 있다.
많은 웹 응용프로그램은 명령을 수행하기 위해 외부 프로그램을 사용한다. 센드메일(Sendmail)은 아마도 가장 자주 사용되는 외부 프로그램일 것이다. 웹 응용프로그램이 외부 요청 구간을 통해 HTTP 요청으로부터의 정보를 통과시킬 때, 주의 깊게 검사되어야 한다. 그렇지 않으면, 공격자는 특별한(메타) 문자와 잘못된 명령어 또는 명령어 변경자를 정보에 포함시킬 수 있고, 웹 응용프로그램은 이를 시스템에서 실행되도록 통과시킬 것이다.
이 때, SQL 삽입(SQL Injection)은 특히 널리 쓰이며 삽입(Injection) 취약점의 한 형태이다. SQL 삽입(SQL Injection) 취약점을 악용하기 위해서는 웹 응용프로그램이 데이터베이스를 통해 보내는 파라미터를 찾아야 한다. 파라미터의 내용을 교묘히 조작하여, 악의적인 사용자는 데이터베이스로 잘못된 질의를 보내 웹 응용프로그램을 속일 수 있다. 이 공격은 쉽게 시도가 가능하고 발견되면 악용하기도 쉬우며 데이터베이스의 내용을 파괴할 수 있으므로 주의해야 한다. 외부 호출의 사용은 매우 널리 쓰이므로 삽입(Injection) 취약점을 가진 웹 응용프로그램의 존재 가능성은 매우 높다.
소스코드의 자동검사 도구는 꾸준히 진행되어 다양한 자동화 도구가 존재한다. 그러나, 종래의 자동화 도구와 관련한 연구는 주로 버퍼 오버플로우와 같이 "C/C++"를 이용한 응용프로그램의 취약점을 탐지하는 도구가 주를 이루고 있었다. 이러한 취약점들은 주로 서비스를 제공하는 데몬 프로그램의 취약점들로, 이를 통해 서버에 접속할 수 있는 통로를 제공하는데 초점을 두고 있었다. 반면에, 웹 응용프로그램의 취약점을 전문적으로 자동 검사하는 연구는 아직 진행되지 않고 있 었으며, 다만 자동 검사 도구 중에서 "perl, PHP, java"와 같은 웹 응용프로그램 언어를 분석할 수 있는 도구들이 일부 존재하지만, 버퍼 오버플로우 등 기존 취약점 점검에 한정되어 있었다. 기존의 서버 응용프로그램에서 발생하는 취약점들은 서버 프로그램의 버그를 이용한 것이었고, 이들은 외부 입력의 내용보다는 그 크기 등의 간단히 검사 가능한 특징에 의존하는 경우가 많았다. 하지만, 웹 응용프로그램이 외부 입력의 내용을 코드의 일부로 사용하는 경우가 많아 웹 응용프로그램에서는 간단히 검사하기 어려운 사용자 입력 내용에 의존하는 취약점이 다수 발생하는 문제점이 있었다. 즉, 기존에는 상술한 바와 같이 웹 응용프로그램에 SQL 삽입(SQL Injection) 취약점, 명령어 삽입(Command Injection) 취약점, 크로스 사이트 스크립팅(Cross-Site Scripting, XSS) 취약점이 존재하였고, 이러한 웹 응용프로그램의 검증되지 않은 문자열 처리에 관한 취약점은 심각한 침해사고를 일으킬 수 있는 문제점이 있다.
따라서, 본 발명은 상기와 같은 종래의 문제점을 해결하기 위해 이루어진 것으로서, 본 발명의 목적은 사용자 입력 값 검증 부재와 관련된 취약점 탐지를 목표로 하고 있으므로, 파라미터 상태 추적을 통해 입력 값 검증과 관련된 SQL 삽입(SQL Injection) 취약점, 명령어 삽입(Command Injection) 취약점, 크로스 사이트 스크립팅(Cross-Site Scripting, XSS) 취약점을 제거하기 위한 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법을 제공하는 데 있다.
상기와 같은 목적을 달성하기 위한 본 발명 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치는, 각종 함수에 대한 목록을 사전에 정의하여 함수 리스트 데이터베이스에 저장하여 관리하는 함수특성 사전정의부; 소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하는 어휘 분석부; 웹 응용프로그램의 일반적인 구문을 인식하기 위해 함수 호출의 특성을 파악하는 구문 분석부; 구문에 따른 상태 변화와 함수 특성에 따른 상태 변화를 추적하는 파라미터 상태 추적부; 및 출력 지점에서 변수의 특정 취약점에 대한 발생 가능성을 보고하는 취약 결과 보고부로 구성된 것을 특징으로 한다.
또한, 본 발명 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 방법은, 웹 응용프로그램의 구문을 인식하기 위해 파서를 이용하여 함수 호출의 특성을 파악하는 파싱 동작을 수행하는 제 1 단계; 상기 제 1 단계에서 파싱된 변수의 선언문, 할당문 및 분기문에 대해 파마미터의 상태를 전이시키는 구문에 따른 상태 변화와 함수 특성에 따라 파라미터의 상태를 전이시키는 함수 특성에 따른 상태 변화를 추적하는 제 2 단계; 및 상기 제 2 단계의 상태변화 추적결과를 토대로 출력 지점에서 변수의 취약점 상태가 더티(dirty)인 특정 취약점에 대한 발 생 가능성을 보고하기 위해 그 결과를 출력하는 제 3 단계로 이루어진 것을 특징으로 한다.
이하, 본 발명의 일 실시예에 의한 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법에 대하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
도 2는 본 발명의 일 실시예에 따른 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치의 구성을 나타낸 기능 블록도로서, 본 발명의 일 실시예에 의한 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치는 함수특성 사전정의부(100), 어휘 분석부(200), 구문 분석부(300), 파라미터 상태 추적부(400) 및 취약 결과 보고부(500)로 구성되어 있다.
상기 함수특성 사전정의부(100)는 알려진 입력 값 검증 함수와 개발자가 작성한 필터링 함수에 대한 목록과 사용자 입력과 출력 지점을 확인하기 위한 입력 함수와 출력 함수, 및 파라미터의 상태 전이를 추적하기 위한 전이 함수에 대한 목록을 사전에 정의하여 함수 리스트 데이터베이스(600)에 저장하여 관리하는 역할을 한다.
또한, 상기 어휘 분석부(200)는 소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하여 파라미터 및 함수를 식별하고, 식별된 파라미터를 파라미터 목록으로 정의한 후 상기 파라미터 리스트 데이터베이스(700)에 저장하여 관리하는 한편, 사용자 정의 함 수의 경우 구문 분석을 위해 상기 함수 리스트 데이터베이스(600)에 저장된 함수 목록에 함수의 프로토타입 정보를 추가하는 역할을 한다.
그리고, 상기 구문 분석부(300)는 변수의 선언문, 할당문, 분기문, 함수 호출 등 웹 응용프로그램의 일반적인 구문을 인식하기 위해 파서를 이용하여 함수 호출의 특성을 파악하는 파싱 동작을 수행한다.
한편, 상기 파라미터 상태 추적부(400)는 상기 구문 분석부(300)를 통해 파싱된 변수의 선언문, 할당문 및 분기문에 대해 파마미터의 상태를 전이시키는 도 5와 같은 구문에 따른 상태 변화 추적과 함수 특성에 따라 파라미터의 상태를 전이시키는 도 4와 같은 함수 특성에 따른 상태 변화 추적 동작을 수행하는 역할을 한다.
또한, 상기 취약 결과 보고부(500)는 상기 파라미터 상태 추적부(400)의 결과를 토대로 출력 지점에서 변수의 취약점 상태가 더티(dirty)인 특정 취약점에 대한 발생 가능성을 보고하기 위해 그 결과를 출력하는 역할을 한다.
그러면, 상기와 같은 구성을 가지는 장치를 이용한 본 발명의 일 실시예에 따른 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 방법에 대해 첨부된 도면을 참조하여 설명하기로 한다.
본 발명은 입력 값 검증과 관련된 취약점들이 특정 출력 함수를 호출하는 것과 관련이 있는 점에서 착안하였다. 각 취약점이 발생하는 부분은 검증되지 않은 입력 값을 그대로 출력하는 지점으로, 특정 취약과 연관된 함수 목록을 언어별로 식별할 수 있다. 따라서 특정 취약점과 연관된 출력 함수 리스트를 작성한다면 취약점이 발생할 수 있는 지점을 확인할 수 있다.
또한, 특정 변수의 값이 필터링되지 않은 상태에서 출력될 경우에 취약점이 존재할 가능성이 생긴다. 따라서, 소스 코드를 검사하는 과정은 외부에서 입력이 들어오는 위치를 파악하고, 그 문자열이 알려진 필터링 검사 루틴을 통과하는 지의 여부를 판단하는 것이다. 그러나, 사용자가 특정 값을 입력하는 것은 실행 시간(run-time)에 이루어지므로 모든 사용자 입력 값에 대해 필터링이 제대로 수행되어 해당 취약점이 없어진 것을 정적 분석을 수행하는 동안(static-time)에 판단하기는 매우 어렵다. 따라서, 다음과 같이 필터링 함수의 적용 유무를 파악하여 해당 취약점의 제거가 이루어졌다고 판단한다. 이 때, SQL 삽입(SQL Injection) 취약점의 경우, 정상적인 웹 응용프로그램에서는 일반적으로 특정 문자열을 필터링하지 않았다면 대부분 "$ID, $PWD"와 같은 입력받은 변수 자체를 그대로 DB 질의문에 사용할 가능성이 높다. 만약 이러한 입력 변수를 검사하는 루틴이 있다면 입력 값을 필터링하는 시도일 가능성이 높다.
한편, 명령어 삽입(Command Injection)의 경우에는 특정 출력 함수 호출 시 출력 변수가 입력 변수의 검증 상태와 동일한지를 파악할 수 있다. 따라서, 입력 값 검증과 관련된 취약점들은 도 1과 같이 사용자로부터 받은 입력 값이 출력되기 전에 필터링되었는지의 여부를 검증하는 것이 중요하며, 이러한 기법은 소스코드의 제어흐름 분석을 통해 사용자 입력으로 들어온 문자열 변수의 상태 전이를 추적함으로써 수행될 수 있다.
도 3은 본 발명의 일 실시예에 따른 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 방법을 나타낸 동작플로우챠트이며, 도 3을 참조하여 본 발명에서 제시하는 방법에 대해 설명하면 다음과 같다.
먼저, 상기 함수특성 사전정의부(100)는 하기의 [표 1]과 같이, 함수의 특성 정보를 파악하기 위해 본 발명에서 탐지하고자 하는 웹 응용프로그램 취약점인 SQL 삽입(SQL Injection), 명령어 삽입(Commnad Injection), 크로스 사이트 스크립팅(Cross-Site Scripting, XSS)과 관련된 입력 함수(input_func) 및 출력 함수(output_func)를 정의한다. 문자열 처리 함수 등 파라미터의 상태를 전이시키는 함수를 전이 함수(transition_func)로 식별하고, 상태 값을 변경하는 필터링 함수(filter_func) 목록을 사전에 구성한다(S1). 이러한 사전 속성 정의를 기반으로 소스코드의 취약점 탐지의 정확성을 향상시킬 수 있다.
Figure 112004060835718-pat00001
이 때, 상기 [표 1]과 같은 함수 목록의 함수 특성 형식은 각 함수별로 동일한 파일에 함수를 입력하는 규칙으로 각 필드는 탭으로 구분되고, 하기의 [표 2]와 같이 "함수이름", "크로스 사이트 스크립팅(Cross-Site Scripting, XSS) 취약점", "SQL 삽입(SQL Injection) 취약점", "명령어 삽입(Command Injection) 취약점", "함수타입", "파라미터1", "파라미터2", "파라미터3", "파라미터4", "파라미터5", "리턴 타입" 형식으로 입력한다.
Figure 112004060835718-pat00002
그런후, 상기 어휘 분석부(200)는 소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하여 파라미터 및 함수를 식별한다. 이 때, 식별된 파라미터는 상기 파라미터 리스트 데이터베이스(700)에 저장하여 관리하고, 사용자 정의 함수는 구문 분석을 위해 상기 함수 리스트(function list) 데이터베이스(600)에 함수의 프로토타입 정보를 추가한다(S2). 이러한 과정은 파라미터의 상태를 추적하기 위해 변수와 함수를 추출해 내는 과정이므로 스캐닝(scanning)으로 분류할 수 있다.
그런후, 상기 구문 분석부(300)는 변수의 선언과 할당(assignment)문, 분기문, 함수 호출 등 웹 응용프로그램의 일반적인 구문을 인식할 수 있도록 파서를 이용하여 구문 분석을 수행한다(S3).
이이서, 상기 파라미터 상태 추적부(400)는 상기 구문 분석부(300)에 의해 파싱된 변수의 선언문, 할당문 및 분기문에 대해 파마미터의 상태를 전이시키는 구문에 따른 상태 변화와 함수 특성에 따라 파라미터의 상태를 전이시키는 함수 특성에 따른 상태 변화를 추적한다(S4).
이 때, 문법으로 표현된 소스코드의 구문 분석은 파서로 이루어지지만 파라미터의 상태 변화는 타입 검사와 같이 정적 의미 분석이 이루어져야 파악할 수 있으므로, 도 5와 같이 파라미터의 상태 전이가 될 수 있도록 의미 분석이 이루어진다. 한편, 변수의 선언 시에는 검증되지 않은 사용자 입력 값이 없으므로 클리어(clear) 상태가 되며, 할당문(assignment)에서는 변수의 상태가 전이된다. 이 때, 도 5에서의 "if, switch"와 같은 분기문은 실행 시간(dynamic time)에 분기가 결정되므로 가능성 전체 경로에 대한 상태 정보가 합쳐져야 하며, "for, while"의 경우에는 각 문장이 일렬로 실행되므로 정상적인 제어흐름으로 파악하면 된다.
반면에, 함수는 함수 자체의 특성에 의해 변수 상태가 변화되므로, 도 4와 같은 해당 함수의 구조를 분석할 결과에 의존한다. 이 때, 도 4는 함수의 특성에 따른 파라미터의 상태 변화를 나타내는 도면이다. 그러면, 웹 응용프로그램 취약점 탐지를 위한 파라미터의 상태 추적 모델에 대해 도 4를 참조하여 살펴보면 다음과 같다. 단계(state)(a)는 "파라미터 a"의 현재 상태 값을 의미하는 함수이며, 상태정보는 사용자 입력 값이 검증되지 않은 더티(dirty) 상태와 입력 값이 검증된 클리어(clear) 상태로 구분된다. "foo(a)"는 "파라미터 a"를 입력 값으로 받아들이는 함수를 의미하며, "c = foo(a, b)"는 "파라미터 a와 b"를 입력으로 받아 처리입력 함수의 경우, 입력 값을 받는 변수의 상태를 더티(dirty)로 초기화시킨다. 전이 함수의 경우 변수의 상태가 다른 변수로 전이되어, 변수의 상태 전이를 추적한다. 필터링 함수는 더티(dirty) 상태를 클리어(clear) 상태로 변환시키며, 출력 함수는 파라미터의 상태 값을 판단하여 상태 정보를 저장한다. 이와 같이 함수의 파라미터 상태를 추적할 수 있다면 특정 취약점의 상태를 파악할 수 있다.
마지막으로, 상기 취약 결과 보고부(500)는 출력 지점에서 변수의 상태가 더티(dirty)인 특정 취약점에 대한 발생 가능성을 보고한다(S5). 정적 분석은 실행시간에 가능한 결과를 정확히 분석할 수 없으므로 최종적으로 취약점에 관한 최종 판단은 웹 응용프로그램을 분석하는 점검자에 의해 이루어져야 한다.
상술한 바와 같은 본 발명의 방법은 프로그램으로 구현되어 컴퓨터로 읽을 수 있는 기록매체(씨디롬, 램, 롬, 플로피 디스크, 하드 디스크, 광자기 디스크 등)에 저장될 수 있다.
이상에서 몇 가지 실시예를 들어 본 발명을 더욱 상세하게 설명하였으나, 본 발명은 반드시 이러한 실시예로 국한되는 것이 아니고 본 발명의 기술사상을 벗어나지 않는 범위 내에서 다양하게 변형실시될 수 있다.
상술한 바와 같이 본 발명에 의한 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치 및 방법에 의하면, 한 웹 응용프로그램의 소스코드 분석 방법을 통해 현재 문제가 되고 있는 SQL 삽입(SQL Injection), 명령어 삽입(Command Injection), 크로스 사이트 스크립팅(Cross Site Scripting,XSS)과 같은 주요 웹 취약점을 점검하여 보안 취약점을 제거해 줌으로써, 심각한 침해사고가 발생되지 않도록 막아준다는 뛰어난 효과가 있다.

Claims (8)

  1. 함수 리스트 및 파라미터 리스트 데이터베이스를 구비하며, 파라미터 상태 추적을 통해 주요 웹 응용프로그램의 소스코드를 자동 분석하여 보안 취약점을 탐지하는 장치에 있어서,
    각종 함수에 대한 목록을 사전에 정의하여 함수 리스트 데이터베이스에 저장하여 관리하는 함수특성 사전정의부;
    소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하는 어휘 분석부;
    웹 응용프로그램의 일반적인 구문을 인식하기 위해 함수 호출의 특성을 파악하는 구문 분석부;
    구문에 따른 상태 변화와 함수 특성에 따른 상태 변화를 추적하는 파라미터 상태 추적부; 및
    출력 지점에서 변수의 특정 취약점에 대한 발생 가능성을 보고하는 취약 결과 보고부로 구성된 것을 특징으로 하는 웹 응용프로그램 취약점의 소스코드 분석 장치.
  2. 제 1항에 있어서,
    상기 함수특성 사전정의부가 상기 함수 리스트 데이터베이스에 저장하여 관리하는 함수 목록은, 변수에 입력을 받는 경우에 사용되는 함수의 목록인 입력 함수 목록, 변수의 값을 출력하는 함수의 목록인 출력 함수 목록, 변수의 값을 다른 변수에 대입되는 함수의 목록인 전이 함수 목록, 및 변수에서 특정 문자열을 제거하는 일을 하는 함수의 목록인 필터링 함수 목록으로 이루어지는 것을 특징으로 하는 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치.
  3. 제 2항에 있어서,
    상기 함수 목록의 함수 특성 형식은, 각 함수별로 동일한 파일에 함수를 입력하는 규칙으로 각 필드는 탭으로 구분되고, "함수이름", "크로스 사이트 스크립팅(Cross-Site Scripting, XSS) 취약점", "SQL 삽입(SQL Injection) 취약점", "명령어 삽입(Command Injection) 취약점", "함수타입", "파라미터1", "파라미터2", "파라미터3", "파라미터4", "파라미터5", "리턴 타입" 형식으로 입력함을 특징으로 하는 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 장치.
  4. 제 1항에 있어서,
    상기 어휘 분석부는 소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하여 파라미터 및 함수를 식별하고, 식별된 파라미터를 파라미터 목록으로 정의한 후 상기 파라미터 리스트 데이터베이스에 저장하여 관리하는 한편, 사용자 정의 함수의 경우 구문 분석을 위해 상기 함수 리스트 데이터베이스에 저장된 함수 목록에 함수의 프로토타입 정보를 추가하는 것을 특징으로 하는 웹 응용프로그램 취약점의 소스코드 분석 장치.
  5. 제 1항에 있어서,
    상기 구분 분석부는 변수의 선언문, 할당문, 분기문, 함수 호출 등 웹 응용프로그램의 일반적인 구문을 인식하기 위해 파서를 이용하여 함수 호출의 특성을 파악하는 파싱 동작을 수행하는 것을 특징으로 하는 웹 응용프로그램 취약점의 소스코드 분석 장치.
  6. 제 1항에 있어서,
    상기 파라미터 상태 추적부는 상기 구문 분석부를 통해 파싱된 변수의 선언문, 할당문 및 분기문에 대해 파마미터의 상태를 전이시키는 구문에 따른 상태 변화와 함수 특성에 따라 파라미터의 상태를 전이시키는 함수 특성에 따른 상태 변화를 추적하는 것을 특징으로 하는 웹 응용프로그램 취약점의 소스코드 분석 장치.
  7. 파라미터 상태 추적을 통해 주요 웹 응용프로그램의 소스코드를 자동 분석하여 보안 취약점을 탐지하는 방법에 있어서,
    소스코드를 분석하기 위해 정규 표현식으로 정의된 문법 구조에 맞추어 소스 코드에서 토큰을 식별하는 어휘 분석을 수행하는 제 1 단계;
    웹 응용프로그램의 구문을 인식하기 위해 파서를 이용하여 함수 호출의 특성을 파악하는 파싱 동작을 수행하는 제 2 단계;
    상기 제 2 단계에서 파싱된 변수의 선언문, 할당문 및 분기문에 대해 파마미터의 상태를 전이시키는 구문에 따른 상태 변화와 함수 특성에 따라 파라미터의 상태를 전이시키는 함수 특성에 따른 상태 변화를 추적하는 제 3 단계; 및
    상기 제 2 단계의 상태변화 추적결과를 토대로 출력 지점에서 변수의 취약점 상태가 더티(dirty)인 특정 취약점에 대한 발생 가능성을 보고하기 위해 그 결과를 출력하는 제 4 단계로 이루어진 것을 특징으로 하는 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 방법.
  8. 제 7항에 있어서,
    상기 제 3 단계에서, 함수 특성에 따른 상태 변화를 추적을 위해 데이터베이스로부터 변수에 입력을 받는 경우에 사용되는 함수의 목록인 입력 함수 목록, 변수의 값을 출력하는 함수의 목록인 출력 함수 목록, 변수의 값을 다른 변수에 대입되는 함수의 목록인 전이 함수 목록, 및 변수에서 특정 문자열을 제거하는 일을 하는 함수의 목록인 필터링 함수 목록을 참조하는 것을 특징으로 하는 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의 소스코드 분석 방법.
KR1020040110944A 2004-12-23 2004-12-23 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법 KR100670209B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020040110944A KR100670209B1 (ko) 2004-12-23 2004-12-23 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020040110944A KR100670209B1 (ko) 2004-12-23 2004-12-23 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20060072353A KR20060072353A (ko) 2006-06-28
KR100670209B1 true KR100670209B1 (ko) 2007-01-16

Family

ID=37165552

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040110944A KR100670209B1 (ko) 2004-12-23 2004-12-23 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법

Country Status (1)

Country Link
KR (1) KR100670209B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101015402B1 (ko) * 2010-03-29 2011-02-22 포항공과대학교 산학협력단 보안 태그를 이용한 웹 어플리케이션 보안 방법 및 장치
WO2017188534A1 (ko) * 2016-04-26 2017-11-02 (주)시큐레이어 비정형 데이터의 정규화를 수행하도록 지원하는 방법 및 이를 이용한 컴퓨팅 장치
WO2018070598A1 (ko) * 2016-10-14 2018-04-19 한국전력공사 소스코드 변경 영향 평가를 이용한 불법 행위 감시 장치 및 그 방법
KR20190125251A (ko) 2012-06-25 2019-11-06 (주)트리니티소프트 웹 방화벽과 취약점 분석도구의 연동방법
KR20220042860A (ko) * 2020-09-28 2022-04-05 네이버클라우드 주식회사 원격 파일 실행 취약점 진단 방법, 장치 및 컴퓨터 프로그램

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101052734B1 (ko) * 2009-02-03 2011-07-29 주식회사 안철수연구소 응용 프로그램 패치 장치 및 방법
KR100926735B1 (ko) * 2009-04-24 2009-11-16 주식회사 이븐스타 웹 소스 보안 관리 시스템 및 방법
KR101012335B1 (ko) * 2010-07-14 2011-02-09 한국항공대학교산학협력단 정규표현식 기반의 요약공간을 이용한 안전한 자료 흐름 분석방법
KR101479516B1 (ko) * 2014-03-05 2015-01-07 소프트포럼 주식회사 소스코드 보안 약점 탐지 장치 및 방법
KR101534493B1 (ko) * 2014-11-27 2015-07-07 소프트포럼 주식회사 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법
KR101507469B1 (ko) * 2015-01-06 2015-04-03 (주)싸이버텍 소스 코드 분석 서비스 제공 방법
KR102015545B1 (ko) * 2017-04-26 2019-08-28 주식회사 평화이즈 소스 코드 변경이 미치는 영향도를 분석하기 위한 시스템
CN117112398B (zh) * 2023-07-11 2024-04-16 贝壳找房(北京)科技有限公司 增量代码覆盖率检测方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08235090A (ja) * 1994-12-15 1996-09-13 At & T Corp スクリプト前処理システム及び方法
KR100334128B1 (ko) * 2000-03-24 2002-04-26 전창오 보안 정책 시스템
KR20020054196A (ko) 2000-12-27 2002-07-06 오길록 데몬을 이용한 접근 제어 시스템 및 방법
KR20030017063A (ko) 2001-08-23 2003-03-03 (주)시큐어뉴스 퍼스널 컴퓨터의 방화벽을 위한 시스템
KR20030094921A (ko) 2002-06-10 2003-12-18 주식회사데이콤 보안 정보 관리 및 취약성 분석 시스템과 그 방법
KR20040080844A (ko) 2003-03-14 2004-09-20 주식회사 안철수연구소 정적 분석을 이용한 악성 스크립트 감지 방법

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08235090A (ja) * 1994-12-15 1996-09-13 At & T Corp スクリプト前処理システム及び方法
KR100334128B1 (ko) * 2000-03-24 2002-04-26 전창오 보안 정책 시스템
KR20020054196A (ko) 2000-12-27 2002-07-06 오길록 데몬을 이용한 접근 제어 시스템 및 방법
KR20030017063A (ko) 2001-08-23 2003-03-03 (주)시큐어뉴스 퍼스널 컴퓨터의 방화벽을 위한 시스템
KR20030094921A (ko) 2002-06-10 2003-12-18 주식회사데이콤 보안 정보 관리 및 취약성 분석 시스템과 그 방법
KR20040080844A (ko) 2003-03-14 2004-09-20 주식회사 안철수연구소 정적 분석을 이용한 악성 스크립트 감지 방법

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101015402B1 (ko) * 2010-03-29 2011-02-22 포항공과대학교 산학협력단 보안 태그를 이용한 웹 어플리케이션 보안 방법 및 장치
KR20190125251A (ko) 2012-06-25 2019-11-06 (주)트리니티소프트 웹 방화벽과 취약점 분석도구의 연동방법
WO2017188534A1 (ko) * 2016-04-26 2017-11-02 (주)시큐레이어 비정형 데이터의 정규화를 수행하도록 지원하는 방법 및 이를 이용한 컴퓨팅 장치
WO2018070598A1 (ko) * 2016-10-14 2018-04-19 한국전력공사 소스코드 변경 영향 평가를 이용한 불법 행위 감시 장치 및 그 방법
KR101860642B1 (ko) * 2016-10-14 2018-05-23 한국전력공사 소스코드 변경 영향 평가를 이용한 불법 행위 감시 장치 및 그 방법
KR20220042860A (ko) * 2020-09-28 2022-04-05 네이버클라우드 주식회사 원격 파일 실행 취약점 진단 방법, 장치 및 컴퓨터 프로그램
KR102408392B1 (ko) * 2020-09-28 2022-06-13 네이버클라우드 주식회사 원격 파일 실행 취약점 진단 방법, 장치 및 컴퓨터 프로그램

Also Published As

Publication number Publication date
KR20060072353A (ko) 2006-06-28

Similar Documents

Publication Publication Date Title
Gupta et al. XSS-SAFE: a server-side approach to detect and mitigate cross-site scripting (XSS) attacks in JavaScript code
Gupta et al. XSS-secure as a service for the platforms of online social network-based multimedia web applications in cloud
Jovanovic et al. Pixy: A static analysis tool for detecting web application vulnerabilities
Wei et al. Preventing SQL injection attacks in stored procedures
Scholte et al. Preventing input validation vulnerabilities in web applications through automated type analysis
Shar et al. Automated removal of cross site scripting vulnerabilities in web applications
Doupé et al. Fear the ear: discovering and mitigating execution after redirect vulnerabilities
US8646088B2 (en) Runtime enforcement of security checks
Nithya et al. A survey on detection and prevention of cross-site scripting attack
US8850405B2 (en) Generating sound and minimal security reports based on static analysis of a program
Shar et al. Auditing the XSS defence features implemented in web application programs
US20040205411A1 (en) Method of detecting malicious scripts using code insertion technique
KR100670209B1 (ko) 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법
KR20090090685A (ko) 웹 어플리케이션의 취약성 판단 방법 및 시스템
CN111737150B (zh) 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置
CN111611590B (zh) 涉及应用程序的数据安全的方法及装置
CN113961930A (zh) Sql注入漏洞检测方法、装置及电子设备
Zhang et al. An empirical study of web resource manipulation in real-world mobile applications
Buyukkayhan et al. What's in an Exploit? An Empirical Analysis of Reflected Server {XSS} Exploitation Techniques
Saha Consideration points detecting cross-site scripting
CN113127862A (zh) 一种xxe攻击检测方法、装置、电子设备及存储介质
Lin et al. The automatic defense mechanism for malicious injection attack
Yin et al. A web application runtime application self-protection scheme against script injection attacks
Dwivedi et al. SQLAS: Tool to detect and prevent attacks in php web applications
Payet et al. Ears in the wild: large-scale analysis of execution after redirect vulnerabilities

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130102

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140103

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20141224

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20151224

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee