KR101052735B1 - 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치 - Google Patents

메모리 조작유무를 감지하는 방법 및 이를 이용한 장치 Download PDF

Info

Publication number
KR101052735B1
KR101052735B1 KR1020090019406A KR20090019406A KR101052735B1 KR 101052735 B1 KR101052735 B1 KR 101052735B1 KR 1020090019406 A KR1020090019406 A KR 1020090019406A KR 20090019406 A KR20090019406 A KR 20090019406A KR 101052735 B1 KR101052735 B1 KR 101052735B1
Authority
KR
South Korea
Prior art keywords
memory
code
original
crc
data
Prior art date
Application number
KR1020090019406A
Other languages
English (en)
Other versions
KR20100100488A (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 KR1020090019406A priority Critical patent/KR101052735B1/ko
Publication of KR20100100488A publication Critical patent/KR20100100488A/ko
Application granted granted Critical
Publication of KR101052735B1 publication Critical patent/KR101052735B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • 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/554Detecting local intrusion or implementing counter-measures involving event detection and direct action

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 CRC코드를 통한 메모리의 보안 방법에 관한 것으로, 보다 상세하게는 실행파일이 실행되어 메모리에 로드된 이후, 상기 로드된 메모리상 내용이 조작되었는지 여부를 판단하기 위한 메모리 조작유무를 감지하는 방법에 관한 발명이다.
본 발명에 따른 메모리 조작유무를 감지하는 방법은 보호대상 파일에 대해서, 원본확인코드를 생성하는 단계; 상기 생성된 원본확인코드를 상기 보호대상 파일에 저장하는 단계; 상기 원본확인코드가 삽입된 보호대상 파일이 메모리상에 로드되는 단계; 상기 메모리상에 로드된 메모리상코드에 대해서, 기정해진 주기에 따라 상기 CRC 알고리즘을 이용해서 메모리확인코드를 생성하는 단계; 및 상기 원본확인코드와 상기 메모리확인코드를 비교하는 단계를 포함한다.
메모리, 조작, 해킹, CRC, 페이지

Description

메모리 조작유무를 감지하는 방법 및 이를 이용한 장치{Method for scanning a fabrication or memory and device thereof}
본 발명은 CRC코드를 통한 메모리의 보안 방법에 관한 것으로, 보다 상세하게는 실행파일이 실행되어 메모리에 로드된 이후, 상기 로드된 메모리상 내용이 조작되었는지 여부를 판단하기 위한 메모리 조작유무를 감지하는 방법에 관한 발명이다.
근래에 게임등의 프로그램을 해킹하기 위한 툴(Tool)로써, 실행 프로그램이 실행될 때, 상기 실행 파일이 동작되는 클라이언트의 메모리 상에 위치한 코드를 수정하여 게임의 원래 동작방식과 다르게 동작하도록 하는 해킹 툴들이 많이 유포되고 있다. 이러한 방식의 해킹은 실행 파일 자체의 크랙(Crack)과 동일한 효과를 낼 뿐만 아니라 게임 중간에 동적으로 계속해서 바꿀 수 있으므로 실행 프로그램 자체의 크랙보다 실질적으로는 더 큰 피해를 주고 있다는 문제점이 있다.
본 발명은 상기한 사정을 감안하여 창출된 것으로서, 본 발명의 목적은 보호대상 파일이 실행되는 동안, 메모리에 로딩된 실행파일의 코드가 조작되었는지 여부를 판단하기 위한 메모리 조작유무를 감지하는 방법에 있다.
상기 목적을 달성하기 위한 본 발명에 따른 메모리 조작유무를 감지하는 방법은 보호대상 파일에 대해서, CRC알고리즘을 이용해서 원본확인코드를 생성하는 단계; 상기 생성된 원본확인코드를 상기 보호대상 파일에 저장하는 단계; 상기 원본확인코드가 삽입된 보호대상 파일이 메모리상에 로드되는 단계; 상기 메모리상에 로드된 메모리상코드에 대해서, 기정해진 주기에 따라 상기 CRC 알고리즘을 이용해서 메모리확인코드를 생성하는 단계; 및 상기 원본확인코드와 상기 메모리확인코드를 비교하는 단계를 포함한다.
또한 상기 보호대상 파일은 실행파일이고, 상기 메모리상코드는 프로세스인 것이 바람직하다.
그리고 상기 원본확인코드를 생성하는 단계는 상기 보호대상 파일중에서 코드섹션에 대해서만 원본확인코드를 생성하는 것을 특징으로 하며,
상기 메모리확인코드를 생성하는 단계는 상기 메모리에 로드된 메모리상코드중에서 코드섹션에 대해서만 메모리확인코드를 생성하는 것이 바람직하다.
또한 상기 원본확인코드를 생성하는 단계는 상기 보호대상 파일중에서 기정해진 데이터 블록단위로 원본확인코드를 생성하는 것을 특징으로 하며,
상기 메모리확인코드를 생성하는 단계는 상기 메모리에 로드된 메모리상코드중에서 상기 데이터 블록단위로 메모리확인코드를 생성하는 것이 바람직하다.
그리고 상기 데이터 블록단위는 운영체제에서 관리하는 페이지단위인 것이 바람직하다.
또한 커널레벨에서 더티비트(Dirty-bit) 정보를 실시간으로 감시하는 단계를 더 포함하며, 특정 더티비트(Dirty-bit) 정보가 변경된 경우 상기 변경된 Dirty-bit이 가리키는 페이지에 대해서 메모리확인코드를 생성하고, 원본확인코드와 상기 메모리확인코드를 비교하는 것이 바람직하다.
그리고 메모리속성을 변경하는 API함수인 속성변경API함수를 후킹하는 단계; 및 상기 속성변경API함수를 이용하여 메모리의 속성이 변경된 것이 감지된 경우, 상기 속성변경API함수의 인수를 참조하여 속성이 변경된 페이지를 검색하는 단계를 더 포함하고 상기 속성이 변경된 페이지에 대해서 메모리확인코드를 생성하고, 원본확인코드와 상기 메모리확인코드를 비교하는 것이 바람직하다.
또한 상기 속성변경API함수는 Kernel32.dll의 VirtualProtect함수인 것이 바람직하다.
그리고 상기 생성된 원본CRC를 상기 보호대상 파일에 저장하는 단계는
상기 보호대상파일의 모든 섹션에 대해서 남은 영역을 검사하는 단계;를 더 포함하고, 최초로 남은 영역이 발견된 섹션의 상기 남은 영역에 원본확인코드를 저 장하고는 것이 바람직하다.
한편 본 발명의 다른 일 실시예에 따른 메모리 조작유무 감지장치는 보호대상파일이 메모리에 로드된 이후 조작이 되었는지 여부를 감지하는 기능을 수행하는 메모리 조작유무 감지장치에 있어서, 상기 보호대상파일에 기저장된 원본확인코드를 읽어들이는 원본CRC리딩모듈; 상기 보호대상파일이 메모리상에 로드된 이후, 메모리상코드에 대해서 기정해진 주기에 따라 기정해진 CRC 알고리즘을 이용해서 메모리확인코드를 생성하는 메모리CRC생성모듈; 및 상기 메모리확인코드와 원본확인코드를 비교하는 CRC비교모듈을 포함한다.
그리고 상기 보호대상 파일에 대해서, CRC알고리즘을 이용해서 원본확인코드를 생성하고, 상기 생성된 원본CRC를 상기 보호대상 파일에 저장하는 원본CRC삽입모듈;을 더 포함하는 것이 바람직하다.
또한 상기 원본CRC리딩모듈, 상기 메모리CRC생성모듈 및 상기 CRC비교모듈은 상기 보호대상 파일이 메모리상에 로드시와 동기에 메모리에 로딩되는 것이 바람직하다.
그리고 상기 원본CRC삽입모듈은 상기 보호대상 파일중에서 코드섹션에 대해서만 원본확인코드를 생성하는 것을 특징으로 하며,
상기 메모리CRC생성모듈은 상기 메모리에 로드된 메모리상코드중에서 코드섹션에 대해서만 메모리확인코드를 생성하는 것이 바람직하다.
또한 상기 원본CRC삽입모듈은 상기 보호대상 파일중에서 기정해진 데이터 블록단위로 원본확인코드를 생성하는 것을 특징으로 하며,
상기 메모리CRC생성모듈은 상기 메모리에 로드된 메모리상코드중에서 상기 데이터 블록단위로 메모리확인코드를 생성하는 것이 바람직하다.
그리고 상기 데이터 블록단위는 운영체제에서 관리하는 페이지단위인 것이 바람직하다.
또한 커널레벨에서 더티비트(Dirty-bit) 정보를 실시간으로 감시하는 더티비트(Dirty-bit)감지모듈을 더 포함하며,
상기 메모리CRC생성모듈은 상기 더티비트(Dirty-bit)가 변경된 경우 상기 변경된 Dirty-bit이 가리키는 페이지에 대해서 메모리확인코드를 생성하는 것이 바람직하다.
그리고 메모리속성을 변경하는 API함수인 속성변경API함수를 후킹한 후, 상기 속성변경API함수를 이용하여 메모리의 속성이 변경된 것이 감지된 경우, 상기 속성변경API함수의 인수를 참조하여 속성이 변경된 페이지를 검색하는 변경페이지검색모듈을 더 포함하고,
상기 메모리CRC생성모듈은 상기 속성이 변경된 페이지에 대해서 메모리확인코드를 생성하는 것이 바람직하다.
한편 본 발명의 다른 일 실시예에 따른 저장매체에는 보호대상 파일이 메모리상에 로드된 경우, 상기 메모리상에 로드된 메모리상코드에 대해서, 기정해진 주기에 따라 상기 CRC 알고리즘을 이용해서 메모리확인코드를 생성하는 단계; 상기 보호대상 파일에 기저장된 원본확인코드를 읽어들이는 단계; 및 상기 원본확인코드와 상기 메모리확인코드를 비교하는 단계를 수행할 수 있는 프로그램이 저장된다.
한편 본 발명의 다른 일 실시예에 따른 저장매체에는 상기 보호대상 파일에 대해서, CRC알고리즘을 이용해서 원본확인코드를 생성하는 단계 및
상기 생성된 원본CRC를 상기 보호대상 파일에 저장하는 단계를 수행할 수 있는 프로그램이 저장된다.
이상에서 상세히 설명한 바와 같이, 본 발명에 따른 메모리 조작유무를 감지하는 방법을 사용하면, 메모리상에서 보호하고자 하는 파일이 로드된 이후 메모리상에서의 조작유무를 바로 알 수 있으므로, 제3자로부터 메모리조작시도 시 보호가 가능하다는 효과가 있다.
또한 해당파일에서 필요한 부분에 대해서만 체크하므로 시스템의 퍼포먼스에 큰 영향이 없으며, 또한 커널 및 응용프로그램단계에서 주소가 의심되는 페이지를 검색하여 해당 페이지를 우선적으로 검사하므로 진단속도가 빠르고 효율적이다.
CRC(cyclic redundancy check)는 네트워크 등을 통하여 데이터를 전송할 때 전송된 데이터에 오류가 있는지를 확인하기 위한 체크값을 결정하는 방식을 말한다.
데이터를 전송하기 전에 주어진 데이터의 값에 따라 CRC 값을 계산하여 데이터에 붙여 전송하고, 데이터 전송이 끝난 후 받은 데이터의 값으로 다시 CRC 값을 계산하게 된다. 이어서 두 값을 비교하고, 이 두 값이 다르면 데이터 전송 과정에서 잡음 등에 의해 오류가 덧붙여 전송된 것 임을 알 수 있다.
본 발명에서는 이러한 CRC알로리즘 개념을 좀더 개량 및 응용하여, 실제 하드디스크에 저장되어 있는 파일과, 해당 파일이 실행되어 메모리에 로딩된 후에 해커등에 의해서 위변조되었는지를 검사하는데 활용한다.
도1은 본 발명의 일 실시예에 따른 메모리 조작유무 감지장치의 블록도이다.
본 발명의 일 실시예에 따른 메모리 조작유무 감지장치는 크게 감지기능수행모듈(110)과 원본CRC삽입모듈(120)로 구성된다.
우선 원본CRC삽입모듈(120)은 특정 보호대상 파일에 대해서, CRC알고리즘을 이용해서 원본CRC코드를 생성하고, 상기 생성된 원본CRC코드를 상기 보호대상 파일에 저장하는 기능을 수행한다.
그리고 감지기능수행모듈(110)은 다시 원본CRC리딩모듈(112), 메모리CRC생성모듈(114) 및 CRC비교모듈(116)로 이루어진다.
원본CRC리딩모듈(112)은 상기 원본CRC삽입모듈(120)에 의해서 생성되어 원본파일에 삽입된 원본CRC코드를 읽어들이는 기능을 수행한다.
메모리CRC생성모듈(114)은 상기 보호대상파일이 메모리상에 로드된 이후, 메모리상코드에 대해서 기정해진 주기에 따라 기정해진 CRC 알고리즘을 이용해서 메모리CRC코드를 생성하는 기능을 수행한다. 여기서는 상기 원본CRC삽입모듈(120)이 원본CRC코드를 생성할 때 사용한 CRC알고리즘과 동일한 알고리즘을 사용한다.
CRC비교모듈(116)은 보호대상파일이 메모리에 로드되기 전에 원본CRC삽입모 듈(120)에 의해서 생성되어 저장된 원본CRC코드와, 보호대상파일이 메모리에 로드된 이후에 메모리CRC생성모듈(114)에 의해서 기정해진 주기에 생성된 메모리CRC코드를 서로 비교한다.
만약에 원본CRC코드와 메모리CRC코드가 일치하지 않는다면, 이는 곧 상기 보호대상파일이 메모리에 로드된 이후 변경이 생겼다는 의미이다.
도2는 본 발명의 설명을 위해 파일영역의 일 예를 도시한 도면이다.
예를 들어 보호대상파일이 GAME.EXE라는 실행파일이라고 하자. 이러한 실행파일은 크게 세가지 영역이 존재한다. 실제 프로그램의 소스코드가 들어가는 코드영역(210)과 프로그램의 구동에 필요한 데이터와 관련된 영역인 데이터영역(220) 및 리소스와 관련된 리소스영역(230)이 있다.
상기 실행파일이 실행되면 이 파일은 메모리에 매핑되어 로드된다. 이후 상기 실행파일이 구동되면서 메모리에 매핑된 데이터영역이나 리소스영역의 값들은 수시로 변경될 수 있다. 그러나 코드영역은 실제 프로그래머가 작성한 코드가 그대로 매핑되어 메모리에 올라가므로, 정상적인 상황이라면 파일내에 존재하는 코드영역내의 코드들과, 메모리에 로드된 코드영역의 코드들을 일치하여야 한다. 만약 파일(즉 메모리에 로드되기 전)내의 코드영역에 있는 코드들과 메모리로 로드된 이후 코드영역에 있는 코드들이 서로 불일치한다면 이는 해커등에 의해서 메모리가 조작된 것이다. 따라서 본 발명에서는 특히 코드영역에 있는 코드들에 대해서 적용한다.
한편 코드영역전부에 대해서 메모리CRC코드를 생성하고 비교하는 것이 아니 고, 일정 크기별로 예를 들어 페이지별로 나눠서 메모리CRC코드를 생성하고 비교하는 과정을 수행한다. 최근들어 프로그램이 대용량화 되어가면서, 실행파일 역시도 몇메가바이트를 초과하는 경우가 종종 발생하며, 이에 따라서 상기 실행파일의 전체에 대해서 메모리CRC코드를 생성하고, 이를 기저장된 원본CRC코드와 비교한다면 시스템의 성능에도 영향을 미친다. 이에 코드영역을 다시 페이지단위(운영체제가 윈도우인 경우 약 4킬로바이트)로 나눈뒤에, 페이지별로 메모리CRC코드 생성 및 비교를 수행한다.
이러한 과정에 대해서는 이하 도3에서 보다 더 자세히 후술한다.
도3은 본 발명의 일 실시예에 따른 메모리 조작유무를 감지하는 방법의 설명에 사용되는 흐름도이다.
이하에서는 보호대상 파일로 EXE파일과 같은 실행파일을 예로 든다. 물론 본 발명은 실행파일에만 적용되는 것은 아니며, DLL과 같은 파일에도 적용가능하다.
우선 보호대상 파일로 선택된 실행파일에 대해서 원본CRC코드를 생성한다(S310). 이때는 실행파일에서 코드영역에 대해서 CRC알고리즘을 적용해서 원본CRC코드를 작성한다.
이 때 코드영역 전체에 대해서 하나의 원본CRC코드를 작성하는 것도 가능하나, 보통은 기정해진 블록단위 즉 페이지단위별로 각각 원본CRC코드를 작성한다.
이후 작성된 원본CRC코드를 실행파일에 삽입한다(S320). 삽입시에는 파일의 맨뒤에 추가적으로 삽입하는 것도 가능하고, 또는 코드영역, 데이터영역 및 리소트 영역들을 차례로 검사하여 각 영역에 빈공간이 있는지 확인한 후 빈 공간에 삽입하 는 방법도 가능하다.
이렇게 원본CRC코드가 삽입된 실행파일은 메모리에 로드된다(S330). 일반적으로는 해당 실행파일이 실제 시스템상에서 실행될 때 해당 파일이 메모리에 로드된다.
이 때 감지기능수행모듈 역시 메모리상에 로드한다(S340). 원본CRC리딩모듈(112), 메모리CRC생성모듈(114) 및 CRC비교모듈(116)로 이루어진 감지기능수행모듈(110)은 일반적으로 DLL형태로 배포되는데, 이하에서는 이를 감지기능수행DLL이라고 간략히 호칭한다. 상기 감지기능수행DLL은 상기 보호대상 실행파일이 실행시에 동시에 실행되도록 설정하는 것이 바람직하다. 즉 상기 감지기능수행DLL은 상기 실행되는 실행파일로부터 Static Loading 즉, 상기 보호대상 실행파일이 실행과 동시에 상기 감지기능수행DLL 역시도 같이 실행되어 메모리에 로드되는 것이 바람직하다.
그 이유는 대부분의 해킹툴이 대상 실행파일 실행시 컴파일러에 의해 작성되는 스텁-코드 함수군을 후킹하여, 패킹 이후 시점을 판단한 후 보호대상 프로세스에 악성 코드를 주입하는 기법을 사용하기 때문이다. 이에 해당 함수의 실행 시점 이전에 호출되는 DLL_PROCESS_ATTACH 시점에 Kernel32.dll의 해당 함수의 코드정보CRC를 미리 생성하여 관리한다.
만약, 상기 보호대상 실행파일에서 감지기능수행DLL을 Dynamic-Loading 한다면, 즉 상기 보호대상 실행파일을 실행한 이후에 상기 감지기능수행모듈을 로드한다며, 그 사이에 해킹툴에 의해 메모리가 조작된 경우에는 감지할 수 없게 되는 상 황이 발생될 수 있게 된다.
감지기능수행DLL이 시작되면, 별도의 쓰레드(Thread)에서 주기적으로 메모리상코드(상기 실행파일이 실행되어 메모리에 매핑된 코드들을 이하 메모리상코드라고 호칭)의 코드영역에 해당하는 메모리CRC코드를 생성한다(S350). 물론 이때의 메모리CRC코드를 생성하는 알고리즘은 S310단계에서의 원본CRC코드를 생성하는 알고리즘과 동일한 알고리즘을 사용해야 한다.
하드디스크와 같은 저장매체에 저장되어 있는 실행파일이 실행되어서 메모리에 로드되어 메모리상에 존재하는 메모리상코드는 서로 매핑되어 동일하다. 물론 데이터영역은 실행에 따라 달라질 수 있으나, 코드영역 즉 실행파일의 코드영역의 데이터와 메모리상코드의 코드영역의 데이터는 동일하여야 하며 다르다면 조작이 발생한 것이다. 따라서 실행파일의 코드영역의 데이터로 생성한 원본CRC코드와 이후 메모리상코드로 생성한 메모리CRC코드는 동일해야 한다.
이후 미리 저장해둔 보호 대상 프로세스의 원본CRC코드와, 상기 메모리CRC코드를 비교한다(S360).
만약 일치한다면(S360-Y), 해당 메모리CRC코드가 생성된 부분의 내용은 조작이 되지 않았으므로, 그 다음 페이지에 대해서 다시 S350단계 및 S360단계를 수행한다.
앞서도 상술한바와 같이, 해당 프로스세스의 코드영역 전체에 대해서 S350단계 및 S360단계를 수행할 경우 시스템상의 퍼포먼스에 악영향을 미칠 수 있다. 따 라서 페이지별로 메모리CRC코드를 생성하고, 해당 메모리CRC코드를 기저장된 원본CRC코드와 비교해서 해당 페이지부분의 조작여부를 판단하고, 이상이 없으면 다시 다음 페이지 영역으로 넘어가서 반복수행하는 것이다.
반대로 일치하지 않는다면(S360-N), 해당 부분에 조작이 있는 것이므로 상기 메모리 조작내용을 통지한다(S380).
한편 시스템 퍼포먼스를 위해서 코드영역을 다시 페이지단위로 나눈후에, 해당 페이지별로 S350단계 및 S360단계를 수행한다.
이에 따라 페이지수가 큰 경우, 예를 들어 100개의 페이지가 존재하는 경우에 약 100번 동안 상기 S350단계 및 S360단계를 거쳐야 100번째 페이지를 검사할 수 있게 된다. 이에 이를 보완하기 위해서 아래와 같은 두가지 알고리즘이 더 활용될 수 있다.
우선 첫째로는 운영체제에서 지원하는 더티 비트(dirty bit) 정보를 참조하는 방법이다. 즉 운영체제의 커널 레벨에서는 메모리가 변경이 일어날때마다 해당 변경된 부분을 페이지단위로 발생하는 더티비트정보가 있다. 따라서 상기 더티비트를 참조하다가 더티비트 변경이 있고, 상기 변경된 더티비트가 가리키는 페이지가 본 발명에서 감시하는 영역내의 페이지라면 상기 S370단계에서 다시 S350단계로 돌아가면서 다음 페이지로 이동하지 않고, 상기 더티비트가 가리키는 페이지로 바로 넘어가서 S350단계 및 S360단계를 수행하면 된다.
그 다음 방법으로는 운영체제의 응용레벨에서 메모리속성을 변경하는 API를 이용하는 방법이다. 일반적으로 메모리상의 코드영역은 읽기전용(Read Only)의 속 성을 가진다. 따라서 해커가 상기 메모리상의 코드영역의 내용을 조작하기 위해서 상기 코드영역의 쓰기속성으로 변경이 필요하다. 따라서 상기 메모리속성을 변경하는 API함수를 후킹하여, 해커가 상기 API함수를 사용시 해당 함수의 인수등을 참조하여 어떤 페이지의 속성을 변경했는지를 알아낼 수 있다.
상기 속성이 변경된 페이지가 본 발명에서 감시하는 영역내의 페이지라면, 상기 S370단계에서 다시 S350단계로 돌아가면서 다음 페이지로 이동하지 않고, 상기 속성이 변경된 페이지로 바로 넘어가서 S350단계 및 S360단계를 수행하면 된다.
한편 본 실시예에서 S360단계에서 원본CRC코드와 메모리CRC코드를 비교하는데, 이 때 원본CRC코드는 메모리상에 존재하는 원본CRC코드도 가능하고, 때에 따라서는 파일에서 원본CRC코드를 읽어와서 비교하는 것 역시도 가능하다. 즉 원본CRC코드는 S320단계에서 실행파일자체에 저장되어 있으며, 이후 S330단계를 거쳐서 해당 실행파일이 메모리에 로드된 메모리상코드에도 존재한다. 메모리상로드될 때, 상기 원본CRC코드는 그대로 매핑되므로 어느것을 사용해도 무방하다.
다만 최근들어 실행파일들에 경우에는 배포단계에서 패킹되는 경우가 많은 바, 만약 실행파일이 S320단계 이후에 패킹된 경우라면, 메모리상코드에 있는 원본CRC코드를 사용한다.
지금까지 바람직한 실시예에 따른 메모리 조작유무를 감지하는 방법에 대해서 설명하였다.
본 실시예에서는 실행파일을 예로 들었으나, 이는 일 실시예에 불과하다. 따라서 실행파일 이외에도 DLL과 같은 파일도 보호대상 파일로서 적용될 수 있음은 물론이다.
또한 본 실시예에서는 상기 확인을 위한 코드값의 일 예로서 CRC값을 들었으나, 이에 한정되는 것은 아니다.
따라서 이외에도 체크섬(Check Sum)데이터, 해시(Hash) 값, 각종 명령어, 그리고 인스트럭션(Instruction) 및 오퍼랜드(Operand)를 포함한 고유 값 등 그 어느것이라도 해당데이터블럭의 변경여부를 알아낼 수 있는 알고리즘이면 본 발명의 적용이 가능함은 물론이다.
또한, 이상에서는 본 발명의 바람직한 실시예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안될 것이다.
도1은 본 발명의 일 실시예에 따른 메모리 조작유무 감지장치의 블록도,
도2는 본 발명의 설명을 위해 파일영역의 일 예를 도시한 도면, 및
도3은 본 발명의 일 실시예에 따른 메모리 조작유무를 감지하는 방법의 설명에 사용되는 흐름도이다.
* 도면의 주요 부분에 대한 부호의 설명 *
100 : 조작유무 감지장치 110 : 감지기능수행모듈
112 : 원본CRC리딩모듈 114 : 메모리CRC생성모듈
116 : CRC비교모듈 120 : 원본CRC삽입모듈

Claims (19)

  1. 보호대상 파일에 포함되는 데이터를 제1처리대상데이터로 하여, 상기 제1처리대상데이터를 처리하여 원본확인코드를 생성하는 원본확인코드 생성단계;
    상기 생성된 원본확인코드를 상기 보호대상 파일에 삽입하는 원본확인코드 삽입단계;
    상기 원본확인코드가 삽입된 보호대상 파일이 메모리상에 로드되는 보호대상파일 로드단계;
    상기 보호대상 파일이 메모리에 로드된 메모리상의 데이터를 제2처리대상데이터로 하여, 기정해진 주기별로 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 메모리확인코드 생성단계; 및
    상기 원본확인코드와 상기 메모리확인코드를 비교하는 확인코드 비교단계;를 포함하고,
    상기 원본확인코드 생성단계는
    상기 제1처리대상데이터를 기정해진 블록단위로 처리하여 원본확인코드를 생성하는 것을 특징으로 하며,
    상기 메모리확인코드 생성단계는
    상기 원본확인코드 생성단계의 상기 기정해진 블록단위와 동일한 단위로, 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  2. 제1항에 있어서
    상기 보호대상 파일은 실행파일이고,
    상기 원본확인코드 생성단계는
    CRC알고리즘을 이용하여 상기 제1처리대상데이터를 처리하여 원본확인코드를 생성하는 것을 특징으로 하며,
    상기 메모리확인코드 생성단계는
    상기 원본확인코드 생성단계에서 사용된 CRC알고리즘과 동일한 알고리즘을 이용하여, 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  3. 제1항에 있어서
    상기 원본확인코드 생성단계는
    상기 보호대상파일에서 코드섹션을 추출하고, 상기 추출된 코드섹션에 포함되는 데이터를 제1처리대상데이터로 하여, 상기 제1처리대상데이터를 처리하여 원본확인코드를 생성하는 것을 특징으로 하며,
    상기 메모리확인코드 생성단계는
    상기 메모리상의 데이터에서 코드섹션을 추출하고, 상기 추출된 코드섹션에 포함되는 데이터를 제2처리대상데이터로 하여, 기 정해진 주기별로 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  4. 삭제
  5. 제1항에 있어서
    상기 기정해진 블록단위는
    운영체제에서 관리하는 페이지단위인 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  6. 제5항에 있어서
    커널레벨에서 더티비트(Dirty-bit) 정보를 실시간으로 감시하는 더티비트감시단계;
    특정 더티비트(Dirty-bit)정보가 변경된 경우, 상기 변경된 더티비트(Dirty-bit)와 대응되는 페이지를 추출하는 변경페이지추출단계; 및
    상기 추출된 페이지가 상기 제2처리대상데이터를 포함하고 있는지 여부를 검 사하는 단계;를 더 포함하고,
    상기 메모리확인코드 생성단계는,
    상기 추출된 페이지가 상기 제2처리대상데이터를 포함하고 있는 경우, 상기 추출된 페이지에 포함된 데이터에 대해서 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  7. 제5항에 있어서
    메모리속성을 변경하는 API함수인 속성변경API함수를 후킹하는 후킹단계; 및
    상기 속성변경API함수를 이용하여 메모리의 속성이 변경된 것이 감지된 경우, 상기 속성변경API함수의 인수를 참조하여 속성이 변경된 페이지를 추출하는 변경페이지추출단계;를 더 포함하고
    상기 메모리확인코드 생성단계는
    상기 추출된 페이지가 상기 제2처리대상데이터를 포함하고 있는 경우, 상기 추출된 페이지에 포함된 데이터에 대해서 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  8. 제7항에 있어서
    상기 속성변경API함수는
    Kernel32.dll의 VirtualProtect함수인 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  9. 제1항에 있어서
    상기 원본확인코드 삽입단계는
    상기 보호대상 파일에 포함된 다수의 섹션 각각의 영역 중 데이터에 의하여 점유되지 않은 비점유 영역을 검출하는 비점유영역 검출단계; 및
    상기 검출된 비점유영역에 상기 원본확인코드를 삽입하는 단계를 포함하는 것을 특징으로 하는 메모리 조작유무를 감지하는 방법.
  10. 보호대상파일이 메모리에 로드된 이후 조작이 되었는지 여부를 감지하는 기능을 수행하는 메모리 조작유무 감지장치에 있어서,
    상기 보호대상파일에 기삽입된 원본확인코드를 추출하는 원본CRC리딩모듈;
    상기 보호대상파일이 메모리상에 로드된 이후, 상기 보호대상 파일이 메모리에 로드된 메모리상의 데이터를 제2처리대상데이터로 하여, 기정해진 주기별로 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 메모리CRC생성모듈; 및
    상기 생성된 메모리확인코드와 상기 추출된 원본확인코드를 비교하는 CRC비교모듈을 포함하고,
    상기 보호대상 파일에 포함되는 데이터를 제1처리대상데이터로 하여, 상기 제1처리대상데이터를 처리하여 원본확인코드를 생성하고, 상기 생성된 원본확인코드를 상기 보호대상 파일에 삽입하는 원본CRC삽입모듈;을 더 포함하며,
    상기 원본CRC삽입모듈은
    상기 제1처리대상데이터를 기정해진 블록단위로 처리하여 원본확인코드를 생성하는 것을 특징으로 하며,
    상기 메모리CRC생성모듈은
    상기 원본확인코드 생성단계의 상기 기정해진 블록단위와 동일한 단위로, 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무 감지장치.
  11. 삭제
  12. 제10항에 있어서
    상기 원본CRC리딩모듈, 상기 메모리CRC생성모듈 및 상기 CRC비교모듈은 상기 보호대상 파일이 메모리상에 로드시와 동시에 메모리에 로딩되는 것을 특징으로 하는 메모리 조작유무 감지장치.
  13. 제10항에 있어서
    상기 원본CRC삽입모듈은
    상기 보호대상파일에서 코드섹션을 추출하고, 상기 추출된 코드섹션에 포함되는 데이터를 제1처리대상데이터로 하여, 상기 제1처리대상데이터를 처리하여 원본확인코드를 생성하는 것을 특징으로 하며,
    상기 메모리CRC생성모듈은
    상기 메모리상의 데이터에서 코드섹션을 추출하고, 상기 추출된 코드섹션에 포함되는 데이터를 제2처리대상데이터로 하여, 기 정해진 주기별로 상기 제2처리대상데이터를 처리하여 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무 감지장치.
  14. 삭제
  15. 제10항에 있어서
    상기 데이터 블록단위는
    운영체제에서 관리하는 페이지단위인 것을 특징으로 하는 메모리 조작유무 감지장치.
  16. 제15항에 있어서
    커널레벨에서 더티비트(Dirty-bit) 정보를 실시간으로 감시하는 더티비트(Dirty-bit)감지모듈을 더 포함하며,
    상기 메모리CRC생성모듈은
    특정 더티비트(Dirty-bit)정보가 변경된 경우, 상기 변경된 더티비트(Dirty-bit)와 대응되는 페이지를 추출하고, 상기 추출된 페이지가 상기 제2처리대상데이터를 포함하고 있는 경우, 상기 추출된 페이지에 포함된 데이터에 대해서 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무 감지장치.
  17. 제15항에 있어서
    메모리속성을 변경하는 API함수인 속성변경API함수를 후킹한 후, 상기 속성변경API함수를 이용하여 메모리의 속성이 변경된 것이 감지된 경우, 상기 속성변경API함수의 인수를 참조하여 속성이 변경된 페이지를 추출하는 변경페이지검색모듈을 더 포함하고,
    상기 메모리CRC생성모듈은
    상기 속성이 변경된 페이지에 포함된 데이터에 대해서 메모리확인코드를 생성하는 것을 특징으로 하는 메모리 조작유무 감지장치.
  18. 삭제
  19. 삭제
KR1020090019406A 2009-03-06 2009-03-06 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치 KR101052735B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020090019406A KR101052735B1 (ko) 2009-03-06 2009-03-06 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020090019406A KR101052735B1 (ko) 2009-03-06 2009-03-06 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치

Publications (2)

Publication Number Publication Date
KR20100100488A KR20100100488A (ko) 2010-09-15
KR101052735B1 true KR101052735B1 (ko) 2011-07-29

Family

ID=43006560

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090019406A KR101052735B1 (ko) 2009-03-06 2009-03-06 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치

Country Status (1)

Country Link
KR (1) KR101052735B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101335326B1 (ko) * 2011-12-30 2013-12-02 (주)네오위즈게임즈 클라이언트 단말, 감시 서버, 및 감시 영역 변조 방지 방법
KR101500512B1 (ko) 2013-05-15 2015-03-18 소프트캠프(주) 데이터 프로세싱 시스템 보안 장치와 보안방법
KR102558980B1 (ko) * 2021-05-07 2023-07-25 윤여을 회계 부정 적발을 위한 서버, 방법 및 명령을 기록한 기록 매체

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060067584A (ko) * 2004-12-15 2006-06-20 삼성전자주식회사 해킹 방지 기능이 있는 스마트 카드
KR100663034B1 (ko) * 2005-12-26 2007-01-02 주식회사 안철수연구소 메모리 상의 코드 조작 감지 방법 및 그 시스템
KR100681696B1 (ko) * 2004-11-29 2007-02-15 주식회사 안철수연구소 컴퓨터 응용 프로그램의 메모리 데이터 조작 방지 방법
KR20070074308A (ko) * 2006-01-09 2007-07-12 삼성전자주식회사 불 휘발성 메모리의 프로그램 동작을 검증하는 장치 및방법, 그리고 그 장치를 포함한 메모리 카드

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100681696B1 (ko) * 2004-11-29 2007-02-15 주식회사 안철수연구소 컴퓨터 응용 프로그램의 메모리 데이터 조작 방지 방법
KR20060067584A (ko) * 2004-12-15 2006-06-20 삼성전자주식회사 해킹 방지 기능이 있는 스마트 카드
KR100663034B1 (ko) * 2005-12-26 2007-01-02 주식회사 안철수연구소 메모리 상의 코드 조작 감지 방법 및 그 시스템
KR20070074308A (ko) * 2006-01-09 2007-07-12 삼성전자주식회사 불 휘발성 메모리의 프로그램 동작을 검증하는 장치 및방법, 그리고 그 장치를 포함한 메모리 카드

Also Published As

Publication number Publication date
KR20100100488A (ko) 2010-09-15

Similar Documents

Publication Publication Date Title
Jeong et al. Generic unpacking using entropy analysis
JP6494744B2 (ja) リターン指向プログラミング攻撃の透過的な検出及び抽出
JP5458184B2 (ja) 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法
US8499352B2 (en) Obfuscated malware detection
KR102415971B1 (ko) 악성 모바일 앱 감지 장치 및 방법
JP4732484B2 (ja) 仮想環境を利用した非実行ファイル内のエクスプロイトコード分析方法及び装置
US20160275019A1 (en) Method and apparatus for protecting dynamic libraries
US20160196427A1 (en) System and Method for Detecting Branch Oriented Programming Anomalies
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
US20160171213A1 (en) Apparatus and method for controlling instruction execution to prevent illegal accesses to a computer
CN114462044A (zh) 一种基于污点分析的uefi固件漏洞静态检测方法及装置
US11176060B2 (en) Dynamic memory protection
CN110717181B (zh) 基于新型程序依赖图的非控制数据攻击检测方法及装置
KR101052735B1 (ko) 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치
CN109472135B (zh) 一种检测进程注入的方法、装置及存储介质
US11157611B2 (en) Binary image stack cookie protection
CN108255496B (zh) 一种获取安卓应用原生层代码的方法、系统及相关装置
JP5549810B2 (ja) プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム
KR101842263B1 (ko) 어플리케이션에 대한 역공학 차단 방법 및 장치
CN114637988A (zh) 一种面向二进制的函数级软件随机化方法
KR101421630B1 (ko) 코드 인젝션된 악성코드 탐지 시스템 및 방법
Isawa et al. Generic Unpacking Method Based on Detecting Original Entry Point
KR102544801B1 (ko) 데이터 재사용 공격에 대한 방어 방법 및 시스템
US20230418950A1 (en) Methods, Devices, and Systems for Control Flow Integrity
KR102046550B1 (ko) 후킹 탐지 장치 및 방법

Legal Events

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

Payment date: 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