KR20100089256A - 응용 프로그램 패치 장치 및 방법 - Google Patents

응용 프로그램 패치 장치 및 방법 Download PDF

Info

Publication number
KR20100089256A
KR20100089256A KR1020090008430A KR20090008430A KR20100089256A KR 20100089256 A KR20100089256 A KR 20100089256A KR 1020090008430 A KR1020090008430 A KR 1020090008430A KR 20090008430 A KR20090008430 A KR 20090008430A KR 20100089256 A KR20100089256 A KR 20100089256A
Authority
KR
South Korea
Prior art keywords
application
vulnerability
function
patch
found
Prior art date
Application number
KR1020090008430A
Other languages
English (en)
Other versions
KR101052734B1 (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 KR1020090008430A priority Critical patent/KR101052734B1/ko
Publication of KR20100089256A publication Critical patent/KR20100089256A/ko
Application granted granted Critical
Publication of KR101052734B1 publication Critical patent/KR101052734B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs

Abstract

본 발명에 따른 응용 프로그램 패치 장치는, 사용자 시스템에 저장된 다수의 응용 프로그램의 함수 정보를 수집하여 데이터베이스에 저장하는 객체 정보 수집 모듈과, 통신망을 통해 취약점이 발견된 응용 프로그램에 대한 입력 데이터를 검증하기 위한 검증 코드가 수신됨에 따라 데이터베이스에서 취약점이 발견된 응용 프로그램의 함수 정보를 추출하고, 추출된 함수 정보를 토대로 검증 코드를 삽입하여 취약점이 발견된 응용 프로그램을 패치하는 패치 모듈을 포함한다.
이와 같이, 본 발명은 응용 프로그램의 함수 정보를 토대로 입력 데이터를 검증할 수 있는 검증 코드를 삽입한 후 이를 이용하여 입력 데이터에 대한 유효성을 검증할 수 있기 때문에 벤더에 의한 정식 패치가 배포되기 전에 많은 사용자의 시스템에 설치된 취약점이 공개된 많은 어플리케이션을 동시에 패치할 수 있어 많은 공격 위협으로부터 사용자의 시스템을 보호할 수 있다.
응용 프로그램, ActiveX, 패치, 취약점

Description

응용 프로그램 패치 장치 및 방법{APPLICATION PATCHING APPARATUS AND METHOD}
본 발명은 사용자의 시스템에 설치된 응용 프로그램의 취약점 패치에 관한 것으로, 더욱 상세하게는 응용 프로그램의 구조를 분석하여 해당 응용 프로그램의 취약점을 패치할 수 있는 응용 프로그램 패치 장치 및 방법에 관한 것이다.
인터넷의 사용이 보편화되면서 인터넷에서 제공되는 서비스의 종류도 날이 갈수록 늘어나고 있다. 웹 브라우저에 의해 해석되고 실행되는 HTML과 스크립트 코드와는 달리, ActiveX 응용 프로그램은 사용자 컴퓨터에 독립적인 어플리케이션 형태로 설치되어 실행되기 때문에 일반 어플리케이션과 같은 방법으로 사용자의 컴퓨터 자원을 사용할 수 있다.
따라서, 인터넷에서 제공하는 많은 서비스가 ActiveX 응용 프로그램을 사용하여 제공되고 있다. 하지만, 이러한 편리함과는 달리, ActiveX 응용 프로그램은 사용자 시스템에 매우 중대한 위협이 될 수 있다.
상술한 바와 같이, ActiveX 응용 프로그램은 사용자의 권한으로 실행되기 때문에 ActiveX 응용 프로그램의 취약점을 이용하여 사용자 시스템의 권한을 획득하거나 정보를 획득하고, 인터넷 웜이나 컴퓨터 바이러스 같은 악성 프로그램을 사용자 시스템에서 실행하는 것이 가능하다.
따라서, ActiveX 응용 프로그램은 설계 초부터 가능한 모든 경우의 보안 문제를 고려하여 제작되어야 하지만, 현재 배포되고 있는 많은 ActiveX 응용 프로그램은 보안상 큰 문제점이 될 수 있는 취약점들을 가지고 있으며, 이러한 ActiveX 응용 프로그램의 취약점을 이용하는 공격코드도 갈수록 증가하고 있다.
대체적으로, ActiveX 응용 프로그램의 보안상 취약점이 공개되면 해당 어플리케이션을 제작한 벤더(vendor)는 취약점 공격으로부터 사용자의 시스템을 보호하기 위해 취약점이 존재하는 코드의 취약점을 정정하는 패치를 개발하여 배포한다.
하지만, 이렇게 해당 ActiveX 응용 프로그램을 제작한 벤더가 공식적으로 배포하는 패치는 품질관리 및 안전성 테스트 등의 이유로 공격 코드가 출현한 후로부터 상당한 시간이 경과한 후 발표되는 것이 일반적이다. 따라서, 만약 벤더가 제작하는 공식 패치가 발표되기 전 공격 코드가 제작되고 공개되면 사용자는 공격 코드를 이용한 취약점 공격을 방어할 수단이 없다.
이런 이유로, 일부 정보 보호 업체는 이러한 사용자의 피해를 막고 사용자의 시스템을 보호하기 위해 벤더가 공식 패치를 발표하기 전 비공식 패치를 제작하여 배포한다.
정보 보호 업체가 제공하는 비공식 패치는 취약점의 발생 원인을 분석한 후 패치를 제작하고 검사하는데 소요되는 저원 때문에 정보 보호 업체가 공개된 모든 취약점에 대하여 일일이 대응한 비공식 패치를 제작하는 것은 현실적으로 불가능하다. 즉, 벤더나 정보 보호 업체인 보안 회사가 발표하는 ActiveX 응용 프로그램의 공식 및 비공식 패치는 여러 가지 현실적 제약으로 그 효과가 매우 한정되어 있다는 단점이 있다.
본 발명은 응용 프로그램의 함수 정보를 토대로 입력 데이터를 검증할 수 있는 검증 코드를 삽입한 후 이를 이용하여 입력 데이터에 대한 유효성 검증을 통해 응용 프로그램의 취약점을 패치할 수 있도록 한다.
본 발명에 따른 응용 프로그램 패치 장치는, 사용자 시스템에 저장된 다수의 응용 프로그램의 함수 정보를 수집하여 데이터베이스에 저장하는 객체 정보 수집 모듈과, 통신망을 통해 취약점이 발견된 응용 프로그램에 대한 입력 데이터를 검증하기 위한 검증 코드가 수신됨에 따라 상기 데이터베이스에서 상기 취약점이 발견된 응용 프로그램의 함수 정보를 추출하고, 상기 추출된 함수 정보를 토대로 상기 검증 코드를 삽입하여 상기 취약점이 발견된 응용 프로그램을 패치하는 패치 모듈을 포함한다.
본 발명에 따른 응용 프로그램 패치 방법은, 사용자 시스템에 저장된 다수의 응용 프로그램의 함수 정보 및 스택 메모리의 크기를 수집하여 데이터베이스에 저장하는 단계와, 통신망을 통해 취약점이 발견된 응용 프로그램에 대한 정보와 입력 데이터를 검증하기 위한 검증 코드가 수신되면, 상기 데이터베이스에서 상기 취약점이 발생된 응용 프로그램의 함수 정보와 스택 메모리의 크기를 추출하는 단계와, 상기 추출된 함수 정보와 스택 메모리의 크기를 토대로 상기 검증 코드를 삽입하여 상기 취약점이 발생된 응용 프로그램을 패치하는 단계를 포함한다.
본 발명은 응용 프로그램의 함수 정보를 토대로 입력 데이터를 검증할 수 있는 검증 코드를 삽입한 후 이를 이용하여 입력 데이터에 대한 유효성을 검증할 수 있기 때문에 벤더에 의한 정식 패치가 배포되기 전에 많은 사용자의 시스템에 설치된 취약점이 공개된 많은 어플리케이션을 동시에 패치할 수 있어 많은 공격 위협으로부터 사용자의 시스템을 보호할 수 있다.
이하, 본 발명의 실시예를 첨부된 도면들을 참조하여 상세히 설명한다. 아울러 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략한다.
본 발명의 실시 예에서는 응용 프로그램의 함수 정보를 토대로 입력 데이터 를 검증할 수 있는 검증 코드를 삽입한 후 이를 이용하여 입력 데이터에 대한 유효성을 검증할 수 있는 응용 프로그램 패치 장치 및 방법에 대해 설명한다.
본 발명에 적용되는 ActiveX 응용 프로그램을 포함한 대부분의 소프트웨어 어플리케이션의 취약점은 사용자의 입력이나 파일 같은 입력 데이터를 올바르게 검증하지 않아 발생한다. 패치란 응용 프로그램의 일부를 수정하는 것을 말하는 것으로, 패치 작업은 취약점의 원인을 분석한 후 취약점의 원인이 되는 코드를 찾아내어 해당 코드를 수정하는 순서로 이루어진다. 이때, 수정되어야 하는 코드는 실행을 위해 메모리에 적재된 코드이거나 바이너리 파일에 존재하는 코드일 수 있다.
응용 프로그램의 패치를 위해 코드를 수정하는 방법은 응용 프로그램에 따라 여러 가지 존재할 수 있으나, 상술한 바와 같이, 대부분의 응용 프로그램에서 보안상 취약점의 원인은 응용 프로그램이 입력 데이터를 올바르게 검증하지 않는 것에 있기 때문에 입력 데이터가 사용되기 전 해당 데이터를 검증하는 코드를 삽입하는 패치가 사용된다.
즉, 도 1에 도시된 바와 같이, 소스 문자열이 길이가 허용된 최대 길이보다 클 경우 문자열을 복사하는 과정에서 오버플로우가 발생되는 코드가 있을 경우, 도 2에 도시된 바와 같이, 문자열을 복사하기 전에 소스 문자열의 길이를 검사하는 부분(200)을 도 1의 코드에 삽입함으로써, 취약점을 제거할 수 있다.
도 3은 본 발명의 실시 예에 따른 취약점을 패치하기 위한 패치 장치를 도시 한 블록도로서, 크게 객체 정보 수집 모듈(300), 파라미터 데이터베이스(310). 패치 여부 판단 모듈(320) 및 패치 모듈(330)로 구성된다.
객체 정보 수집 모듈(300)은 사용자의 시스템, 예컨대 컴퓨터, 서버 등에 설치되어 있는 각 ActiveX 응용 프로그램의 함수 주소와 이름, 인자의 형식, 개수 및 함수의 최대 로컬 스택 크기 등의 정보를 수집한 후 이를 파라미터 데이터베이스(310)에 저장한다.
이와 같이, 객체 정보 수집 모듈(300)에 의해 수집된 정보들은 취약점이 발견된 ActiveX 응용 프로그램 내 함수의 입력 데이터를 검증하는 코드를 삽입하기 위해 정보로 이용된다.
ActiveX 응용 프로그램은 DLL 이나 OCX 등 공유 라이브러리와 같은 PE(Potable Executable, 이하, 'PE'라고 한다.) 포맷이다. 일반적인 공유라이브러리는 자신이 제공하는 모든 함수의 이름과 주소 등의 정보를 PE 파일의 익스포트 테이블(export table)을 통해 외부에 제공하는데 반해, ActiveX 응용 프로그램은, 도 4에 도시된 바와 같이, 해당 프로그램의 정보를 운영체제의 레지스트리에 등록하는데 필요한 특정 함수의 정보만을 익스포트 테이블을 통해 제공한다. 따라서, ActiveX 응용 프로그램이 제공하는 함수의 주소 정보를 획득하기 위해서 객체 정보 수집 모듈(300)은 일반적인 이중 인터페이스와 형식 라이브러를 이용하는 방법과 별도의 리버스 엔지니어링을 통한 함수 주소 획득 방법을 이용한다.
객체 정보 수집 모듈(300)이 ActiveX 응용 프로그램이 제공하는 함수의 주소를 얻기 위한 방법에 대해 설명하면 아래와 같다.
우선 일반적인 형식 라이브러리와 이중 인터페이스를 사용하는 방법의 경우, 일반 응용 프로그램의 하나인 ActiveX 응용 프로그램이 제공하는 함수들을 사용하기 위해 해당 ActiveX 컨트롤이 제공하는 IDispatch 인터페이스의 Invoke 함수(IDispatch::Invoke)를 사용하여 ActiveX 응용 프로그램에서 제공하는 함수를 간접 호출을 한다. 이러한 간접 호출 방식은 호출 과정에서 많은 오버헤드가 발생되는데, 이런 이유로, 도 5에 도시된 바와 같이, 대부분의 ActiveX 응용 프로그램은 IDispatch 인터페이스 이외에도 ActiveX 응용 프로그램이 제공하는 함수들의 주소가 담긴 또 다른 테이블을 Invoke 함수의 주소에 이어서 제공하고 있다. 즉, 이러한 두 개의 주소 테이블을 이중 인터페이스라 한다.
형식 라이브러리는 ActiveX 응용 프로그램이 제공하는 함수의 이름과 이중 인터페이스에서 제공하는 주소 테이블의 오프셋 값을 제공한다.
객체 정보 수집 모듈(300)은 형식 라이브러리와 이중 인터페이스에서 제공되는 정보와 도 6에 도시된 바와 같은 프로그램을 이용하여 도 7에 도시된 바와 같은 ActiveX 응용 프로그램이 제공하는 함수의 주소 정보를 획득할 수 있다.
한편, 이중 인터페이스를 지원하지 않는 ActiveX 응용 프로그램의 경우 객체 정보 수집 모듈(300)이 상기와 같은 방법, 즉 형식 라이브러리와 이중 인터페이스에서 제공되는 정보를 이용하여 ActiveX 응용 프로그램이 제공하는 함수의 주소 정보를 획득할 경우 형식 라이브러리를 이용하여 함수의 이름과 오프셋 조회가 가능하지만 IDispatch 인터페이스를 제공하지 않기 때문에 도 7과 달리, 도 8에 도시된 바와 같이, 모든 함수들의 주소가 동일한 것으로 나타나 있다.
이와 같이, 이중 인터페이스를 지원하지 않는 ActiveX 응용 프로그램이 제공하는 함수의 주소는 구조체 테이블, 예컨대 AFX_DISPMAP_ENTRY 구조체 테이블에 저장되어 있다. AFX_DISPMAP_ENTRY 구조체의 원형은 도 9에 도시된 바와 같이, 함수의 이름에 해당하는 문자열의 주소를 나타내는 1pszname 필드, 함수의 주소가 저장되어 있는 pfn 필드 등으로 구성되어 있기 때문에 객체 정보 수집 모듈(300)은 AFX_DISPMAP_ENTRY 구조체 내의 1pszname 필드와 pfn 필드의 정보를 이용하여 특정 함수의 주소를 찾을 수 있다
또한, AFX_DISPMAP_ENTRY 구조체 테이블은 PE 파일의 rdata 섹션에 위치하고, 이 테이블의 위치 정보는 AFX_DISPMAP 구조체의 1pEntries 필드에 저장되어 있다.
도 10과 도 11에는 AFX_DISPMAP_ENTRY 테이블과 AFX_DISPMAP 구조체간의 관계가 도시되어 있다.
상기의 관계에서 특정 함수의 주소를 찾기 위해서는 해당 함수의 정보를 저장하고 있는 AFX_DISPMAP_ENTRY 구조체를 직접 찾거나 AFX_DISPMAP 구조체를 이용하여 AFX_DISPMAP_ENTRY 테이블의 위치를 찾는다.
AFX_DISPMAP 구조체와 AFX_DISPMAP_ENTRY 구조체 테이블은 연속으로 위치하고, AFX_DISPMAP 구조체의 크기는 16 바이트이기 때문에 AFX_DISPMAP_ENTRY 구조체 테이블의 주소는 AFX_DISPMAP 구조체의 주소 +16과 같다. 그런데, 이 값은 AFX_DISPMAP 구조체의 1pEntries 필드의 값과 같아야 한다. AFX_DISPMAP 구조체의 1pEntries 필드의 값은 AFX_DISPMAP_ENTRY 구조체 테이블의 주소를 나타내기 때문 이다.
예를 들어, AFX_DISPMAP 구조체의 주소가 0x10000000이라면 1pEntries 필드의 주소에 해당하는 0x10000004 번지에 저장되어 있는 값은 0x10000010이 되어야 한다. 따라서, 리소스 섹션의 처음 주소로부터 한 바이트씩 순차적으로 현재 위치를 증가시켜가며 현재 위치로부터 4 바이트 떨어진 곳(1pEntries 필드에 해당)에 저장되어 있는 값이 현재 위치 +16(AFX_DISPMAP 구조체의 크기에 해당)과 같은 곳을 찾으면, AFX_DISPMAP 구조체의 위치를 찾을 수 있다. 이후, AFX_DISPMAP_ENTRY 구조체 테이블을 순차적으로 하나씩 읽어 가면 모든 함수의 이름과 주소를 찾을 수 있다.
도 12는 본 발명에서 AFX_DISPMAP 구조체의 위치를 찾기 위한 Pseduo 코드이며, 도 13은 본 발명에서 AFX_DISPMAP_ENTRY 구조체를 참조하여 함수의 주소를 알아내는 Pseduo 코드이다.
상기와 같은 과정을 통해 객체 정보 수집 모듈(300)은 ActiveX 응용 프로그램이 제공하는 함수의 주소를 찾아낸 후 이를 파라미터 데이터베이스(310)에 저장하고, ActiveX 응용 프로그램에 대한 함수의 최대 로컬 스택 크기 정보를 수집하여 파라미터 데이터베이스(310)에 저장한다.
객체 정보 수집 모듈(300)이 함수가 사용되는 스택 메모리의 크기를 수집하는 방법에 대해 설명하면 아래와 같다.
ActiveX 응용 프로그램을 실행시키기 위한 컴파일러는 ActiveX 응용 프로그램의 함수 실행에 필요한 스택 메모리를 확보하기 위해 몇 가지 명령어, 예컨대 함 수 프롤로그(function prologue)를 함수의 시작 부분에 추가한다.
객체 정보 수집 모듈(300)은 이러한 함수 프롤로그의 분석을 통해 함수 실행에 필요한 최대 스택 메모리의 크기를 알아낸 후 이를 파라미터 데이터베이스(310)에 저장한다.
패치 여부 판단 모듈(320)은 외부, 유무선 통신망을 통해 연결된 보안 서버(미도시됨)로부터 취약점을 가진 ActiveX 응용 프로그램에 대한 패치에 필요한 정보가 수신됨에 따라 취약점을 가진 ActiveX 응용 프로그램이 프로세스의 메모리에 적재되는 것을 감시하고, 감시 결과에 따라 패치 모듈(330)을 구동시킨다.
여기서, 패치 여부 판단 모듈(320)은 ActiveX 객체를 메모리에 로드시키는 로드 함수, 예컨대 CocreateInstance() 함수 또는 CoGetClassObject() 함수를 사용하여 ActiveX 응용 프로그램이 메모리에 로드되는지를 판단하는데, 즉 CocreateInstance() 함수 또는 CoGetClassObject() 함수를 후킹(hooking)하여 프로세서가 ActiveX 응용 프로그램을 메모리로 적재하는 시점을 알아낼 수 있다.
패치 모듈(330)은 취약점을 가진 ActiveX 응용 프로그램이 제공하는 함수 정보를 파라미터 데이터베이스(310)에서 추출한 후 추출된 함수 정보를 이용하여 패치 작업을 수행한다. 즉, 패치 모듈(330)은 추출된 함수 정보와 함수 실행에 필요한 스택 메모리의 크기를 이용하여 입력 데이터를 검증하기 위한 검증 코드를 삽입함으로써, 패치 작업을 수행한다.
상기와 같은 구성을 갖는 패치 장치가 정보를 수집하고 이를 토대로 패치 작업을 수행하는 과정에 대해 도 14를 참조하여 설명한다.
도 14는 본 발명의 실시 예에 따른 ActiveX 응용 프로그램의 함수 정보를 찾아내는 과정을 도시한 흐름도이다.
도 14를 참조하면, 먼저 객체 정보 수집 모듈(300)은 ActiveX 응용 프로그램이 이중 인터페이스를 제공하는지를 판단한다(S400).
S400의 판단 결과, 이중 인터페이스를 제공하는 경우 객체 정보 수집 모듈(300)은 상기에 설명한 바와 같은 방법, 즉 형식 라이브러리와 이중 인터페이스를 이용하여 ActiveX 응용 프로그램이 제공하는 함수의 정보를 찾아내어 파라미터 데이터베이스(310)에 저장한다(S402).
한편, S400의 판단 결과, 이중 인터페이스를 제공하지 않을 경우 객체 정보 수집 모듈(300)은 AFX_DISPMAP_ENTRY 구조체 테이블을 이용하여 ActiveX 응용 프로그램이 제공하는 함수 주소를 찾아낸 후 이를 파라미터 데이터베이스(310)에 저장한다(S404).
이후, 객체 정보 수집 모듈(300)은 ActiveX 응용 프로그램이 제공하는 함수 실행에 필요한 스택 메모리의 크기 정보를 알아낸 후 이를 파라미터 데이터베이스(310)에 저장(S406)한다.
상기와 같은 방법으로 얻어진 정보를 활용하여 취약점이 발견된 ActiveX 응용 프로그램의 패치를 수행하는데, 그 과정에 대해 설명하면 아래와 같다.
이후, 패치 여부 판단 모듈(320)은 외부, 예컨대 유무선 통신망을 통해 연결된 보안 서버로부터 취약점이 발견된 ActiveX 응용 프로그램에 대한 정보가 수신되면(S408), 수신된 ActiveX 응용 프로그램에 대한 정보를 토대로 패치되어야 할 코 드가 바이너리 파일인지 메모리에 존재하는 코드인지를 판단한다(S410).
S410의 판단 결과, 바이너리 파일인 경우 패치 여부 판단 모듈(320)은 패치 모듈(330)을 구동을 통해 패치를 수행하는데, 즉 패치 모듈(330)은 파라미터 데이터베이스(310)에 저장된 정보, 즉 함수 정보와 스택 메모리의 크기를 토대로 입력 데이터를 검증하기 위한 검증 코드를 삽입하여 취약점이 발견된 ActiveX 응용 프로그램에 대한 패치를 수행한다(S412).
S410의 판단 결과, 메모리에 존재하는 코드인 경우 패치 여부 판단 모듈(320)은 취약점이 발견된 ActiveX 응용 프로그램을 로드시키는 로드 함수의 후킹을 통해 ActiveX 응용 프로그램이 메모리에 적재되는 시점을 알아낸 후(S414) 이를 토대로 취약점이 발견된 ActiveX 응용 프로그램이 메모리에 적재되기 전에 입력 데이터를 검증하기 위한 검증 코드를 삽입하여 ActiveX 응용 프로그램에 대한 패치를 수행한다(S416).
입력 데이터를 검증하는 검증 코드는 파라미터 데이터베이스(310)에 저장된 스택 메모리의 크기와 입력 데이터 길이를 비교하는 부분으로서, 입력 데이터의 길이가 스택 메모리의 크기보다 큰 경우 오버플로우를 발생시킬 가능성이 매우 크기 때문에 함수 호출이 수행되지 않고 실패로 처리되도록 에러 값을 설정하여 처리하고, 입력 데이터 길이가 올바른 경우 원래의 함수를 호출하도록 한다.
이와 같이 입력 데이터를 검증하는 검증 코드(MyPatch)를 삽입하여 패치하는 과정에 대해 도 15을 참조하여 설명한다.
도 15에 도시된 바와 같이, 검증 코드(500)를 ActiveX 응용 프로그램의 소정 부분에 삽입한 후 그 위치를 기억한다. 그런 다음 취약점이 존재하는 함수를 호출하는 명령어(Call VFunction)(510)를 찾아내고, 해당 명령어(510)를 검증 코드가 삽입된 위치로 분기하는 명령어(JMP MyPatch)(520)로 대체한다.
검증 코드(500)는 함수 파라미터를 검사하는 부분으로서, 즉 ActiveX 응용 프로그램이 실행되어 검증 코드로 무조건 분기되면, 스택 메모리에에 저장되어 있는 데이터를 사용하여 입력 파라미터를 검증한다. 이때, 스택 메모리에는 취약점이 존재하는 함수가 존재하는 함수가 사용하는 파라미터들이 저장되어 있기 때문에 검증에 필요한 데이터를 스택 메모리에서 얻을 수 있다.
검증 결과, 파라미터가 유효한 값을 가진 것으로 검증되면, 원래 호출이 되는 함수를 호출하고, 그렇지 않을 경우 에러 값을 설정하고 반환하여 함수 호출이 실패하였음을 알림으로써, 그에 따른 처리를 할 수 있도록 한다.
검증 코드(500)의 실행이 끝나고 실행되는 코드는 "Next Instruction"에 해당한다.
본 발명에 따르면, 응용 프로그램의 함수 정보를 토대로 입력 데이터를 검증할 수 있는 검증 코드를 삽입한 후 이를 이용하여 입력 데이터에 대한 유효성을 검증할 수 있기 때문에 벤더에 의한 정식 패치가 배포되기 전에 많은 사용자의 시스템에 설치된 취약점이 공개된 많은 어플리케이션을 동시에 패치할 수 있다.
본 발명의 실시 예에서는 ActiveX 응용 프로그램을 예로 들어 설명하였지만, 그 외의 다른 여러 가지 응용 프로그램이 적용될 수 있다는 것은 당업자에 의해 자명하다.
지금까지 본 발명의 일 실시예에 국한하여 설명하였으나 본 발명의 기술이 당업자에 의하여 용이하게 변형 실시될 가능성이 자명하다. 이러한 변형된 실시 예들은 본 발명의 특허청구범위에 기재된 기술사상에 포함된다고 하여야 할 것이다.
도 1은 문자열 복사 과정에서 취약점이 존재하는 코드를 도시한 도면이며,
도 2는 입력 파라미터를 검사하는 검증 코드 삽입을 통해 도 1의 취약점을 제거한 코드를 도시한 도면이며,
도 3은 본 발명의 실시 예에 따른 응용 프로그램의 취약점 패치 장치를 도시한 블록도이며,
도 4는 응용 프로그램의 익스포트 테이블 구조를 도시한 도면이며,
도 5는 이중 인터페이스 구조를 도시한 도면이며,
도 6은 이중 인터페이스를 통한 함수 정보인 주소를 획득하기 위한 코드이며,
도 7은 형식 라이브러리와 이중 인터페이스를 통해 획득한 함수 주소를 도시한 도면이며,
도 8은 이중 인터페이스를 지원하지 않은 응용 프로그램의 함수 주소 조회 결과를 도시한 도면이며,
도 9는 AFX_DISPMAP_ENTRY 구조체 원형을 도시한 도면이며,
도 10은 AFX_DISPMAP 구조체 원형을 도시한 도면이며,
도 11은 AFX_DISPMAP_ENTRY 구조체와 AFX_DISPMAP 구조체의 관계를 도시한 도면이며,
도 12는 본 발명에서 AFX_DISPMAP 구조체의 위치를 찾기 위한 Pseduo 코드이며,
도 13은 본 발명에서 AFX_DISPMAP_ENTRY 구조체를 참조하여 함수의 주소를 알아내는 Pseduo 코드이며,
도 14는 본 발명의 실시 예에 따른 취약점 패치 과정을 도시한 흐름도이며,
도 15는 본 발명에 따른 검증 코드를 ActiveX 응용 프로그램에 삽입하여 패치하는 과정을 설명하기 위한 도면이다.
<도면의 주요부분에 대한 부호의 설명>
300 : 객체 정보 수집 모듈 310 : 파라미터 데이터베이스
320 : 패치 여부 판단 모듈 330 : 패치 모듈

Claims (18)

  1. 사용자 시스템에 저장된 다수의 응용 프로그램의 함수 정보를 수집하여 데이터베이스에 저장하는 객체 정보 수집 모듈과,
    통신망을 통해 취약점이 발견된 응용 프로그램에 대한 입력 데이터를 검증하기 위한 검증 코드가 수신됨에 따라 상기 데이터베이스에서 상기 취약점이 발견된 응용 프로그램의 함수 정보를 추출하고, 상기 추출된 함수 정보를 토대로 상기 검증 코드를 삽입하여 상기 취약점이 발견된 응용 프로그램을 패치하는 패치 모듈
    을 포함하는 응용 프로그램 패치 장치.
  2. 제 1 항에 있어서,
    상기 객체 정보 수집 모듈은, 상기 응용 프로그램에서 제공하는 형식 라이브러리와 이중 인터페이스를 이용하여 상기 응용 프로그램의 함수 정보를 획득하는 것을 특징으로 하는 응용 프로그램 패치 장치.
  3. 제 1 항에 있어서,
    상기 객체 정보 수집 모듈은, 상기 응용 프로그램의 함수의 이름과 주소가 저장된 AFX_DISPMAP_ENTRY 구조체 테이블을 검색한 후 이를 이용하여 상기 응용 프로그램의 함수 정보를 획득하는 것을 특징으로 하는 응용 프로그램 패치 장치.
  4. 제 3 항에 있어서,
    상기 객체 정보 수집 모듈은, 상기 AFX_DISPMAP_ENTRY 구조체 테이블의 위치 정보가 저장된 AFX_DISPMAP 구조체를 이용하여 상기 AFX_DISPMAP_ENTRY 구조체 테이블을 찾는 것을 특징으로 하는 응용 프로그램 패치 장치.
  5. 제 3 항에 있어서,
    상기 객체 정보 수집 모듈은, 상기 응용 프로그램의 형식 라이브러리에서 제공하는 함수 이름을 참조하는 곳의 검색을 통해 상기 AFX_DISPMAP_ENTRY 구조체 테이블의 위치를 검색하는 것을 특징으로 하는 응용 프로그램 패치 장치.
  6. 제 1 항에 있어서,
    상기 패치 모듈은, 상기 취약점이 발견된 응용 프로그램에서 수정되어야 할 코드가 메모리에 존재하는 경우 상기 취약점이 발견된 응용 프로그램이 상기 메모리에 로드되는 시점을 찾은 후에 상기 시점 이전에 상기 검증 코드를 삽입하여 상기 취약점이 발생된 응용 프로그램을 패치하는 것을 특징으로 하는 응용 프로그램 패치 장치.
  7. 제 6 항에 있어서,
    상기 패치 모듈은, 상기 응용 프로그램을 로드시키는 로드 함수의 후킹을 통해 상기 응용 프로그램이 상기 메모리에 로드되는 시점을 찾는 것을 특징으로 하는 응용 프로그램 패치 장치.
  8. 제 1 항에 있어서,
    상기 객체 정보 수집 모듈은, 상기 응용 프로그램의 함수가 사용하는 스택 메모리의 크기를 수집하여 상기 데이터베이스에 저장하는 것을 특징으로 하는 응용 프로그램 패치 장치.
  9. 제 8 항에 있어서,
    상기 패치 모듈은, 상기 데이터베이스에서 상기 취약점이 발견된 응용 프로그램의 함수에 대한 스택 메모리 크기를 검색하고, 상기 검색된 스택 메모리의 크기를 토대로 상기 취약점이 발견된 응용 프로그램의 함수에 입력되는 입력 데이터의 유효성을 검증하는 것을 특징으로 하는 응용 프로그램 패치 장치.
  10. 사용자 시스템에 저장된 다수의 응용 프로그램의 함수 정보 및 스택 메모리의 크기를 수집하여 데이터베이스에 저장하는 단계와,
    통신망을 통해 취약점이 발견된 응용 프로그램에 대한 정보와 입력 데이터를 검증하기 위한 검증 코드가 수신되면, 상기 데이터베이스에서 상기 취약점이 발생된 응용 프로그램의 함수 정보와 스택 메모리의 크기를 추출하는 단계와,
    상기 추출된 함수 정보와 스택 메모리의 크기를 토대로 상기 검증 코드를 삽입하여 상기 취약점이 발생된 응용 프로그램을 패치하는 단계
    를 포함하는 응용 프로그램 패치 방법.
  11. 제 10 항에 있어서,
    상기 데이터베이스에 저장하는 단계는,
    상기 응용 프로그램에서 이중 인터페이스를 제공하는지를 판단하는 단계와,
    상기 이중 인터페이스를 제공하는 경우 상기 응용 프로그램에서 제공하는 형식 라이브러리와 이중 인터페이스를 이용하여 상기 응용 프로그램의 함수 정보를 수집한 후 이를 상기 데이터베이스에 저장하는 단계
    를 포함하는응용 프로그램 패치 방법.
  12. 제 11 항에 있어서,
    상기 이중 인터페이스를 제공하지 않을 경우 상기 응용 프로그램의 함수의 이름과 주소가 저장된 AFX_DISPMAP_ENTRY 구조체 테이블을 검색한 후 이를 이용하여 상기 응용 프로그램의 함수 정보를 수집한 후 이를 상기 데이터베이스에 저장하는 것을 특징으로 하는 응용 프로그램 패치 방법.
  13. 제 12 항에 있어서,
    상기 AFX_DISPMAP_ENTRY 구조체 테이블의 검색은, AFX_DISPMAP 구조체를 이용하여 상기 AFX_DISPMAP_ENTRY 구조체 테이블을 검색하는 것을 특징으로 하는 응용 프로그램 패치 방법.
  14. 제 12 항에 있어서,
    상기 AFX_DISPMAP_ENTRY 구조체 테이블의 검색은, 상기 응용 프로그램의 형식 라이브러리에서 제공하는 함수 이름을 참조하는 곳의 검색을 통해 상기 AFX_DISPMAP_ENTRY 구조체 테이블의 위치를 검색하는 것을 특징으로 하는 응용 프로그램 패치 방법.
  15. 제 10 항에 있어서,
    상기 패치하는 단계는,
    상기 취약점이 발견된 응용 프로그램에서 수정되어야 할 코드가 바이너리 파일인지 메모리에 존재하는지를 판단하는 단계와,
    상기 메모리에 존재하는 경우 상기 취약점이 발견된 응용 프로그램이 상기 메모리에 로드되는 시점을 찾는 단계와,
    상기 로드 시점 이전에 상기 검증 코드를 삽입하여 상기 취약점이 발견된 응용 프로그램을 패치하는 단계
    를 포함하는 응용 프로그램 패치 방법.
  16. 제 15 항에 있어서,
    상기 메모리에 로드되는 시점을 찾는 단계는, 상기 응용 프로그램을 로드시키는 로드 함수의 후킹을 통해 상기 응용 프로그램이 상기 메모리에 로드되는 시점 을 찾는 것을 특징으로 하는 응용 프로그램 패치 방법.
  17. 제 10 항에 있어서,
    상기 패치하는 단계는,
    상기 데이터베이스에서 상기 취약점이 발견된 응용 프로그램의 함수에 대한 스택 메모리 크기를 검색하는 단계와,
    상기 검색된 스택 메모리의 크기와 상기 취약점이 발견된 응용 프로그램의 함수에 입력되는 입력 데이터 크기간의 비교를 통해 상기 입력 데이터의 유효성을 검증하는 상기 검증 코드를 이용하여 상기 취약점이 발견된 응용 프로그램을 패치하는 단계
    를 포함하는 응용 프로그램 패치 방법.
  18. 제 17 항에 있어서,
    상기 검증 코드를 이용하여 상기 취약점이 발견된 응용 프로그램을 패치하는 단계는,
    상기 검증 코드를 상기 취약점이 발견된 응용 프로그램 내에 삽입시킨 후 상기 삽입된 위치를 기억하는 단계와,
    상기 취약점이 발견된 응용 프로그램에서 취약점이 존재하는 함수를 호출하는 명령어를 검색한 후 상기 검색된 명령어를 상기 기억된 위치의 검증 코드로 분기시키는 명령어로 대체하는 단계와,
    상기 대체된 명령어에 의거하여 상기 검증 코드로 분기되어 상기 취약점이 존재하는 함수의 입력 파라미터를 검증하는 단계와,
    상기 검증 결과에 의거하여 에러 메시지를 출력하거나 상기 취약점이 존재하는 함수를 호출하는 것을 특징으로 하는 응용 프로그램 패치 방법.
KR1020090008430A 2009-02-03 2009-02-03 응용 프로그램 패치 장치 및 방법 KR101052734B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020090008430A KR101052734B1 (ko) 2009-02-03 2009-02-03 응용 프로그램 패치 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020090008430A KR101052734B1 (ko) 2009-02-03 2009-02-03 응용 프로그램 패치 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20100089256A true KR20100089256A (ko) 2010-08-12
KR101052734B1 KR101052734B1 (ko) 2011-07-29

Family

ID=42755169

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090008430A KR101052734B1 (ko) 2009-02-03 2009-02-03 응용 프로그램 패치 장치 및 방법

Country Status (1)

Country Link
KR (1) KR101052734B1 (ko)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101955356B1 (ko) * 2017-12-08 2019-03-07 한국인터넷진흥원 취약 함수 사용에 의한 취약점을 보완하기 위한 바이너리 패치 장치 및 그 방법
KR20190068495A (ko) * 2019-02-28 2019-06-18 한국인터넷진흥원 취약 함수 사용에 의한 취약점을 보완하기 위한 바이너리 패치 장치 및 그 방법
CN110399131A (zh) * 2019-05-23 2019-11-01 中国平安财产保险股份有限公司 提高应用程序稳定性的方法、装置、计算机设备
KR102067733B1 (ko) * 2019-05-15 2020-01-17 세종대학교산학협력단 포맷 스트링 취약점 검출 방법 및 이를 수행하기 위한 장치
KR20200037518A (ko) * 2018-10-01 2020-04-09 주식회사 시큐센 취약점 패치의 최적화 평가가 이루어지는 해킹 방어 경연 시스템
US11238151B2 (en) 2018-10-31 2022-02-01 Korea Internet & Security Agency Method and apparatus for patching binary having vulnerability
KR20240048170A (ko) 2022-10-06 2024-04-15 주식회사 엘앤제이테크 프로그램의 서드파티 라이브러리 점검 시스템, 서드파티 라이브러리 점검 방법 및 그 점검 방법을 구현하기 위한 컴퓨터 프로그램이 저장된 기록 매체
CN110399131B (zh) * 2019-05-23 2024-04-26 中国平安财产保险股份有限公司 提高应用程序稳定性的方法、装置、计算机设备

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101893518B1 (ko) 2016-10-28 2018-10-04 한국전자통신연구원 제어 시스템의 업데이트 관리 장치, 업데이트 검증 장치 및 그 방법
KR101989581B1 (ko) 2017-07-24 2019-06-14 한국전자통신연구원 내부망 전달용 파일 검증 장치 및 방법

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040080844A (ko) * 2003-03-14 2004-09-20 주식회사 안철수연구소 정적 분석을 이용한 악성 스크립트 감지 방법
US7424706B2 (en) * 2003-07-16 2008-09-09 Microsoft Corporation Automatic detection and patching of vulnerable files
KR100670209B1 (ko) * 2004-12-23 2007-01-16 한국전자통신연구원 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법
KR100706176B1 (ko) * 2005-07-12 2007-04-12 한국전자통신연구원 커널 취약요소를 방어하기 위한 커널 패치 방법 및 시스템

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101955356B1 (ko) * 2017-12-08 2019-03-07 한국인터넷진흥원 취약 함수 사용에 의한 취약점을 보완하기 위한 바이너리 패치 장치 및 그 방법
KR20200037518A (ko) * 2018-10-01 2020-04-09 주식회사 시큐센 취약점 패치의 최적화 평가가 이루어지는 해킹 방어 경연 시스템
US11238151B2 (en) 2018-10-31 2022-02-01 Korea Internet & Security Agency Method and apparatus for patching binary having vulnerability
KR20190068495A (ko) * 2019-02-28 2019-06-18 한국인터넷진흥원 취약 함수 사용에 의한 취약점을 보완하기 위한 바이너리 패치 장치 및 그 방법
KR102067733B1 (ko) * 2019-05-15 2020-01-17 세종대학교산학협력단 포맷 스트링 취약점 검출 방법 및 이를 수행하기 위한 장치
CN110399131A (zh) * 2019-05-23 2019-11-01 中国平安财产保险股份有限公司 提高应用程序稳定性的方法、装置、计算机设备
CN110399131B (zh) * 2019-05-23 2024-04-26 中国平安财产保险股份有限公司 提高应用程序稳定性的方法、装置、计算机设备
KR20240048170A (ko) 2022-10-06 2024-04-15 주식회사 엘앤제이테크 프로그램의 서드파티 라이브러리 점검 시스템, 서드파티 라이브러리 점검 방법 및 그 점검 방법을 구현하기 위한 컴퓨터 프로그램이 저장된 기록 매체

Also Published As

Publication number Publication date
KR101052734B1 (ko) 2011-07-29

Similar Documents

Publication Publication Date Title
KR101052734B1 (ko) 응용 프로그램 패치 장치 및 방법
EP3039608B1 (en) Hardware and software execution profiling
US8266700B2 (en) Secure web application development environment
Pietraszek et al. Defending against injection attacks through context-sensitive string evaluation
US8356351B2 (en) Method and device for verification of code module in virtual machine
US7739516B2 (en) Import address table verification
US8443354B1 (en) Detecting new or modified portions of code
US20160142437A1 (en) Method and system for preventing injection-type attacks in a web based operating system
JP5863973B2 (ja) プログラム実行装置及びプログラム解析装置
US11238151B2 (en) Method and apparatus for patching binary having vulnerability
US20120089973A1 (en) Smart patch delivery system
CN108959936B (zh) 一种基于路径分析的缓冲区溢出漏洞自动利用方法
Chinprutthiwong et al. Security Study of Service Worker Cross-Site Scripting.
US20190042750A1 (en) Pluggable trust architecture
CN114021106B (zh) 一种可信度量的远程认证方法、装置及系统
KR101482700B1 (ko) 해시를 이용한 프로그램의 무결성 검증 방법
US8775822B2 (en) Computer-implemented method and system for protecting a software installation after certification
Titze et al. Preventing library spoofing on android
WO2020012474A1 (en) Return-oriented programming attack protection system and method
US8141055B2 (en) Method for dynamic discovery of code segments in instrumented binary modules
CN117093245B (zh) Ota升级包验证方法、装置、设备及可读存储介质
Halim et al. A lightweight binary authentication system for windows
US20230049233A1 (en) Control flow integrity system and method
CN111625784B (zh) 一种应用的反调试方法、相关装置及存储介质
Liang et al. Automatic detection of integer sign vulnerabilities

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140725

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150727

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160725

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170725

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180725

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20190725

Year of fee payment: 9