KR20120087508A - Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체 - Google Patents

Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체 Download PDF

Info

Publication number
KR20120087508A
KR20120087508A KR1020110008740A KR20110008740A KR20120087508A KR 20120087508 A KR20120087508 A KR 20120087508A KR 1020110008740 A KR1020110008740 A KR 1020110008740A KR 20110008740 A KR20110008740 A KR 20110008740A KR 20120087508 A KR20120087508 A KR 20120087508A
Authority
KR
South Korea
Prior art keywords
rootkit
lkm
information
kernel
file
Prior art date
Application number
KR1020110008740A
Other languages
English (en)
Other versions
KR101223594B1 (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 KR1020110008740A priority Critical patent/KR101223594B1/ko
Publication of KR20120087508A publication Critical patent/KR20120087508A/ko
Application granted granted Critical
Publication of KR101223594B1 publication Critical patent/KR101223594B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1451Management of the data involved in backup or backup restore by selection of backup contents

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체에 있어서, (a) 실행되고 있는 프로세스의 상태를 나타내주는 명령어(이하 프로세스 상태 명령어)를 실행하여, 제1 프로세스 리스트를 생성하는 단계; (b) 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성하는 단계; (c) 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출하는 단계; 및, (d) 악성추정 프로세스가 검출되면, 운영정보를 백업하는 단계를 포함하는 구성을 마련한다.
상기와 같은 장치 및 방법에 의하여, LKM 루트킷에 의해 컴퓨터 시스템이 침입되면 즉시 이를 검출하여 시스템의 중요한 자료를 백업시킴으로써, 시스템 피해와 침입자 추적 등 사후조사를 할 때 보다 신뢰성 있는 정보를 제공할 수 있다.

Description

LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체 { A realtime operational information backup method by dectecting LKM rootkit and the recording medium thereof }
본 발명은 LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체에 관한 것이다.
특히, 본 발명은 프로세스 상태 명령어나 프로세스 디렉토리에 의하여 프로세스 목록을 구하고, 운영체제의 프로세스 구조체로부터 프로세스 목록을 구하여, 양 목록을 대비하여 악성 프로세스(또는 루트킷 프로세스)를 추정하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체에 관한 것이다.
일반적으로, 임베디드 시스템에서 대표적으로 사용되는 모놀리틱 커널(Monolithic Kernel)은 임베디드 리눅스(Embedded Linux), 심비안(Symbian), 윈씨이(WinCE), 윈모바일(WinMobile) 등이 있다. 이러한 모놀리틱 커널은 내부적으로 여러 하위 모듈로 나뉘어진 하나의 커다란 프로세스가 커널을 이룬다. 즉, 커널이 하나의 큰 실행 이미지로 이루어진다.
따라서 디바이스 드라이버 등 커널의 내용이 변경되면 커널을 컴파일하고 재부팅해야 한다. 이는 리눅스 서버 운영자가 많은 작업시간을 낭비하도록 만든다. 이런 불편함을 없애기 위한 것이 적재 가능한 커널 모듈(LKM, loadable kernel module)이다. LKM은 이러한 동적인 기능을 제공하는 메커니즘으로 시스템 콜 또는 커널의 자원 요청에 따라 동적으로 필요한 모듈만 로드하거나 언로드하는 기능을 제공한다. 즉, 리눅스 커널에 새로운 기능을 추가할 때 실행중인 리눅스 커널을 종료하지 않고 모듈에서의 등록, 해제, 함수호출 등을 수행할 수 있다. LKM 개념은 윈도우 시스템에서의 플러그 앤 플레이의 개념과 유사하다.
하지만 공격자는 이러한 편리한 기능을 악용하여 자신이 만든 커널 모듈을 시스템에 탑재하고 시스템을 마음대로 통제할 수 있다. 이러한 편리성이 보안 측면에서는 적이 되는 것이다.
백도어는 패스워드 크래킹을 통해 루트(Root)권한을 획득한 침입자가 패스워드 없이 시스템에 재차 접근할 수 있도록 비밀리에 설치한 프로그램이다. 그 중 LKM 백도어는 LKM이 이미 실행중인 커널의 일부를 추가하거나 변경할 수 있는 점을 이용한 백도어이다. LKM 백도어는 시간이 갈수록 점점 그 기법이 고도화되고 다양화되고 있는 추세이다.
거의 대부분의 LKM 백도어는 정상적인 시스템 콜을 가로챈 뒤, 공격자가 만든 시스템 콜 함수가 실행되도록 하는 방법을 사용한다. 시스템 콜은 커널 내에 있는 전역변수인 시스템 콜 테이블에 정의된 시스템 콜 함수의 주소를 참조하여 수행된다. LKM 백도어는 이 시스템 콜의 주소를 공격자가 만든 시스템 콜 함수의 주소로 바꾸는 역할을 한다. 그리고 이런 기술이 점점 발전해 최근 이러한 시스템 콜을 가로채지 않고 시스템 콜 함수의 코드를 직접 수정하는 방법도 소개되었다.
한편, 루트킷(rootkit)은 시스템 침입 후 침입 사실을 숨긴 채 차후의 침입을 위한 백도어, 트로이목마 설치, 원격 접근, 내부 사용 흔적 삭제, 관리자 권한 획득 등 주로 불법적인 해킹에 사용되는 기능들을 제공하는 프로그램으로서, login, inetd, ls, ps, netstat 등 주요 시스템 파일들을 백도어로 교체한다.
루트킷(rootkit)은 하나의 어플리케이션(또는 프로그램)으로써, md5, tripwire등 시스템 파일 무결성 검사 도구에 의해 침입 사실을 발견할 수 있다. 그러나 커널 기반의 루트킷의 경우는 시스템 파일 등의 애플리케이션을 바꾸지 않고 커널을 바꿈으로써 md5, tripwire로 백도어를 발견할 수 없다.
대부분의 LKM 루트킷은 커널을 바꾸는 루트킷으로 정상적인 시스템 콜을 가로채서 공격자가 만든 시스템 콜 함수가 실행되도록 하는 방법을 사용한다. 커널은 전역변수인 'sys_call_table'에 정의된 시스템 콜 함수의 주소를 참조하여 원하는 기능을 수행하는데, LKM 루트킷은 정상적인 시스템 콜 함수의 위치를 공격자가 만든 시스템 콜의 주소로 바꿈으로서 공격자의 시스템 콜 루틴이 실행되도록 만든다.
예를 들어, LKM 루트킷은 "lsmod" 명령에 의해 표시되지 않도록 하는 은닉 기능을 가지고 있다. 일반적으로 모듈(module)이름을 NULL 값으로 지정함으로써 가능하다. 또한 LKM 루트킷이 사용하는 심볼(symbol)을 등록되지 않게 함으로써 심볼 테이블(symboltable(/dev/ksyms))을 분석하더라도 LKM 루트킷의 존재 여부를 확인할 수 없도록 한다.
또한, 공격자는 어느 순간에나 시스템에서 자신의 존재(자취)를 감추려고 한다. 특히, 공격자가 사용하는 파일이나 디렉토리는 시스템 관리자에게 전혀 보이지 않도록 한다. 즉, "getdents"는 ls명령을 실행할 때 호출되는 시스템 콜 인데, 커널 모듈을 이용하여 getdents시스템 콜의 호출을 가로채서 공격자가 만든 루틴이 실행되도록 한다. 그래서 공격자의 루틴은 공격자가 만든 파일을 출력하지 않도록 하여 공격자의 파일을 감춘다.
또, 전통적인 루트킷에서는 ps, netstat, who등의 프로그램을 수정하여 공격자의 프로세스나 IP 주소, 또는 ID 등이 나타나지 않도록 하는 방법을 사용한다. 하지만 이는 시스템 관리자에 의해 쉽게 발견될 수 있다는 문제점이 있다. 보다 좋은 방법은 결국 시스템에서 무엇인가를 출력할 때는 write()시스템 콜을 사용하므로 이를 가로채서 특정 스트링(공격자의 id, ip주소등)을 출력하지 않도록 하는 트로이잔 버전의 write 시스템 콜을 실행시키는 것이다.
또한, Halflife가 발표한 LKM 백도어는 모듈을 쉽게 커널에 올릴 수 있는 기능을 이용하여 쉽게 백도어를 설치할 수 있다. 시스템 콜 리다이렉트 기법은 기존의 시스템 콜의 코드 주소를 백도어가 설치가 되어 있는 코드로 바꾸어 주면 된다. 이것은 변수에 원래 시스템 콜 핸들러 주소를 저장하고, 새로운 지시점을 백도어 코드로 설정을 한다. 변경된 시스템 콜을 부르면 백도어 코드를 실행하고 나서 끝나면 원래의 시스템 코드를 호출하게 된다.
도 1a는 간단한 백도어 모듈이다. 시스템 콜에 대한 주소들은 sys_call_table[]에 정의가 되어 있어 간단한 작업으로 쉽게 고칠 수 있다. hacked_setuid.c는 모듈이기 때문에 init_modeule부터 실행을 한다.
구체적으로, 시스템 콜에 대한 주소들은 sys_call_table[]에 정의가 되어 있어 간단한 작업으로 쉽게 고칠 수 있다. sys_call_table[]에서 해당하는 시스템 콜 엔트리를 찾고, sys_call_table[X]의 함수 포인터를 저장한다. 그래서 새로 정의한 시스템 함수 주소(또는 백도어 코드의 주소)를 시스템 콜에 저장한다.
위 과정을 통해서 리다이렉트가 이루어지며, 사용자 setuid를 부르게 되면, 백도어 함수가 호출이 된다. setuid를 호출한 사용자 ID 4755이면 사용자 id와 그룹 id를 0으로 교체한다. 0은 루트 사용자 id로서 4755ID를 가진 사용자는 루트 권한을 가지게 되는 것이다. 사용자 ID가 4755가 아니면, 저장해 놓은 setuid의 주소를 다시 시스템 콜에 저장하고, setuid()를 다시 호출하여 정상적인 동작을 한다.
도 1b에서와 같이 kernel_cap_t의 모든 비트는 capability를 나타낸다. Kernel_cap_t은 모든 capabilityset의 기본이다.
그 값은 /proc/sys/kernel/capbound의 파일에 정의가 되어 있고, 이 파일이 /dev/kmem에 접근함으로써 변경이 가능하다. capability.h에서 task는 structtask_struct에서 정의된 3개의 멤버를 갖고 있다. 이것은 effective,inheritable,permitted이다. 이것이 전체 시스템을 점검하고, 시스템을 제어하는 capability의 종류를 결정한다. 커널에서 수행되는 대부분의 시스템 콜은 함수의 시작부분에서 /kernel/sched.c에 있는 함수 capable()를 호출을 하고,capable()함수는 다시 cap_raised()를 호출한다.
도 1c에서 cap_raised의 선언을 볼 수 있다. 여기서 어떤 비트를 0으로 선언하면 그들이 나타내는 capability는 전체 시스템에서 사용할 수 없게 된다. 예를 들면 CAP_SYS_RAWIO로 표현되는 17번째 비트가 0으로 설정이 되면 더 이상 sys_iopl은 사용을 할 수 없게 된다. 도 1d에 나와 있는 소스를 자세히 보면 sys_iopl()함수 처음에 capability를 점검한다. 17 번째 비트가 0이므로 함수 capable()은 0을 리턴한다. 조건식에 의해 에러를 리턴하게 되고 sys_iopl()함수를 빠져 나가게 된다.
이처럼 각 프로세스마다 chattr에 의한 권한을 부여/제거할 수도 있고, lcap에 의해 모든 프로세스의 capability를 제거할 수 있다. 이렇게 함으로써 권한에 대한 지나친 제한이나 남용을 막을 수 있으나, capability를 정의하는 파일인 /proc/sys/kernel/cap-bound 파일이 /dev/kmem에 직접 접근함으로써 변경이 가능하기 때문에 CAP_SYS_RAWIO도 모든 프로세스에게서 제거해야 한다는 문제점이 있다.
과거에는 응용프로그램 수준의 백도어가 주류를 이루어서 trpwire와 같은 무결성 검사 툴로 쉽게 탐지하여 대응할 수 있었다. 그러나 근래에는 LKM(Loadable Kernel Module) 기법을 이용한 리눅스나 솔라리스용 커널 루트킷가 매우 다양하고 교묘히 만들어지고 있다.
상기와 같은 루트킷의 침해를 방지하기 위하여, 루트킷 탐지 도구들이 만들어지고 있다. 예를 들어, chkrootkit, Kstat, lsof 등이 있다.
chkrootkit은 일반적인 루트킷을 탐지해 주는 도구로서, LKM 루트킷을 포함하여 일반적인 루트킷까지 비교적 잘 탐지한다. chkrootkit은 시스템 공격자들이 자주 변조시키거나 추가하는 프로그램들을 먼저 찾고, 네트워크 인터페이스 카드가 Promiscuous 모드로 운용되는지 검사한다. 그러나 공격자가 로트킷의 소스를 변형시켜 사용했을 경우와 시스템에 프로세스가 수시로 생겼다가 사라질 경우 잘 탐지가 어려운 단점이 있다. 즉, 공격자에 의해 정상적으로 실행되지 못하는 문제점이 있다. 또한, chkrootkit은 알려진 루트킷만 탐지한다는 단점도 있다.
Kstat는 다양한 Kernel의 정보를 보여주는 도구이다. Kstat의 "s" 옵션은 커널의 각 시스템 콜의 올바른 주소와 현재 커널에서 사용하는 시스템 콜 주소가 일치하는지 검사하여 루트킷을 탐지해낸다. 즉, 올바른 시스템 콜의 주소가 담긴 "system.map"파일의 내용과 현재 커널이 사용하는 시스템 콜 주소를 비교하여 결과가 다르면 LKM 루트킷이 설치된 것으로 의심할 수 있다. 또한 보이지 않는 프로세스를 찾기 위해 "P" 옵션을 사용하여 실행중인 프로세스 목록을 확인하고, ps, -df 명령으로 비교한다. Kstat는 커널 루트킷 탐지가 뛰어나나, 많은 정보를 보여 주지 못한다는 문제점이 있다.
lsof는 List Open Files의 약자로 현재 시스템에서 돌아가는 모든 프로세스에 의해서 오픈(Open)된 파일들에 대한 정보를 보여준다. lsof는 인터넷 소켓 연결과 프로세스의 정보, 프로세스와 관련된 파일 정보 등을 자세히 제공하나, 응용 프로그램으로서 커널 루트킷의 탐지가 불가능하다는 문제점이 있다.
본 발명의 목적은 상술한 바와 같은 문제점을 해결하기 위한 것으로, LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체를 제공하는 것이다.
컴퓨터 포렌식 분야는 컴퓨터 데이터에 대한 보존, 검출, 분석, 문서화에 대한 내용들을 다루며, 영역에 따라 크게 법집행, 정보전, 중요산업기반 보호의 영역으로 나누어진다. 본 발명은 컴퓨터 포렌식 분야 중 LKM 루트킷을 발견시 운영중인 시스템 정보의 신뢰성을 갖추게 하여, '보존' 영역을 특성화하는 모듈을 설계하고자 한다. 이는 로그 기록을 기반으로 하는 기존의 역추적 또는 호스트 기반 침입탐지시스템은 로그가 삭제된 경우에는 더 이상의 분석과 침입자 추적이 어렵기 때문이다.
도 2에서 보는 바와 같이, 본 발명은 기존의 침입탐지 시스템과 달리 수집된 증거의 무결성과 동일성을 보장할 수 있도록, 컴퓨터 포렌식 과정 중에서 증거자료 확보 단계의 디지털 증거의 수집과, 디지털 증거의 동일성, 무결성 훼손 방지를 위한 로그 로깅을 가능하게 하는 역할을 한다. 본 발명은 슈퍼유저(Super User)가 설정해 놓은 주기마다 LKM 커널의 침입을 검사하고 침입의 흔적이 검출되었을 경우 공격자의 자신의 흔적을 지우기 전에 시스템의 로그와 현재 사용중인 시스템 정보를 로깅 서버로 전송하도록 설계한다.
또한, 본 발명의 목적은 프로세스 상태 명령어나 프로세스 디렉토리에 의하여 프로세스 목록을 구하고, 운영체제의 프로세스 구조체로부터 프로세스 목록을 구하여, 양 목록을 대비하여 악성 프로세스(또는 루트킷 프로세스)를 추정하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체를 제공하는 것이다.
상기 목적을 달성하기 위해 본 발명은 LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 관한 것으로서, (a) 실행되고 있는 프로세스의 상태를 나타내주는 명령어(이하 프로세스 상태 명령어)를 실행하여, 제1 프로세스 리스트를 생성하는 단계; (b) 상기 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성하는 단계; (c) 상기 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출하는 단계; 및, (d) 상기 악성추정 프로세스가 검출되면, 상기 운영정보를 백업하는 단계를 포함하는 것을 특징으로 한다.
또한, 본 발명은 LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 관한 것으로서, (a) 상기 운영체제의 프로세스 디렉토리를 참조하여, 제1 프로세스 리스트를 생성하는 단계; (b) 상기 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성하는 단계; (c) 상기 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출하는 단계; 및, (d) 상기 악성추정 프로세스가 검출되면, 상기 운영정보를 백업하는 단계를 포함하는 것을 특징으로 한다.
또, 본 발명은 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 있어서, 상기 (c)단계에서, 상기 제2 프로세스 리스트에는 존재하나 제1 프로세스 리스트에는 존재하지 않는 프로세스를 악성추정 프로세스로 검출하는 것을 특징으로 한다.
또, 본 발명은 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 있어서, 상기 운영정보는 상기 운영체제의 로그 파일을 포함하는 것을 특징으로 한다.
또, 본 발명은 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 있어서, 상기 운영체제는 리눅스인 것을 특징으로 한다.
또, 본 발명은 상기 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법을 수행하는 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
상술한 바와 같이, 본 발명에 따른 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체에 의하면, LKM 루트킷에 의해 컴퓨터 시스템이 침입되면 즉시 이를 검출하여 시스템의 중요한 자료를 백업시킴으로써, 시스템 피해와 침입자 추적 등 사후조사를 할 때 보다 신뢰성 있는 정보를 제공할 수 있는 효과가 얻어진다.
도 1은 종래 기술에 의한 시스템콜 리다이렉트를 위한 코드의 일례를 도시한 것이다.
도 2는 본 발명이 컴퓨터 포렌식의 구성에 적용되는 방식을 도시한 것이다.
도 3은 프로세스 구조체와 파일 구조와의 관계를 도시한 도면이다.
도 4는 본 발명을 실시하기 위한 전체 시스템 구성의 일례를 도시한 도면이다.
도 5는 본 발명의 일실시예에 따른 실시간 운영정보 백업 시스템의 구성에 대한 블록도이다.
도 6은 본 발명의 일실시예에 따른 실시간 운영정보 백업 방법을 설명하는 흐름도이다.
도 7은 본 발명의 일실시예에 따른 프로세스 상태 명령어의 동작 방식을 도식화한 도면이다.
도 8은 운영체제(또는 커널)의 프로세스 구조체의 구조를 도시한 것이다.
도 9는 본 발명의 일실시예에 따라 LKM 루트킷에 의한 악성추정 프로세스를 검출하는 pseudo-code이다.
도 10은 본 발명의 일실시예에 따라 제1 및 제2 프로세스 리스트의 일례를 도시한 것이다.
도 11은 본 발명의 일실시예에 따라 커널이 유지하는 프로세서 정보를 따라가는 방식을 도시한 것이다.

* 도면의 주요 부분에 대한 부호의 설명 *
10 : 컴퓨터 시스템 20 : 네트워크
30 : 운영정보 백업 시스템 31 : 검출 모듈
32 : 백업 모듈
40 : 백업 서버 50 : 데이터베이스
이하, 본 발명의 실시를 위한 구체적인 내용을 도면에 따라서 설명한다.
또한, 본 발명을 설명하는데 있어서 동일 부분은 동일 부호를 붙이고, 그 반복 설명은 생략한다.
먼저, 본 발명에 사용되는 프로세스를 커널과 관련하여 기본 개념을 설명한다.
프로세스(Process)는 동작을 위해 메모리 상에 상주중인 프로그램(runnuing or runnable program)으로 정의 된다. 프로그램은 디스크에 실행 가능한 형태로 저장되어 있는 기계어 명령과 자료의 집합이고, 프로세스(Process)는 동작중인 프로그램이로 CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재이다.
프로세스가 생성되면 커널은 각 프로세스의 정보를 관리한다. 예를 들어 프로세스에 적합한 스케쥴링하기 위해서는 스케쥴링단위, 주소공간과 제어흐름의 집합, PCB(Process Control Block) 등이 커널이 각 프로세스마다 관리해야 할 정보이다. 또한 프로세스가 실행되면 여러 자원을 사용하게 되고, 그 결과 파일 디스크립터(File Descriptor, fd)를 리턴 받는데, 이 또한 커널이 각 프로세스마다 관리해야할 정보이다. 그 외에도 PID(Process Identification), 프로세스의 가족관계에 있는 프로세스가 수행중인 명령들과 데이터, 프로세스에게 전달된 시그널 등을 커널은 각 프로세스 별로 관리해야 한다.
커널은 프로세스가 할당될 때 프로세스의 정보들을 관리하기 위해서 많은 자료구조를 할당한다. 프로세스를 위한 자료구조들 중에서 가장 중심적인 위치에 있는 구조는 task_struct이다. 이 자료구조는 다음과 같은 헤더파일에 정의되어 있다.
"/home/[UserName]/Kernel/linux-2.6.30.1/include/linux/sched.h"
task_struct는 각 프로세스마다 하나씩 존재한다. 즉, 새로운 프로세스가 fork() 될 때마다 하나씩 할당된다. task_struct에는 프로세스를 관리하기 위한 여러 가지 변수들이 존재한다. 도 3은 task_struct 구조와 열려진 파일 사이의 상관관계를 도식한 것이다.
task_struct 구조체는 리눅스에서 프로세스가 실행되기 위한 모든 정보를 담고 있다. 프로세스는 생성과 실행, 대기 등을 거치면서 메모리에 있기도 하고, 스왑(swap) 영역에 있기도 하며, 또한 다른 프로세스들로 인해서 멈추기도 한다. 프로세스는 디스크상에 있는 파일도 접근하게 되며, 자신의 고유한 ID 값을 가지고 있기도 하다. 즉 이러한 모든 것을 task_struct는 나타낼 수 있어야 한다.
files_struct 구조체는 프로세서가 관리하는 열러진 파일들에 대한 정보를 테이블화하여 가지고 있다. 즉, File descriptor Table이다.
fs_struct 구조체는 프로세스가 실행되고 있는 파일 시스템에 대한 정보를 담고 있다. 즉, 프로세스가 파일에 접근할 때 파일 시스템상에서 확인할 정보를 가지고 있는 것이다.
file 구조체는 file object를 나타낸다. 이 object는 커널의 메모리상에서만 존재하며, 프로세스와 열린 파일간의 연결을 만들어주는 고리역할을 한다. 파일 object는 파일 디스크립터 테이블에 연결되어 있으며, 프로세스가 파일에 대한 열기 연산을 할 때, 하나의 파일 object가 생성되어 프로세스의 파일 디스크립터 테이블에 들어가게 된다. 프로세스가 새로이 생성될 때, 파일 디스크립터가 상속되므로 자식 프로세스도 부모 프로세스와 같은 파일에 접근할 수 있다. file 구조체는 .../Kernel/linux-2.6.30.1/include/linux/fs.h 파일에 정의 되어 있다. 주의할 점은 이 object에 대한 어떤 것도 디스크 상에 존재하지 않는다는 점이다. 즉, 이것은 커널이 열러진 파일에 대해서 연산을 하기 위해서 필요한 자료 구조체이다.
denty 구조체는 해당하는 파일에 대한 디렉토리 정보를 가지는 object이다. 각각의 파일 시스템은 자신의 파일을 묶어서 전체적인 구조를 저장하기 위한 구조를 가지고 있으며, 이 정보는 디스크의 일정 구역에 저장된다. Unix나 Windows NT 및 Linux에서는 이러한 정보를 디렉토리라고 한다. 즉, 특정한 파일로써 디렉토리를 다룬다. 디렉토리의 내용은 각각의 파일을 나타내는 엔트리(entry)이다. 디렉토리는 커널에 의해서 메모리 안으로 읽어 들여지게 되면 dentry라는 object로 변환되며, 코드는 .../Kernel/linux-2.6.30.1/include/linux/dcache.h 파일에 있다.
dentry는 프로세스가 파일 시스템에 접근해서 구조적인 정보(Directory)를 읽어와서 생성하는 데이터 구조체이다.
inode object는 특정 파일에 대한 정보를 저장한다. 이곳에 저장된 정보는 디스크를 갖춘 경우 FCB(File Control Block)에서 읽어와서 생성되며, 하나의 파일에 대해서 하나의 inode object가 생성된다. 따라서 특정 파일에 대한 연산을 돕기 위해서 inode ID라는 것을 가지고 파일을 나타낸다. inode object의 코드는 .../Kernel/linux-2.6.30.1/include/linux/fs.h 파일안에 선언되어 있다.
다음, 본 발명을 실시하기 위한 전체 시스템 구성의 예들을 도 4 및 도 5를 참조하여 설명한다.
도 4에서 보는 바와 같이, 본 발명을 실시하기 위한 전체 시스템은 컴퓨터 시스템(10)에 설치되는 운영정보 백업 시스템(30)과, 상기 컴퓨터 시스템(10)과 네트워크(20)로 연결된 백업 서버(40)로 구성된다. 백업된 정보를 저장하는 데이터베이스(50)를 추가적으로 더 포함하여 구성될 수 있다.
컴퓨터 시스템(10)은 LKM(Loadable Kernel Module) 기반 운영체제를 가지는 통상의 컴퓨팅 단말로서, PC, 노트북, 넷북, PDA, 스마트폰 등이다.
운영정보 백업 시스템(30)은 컴퓨터 시스템(10)에 설치되는 프로그램 모듈로서, 악성 프로세스를 검출하고 컴퓨터 시스템(10)의 중요한 운영정보를 백업하는 기능을 수행한다. 이때, 운영정보 백업 시스템(30)은 슈퍼유저(super user) 등의 권한을 가져서, 운영체제의 프로세스 구조체의 구조를 참조할 수 있다.
도 5에서 보는 바와 같이, 운영정보 백업 시스템(30)은 악성 프로세스(또는 LKM 루트킷)를 탐지하는 검출 모듈(31)과 운영정보를 백업하는 백업 모듈(32)로 구성된다.
백업 서버(40)는 컴퓨터 시스템(10)과 네트워크(30)로 연결되어, 백업 시스템(또는 백업 모듈)(30)에 의해 전송되는 컴퓨터 시스템(10)의 운영정보를 수신하고 데이터베이스(50)에 저장하여 백업한다.
다음으로, 본 발명의 일실시예에 따른 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법을 도 6을 참조하여 보다 구체적으로 설명한다.
도 6에서 보는 바와 같이, 본 발명에 따른 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법은 크게 (a) 프로세스 상태 명령어의 실행 또는 운영체제의 프로세스 디렉토리의 참조를 통해, 제1 프로세스 리스트를 생성하는 단계(S10); (b) 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성하는 단계(S20); (c) 상기 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출하는 단계(S30); 및, (d) 악성추정 프로세스가 검출되면, 상기 운영정보를 수집하여 백업하는 단계(S40,S50)로 구분된다.
즉, LKM 루트킷과 같이 커널에서 작동하는 악성코드는 대부분 활동 중인 프로세스로 보이지 않기 때문에, ps 명령어(또는 프로세스 상태 명령어)를 사용하여도 발견할 수 없다. 이 루트킷을 발견하기 위해서는 반드시 커널 안에서 프로세스의 정보를 추출해야 한다. 그래서 검출 모듈(31)은 LKM 루트킷의 활동을 탐지하는 모듈로써, 커널 내부로 진입하여 프로세서 정보를 기준으로 하여 LKM 루트킷을 검출하고 그에 관련된 파일 정보들을 수집하는 역할을 한다.
검출 모듈(31)은 시스템에서 동작하는 프로세스들에 대한 기본 정보를 얻는다. 이것은 리눅스 시스템의 ps 명령어가 동작하는 방식을 그대로 따른다. readdir() 함수를 사용하여 /proc 디렉토리의 엔트리를 하나씩 읽어오는 방식을 취한다. 그러나 readdir() 함수가 사용하는 getdents 시스템 콜은 대부분의 LKM 루트킷이 가장 먼저 변조하는 시스템 콜이기 때문에, 신뢰할 수가 없다.
하지만 커널로 진입하여 task 들의 linked list를 따라가면 완벽한 프로세스 목록을 가질 수 있게 된다. ps명령어의 사용을 통해 실제로 사용되고 있는 프로세스 정보와 task들의 linked list를 검색해서 얻을 수 있는 프로세스 정보를 비교함으로서 LKM 루트킷이 숨기고 있는 프로세스를 발견할 수 있게 된다. 두 가지의 프로세스들 정보를 비교하였을 때, ps명령어를 통해 확인된 프로세스가 아닌 프로세스가 발견되었다면 그 프로세스는 공격자로부터 심어진 LKM 루트킷이라 판단할 수 있다.
먼저, 검출 모듈(31)은 실행되고 있는 프로세스의 상태를 나타내주는 명령어(이하 프로세스 상태 명령어)를 실행하거나, 상기 운영체제의 프로세스 디렉토리를 참조하여, 제1 프로세스 리스트를 생성한다(S10).
프로세스 상태 명령어인 "ps" 명령어를 사용함으로서 기초적인 프로세스 정보를 받을 수 있다. 현재 대부분의 LKM 루트킷은 관리자가 발견할 수 없도록 프로세스의 활동을 숨김으로 "ps" 명령어를 통해 얻은 프로세스 정보는 정상적으로 활동하는 프로세스의 기준이 될 수 있다. 이 명령어를 통해 프로세스들의 ID와 그 프로세스들에 대한 정보를 확인한다.
도 7에서 보는 바와 같이, readdir() 함수의 getdents() 시스템 콜을 사용하여 디렉토리 엔트리를 읽어오는 방식이다. 전체 프로세스 Id에 대하여 한번씩 chdir() 시스템 콜을 하여, 디렉토리들을 일일이 검사하여 존재여부를 확인한다. "ps" 명령 결과는 신뢰성이 떨어지고 최근에 발견되는 LKM 루트킷에게는 통용되지 않지만, 커널에서 얻을 수 있는 프로세스 정보와 비교함으로써, 숨겨진 프로세스 또는 악성추정 프로세스(Hidden Process)의 존재를 확인할 수 있는 기준이 된다.
다음으로, 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성한다(S20).
도 8a에서 보는 바와 같이, 컴퓨터 시스템(10)은 프로세스 정보를 프로세스 연결 리스트(Linked List) 구조로 갖는다. init_task 구조체부터 시작하여, 차례로 next_task 포인터를 따라가면서 다음 task 구조체로 이동하여 프로세서 정보를 가져올 수 있다.
또는, task_struct 구조체에는 프로세서의 부모와 자식간의 관계를 자기참조 구조체 포인터를 사용하여 유지하고 있다. 도 8b는 task_struct 구조체안의 부모와 자식간의 관계를 담기 위한 구조체 멤버들을 보여준다.
실제적으로 프로세서들은 도 8b와 같은 부모와 자식관계를 유지하고 있다. 이러한 정보들과 구조를 기반으로 역시 init_task부터 차례로 프로세스를 추적하는 과정에서 부모와 자식 관계를 바탕으로 프로세서들의 정보들을 알아낼 수 있다.
다음으로, 검출 모듈(31)은 상기 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출한다(S30). 바람직하게는, 상기 (c)단계에서, 상기 제2 프로세스 리스트에는 존재하나 제1 프로세스 리스트에는 존재하지 않는 프로세스를 악성추정 프로세스로 검출한다.
도 9는 LKM 루트킷에 의해서 숨겨진 프로세스(또는 악성추정 프로세스) 찾는 과정을 pseudo-code로 표현한 것이다.
프로세스 리스트를 저장하기 위한 세 가지 종류의 배열을 만든 다음, 각각의 배열을 0으로 초기화한다. ps 명령어에 의한 프로세스 List를 얻은 후 존재하는 PID에 해당하는 배열을 1로 setting 한다. /proc 디렉토리를 readdir() 시스템 콜로 읽어서 프로세스 List를 얻은 다음, 역시 존재하는 PID에 해당하는 배열을 1로 setting한다. 이렇게 얻은 세 가지의 프로세스 List를 기준으로 하여, /proc 디렉토리에 대하여 chdir() 시스템 콜로 프로세스 List를 하나씩 검사해 나간다. 프로세스 List들간의 차이점이 발견된다면, 그것은 곧 악성추정 프로세스가 존재한다는 의미이고 시스템의 침입증거가 존재함을 말한다. 그 의심되는 프로세스를 추적해 보면, 필요로 하는 모든 침입증거들을 수집할 수 있게 된다.
도 10a와 도 10b에서는, ps명령어에서 확인된 process 정보, 및, 커널의 task_struct 구조체의 linked_list를 순회하며 얻어낸 process 정보를 확인할 수 있다.
도 10a에서 확인할 수 있는 프로세스 정보에서 확인할 수 있는 각 필드의 의미는 다음과 같다.
- USER : 프로세스 소유자의 계정을 보여준다.
- PID : 프로세스를 구분하기 위한 고유의 ID
- RSS : 프로세스에 의해 사용되는 실제 메모리의 용량(Kbyte 단위)
- SZ : 프로세스의 자료와 스택의 크기(Kbyte 단위)
- TIME : 현재까지 사용된 CPU의 시간(분, 초)
- TTY : 프로세스의 제어 터미널(t3/dev/tty3)
도 10b는 task_struct 구조체의 Linked list를 순회하며 얻은 프로세스 정보를 파일로 저장하고, cat 명령어를 사용하여 파일의 내용을 확인한 화면이다. 프로세스의 PID명으로 되어 있는 배열의 번호가 [1]로 되어 있는 프로세스가 ps명령어에서 확인할 수 있는 프로세스 정보와 task_struct 구조체 순회를 통해 얻을 수 있는 프로세스 정보에서 불일치된 프로세스이다. 이 정보를 담고 있는 파일은 시스템 운영정보 파일이 백업될 때 함께 백업된다.
다음으로, 악성추정 프로세스가 검출되면, 상기 운영정보를 수집한다(S40).
먼저, 커널이 유지하는 프로세스의 정보를 수집한다. 커널이 유지하는 프로세서 정보를 따라가는 방식은 도 11과 같다.
task_struct 구조체부터 시작하여, 프로세서가 열고 있는 파일들에 대한 fd 배열인 fd_array[]로 접근하고, fd_array[]에는 파일 fd가 존재하는데, 이 중에서 0, 1, 2번을 제외한 나머지 번호를 추적한다. 파일 fd는 file object로 연결되어 있으며, file object는 dentry object로 이어진다. 그리고 dentry object를 거치면 바로 실제 파일과 연결된다고 할 수 있는 inode object로 도달한다.
inode object는 super block과 연동하여 실제 디스크상의 자기블록들을 관리하고 있다.
fs_struct 구조체는 프로세스가 실행되고 있는 파일 시스템에 대한 정보를 담고 있다. 즉, 프로세스가 파일에 접근할 때, 파일 시스템상에서 확인할 정보를 가지고 있는 것이다. 그 내부에는 파일시스템의 root 디렉토리 엔트리와 프로세스가 실행되고 있는 pwd(present working directory) 엔트리가 있으며, 이 두 가지 엔트리를 가지고 파일시스템 정보를 추출할 수 있다.
files_struct 구조체는 프로세서가 관리하는 열려진 파일들에 대한 정보를 테이블화하여 가지고 있다. 즉, 앞에서 설명된 File Discriptor Table이다.
그 안에는 fd_array[NR_OPEN_DEFAULT] 배열이 존재하면 이것은 프로세서가 접근하고 있는 fd 들의 배열값이며, 배열의 각 값들은 file 구조체로 연결된다.
file 구조체안의 dentry 구조체는 해당하는 파일에 대한 디렉토리 정보를 가지는 object로서, 그 내부에는 디렉토리명을 가지는 qstr(quick string) 구조체와 상위 디렉토리를 가리키고 있는 dentry 구조체, 그리고 inode 구조체를 가지고 있다.
inode 구조체는 실질적인 파일을 나타낸다. 구조체 내부에는 inode 번호, 디바이스 ID, 파일의 타입과 사용권한, 사용자와 그룹 ID, inode가 가리키는 파일에 대한 마지막 접근 시간, 마지막 파일 수정 시간, 마지막 inode가 가리키는 파일에 대한 마지막 접근 시간, 마지막 파일 수정 시간, 마지막 inode 수정 시간, 소켓 파일 여부 등의 항목들이 존재한다.
다음으로, 악성추정 프로세스가 검출되면, 상기 운영정보를 백업한다(S50).
LKM 검출 모듈(31)이 LKM 루트킷을 발견하게 되면, 공격자가 침입 흔적을 지우기 전에, 백업 모듈(32)은 현재 로그 파일과 시스템 정보 등 운영정보를 백업 서버(40)로 보내야 한다. 그렇게 함으로써, 공격자가 남긴 흔적에 무결성을 제공할 수 있다.
특히, LKM 루트킷 검출 모듈(31)이 LKM 루트킷을 탐지하면 현재 운영중인 시스템의 로그 정보를 백업 서버(40)로 전송시킨다. 이 로그들은 침입자가 자신의 흔적을 지우는데 사용되는 중요한 침입정보이므로 무결한 상태로 백업되어야 한다.
로그파일이란 시스템에 접속한 사용자들의 행위들을 저장해 놓은 기록들이다. 따라서 외부 침입을 해온 공격자가 시스템에서 어떠한 일을 행하였는지, 또는 사용자가 어떠한 명령어들을 사용하였는지 등의 보안적인 의미의 정보들과 시스템이 처리한 업무와 에러등의 시스템 운영정보들을 가지고 있다. 로그는 문제가 발생하였을 때 그 해결 방안을 제시해주는 가장 기본적인 자료이다.
root권한을 획득한 칩입자는 로그파일들을 삭제 또는 변경할 수 있다. 이러한 작업이 성공적으로 이루어지면 추후 관리자가 침해사고 사실을 알았다 하더라도 추적 또는 분석을 위한 관련 자료는 이미 삭제되었거나 변조된 다음이므로 침입경로나 침입 방법 등의 정보를 전혀 얻을 수 없게 되어 시스템 보안 향상을 위한 조치를 취할 수 없게 된다. 따라서 로그의 확보는 관리적 보안의 기본이라고 할 수 있다.
다음으로, 본 발명의 효과를 보다 구체적으로 설명한다.
본 발명에서 제안하는 루트킷 검출 모듈(31)은 프로세스를 숨기고 있는 LKM 루트킷을 매우 효과적으로 검출할 수 있다. 먼저 "ps" 명령어의 readdirr() 시스템 콜을 이용하여 /proc 디렉토리 내의 PID값으로 구성된 각 디렉토리에 대한 프로세스 정보를 구함으로서 , getdents() 시스템 콜을 변조시켜 임의의 프로세스를 숨기는 대부분의 LKM 루트킷은 발견될 수 밖에 없다. 또한, 시스템에 동작중인 커널 버전에 최적화되도록 컴파일된 LKM 루트킷도 자신이 숨기고자 하는 프로세스가 /proc 디렉토리에 프로세스 정보를 쓰지 못하도록 할 수는 있으나, 커널 내부에 있는 task_struct 구조체들의 Linked List상에 등록되는 것은 절대로 막을 수 없다. 왜냐하면, 시스템에서 동작하는 모든 프로세스는 반드시 커널상에서 task_struct 구조체로 존재해야 하기 때문이다.
루트킷 검출 모듈(31)은 커널의 task_struct 구조체의 정보를 시발점으로 하여 프로세스가 열고 있는 파일들에 대한 정보를 추적하여 보여준다. 구조체를 차례로 따라가는 이러한 추적방식은 프로세서의 모든 정보를 얻어낼 수 있다. 실행결과에서 볼 수 있듯이, 프로세서가 가지는 모든 정보는 출력될 수 있다. 일부 구조체 정보만을 보여주고 있는 기존의 kstat 도구와는 이런 점에서 차별화된다.
본 발명은 LKM 루트킷 검출 모듈로 루트킷이 검출되면 침입자가 로그파일의 삭제, 변조를 하기 전, 시스템 운영정보를 담고 있는 로그파일과 LKM 루트킷 프로세스 정보를 백업 서버로 전송한다. 이렇게 함으로써, 침입자가 시스템에서 행했던 흔적을 남겨 관리자에게 침입이 있었다는 사실을 알림과 동시에 재침입을 예방할 수 있도록 하였다.
또한, 신뢰성을 가지고 있는 로그파일과 변조된 로그파일을 비교 분석가능하게 하였다. 공격 당시 시스템의 운영 정보를 손실없이 백업함으로서, 공격받은 시스템의 피해부분과 침입흔적의 신뢰성을 제공하였다. 그리고 기존의 응용프로그램 레벨의 탐지 도구가 탐지할 수 없었던, 리눅스 커널 루트 킷을 직접 커널로 진입할 수 있는 리눅스 커널 모듈로써 이상행위를 하는 프로세서를 발견하고 침입에 대한 증거에 대해 무결성이 보존 되도록 수집할 수 있는 것을 보여주었다.
본 발명은 자동차의 블랙박스와 같이 침입이 탐지된 시점의 시스템 운영 정보를 백업함으로써, 실시간적으로 백업에서 오는 자원적, 금전적 부담을 줄일 수 있다.
이상, 본 발명자에 의해서 이루어진 발명을 실시 예에 따라 구체적으로 설명하였지만, 본 발명은 실시 예에 한정되는 것은 아니고, 그 요지를 이탈하지 않는 범위에서 여러 가지로 변경 가능한 것은 물론이다.
본 발명은 LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 시스템 모듈을 개발하는 데 유용하다.

Claims (6)

  1. LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 있어서,
    (a) 실행되고 있는 프로세스의 상태를 나타내주는 명령어(이하 프로세스 상태 명령어)를 실행하여, 제1 프로세스 리스트를 생성하는 단계;
    (b) 상기 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성하는 단계;
    (c) 상기 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출하는 단계; 및,
    (d) 상기 악성추정 프로세스가 검출되면, 상기 운영정보를 백업하는 단계를 포함하는 것을 특징으로 하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법.
  2. LKM(Loadable Kernel Module) 기반 운영체제를 가지는 컴퓨터 시스템에서 실행되는 루트킷(rootkit)을 검출하고, 루트킷 검출시 상기 컴퓨터 시스템의 운영정보를 백업하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법에 있어서,
    (a) 상기 운영체제의 프로세스 디렉토리를 참조하여, 제1 프로세스 리스트를 생성하는 단계;
    (b) 상기 운영체제의 프로세스 구조체의 구조를 탐색하여 제2 프로세스 리스트를 생성하는 단계;
    (c) 상기 제1 및 제2 프로세스 리스트에 모두 포함되어 있지 않은 프로세스(이하 악성추정 프로세스)를 검출하는 단계; 및,
    (d) 상기 악성추정 프로세스가 검출되면, 상기 운영정보를 백업하는 단계를 포함하는 것을 특징으로 하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 (c)단계에서, 상기 제2 프로세스 리스트에는 존재하나 제1 프로세스 리스트에는 존재하지 않는 프로세스를 악성추정 프로세스로 검출하는 것을 특징으로 하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법.
  4. 제1항 또는 제2항에 있어서,
    상기 운영정보는 상기 운영체제의 로그 파일을 포함하는 것을 특징으로 하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법.
  5. 제1항 또는 제2항에 있어서,
    상기 운영체제는 리눅스인 것을 특징으로 하는 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법.
  6. 제1항 또는 제2항의 LKM 루트킷 검출을 통한 실시간 운영정보 백업 방법을 수행하는 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020110008740A 2011-01-28 2011-01-28 Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체 KR101223594B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110008740A KR101223594B1 (ko) 2011-01-28 2011-01-28 Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110008740A KR101223594B1 (ko) 2011-01-28 2011-01-28 Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체

Publications (2)

Publication Number Publication Date
KR20120087508A true KR20120087508A (ko) 2012-08-07
KR101223594B1 KR101223594B1 (ko) 2013-01-17

Family

ID=46873043

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110008740A KR101223594B1 (ko) 2011-01-28 2011-01-28 Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체

Country Status (1)

Country Link
KR (1) KR101223594B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101439207B1 (ko) * 2012-11-09 2014-09-15 (주)네오위즈게임즈 해킹 프로세스 감지 방법 및 장치
KR101530532B1 (ko) * 2013-11-04 2015-06-23 주식회사 잉카인터넷 모바일단말의 루팅 탐지 시스템 및 방법
WO2016048541A1 (en) * 2014-09-25 2016-03-31 Mcafee, Inc. Cross-view malware detection
KR20210066460A (ko) * 2019-11-28 2021-06-07 네이버클라우드 주식회사 프로세스 정보를 사용하여 웹쉘을 탐지하는 방법 및 시스템
CN113886171A (zh) * 2021-08-27 2022-01-04 阿里云计算有限公司 进程监测方法、计算机程序产品及电子设备

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101431192B1 (ko) * 2013-03-28 2014-08-19 한신대학교 산학협력단 모바일 단말의 루팅 공격 이벤트 검출 방법
KR102008952B1 (ko) 2017-07-05 2019-08-08 한국전자통신연구원 가상머신 부팅 과정에서의 감사 증적 수집 장치 및 방법
US10776491B2 (en) 2017-07-05 2020-09-15 Electronics And Telecommunications Research Institute Apparatus and method for collecting audit trail in virtual machine boot process

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100456512B1 (ko) * 2002-05-06 2004-11-10 한국전자통신연구원 커널 백도어 탐지 시스템, 이를 이용한 커널 백도어 탐지방법 및 커널 데이터 복구 방법
KR20100078081A (ko) * 2008-12-30 2010-07-08 (주) 세인트 시큐리티 커널 기반 시스템 행위 분석을 통한 알려지지 않은 악성코드 탐지 시스템 및 방법

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101439207B1 (ko) * 2012-11-09 2014-09-15 (주)네오위즈게임즈 해킹 프로세스 감지 방법 및 장치
KR101530532B1 (ko) * 2013-11-04 2015-06-23 주식회사 잉카인터넷 모바일단말의 루팅 탐지 시스템 및 방법
WO2016048541A1 (en) * 2014-09-25 2016-03-31 Mcafee, Inc. Cross-view malware detection
US9609005B2 (en) 2014-09-25 2017-03-28 Mcafee, Inc. Cross-view malware detection
KR20210066460A (ko) * 2019-11-28 2021-06-07 네이버클라우드 주식회사 프로세스 정보를 사용하여 웹쉘을 탐지하는 방법 및 시스템
CN113886171A (zh) * 2021-08-27 2022-01-04 阿里云计算有限公司 进程监测方法、计算机程序产品及电子设备

Also Published As

Publication number Publication date
KR101223594B1 (ko) 2013-01-17

Similar Documents

Publication Publication Date Title
Milajerdi et al. Poirot: Aligning attack behavior with kernel audit records for cyber threat hunting
US11868798B2 (en) Techniques for securing virtual machines
KR101223594B1 (ko) Lkm 루트킷 검출을 통한 실시간 운영정보 백업 방법 및 그 기록매체
Xiong et al. CONAN: A practical real-time APT detection system with high accuracy and efficiency
King et al. Backtracking intrusions
King et al. Backtracking intrusions
US9230098B2 (en) Real time lockdown
Lu et al. Blade: an attack-agnostic approach for preventing drive-by malware infections
Carrier Risks of live digital forensic analysis
KR101201118B1 (ko) 바이러스 방지 소프트웨어 어플리케이션들의 지식 베이스를모으는 시스템 및 방법
US7665139B1 (en) Method and apparatus to detect and prevent malicious changes to tokens
US11616812B2 (en) Deceiving attackers accessing active directory data
US20140075555A1 (en) System and method for protecting computer systems from malware attacks
CN110647744A (zh) 使用特定于对象的文件系统视图识别和提取关键危害取证指标
RU2723665C1 (ru) Динамический индикатор репутации для оптимизации операций по обеспечению компьютерной безопасности
Fattori et al. Hypervisor-based malware protection with accessminer
Lemmou et al. A behavioural in‐depth analysis of ransomware infection
US11983272B2 (en) Method and system for detecting and preventing application privilege escalation attacks
Zdzichowski et al. Anti-forensic study
Kharraz Techniques and Solutions for Addressing Ransomware Attacks
Park Malware expert: Execution tracking
Caillat et al. Prison: Tracking process interactions to contain malware
Hsu et al. Web security in a windows system as PrivacyDefender in private browsing mode
RU2592383C1 (ru) Способ формирования антивирусной записи при обнаружении вредоносного кода в оперативной памяти
KR102309695B1 (ko) 호스트 침입 탐지를 위한 파일 기반 제어방법 및 장치

Legal Events

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

Payment date: 20151223

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170109

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171222

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee