KR101869008B1 - 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법 - Google Patents

자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법 Download PDF

Info

Publication number
KR101869008B1
KR101869008B1 KR1020160113069A KR20160113069A KR101869008B1 KR 101869008 B1 KR101869008 B1 KR 101869008B1 KR 1020160113069 A KR1020160113069 A KR 1020160113069A KR 20160113069 A KR20160113069 A KR 20160113069A KR 101869008 B1 KR101869008 B1 KR 101869008B1
Authority
KR
South Korea
Prior art keywords
input value
input
value
processing routine
verification
Prior art date
Application number
KR1020160113069A
Other languages
English (en)
Other versions
KR20180026103A (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 KR1020160113069A priority Critical patent/KR101869008B1/ko
Publication of KR20180026103A publication Critical patent/KR20180026103A/ko
Application granted granted Critical
Publication of KR101869008B1 publication Critical patent/KR101869008B1/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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/128Restricting unauthorised execution of programs involving web programs, i.e. using technology especially used in internet, generally interacting with a web browser, e.g. hypertext markup language [HTML], applets, java
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명에 따르면, 자바 어플리케이션의 바이트코드 기반 입력값 검증에 있어서, 정적 바이트코드 인스트루멘테이션을 사용하여 대상 자바 웹 어플리케이션 내의 검증 대상 메소드나 객체를 찾아 검증 대상으로 입력되는 입력값을 검증하도록 분석 대상 자바 어플리케이션을 수정하고, 검증 대상으로 입력되는 입력값에 대해 검증 규칙을 이용하여 검증을 수행한 후, 비정상적인 입력값을 차단시킴으로써 복잡한 소스코드의 수정 없이도 어플리케이션의 취약점을 쉽게 보완할 수 있도록 한다.

Description

자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법{APPARATUS FOR AUTHENTICATING INPUT VALUE BASED ON BYTECODE IN JAVA APPLICATION AND METHOD THEREOF}
본 발명은 어플리케이션 취약점 분석에 관한 것으로, 특히 자바 어플리케이션의 바이트코드 기반 입력값 검증에 있어서, 정적 바이트코드 인스트루멘테이션(static bytecode instrumentation)을 사용하여 대상 자바 웹 어플리케이션 내의 검증 대상 메소드(method)나 객체(object)를 찾아 검증 대상으로 입력되는 입력값을 검증하도록 분석 대상 어플리케이션을 수정하고, 검증 대상으로 입력되는 입력값에 대해 검증 규칙을 이용하여 검증을 수행한 후, 비정상적인 입력값을 차단시킴으로써 복잡한 소스코드의 수정 없이도 어플리케이션의 취약점을 쉽게 보완할 수 있도록 하는 자바 어플리케이션 바이트코드 기반 코드 삽입장치와 입력값 검증장치 및 그 방법에 관한 것이다.
근래에 들어, 웹 서비스가 일반화되고 웹 어플리케이션이 더욱 중요해짐에 따라, 웹 어플리케이션이 주요 공격 대상이 되고 있다. 공격자들은 웹 어플리케이션에 의해 관리되는 민감한 사용자 정보를 훔치거나 유출하기 위해, SQL 인젝션, 경로 조회(디렉토리 조회), 크로스 사이트 스크립팅(XSS) 등의 다양한 입력값 검증 부재 관련 취약점들을 공격한다.
위와 같은 공격에 대응하기 위해 종래에는 소스코드 기반의 정적 분석 도구 등이 제안되어 웹 어플리케이션의 취약점을 분석하여 외부로부터의 공격에 대응할 수 있도록 하고 있다.
이러한 소스코드 기반의 정적 분석 도구는 예를 들어 Findbugs, PMD, HP Fortify 등이 있으며, 대부분의 소스코드 기반의 정적 분석 도구들은 각 도구가 보유하고 있는 룰셋(ruleset)과 탐지 엔진에 기반하여 어플리케이션의 취약점이나 문제점을 소스코드 레벨에서 찾아주고 어떤 문제가 발생할 수 있는지, 어떻게 수정을 하는 것이 바람직한 지 등의 방안을 제시하여 준다.
그러나, 종래 소스코드 기반의 정적 분석 도구들을 어플리케이션의 분석을 위해 소스코드를 필요로 하기 때문에 소스코드가 존재하지 않는 어플리케이션의 취약점은 분석할 수 없는 등 그 분석 대상과 범위가 제한적인 문제점이 있었다.
(특허문헌)
대한민국 등록특허번호 10-1051600호(등록일자 2011년 07월 18일)
따라서, 본 발명에서는 자바 어플리케이션의 바이트코드 기반 입력값 검증에 있어서, 정적 바이트코드 인스트루멘테이션을 사용하여 대상 자바 웹 어플리케이션 내의 검증 대상 메소드나 객체를 찾아 검증 대상으로 입력되는 입력값을 검증하도록 분석 대상 어플리케이션을 수정하고, 검증 대상으로 입력되는 입력값에 대해 검증 규칙을 이용하여 검증을 수행한 후, 비정상적인 입력값을 차단시킴으로써 복잡한 소스코드의 수정 없이도 어플리케이션의 취약점을 쉽게 보완할 수 있도록 하는 자바 어플리케이션 바이트코드 기반 코드 삽입장치와 입력값 검증장치 및 그 방법을 제공하고자 한다.
상술한 본 발명은 자바 어플리케이션의 바이트코드 기반 코드 삽입장치로서, 분석 대상 어플리케이션에서 입력값을 수신하는 입력 처리 루틴을 검색하는 검색부와, 상기 입력 처리 루틴에 들어오는 상기 입력값을 수신하는 입력값 검증기를 상기 입력 처리 루틴의 실행코드에 삽입하여 상기 분석 대상 어플리케이션을 수정하는 수정부를 포함한다.
또한, 상기 수정부는, 상기 입력 처리 루틴이 검색되는 경우, 스택 프레임내 저장된 상기 입력 처리 루틴의 인자값들을 지역변수로 임시 저장하고, 상기 입력 처리 루틴 보다 먼저 상기 입력값을 입력받는 상기 입력값 검증기를 상기 실행코드의 직전에 삽입하며, 상기 입력값 검증기가 삽입된 다음 상기 인자값들을 상기 스택 프레임으로 복원시키는 것을 특징으로 한다.
또한, 상기 검색부는, 상기 분석 대상 어플리케이션의 자바 클래스 파일에서 상기 입력값을 처리하는 기설정된 코드 패턴을 검사하여 상기 입력 처리 루틴을 검색하는 것을 특징으로 한다.
또한, 상기 입력 처리 루틴은, 상기 분석 대상 어플리케이션의 자바 클래스 파일 중 파일 I/O 또는 SQL 인젝션인 것인 것을 특징으로 한다.
또한, 본 발명은 상기 청구항 제1항 내지 제4항 중 어느 한 항에 기재된 코드 삽입 장치에 의해 상기 입력값 검증기가 삽입된 입력값 검증장치에 있어서, 상기 입력값 검증기는, 상기 입력 처리 루틴에 입력값이 들어오면 상기 입력값을 추출하는 수신부와, 상기 입력값을 검증 규칙과 비교하는 비교부와, 상기 비교 결과, 상기 입력값이 정상적인 값이 아니면 상기 입력값이 상기 입력 처리 루틴으로 입력되는 것을 차단시키고, 상기 입력값이 상기 정상적인 값이면 상기 입력값을 상기 입력 처리 루틴의 입력값으로 반환시키는 처리부를 포함한다.
또한, 상기 처리부는, 상기 입력값에 대한 검사 시, 상기 검증 규칙에 기등록된 공격코드가 상기 입력값에 포함된 경우 상기 입력값을 상기 정상적인 값이 아닌 것으로 판단하는 것을 특징으로 한다.
또한, 상기 처리부는, 상기 입력값과 상기 입력값의 검사결과를 로그로 기록하는 것을 특징으로 한다.
또한, 본 발명은 자바 어플리케이션의 바이트코드 기반 입력값 검증방법으로서, 분석 대상 어플리케이션에서 입력값을 수신하는 입력 처리 루틴을 검색하는 단계와, 상기 입력 처리 루틴에 들어오는 상기 입력값을 수신하는 것을 알리는 입력값 검증기를 상기 입력 처리 루틴의 실행코드에 삽입하여 상기 분석 대상 어플리케이션을 수정하는 단계와, 상기 입력값 검증기에서 상기 입력 처리 루틴에 입력으로 들어오는 상기 입력값을 추출하는 단계와, 상기 입력값을 기저장된 검증 규칙(ruleset)과 비교하는 단계와, 상기 비교결과, 상기 입력값이 상기 정상적인 값이 아닌 경우, 상기 입력값이 상기 입력 처리 루틴으로 입력되는 것을 차단시키는 단계와, 상기 비교결과, 상기 입력값이 상기 정상적인 입력값인 경우, 상기 입력값을 상기 입력 처리 루틴의 입력값으로 반환시키는 단계를 포함한다.
또한, 상기 수정하는 단계는, 상기 입력 처리 루틴이 검색되는 경우, 스택 프레임내 저장된 상기 입력 처리 루틴의 인자값들을 지역변수로 임시 저장하는 단계와, 상기 입력 처리 루틴 보다 먼저 상기 입력값을 입력받는 상기 입력값 검증기를 상기 실행코드의 직전에 삽입하는 단계와, 상기 입력값 검증기가 삽입된 다음 상기 인자값들을 상기 스택 프레임으로 복원시키는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 차단시키는 단계는, 상기 입력값 검증기에서 상기 검증 규칙에 기등록된 공격코드가 상기 입력값에 포함되어 있는지 검사하는 단계와, 상기 검사결과, 상기 공격코드가 포함되어 있는 경우 상기 입력값을 상기 정상적인 값이 아닌 것으로 판단하는 단계와, 상기 정상적인 값이 아닌 것으로 판단한 경우, 상기 입력값이 상기 입력 처리 루틴으로 입력되는 것을 차단시키는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 검사하는 단계이후, 상기 입력값 검증기에서 검증 수행된 상기 입력값과 상기 입력값의 검사 결과를 로그로 기록하는 단계를 더 포함하는 것을 특징으로 한다.
또한, 상기 입력 처리 루틴은, 상기 분석 대상 어플리케이션의 자바 클래스 파일에서 상기 입력값을 처리하는 기설정된 코드 패턴을 검사하는 것을 통해 검색되는 것을 특징으로 한다.
본 발명에 따르면, 자바 어플리케이션의 바이트코드 기반 입력값 검증에 있어서, 정적 바이트코드 인스트루멘테이션을 사용하여 대상 자바 웹 어플리케이션 내의 검증 대상 메소드나 객체를 찾아 검증 대상으로 입력되는 입력값을 검증하도록 분석 대상 어플리케이션을 수정하고, 검증 대상으로 입력되는 입력값에 대해 검증 규칙을 이용하여 검증을 수행한 후, 비정상적인 입력값을 차단시킴으로써 복잡한 소스코드의 수정 없이도 어플리케이션의 취약점을 쉽게 보완할 수 있도록 하는 이점이 있다.
도 1은 본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 입력값 검증장치의 블록 구성도,
도 2는 본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 입력값 검증 제어 흐름도,
도 3은 본 발명의 실시예에 따른 검증 코드 삽입기에 의한 검증 대상의 동작 내용 변경 예시도,
도 4는 본 발명의 실시예에 따른 검증 대상의 실행 흐름이 변경된 결과에 대응하는 소스코드 예시도,
도 5는 본 발명의 실시예에 따른 제안 기법 적용 전 SQL 인젝션 발생 화면 예시도,
도 6은 본 발명의 실시예에 따른 SQL 인젝션이 차단된 결과 화면 예시도,
도 7은 본 발명의 실시예에 따른 SQL 인젝션이 감지된 서버 로그 화면 예시도.
이하, 첨부된 도면을 참조하여 본 발명의 동작 원리를 상세히 설명한다. 하기에서 본 발명을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1은 본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 코드 삽입기(100)와 입력값 검증기(150)의 상세 블록 구성을 도시한 것이다.
이하, 도 1을 참조하여 본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 코드 삽입기(100)와 입력값 검증기(150)간 연동 동작과 각 구성 요소에서의 동작을 상세히 설명하기로 한다.
먼저, 코드 삽입기(110)는 정적 바이트코드 인스트루멘테이션(bytecode instrumentation : BCI)를 사용하여 분석 대상 자바 어플리케이션 내의 검증 대상 메소드(method)나 객체(object)를 찾아, 검증 대상 메소드나 객체의 실행코드에 입력값 검증기(150)를 삽입하여 분석 대상 자바 어플리케이션을 수정한다.
이때, 이러한 검증 대상 메소드나 객체는 예를 들어 자바 클래스 파일(Java class file)에서 입력값을 처리하는 파일 I/O(input/output), SQL 인젝션(injection) 등의 입력값 처리 루틴(routine)이 될 수 있으며, 코드 삽입기(100)는 입력값 처리 루틴이 가지는 코드 패턴(code pattern)을 검사하여 입력값 처리 루틴을 검색하고, 검색된 입력값 처리 루틴에 검증 코드를 삽입하는 것을 통해 자바 클래스 파일을 수정함으로써 자바 어플리케이션을 수정할 수 있다.
즉, 코드 삽입기(100)는 분석 대상 자바 어플리케이션에서 입력값을 수신하는 입력 처리 루틴을 검색하고, 입력 처리 루틴이 호출되거나 생성되는 것을 알리는 입력값 검증기(150)를 입력 처리 루틴의 일부분에 삽입한다.
한편, 이러한, 코드 삽입기(100)는 검색부(102)와 수정부(104)를 포함할 수 있으며, 이하에서는 코드 삽입기(100)의 검색부(102)와 수정부(104)에서의 동작을 보다 상세히 설명하기로 한다.
먼저, 검색부(102)는 분석 대상 자바 어플리케이션에서 입력값을 수신하는 입력 처리 루틴을 검색하다. 이때, 이러한 입력 처리 루틴은 앞서 설명한 바와 같이, 예를 들어 자바 클래스 파일(Java class file)에서 입력값을 처리하는 파일 I/O(input/output), SQL 인젝션(injection) 등이 될 수 있으며, 검색부(102)는 입력값 처리 루틴이 가지는 코드 패턴(code pattern)을 검사하여 입력값 처리 루틴을 검색할 수 있다.
다음으로, 수정부(104)는 입력 처리 루틴이 호출되는 것을 알리는 입력값 검증기(150)를 입력 처리 루틴의 실행코드의 일부분에 삽입하여 분석 대상 자바 어플리케이션을 수정하게 된다.
즉, 수정부(104)는 입력 처리 루틴이 검색되는 경우, 스택 프레임(stack frame)내 저장된 입력 처리 루틴의 인자값들을 지역변수로 임시 저장하고, 입력 처리 루틴 보다 먼저 입력값을 입력받도록 구현되는 입력값 검증기(150)를 검증 대상 입력 처리 루틴의 실행코드의 직전에 삽입하며, 입력값 검증기(150)가 삽입된 다음 인자값들을 스택 프레임으로 복원시키는 동작을 통해 분석 대상 자바 어플리케이션을 수정하게 된다. 이때, 입력값 검증기(150)는 입력 처리 루틴 또는 입력 처리 루틴내 자바 메소드의 앞단에 삽입될 수 있으나 이에 한정되는 것은 아니다. 예를 들어, 수정부(104)는 자바 메소드 File a = new File(dir); 또는 사용자 정의 메소드 sample(inputdata); 라는 입력 처리 코드를 호출하는 명령을 찾은 경우 이러한 코드의 직전 라인에 입력값 검증기(150)를 삽입할 수 있다.
또한, 수정부(104)는 입력값 검증기(150)를 삽입함에 있어서, 자바 어플리케이션이 실행되지 않는 상태에서 정적 바이트코드 인스트루멘테이션을 통해 검증 코드를 삽입할 수 있으나, 이에 한정되는 것은 아니다.
또한, 수정부(104)는 정적 바이트코드 인스트루멘테이션을 수행하기 위해 OW2 Consortium의 오픈소스 프로젝트인 ASM 라이브러리를 사용할 수 있다. 이러한 ASM 라이브러리는 자바 클래스 파일의 분해, 수정, 재구성을 위한 API를 제공하는 것으로, ASM 라이브러리는 데이터 구조를 돌아다니며 처리하는 방문자패턴(Visitor Pattern)을 사용하여 자바 클래스 파일을 분석, 수정하기 때문에 전체 구조를 수정하지 않고 새로운 동작을 기존 객체 구조에 추가할 수 있다. 또한, SQL 인젝션(injection)은 부적절한 SQL문의 입력으로 인해 발생되는 취약점으로 SQL문을 입력으로 받는 메소드나 객체 등의 입력 처리 루틴에서 최종적으로 발생할 수 있다.
입력값 검증기(150)은 코드 삽입기(100)에 의해 수정된 자바 어플리케이션이 실행되는 경우, 수정된 자바 어플리케이션과 같이 실행되면서 입력 처리 루틴 등의 검증 대상 메소드나 객체가 호출 될 경우 인자로 들어오는 입력값을 추출하여 검증 규칙(ruleset)(160)을 가지고 입력값을 검증한 후, 원래의 수행 흐름으로 돌려준다. 또한, 입력값에 대한 검증 수행 시 들어온 입력값과 검증 수행 결과를 서버(server)(도시하지 않음)의 로그(log)에 저장한다.
이때, 이러한 입력값 검증기(150)는 검증 대상으로부터 입력되는 입력값을 가로채어 해당 입력값을 검증하고, 입력값이 외부로부터의 공격코드를 포함하는 경우 등과 같이 비정상적인 입력값인 경우 이를 차단시킬 수 있도록 하기 위한 것으로, 프로세서 또는 일종의 검증 코드로 구현된 소프트웨어 모듈 일 수 있으나, 이에 한정되는 것은 아니다. 또한, 이러한 입력값 검증기(150)는 예를 들어 검증 코드 등으로 구현되어 검증 대상의 실행 코드상 일부분에 삽입될 수 있으나, 이에 한정되는 것은 아니다.
한편, 이러한, 입력값 검증기(150)는 수신부(152), 비교부(154), 처리부(156) 등을 포함할 수 있으며, 입력값 검증기(150)의 수신부(152), 비교부(154), 처리부(156)에서의 동작을 보다 상세히 설명하기로 한다.
먼저, 수신부(152)는 입력 처리 루틴에 입력값이 들어오면 입력값을 추출한다.
다음으로, 비교부(154)는 입력 처리 루틴의 호출 시 입력 처리 루틴에 입력으로 들어오는 입력값을 수신부(152)로부터 전달받고, 해당 입력값을 기저장된 검증 규칙(ruleset)(160)과 비교한다. 이때, 위와 같은 검증 규칙(160)에는 일반적으로 이미 알려져 있는 공격코드가 포함되거나, 관심 있게 주시하여야 할 문자들이 포함될 수 있으나, 이에 한정되는 것은 아니다.
처리부(156)는 비교부(154)로부터의 비교결과를 수신하여 입력 처리 루틴에 입력된 입력값이 정상적인 값인지 여부를 판단한다. 이때, 처리부(156)는 입력값에 대한 정상여부 판단 시, 검증 규칙에 기등록된 공격코드가 입력값에 포함된 경우 해당 입력값을 정상적인 값이 아닌 것으로 판단할 수 있으며, 입력값이 정상적인 값이 아닌 것으로 판단하는 경우, 해당 입력값이 입력 처리 루틴으로 입력되는 것을 차단시킬 수 있다.
그러나, 입력값이 정상적인 값으로 판단한 경우, 처리부(156)는 해당 입력값을 자바 어플리케이션의 입력 처리 루틴의 입력값으로 반환시켜 해당 입력값이 호출된 입력 처리 루틴에서 처리될 수 있도록 한다.
즉, 비교부(154)는 예를 들어 입력값이 SQL 인젝션에 대응하는 입력값인 경우, SQL 인젝션과 관련된 검증 규칙을 구비할 수 있으며, 이러한 검증 규칙을 참조해서 입력값과 검증 규칙을 비교할 수 있다. 이때, 이러한 비교결과는 처리부(156)로 인가될 수 있으며, 처리부(156)에서는 비교부(154)에서 제공되는 비교결과 정보를 이용하여 검증 대상 입력값에 검증 규칙에 존재하는 문구 또는 공격코드가 포함되어 있는 경우 해당 입력값을 외부로부터의 공격을 위한 입력값으로 판단하여 정상적인 값이 아닌 것으로 판단할 수 있다. 이때, 처리부(156)는 입력값이 외부로부터의 공격을 위한 입력값으로 판단된 경우에는 해당 입력값을 차단시킬 수 있으며, 외부로부터의 공격을 위한 입력값이 아니라고 판단된 경우에는 해당 입력값을 자바 어플리케이션의 입력 처리 루틴의 입력값으로 반환시켜 해당 입력값이 호출된 입력 처리 루틴에서 처리될 수 있도록 한다.
또한, 처리부(156)는 위와 같이 입력값에 대한 검증을 수행한 경우, 해당 입력값과 검사결과를 로그로 기록할 수 있다.
도 2는 본 발명의 실시예에 따른 본 발명의 실시예에 따른 자바 어플리케이션 바이트코드 기반 입력값 검증장치(100)에서의 동작 제어 흐름을 도시한 것이다. 이하, 도 1 내지 도 2를 참조하여 본 발명의 실시예를 상세히 설명하기로 한다.
먼저, 코드 삽입기(100)는 분석 대상 자바 어플리케이션의 자바 클래스 파일을 입력으로 받아 자바 클래스 파일을 오픈(open)하고(S200), 검증 대상 메소드나 객체를 검색하게 된다(S202). 이때, 이러한 검증 대상 메소드나 객체는 예를 들어 자바 클래스 파일에서 입력값을 처리하는 파일 I/O(input/output), SQL 인젝션(injection) 등의 입력값 처리 루틴이 될 수 있으며, 코드 삽입기(100)는 입력값 처리 루틴이 가지는 코드 패턴을 검사하여 입력값 처리 루틴을 검색하고, 검색된 입력값 처리 루틴에 입력값 검증기(150)를 검증 코드 등의 형태로 삽입하는 것을 통해 자바 클래스 파일을 수정함으로써 자바 어플리케이션을 수정할 수 있다.
이어, 코드 삽입기(100)는 입력값 처리 루틴이 가지는 코드 패턴 등을 검사하여 검증 대상을 검색한 경우(S204), 스택 프레임에 저장된 검증 대상의 인자값들을 지역변수로 임시 저장한다(S206).
이어, 코드 삽입기(100)는 검증 대상의 실행 코드에 검증 대상으로부터 입력되는 입력값을 가로채어 해당 입력값을 검증하고, 입력값이 외부로부터의 공격코드를 포함하는 경우 등과 같이 비정상적인 입력값인 경우 이를 차단시킬 수 있도록 하기 위한 입력값 검증기(150)를 삽입한다(S208). 이때, 이러한 입력값 검증기(150)는 예를 들어 검증 코드 등으로 구현되어 검증 대상의 실행 코드상 일부분에 삽입될 수 있으나, 이에 한정되는 것은 아니다. 또한, 이러한 입력값 검증기(150)는 위와 같이 검증 대상에 삽입되는 경우 검증 대상으로 입력되는 입력값에 대해 검증 대상이 해당 입력값을 처리하기 전에 가로채어 먼저 입력값이 정상적인 값인지를 검증하고 정상적인 값인 경우에는 검증 대상에서 처리되도록 하고, 비정상적인 값인 경우 처리되지 않도록 동작할 수 있으나, 이에 한정되는 것은 아니다.
그런 후, 코드 삽입기(100)는 위와 같이 검증 대상에 대해 입력값 검증기(150)의 삽입을 수행한 경우, 지역변수에 임시 저장된 인자값을 스택 프레임으로 복원시켜 검증 대상을 호출 또는 생성하도록 한다(S210).
이어, 코드 삽입기(100)는 위와 같은 검증 대상에 대한 입력값 검증기(150) 삽입 작업이 자바 클래스 파일의 끝까지 수행되었는지 여부를 검사하고(S212), 자바 클래스 파일의 끝까지 수행된 경우, 분석 대상 자바 어플리케이션의 변경 내용을 저장하여 수정된 자바 어플리케이션을 생성하게 된다(S214).
도 3는 위 도 2에 도시된 코드 삽입기(100)의 동작을 통해 검증 대상의 동작 내용이 변경된 것을 도시한 것이며, 도 4는 위 도 2에 도시된 코드 삽입기(100)의 동작을 통해 검증 대상의 실행 흐름을 변경한 결과를 소스코드(source code)로 표현한 것이다.
이하에서는 SQL 인젝션 취약점을 가지고 있는 특정 자바 어플리케이션에 대해, 본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 입력값 검증기법 적용 후 파일의 실행 결과를 예시한 도면들을 참조하여 실행 결과를 살펴보도록 한다.
본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 입력값 검증기법을 적용하기 전 SQL 인젝션 취약점을 가지고 있는 자바 어플리케이션은 도 5에서 보여지는 바와 같이 취약점이 발생하는 입력값을 입력하는 경우 DB 내용 전체가 보여지는 것을 확인할 수 있다.
그러나, 본 발명의 실시예에 따른 자바 어플리케이션의 바이트코드 기반 입력값 검증기법을 적용한 후, 동일한 입력값으로 공격을 재시도 하면, 도 6에서 보여지는 바와 같이 입력값에 따른 실행 자체가 차단되어 아무런 결과도 출력하지 않는 것을 알 수 있다. 또한, 7에서 보여지는 바와 같이 서버 로그에서 입력값 검증기(150)가 어떤 값을 입력 받았으며, 해당 입력값이 SQL 인젝션을 발생시켰는지 여부를 확인할 수 있다.
상술한 바와 같이, 본 발명의 실시예에서는 자바 어플리케이션의 바이트코드 기반 입력값 검증에 있어서, 정적 바이트코드 인스트루멘테이션을 사용하여 대상 자바 웹 어플리케이션 내의 검증 대상 메소드나 객체를 찾아 검증 대상으로 입력되는 입력값을 검증하도록 분석 대상 자바 어플리케이션을 수정하고, 검증 대상으로 입력되는 입력값에 대해 검증 규칙을 이용하여 검증을 수행한 후, 비정상적인 입력값을 차단시킴으로써 복잡한 소스코드의 수정 없이도 어플리케이션의 취약점을 쉽게 보완할 수 있도록 한다.
본 발명에 첨부된 각 흐름도의 각 단계의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수도 있다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 흐름도의 각 단계에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 흐름도의 각 단계에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 흐름도의 각 단계에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 단계는 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실시예들에서는 단계들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 단계들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 단계들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
한편 상술한 본 발명의 설명에서는 구체적인 실시예에 관해 설명하였으나, 여러 가지 변형이 본 발명의 범위에서 벗어나지 않고 실시될 수 있다. 따라서 발명의 범위는 설명된 실시 예에 의하여 정할 것이 아니고 특허청구범위에 의해 정하여져야 한다.
100 : 코드 삽입기 102 : 검색부
104 : 수정부 150 : 입력값 검증기
152 : 수신부 154 : 비교부
156 : 처리부 160 : 검증 규칙(ruleset)

Claims (12)

  1. 분석 대상 어플리케이션에서 입력값을 수신하는 입력 처리 루틴을 검색하는 검색부와,
    상기 입력 처리 루틴이 검색되는 경우, 스택 프레임내 저장된 상기 입력 처리 루틴의 인자값들을 지역변수로 임시 저장하고, 상기 입력 처리 루틴 보다 먼저 상기 입력값을 입력받는 입력값 검증기를 상기 입력 처리 루틴의 실행코드의 직전에 삽입하여 상기 분석 대상 어플리케이션을 수정하며, 상기 입력값 검증기가 삽입된 다음 상기 인자값들을 상기 스택 프레임으로 복원시키는 수정부를 포함하며,
    상기 입력값 검증기는,
    상기 입력 처리 루틴에 입력값이 들어오면 상기 입력값을 추출하는 수신부와,
    상기 입력값을 검증 규칙과 비교하는 비교부와,
    상기 비교 결과, 상기 입력값이 정상적인 값이 아니면 상기 입력값이 상기 입력 처리 루틴으로 입력되는 것을 차단시키고, 상기 입력값이 상기 정상적인 값이면 상기 입력값을 상기 입력 처리 루틴의 입력값으로 반환시키는 처리부를 포함하는
    자바 어플리케이션의 바이트코드 기반 입력값 검증장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 검색부는,
    상기 분석 대상 어플리케이션의 자바 클래스 파일에서 상기 입력값을 처리하는 기설정된 코드 패턴을 검사하여 상기 입력 처리 루틴을 검색하는 자바 어플리케이션의 바이트코드 기반 입력값 검증장치.
  4. 제 1 항에 있어서,
    상기 입력 처리 루틴은,
    상기 분석 대상 어플리케이션의 자바 클래스 파일 중 파일 I/O 또는 SQL 인젝션인 것인 자바 어플리케이션의 바이트코드 기반 입력값 검증장치.
  5. 삭제
  6. 제 1 항에 있어서,
    상기 처리부는,
    상기 입력값에 대한 검사 시, 상기 검증 규칙에 기등록된 공격코드가 상기 입력값에 포함된 경우 상기 입력값을 상기 정상적인 값이 아닌 것으로 판단하는 자바 어플리케이션의 바이트코드 기반 입력값 검증장치.
  7. 제 1 항에 있어서,
    상기 처리부는,
    상기 입력값과 상기 입력값의 검사결과를 로그로 기록하는 자바 어플리케이션의 바이트코드 기반 입력값 검증장치.
  8. 분석 대상 어플리케이션에서 입력값을 수신하는 입력 처리 루틴을 검색하는 단계와,
    상기 입력 처리 루틴이 검색되는 경우, 스택 프레임내 저장된 상기 입력 처리 루틴의 인자값들을 지역변수로 임시 저장하는 단계와,
    상기 입력 처리 루틴 보다 먼저 상기 입력값을 입력받는 입력값 검증기를 상기 입력 처리 루틴의 실행코드의 직전에 삽입하여 상기 분석 대상 어플리케이션을 수정하는 단계와,
    상기 입력값 검증기가 삽입된 다음 상기 인자값들을 상기 스택 프레임으로 복원시키는 단계와,
    상기 입력값 검증기에서 상기 입력 처리 루틴에 입력으로 들어오는 상기 입력값을 추출하는 단계와,
    상기 입력값을 기저장된 검증 규칙(ruleset)과 비교하는 단계와,
    상기 비교결과, 상기 입력값이 정상적인 값이 아닌 경우, 상기 입력값이 상기 입력 처리 루틴으로 입력되는 것을 차단시키는 단계와,
    상기 비교결과, 상기 입력값이 정상적인 입력값인 경우, 상기 입력값을 상기 입력 처리 루틴의 입력값으로 반환시키는 단계
    를 포함하는 자바 어플리케이션의 바이트코드 기반 입력값 검증방법.
  9. 삭제
  10. 제 8 항에 있어서,
    상기 차단시키는 단계는,
    상기 입력값 검증기에서 상기 검증 규칙에 기등록된 공격코드가 상기 입력값에 포함되어 있는지 검사하는 단계와,
    상기 검사결과, 상기 공격코드가 포함되어 있는 경우 상기 입력값을 상기 정상적인 값이 아닌 것으로 판단하는 단계와,
    상기 정상적인 값이 아닌 것으로 판단한 경우, 상기 입력값이 상기 입력 처리 루틴으로 입력되는 것을 차단시키는 단계
    를 포함하는 자바 어플리케이션의 바이트코드 기반 입력값 검증방법.
  11. 제 10 항에 있어서,
    상기 검사하는 단계이후, 상기 입력값 검증기에서 검증 수행된 상기 입력값과 상기 입력값의 검사 결과를 로그로 기록하는 단계를 더 포함하는 자바 어플리케이션의 바이트코드 기반 입력값 검증방법.
  12. 제 11 항에 있어서,
    상기 입력 처리 루틴은,
    상기 분석 대상 어플리케이션의 자바 클래스 파일에서 상기 입력값을 처리하는 기설정된 코드 패턴을 검사하는 것을 통해 검색되는 자바 어플리케이션의 바이트코드 기반 입력값 검증방법.
KR1020160113069A 2016-09-02 2016-09-02 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법 KR101869008B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020160113069A KR101869008B1 (ko) 2016-09-02 2016-09-02 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160113069A KR101869008B1 (ko) 2016-09-02 2016-09-02 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법

Publications (2)

Publication Number Publication Date
KR20180026103A KR20180026103A (ko) 2018-03-12
KR101869008B1 true KR101869008B1 (ko) 2018-07-20

Family

ID=61728904

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160113069A KR101869008B1 (ko) 2016-09-02 2016-09-02 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법

Country Status (1)

Country Link
KR (1) KR101869008B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109697163B (zh) * 2018-12-14 2022-03-04 西安四叶草信息技术有限公司 程序测试方法及设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040044655A (ko) * 2002-11-21 2004-05-31 한국전자통신연구원 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
KR20070038637A (ko) * 2005-10-06 2007-04-11 (주)아이피엠에스 자바 바이트 코드의 데이터 모니터링 시 모니터링된데이터의 호출관계 규명 방법
KR20110081719A (ko) * 2010-01-08 2011-07-14 한국과학기술연구원 내장형 자바시스템을 위한 인스톨-타임 컴파일러 프로그램을 기록한 컴퓨터 판독가능한 기록매체
KR101306842B1 (ko) * 2012-07-10 2013-09-10 인하대학교 산학협력단 자바 프로그램 검증 조건 생성 시스템 및 방법
KR20140112393A (ko) * 2013-03-13 2014-09-23 삼성전자주식회사 무결성 검사를 이용한 어플리케이션의 접근 제어 방법 및 이를 구현하는 전자 장치

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040044655A (ko) * 2002-11-21 2004-05-31 한국전자통신연구원 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
KR20070038637A (ko) * 2005-10-06 2007-04-11 (주)아이피엠에스 자바 바이트 코드의 데이터 모니터링 시 모니터링된데이터의 호출관계 규명 방법
KR20110081719A (ko) * 2010-01-08 2011-07-14 한국과학기술연구원 내장형 자바시스템을 위한 인스톨-타임 컴파일러 프로그램을 기록한 컴퓨터 판독가능한 기록매체
KR101306842B1 (ko) * 2012-07-10 2013-09-10 인하대학교 산학협력단 자바 프로그램 검증 조건 생성 시스템 및 방법
KR20140112393A (ko) * 2013-03-13 2014-09-23 삼성전자주식회사 무결성 검사를 이용한 어플리케이션의 접근 제어 방법 및 이를 구현하는 전자 장치

Also Published As

Publication number Publication date
KR20180026103A (ko) 2018-03-12

Similar Documents

Publication Publication Date Title
Gupta et al. Enhancing the browser-side context-aware sanitization of suspicious HTML5 code for halting the DOM-based XSS vulnerabilities in cloud
US8266700B2 (en) Secure web application development environment
Ma et al. Vurle: Automatic vulnerability detection and repair by learning from examples
Wei et al. Preventing SQL injection attacks in stored procedures
US7409718B1 (en) Method of decrypting and analyzing encrypted malicious scripts
US20060282897A1 (en) Secure web application development and execution environment
CN109101815B (zh) 一种恶意软件检测方法及相关设备
US8572747B2 (en) Policy-driven detection and verification of methods such as sanitizers and validators
KR101052734B1 (ko) 응용 프로그램 패치 장치 및 방법
KR101640479B1 (ko) 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
IL265518B2 (en) Management of security vulnerabilities
Gupta et al. A client‐server JavaScript code rewriting‐based framework to detect the XSS worms from online social network
CN115168847A (zh) 应用补丁生成方法、装置、计算机设备及可读存储介质
US20240160748A1 (en) Method And System For Data Flow Monitoring To Identify Application Security Vulnerabilities And To Detect And Prevent Attacks
WO2014050424A1 (ja) シグニチャ検証装置及びシグニチャ検証方法及びプログラム
KR101869008B1 (ko) 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법
JP5077455B2 (ja) 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法
US9396336B2 (en) Automatic correction of security downgraders
Kaur et al. Defense against HTML5 XSS attack vectors: a nested context-aware sanitization technique
CN113849817A (zh) 一种JavaScript原型链污染漏洞的检测方法及装置
Medeiros et al. Effect of coding styles in detection of web application vulnerabilities
Ouairy et al. Protection of systems against fuzzing attacks
Krohmer et al. Adapting Static Taint Analyzers to Software Marketplaces: A Leverage Point for Mass Vulnerability Detection?
CN113742724B (zh) 一种网络协议软件的安全机制缺陷检测方法
Bisht et al. Analyzing and Defending web application vulnerabilities through proposed security model in cloud computing

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