KR101688632B1 - 라이브러리 적재 탐지를 위한 방법 및 장치 - Google Patents

라이브러리 적재 탐지를 위한 방법 및 장치 Download PDF

Info

Publication number
KR101688632B1
KR101688632B1 KR1020150108978A KR20150108978A KR101688632B1 KR 101688632 B1 KR101688632 B1 KR 101688632B1 KR 1020150108978 A KR1020150108978 A KR 1020150108978A KR 20150108978 A KR20150108978 A KR 20150108978A KR 101688632 B1 KR101688632 B1 KR 101688632B1
Authority
KR
South Korea
Prior art keywords
dll
duplicated
binary
detecting
list
Prior art date
Application number
KR1020150108978A
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 KR1020150108978A priority Critical patent/KR101688632B1/ko
Priority to US14/934,999 priority patent/US20170032121A1/en
Application granted granted Critical
Publication of KR101688632B1 publication Critical patent/KR101688632B1/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
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • 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
    • 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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

라이브러리 로딩에 대한 탐지를 하기 위한 방법 및 장치가 제공된다. 바이너리 로딩 모니터링부는 바이너리의 로드를 감지한다. 제1 DLL 필터링부는 바이너리가 로드할 적어도 하나의 DLL 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하고, 중복된 DLL 또는 존재하지 않는 DLL에 대한 처리를 수행한다. 제2 DLL 필터링부는 바이너리가 로드할 적어도 하나의 DLL 중 미사용 DLL을 검출하겨, 미사용 DLL에 대한 처리를 수행한다.

Description

라이브러리 적재 탐지를 위한 방법 및 장치{METHOD AND APPARATUS FOR DETECTING LOADING OF LIBRARY}
아래의 실시예들은 라이브러리 로딩에 대한 탐지를 하기 위한 방법 및 장치에 관한 것으로, 보다 상세하게는 선실행(anticipatory execution) 동적 라이브러리의 로딩에 대한 탐지를 수행하는 방법 및 장치가 개시된다.
컴퓨터 시스템에 침투하기 위한 해킹 기법 중 동적 링크 라이브러리(Dynamic Link Library; DLL) 프리로딩(Preloading)이 있다.
DLL 프리로딩은, 애플리케이션(application)이 DLL 파일을 로드할 때, 어플리케이션이 정상적인 DLL로 잘못 인식된 악성 DLL 파일을 로드하게 하는 기법이다. 공격자는 존재하지 않는 파일 이름(name)을 사용하여 컴퓨터 시스템에서 악성 코드가 자동으로 설치 및 실행되게 할 수 있다.
악성 DLL 파일이 로드됨에 따라, 악성 DLL 파일 내의 악성 코드가 자동으로 실행될 수 있다. 말하자면, DLL 프리로딩은 개발자(developer)의 실수를 이용하여 로드되어서는 안 되는 바이너리(binary)가 로드 되게 하는 기법이다.
예를 들면, 소정의 레지스트리(registry)에 DLL이 등록되면, 컴퓨터 시스템의 운영 체제는 컴퓨터 시스템의 모든 프로세스가 등록된 DLL을 로드하게 하는 기능을 제공할 수 있다. 많은 악성 코드들이 이러한 기능을 이용하여 손쉽게 안티 바이러스 프로세스에 DLL 인젝션(injection)을 가할 수 있고, DLL 인젝션 후 프로세스가 초기화되기 전에 DLL 인젝션에 의해 로드된 악성 DLL을 종료시킬 수 있다.
DLL 프리로딩에 관련하여, 한국공개특허 제10-2012-0088548호가 공개된 바 있다. 한국공개특허 제10-2012-0088548호에서는, DLL 인젝션에 의해 안티 바이러스 프로세스(anti-virus process)의 내부에 악성 DLL이 로드되는 것을 사전에 방지하고, 나아가 일반적인 프로세스에 대해서도 악성 DLL이 로드되는 방지하는 기술이 개시되었다.
일 실시예는 잠재적인 바이너리 프리로드 취약점을 사전에 탐지하고, 탐지된 잠재적인 바이너리 프리로드 취약점을 사용자에게 알리는 방법 및 장치를 제공할 수 있다.
일 실시예는 DLL의 삭제 및 DLL의 언로드를 통해 잠재적인 바이너리 프리로드 취약점을 제거하는 방법 및 장치를 제공할 수 있다.
일 측에 있어서, 바이너리의 로딩을 감지하는 단계; 상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 단계; 및 상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 단계를 포함하는 라이브러리 로딩 탐지 방법이 제공된다.
상기 라이브러리 로딩 탐지 방법은, 상기 바이너리가 DLL을 로드하는지 여부를 확인하는 단계를 더 포함할 수 있다.
상기 검출하는 단계 및 상기 수행하는 단계는 상기 바이너리가 DLL을 로드하는 라이브러리인 경우 수행될 수 있다.
상기 검출하는 단계는, 상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL의 목록을 생성하는 단계; 및 상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및 상기 DLL이 2개 이상의 파일 경로들에 존재하면 상기 DLL을 상기 중복된 DLL로 선택하는 단계를 포함할 수 있다.
상기 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분될 수 있다.
상기 DLL이 2개 이상의 파일 경로들에 존재하고, 상기 DLL이 정상 시스템 중복 파일이면, 상기 DLL은 정상적으로 중복된 DLL일 수 있다.
상기 라이브러리 로딩 탐지 방법은, 업데이트 서버와의 상호작용을 통해 상기 정상 시스템 중복 파일의 목록을 갱신하는 단계를 더 포함할 수 있다.
상기 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분될 수 있다.
상기 DLL이 2개 이상의 파일 경로들에 존재하고, 상기 2개 이상의 파일 경로들의 모두가 정상 시스템 중복 경로이면, 상기 DLL은 정상적으로 중복된 DLL일 수 있다.
상기 라이브러리 로딩 탐지 방법은, 업데이트 서버와의 상호작용을 통해 상기 정상 시스템 중복 경로의 목록을 갱신하는 단계를 더 포함할 수 있다.
상기 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분될 수 있다.
상기 DLL이 정상 시스템 중복 파일이 아니고, 상기 DLL이 존재하는 상기 2개 이상의 파일 경로들 중 정상 시스템 중복 경로가 아닌 경로가 존재하면, 상기 DLL은 비정상적으로 중복된 DLL일 수 있다.
상기 DLL이 존재하는지 여부에 대해 조사되는 파일 경로는 시스템 검사 경로를 포함할 수 있다.
상기 라이브러리 로딩 탐지 방법은, 업데이트 서버와의 상호작용을 통해 상기 시스템 검사 경로의 목록을 갱신하는 단계를 더 포함할 수 있다.
상기 검출하는 단계는, 상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL 의 목록을 생성하는 단계; 상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및 상기 DLL이 존재하는 파일 경로가 수집되지 않으면 상기 DLL을 상기 존재하지 않는 DLL로 선택하는 단계를 포함할 수 있다.
상기 처리를 수행하는 단계는, 상기 상기 중복된 DLL 또는 상기 존재하지 않는 DLL을 삭제하는 단계를 포함할 수 있다.
상기 처리를 수행하는 단계는, 상기 상기 중복된 DLL 또는 상기 존재하지 않는 DLL의 정보를 출력하는 단계; 및 상기 중복된 DLL 또는 상기 존재하지 않는 DLL의 삭제의 요청을 수신하는 단계를 더 포함할 수 있다.
다른 일 측에 있어서, 바이너리의 로딩을 감지하는 단계; 상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 미사용 DLL을 검출하는 단계; 및 상기 미사용 DLL에 대한 처리를 수행하는 단계를 포함하고, 상기 미사용 DLL은 상기 바이너리에 의해 호출되는 함수를 가지고 있지 않는 라이브러리인 라이브러리 로딩 탐지 방법이 제공된다.
상기 검출하는 단계는, DLL의 내부에 상기 바이너리가 사용하는 적어도 하나의 함수 중 어떤 함수도 존재하지 않으면 상기 DLL을 상기 미사용 DLL로서 결정하는 단계를 포함할 수 있다.
상기 바이너리가 사용하는 적어도 하나의 함수는 상기 바이너리에서 실제로 호출되는 함수일 수 있다.
상기 처리를 수행하는 단계는, 상기 미사용 DLL을 언로드하는 단계를 포함할 수 있다.
상기 처리를 수행하는 단계는, 상기 미사용 DLL의 정보를 출력하는 단계; 및 상기 미사용 DLL의 언로딩의 요청을 수신하는 단계를 더 포함할 수 있다.
또 다른 일 측에 있어서, 바이너리의 로드를 감지하는 바이너리 로딩 모니터링부; 및 상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하고, 상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 제1 DLL 필터링부를 포함하는 라이브러리 로딩 탐지 장치가 제공된다.
상기 라이브러리 로딩 탐지 장치는, 상기 적어도 하나의 DLL 중 미사용 DLL을 검출하고, 상기 미사용 DLL에 대한 처리를 수행하는 제2 DLL 필터링부를 더 포함할 수 있다.
이 외에도, 본 발명을 구현하기 위한 다른 방법, 장치, 시스템 및 상기 방법을 실행하기 위한 컴퓨터 프로그램을 기록하기 위한 컴퓨터 판독 가능한 기록 매체가 더 제공된다.
잠재적인 바이너리 프리로드 취약점을 사전에 탐지하고, 탐지된 잠재적인 바이너리 프리로드 취약점을 사용자에게 알리는 방법 및 장치가 제공된다.
DLL의 삭제 및 DLL의 언로드를 통해 잠재적인 바이너리 프리로드 취약점을 제거하는 방법 및 장치가 제공된다.
도 1은 일 실시예에 따른 라이브러리 로딩 탐지 장치의 구조도이다.
도 2는 일 실시예에 따른 라이브러리 로딩 탐지 방법의 흐름도이다.
도 3은 일 예에 따른 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 방법의 흐름도이다.
도 4는 일 예에 따른 중복된 DLL 및 존재하지 않는 DLL에 대한 처리를 수행하는 방법의 흐름도이다.
도 5는 일 예에 따른 미사용 DLL을 검출하는 방법의 흐름도이다.
도 6은 일 예에 따른 미사용 DLL에 대한 처리를 수행하는 방법의 흐름도이다.
도 7은 일 예에 따른 바이너리가 로드할 적어도 하나의 DLL의 목록을 도시한다.
도 8은 일 예에 따른 중복된 DLL 및 존재하지 않는 DLL으로의 분류를 나타낸다.
도 9는 일 예에 따른 바이너리가 사용하는 적어도 하나의 함수의 목록을 나타낸다.
도 10은 일 예에 따른 미사용 DLL로의 분류를 나타낸다.
도 11은 일 예에 따른 DB 갱신 방법의 흐름도이다.
도 12은 일 예에 따른 정상 시스템 중복 파일의 DB의 스키마를 나타낸다.
도 13는 일 예에 따른 시스템 검사 경로의 DB의 스키마를 나타낸다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하에서는, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 바람직한 실시예들에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
도 1은 일 실시예에 따른 라이브러리 로딩 탐지 장치의 구조도이다.
라이브러리 로딩 탐지 장치(100)는 선실행 동적 라이브러리의 자동 적재에 대한 탐지를 제공할 수 있다.
라이브러리 로딩 탐지 장치(100)는 바이너리 로딩 모니터링부(110), 제1 DLL 필터링부(120), 제2 DLL 필터링부(130), DLL 삭제부(140), DLL 언로딩부(150), 데이터베이스(DataBase; DB)부(160) 및 사용자 인터페이스(User Interface; UI)부(170)를 포함할 수 있다.
라이브러리 로딩 탐지 장치(100)는 바이너리를 실행하는 컴퓨터 시스템과 동일한 장치일 수 있으며, 컴퓨터 시스템의 일부일 수 있다.
라이브러리 로딩 탐지 장치(100)는 바이너리가 로드하는 DLL에 대한 프리로딩 DLL 공격의 위험을 탐지할 수 있고, 프리로딩 DLL 공격의 가능성이 탐지된 경우 위험을 제거하기 위해 DLL에 대한 처리를 수행할 수 있다.
바이너리 로딩 모니터링부(110)는 컴퓨터 시스템에서 바이너리의 실행을 탐지하는 모듈일 수 있다. 바이너리 로딩 모니터링부(110)는 바이너리의 실행의 이전에 바이너리 프리로드 취약점의 존재 여부를 탐지하기 위해, 바이너리의 실행을 모니터링할 수 있다. 바이너리 로딩 모니터링부(110)는 바이너리의 실행을 실시간 또는 비실시간으로 모니터링할 수 있다.
예를 들면, 바이너리 로딩 모니터링부(110)는 "LoadLibrary" 함수에 대한 모니터링을 통해 바이너리의 실행을 탐지할 수 있다.
바이너리의 실행이 탐지되면, 제1 DLL 필터링부(120)는 바이너리가 로드할 적어도 하나의 DLL의 목록을 생성할 수 있다. 제1 DLL 필터링부(120)는 바이너리가 로드할 적어도 하나의 DLL 중 중복된 DLL 또는 존재하지 않는 DLL을 검출할 수 있다.
제1 DLL 필터링부(120)는 중복된 DLL 또는 존재하지 않는 DLL이 검출되면 컴퓨터 시스템의 사용자에게 잠재적인 바이너리 프리로드 취약점을 알릴 수 있다.
또한, 제2 DLL 필터링부(130)는 바이너리가 로드할 적어도 하나의 DLL 중 미사용 DLL을 검출할 수 있다.
제2 DLL 필터링부(130)는 미사용 DLL이 검출되면 컴퓨터 시스템의 사용자에게 잠재적인 바이너리 프리로드 취약점을 알릴 수 있다.
제1 DLL 필터링부(120) 및 제2 DLL 필터링부(130)는 바이너리에 의해 로드되는 DLL에 대한 이중 점검을 통해 잠재적인 DLL 프리로드 취약점을 탐지할 수 있고, 탐지된 잠재적인 DLL 프리로드 취약점을 제거할 수 있다.
DLL 삭제부(140)는 DLL을 삭제할 수 있다.
예를 들면, 제1 DLL 필터링부(120)는 중복된 DLL 또는 존재하지 않는 DLL의 삭제의 요청을 DLL 삭제부(140)로 전송할 수 있다. DLL 삭제부(140)는 삭제가 요청된 중복된 DLL 또는 존재하지 않는 DLL을 삭제할 수 있다.
DLL 언로드부(150)는 DLL을 언로드할 수 있다.
예를 들면, 제2 DLL 필터링부(130)는 미사용 DLL의 언로딩의 요청을 중복된 DLL 또는 존재하지 않는 DLL의 삭제의 요청을 DLL 삭제부(140)로 전송할 수 있다. DLL 삭제부(140)는 삭제가 요청된 중복된 DLL 또는 존재하지 않는 DLL을 삭제할 수 있다.
DB부(160)는 DB를 제공할 수 있다. DB는 제1 DLL 필터링부(120) 및 제2 DLL 필터링부(130)에 의해 사용될 수 있다.
예를 들면, DB는 시스템 검사 경로의 DB, 정상 시스템 중복 파일의 DB 및 정상 시스템 중복 경로의 DB를 포함할 수 있다.
제1 DLL 필터링부(120)는 중복된 DLL 또는 존재하지 않는 DLL을 검출함에 있어서 시스템 검사 경로의 DB를 사용할 수 있다. 또한, 제1 DLL 필터링부(120)는 중복된 DLL을 검출함에 있어서 정상 시스템 중복 파일의 DB 및 정상 시스템 중복 경로의 DB를 사용할 수 있다.
UI(170)부는 라이브러리 로딩 탐지 장치(100)의 동작에 관련된 정보를 출력하거나, 라이브러리 로딩 탐지 장치(100)의 사용자로부터 정보를 수신할 수 있다.
예를 들면, UI부(170)는 제1 DLL 필터링부(120) 및 제2 DLL 필터링부(130)에 의해 요청된 정보를 출력할 수 있고, 수신된 정보를 제1 DLL 필터링부(120) 및 제2 DLL 필터링부(130)로 전송할 수 있다.
UI부(170)는 잠재적인 바이너리 프리로드 취약점이 존재함을 나타내는 정보를 사용자에게 제공할 수 있다.
도 1에 도시된 바와 같이, 실시예에 따른 라이브러리 로딩 탐지 장치(100)는 바이너리 로딩 모니터링부(110), 제1 DLL 필터링부(120), 제2 DLL 필터링부(130), DLL 삭제부(140), DLL 언로딩부(150), 데이터베이스부(160) 및 UI부(170)를 포함할 수 있다. 일 실시예에 따르면, 바이너리 로딩 모니터링부(110), 제1 DLL 필터링부(120), 제2 DLL 필터링부(130), DLL 삭제부(140), DLL 언로딩부(150), 데이터베이스부(160) 및 UI부(170)의 적어도 일부는 프로그램 모듈들일 수 있으며, 외부의 장치 또는 시스템과 통신할 수 있다. 이러한 프로그램 모듈들은 운영 체제, 응용 프로그램 모듈 및 기타 프로그램 모듈의 형태로 라이브러리 로딩 탐지 장치(100)에 포함될 수 있으며, 물리적으로는 여러 가지 공지의 기억 장치 상에 저장될 수 있다. 또한, 이러한 프로그램 모듈 중 적어도 일부는 라이브러리 로딩 탐지 장치(100)와 통신 가능한 원격 기억 장치에 저장될 수도 있다. 이러한 프로그램 모듈들은 후술할 특정 기능 또는 동작을 수행하거나 특정 추상 데이터 유형을 실행하는 루틴(routine), 서브루틴(subroutine), 프로그램, 오브젝트(object), 컴포넌트(component) 및 데이터 구조(data structure) 등을 포괄할 수 있지만, 이에 제한되지는 않는다. 프로그램 모듈들은 라이브러리 로딩 탐지 장치(100)의 적어도 하나의 프로세서(processor)에 의해 수행되는 명령어(instruction) 또는 코드(code)로 구성될 수 있다.
또한, 프로그램 모듈들은 단독의 프로그램으로서 사용될 수 있고, 백신 및 방화벽(firewall) 등과 같은 다른 보안 프로그램에 추가적으로 탑재될 수 있다. 프로그램 모듈들은 보안 프로그램의 하위 모듈로서, 플러그인(plug-in)의 형태로 실행될 수 있다.
예를 들면, 바이너리 로딩 모니터링부(110)는 컴퓨터 시스템에서 바이너리의 실행의 이벤트 또는 바이너리의 로딩의 이벤트가 발생할 때, 컴퓨터 시스템의 운영 체제 등에 의해 트리거(trigger)될 수 있다.
라이브러리 로딩 탐지 장치(100), 바이너리 로딩 모니터링부(110), 제1 DLL 필터링부(120), 제2 DLL 필터링부(130), DLL 삭제부(140), DLL 언로딩부(150), 데이터베이스부(160) 및 UI부(170)의 동작 및 기능에 대해서 아래에서 설명된다.
도 2는 일 실시예에 따른 라이브러리 로딩 탐지 방법의 흐름도이다.
단계(210)에서, 컴퓨터 시스템에 바이너리가 로드되면, 바이너리 로딩 모니터링부(110)는 바이너리의 로딩을 감지할 수 있다.
단계(215)에서, 바이너리의 로딩이 감지되면, 바이너리 로딩 모니터링부(110)는 로드된 바이너리가 DLL을 로드하는지 여부를 확인할 수 있다.
로드된 바이너리가 어떤 DLL도 로드하지 않는 경우, DLL에 의한 프리로드 DLL 공격의 가능성이 존재하지 않는다. 따라서, 후술될 라이브러리 로딩 탐지에 관련된 단계들(230, 235, 240, 250, 255, 260 및 270)은 수행될 필요가 없고, 단계(220)가 수행될 수 있다.
로드된 바이너리가 적어도 하나의 DLL을 로드하는 경우, 단계(230)가 수행될 수 있다. 말하자면, 후술될 단계들(230, 235, 240, 250, 255, 260 및 270)의 전부 또는 일부는 바이너리가 적어도 하나의 DLL을 로드하는 라이브러리인 경우 수행될 수 있다.
단계(220)에서, 바이너리 로딩 모니터링부(110)는 바이너리 모니터링 대기 모드에 진입할 수 있다. 컴퓨터 시스템에 다른 바이너리가 로드되면 단계(210)가 다시 수행될 수 있다.
이하에서는, 제1 DLL 필터링부(120) 및 제2 DLL 필터링부(130)에 의해 2단계의 바이너리 프리로드 취약점에 대한 탐지가 이루어질 수 있다.
단계(230)에서, 제1 DLL 필터링부(120)는 바이너리가 로드할 적어도 하나의 DLL 중 중복된 DLL 또는 존재하지 않는 DLL을 검출할 수 있다.
일 예에 따른 중복된 DLL 및 존재하지 않는 DLL의 검출에 대해 아래에서 도 3을 참조하여 설명된다.
단계(235)에서, 제1 DLL 필터링부(120)는 중복된 DLL 또는 존재하지 않는 DLL이 존재하는지 여부를 검사할 수 있다. 중복된 DLL 또는 존재하지 않는 DLL이 존재하는 경우, 단계(240)가 수행될 수 있다. 중복된 DLL 및 존재하지 않는 DLL이 존재하지 않는 경우, 단계(250)가 수행될 수 있다.
단계(240)에서, 제1 DLL 필터링부(120)는 중복된 DLL 또는 존재하지 않는 DLL에 대한 처리를 수행할 수 있다. 여기에서, DLL에 대한 처리는 프리로드 DLL에 대한 취약점이 발생하는 것을 미연에 방지하기 위한 처리일 수 있다.
일 예에 따른 중복된 DLL 및 존재하지 않는 DLL에 대한 처리에 대해 아래에서 도 4를 참조하여 설명된다.
단계(250)에서, 제2 DLL 필터링부(130)는 바이너리가 로드할 적어도 하나의 DLL 중 미사용 DLL을 검출할 수 있다.
미사용 DLL은 바이너리에 의해 호출되는 함수를 가지고 있지 않는 라이브러리일 수 있다.
일 예에 따른 미사용 DLL의 검출에 대해 아래에서 도 5를 참조하여 설명된다.
단계(255)에서, 제1 DLL 필터링부(120)는 미사용 DLL이 존재하는지 여부를 검사할 수 있다. 미사용 DLL이 존재하는 경우, 단계(260)가 수행될 수 있다. 미사용 DLL이 존재하지 않는 경우, 단계(270)가 수행될 수 있다.
단계(260)에서, 제2 DLL 필터링부(130)는 미사용 DLL에 대한 처리를 수행할 수 있다. DLL에 대한 처리는 프리로드 DLL에 대한 취약점이 발생하는 것을 미연에 방지하기 위한 처리일 수 있다.
일 예에 따른 미사용 DLL에 대한 처리에 대해 아래에서 도 6을 참조하여 설명된다.
단계(270)에서, DB부(160)는 데이터베이스를 갱신할 수 있다. 갱신된 데이터베이스는 단계들(230, 235, 240, 240, 250, 255 및 260)이 다시 반복될 때 사용될 수 있다.
데이터베이스의 갱신은 중앙집중식으로 이루어질 수 있다. 또한, 데이터베이스의 갱신은 분산 기법을 통해 이루어질 수도 있다.
일 예에 따른 데이터베이스의 갱신에 대해 아래에서 도 11을 참조하여 설명된다.
단계(270)의 실행 순서는 단지 예시적인 것이고, 단계(270)는 다른 단계들(210, 215, 220, 230, 235, 240, 240, 250, 255 및 260)과 병렬로 수행될 수 있다. 또한, 단계(270)는 다른 단계들(210, 215, 220, 230, 235, 240, 240, 250, 255 및 260) 중 2개의 단계들 사이에서 수행될 수도 있다.
절차가 종료한 후, 다시 단계(220)가 수행될 수 있고, 바이너리의 로딩에 따라 단계(210)가 수행될 수 있다.
도 3은 일 예에 따른 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 방법의 흐름도이다.
도 2를 잠조하여 전술된 단계(230)는 아래의 단계들(310, 320, 330 및 340)을 포함할 수 있다.
단계(310)에서, 제1 DLL 필터링부(120)는 바이너리를 분석함으로써 바이너리가 로드할 적어도 하나의 DLL의 목록을 생성할 수 있다.
또한, 목록은 적어도 하나의 다른 실행 파일을 포함할 수 있다 말하자면, 제1 DLL 필터링부(120)는 바이너리를 분석함으로써 바이너리가 로드할 적어도 하나의 DLL 및 실행 파일의 목록을 생성할 수 있다. 여기에서, 실행 파일은 DLL 외의 다른 바이너리 파일일 수 있다. 이하에서, DLL에 대한 설명은 실행 파일에도 적용될 수 있으며, "적어도 하나의 DLL"은 "적어도 하나의 DLL 및 실행 파일"로 대체될 수 있다.
바이너리가 로드할 적어도 하나의 DLL의 목록이 생성되면, 제1 DLL 필터링부(120)는 목록의 각 DLL에 대해서 아래의 단계들(320, 330 및 340)을 수행할 수 있다. 이하에서, 목록의 각 DLL을 대상(target) DLL로 명명한다.
단계(320)에서, 제1 DLL 필터링부(120)는 목록 내의 대상 DLL이 존재하는 파일 경로를 수집할 수 있다.
제1 DLL 필터링부(120)는 소정의 하나 이상의 파일 경로들에서 대상 DLL이 존재하는지 여부를 조사할 수 있다. 예를 들면, 대상 DLL이 존재하는지 여부에 대해 조사되는 파일 경로는 시스템 검사 경로를 포함할 수 있다.
시스템 검사 경로는 컴퓨터 시스템에서 DLL의 자동 로딩이 이루어지는 경로일 수 있다. 시스템 검사 경로는 복수일 수 있다.
단계(320)에서, 제1 DLL 필터링부(120)는 DB부(160)에게 시스템 검사 경로의 DB를 요청할 수 있고, DB부(160)는 제1 DLL 필터링부(120)에게 시스템 검사 경로의 DB를 제공할 수 있다. 시스템 검사 경로의 DB는 시스템 검사 경로의 목록을 포함할 수 있다.
제1 DLL 필터링부(120)가 시스템 검사 경로의 목록을 사용함에 따라, 제1 DLL 필터링부(120)의 검색의 효율성 및 탐지의 효율성이 향상될 수 있다.
단계(330)에서, 제1 DLL 필터링부(120)는 대상 DLL이 2개 이상의 파일 경로들에 존재하면 대상 DLL을 중복된 DLL로 선택할 수 있다.
중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분될 수 있다. 제1 DLL 필터링부(120)는 소정의 조건에 따라 대상 DLL을 중복된 DLL 및 비정상적으로 중복된 DLL 중 하나로 결정할 수 있다.
제1 DLL 필터링부(120)는 대상 DLL이 2개 이상의 파일 경로들에 존재하고, 대상 DLL이 정상 시스템 중복 파일이면, 대상 DLL이 정상적으로 중복된 DLL인 것으로 결정할 수 있다.
정상적인 컴퓨터 시스템에서도 컴퓨터 시스템의 내부에 중복된 DLL의 파일들이 존재할 수 있다. 정상 시스템 중복 파일은 정상적인 컴퓨터 시스템에서도 중복되는 것이 가능한 파일일 수 있다. 정상 시스템 중복 파일은 복수일 수 있다.
단계(330)에서, 제1 DLL 필터링부(120)는 DB부(160)에게 정상 시스템 중복 파일의 DB를 요청할 수 있고, DB부(160)는 제1 DLL 필터링부(120)에게 정상 시스템 중복 파일의 DB를 제공할 수 있다. 정상 시스템 중복 파일의 DB는 정상 시스템 중복 파일의 목록을 포함할 수 있다.
정상 시스템 중복 파일의 목록은 제1 DLL 필터링부(120)에 의한 필터링에 대한 화이트 리스트(white list)일 수 있다. 제1 DLL 필터링부(120)가 정상 시스템 중복 파일의 목록을 사용함에 따라, 제1 DLL 필터링부(120)의 오탐률이 감소될 수 있다.
제1 DLL 필터링부(120)는 대상 DLL이 2개 이상의 파일 경로들에 존재하고, 상기의 2개 이상의 파일 경로들의 모두가 정상 시스템 중복 경로이면, 대상 DLL을 정상적으로 중복된 DLL로 결정할 수 있다.
정상적인 컴퓨터 시스템에서도 컴퓨터 시스템의 내부에 중복된 DLL의 파일들이 존재할 수 있다. 정상 시스템 중복 경로는 정상적인 컴퓨터 시스템에서도 DLL이 중복되어 존재하는 것이 가능한 경로일 수 있다. 예를 들면, 정상 시스템 중복 경로에 DLL이 존재한다는 것은 DLL이 비정상적으로 중복된 DLL인지 여부를 결정함에 있어서 고려의 대상에서 제외될 수 있다.
단계(330)에서, 제1 DLL 필터링부(120)는 DB부(160)에게 정상 시스템 중복 경로의 DB를 요청할 수 있고, DB부(160)는 제1 DLL 필터링부(120)에게 정상 시스템 중복 경로의 DB를 제공할 수 있다. 정상 시스템 중복 경로의 DB는 정상 시스템 중복 경로의 목록을 포함할 수 있다.
정상 시스템 중복 경로의 목록은 제1 DLL 필터링부(120)에 의한 필터링에 대한 화이트 리스트일 수 있다. 제1 DLL 필터링부(120)가 정상 시스템 중복 경로의 목록을 사용함에 따라, 제1 DLL 필터링부(120)의 오탐률이 감소될 수 있다.
제1 DLL 필터링부(120)는 대상 DLL이 정상 시스템 중복 파일이 아니고, 대상 DLL이 존재하는 2개 이상의 파일 경로들 중 정상 시스템 중복 경로가 아닌 경로가 존재하면, 제1 DLL 필터링부(120)는 대상 DLL을 비정상적으로 중복된 DLL로 결정할 수 있다.
정상적으로 중복된 DLL은 단계(240)에서의 처리의 대상에서 제외될 수 있다. 말하자면, 단계(230) 및 단계(240)에서의 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL 중 비정상적으로 중복된 DLL만을 의미할 수 있다.
단계(340)에서, 제1 DLL 필터링부(120)는 대상 DLL이 존재하는 파일 경로가 수집되지 않으면 대상 DLL을 존재하지 않는 DLL로 선택할 수 있다.
도 4는 일 예에 따른 중복된 DLL 및 존재하지 않는 DLL에 대한 처리를 수행하는 방법의 흐름도이다.
도 4를 참조하여 전술된 단계(240)는 아래의 단계들(410, 420 및 430)을 포함할 수 있다.
단계(410)에서, 제1 DLL 필터링부(120)는 UI부(170)에게 중복된 DLL 또는 존재하지 않는 DLL의 정보를 출력하도록 요청할 수 있으며, UI부(170)는 중복된 DLL 또는 존재하지 않는 DLL의 정보를 출력할 수 있다.
중복된 DLL 또는 존재하지 않는 DLL의 정보를 출력함으로써, UI부(170)는 잠재적인 바이너리 프리로드 취약점이 존재함을 사용자에게 알릴 수 있다.
중복된 DLL 또는 존재하지 않는 DLL의 정보가 출력되면, 컴퓨터 시스템 또는 라이브러리 로딩 탐지 장치(100)의 사용자는 중복된 DLL 또는 존재하지 않는 DLL에 대한 처리를 결정할 수 있다. 말하자면, 사용자에 의해 중복된 DLL 또는 존재하지 않는 DLL의 로딩의 여부가 결정될 수 있다.
예를 들면, 사용자는 중복되거나 존재하지 않는 DLL의 목록이 출력되면, 출력된 목록의 DLL 중에서 삭제할 DLL을 선택할 수 있다.
단계(420)에서, UI부(170)는 사용자에 의해 입력된 중복된 DLL 또는 존재하지 않는 DLL의 삭제의 요청을 수신할 수 있다. UI부(170)는 수신된 요청을 DLL 삭제부(140)로 전송할 수 있다.
단계(430)에서, DLL 삭제부(140)는 삭제가 요청된 중복된 DLL 또는 존재하지 않는 DLL을 삭제할 수 있다.
또는, 단계(420)에서, UI부(170)는 사용자에 의해 입력된 중복된 DLL의 허용의 요청을 수신할 수 있다. UI부(170)는 수신된 요청을 DLL 삭제부(140)로 전송할 수 있다. 단계(430)에서, DLL 삭제부(140)는 허용이 요청되지 않은 중복된 DLL 또는 존재하지 않는 DLL을 삭제할 수 있다.
단계(420)에서의 사용자의 요청의 수신을 통해, 중복된 DLL의 로딩 여부 또는 중복된 DLL의 삭제 여부가 사용자에 의해 결정될 수 있다.
단계(430)에서의 중복된 DLL 또는 존재하지 않는 DLL의 강제적인 삭제를 통해 미사용 DLL로 인해 야기되는 잠재적인 바이너리 프리로드 취약점이 제거될 수 있다.
도 5는 일 예에 따른 미사용 DLL을 검출하는 방법의 흐름도이다.
도 2를 잠조하여 전술된 단계(250)는 아래의 단계들(510, 520 및 530)을 포함할 수 있다.
단계(510)에서, 제2 DLL 필터링부(120)는 도 3을 참조하여 전술된 단계(310)에서 생성된 바이너리가 로드할 적어도 하나의 DLL의 목록을 획득할 수 있다. 또는, 제2 DLL 필터링부(120)는 바이너리를 분석함으로써 바이너리가 로드할 적어도 하나의 DLL의 목록을 생성할 수 있다.
단계(520)에서, 제2 DLL 필터링부(130)는 바이너리가 사용하는 적어도 하나의 함수를 추출할 수 있다. 또한, 제2 DLL 필터링부(130)는 바이너리가 사용하는 적어도 하나의 함수의 목록을 생성할 수 있다. 여기에서, 바이너리가 사용하는 적어도 하나의 함수는 바이너리에서 실제로 호출되는 함수일 수 있다.
도 5에서 도시된 단계(510) 및 단계(520)의 실행 순서는 단지 예시적인 것일 수 있다.
제2 DLL 필터링부(130)는 목록의 각 DLL에 대해서 아래의 단계(530)를 수행할 수 있다. 이하에서, 목록의 각 DLL을 대상 DLL로 명명한다.
단계(530)에서, 제2 DLL 필터링부(130)는 대상 DLL의 내부에 바이너리가 사용하는 적어도 하나의 함수 중 어떤 함수도 존재하지 않으면 대상 DLL을 미사용 DLL로서 결정할 수 있다.
대상 DLL은 적어도 하나의 함수를 포함할 수 있다. 제2 DLL 필터링부(130)는 대상 DLL의 적어도 하나의 함수의 목록을 생성할 수 있으며, 바이너리가 사용하는 적어도 하나의 함수의 목록 및 대상 DLL의 적어도 하나의 함수의 목록을 서로 간에 비교할 수 있다. 제2 DLL 필터링부(130)는 바이너리가 사용하는 적어도 하나의 함수의 목록 및 대상 DLL의 적어도 하나의 함수의 목록에 공통되는 함수가 존재하면 대상 DLL이 미사용 DLL이 아닌 것으로 결정할 수 있다. 또한, 제2 DLL 필터링부(130)는 바이너리가 사용하는 적어도 하나의 함수의 목록 및 대상 DLL의 적어도 하나의 함수의 목록에 공통되는 함수가 존재하지 않으면 대상 DLL을 미사용 DLL로서 결정할 수 있다.
도 6은 일 예에 따른 미사용 DLL에 대한 처리를 수행하는 방법의 흐름도이다.
단계(610)에서, 제2 DLL 필터링부(130)는 UI부(170)에게 미사용 DLL의 정보를 출력하도록 요청할 수 있으며, UI부(170)는 미사용 DLL의 정보를 출력할 수 있다.
미사용 DLL의 정보를 출력함으로써, UI부(170)는 잠재적인 바이너리 프리로드 취약점이 존재함을 사용자에게 알릴 수 있다.
미사용 DLL의 정보가 출력되면, 컴퓨터 시스템 또는 라이브러리 로딩 탐지 장치의 사용자는 미사용 DLL에 대한 처리를 결정할 수 있다.
예를 들면, 사용자는 미사용 DLL의 목록이 출력되면, 출력된 목록의 DLL 중에서 언로드할 DLL을 선택할 수 있다.
단계(620)에서, UI부(170)는 사용자에 의해 입력된 미사용 DLL의 언로딩의 요청을 수신할 수 있다. UI부(170)는 수신된 요청을 DLL 언로드부(150)로 전송할 수 있다.
단계(630)에서, DLL 언로드부(150)는 언로딩이 요청된 미사용 DLL을 언로드할 수 있다.
단계(630)에서의 DLL의 강제적인 언로드를 통해 미사용 DLL로 인해 야기되는 잠재적인 바이너리 프리로드 취약점이 제거될 수 있다.
도 7은 일 예에 따른 바이너리가 로드할 적어도 하나의 DLL의 목록을 도시한다.
도 7에서 도시된 DLL들의 목록은 단계(310)에서 제1 DLL 필터링부(120)에 의해 생성된 바이너리가 로드할 적어도 하나의 DLL의 목록일 수 있다.
도시된 것과 같이 4개의 DLL들이 바이너리에 의해 로드될 DLL로서 검출되었다.
도 8은 일 예에 따른 중복된 DLL 및 존재하지 않는 DLL으로의 분류를 나타낸다.
도 3을 참조해서 전술된 것과 같이, 단계(320), 단계(330) 및 단계(340)는 도 7에서 도시된 복수의 DLL들의 각 DLL에 대해서 수행될 수 있다.
도 8에서 제1 행은 DLL의 명칭을 나타낼 수 있다. 제2 행은 DLL이 발견된 경로를 나타낼 수 있다. 제3 행은 제1 DLL 필터링부(120))mp" DLL을 어떤 종류의 DLL로 분류하였는지를 나타낼 수 있다.
"aaa.dll"은 "c:\temp"의 경로에서만 발견되었다. 따라서, "aaa.dll"은 중복된 DLL 또는 미존재 DLL로 분류되지 않을 수 있다.
"bbb.dll"은 "c:\Program Files" 및 "%windows%system32"의 경로에서 발견되었다. "c:\Program Files" 및 "%windows%system32"의 경로는 모두 정상 시스템 중복 경로일 수 있다. 따라서, "aaa.dll"은 정상적으로 중복된 DLL로 분류될 수 있다.
"ccc.dll"은 "c:\temp " 및 "%windows%system32"의 경로에서 발견되었다. "c:\Program Files" 및 "%windows%system32" 중 "c:\Program Files"는 정상 시스템 중복 경로가 아닐 수 있다. 따라서, "aaa.dll"은 비정상적으로 중복된 DLL로 분류될 수 있다
"ddd.dll"은 어떤 경로에서도 발견되지 않았다. 따라서, "ddd.dll"은 존재하지 않는 DLL로 분류될 수 있다.
도 4를 참조하여 전술된 단계(410)에서, 제1 DLL 필터링부(120) 및 UI부(170)는 바이너리가 로드할 적어도 하나의 DLL에 대해서 도 8에서 도시된 것과 같은 정보를 출력할 수 있다.
도 8에서 도시된 것과 같이, 제1 DLL 필터링부(120) 및 UI부(170)는 비정상적으로 중복된 DLL인 "ccc.dll" 및 존재하지 않는 DLL인 "ddd.dll"에 의해 잠재적인 바이너리 프리로드 취약점이 발생한다는 것을 사용자에게 알릴 수 있다.
도 9는 일 예에 따른 바이너리가 사용하는 적어도 하나의 함수의 목록을 나타낸다.
도 9에서 도시된 함수들의 목록은 단계(510)에서 제2 DLL 필터링부(130)에 의해 추출된 바이너리가 사용하는 적어도 하나의 함수일 수 있다.
도시된 것과 같이 4개의 함수들이 바이너리에 의해 사용될 함수로서 추출되었다.
도 10은 일 예에 따른 미사용 DLL로의 분류를 나타낸다.
아래에서는, 도 7에서 도시된 4개의 DLL들이 바이너리에 의해 로드될 DLL로서 검출된 경우에서, 검출된 DLL들의 각각이 미사용 DLL인지 여부를 나타낸다.
도 10에서 제1 행은 DLL의 명칭을 나타낼 수 있다. 제2 행은 DLL의 적어도 하나의 함수의 목록을 나타낼 수 있다. 제3 행은 제2 DLL 필터링부(130)가 DLL을 어떤 종류의 DLL로 분류하였는지를 나타낼 수 있다.
"aaa.dll"은 "a()"를 포함한다. "a()"는 바이너리가 사용하는 함수 중 하나이다. 따라서, "aaa.dll"은 미사용 DLL로 분류되지 않을 수 있다.
"bbb.dll"은 "b()"를 포함한다. "b()"는 바이너리가 사용하는 함수 중 하나이다. 따라서, "bbb.dll"은 미사용 DLL로 분류되지 않을 수 있다.
"ccc.dll"은 "c()" 및 "d()"를 포함한다. "c()" 및 "d()"의 각각은 바이너리가 사용하는 함수 중 하나이다. 따라서, "ccc.dll"은 미사용 DLL로 분류되지 않을 수 있다.
"ddd.dll"은 "e()"를 포함한다. "e()"는 바이너리가 사용하는 함수 중 하나가 아니다. 또한, "ddd.dll"은 바이너리가 사용하는 적어도 하나의 함수 중 어떤 함수도 포함하지 않는다. "ddd.dll"은 미사용 DLL로 분류될 수 있다.
도 6를 참조하여 전술된 단계(610)에서, 제2 DLL 필터링부(130) 및 UI부(170)는 바이너리가 로드할 적어도 하나의 DLL에 대해서 도 10에서 도시된 것과 같은 정보를 출력할 수 있다.
도 10에서 도시된 것과 같이, 제2 DLL 필터링부(130) 및 UI부(170)는 미사용 DLL인 "ddd.dll"에 의해 잠재적인 바이너리 프리로드 취약점이 발생한다는 것을 사용자에게 알릴 수 있다.
도 11은 일 예에 따른 DB 갱신 방법의 흐름도이다.
도 2를 참조하여 전술된 단계(270)는 단계(1110)을 포함할 수 있다.
단계(1110)에서, DB부(160)는 업데이트(update) 서버와의 상호작용(interaction)을 통해 DB를 갱신할 수 있다.
DB부(160)는 업데이트 서버와의 상호작용을 통해 시스템 검사 경로의 DB, 정상 시스템 중복 파일의 DB 및 정상 시스템 중복 경로의 DB 중 적어도 하나의 DB를 갱신할 수 있다.
단계(1110)는 단계(1120), 단계(1130) 및 단계(1140)를 포함할 수 있다. 단계(1110)가 수행되면 단계(1120), 단계(1130) 및 단계(1140) 중 적어도 하나의 단계가 수행될 수 있다.
단계(1120)에서, DB부(160)는 시스템 검사 경로의 DB를 갱신할 수 있다.
DB부(160)는 업데이트 서버와의 상호작용을 통해 시스템 검사 경로의 DB 내의 시스템 검사 경로의 목록을 갱신할 수 있다.
단계(1130)에서, DB부(160)는 정상 시스템 중복 파일의 DB를 갱신할 수 있다.
DB부(160)는 업데이트 서버와의 상호작용을 통해 정상 시스템 중복 파일의 DB 내의 정상 시스템 중복 파일의 목록을 갱신할 수 있다.
단계(1140)에서, DB부(160)는 정상 시스템 중복 경로의 DB를 갱신할 수 있다.
DB부(160)는 업데이트 서버와의 상호작용을 통해 정상 시스템 중복 경로의 DB 내의 정상 시스템 중복 경로의 목록을 갱신할 수 있다.
도 12은 일 예에 따른 정상 시스템 중복 파일의 DB의 스키마를 나타낸다.
도 12에서 도시된 것과 같이 정상 시스템 중복 파일의 스키마는 파일 명칭(name), 파일의 경로의 목록, 파일의 크기(size) 및 운영 체제의 버전(version)을 포함할 수 있다.
정상 시스템 중복 파일의 DB는 컴퓨터 시스템에서 정상적으로 중복될 수 있는 파일의 화이트 리스트일 수 있다.
도 12에서, "PresentationFramework.dll"은 파일 명칭을 나타낸다. "c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\" 및 "c:\Windows\assembly\GAC_MSIL\PresentationFramework\3.0.0.0_31bf3856ad364e35\"의 각각은 파일의 경로를 나타낸다. "1024byte"는 파일의 크기가 1024byte임을 나타낸다. "Win7"은 운영체제의 버전을 나타낸다.
도 13는 일 예에 따른 시스템 검사 경로의 DB의 스키마를 나타낸다.
시스템 검사 경로의 DB의 스키마는 시스템 검사 경로를 나타낼 수 있다. 시스템 검사 경로의 DB의 스키마는 적어도 하나의 시스템 검사 경로를 포함할 수 있다.
도 13에서, 시스템 검사 경로로서, "%windows%", "%Program Files" 및 "%comm%"이 도시되었다.
도 14은 일 실시예에 따른 라이브러리 로딩 탐지 장치를 구현하는 전자 장치를 도시한다.
라이브러리 로딩 탐지 장치(100)는 도 14에서 도시된 전자 장치(1410)로서 구현될 수 있다.
라이브러리 로딩 탐지 장치(100)는 컴퓨터에 의해 독출(read)될 수 있는 기록매체를 포함하는 컴퓨터 시스템에서 구현될 수 있다. 도 14에 도시된 바와 같이, 전자 장치(1400)는 버스(1422)를 통하여 서로 통신하는 적어도 하나의 프로세서(processor)(1421), 메모리(1423), 사용자 인터페이스(User Interface; UI) 입력 디바이스(1426), UI 출력 디바이스(1427) 및 저장소(1428)를 포함할 수 있다. 또한, 전자 장치(1400)는 네트워크(1430)에 연결되는 네트워크 인터페이스(1429)를 더 포함할 수 있다. 프로세서(1421)는 중앙 처리 장치(Central Processing Unit; CPU) 또는 메모리(1423)나 저장소(1428)에 저장된- 프로세싱(processing) 명령어(instruction)들을 실행하는 반도체 장치일 수 있다. 메모리(1423) 및 저장소(1428)는 다양한 형태의 휘발성 또는 비휘발성 저장 매체일 수 있다. 예를 들어, 메모리는 롬(ROM)(1424)이나 램(RAM)(1425)을 포함할 수 있다.
라이브러리 로딩 탐지 장치(100)의 적어도 하나의 모듈은 메모리(1423)에 저장될 수 있고, 적어도 하나의 프로세서(1421)에 의하여 실행되도록 구성될 수 있다. 라이브러리 로딩 탐지 장치(100)의 데이터 또는 정보의 통신과 관련된 기능은 네트워크 인터페이스(1429)를 통해 수행될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.
100: 라이브러리 로딩 탐지 장치
110: 바이너리 로딩 모니터링부
120: 제1 DLL 필터링부
130: 제2 DLL 필터링부
140: DLL 삭제부
150: DLL 언로딩부
160: DB부
170: UI부

Claims (20)

  1. 바이너리의 로딩을 감지하는 단계;
    상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 단계; 및
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 단계
    를 포함하고,
    상기 검출하는 단계는,
    상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL의 목록을 생성하는 단계; 및
    상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및
    상기 DLL이 2개 이상의 파일 경로들에 존재하면 상기 DLL을 상기 중복된 DLL로 선택하는 단계
    를 포함하고,
    상기 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분되며,
    상기 DLL이 2개 이상의 파일 경로들에 존재하고, 상기 DLL이 정상 시스템 중복 파일이면, 상기 DLL은 정상적으로 중복된 DLL인 라이브러리 로딩 탐지 방법.
  2. 제1항에 있어서,
    상기 바이너리가 DLL을 로드하는지 여부를 확인하는 단계
    를 더 포함하고,
    상기 검출하는 단계 및 상기 수행하는 단계는 상기 바이너리가 DLL을 로드하는 라이브러리인 경우 수행되는 라이브러리 로딩 탐지 방법.
  3. 삭제
  4. 삭제
  5. 제1항에 있어서,
    업데이트 서버와의 상호작용을 통해 상기 정상 시스템 중복 파일의 목록을 갱신하는 단계
    를 더 포함하는 라이브러리 로딩 탐지 방법.
  6. 바이너리의 로딩을 감지하는 단계;
    상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 단계; 및
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 단계
    를 포함하고,
    상기 검출하는 단계는,
    상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL의 목록을 생성하는 단계; 및
    상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및
    상기 DLL이 2개 이상의 파일 경로들에 존재하면 상기 DLL을 상기 중복된 DLL로 선택하는 단계
    를 포함하고,
    상기 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분되며,
    상기 DLL이 2개 이상의 파일 경로들에 존재하고, 상기 2개 이상의 파일 경로들의 모두가 정상 시스템 중복 경로이면, 상기 DLL은 정상적으로 중복된 DLL인 라이브러리 로딩 탐지 방법.
  7. 제6항에 있어서,
    업데이트 서버와의 상호작용을 통해 상기 정상 시스템 중복 경로의 목록을 갱신하는 단계
    를 더 포함하는 라이브러리 로딩 탐지 방법.
  8. 바이너리의 로딩을 감지하는 단계;
    상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 단계; 및
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 단계
    를 포함하고,
    상기 검출하는 단계는,
    상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL의 목록을 생성하는 단계; 및
    상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및
    상기 DLL이 2개 이상의 파일 경로들에 존재하면 상기 DLL을 상기 중복된 DLL로 선택하는 단계
    를 포함하고,
    상기 중복된 DLL은 정상적으로 중복된 DLL 및 비정상적으로 중복된 DLL로 구분되며,
    상기 DLL이 정상 시스템 중복 파일이 아니고, 상기 DLL이 존재하는 상기 2개 이상의 파일 경로들 중 정상 시스템 중복 경로가 아닌 경로가 존재하면, 상기 DLL은 비정상적으로 중복된 DLL인 라이브러리 로딩 탐지 방법.
  9. 바이너리의 로딩을 감지하는 단계;
    상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하는 단계; 및
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 단계
    를 포함하고,
    상기 검출하는 단계는,
    상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL의 목록을 생성하는 단계;
    상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및
    상기 DLL이 2개 이상의 파일 경로들에 존재하면 상기 DLL을 상기 중복된 DLL로 선택하는 단계
    를 포함하고,
    상기 DLL이 존재하는지 여부에 대해 조사되는 파일 경로는 시스템 검사 경로를 포함하는 라이브러리 로딩 탐지 방법.
  10. 제9항에 있어서,
    업데이트 서버와의 상호작용을 통해 상기 시스템 검사 경로의 목록을 갱신하는 단계
    를 더 포함하는 라이브러리 로딩 탐지 방법.
  11. 제9항에 있어서,
    상기 검출하는 단계는,
    상기 바이너리를 분석함으로써 상기 적어도 하나의 DLL 의 목록을 생성하는 단계;
    상기 목록 내의 DLL이 존재하는 파일 경로를 수집하는 단계; 및
    상기 DLL이 존재하는 파일 경로가 수집되지 않으면 상기 DLL을 상기 존재하지 않는 DLL로 선택하는 단계
    를 더 포함하는 라이브러리 로딩 탐지 방법.
  12. 제9항에 있어서,
    상기 처리를 수행하는 단계는,
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL을 삭제하는 단계
    를 포함하는 라이브러리 로딩 탐지 방법.
  13. 제12항에 있어서,
    상기 처리를 수행하는 단계는,
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL의 정보를 출력하는 단계; 및
    상기 중복된 DLL 또는 상기 존재하지 않는 DLL의 삭제의 요청을 수신하는 단계
    를 더 포함하는 라이브러리 로딩 탐지 방법.
  14. 바이너리의 로딩을 감지하는 단계;
    상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 미사용 DLL을 검출하는 단계; 및
    상기 미사용 DLL에 대한 처리를 수행하는 단계
    를 포함하고,
    상기 미사용 DLL은 상기 바이너리에 의해 호출되는 함수를 가지고 있지 않는 라이브러리이고,
    상기 검출하는 단계는,
    DLL의 내부에 상기 바이너리가 사용하는 적어도 하나의 함수 중 어떤 함수도 존재하지 않으면 상기 DLL을 상기 미사용 DLL로서 결정하는 단계
    를 포함하는 라이브러리 로딩 탐지 방법.
  15. 삭제
  16. 제14항에 있어서,
    상기 바이너리가 사용하는 적어도 하나의 함수는 상기 바이너리에서 실제로 호출되는 함수인 라이브러리 로딩 탐지 방법.
  17. 제14항에 있어서,
    상기 처리를 수행하는 단계는,
    상기 미사용 DLL을 언로드하는 단계
    를 포함하는 라이브러리 로딩 탐지 방법.
  18. 제17항에 있어서,
    상기 처리를 수행하는 단계는,
    상기 미사용 DLL의 정보를 출력하는 단계; 및
    상기 미사용 DLL의 언로딩의 요청을 수신하는 단계
    를 더 포함하는 라이브러리 로딩 탐지 방법.
  19. 바이너리의 로드를 감지하는 바이너리 로딩 모니터링부;
    상기 바이너리가 로드할 적어도 하나의 동적 링크 라이브러리(Dynamic Link Library; DLL) 중 중복된 DLL 또는 존재하지 않는 DLL을 검출하고, 상기 중복된 DLL 또는 상기 존재하지 않는 DLL에 대한 처리를 수행하는 제1 DLL 필터링부; 및
    상기 적어도 하나의 DLL 중 미사용 DLL을 검출하고, 상기 미사용 DLL에 대한 처리를 수행하는 제2 DLL 필터링부
    를 포함하는 라이브러리 로딩 탐지 장치.
  20. 삭제
KR1020150108978A 2015-07-31 2015-07-31 라이브러리 적재 탐지를 위한 방법 및 장치 KR101688632B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020150108978A KR101688632B1 (ko) 2015-07-31 2015-07-31 라이브러리 적재 탐지를 위한 방법 및 장치
US14/934,999 US20170032121A1 (en) 2015-07-31 2015-11-06 Method and apparatus for detecting loading of library

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150108978A KR101688632B1 (ko) 2015-07-31 2015-07-31 라이브러리 적재 탐지를 위한 방법 및 장치

Publications (1)

Publication Number Publication Date
KR101688632B1 true KR101688632B1 (ko) 2016-12-22

Family

ID=57723999

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150108978A KR101688632B1 (ko) 2015-07-31 2015-07-31 라이브러리 적재 탐지를 위한 방법 및 장치

Country Status (2)

Country Link
US (1) US20170032121A1 (ko)
KR (1) KR101688632B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104217165B (zh) * 2014-09-16 2016-07-06 百度在线网络技术(北京)有限公司 文件的处理方法及装置
US11481482B2 (en) * 2019-09-09 2022-10-25 Mcafee, Llc Securing an application framework from shared library sideload vulnerabilities
US11232199B2 (en) * 2019-12-27 2022-01-25 Mcafee, Llc Methods and apparatus to defend against DLL side-loading attacks
CN113918235B (zh) * 2021-09-17 2023-11-17 贝壳找房(北京)科技有限公司 应用加载的方法及装置、存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100762973B1 (ko) * 2007-02-07 2007-10-02 (주)노애드 컴퓨터의 악성코드 탐지 및 제거 방법과 그 장치, 그방법을 컴퓨터에서 실행시키기 위한 프로그램 코드를기록한 기록매체
KR100938672B1 (ko) * 2007-11-20 2010-01-25 한국전자통신연구원 악성 코드에 의해 삽입된 동적 연결 라이브러리 검출 장치 및 방법
KR20120014673A (ko) * 2010-08-10 2012-02-20 주식회사 잉카인터넷 위장 동적연결라이브러리 삽입에 의한 프로세스 변조 검출방법
KR101366544B1 (ko) * 2012-11-09 2014-02-26 (주)네오위즈게임즈 해킹을 위한 dll 루트킷 감지 방법 및 장치

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5819091A (en) * 1994-12-22 1998-10-06 Arendt; James Wendell User level control of degree of client-side processing
US6363433B1 (en) * 1997-03-12 2002-03-26 Microsoft Corporation Method and mechanism for client-side handling of extensions originally written for servers
US6839709B2 (en) * 2002-03-19 2005-01-04 Intel Corporation Layered resource structure and method
US7197417B2 (en) * 2003-02-14 2007-03-27 Advantest America R&D Center, Inc. Method and structure to develop a test program for semiconductor integrated circuits
US6839301B2 (en) * 2003-04-28 2005-01-04 Micron Technology, Inc. Method and apparatus for improving stability and lock time for synchronous circuits
US7321897B2 (en) * 2004-01-22 2008-01-22 Microsoft Corporation Binary dependency database
US20060282840A1 (en) * 2005-05-25 2006-12-14 Stone Peter S Dynamic mapping of shared libraries
US8572739B1 (en) * 2009-10-27 2013-10-29 Trend Micro Incorporated Detection of malicious modules injected on legitimate processes

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100762973B1 (ko) * 2007-02-07 2007-10-02 (주)노애드 컴퓨터의 악성코드 탐지 및 제거 방법과 그 장치, 그방법을 컴퓨터에서 실행시키기 위한 프로그램 코드를기록한 기록매체
KR100938672B1 (ko) * 2007-11-20 2010-01-25 한국전자통신연구원 악성 코드에 의해 삽입된 동적 연결 라이브러리 검출 장치 및 방법
KR20120014673A (ko) * 2010-08-10 2012-02-20 주식회사 잉카인터넷 위장 동적연결라이브러리 삽입에 의한 프로세스 변조 검출방법
KR101366544B1 (ko) * 2012-11-09 2014-02-26 (주)네오위즈게임즈 해킹을 위한 dll 루트킷 감지 방법 및 장치

Also Published As

Publication number Publication date
US20170032121A1 (en) 2017-02-02

Similar Documents

Publication Publication Date Title
US20150310211A1 (en) Method, apparatus and system for detecting malicious process behavior
RU2571723C2 (ru) Система и способ для снижения нагрузки на операционную систему при работе антивирусного приложения
US10372444B2 (en) Android dynamic loading file extraction method, recording medium and system for performing the method
US8627478B2 (en) Method and apparatus for inspecting non-portable executable files
RU2454705C1 (ru) Система и способ защиты компьютерного устройства от вредоносных объектов, использующих сложные схемы заражения
JP5265061B1 (ja) 悪意のあるファイル検査装置及び方法
KR101688632B1 (ko) 라이브러리 적재 탐지를 위한 방법 및 장치
US20130205396A1 (en) Detecting Malicious Software
CN107203717B (zh) 在虚拟机上执行文件的防病毒扫描的***和方法
CN106055976B (zh) 文件检测方法及沙箱控制器
US10839074B2 (en) System and method of adapting patterns of dangerous behavior of programs to the computer systems of users
US20140237590A1 (en) Simultaneous screening of untrusted digital files
US11120124B2 (en) Method for detecting a deviation of a security state of a computing device from a desired security state
JP6000465B2 (ja) プロセス検査装置、プロセス検査プログラムおよびプロセス検査方法
US11893110B2 (en) Attack estimation device, attack estimation method, and attack estimation program
US20190121975A1 (en) System and method for adapting patterns of malicious program behavior from groups of computer systems
JP2006330864A (ja) サーバ計算機システムの制御方法
US10893090B2 (en) Monitoring a process on an IoT device
JP6787841B2 (ja) アクセス制御装置、アクセス制御方法およびアクセス制御プログラム
KR101880689B1 (ko) 악성코드 진단장치 및 방법
KR101900190B1 (ko) Iat 후킹 탐지 방법 및 장치
US20170053117A1 (en) Management apparatus and management method
CN113688384A (zh) 程序的检测方法、装置、电子设备和介质
KR101754964B1 (ko) 악성 행위 탐지 방법 및 시스템
US20240223602A1 (en) System and method for pattern-based detection and mitigation of zero-day vulnerability exploitation

Legal Events

Date Code Title Description
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190925

Year of fee payment: 4