KR101354877B1 - 스레드 인터셉션을 위한 시스템, 방법 및 컴퓨터 판독가능 매체 - Google Patents

스레드 인터셉션을 위한 시스템, 방법 및 컴퓨터 판독가능 매체 Download PDF

Info

Publication number
KR101354877B1
KR101354877B1 KR1020087020908A KR20087020908A KR101354877B1 KR 101354877 B1 KR101354877 B1 KR 101354877B1 KR 1020087020908 A KR1020087020908 A KR 1020087020908A KR 20087020908 A KR20087020908 A KR 20087020908A KR 101354877 B1 KR101354877 B1 KR 101354877B1
Authority
KR
South Korea
Prior art keywords
thread
activity
program
data
interactions
Prior art date
Application number
KR1020087020908A
Other languages
English (en)
Other versions
KR20080114699A (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
Priority claimed from US11/567,113 external-priority patent/US7716530B2/en
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20080114699A publication Critical patent/KR20080114699A/ko
Application granted granted Critical
Publication of KR101354877B1 publication Critical patent/KR101354877B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs

Abstract

스레드들을 인터셉트하고 분석하기 위한 장치 및 방법들이 개시된다. 일 실시예에서, 스레드 데이터 레코더가 하나 이상의 기존 함수를 호출하는 스레드들을 인터셉트하도록 하나 이상의 기존 함수 내의 컴퓨터 실행가능 명령어를 수정함으로써 하나 이상의 기존 함수를 인스트루먼팅하도록 구성된다. 하나의 가능한 구현에서, 인스트루먼팅되는 기존 함수들의 수는 초크 포인트 함수들을 인스트루먼팅함으로써 감소할 수 있다. 인스트루먼팅된 함수들은 또한, 스레드들이 함수에서 실행될 때 스레드들과 연관된 데이터를 캡처할 수 있다. 이 데이터는 메모리에 저장되고, 로그들로 압축될 수 있다. 일 양태에서, 데이터는 프로세서 자원들이 소정 레벨 이하로 사용되고 있을 때 저장 및/또는 압축될 수 있다. 캡처된 데이터는 스레드들이 생성된 컴퓨터 시스템의 기능을 분석하는 데 사용될 수 있다.
컴퓨터 시스템, 스레드 인터셉트, 분석, 스레드 데이터 레코더, 초크 포인트 함수

Description

스레드 인터셉션을 위한 시스템, 방법 및 컴퓨터 판독가능 매체{THREAD INTERCEPTION AND ANALYSIS}
신뢰성 있고 안전한 컴퓨터 시스템의 구축의 주요 과제는 시스템이 기능하는 방법을 결정하는 실행가능 파일들, 구성 설정들 및 기타 데이터 모두를 포함하는 시스템의 지속 상태(persistent state; PS)를 관리하는 것이다. 잘못된 구성들 및 다른 PS 문제들은 개별 데스크톱 머신들에서 대규모 인터넷 서비스들에 이르는 다양한 시스템의 고장 및 보안 취약성의 주요 원인들이다. PS 문제들은, 하드웨어 컴포넌트들 및 프로그래밍 로직과 같은 시스템 요소들의 고장에 의해 발생하는 문제들과 함께, 전체 시스템에 악영향을 미칠 수 있다.
시스템 PS를 비효과적으로 관리하는 손실은 크다. 예를 들어, PS 문제들은 시스템 재부팅 또는 애플리케이션 재시동 후에 재발할 수 있다. 이러한 시나리오에서, 기지의 문제 식별에 실패하는 경우, 그리고 후속적인 시스템 재부팅/애플리케이션 재시동이 PS 문제의 치유에 실패하는 경우, 시스템을 수동으로 검사하여 PS의 근본 원인 항목을 식별하는 것 외에는 다른 선택이 존재하지 못할 수 있다.
PS의 근본 원인 항목을 식별하기 위한 시스템의 수동 검사는 다양한 잠재적인 문제들로 인해 어렵고 비용이 많이 든다. 예를 들어, 문제가 있는 애플리케이션에 악영향을 줄 수 있는 잠재적인 항목들의 세트는 거대하며, 따라서 잠재적 근 본 원인 리스트는 시스템 상의 전체 항목들의 세트를 포함할 수 있다.
<발명의 요약>
본 요약은 아래의 상세한 설명에서 더 설명되는 스레드 인터셉션 및 분석과 관련된 간략화된 개념들을 소개하기 위해 제공된다. 본 요약은 청구 발명의 필수적인 특징들을 식별하고자 하는 의도도 없고, 청구 발명의 범위를 결정하는 데 사용하기 위한 의도도 없다.
스레드들을 인터셉트하고 분석하기 위한 장치 및 방법들이 개시된다. 일 실시예에서, 스레드 데이터 레코더가 하나 이상의 기존 함수를 호출하는 스레드들을 인터셉트하도록 하나 이상의 기존 함수 내의 컴퓨터 실행가능 명령어를 수정함으로써 하나 이상의 기존 함수를 인스트루먼팅(instrumenting)하도록 구성된다. 하나의 가능한 구현에서, 인스트루먼팅되는 기존 함수들의 수는 초크 포인트 함수들을 인스트루먼팅함으로써 감소할 수 있다.
인스트루먼팅된 함수들은 또한, 스레드들이 함수에서 실행될 때 스레드들과 연관된 데이터를 캡처할 수 있다. 이 데이터는 메모리에 저장되고, 로그들로 압축될 수 있다. 일 양태에서, 데이터는 프로세서 자원들이 소정 레벨 이하로 사용되고 있을 때 저장 및/또는 압축될 수 있다. 캡처된 데이터는 스레드들이 사용된 컴퓨터 시스템의 기능을 분석하는 데 사용될 수 있다.
첨부 도면들을 참조하여 상세한 설명이 기술된다. 도면들에서, 참조 번호의 가장 좌측의 숫자(들)는 참조 번호가 최초로 나타나는 도면을 식별한다. 도면들 전반에서 동일 번호들은 동일한 특징들 및 컴포넌트들을 참조하는 데 사용된다.
도 1은 하나 이상의 스레드가 생성되는 예시적인 네트워크 환경을 나타내는 도면이다.
도 2는 스레드들을 인터셉트하고 스레드들과 연관된 데이터를 캡처하기 위한 예시적인 아키텍처를 나타내는 도면이다.
도 3은 스레드들을 인터셉트하고 스레드들과 연관된 데이터를 캡처하기 위한 예시적인 컴퓨팅 기반 장치를 나타내는 도면이다.
도 4는 이벤트 블록의 예시적인 논리 표현을 나타내는 도면이다.
도 5는 이벤트 블록 집합의 예시적인 물리 표현을 나타내는 도면이다.
도 6은 예시적인 수집 서버를 나타내는 도면이다.
도 7은 예시적인 분석 서버를 나타내는 도면이다.
도 8은 하나 이상의 액티비티 버스트의 예시적인 표현을 나타내는 도면이다.
도 9는 스레드들을 인터셉트하고 스레드들과 연관된 데이터를 캡처하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 10은 정규화된 이벤트들을 배열된 이벤트 스트림에 추가하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 11은 누설된 엔트리들을 검출하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 12는 공통적인 잘못된 구성들을 검출하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 13은 하나 이상의 확장성 포인트들을 검출하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 14는 하나 이상의 액티비티 버스트를 분석하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 15는 검증되지 않은 상호작용들의 실행을 금지하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 16은 사기 프로그램을 검출하기 위한 예시적인 방법(들)을 나타내는 도면이다.
도 17은 예시적인 컴퓨터 환경을 나타내는 도면이다.
실시예들이 프로그램 실행 스레드들로부터의 데이터 수집을 통해 컴퓨터 시스템의 기능의 분석을 제공하는 스레드 인터셉션 및 분석이 설명된다. 프로그램 실행 스레드들은 주어진 프로그램으로부터 코드를 실행하는 시스템 내의 임의의 스레드를 포함할 수 있다.
스레드는 프로세서 상의 실행 경로를 포함할 수 있고, 스레드들은 하드웨어, 가상 머신(VM) 구현으로부터의 하이퍼바이저들 내의 실행 경로들, 단일 스레드 시스템들(레거시 유닉스 OSS 시스템 등), 멀티스레드 OS 등과 연관될 수 있다. 일 실시예에서, 프로그램 스레드, 또는 OS 자체가 소유하는 스레드는 다른 프로그램으로부터의 코드를 실행할 수 있다. 스레드의 수집 및/또는 추적은 스레드의 소유자 또는 생성자와 관계없이 수행될 수 있다.
일 구현에서, 시스템의 하나 이상의 동작 계층들 내의 선택 함수들은 선택 함수들을 호출하는 스레드들의 인터셉션을 유발하는 컴퓨터 판독가능 명령어를 포함하도록 인스트루먼팅된다. 컴퓨터 판독가능 명령어는 또한, 함수들을 호출하는 스레드들과 연관된 데이터의 수집을 유발할 수 있다. 이 데이터는 스레드들과 연관된 프로세스들/프로그램들, 스레드들과 연관된 사용자들, 스레드들과 연관된 타임스탬프들, 스레드들과 연관된 상호작용들, 전체 시스템의 상태 등의 상세들을 포함할 수 있다.
데이터는 여러 목적으로 사용될 수 있다. 예를 들어, 스레드들과 연관된 데이터는 스레드들에 의해 유발되고 있는 상호작용들이 설정된 정책에 따라 적법한지를 검증하기 위해 검사될 수 있다. 다른 구현에서, 수집된 데이터는 압축, 저장될 수 있고, 나중에 컴퓨터 시스템의 잘못된 거동 또는 오기능의 가능한 원인들을 격리하기 위해 분석될 수 있다.
다른 가능한 실시예에서, 수집된 데이터는 관련된 상호작용들의 집합을 액티비티 버스트로 그룹화하고 유사한 속성들과 연관된 액티비티 버스트들을 비교함으로써 분석될 수 있다. 일 구현에서, 유사한 상호작용들과 연관된 액티비티 버스트들은 수집된 데이터와 연관된 액티비티 버스트들과 비교될 수 있다. 또 다른 구현에서, 수집된 데이터와 연관된 액티비티 버스트들은 하나 이상의 사용자에 고유한 상호작용들과 비교될 수도 있다. 마찬가지로, 또 다른 가능한 구현에서, 보증되지 않은 상호작용들과 연관된 액티비티 버스트들에 시그니처를 할당하여, 컴퓨터 시스템이 그러한 상호작용들을 빠르게 인식하고 금지하는 것을 가능하게 할 수 있다. 더욱이, 액티비티 버스트들은 시간, 사용자들, 프로그램들 등을 포함하는 임의의 차원들을 따라 관련 액티비티의 클러스터들을 식별하는 데 사용될 수 있다.
스레드 인터셉션 및 분석을 위한 설명되는 시스템들 및 방법들의 양태들은 임의 수의 상이한 컴퓨터 시스템, 환경 및/또는 구성에서 구현될 수 있지만, 스레드 인터셉션 및 분석의 실시예들은 이하의 예시적인 시스템 아키텍처(들)와 관련하여 설명된다.
예시적인 시스템
도 1은 스레드들이 인터셉트되고 분석될 수 있는 예시적인 컴퓨터 시스템(100)을 나타낸다. 컴퓨터 시스템(100)은 중앙 컴퓨팅 기반 장치(102), 다른 컴퓨팅 기반 장치들(104(a)-(n)) 및 수집 서버(106)를 포함한다. 중앙 컴퓨팅 기반 장치(102), 컴퓨팅 기반 장치들(104(a)-(n)) 및 수집 서버(106)는 퍼스널 컴퓨터(PC), 웹 서버, 이메일 서버, 홈 엔터테인먼트 장치, 게임 콘솔, 셋톱 박스, 및 이 분야에 공지된 임의의 다른 컴퓨팅 기반 장치를 포함할 수 있다.
더욱이, 컴퓨터 시스템(100)은 임의 수의 컴퓨팅 기반 장치(102, 104(a)-(n))를 포함할 수 있다. 예를 들어, 일 구현에서, 컴퓨터 시스템(100)은 수천 대의 사무실 PC, 다양한 서버, 및 여러 국가에 배치된 다른 컴퓨팅 기반 장치들을 포함하는 회사 네트워크일 수 있다. 대안으로, 다른 가능한 구현에서, 시스템(100)은 단일 가정에 속하는 제한된 수의 PC들을 구비하는 홈 네트워크를 포함할 수 있다.
컴퓨팅 기반 장치들(102, 104(a)-(n))은 LAN, WAN, 또는 이 분야에 공지된 임의의 다른 네트워킹 기술을 포함하는 유선 및/또는 무선 네트워크를 통해 다양한 조합으로 서로 결합될 수 있다.
컴퓨팅 기반 장치들(102, 104(a)-(n))은 또한, 스레드들을 인터셉트하도록 시스템(100)의 함수들을 인스트루먼팅할 수 있는 스레드 데이터 레코더들(108(a)-(n))을 각각 포함할 수 있다. 함수들의 인스트루먼팅은 함수를 호출하는 스레드들을 인터셉트하기 위한 함수 내의 컴퓨터 판독가능 명령어의 수정, 추가 및/또는 삭제를 포함할 수 있다. 하나의 가능한 구현에서, 함수들의 인스트루먼팅은 또한, 스레드와 연관된 프로그램, 스레드와 연관된 하나 이상의 상호작용, 스레드와 연관된 프로그램의 사용자, 스레드 내의 각각의 상호작용과 연관된 타임스탬프 등을 포함하는 스레드와 연관된 데이터의 캡처를 가능하게 하는 함수 내의 컴퓨터 판독가능 명령어를 실행하도록 스레드에게 요구하기 위한 함수 내의 컴퓨터 판독가능 명령어의 수정, 추가 및/또는 삭제를 포함한다.
또 다른 구현에서, 스레드 데이터 레코더들(108(a)-(n))은 또한, 가상 머신(VM)에 의해 해석되는 코드를 모니터링하는 데 사용될 수 있다. VM은 실행을 위한 코드를 하나 이상의 프로세서에 전송하는 대신에 VM 상에서 실행되고 있는 코드를 해석하는 프로그램가능 함수들을 포함한다. VM에 의해 해석되는 코드는 인터셉트될 함수들을 식별하기 위해 스레드 데이터 레코더들(108(a)-(n))에 의해 모니터링될 수 있다. 인터셉션 시에, 스레드 데이터 레코더들(108(a)-(n))은 VM 상에서 실행되는 시스템의 상태를 검사 및/또는 기록할 수 있다. 이러한 검사 및 기록은 코드의 이진 수정과 등가일 수 있다. 이진 수정은 임의의 실행되는 소프트웨어에 대한 변경들을 요구하는 것 대신에 VM의 일부가 될 수 있다.
인스트루먼팅된 함수들은 프로그램/프로세스에 의해 호출될 수 있는 임의의 함수들을 포함할 수 있다. 일 구현에서, 인스트루먼팅된 함수들은 파일 시스템 드라이버, 레지스트리 함수, 새로운 프로세스 및/또는 서비스를 생성하는 함수 등과 같은 로우 레벨 초크 포인트 함수들을 포함할 수 있다.
스레드들에 의해 캡처된 데이터는 시스템(100)의 거동을 조절하고 시스템(100)의 조건을 검사하기 위해 저장 및/또는 처리될 수 있다. 스레드 데이터 레코더들(108(a)-(n))에 의해 스레드들로부터 캡처될 수 있는 데이터의 유형들 및 스레드 데이터 레코더들(108(a)-(n))의 동작은 아래에서 도 2와 관련하여 상세히 설명된다.
예시적인 컴퓨터 시스템(100)에서, 컴퓨팅 기반 장치들(102, 104(a)-(n)) 각각은 스레드 데이터 레코더(108)를 포함한다. 그러나, 스레드 데이터 레코더(108(a)-(n))은 컴퓨팅 기반 장치들(102, 104(a)-(n))의 임의 조합 상에 포함될 수 있음을 이해할 것이다. 예를 들어, 일 구현에서, 컴퓨터 시스템(100) 내의 단일 컴퓨팅 기반 장치(102, 104(a)-(n))가 스레드 데이터 레코더(108)를 포함할 수 있다. 대안으로, 다른 가능한 구현에서, 여러 선택된 컴퓨팅 기반 장치들(102, 104(a)-(n))이 스레드 데이터 레코더들(108)을 포함할 수 있다.
함수들로부터 캡처된 데이터는 스레드 데이터 레코더(108) 내에서 처리되거나, 보존, 처리 및/또는 분석을 위해 수집 서버(106)와 같은 다른 장치로 전송될 수 있다. 수집 서버(106)의 동작은 아래에서 도 6과 관련하여 상세히 설명된다. 도 1은 수집 서버(106)가 컴퓨팅 기반 장치(102)에 결합됨을 도시하고 있다. 그러나, 수집 서버(106)는 컴퓨팅 기반 장치들(104(a)-(n)) 중 하나 이상에 결합될 수 있음도 이해할 것이다. 더욱이, 다른 수집 서버들(106)이 컴퓨터 시스템(100) 내에 존재할 수 있으며, 컴퓨팅 기반 장치들(102, 104(a)-(n))의 임의 조합이 하나 이상의 수집 서버(106)에 결합될 수 있다.
또한, 컴퓨팅 기반 장치들(102, 104(a)-(n)은 다른 컴퓨팅 기반 장치들(102, 104(a)-(n))을 통해 하나 이상의 수집 서버(106)에 결합될 수 있음을 이해할 것이다. 예를 들어, 일 실시예에서, 스레드 데이터 레코더(108(b))로부터 수신된 데이터는 컴퓨팅 기반 장치(102)를 통해, 데이터가 수집될 수 있는 수집 서버(106)로 전송될 수 있다. 유사한 방식으로, 스레드 데이터 레코더들(108(c)-(n))로부터의 데이터는 수집 서버(106)로 전송되어 수집될 수 있다.
도 2는 컴퓨팅 기반 장치들(102, 104(a)-(n)) 중 하나 이상에서의 다양한 동작 계층의 예시적인 아키텍처(200)를 나타낸다. 동작 계층들은 컴퓨팅 기반 장치들(102, 104(a)-(n)) 중 하나 이상에 의해 실행되고 있는 프로그램의 기능과 직접 관련될 필요는 없다. 오히려, 동작 계층들은 스레드 인터셉션에 수반되는 다양한 단계들을 나타내기 위한 예시로서만 기능한다. 고려되는 계층들은 소프트웨어 또는 물리 하드웨어를 통해 구현되는 개별적인 논리 또는 물리 플랫폼들일 수 있다.
아키텍처(200)는 프로그램 계층(202), 미들웨어 계층(204) 및 운영 체제 계층(206)을 포함한다. 도시된 아키텍처(200)의 예시적인 구현에서, 스레드 데이터 레코더(108)는 운영 체제 계층(206) 내에서 동작한다. 그러나, 스레드 데이터 레코더(108)는 아키텍처(200) 내의 다른 계층들에 존재할 수 있음도 이해할 것이다. 예를 들어, 스레드 데이터 레코더(108)는 상이한 시간에 계층들(202, 204, 206) 중 하나 이상에 존재할 수 있다. 또한, 스레드 데이터 레코더(108)는 계층들(202, 204, 206) 중 하나 이상에 동시에 존재할 수 있다. 이와 같이, 스레드들의 인터셉션은 임의의 계층(202, 204, 206)에서 수행될 수 있다. 또 다른 구현에서, 운영 체제 계층(206)은 가상 머신(VM)에서 수행될 수도 있으며, 이는 VM과 연관된 동작 계층에서의 데이터의 캡처를 허가한다. 이러한 시나리오에서, VM과 연관된 이 동작 계층은 계층들(202, 204, 206)에 부가될 수 있다.
일 실시예에서, 스레드 데이터 레코더(108)는 하나 이상의 프로그램으로부터 스레드들을 인터셉트함으로써 하나 이상의 프로그램(애플리케이션, 운영 체제 등)과 파일 시스템(208) 사이의 상호작용들과 연관된 데이터를 캡처한다. 파일 시스템(208)은 예를 들어 데이터 파일, 실행가능 파일과 같은 파일들, 설정 정보(구성 설정 등) 등을 포함할 수 있다.
도 1과 관련하여 전술한 바와 같이, 컴퓨팅 기반 장치들(102, 104(a)-(n)) 각각은 스레드 데이터 레코더(108)를 포함할 수 있다. 대안으로, 스레드 데이터 레코더들(108)은 컴퓨팅 기반 장치들(102, 104(a)-(n))의 임의 조합 상에 포함될 수 있다.
프로그램 계층(202)은 아키텍처(200) 내에서 실행되는 애플리케이션과 같은 하나 이상의 프로그램을 포함할 수 있다. 프로그램 계층(202)은 하나 이상의 프로그램이 그들 사이에 상호작용하고, 또한 애플리케이션 프로세스들과 연관된 공통 애플리케이션 서비스들을 수행하기 위한 플랫폼을 제공한다. 프로그램 계층(202)에서 실행될 수 있는 애플리케이션들의 몇 가지 가능한 예는 워드 프로세싱 애플리케이션, 스프레드시트 애플리케이션, 메일 애플리케이션 등을 포함한다.
프로그램 계층(202)에 실행되는 하나 이상의 프로그램은 하나 이상의 동작의 실행 동안 파일 시스템(208) 내의 데이터 및/또는 설정들과 상호작용할 수 있다. 동작들 또는 상호작용들의 가능한 예는 파일 시스템(208)에서의 파일 및 레지스트리 설정의 변경을 포함하는 파일 시스템(208)에서 수행되는 판독, 기록 및 실행 동작을 포함한다.
프로그램 계층(202), 미들웨어 계층(204), 운영 체제(206) 및 파일 시스템(208) 간의 상호작용들은 프로그램 계층(202) 내에서 실행되는 프로그램들에 의해 생성되는 스레드들을 통해 발생한다. 하나 이상의 태스크를 수행하는 모든 프로그램은 프로그램의 주요 함수와 연관된 스레드와 같이 프로그램의 실행의 결과로서 생성되는 적어도 하나의 스레드를 갖는다. 스레드들은 프로그램이 그 자신을 둘 이상의 동시 실행 태스크로 분할하는 것을 가능하게 한다. 이러한 태스크들은 예를 들어 스레드를 생성하는 프로그램의 실행과 연관될 수 있다. 대안으로, 태스크들은 파일 시스템(208)과의 상호작용이 귀착되는(구성 설정이 변경될 때 등에) 프로그램과 다른 애플리케이션들 간의 통신과 연관될 수 있다.
시스템(100)과 같은 시스템에서 임의 스레드들과 연관된 정보가 캡처될 수 있음을 이해할 것이다. 예를 들어, 임의의 동작 계층에서 생성되는 스레드들의 실행과 연관된 정보가 미래의 분석을 위해 인터셉트되고 수집될 수 있다. 이것은 예를 들어 프로그램의 코드 내로 호출하는 운영 체제와 연관된 스레드들을 포함할 수 있다.
개별 스레드들은 하나 이상의 프로그램과 파일 시스템(208) 사이의 개별 상호작용들을 지시할 수 있다. 각각의 스레드는 그 상호작용에 고유한 속성들을 정의하는 데이터를 갖는다. 예를 들어, 속성들은 상호작용을 개시하는 프로그램의 식별, 현행 함수 시퀀스 내의 중첩 함수들의 스택 등을 포함할 수 있다. 파일 시스템(208)과의 각각의 상호작용을 위해, 프로그램 계층(202)에서 생성된 스레드는 미들웨어 계층(204)을 통해 운영 체제 계층(206)으로 전송된다.
미들웨어 계층(204)은 프로그램 계층(202)에서 실행되는 소프트웨어 컴포넌트들 및/또는 프로그램들을 운영 체제 계층(206)에 접속하는 미들웨어라고 하는 컴퓨터 소프트웨어를 포함한다. 미들웨어 계층(204)은 프로그램 계층(202)과 운영 체제 계층(206) 사이의 중재 동작 계층을 제공하며, 미들웨어는 복잡한 분산형 애플리케이션들을 지원할 수 있다. 미들웨어의 몇 가지 가능한 예는 웹 서버, 애플리케이션 서버, 콘텐츠 관리 시스템, 및 애플리케이션 개발, 전달 등을 지원하는 유사한 도구를 포함한다.
운영 체제 계층(206)은 프로그램과 파일 시스템(208) 내의 데이터 및/또는 설정들 사이의 인터페이스로서 기능한다. 운영 체제 계층(206)은 파일 시스템(208) 내의 데이터 및/또는 설정들과의 임의의 상호작용들을 감독할 수도 있다. 더욱이, 운영 체제 계층(206)은 프로그램 계층(202)에서 실행되는 하나 이상의 프로그램의 실행을 위한 실행 시간 환경을 제공할 수 있다.
전술한 바와 같이, 운영 체제 계층(206)은 스레드 데이터 레코더(108)를 포함할 수도 있다. 스레드 데이터 레코더(108)는 프로그램 계층(202)에서 실행되는 하나 이상의 프로그램과 파일 시스템(208) 간의 상호작용들과 연관된 스레드들의 인터셉션을 실행하도록 구성된다. 스레드 데이터 레코더(108)는 스레드들과 연관된 정보의 캡처를 실행하도록 구성될 수도 있다.
예를 들어, 일 구현에서, 시스템(100)의 초기화 시에 스레드 데이터 레코더(108)는 시스템(100) 상에서 실행되는 선택 함수들을 호출하는 스레드들을 인터셉트하도록 선택 함수들을 인스트루먼팅한다. 함수들은 각각의 스레드와 연관된 프로그램 계층(202) 내의 프로그램의 식별, 각각의 스레드와 연관된 상호작용들, 각각의 스레드와 연관된 프로그램의 사용자, 스레드 내의 각각의 상호작용과 연관된 타임스탬프 등을 포함하는 스레드들과 연관된 데이터를 캡처하도록 인스트루먼팅될 수도 있다. 하나의 가능한 구현에서, 운영 체제 계층(206)에서 스레드 데이터 레코더(108)에 의해 캡처된 데이터는 운영 체제 계층(206)에 고유한 프로그램가능 언어로 되어 있다. 또 다른 구현에서, 임의의 동작 계층에서 생성된 스레드들의 실행과 연관된 정보는 미래의 분석을 위해 인터셉트되고 수집될 수 있다. 다른 가능한 구현에서, 스레드 데이터 레코더(108)는 VM 상의 프로그램 코드의 실행과 연관된 데이터를 캡처할 수도 있다.
스레드 데이터 레코더(108)는 임의의 계층(202, 204, 206)에서 실행되는 함수들을 호출하는 스레드들을 인터셉트하고 스레드들로부터 데이터를 캡처하도록 함수들을 인스트루먼팅할 수도 있다. 예를 들어, 지속 상태(PS) 상호작용들을 추적하기 위해, PS의 검색 및 설정에 수반되는 최하위 계층 내의 함수들이 인스트루먼팅될 수 있다. 도 3에서, 최하위 계층은 운영 체제 계층(206)으로 도시되어 있다. 그러나, 최하위 계층이 하드웨어, 소프트웨어, 펌웨어 등으로 구현될 수 있는 가상 머신 계층과 같은 계층들을 포함하는 것도 가능하다.
최하위 레벨 또는 계층에서 함수들을 호출하는 스레드들의 인터셉팅은 시스템(100)에서 실행되는 모든 프로그램 스레드의 커버리지를 가능하게 한다. 더욱이, 최하위 계층에 구현될 함수들은 파일 시스템 함수, 레지스트리 함수, 새로운 프로세스 또는 서비스를 생성하는 함수 등과 같은 다른 함수들에 의해 일상적으로 의존되는 초크 포인트 함수들 중에서 선택될 수 있다. 이러한 방식으로, 인스트루먼팅되어야 하는 함수들의 수가 감소될 수 있다.
대안으로, 상위 계층들(204, 202) 내의 함수들은 스레드 데이터 레코더(108)에 의해 인스트루먼팅될 수 있다. 예를 들어, 어느 웹 브라우저들이 어느 웹 사이트들을 방문하고 있는지를 추적하는 것이 필요한 경우, 스레드들에 의해 호출되는 상위 계층들 내의 함수들이 인스트루먼팅될 수 있다. 예를 들어, 프로그램 계층(202) 내의 함수들을 인스트루먼팅함으로써, 웹 브라우저에 의해 요청되는 URL 및 윈도우를 포함하는 데이터가 웹 브라우저와 연관된 스레드로부터 캡처될 수 있다.
이와 달리, 운영 체제 계층(206)과 같은 하위 계층들에서는, 계층들(202, 204)과 같은 상위 계층들에서보다 이용 가능 상황이 적다. 결과적으로, 하위 계층들로부터 스레드들을 인터셉트함으로써 사용자 의도와 같은 논리적 하이 레벨 상호작용들을 재구성하기가 더 어려울 수 있다.
예를 들어, 컴퓨터와 같은 장치에 의해 전송 또는 수신되고 있는 IP 패킷들과 같이 하위 계층들에서 인터셉트되는 스레드들은 웹 브라우저가 URL을 열고 있음을 추론하기에 충분한 정보를 제공하지 못할 수 있다. 이것은 이러한 패킷들 모두가 웹 브라우저에 대한 HTTP 데이터 스트림과 관련되는 상황을 이용 가능하지 못할 수 있기 때문이다. 이러한 상황 정보 없이는, 주어진 시간에 특정 IP 패킷들을 목적지에 전송하는 것과 같은 웹 브라우저의 사용자와의 시스템의 액션들 사이의 관계를 설정하기가 어려울 수 있다.
도 3은 컴퓨팅 기반 장치들(102, 104(a)-(n)) 중 적어도 하나의 예시적인 아키텍처(300)를 나타낸다. 아키텍처(300)는 하나 이상의 프로세서(302) 및 메모리(304)를 포함한다. 프로세서(들)(302)는 예를 들어 마이크로프로세서, 마이크로컴퓨터, 마이크로컨트롤러, 디지털 신호 프로세서, 중앙 처리 장치, 상태 머신, 로직 회로, 및/또는 동작 명령어에 기초하여 신호들을 처리하는 임의의 장치를 포함한다. 여러 능력들 중에서, 프로세서(들)(302)는 메모리(304)에 저장된 컴퓨터 판독가능 명령어를 페치하여 실행하도록 구성된다.
메모리(304)는 예를 들어 휘발성 메모리(예를 들어, RAM) 및/또는 비휘발성 메모리(예를 들어, 플래시 등)를 포함하는 이 분야에 공지된 임의의 컴퓨터 판독가능 매체를 포함할 수 있다. 도 3에 도시된 바와 같이, 메모리(304)는 프로그램(들)(306) 및 데이터(308)를 포함할 수도 있다. 프로그램(들)(306)은 예를 들어, 스레드 데이터 레코더(108), 압축 모듈(310), 사용자 데몬(312), 운영 체제(314), 및 워드 프로세싱 애플리케이션, 스프레드시트 애플리케이션 등과 같은 다른 애플리케이션(들)(316)을 포함한다.
도 2와 관련하여 전술한 바와 같이, 스레드 데이터 레코더(108)는 선택된 함수들을 인스트루먼팅하고, 하나 이상의 동작 계층(202, 204, 206)에서 인스트루먼팅된 함수들을 호출하는 인터셉트된 스레드들로부터 데이터를 캡처한다. 캡처된 데이터는 컴퓨팅 기반 장치들(102, 104(a)-(n))이 그 일부인 컴퓨터 시스템의 기능을 분석하는 데 사용될 수 있다. 다른 가능한 구현에서, 스레드 데이터 레코더(108)는 VM 상의 프로그램 코드의 실행과 연관된 데이터를 캡처할 수도 있다.
스레드 데이터 레코더(108)는 복제 모듈(318) 및 지시 모듈(320)을 포함한다. 일 구현에서, 스레드 데이터 레코더(108)는 기존 함수에 연결(hook into)함으로써 기존 함수를 인스트루먼팅한다. 하나의 예시적인 양태에서, 복제 모듈(318)은 기존 함수에 연결된다. 복제 모듈(318)은 호출 스레드가 함수에서 실행될 때 호출 스레드에 의해 실행되는 컴퓨터 판독가능 명령어를 포함할 수 있다. 복제 모듈(318)과 연관된 컴퓨터 판독가능 명령어는 데이터를 공유 메모리에 이벤트로서 복사할 수도 있다.
예를 들어, 스레드가 인스트루먼팅된 함수를 호출하고, 스레드가 인스트루먼팅된 함수에 의해 인터셉트되는 경우, 스레드와 연관된 데이터는 복제 모듈(318)에 의해 캡처되고 복제될 수 있다. 스레드와 연관된 데이터는 스레드와 함수 사이의 상호작용을 특성화하는 데이터, 또는 스레드를 생성한 액션과 연관된 데이터를 포함할 수 있다. 예를 들어, 데이터는 스레드와 연관된 상호작용, 함수가 호출될 때의 시스템(100)의 상태 등을 특성화할 수 있다. 데이터는 파일, 스트링, 메모리 위치, 파일과 연관된 파일명, 사용자 ID, 스레드 ID, 상호작용 유형, 스레드를 생성하는 프로그램, 상호작용의 실행 시간, 상호작용의 완료 시간 등에 관한 정보일 수도 있다.
스레드 데이터 레코더(108)는 캡처 및/또는 복제된 데이터를 버퍼 메모리(322)에 이벤트 패킷들(324)로서 저장할 수 있다. 버퍼 메모리(322)는 예를 들어 휘발성 메모리(예를 들어, RAM) 또는 비휘발성 메모리(예를 들어, 플래시 및 이 분야에 공지된 다른 유형의 메모리) 또는 이들의 조합을 포함하는 이 분야에 공지된 임의의 컴퓨터 판독가능 매체를 포함할 수 있다. 버퍼 메모리(322)는 데이터(308) 내에 위치하는 것으로 도시되어 있지만, 메모리(304) 내와 같이 데이터(308)의 외부에 위치할 수 있다는 것도 이해할 것이다. 또한, 일 구현에서, 버퍼 메모리(322)는 컴퓨팅 기반 장치들(102, 104(a)-(n))의 외부에 위치할 수 있다.
하나의 가능한 구현에서, 파일명과 같은 식별을 제공하는 속성들이 결여된 복사된 데이터는 스레드 데이터 레코더(108)에 의해 고유 식별자와 연관될 수 있다. 이러한 고유 식별자는 예를 들어 핸들을 포함할 수 있다. 예를 들어, 이벤트들의 식별을 제공하는 속성들이 결여된 이벤트들은 동일 스레드로부터 동일 핸들을 갖는 다른 이벤트들을 식별한 후 핸들과 연관된 명칭을 속성들이 누락된 이벤트에 복사함으로써 치유될 수 있다.
스레드 데이터 레코더(108) 내의 지시 모듈(320)은 사용자 데몬(312)에게 버퍼 메모리(322) 내에 수집된 이벤트 패킷들(324)의 압축을 구현하도록 지시한다. 이를 위해, 사용자 데몬(312)은 압축 모듈(310)에게 이벤트 패킷들(324)을 블록 스토리지(328)에 저장될 수 있는 이벤트 블록(326)으로 압축하도록 지시한다. 블록 스토리지(328)는 하나 이상의 이벤트 블록(326)을 포함할 수 있다.
사용자 데몬(312)은 사용자의 직접 중재를 통해 시작되지도 종료되지도 않는 프로세스이다. 일 구현에서, 사용자 데몬(312)은 서비스이다. 다른 구현에서, 사용자 데몬(312)은 가상 머신(VM) 및 그와 연관된 동작 계층의 프로그램가능 명령어 내에 포함될 수 있다. 또 다른 구현에서, 사용자 데몬(312)은 운영 체제(314)와 같은 운영 체제의 커널 내에 구현될 수 있다.
사용자 데몬(312)은 버퍼 메모리(322)의 소정의 메모리 용량에 도달한 후에 이벤트 패킷들(324)의 압축을 구현하도록 프로그래밍될 수 있다. 다른 구현에서, 사용자 데몬(312)은 이벤트 패킷들(324)의 압축을 주기적으로 구현하도록 프로그래밍될 수 있다. 또 다른 가능한 구현에서, 사용자 데몬(312)은 버퍼 메모리(322) 내의 이벤트 패킷들(324)의 소정 크기의 하나 이상의 이벤트 블록(326)으로의 압축을 구현할 수 있다.
또 다른 가능한 구현에서, 사용자 데몬(312)은 이벤트 블록들(326)의 수집 서버(106)로의 전송을 주기적으로 구현할 수 있다. 또 다른 가능한 구현에서, 사용자 데몬(312)은 컴퓨팅 기반 장치들(102, 104(a)-(n))의 외부에 위치할 수 있다. 예를 들어, 외부에 위치하는 사용자 데몬(312)은 가상 머신(VM) 및 그와 연관된 동작 계층의 프로그램가능 명령어 내에 포함될 수 있다.
사용자 데몬(312)은 예를 들어 스레드 데이터 레코더(108), 수집 서버(106) 등 중 어느 하나 또는 모두에 의해 제공되는 입력들에 의하여 그 자신의 동작을 관리할 수도 있다. 또한, 사용자 데몬(312)은 처리 자원들이 다른 프로그램들에 의해 사용되고 있지 않거나 처리 자원들이 소정 액티비티 레벨 이하로 사용되고 있는 순간들에 그의 기능들의 임의 또는 모두를 수행하도록 구성될 수 있다. 더욱이, 사용자 데몬(312)은 하나 이상의 특정 프로세서 상에서 그의 기능들의 임의 또는 모두를 수행하도록 구성될 수 있다. 일 구현에서, 이것은 사용자 데몬(312)의 전용인 하나 이상의 특정 프로세서를 포함할 수 있다.
스레드 데이터 레코더(108)는 이벤트 패킷들(324)의 동일 또는 유사한 속성들에 기초하여 이벤트 패킷들(324)을 이벤트 블록들(326)로 그룹화함으로써 블록 스토리지(328)에 저장되는 이벤트 블록들(326)을 준비할 수 있다. 예를 들어, 특정 워드 프로세싱 프로그램과 연관된 버퍼 메모리(322) 내의 모든 이벤트 패킷(324)을 포함하는 이벤트 블록들(326)이 형성될 수 있다. 대안으로, 다른 가능한 구현에서, 특정 사용자 ID와 연관된 버퍼 메모리(322) 내의 모든 이벤트 패킷(324)을 포함하는 이벤트 블록들(326)이 형성될 수 있다.
이벤트 블록들(326)은 인스트루먼팅된 함수들에서 인터셉트된 스레드들과 연관된 정보를 포함하는 개별 유닛들이다. 스레드들과 연관된 이 정보는 시스템(100)의 기능에 관한 정보를 포함할 수 있다.
하나의 가능한 구현에서, 스레드들과 연관된 정보는 검색 가능한 정보의 집합을 구현하도록 블록 스토리지(328) 내에 체계화된다. 이벤트 블록들(326)의 체계화된 집합과 같은 이러한 검색 가능한 정보의 집합은 로그라고 부를 수 있다. 이벤트 블록들(326) 및 블록 스토리지(328)의 구조는 도 4 및 5와 관련하여 아래에서 상세히 설명된다.
또한, 도 3은 스레드 데이터 레코더(108)가 복제 모듈(318) 및 지시 모듈(320)을 포함하는 것으로 도시하고 있지만, 스레드 데이터 레코더(108)가 압축 모듈(310) 및 사용자 데몬(312)과 같은 다른 프로그램들 및 요소들을 포함하는 것도 가능하다. 더욱이, 스레드 데이터 레코더(108)는 프로그램들(306) 중의 다른 프로그램들 내에 위치할 수 있다. 예를 들어, 하나의 가능한 구현에서, 스레드 데이터 레코더(108)는 운영 체제(314)의 일부일 수 있다.
도 4에는, 블록 스토리지(328)에 저장된 이벤트 블록(326)의 예시적인 논리 표현이 도시되어 있다. 이벤트 블록들(326)의 포맷은 많은 고려 사항에 의해 좌우될 수 있다. 예를 들어, 하나의 예시적인 구현에서, 스레드들은 이벤트들의 트레이스들로서 표현될 수 있다. 이벤트들의 트레이스들은 병렬이지만 연결된 둘 이상의 데이터 스트림 내에 표현된 이벤트 정보를 포함한다.
도 4에 주어진 예시적인 논리 표현에서, 이벤트 블록들(326) 내의 이벤트 정보는 타임스탬프 스트림(402) 및 배열된 이벤트 스트림(404)에 의해 표현된다. 타임스탬프 스트림(402)은 상호작용들의 그룹들에 관한 정보, 고려 중인 이벤트들이 발생한 시간들 등을 포함할 수 있다. 예를 들어, 타임스탬프 스트림(402)에 포함된 정보는 예를 들어 블록(326) 내의 이벤트 정보와 연관된 스레드들이 생성된 시간, 블록(326) 내의 이벤트 정보와 연관된 이벤트가 발생한 시작 및 종료 시간 등을 포함할 수 있다.
일 구현에서, 고려 중인 이벤트들이 발생한 시간들은 이벤트 ID들의 테이블로서 표현되는데, 여기서 각각의 이벤트 ID는 개별 파일, 레지스트리, 모듈, 프로세스 이벤트 등에 대한 식별자이다. 이러한 이벤트 ID들은 이들이 수신되는 방식으로 배열된다. 다른 구현에서, 이벤트들은 다른 엔트리들, 예를 들어 타임스탬프, 이 타임스탬프를 가진 최초 이벤트의 오프셋, 이 타임스탬프를 가진 최종 이벤트의 오프셋 등에 기초하여 배열될 수 있다. 이벤트들이 배열되는 방식은 도 5와 관련하여 더 설명된다.
이벤트 블록(326) 내에 배열된 이벤트 스트림(404)은 임의의 스레드 데이터 레코더(108)에 의해 인터셉트되고 복제된 이벤트 정보를 포함한다. 이벤트 정보는 상호작용의 특성, 상호작용을 개시한 애플리케이션 등에 관한 정보를 포함할 수 있다.
배열된 이벤트 스트림(404) 내의 이벤트 정보는 개별 파일 상호작용(들)(408), 개별 레지스트리 상호작용(들)(410), 프로세스 테이블(들)(412), 모듈 테이블(들)(414) 및 다른 상호작용(들)(416)과 같은 개별 지속 상태(PS) 상호작용(들)(406)의 하나 이상의 섹션으로 정규화될 수 있다. 이러한 방식으로, 지속 상태(PS) 상호작용(들)(406) 내의 이벤트 정보는 소정의 속성들에 기초하여 하위 부분(sub-division)들로 체계화되거나 배열될 수 있다. 개별 PS 상호작용(들)(406) 내의 각 유형의 상호작용(408-416)은 이벤트 블록(326), 블록 스토리지(328) 또는 이들의 조합과 같은 로그 파일 내의 섹션에 맵핑될 수 있다. 개별 PS 상호작용(들)(406)에 포함된 것과 같은 이벤트 정보의 맵핑 및 정규화는 이 분야에 공지된 임의의 프로시저를 이용하여 달성될 수 있다.
프로세스를 시작한 실행 파일에 대한 경로(및 아마도 또한 실행 파일의 해시) 및 프로세스의 시작 및 종료 시간을 포함하는 프로세스 테이블(들)(412)은 프로세스들을 추적하는 데 사용될 수 있다. 일 구현에서, 프로세스 테이블(들)(412)은 고려되는 이벤트와 연관된 속성들을 기술하는 정보를 포함할 수 있다. 정보는 예를 들어 생성 시간, 사용자 상황, 이미지 명칭(스트링으로 저장됨), 명령 라인(스트링으로 저장됨), 이벤트에 영향을 미치는 명령 라인, 이벤트의 발생시에 시스템 상황을 더 기술하기 위한 다양한 핸들 정보 등을 포함할 수 있다.
모듈 테이블(들)(414)은 고려되는 이벤트로 귀착되는 프로그램 모듈과 연관된 하나 이상의 설정을 정의하는 정보를 포함할 수 있다. 이러한 정보는 예를 들어 스트링 테이블에 저장된 파일명 스트링, 타임스탬프 정보, 사용자 상황, 프로그램 모듈의 로딩을 담당하는 스레드/프로세스에 대한 참조, 메모리 내의 프로그램 모듈에 대한 경로(및/또는 실행 파일의 해시) 등을 포함할 수 있다.
일 구현에서, 모듈 테이블(들)(414)은 레지스트리 또는 파일과 유사하다.
개별 파일 상호작용(들)(408)은 예를 들어 파일 시스템(208)과 더불어 발생한 하나 이상의 상호작용에 관한 정보를 포함한다. 개별 파일 상호작용(들)(408)은 시스템에서 발생하는 모든 로깅된 이벤트와 연관된 정보를 포함할 수 있다. 이러한 상호작용들은 프로그램 계층(202)에서 실행되는 하나 이상의 애플리케이션으로부터 파일 시스템(208)에 대한 하나 이상의 판독 및/또는 기록 프로세스를 포함할 수 있다. 개별 파일 상호작용(들)(408)에 관한 정보의 예는 파일의 경로명, 파일명, 파일과의 상호작용인지 또는 디렉토리와의 상호작용인지, 판독 및/또는 기록된 바이트들의 수 등을 포함한다. 또 다른 구현에서, 개별 파일 상호작용(들)(408)은 개별 명칭, 사용자 상황, 프로세스 정보, 파일 데이터 해시 및 값과 같은 이벤트 정보에 따라 배열된 데이터를 갖는 서브 섹션들을 더 포함한다. 개별 파일 상호작용(들)(408) 내의 서브 섹션들의 예는 사용자 테이블(들)(418), 스레드 테이블(들)(420), 스트링 테이블(들)(422), 다른 테이블(들)(424) 등을 포함한다.
개별 레지스트리 상호작용(들)(410)은 컴퓨팅 기반 장치들(102, 104(a)-(n)) 중 어느 하나에서 실행되는 컴퓨터 기반 애플리케이션들의 레지스트리 설정들에 대한 추가 또는 삭제를 지시하는 정보를 포함한다. 개별 레지스트리 상호작용(들)(410)의 예는 레지스트리의 명칭, 레지스트리의 위치, 레지스트리 내의 데이터 등과 같은 레지스트리 설정들의 변경을 지시하는 정보를 포함할 수 있다. 다른 유형의 상호작용들(416)은 다양한 다른 액티비티, 예를 들어 소정 파일들의 실행 등과 연관된 정보를 포함한다.
도 5는 이벤트 블록 집합(500)의 예시적인 물리 레이아웃을 나타낸다. 이벤트 블록 집합(500)은 블록 스토리지(328)에서 발견되는 하나 이상의 이벤트 블록(326)을 연관시킴으로써 생성될 수 있다. 일 구현에서, 하나 이상의 이벤트 블록(326)은 이벤트 블록 집합(500)을 형성하도록 압축된다.
이벤트 블록 집합(500)은 사용자 데몬(312), 압축 모듈(310), 수집 서버(106) 또는 이들의 조합에 의해 생성될 수 있다. 더욱이, 이벤트 블록 집합(500)은 여러 자극에 응답하여 생성될 수 있다. 예를 들어, 이벤트 블록 집합(500)은 소정 양의 블록 스토리지(328)가 채워질 경우에 생성될 수 있다. 대안으로, 다른 가능한 구현에서, 이벤트 블록 집합(500)은 소정 양의 시간이 경과된 후와 같이 주기적으로 생성될 수 있다.
이벤트 블록 집합(500)은 헤더(502), 및 하나 이상의 블록(506) 및 블록 테이블(들)(508)을 포함하는 블록 스토리지 영역(504)을 포함한다. 블록들(506)은 이벤트 블록(326), 압축된 이벤트 블록(326), 또는 압축되거나 압축되지 않은 이벤트 블록들(326)의 그룹일 수 있다. 블록(506) 내의 압축되거나 압축되지 않은 블록 이벤트들(326)이 저장되는 메모리 어드레스들에 대한 참조들은 이벤트들 및 이들과 연관된 상호작용들 후에 시도되는 빠른 탐색을 용이하게 하기 위해 하나 이상의 블록 테이블(508) 내에 배열된다. 예를 들어, 블록 테이블(들)(508)은 소정 사용자 ID와 연관된 스레드 정보를 포함하는 이벤트 블록 집합(500) 내의 모든 블록(506)의 어드레스들을 포함할 수 있다. 다른 가능한 구현에서, 블록 테이블(들)(508)은 스프레드시트 프로그램과 연관되거나, 소정의 시간 범위 내의 타임스탬프를 포함하는, 이벤트 블록 집합(500) 내에 포함된 모든 블록(506)의 메모리 어드레스들을 포함할 수 있다.
이벤트 블록 집합(500) 내의 헤더는 스토리지 영역(504)의 내용들을 기술하는 정보를 더 포함한다. 일 구현에서, 헤더(502)는 버전 정보(510), 섹션 기술자(들)(512) 및 블록 테이블 기술자(들)(514)를 포함한다. 버전 정보(510)는 이벤트 블록 집합(500)의 변경에 관한 정보를 포함할 수 있다. 예를 들어, 버전 정보(510)는 현행 이벤트 블록 집합(500)에 이르기 위해 이벤트 블록 집합(500)의 이전 버전으로부터 이루어진 변경들에 관한 정보를 포함할 수 있다.
섹션 기술자(들)(512)는 사용자 테이블(들)(414), 스레드 테이블(들)(416) 등과 같은 요소들이 저장되는 메모리(304) 및 수집 서버(106) 내의 메모리와 같은 메모리 내의 위치들의 시작 및 끝을 지시하는 시작 및 종료 오프셋들을 포함한다. 이러한 오프셋들은 플래그, 포인터 등을 통해 구현될 수 있다. 마찬가지로, 블록 테이블 기술자(들)(514)는 블록 테이블(들)(508)이 저장되는 메모리(304) 또는 수집 서버(106) 내의 메모리와 같은 메모리 내의 위치들의 시작 및 끝을 각각 지시하는 시작 오프셋(들)(516) 및 종료 오프셋(들)(518)을 포함할 수 있다. 더욱이, 일 구현에서, 블록 테이블 기술자(들)(514) 내의 시작 오프셋(들)(516) 및 종료 오프셋(들)(518)은 블록 테이블들(506)이 저장되는 수집 서버(106) 내의 메모리 위치들의 시작 및 끝을 지시한다.
스토리지 영역(504) 내의 블록 테이블(들)(508)은 블록 엔트리들(520)을 포함한다. 블록 엔트리들(520)은 스토리지 영역(504)에 저장된 블록들(506)의 시작 및 끝을 각각 지시하는 시작 오프셋들(522) 및 종료 오프셋들(524)을 포함한다. 스토리지 영역(504)은 메모리(304) 내에 또는 수집 서버(106)의 메모리 내에 위치할 수 있다.
이벤트들의 시간들은 다양한 방식으로 표현될 수 있음을 이해할 것이다. 예를 들어, 일 구현에서, 각각의 ID가 개별 파일/레지스트리/모듈/프로세스 이벤트들로의 인덱스인 이벤트 ID들의 테이블이 존재할 수 있다. 이러한 ID들은 이들이 수신된 방식에 따라 배열될 수 있다. 이러한 순서는 ID들이 생성 또는 측정된 순서에 의해 유지될 수 있다.
타임스탬프들의 테이블이 유지될 수 있음도 이해할 것이다. 다수의 이벤트가 동일 타임스탬프를 가질 수 있다. 이러한 방식으로, 테이블은 (1) 타임스탬프, (2) 이 타임스탬프를 가진 최초 이벤트의 오프셋, 및 (3) 이 타임스탬프를 가진 최종 이벤트의 오프셋과 같은 체계화 정보를 생성할 수 있다.
도 4 및 5와 관련하여 설명된 구조들 및 기술들은 다양한 데이터 유형(스레드들, 다양한 프로그램, 플랫폼 등과 연관된 데이터 및 명령을 포함함)과 함께, 그리고 다양한 상이한 애플리케이션에 대해 사용될 수 있음도 이해할 것이다. 예를 들어, 도 4 및 5와 관련하여 설명된 구조들 및 기술들은 임의의 로그들에 대한 압축 및 쿼리 개선과 관련하여 이용될 수 있다. 더욱이, 하나의 예시적인 구현에서, 도 4 및 5와 관련하여 설명된 구조들 및 기술들은 웹 트래픽의 애드센스(As Sense) 분석을 포함하는 다양한 영역에서의 사업 지능을 개선하는 데 이용될 수 있다.
도 6은 스레드 데이터 레코더(108)로부터의 데이터를 저장, 처리 및/또는 분석하도록 구성된 예시적인 수집 서버(106)를 나타낸다. 수집 서버(106)는 하나 이상의 프로세서(602) 및 메모리(604)를 포함한다. 프로세서(들)(602)는 예를 들어 마이크로프로세서, 마이크로컴퓨터, 마이크로컨트롤러, 디지털 신호 프로세서, 중앙 처리 장치, 상태 머신, 로직 회로, 및/또는 동작 명령어에 기초하여 신호들을 처리하는 임의의 장치를 포함한다. 여러 능력들 중에서, 프로세서(들)(602)는 메모리(604)에 저장된 컴퓨터 판독가능 명령어를 페치하여 실행하도록 구성된다.
메모리(604)는 예를 들어 휘발성 메모리(예를 들어, RAM) 및/또는 비휘발성 메모리(예를 들어, 플래시 등)를 포함하는 이 분야에 공지된 임의의 컴퓨터 판독가능 매체를 포함할 수 있다. 메모리(604)는 프로그램(들)(606) 및 데이터(608)를 포함할 수도 있다. 프로그램(들)(606)은 여러 동작 중에서 프로그램 계층(202)에서 실행되는 프로그램들과 파일 시스템(208) 사이의 상호작용들과 연관된 데이터에 관한 쿼리 관련 프로세스들을 수행할 수 있다. 프로그램(들)(606)은 예를 들어 쿼리 모듈(610), 운영 체제(612) 및 다른 애플리케이션(들)(614)을 더 포함한다.
동작에 있어서, 쿼리 모듈(610)은 버퍼 메모리(322), 블록 스토리지(328) 및/또는 블록 스토리지(616)에 포함된 정보와 같은 스레드 데이터 레코더(108)에 의해 수집된 정보에 대해 쿼리 기반 동작들을 수행한다. 쿼리(들)(618)는 소정의 쿼리들, 또는 시스템 관리자와 같은 하나 이상의 개인 또는 엔티티에 의해 입력되거나 프로그래밍된 쿼리들과 같은 복수의 쿼리를 포함할 수 있다. 예를 들어, 일 구현에서, 쿼리(들)(618)는 소정의 사용자 ID와 연관된 모든 상호작용을 검출하기 위한 명령어를 포함할 수 있다. 다른 예시적인 구현에서, 쿼리(들)(618)는 프로그램 계층(202)에서 실행되는 애플리케이션과 연관된 모든 상호작용을 검출하기 위한 명령어를 포함할 수 있다.
쿼리 모듈(610)은 쿼리(들)(618)를 하나 이상의 속성으로 제한할 수 있다. 이러한 속성들은 파일명, 애플리케이션 유형, 실행 시간 등을 포함할 수 있다. 속성에 의해 쿼리를 제한하기 위하여, 쿼리 모듈(610)은 속성의 존재를 지시하는 값들에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)를 스캐닝한다. 예를 들어, 개인이 워드 프로세서와 같은 소정의 애플리케이션에 관한 데이터에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)를 검색하기를 원하는 경우, 쿼리 모듈(610)은 쿼리(들)(618)를 워드 프로세서와 연관된 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 엔트리들 또는 이벤트들을 검색하는 것으로 제한함으로써 블록 스토리지(328) 및/또는 블록 스토리지(616)를 검색한다.
다른 가능한 구현에서, 검색되는 결과들 내에 포함되는 데이터를 필터링하여 보다 선택적인 검색 결과들을 얻기 위해 쿼리(들)(618)에 추가적인 제한을 제공할 수 있다. 예를 들어, 쿼리(들)(618)는 더 복잡할 수 있으며, 소정 사용자 ID, 소정 애플리케이션과 연관되고 소정 범위 내의 타임스탬프들을 갖는 모든 상호작용을 찾기 위한 명령어를 포함할 수 있다.
하나의 예시적인 구현에서, 블록 스토리지(616)는 블록 스토리지(328)에 저장된 동일한 정보를 포함한다. 다른 가능한 구현에서, 블록 스토리지(616)는 블록 스토리지(328)에서 발견되는 정보와 다른 정보를 포함한다. 예를 들어, 블록 스토리지는 압축 및 체계화를 포함하는 프로세스 등을 통해 변경된, 블록 스토리지(328)로부터 검색된 정보를 포함할 수 있다. 더욱이, 쿼리 모듈(610)은 블록 스토리지(328) 및 블록 스토리지(616) 중 어느 하나 또는 양자에 쿼리할 수 있다.
쿼리 모듈(610)에 의한 검색들의 실행 등을 통해 프로그램(들)(606)에 의해 생성된 데이터는 다른 데이터(620) 내에 저장될 수 있다. 또한, 프로그램(들)(606)에 의해 생성된 데이터는 버퍼 메모리(322), 블록 스토리지(328) 및/또는 블록 스토리지(616)에 저장될 수 있다. 하나의 가능한 구현에서, 버퍼 메모리(322)는 수집 서버(106)의 외부에 위치할 수 있다.
운영 체제(612) 및 다른 애플리케이션(들)(614)은 수집 서버(106)의 기능을 위한 컴퓨팅 환경을 제공한다. 다른 애플리케이션(들)(614)은 수집 서버(106)의 실행에 확장 기능을 제공하는 드라이버 등과 같은 컴퓨터 기반 애플리케이션을 포함할 수 있다. 다른 애플리케이션(들)(614)은 워드 프로세싱, 수치 처리 등과 같은 특정 기능들을 수행하기 위해 쿼리 모듈(610)과 함께 동작하거나 동작하지 않을 수 있는 애플리케이션들도 포함할 수 있다.
도 1과 관련하여 전술한 바와 같이, 수집 서버(106)는 시스템(100)의 컴퓨터 기반 장치들(102, 104(a)-(n)) 중 하나 이상에 의해 수행되는 상호작용들에 관한 정보를 저장할 수 있다. 일 구현에서, 쿼리 모듈(610)은 시스템(100) 내의 다양한 인스트루먼팅된 함수들에 의해 인터셉트된 스레드들로부터 캡처된 데이터에 기초하여 시스템(100)의 동작을 분석하는 데 사용될 수 있다. 쿼리 모듈(610)은 쿼리(들)(618) 중의 하나 이상의 쿼리를 이용하여 블록 스토리지(328) 및/또는 블록 스토리지(616)의 검색을 개시함으로써 이를 행할 수 있다. 쿼리(들)(618)의 실행에 의해 생성된 결과들은 시스템(100)의 성능을 평가하기 위해 수집 서버(106)에 의해 또는 분석 서버에 의해 검색 및 분석될 수 있다. 예시적인 분석 서버(700)가 도 7과 관련하여 아래에 상세히 설명된다.
다른 예시적인 구현에서, 쿼리 모듈(610)은 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 선택된 섹션들을 검색함으로써 블록 스토리지(328) 및/또는 블록 스토리지(616)를 검색할 수 있다. 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 섹션들은 블록 스토리지(328) 및/또는 블록 스토리지(616) 내에 저장되고 소정의 속성들에 기초하여 체계화 또는 배열된 이벤트 패킷들(324)로부터의 정규화된 이벤트 정보를 포함할 수 있다. 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 섹션들의 예는 개별 PS 상호작용(들)(406)을 포함한다.
블록 스토리지(328) 및/또는 블록 스토리지(616)는 데이터(308) 및/또는 데이터(608) 내의 섹션들에 각각 배열될 수 있다. 예를 들어, 인터넷 브라우저의 실행에 관한 이벤트 정보는 데이터(308) 및/또는 데이터(608) 내에 저장된 개별 PS 상호작용(들)(406) 내의 섹션과 연관될 수 있다. 프로그램 계층(202)에서 실행되는 다른 애플리케이션들, 및 애플리케이션들과 연관된 이벤트 정보는 애플리케이션들에 고유한 데이터(308) 및/또는 데이터(308) 내의 상이한 섹션들과 연관될 수 있다.
개별 PS 상호작용(들)(406)과 같은, 쿼리 모듈(610)에 의해 검색될 섹션들은 쿼리(들)(618) 내의 하나 이상의 속성을 이용하여 찾을 수 있다. 이러한 속성들은 파일명, 애플리케이션 유형, 실행 시간 등을 포함한다. 예를 들어, 개인이 스프레드시트 애플리케이션과 연관된 상호작용들에 관한 데이터에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)를 검색하기를 원하는 경우, 쿼리 모듈(610)은 쿼리(들)(618)를 스프레드시트 애플리케이션의 식별과 연관된 정보를 포함하는 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 섹션들을 먼저 검색하는 것으로 제한함으로써 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 상호작용 정보를 검색할 수 있다.
다른 구현에서, 쿼리 모듈(610)은 특정 파일에 대한 액세스들에 관한 상호작용들과 연관된 정보를 반환할 수 있다. 액세스들은 파일에 대한 판독 및 기록은 물론, 파일과 연관된 동작들의 실행과 같은 액션들을 포함할 수 있다. 예를 들어, 쿼리 모듈(610)은 액세스되고 있는 특정 파일에 대한 파일명, 특정 파일에 액세스하는 애플리케이션 등과 같은 정보에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 스트링 테이블(들)(420)을 스캐닝할 수 있다. 액세스되고 있는 특정 파일의 파일명과 같은 정보를 스트링 테이블(들)(420)로부터 얻은 후, 쿼리 모듈(610)은 파일명에 대응하는 파일명 ID를 찾을 수 있으며, 쿼리 모듈(610)은 파일명 ID와 연관된 이벤트 정보를 얻기 위해 개별 PS 상호작용(들)(406)의 섹션들을 더 스캐닝할 수 있다.
고려 중인 파일명 ID와 연관된 이벤트 정보의 사례들은 대응하는 파일명들을 갖는 파일들의 액세스들을 지시할 수 있다. 따라서, 쿼리 모듈(610)에 의해 생성된 결과들은 특정 파일에 대한 모든 액세스를 지시할 수 있다. 또 다른 구현에서, 쿼리 모듈(610)은 지정된 상호작용이 발생한 횟수를 확인함으로써 특정 파일이 액세스되는 빈도에 관한 정보를 수집할 수 있다.
다른 가능한 구현에서, 쿼리 모듈(610)은 누설된 파일들을 검출하는 데 사용될 수 있다. 누설된 파일들은 파일들 또는 레지스트리 설정들을 생성한 프로그램이 언인스톨된 후에 시스템(100)과 같은 시스템 상에 남겨진 파일들 또는 레지스트리 설정들을 포함한다. 누설된 파일들을 검출하기 위하여, 쿼리 모듈(610)은 시스템(100) 상에 로딩된 각각의 프로그램과 연관된 인스톨 파일들 및 설정들의 변경들을 카탈로그화한다. 이후, 프로그램이 언인스톨된 후, 프로그램에 대한 인스톨 파일들 및 설정들의 대응 카탈로그가 리콜될 수 있으며, 모든 인스톨 파일들 및 레지스트리 설정들이 제거 또는 리셋된 것을 보증하기 위해 시스템(100)이 검사될 수 있다.
하나의 예시적인 구현에서, 컴퓨팅 기반 장치(102) 상에서 누설 파일들을 검출하기 위하여, 쿼리 모듈(610)은 컴퓨팅 기반 장치(102)를 통한 스캐닝을 실행하여 인스톨 파일들을 카탈로그화함으로써 컴퓨팅 기반 장치(102) 상에 인스톨된 애플리케이션들과 같은 모든 프로그램을 검출한다.
쿼리 모듈(610)은 운영 체제 계층(206)에서 실행되는 운영 체제(314)의 인스톨러 데이터베이스 내에 등록된 모든 프로그램의 리스트를 취득할 수도 있다. 인스톨러 데이터베이스들의 예는 고려 중인 컴퓨팅 기반 장치 상에 인스톨된 모든 프로그램의 채워진 리스트를 생성하는 컴포넌트들을 포함한다.
쿼리 모듈(610)은 레지스트리 정보에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리하여, 운영 체제(314)에 등록된 프로그램들의 리스트를 열거한다. 이어서, 쿼리 모듈(610)은 블록 스토리지(328) 및/또는 블록 스토리지(616)를 스캐닝하여, 컴퓨팅 기반 장치(102) 상에 인스톨된 모든 프로그램의 파일들 및 레지스트리 엔트리들을 열거할 수 있다. 하나의 예시적인 구현에서, 파일들 및 레지스트리 엔트리들을 열거하기 위하여, 쿼리 모듈(610)은 컴퓨팅 기반 장치(102) 상에 인스톨된 프로그램들의 프로그램 ID들에 대응하는 모든 파일 및 레지스트리 엔트리에 대해 쿼리할 수 있다.
컴퓨팅 기반 장치(102) 상의 파일 또는 설정이 컴퓨팅 기반 장치(102) 상에 인스톨된 프로그램들의 프로그램 ID들에 대응하는 파일들 및 레지스트리 엔트리들에 포함되지 않은 경우, 쿼리 모듈(610)은 그 파일 또는 설정이 누설 파일임을 추론할 수 있다. 누설 파일들은 쿼리 모듈(610), 또는 운영 체제(314)를 포함하는 다양한 다른 프로그램에 의해 제거될 수 있다.
다른 예시적인 구현에서, 쿼리 모듈(610)은 시간 범위를 이용하여 쿼리를 제한할 수 있다. 예를 들어, 쿼리 모듈(610)은 소정의 시작 시간과 종료 시간 사이에 발생하는 모든 상호작용에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다. 일 구현에서, 쿼리 모듈(610)은 소정의 시작 시간과 종료 시간 사이의 타임스탬프들을 갖는 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 모든 상호작용에 대해 타임스탬프 스트림(404)의 스캔을 수행함으로써 이를 달성할 수 있다.
다른 예시적인 구현에서, 쿼리 모듈(610)은 공통 오구성, 구식 소프트웨어 버전 등을 포함하는 변경된 파일, 설정 또는 실효 모듈로 인한 실효 프로세스들을 검출할 수 있다. 실효 프로세스들은 예를 들어 소프트웨어 업데이트들이 온-디스크(on-disk) 바이너리들, 파일들 또는 설정들을 대체한 후에, 손상된 프로세스들의 재시작에 실패할 때 발생한다. 결과적으로, 실효 프로세스가 발견되는 컴퓨팅 기반 장치는 업그레이드를 무시하고, 구식 바이너리, 파일 또는 설정에 기초하여 계속 실행할 것이다.
실효 프로세스들을 검출하기 위하여, 쿼리 모듈(610)은 인스톨된 소프트웨어의 최종 로드 시간에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다. 쿼리 모듈(610)은 인스톨된 소프트웨어와 연관된 파일들 또는 레지스트리 설정들의 최종 로드 시간에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수도 있다. 하나의 예시적인 구현에서, 쿼리 모듈(610)은 소프트웨어와 함께 인스톨된 소프트웨어 관련 동적 링크 라이브러리(DLL)들과 연관된 파일들 또는 레지스트리 설정들의 최종 로드 시간에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리한다. 쿼리 모듈(610)은 컴퓨팅 기반 장치 상에 인스톨된 소프트웨어의 최종 수정의 시간 또는 날짜에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수도 있다. 이러한 수정들은 예를 들어 인스톨된 소프트웨어의 최종 공지 버전과 연관된 하나 이상의 파일 또는 프로그램 설정 상에 수행된 액세스들을 포함한다.
소프트웨어의 최종 로드 시간이 소프트웨어의 최종 공지 수정의 시간 또는 날짜보다 늦은 경우, 최종 로딩된 업데이트를 이용하지 않은 소프트웨어로부터 결과되는 불일치들이 발생할 수 있다. 이러한 불일치들은, 쿼리 모듈(들)(610)에 의해 검출되는 경우, 시스템 관리자와 같은 개인에 의해 인식되고 수정될 수 있다.
다른 가능한 구현에서, 쿼리 모듈(610)은 멀웨어, 스파이웨어, 트로이 목마 등과 같은 소프트웨어 애플리케이션들을 포함하는 기지의 보증되지 않은 프로그램들의 존재를 검출할 수 있다. 이를 달성하기 위해, 쿼리 모듈(610)은 컴퓨터 기반 장치들(102, 104(a)-(n)) 중 하나 이상의 장치의 메모리 내에 실행을 위해 로딩된 프로그램들에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리하고 검색할 수 있다. 이어서, 메모리 내에 실행을 위해 로딩된 프로그램들은 예를 들어 쿼리 모듈(610)에 의해 기지의 보증되지 않은 프로그램들의 리스트와 비교될 수 있다.
예를 들어, 쿼리 모듈(610)은 프로그램들과 연관된 프로그램 ID들과 같은 식별자들에 기초하여 컴퓨팅 기반 장치(102, 104(a)-(n)) 상의 메모리 내에 실행을 위해 로딩된 프로그램들의 존재를 검출할 수 있다. 이어서, 쿼리 모듈(610)은 컴퓨팅 기반 장치(102, 104(a)-(n)) 상의 메모리 내에 실행을 위해 로딩된 프로그램들의 식별자들을 기지의 보증되지 않은 프로그램들의 프로그램 ID들과 같은 식별자들의 리스트와 비교할 수 있다. 메모리 내에 실행을 위해 로딩된 프로그램의 식별자가 기지의 보증되지 않은 프로그램의 식별자와 매칭되는 경우, 쿼리 모듈(610)은 컴퓨팅 기반 장치(102, 104(a)-(n))로부터 메모리 내에 실행을 위해 로딩된 프로그램의 제거를 수행할 수 있다. 일 구현에서, 기지의 보증되지 않은 프로그램들의 식별자들의 리스트는 다른 데이터(620) 내에 저장될 수 있다. 다른 가능한 구현에서, 기지의 보증되지 않은 프로그램들의 식별자들의 리스트는 시스템 관리자에 의해 적어도 부분적으로 입력될 수 있다.
다른 구현에서, 자신과 관련된 식별자를 갖지 않는 컴퓨팅 기반 장치(102, 104(a)-(n)) 상의 식별되지 않은 프로그램이 쿼리 모듈(610)에 의해 검출되고 시스템 관리자에게 보고되어, 식별되지 않은 프로그램이 보증되지 않은 프로그램인지의 여부를 확인할 수 있다. 시스템 관리자는 식별되지 않은 프로그램의 목적, 식별되지 않은 프로그램의 다른 프로그램들에 대한 의존성 등을 검사하여 식별되지 않은 프로그램의 특성을 검사함으로써 식별되지 않은 프로그램이 보증되지 않은 프로그램인지를 결정할 수 있다. 또한, 시스템 관리자는 식별되지 않은 프로그램들의 특성들과 유사한 특성들을 갖는 프로그램들에 대한 과거의 경험을 검토하여 식별되지 않은 프로그램이 보증되지 않은 프로그램인지를 결정할 수 있다.
시스템 관리자가 식별되지 않은 프로그램이 보증되지 않은 프로그램인 것으로 결정하는 경우, 시스템 관리자는 컴퓨팅 기반 장치(102, 104(a)-(n))로부터 식별되지 않은 프로그램의 제거를 수행할 수 있다. 예를 들어, 시스템 관리자는 식별되지 않은 프로그램 자체를 제거하거나, 시스템 관리자는 스레드 데이터 레코더(108), 쿼리 모듈(610) 등을 포함하는 컴퓨팅 기반 장치(102, 104(a)-(n)) 및 수집 서버(106)의 요소들에게 컴퓨팅 기반 장치(102, 104(a)-(n))로부터 식별되지 않은 프로그램을 제거하도록 지시할 수 있다.
또한, 시스템 관리자는 식별되지 않은 프로그램에 프로그램 ID와 같은 식별자를 할당할 수 있으며, 보증되지 않은 프로그램들의 리스트에 식별자를 포함시킬 수 있다. 이와 같이, 식별되지 않은 프로그램이 컴퓨팅 기반 장치(102, 104(a)-(n)) 상에 나타나는 경우, 이는 컴퓨팅 기반 장치(102, 104(a)-(n)) 및 수집 서버(106)의 요소들에 의해 보증되지 않은 프로그램으로서 빠르게 식별될 수 있다. 더욱이, 식별되지 않은 프로그램의 제거는 컴퓨팅 기반 장치(102, 104(a)-(n)) 및 수집 서버(106)의 요소들에 의해 수행될 수 있다.
또 다른 가능한 구현에서, 쿼리 모듈(610)은 확장성 포인트(EP)들을 검출할 수도 있다. EP들은 프로그램 계층(202)에서 실행되는 프로그램과 연관된 명령어, 또는 운영 체제 계층(206)에서 실행되는 운영 체제와 연관된 명령어의 동적 로딩 및 실행을 유발할 수 있는 지속 상태 내의 항목들이다. 예를 들어, 워드 프로세서, 스프레드시트 애플리케이션 등과 같은 주 프로그램과 연관된 직접 확장성 포인트는 예를 들어 파일 시스템(208), 운영 체제 계층(206) 등과 같은 요소들과 상호작용함으로써 주 프로그램의 실행을 구현한다.
직접 확장성 포인트들은 쿼리 모듈(610)에 의해 검출될 수 있다. 예를 들어, 쿼리 모듈(610)은 (1) 주 프로그램의 실행 전에 실행을 위해 시스템 메모리 내에 로딩된 다양한 프로그램들에 관련되고, (2) 주 프로그램을 참조하거나 주 프로그램의 실행과 연관되는 상호작용들을 격리함으로써 직접 EP들을 검출할 수 있다.
하나의 예시적인 구현에서, 쿼리 모듈(610)은 주 프로그램의 실행 전에 실행을 위해 시스템 메모리 내에 로딩된 다양한 프로그램에 관련된 상호작용들에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리함으로써 주 프로그램에 대한 잠재적인 직접 EP들을 식별할 수 있다. 예를 들어, 쿼리 모듈(610)은 주 프로그램의 실행 전에, 2초와 같은 소정 시간 범위 내에 실행을 위해 시스템 메모리 내에 로딩된 다양한 프로그램에 관련된 상호작용들에 대해 쿼리할 수 있다. 쿼리 모듈(610)은 주 프로그램을 참조하거나 주 프로그램의 실행과 연관되는 상호작용들에 대해 잠재적 EP들에 쿼리함으로써 잠재적 EP들로부터 주 프로그램과 연관된 직접 EP들을 식별할 수 있다. 하나의 가능한 구현에서, 직접 EP들은 버퍼 메모리(620)에 저장될 수 있다.
직접 확장성 포인트들에 더하여, 간접 확장성 포인트들도 존재할 수 있다. 예를 들어, 시동시, 주 프로그램은 애드온 프로그램들과 같은 부 프로그램과 연관된 명령어를 트리거하여 주 프로그램의 실행에 대한 추가 기능을 제공할 수 있다. 부 프로그램들 및/또는 주 프로그램과 연관된 하나 이상의 간접 확장성 포인트는 예를 들어 주 프로그램, 파일 시스템(208), 운영 체제 계층(206) 등을 포함할 수 있는 요소들과 상호작용함으로써 부 프로그램들의 실행을 구현할 수 있다. 쿼리 모듈(610)은 간접 EP들을 검출하는 데 사용될 수 있다. 하나의 예시적인 구현에서, 쿼리 모듈(610)은 주 프로그램 및/또는 부 프로그램들과 연관된 상호작용들에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다. 더욱이, 하나의 가능한 구현에서, 간접 EP들은 버퍼 메모리(620)에 저장될 수 있다.
부 프로그램들이라는 용어는 시스템 내에서 동작하는 광범위한 프로그램들을 포함할 수 있다는 것도 이해할 것이다. 위의 예로 돌아가면, 부 프로그램들은 기존 부 프로그램들에 대한 애드온 프로그램들을 포함할 수 있다. 이와 같이, 부 프로그램들은 부 프로그램들과 연관될 수 있고, 이들 자신은 부 프로그램들과 연관될 수 있는 등등이다.
또한, 간접 확장성 포인트라는 용어는 시스템에서 실행되는 다양한 부 프로그램에 대한 애드온 프로그램들과 연관된 확장성 포인트를 포함한다는 것을 이해할 것이다.
일 구현에서, 주 프로그램, 부 프로그램들 및 파일 시스템(208) 사이의 다양한 상호작용과 연관된 이벤트 정보는 주 프로그램 및/또는 부 프로그램들과 연관된 다른 특성들을 추정하는 데 사용될 수 있다. 예를 들어, 다양한 상호작용과 연관된 이벤트 정보는 주 프로그램 및/또는 부 프로그램들에 의해 사용되는 메모리의 양은 물론, 주 프로그램 및/또는 부 프로그램들에 의해 사용되는 처리 오버헤드의 양 등을 추정하는 데 사용될 수 있다.
주 프로그램 및 부 프로그램들의 실행의 결과로서 발생되는 다양한 상호작용은 예를 들어 스레드 데이터 레코더(108)에 의해 인터셉트되고 복사될 수 있다. 다양한 상호작용과 연관된 이벤트 정보는 전술한 바와 같이 이벤트 패킷들(324) 및 이벤트 블록들(326)에서와 같이 메모리(304)에, 그리고 블록 스토리지(616)에서와 같이 메모리(604)에 저장될 수 있다. 저장된 이벤트 정보는 주 프로그램 및 부 프로그램들과 연관된 상호작용들을 검출하기 위해 시스템 관리자와 같은 엔티티들에 의해 검토될 수 있다. 이와 같이, 주 프로그램의 실행과 연관된 부 프로그램들이 검출될 수 있다.
쿼리 모듈(610)은 직접 EP들을 모니터링함으로써 악성 소프트웨어 애플리케이션들의 존재를 검출하는 데 사용될 수도 있다. 악성 소프트웨어 애플리케이션들은 정상적인 환경에서는 프로그램과 연관되지 않는 스파이웨어, 트로이 목마, 웜, 바이러스 등과 같은 애플리케이션들을 포함할 수 있다. 예를 들어, 쿼리 모듈(610)은 컴퓨팅 기반 장치(102, 104(a)-(n)) 상에서 실행되는 프로그램에 대한 EP들을, 프로그램이 악성 소프트웨어의 부재하에 컴퓨팅 기반 장치(102, 104(a)-(n)) 상에서 실행된 때 발견된 동일 프로그램에 대한 제어 EP들과 비교할 수 있다. EP들과 제어 EP들 간의 차이들은 이 차이들이 프로그램과 함께 실행되는 악성 소프트웨어의 존재를 지시하는지를 결정하기 위해 쿼리 모듈(610) 및 시스템 관리자와 같은 엔티티들에 의해 검사될 수 있다. 일 구현에서, EP들을 이용하여 발견된 악성 소프트웨어는 쿼리 모듈(610), 스레드 데이터 레코더(108), 시스템 관리자 등에 의해 컴퓨팅 기반 장치(102, 104(a)-(n))로부터 제거될 수 있다.
도 7-8은 수집 서버(106)에 의해 수집된 데이터가 액티비티 버스트들을 이용하여 분석될 수 있는 방법을 나타낸다. 예를 들어, 도 7은 수집 서버(106)에 의해 수집된 데이터에 대한 분석을 수행하기 위한 예시적인 분석 서버(700)를 나타낸다. 후술하는 바와 같이, 하나의 예시적인 구현에서, 분석 서버(700)는 액티비티 버스트들의 분석을 통해 수집 서버(106)에 의해 수집된 데이터를 분석한다.
분석 서버(700)는 하나 이상의 프로세서(702) 및 메모리(704)를 포함한다. 프로세서(들)(702)는 예를 들어, 마이크로프로세서, 마이크로컴퓨터, 마이크로컨트롤러, 디지털 신호 프로세서, 중앙 처리 장치, 상태 머신, 로직 회로 및/또는 동작 명령어에 기초하여 신호들을 처리하는 임의의 장치를 포함한다. 여러 능력들 중에서, 프로세서(들)(702)는 메모리(704)에 저장된 컴퓨터 판독가능 명령어를 페치하여 실행하도록 구성된다.
메모리(704)는 휘발성 메모리(예를 들어, RAM) 및/또는 비휘발성 메모리(예를 들어, ROM, 플래시 등)를 포함하는 이 분야에 공지된 임의의 컴퓨터 판독가능 매체일 수 있다. 메모리(704)는 분석 모듈(들)(706) 및 데이터(708)를 포함한다.
동작에 있어서, 분석 모듈(들)(706)은 특히, 시스템(100) 내의 컴퓨팅 기반 장치들(102, 104(a)-(n))의 액티비티를 모니터링하고, 수집 서버(106)에 의해 수집된 데이터를 분석한다. 분석 모듈(들)(706)에 의해 생성된 데이터, 또는 분석 모듈(들)(706)의 실행 과정 중에 필요한 데이터는 데이터(708)에 저장된다. 다양한 컴퓨팅 기반 장치(102, 104(a)-(n)) 중에서 프로그램 계층(202)에서 실행되는 프로그램들과 파일 시스템(208) 내의 파일들 및/또는 설정들 간의 상호작용들과 같은 시스템(100)의 액티비티는 액티비티 버스트들을 사용하여 표현될 수 있다.
도 8에 도시된 바와 같이, 액티비티 버스트(800)는 상호작용들의 그룹을 포함하며, 각각의 상호작용은 갭 인터벌(802)에 의해 분리된다. 이하의 설명에서는 도 8의 수평축 상의 인터벌들이 시간에 기초하는 것으로 설명되지만, 이러한 인터벌들--및 도 8의 수평축--은 다른 차원들에 기초할 수도 있다는 것을 이해할 것이다. 예를 들어, 시간 차원을 따르는 관련 액티비티의 클러스터들을 포함하는 것에 더하여, 액티비티 버스트들(800)은 다른 차원들에 따르는 액티비티의 클러스터들(사용자, 소정의 프로그램 등에 의한 액티비티들의 그룹들 등)을 포함할 수도 있다. 이러한 방식으로, 많은 분류된 차원을 따르는 액티비티의 버스트들이 발견되고 검사될 수 있다.
도 8에 도시된 구현으로 돌아가면, 액티비티 버스트들은 하나 이상의 스레드 내에서 시간적으로 서로 가까이 발생하는 개별 상호작용들에 대응하는 액티비티 응답들(804)을 포함할 수 있다. 액티비티 응답(804)은 상호작용들로 귀착되는 스레드들의 실행시에 컴퓨팅 기반 장치(102, 104(a)-(n))의 메모리 및 프로세서들과 같은 자원들의 임의 사용에 대응한다. 상호작용들이 액티비티 응답(804)을 생성할 수 있는 때의 예시적인 사례들은 상호작용으로 귀착되는 스레드의 실행 동안 이용되는 프로세서(들)(302)와 같은 처리 장치, 및 메모리(304)와 같은 메모리에 의해 행해지는 처리를 포함한다. 상호작용들이 액티비티 응답(804)을 생성할 수 있는 때의 추가의 예시적인 사례들은 컴퓨팅 기반 장치(102, 104(a)-(n))를 위해 또는 그와 함께 사용되는 프린터, 스캐너 및 유사한 장치와 같은, 메모리 및 하나 이상의 프로세서를 포함하는 주변 장치들의 액티비티를 포함한다. 도 8에서, 액티비티 응답(804)의 높이는 액티비티 응답(804)과 연관된 스레드의 실행 동안의 컴퓨팅 기반 장치(102, 104(a)-(n))의 자원들의 사용에 대응한다.
액티비티 응답들(804)은 갭 인터벌들(802)에 의해 분리되는데, 갭 인터벌(802)은 액티비티 버스트들(800) 사이의 인액티비티 인터벌(806)보다 작다. 일 구현에서, 인액티비티 인터벌(806)은 액티비티 버스트(800(a)) 내의 최종 액티비티 응답(808)과 인접 액티비티 버스트(800(b)) 내의 최초 액티비티 응답(810) 사이의 기간이다.
일 구현에서, 갭 인터벌(802)은 단일 상호작용이 발생하는 데 걸리는 시간일 수 있다. 더욱이, 하나의 실시예에서, 액티비티 버스트들(800)은 상호작용들의 그룹 {et\i≤t≤j}로서 정의될 수 있는데, 이때 다음과 같다.
모든 i≤t≤j에 대해,
Figure 112008060831886-pct00001
gap(x,y)는 개별 액티비티 응답들(804)에 대응하는 2개의 상호작용 x와 y 사이의 시간 인터벌이고, k는 인접하는 액티비티 응답들(804) 사이의 임계 갭이라 한다. 하나의 예시적인 구현에서, k는 약 60초이다.
도 7로 돌아가면, 분석 서버(700)는 분석 모듈(들)(706) 내의 시그니처 모듈(710), 액티비티 버스트 분석 모듈(712), 운영 체제(714) 및 다른 애플리케이션(들)(716)을 이용하여 액티비티 버스트(800)를 분석할 수 있다. 마찬가지로, 분석 서버(700)는 서명된 액티비티 버스트(들)(718) 및 다른 데이터(720)를 포함할 수 있는 데이터(708) 내에 액티비티 버스트들에 관한 정보를 저장할 수 있다.
액티비티 버스트 분석 모듈(712)은 유사성에 대해 시스템(100)의 액티비티 버스트들(800)을 모니터링한다. 유사한 액티비티 버스트들(800)은 특정 프로그램에 의해 생성된 유사한 스레드들의 실행을 지시한다. 유사한 액티비티 버스트들(800)의 발견시, 시그니처 모듈(710)은 유사한 액티비티 버스트들(800)에 시그니처를 할당할 수 있으며, 시그니처는 서명된 액티비티 버스트(들)(718)에 저장될 수 있다. 하나의 가능한 구현에서, 시그니처 모듈(710)은 액티비티 버스트들(800)에 포함된 상호작용들을 특성화하는 속성들에 기초하여 유사한 액티비티 버스트들(800)에 할당할 시그니처를 계산한다. 예를 들어, 시그니처 모듈(710)은 상호작용, 상호작용의 유형 등과 연관된 파일들의 파일명들을 해싱함으로써 액티비티 버스트에 할당할 시그니처를 얻을 수 있다. 더욱이, 시그니처 모듈(710)은 파일 경로들을 해싱하고 액티비티 유형들의 식별자들을 해싱함으로써 액티비티 버스트에 할당할 시그니처를 얻을 수 있다.
분석 서버(700)에 의해 발견된 액티비티 버스트(800)는 서명된 액티비티 버스트(들)(718)에 저장된 액티비티 버스트들(800)과 비교될 수 있다. 액티비티 버스트(800)가 액티비티 버스트(들)(718)에 저장된 액티비티 버스트(800)와 유사한 경우, 액티비티 버스트(800)는 시그니처 모듈(710)에 의해, 서명된 액티비티 버스트(들)(718) 내의 유사한 액티비티 버스트의 시그니처를 할당받을 수 있다.
하나의 예시적인 구현에서, 동일 시그니처가 시그니처 모듈(710)에 의해, 임시 파일들과의 하나 이상의 상호작용에 대응하는 모든 액티비티 버스트(800)에 할당될 수 있다. 임시 파일들은 컴퓨터 기반 장치들(102, 104(a)-(n)) 상의 프로그램 인스톨 동안 생성되는 파일들을 포함하며, 임시 파일들의 변경들은 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 상호작용들로서 나타낸다.
또 다른 예시적인 구현에서, 예를 들어 시스템 관리자에 의해 정의되는 바와 같은, 보증되지 않거나 검증되지 않은 기지의 액션들에 대응하는 상호작용들은 그러한 액션들에 대한 액티비티 버스트(800)를 금지된 액션 시그니처와 연관시킴으로써 방지될 수 있다. 예를 들어, 하나 이상의 파일에 대한 검증되지 않은 판독 및/또는 기록 동작들, 및 레지스트리 설정들에 대한 검증되지 않은 판독 및/또는 기록 동작들과 같은 기지의 보증되지 않거나 검증되지 않은 액션들이 시그니처 모듈(710)에 의해, 금지된 액션 시그니처를 할당받을 수 있다. 금지된 액션 시그니처를 갖는 액티비티 버스트(800)가 검출될 때(분석 모듈(712), 스레드 데이터 레코더(108) 등에 의해), 액티비티 버스트 분석 모듈(712) 및 스레드 데이터 레코더(108)를 포함하는 요소들은 하나 이상의 스레드의 파일 시스템(208)으로의 전송을 차단함으로써 액티비티 버스트(800)와 연관된 하나 이상의 스레드의 실행을 금지할 수 있다.
다른 가능한 구현에서, 분석 서버(700)는 보증되지 않거나 악의적인 프로그램들에 대응하는 액티비티 버스트(800)와 연관된 시그니처의 발생을 검출함으로써 보증되지 않거나 악의적인 프로그램들의 존재를 식별할 수 있다. 이러한 액티비티 버스트(800)에 대한 시그니처가 액티비티 버스트 분석 모듈(712)에 의해 검출될 때, 액티비티 버스트 분석 모듈(712) 및 스레드 데이터 레코더(108)를 포함하는 요소들은 파일 시스템(208)에 대한 하나 이상의 스레드에 의한 호출을 방지함으로써 액티비티 버스트(800)와 연관된 하나 이상의 스레드의 실행을 금지할 수 있다. 더욱이, 스레드 데이터 레코더(108), 액티비티 버스트 분석 모듈(712) 및 시스템 관리자를 포함하는 요소들은 보증되지 않거나 악의적인 프로그램들에 대응하는 액티비티 버스트(800)와 연관된 스레드들을 분석하여, 보증되지 않거나 악의적인 프로그램들의 식별 또는 위치를 격리할 수 있다. 스레드 데이터 레코더(108), 액티비티 버스트 분석 모듈(712) 및 시스템 관리자를 포함하는 요소들은 컴퓨팅 기반 장치(102, 104(a)-(n))로부터 보증되지 않거나 악의적인 프로그램들을 제거할 수도 있다.
또 다른 가능한 구현에서, 파일들, 설정들 또는 모듈들에 대한 액세스의 보안 감사가 액티비티 버스트 분석 모듈(712)을 이용하여 추적될 수 있다. 예를 들어, 파일들, 설정들 또는 바이너리들에 대한 액세스는 액세스를 허가하는 설정 정책 내에 있지 않은 스레드들 또는 프로그램들로부터 행해지는 액세스를 거부함으로써 제한될 수 있다. 이러한 구현에서, 액세스는 프로그램의 실행 인스턴스에 기초하여 승인될 수 있다. 예를 들어, 설정 정책은 소정 문서들에 대한 액세스를 개별 사용자들이 아니라 워드 프로세서로 제한할 수 있다. 이러한 구현에서, 스레드 기반 인터셉션은 소정 문서들에 대해 호출을 행하는 애플리케이션들을 식별하고 애플리케이션이 정책에 따라 액세스를 승인받을 수 있는지를 검증하는 데 사용될 수 있다.
다른 가능한 구현에서, 스레드 인터셉션 및 분석은 실행되고 있었던 프로그램 또는 스레드에 기초하여 네트워크 드라이브들 또는 제거 가능 위치들에 대한 기록을 거부함으로써 네트워크 드라이브들 또는 이동 가능 위치들에 대한 파일들의 복사를 차단하는 데 사용될 수 있다. 더욱이, 스레드 인터셉션 및 분석은 보안 감사를 수행하는 데 사용될 수 있다. 예를 들어, 시스템 상의 파일들과의 상호작용을 모니터링함으로써, 저작권 또는 다른 방법으로 보호되거나 민감한 자료의 CD 또는 다른 이동식 장치로의 복사가 검출될 수 있다.
또한, 스레드 인터셉션 및 분석은 시스템을 수사적으로(forensically) 재구성하는 데 사용될 수도 있다. 예를 들어, 스레드 기반 인터셉션을 이용하여 생성된 감사 로그들은 해커가 시스템에 침입한 후에 시스템을 재구성하고 해커가 시스템에 대해 행한 변경들을 치유하는 데 사용될 수 있다.
예시적인 방법(들)
스레드 인터셉션 및 분석을 위한 예시적인 방법들이 도 1 내지 8을 참조하여 설명된다. 이러한 예시적인 방법들은 일반적으로 컴퓨터 실행가능 명령어와 관련하여 기술될 수 있다. 일반적으로, 컴퓨터 실행가능 명령어는 특정 기능들을 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조, 프로시저, 모듈, 함수 등을 포함할 수 있다. 방법들은 통신 네트워크를 통해 연결되어 있는 원격 처리 장치들에 의해 기능들이 수행되는 분산 컴퓨팅 환경에서 실시될 수도 있다. 분산 컴퓨팅 환경에서, 컴퓨터 실행가능 명령어는 메모리 저장 장치들을 비롯한 로컬 및 원격 컴퓨팅 저장 매체 둘다에 위치할 수 있다.
도 9는 스레드들을 인터셉트하고 스레드들과 연관된 데이터를 캡처하기 위한 예시적인 방법(900)을 나타낸다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 902에서, 시스템 상에서 실행되는 하나 이상의 함수가 수정된 함수 코드를 포함하도록 인스트루먼팅된다. 일 구현에서, 하나 이상의 함수는 하나 이상의 함수와 연관된 컴퓨터 판독가능 명령어를 수정함으로써 인스트루먼팅될 수 있다. 예를 들어, 컴퓨터 판독가능 명령어는 하나 이상의 함수에게 하나 이상의 함수를 호출하는 스레드들을 인터셉트하고 스레드들과 연관된 데이터를 캡처할 것을 지시하도록 수정될 수 있다. 예를 들어, 일 구현에서, 스레드 데이터 레코더(108)와 같은 스레드 데이터 레코더가 시스템(100) 내의 하나 이상의 함수를 인스트루먼팅할 수 있다. 함수들은 임의의 동작 계층(202, 204, 206)에 있을 수 있다. 하나의 가능한 구현에서, 초크 포인트 함수들이 초크 포인트 함수들을 호출하는 스레드들을 인터셉트하고 스레드들과 연관된 데이터를 캡처하기 위한 코드를 포함하도록 인스트루먼팅된다.
블록 904에서, 시스템 상에서 실행되는 프로그램과 연관된 스레드가 수정된 함수 코드를 포함하는 인스트루먼팅된 함수를 호출할 때 인터셉트된다. 일 구현에서, 인스트루먼팅된 함수는 스레드가 실행될 때 스레드와 연관된 이벤트들의 스트림을 로깅한다. 스레드들은 프로그램들과 연관되며, 따라서 스레드가 호출하는 인스트루먼팅된 함수에 의해 스레드가 검사될 때 프로그램 정보가 얻어질 수 있다. 각각의 상호작용에 대한 타임스탬프가 인스트루먼팅된 함수에 의해 할당될 수 있다.
예를 들어, 일 구현에서, 스레드 데이터 레코더(108)와 같은 스레드 데이터 레코더가 시스템(100) 내의 수정된 함수들을 호출하는 스레드들을 인터셉트할 수 있다. 스레드들과 연관된 프로그램들은 프로그램 계층(202), 미들웨어 계층(204), 운영 체제 계층(206) 등과 같은 여러 동작 계층 중 하나에서 실행될 수 있다. 프로그램이 상호작용하려고 시도할 수 있는 파일 시스템(208)과 같은 파일 시스템은 파일들(데이터 파일, 실행가능 파일 등) 및 설정 정보(구성 설정 또는 레지스트리 설정 등) 등을 포함할 수 있다.
블록 906에서, 스레드에 유발되는 상호작용을 포함하는 스레드와 연관된 다양한 정보가 메모리 위치에 복사 및 전송되고, 이벤트로서 함께 그룹화된다. 예를 들어, 복제 모듈(318)과 같은 복제 모듈은 스레드와 연관된 모든 또는 선택된 데이터를 복사하고, 데이터를 버퍼 메모리(322)와 같은 메모리 위치에 저장할 수 있다. 스레드와 연관된 정보는 스레드에 의해 유발되는 상호작용들에 관한 임의의 정보는 물론, 스레드가 인스트루먼팅된 함수에서 수정된 함수 코드를 실행하는 시점에서의 시스템에 관한 임의의 정보를 포함할 수 있다.
버퍼 메모리(322)는 일 구현에서 컴퓨터 기반 장치들(102, 104(a)-(n))에 대해 내부 또는 외부에 위치할 수 있다.
블록 908에서, 메모리 위치에 저장된 데이터가 압축된다. 일 구현에서, 버퍼 메모리(322)에 저장된 이벤트 패킷들(324)과 같은 데이터가 압축 모듈(310)에 의해 이벤트 블록(326)으로 압축된다. 압축은 예를 들어 사용자 데몬(312)과 같은 서비스에 의해 실시될 수 있다. 하나의 사례에서, 압축은 (압축을 수행하는 데 사용될) 프로세서가 소정의 액티비티 레벨 이하로 사용되고 있을 때 발생할 수 있다. 일 구현에서, 압축된 데이터는 다른 메모리 위치에 저장될 수 있다. 예를 들어, 압축된 데이터는 버퍼 메모리(322)가 아니라 블록 스토리지(328)에 저장될 수 있다.
블록 910에서, 압축된 데이터는 분석을 위해 주기적으로 업로드된다. 일 구현에서, 압축된 데이터는 수집 서버(106)에, 또는 수집 서버(106)로서 기능하는 메모리 위치에 업로드될 수 있다. 분석을 위한 압축 데이터의 업로딩의 주기는 변할 수 있다. 일 구현에서, 압축 데이터는 지정된 시간 인터벌 후에 업로딩된다. 다른 가능한 구현에서, 압축 데이터는 압축 데이터가 메모리의 소정의 임계치 제한을 초과할 때 업로딩될 수 있다.
도 10은 하나 이상의 컴퓨팅 기반 장치에서 배열된 이벤트 스트림에 정규화된 이벤트들을 추가하기 위한 예시적인 방법(1000)을 나타낸다. 배열된 이벤트 스트림 내의 이벤트들의 정규화는 데이터의 중복을 줄인다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1002에서, 압축 데이터의 로그들이 시스템 내의 하나 이상의 컴퓨팅 기반 장치에 의해 생성된다. 예를 들어, 사용자 데몬(312)과 같은 서비스는 압축을 위해 스레드 데이터 레코더(108)와 같은 스레드 데이터 레코더에 의해 인터셉트된 데이터를 복사한다. 데이터는 블록 스토리지(328)와 같은 메모리 위치에 이벤트 블록(326)과 같은 압축 로그 포맷으로 압축 및 저장된다. 일 구현에서, 압축은 (압축을 수행하는 데 사용될) 프로세서가 소정의 액티비티 레벨 이하로 사용되고 있을 때 발생할 수 있다.
블록 1004에서, 인터셉트된 스레드들에 대응하는 이벤트들과 연관된 정보가 정규화된다. 일 구현에서, 정규화는 워드 프로세서 프로그램의 실행에 대응하는 이벤트들과 연관된 정보와 같은 서로 관련된 정보의 그룹화를 포함한다.
예를 들어, 시스템(100) 내에서 발생하는 상이한 상호작용들의 속성들이 개별 파일 상호작용(들)(408), 개별 레지스트리 상호작용(들)(410), 프로세스 테이블(들)(412), 모듈 테이블(들)(414) 및 다른 상호작용(들)(416)과 같은 개별 PS 상호작용(들)(406)의 하나 이상의 섹션으로 정규화될 수 있다. 하나의 가능한 구현에서, 개별 파일 상호작용(들)(408)은 사용자 테이블(들)(418), 스레드 테이블(들)(420), 스트링 테이블(들)(422), 다른 테이블(들)(424) 등에 저장될 수 있는 개별 명칭, 사용자 상황, 프로세스 정보, 파일 데이터 해시 및 값과 같은 정보를 포함하는 섹션들을 더 포함한다.
블록 1006에서, 이벤트들과 연관된 새로 정규화된 정보가 이벤트들과 연관된 유사한 정규화된 정보의 기존 카테고리들에 추가된다. 예를 들어, 이벤트 블록들(326)과 같은 이벤트들과 연관된 정규화된 정보의 블록들이 블록 스토리지(328)에 이미 저장되어 있는 사전 생성된 이벤트 블록들(326) 내의 유사한 정규화된 정보에 추가될 수 있다. 위의 예로 돌아가면, 워드 프로세서의 실행과 연관된 새로 정규화된 정보가 워드 프로세서의 이전 실행들과 연관된 기존의 정규화된 정보에 추가될 수 있다.
새로 정규화된 정보와 유사성을 공유하는, 이벤트들과 연관된 정규화된 정보의 기존 카테고리들이 존재하지 않는 경우에, 새로운 카테고리가 생성되고, 이벤트들과 연관된 새로 정규화된 정보가 새로운 카테고리에 저장될 수 있다.
블록 1008에서, 이벤트들과 연관된 정규화된 정보의 기존 카테고리들 모두가 배열된 이벤트 스트림 내에 병합된다. 예를 들어, 블록 스토리지(328)에 저장된 이벤트들과 연관된 정규화된 정보가 이벤트 스트림(404) 내에 병합된다.
도 11은 컴퓨팅 기반 장치로부터 프로그램을 언인스톨한 결과로서 남겨진 누설 엔트리들을 검출하기 위한 예시적인 방법(1100)을 나타낸다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1102에서, 컴퓨팅 기반 장치 및/또는 시스템 상에 로딩된 각각의 프로그램과 연관된 인스톨 파일 및 설정 변경들이 카탈로그화되고 열거된다. 일 구현에서, 열거는 컴퓨팅 기반 장치의 운영 체제에 등록된 프로그램들의 리스트의 생성을 포함한다.
예를 들어, 시스템 내의 컴퓨팅 기반 장치들 상에 인스톨된 모든 프로그램은 물론, 컴퓨팅 기반 장치들 상의 프로그램들과 연관된 모든 운영 체제 인스톨 파일을 검출하기 위해 시스템이 스캐닝될 수 있다. 컴퓨팅 기반 장치들 상에 인스톨된 모든 프로그램 및/또는 프로그램들과 연관된 모든 운영 체제 인스톨 파일을 리스트 내에 배치함으로써 이들을 열거할 수 있다.
하나의 가능한 구현에서, 쿼리 모듈(610)은 시스템(100)의 스캐닝을 실행하여, 하나 이상의 컴퓨팅 기반 장치(102, 104(a)-(n)) 상에 인스톨된 모든 프로그램을 검출함으로써 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상의 모든 운영 체제 인스톨 파일을 카탈로그화하고 열거한다. 예를 들어, 쿼리 모듈(610)은 시스템(100) 내의 컴퓨팅 기반 장치들(102, 104(a)-(n)) 중 하나 이상의 장치의 운영 체제(314)에 등록된 모든 프로그램에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다. 발견된 프로그램들은 쿼리 모듈(610), 스레드 데이터 레코더(108) 등과 같은 다양한 장치에 의해 카탈로그화되고 열거될 수 있다. 더욱이, 발견된 프로그램들과 연관된 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상의 모든 운영 체제 인스톨 파일이 쿼리 모듈(610), 스레드 데이터 레코더(108) 등과 같은 다양한 장치에 의해 카탈로그화되고 열거될 수 있다.
블록 1104에서, 언인스톨된 프로그램들과 연관된 파일들 및 레지스트리 설정들을 포함하는, 컴퓨팅 기반 장치 및/또는 시스템 상에 존재하는 모든 파일 및 레지스트리 설정이 열거된다. 이것은 언인스톨된 프로그램들에 대한 파일들 및 레지스트리 설정들을 포함하는, 컴퓨팅 기반 장치 및/또는 시스템 상에 인스톨된 모든 프로그램의 파일들 및 레지스트리 설정들에 대한 컴퓨팅 기반 장치 및/또는 시스템 상의 메모리의 스캐닝을 포함할 수 있다. 예를 들어, 쿼리 모듈(610)은 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리하여, 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상에 인스톨된 모든 프로그램의 프로그램 ID들과 같은 식별자들에 대응하는 모든 파일 및 레지스트리 설정을 취득할 수 있다.
블록 1106에서, 운영 체제에 등록된 프로그램들과 연관된 파일들 및 레지스트리 설정들이 컴퓨팅 기반 장치 및/또는 시스템 상에 인스톨된 프로그램들의 파일들 및 레지스트리 설정들과 비교된다. 예를 들어, 쿼리 모듈(610)은 컴퓨팅 기반 장치들(102, 104(a)-(n))의 운영 체제에 등록된 프로그램들과 연관된 열거된 파일들 및 레지스트리 설정들의 프로그램 ID들과 같은 식별자들을 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상에 인스톨된 모든 프로그램의 파일들 또는 설정들의 식별자들과 비교할 수 있다.
블록 1108에서, 양쪽 리스트 상의 프로그램들과 연관된 파일들 및 레지스트리 설정들이 고려로부터 배제될 수 있다. 컴퓨팅 기반 장치 및/또는 시스템으로부터 언인스톨되지 않은 프로그램들에 대응하는 파일들 및 레지스트리 설정들을 나타내는 나머지 파일들 및 레지스트리 설정들은 누설 파일들이라 할 수 있으며, 컴퓨팅 기반 장치 및/또는 시스템으로부터 제거될 수 있다. 예를 들어, 쿼리 모듈(610)은 컴퓨팅 기반 장치들(102, 104(a)-(n))의 운영 체제(314)에 등록된 프로그램들과 연관된 파일들 및 레지스트리 설정들의 프로그램 ID들과 같은 식별자들을 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상에 인스톨된 프로그램들과 연관된 파일들 및 레지스트리 설정들의 식별자들과 상관시킬 수 있다. 상관되지 않은 프로그램들과 연관된 파일들 및 레지스트리 설정들은 쿼리 모듈(610)에 의해 누설 파일들로서 지칭되며, 스레드 데이터 레코더(108) 및 쿼리 모듈(610)과 같은 요소들에 의해 컴퓨팅 기반 장치들(102, 104(a)-(n))로부터 제거될 수 있다.
도 12는 컴퓨팅 기반 장치 상에 인스톨된 공통 오구성, 구식 소프트웨어 버전 등을 포함하는 실효 파일들을 검출하기 위한 예시적인 방법(1200)을 나타낸다. 실효 바이너리들은, 예를 들어 소프트웨어 업데이트들이 온-디스크 바이너리들을 대체한 후에, 손상된 프로세스들의 재시작에 실패할 때 발생한다. 결과적으로, 실효 바이너리가 발견되는 컴퓨팅 기반 장치는 업그레이드를 무시하고, 구식 바이너리로부터의 구식 프로그램을 계속 실행할 것이다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1202에서, 컴퓨팅 기반 장치 및/또는 시스템 상에 로딩된 프로그램들이 카탈로그화되고 열거된다. 일 구현에서, 열거는 컴퓨팅 기반 장치의 운영 체제에 등록된 프로그램들의 리스트의 생성을 포함한다. 예를 들어, 시스템 내의 컴퓨팅 기반 장치들 상에 인스톨된 모든 프로그램을 검출하기 위해 시스템이 스캐닝될 수 있다. 컴퓨팅 기반 장치들 상에 인스톨된 모든 프로그램을 리스트에 배치함으로써 이들을 열거할 수 있다.
하나의 가능한 구현에서, 쿼리 모듈(610)은 시스템(100)의 스캐닝을 실행하여 하나 이상의 컴퓨팅 기반 장치(102, 104(a)-(n)) 상에 등록된 모든 프로그램을 검출함으로써 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상의 운영 체제(314)에 등록된 모든 프로그램을 카탈로그화하고 열거한다. 예를 들어, 쿼리 모듈(610)은 시스템(100) 내의 컴퓨팅 기반 장치들(102, 104(a)-(n)) 중 하나 이상의 장치의 운영 체제(314)에 등록된 모든 프로그램에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다. 발견된 프로그램들은 쿼리 모듈(610), 스레드 데이터 레코더(108) 등과 같은 다양한 장치 및/또는 엔티티에 의해 카탈로그화되고 열거될 수 있다.
블록 1204에서, 컴퓨팅 기반 장치 및/또는 시스템 상에 등록된 모든 프로그램의 최종 로드 시간들은 물론, 컴퓨팅 기반 장치 및/또는 시스템 상에 등록된 프로그램들과 연관된 DLL들이 취득된다. 예를 들어, 쿼리 모듈(610)은 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상에 등록된 프로그램들의 최종 로드 시간들 및/또는 시스템(100) 내의 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상에 등록된 프로그램들과 함께 인스톨된 동적 링크 라이브러리(DLL)들의 최종 로드 시간들에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리한다.
블록 1206에서, 컴퓨팅 기반 장치 및/또는 시스템 상에 등록된 프로그램들과 연관된 파일들 또는 설정들의 최종 수정 시간들이 취득되고, 프로그램들의 최종 로드 시간들과 비교된다. 예를 들어, 쿼리 모듈(610)은 컴퓨팅 기반 장치(102, 104(a)-(n)) 상의 운영 체제(314)에 등록된 프로그램의 최종 수정의 시간 또는 날짜에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다. 쿼리 모듈(610)은 최종 수정의 시간 또는 날짜와 프로그램의 최종 로드 시간을 비교할 수 있다.
블록 1208에서, 비교 동안 발견되는 임의의 불일치가 인식된다. 예를 들어, 컴퓨팅 기반 장치 및/또는 시스템 상에 등록된 프로그램의 최종 로드 시간이 프로그램의 최종 공지된 수정의 시간 또는 날짜보다 이른 경우, 프로그램은 최종 수정에 응답하지 않았을 가능성이 있다. 이 경우, 프로그램이 최종 시도된 수정에 응답하지 않고 있음을 보고하는 에러 보고가 사용자 또는 시스템 관리자와 같은 엔티티들에게 발행될 수 있다. 대안으로, 프로그램이 수정 버전을 로딩하게 하는 시도가 이루어질 수 있다.
하나의 예시적인 구현에서, 쿼리 모듈(610)은 시스템(100) 내의 컴퓨팅 기반 장치(102, 104(a)-(n)) 상의 운영 체제(314)에 등록된 프로그램의 최종 로드 시간 및 최종 수정 시간 양자에 대해 쿼리할 수 있다. 쿼리 모듈(610)은 최종 로드 시간과 최종 수정 시간을 비교하고, 프로그램의 최종 로드 시간이 프로그램의 최종 수정 시간보다 이른 경우, 쿼리 모듈(610)은 프로그램이 최종 시도된 수정에 응답하고 있지 않음을 보고하는 에러 보고를 사용자 또는 시스템 관리자와 같은 엔티티들에게 발행할 수 있다. 쿼리 모듈(610)은 프로그램이 수정 버전을 로딩하게 하려고 시도할 수 있다.
도 13은 컴퓨팅 기반 장치 상에 인스톨된 프로그램의 하나 이상의 확장성 포인트(EP)를 검출하기 위한 예시적인 방법(1300)을 나타낸다. EP들은 컴퓨터 애플리케이션의 동적 로딩 및 실행을 제어하는 상호작용들을 포함한다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1302에서, 이전 상호작용들(즉, 주 프로그램의 실행 전에 시스템 메모리에 실행을 위해 로딩된 다양한 프로그램에 관련된 상호작용들)이 검사된다. 예를 들어, 쿼리 모듈(610)은 주 프로그램의 실행 전에 실행을 위해 메모리(304)에 로딩된 다양한 프로그램에 관련된 상호작용들에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리함으로써 주 프로그램과 연관된 잠재적 직접 확장성 포인트(EP)들을 식별할 수 있다. 하나의 예시적인 구현에서, 쿼리 모듈(610)은 주 프로그램의 실행 전에 2초와 같은 소정 시간 범위 내의 실행을 위해 메모리(304)에 로딩된 다양한 프로그램에 관련된 상호작용들에 대해 쿼리할 수 있다.
블록 1304에서, 컴퓨팅 기반 장치의 시스템 메모리에 실행을 위해 로딩된 주 프로그램의 파일명을 참조하는 이전 상호작용들을 발견하기 위해 검사가 수행된다. 예를 들어, 쿼리 모듈(610)은 주 프로그램을 참조하는 다양한 프로그램과 연관되거나, 컴퓨팅 기반 장치(102, 104(a)-(n)) 상의 주 프로그램의 실행과 연관된 상호작용들에 대해 쿼리할 수 있다. 쿼리 모듈(610)은 주 프로그램의 파일명, 주 프로그램의 프로그램 ID 등과 같은 다양한 속성을 포함하는 상호작용들에 대해 쿼리할 수 있다.
블록 1306에서, 주 프로그램의 파일명을 참조하는 이전 상호작용들이 직접 EP들로서 플래그된다. 예를 들어, 쿼리 모듈(610)은 주 프로그램을 참조하거나 주 프로그램의 실행과 연관된 모든 이전 상호작용들에 대해 쿼리함으로써 주 프로그램과 연관된 직접 EP들을 식별할 수 있다.
일 구현에서, 직접 EP들을 참조하는 다양한 부 프로그램과 연관된 다른 상호작용들이 간접 EP들로서 지칭된다. 예를 들어, 쿼리 모듈(610)은 (1) 주 프로그램의 실행 전에 메모리(304)에 실행을 위해 로딩된 다양한 부 프로그램과 연관되고, (2) 직접 EP들 중 임의의 것을 또한 참조하거나 (부 프로그램들과 연관된) 간접 EP들을 참조하는 모든 상호작용에 대해 블록 스토리지(328) 및/또는 블록 스토리지(616)에 쿼리할 수 있다.
또 다른 가능한 구현에서, 간접 EP들은 직접 또는 간접 EP들을 참조하는 상호작용들을 찾음으로써 결정될 수도 있다.
도 14는 컴퓨팅 기반 장치 상에서 실행되는 프로그램(들)의 상호작용들로 인한 하나 이상의 액티비티 버스트를 검출하기 위한 예시적인 방법(1400)을 나타낸다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1402에서, 하나 이상의 액티비티 버스트가 수신된다. 예를 들어, 액티비티 버스트들은 분석 서버(700)에 의해 수신될 수 있으며, 수집 서버(106)와 같은 외부 저장 장치로부터 수신된 이전 상호작용들에 대응할 수 있다. 대안으로, 액티비티 버스트들은 컴퓨팅 장치들(102, 104(a)-(n))로부터 동적으로 수신될 수 있다.
일 구현에서, 액티비티 버스트들은 하나 이상의 스레드 내에서 시간적으로 서로 가까이 발생하는 개별 상호작용들에 대응하는 액티비티 응답들을 포함할 수 있다. 대안으로, 액티비티 버스트들은 사용자, 소정 프로그램 등에 의한 액티비티들의 그룹들과 같이 다른 차원들에 기초하여 그룹화된 개별 상호작용들에 대응하는 액티비티 응답들을 포함할 수 있다. 더욱이, 액티비티 버스트들 내의 개별 액티비티 응답들은 상호작용들로 귀착되는 스레드들의 실행시에 컴퓨팅 기반 장치의 메모리 및 프로세서들과 같은 자원들의 사용에 대응할 수 있다.
블록 1404에서, 서로 약간 상이한 액티비티 버스트들을 포함하는 유사한 액티비티 버스트들에 유사한 시그니처들이 할당된다. 일 구현에서, 액티비티 버스트들은 소수의 상이한 액티비티 응답들 및/또는 액티비티 응답들 사이의 소수의 상이한 시간들을 포함함으로써 서로 약간 다를 수 있다.
예를 들어, 유사한 액티비티 버스트들(800)은 특정 프로그램에 의해 생성된 유사한 스레드들의 실행을 지시한다. 액티비티 버스트 분석 모듈(712)이 유사성에 대해 시스템(100)의 액티비티 버스트들(800)을 모니터링할 수 있다. 유사한 액티비티 버스트들(800)의 발견시, 시그니처 모듈(710)은 동일하거나 서로 약간만 다를 수 있는 유사한 시그니처들을 유사한 액티비티 버스트들(800)에 할당할 수 있다. 더욱이, 유사한 시그니처들 및/또는 유사한 시그니처들이 할당된 액티비티 버스트들(800)은 서명된 액티비티 버스트(들)(718)에 저장될 수 있다.
블록 1406에서, 임시 파일들과의 상호작용들과 연관된 액티비티 버스트들에 동일 시그니처가 할당될 수 있다. 임시 파일들은 컴퓨팅 기반 장치들(102, 104(a)-(n))과 같은 컴퓨팅 기반 장치들 상의 프로그램의 인스톨 동안 생성되는 파일들을 포함할 수 있다. 하나의 가능한 구현에서, 임시 파일들의 변경은 블록 스토리지(328) 및/또는 블록 스토리지(616) 내의 상호작용들로서 나타난다. 따라서, 임시 파일들과 연관된 모든 상호작용에는 시그니처 모듈(710)에 의해 동일 시그니처가 할당될 수 있다.
블록 1408에서, 유사하거나 동일한 시그니처들이 할당된 액티비티 버스트들은 유사하거나 동일한 시그니처에 따라 카탈로그화된다. 예를 들어, 시그니처 모듈(710)은 동일 또는 유사한 시그니처가 새로 할당된 액티비티 버스트(800)를 서명된 액티비티 버스트(들)(718)에 저장할 수 있다. 일 구현에서, 서명된 액티비티 버스트(들)(718)는 액티비티 버스트들(800)의 생성과 연관된 프로그램들, 또는 액티비티 버스트들(800)과 연관된 상호작용들 등에 의해 특정 기준들에 따라 배열될 수도 있다.
도 15는 컴퓨팅 기반 장치 상에서 예를 들어 시스템 관리자에 의해 정의되는 바와 같은 검증되지 않은 상호작용들의 실행을 금지하기 위한 예시적인 방법(1500)을 나타낸다. 검증되지 않은 상호작용들의 예는 그러한 액션을 수행하도록 허가되지 않은 엔티티 또는 프로그램에 의해 파일 시스템 상에서 수행되는 판독 및/또는 기록 액션들을 포함한다.
방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1502에서, 시그니처를 가진 액티비티 버스트가 수신된다. 예를 들어, 컴퓨팅 장치들(102, 104(a)-(n))로부터 액티비티 버스트(800)가 동적으로 수신될 수 있다. 액티비티 버스트들은 하나 이상의 스레드 내에서 시간적으로 서로 가까이 발생하는 개별 상호작용들에 대응하는 액티비티 응답들을 포함한다. 액티비티 버스트들 내의 개별 액티비티 응답들은 상호작용들로 귀착되는 스레드들의 실행시에 컴퓨팅 기반 장치의 메모리 및 프로세서들과 같은 자원들의 사용에 대응한다.
블록 1504에서, 액티비티 버스트의 시그니처가 검증되지 않은 상호작용들을 지시하는 시그니처들과 비교된다. 예를 들어, 액티비티 버스트 분석 모듈(712)은 수신된 액티비티 버스트의 시그니처와 서명된 액티비티 버스트(718) 내의 하나 이상의 금지 액션 시그니처를 비교할 수 있다. 금지 액션 시그니처는 시스템 관리자와 같은 엔티티들에 의해 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상에서 발생하는 것이 금지된 검증되지 않은 상호작용들을 나타낸다.
블록 1506에서, 액티비티 버스트가 검증되지 않은 상호작용에 대응하는지를 판정한다. 예를 들어, 액티비티 버스트의 시그니처가 검증되지 않은 상호작용을 나타내는 시그니처에 대응하지 않는 경우(블록 1506에서 "no" 경로), 액티비티 버스트와 연관된 상호작용들은 진행이 허가될 수 있다(블록 1508). 대안으로, 액티비티 버스트의 시그니처가 검증되지 않은 상호작용을 지시하는 시그니처에 대응하는 경우(블록 1506에서 "yes" 경로), 액티비티 버스트와 연관된 상호작용들은 진행이 허가되지 않는다(블록 1510).
하나의 예시적인 구현에서, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트의 시그니처를 서명된 액티비티 버스트(들)(718) 내의 금지 액션 시그니처들과 비교하고, 액티비티 버스트가 검증되지 않은 액션에 대응하는지를 판정할 수 있다. 액티비티 버스트 분석 모듈(712)이 액티비티 버스트의 시그니처가 검증되지 않은 액션에 대응하지 않는 것으로 판정하는 경우, 액티비티 버스트에 대응하는 상호작용들은 허가된다. 대안으로, 액티비티 버스트 분석 모듈(712)이 액티비티 버스트의 시그니처가 검증되지 않은 액션에 대응하는 것으로 판정하는 경우, 액티비티 버스트에 대응하는 상호작용들은 금지된다. 금지는 시스템 관리자 및 액티비티 버스트 분석 모듈(712)과 같은 엔티티들에 의해 구현될 수 있다.
도 16은 하나 이상의 컴퓨팅 기반 장치 상에서 사기 프로그램들을 검출하기 위한 예시적인 방법(1600)을 나타낸다. 사기 프로그램들의 예는 컴퓨팅 기반 장치 상에서 실행되어 바람직하지 않거나 보증되지 않은 액티비티들을 유발하는 스파이웨어, 멀웨어, 트로이 목마, 기타 다른 프로그램들을 포함한다. 방법이 설명되는 순서는 제한으로서 해석되는 것을 의도하지 않으며, 임의 수의 설명되는 방법 블록들이 그 방법 또는 대안 방법을 구현하기 위해 임의 순서로 조합될 수 있다. 또한, 개별 블록들은 여기에 설명되는 발명의 사상 및 범위를 벗어나지 않고 방법으로부터 삭제될 수 있다. 또한, 방법은 임의의 적절한 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다.
블록 1602에서, 시그니처를 가진 액티비티 버스트가 수신된다. 예를 들어, 액티비티 버스트는 분석 서버(700)에 의해 수신될 수 있으며, 수집 서버(106)와 같은 외부 저장 장치로부터 수신된 이전 상호작용들에 대응할 수 있다. 대안으로, 액티비티 버스트는 컴퓨팅 장치들(102, 104(a)-(n))로부터 동적으로 수신될 수 있다. 액티비티 버스트들은 하나 이상의 스레드에서 시간적으로 서로 가까이 발생하는 개별 상호작용들에 대응하는 액티비티 응답들을 포함한다. 액티비티 버스트들 내의 개별 액티비티 응답들은 상호작용들로 귀착되는 스레드들의 실행시에 컴퓨팅 기반 장치의 메모리 및 프로세서들과 같은 자원들의 사용에 대응한다.
블록 1604에서, 액티비티 버스트의 시그니처가 공지되고 허용 가능한 액티비티 버스트들과 연관된 저장된 시그니처들과 비교된다. 예를 들어, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트의 시그니처를 서명된 액티비티 버스트(들)(718) 내의 공지되고 허용 가능한 액티비티 버스트들과 연관된 하나 이상의 시그니처와 비교할 수 있다.
액티비티 버스트의 시그니처가 공지되고 허용 가능한 액티비티 버스트의 시그니처에 대응하는 경우(블록 1604에서 'yes' 경로), 액티비티 버스트는 허용 가능한 것으로 검증되며, 액티비티 버스트와 연관된 상호작용들은 실행이 허가된다(블록 1606). 예를 들어, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트의 시그니처가 유효 액티비티 버스트의 시그니처와 유사한 것으로 판정하는 경우에 액티비티 버스트가 유효하며 액티비티 버스트와 연관된 상호작용들이 실행될 수 있음을 지시할 수 있다.
대안으로, 액티비티 버스트의 시그니처가 공지되고 허용 가능한 액티비티 버스트와 연관된 시그니처에 대응하지 않는 것으로 판정되는 경우(블록 1604에서 'no' 경로), 상호작용이 보증되지 않거나 악의적인 프로그램의 액티비티에 기인한 것인지에 대한 판정이 행해질 수 있다(블록 1608).
액티비티 버스트의 시그니처가 공지된 사기 액티비티 버스트들의 임의의 시그니처들과 유사한 경우(블록 1608에서 'yes' 경로), 액티비티 버스트에 포함된 상호작용들과 연관된 프로그램은 사기 프로그램으로 추론되고 제거될 수 있다(블록 1610). 더욱이, 액티비티 버스트와 연관된 상호작용들은 실행이 차단될 수 있다.
예를 들어, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트의 시그니처를 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상의 사기 프로그램들과의 상호작용들을 포함하는 액티비티 버스트들과 연관된 시그니처들과 비교할 수 있다. 액티비티 버스트의 시그니처가 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상의 사기 프로그램들과의 상호작용들을 포함하는 액티비티 버스트들과 연관된 시그니처들 중 임의 시그니처와 유사한 경우, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트와 연관된 상호작용들을 하나 이상의 사기 프로그램에 기인한 것으로서 식별할 수 있다. 스레드 데이터 레코더(108), 액티비티 버스트 분석 모듈(7120 및 시스템 관리자를 포함하는 엔티티들은 사기 프로그램(들)을 제거하고, 그리고/또는 액티비티 버스트와 연관된 스레드들의 실행을 금지할 수 있다.
대안으로, 액티비티 버스트의 시그니처가 공지된 사기 액티비티 버스트들의 임의 시그니처들과 유사하지 않은 경우(블록 1608에서 'no' 경로), 액티비티 버스트는 액티비티 버스트가 하나 이상의 실효 파일과 연관되어 있는지를 판정하기 위해 검사될 수 있다(블록 1612). 액티비티 버스트가 실효 파일과 연관되어 있는 것으로 판정되는 경우(블록 1612에서 'yes' 경로), 실효 파일이 제거될 수 있다(블록 1614). 대안으로, 액티비티 버스트가 실효 파일과 연관되지 않은 것으로 판정되는 경우(블록 1612에서 'no' 경로), 시스템 관리자와 같은 엔티티에게 액티비티 버스트의 존재를 보고하는 메시지가 제공될 수 있다(블록 1616). 더욱이, 액티비티 버스트와 연관된 스레드들의 실행이 금지될 수 있다.
예를 들어, 액티비티 버스트 분석 모듈(712)이 액티비티 버스트의 시그니처가 컴퓨팅 기반 장치들(102, 104(a)-(n)) 상의 사기 프로그램들과의 상호작용들을 포함하는 액티비티 버스트들과 연관된 시그니처들 중 임의 시그니처와 유사한 것을 발견하지 못한 경우, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트가 실효 파일들의 실행의 결과로서 발생한 상호작용들에 기인하는지를 확인하기 위해 검사할 수 있다. 하나의 가능한 구현에서, 액티비티 버스트 분석 모듈(712)은 액티비티 버스트의 시그니처를 서명된 액티비티 버스트(들)(718)에 저장된 실효 파일들의 실행과 연관된 액티비티 버스트들의 시그니처들과 비교할 수 있다. 시그니처들이 유사한 경우, 스레드 데이터 레코더(108), 액티비티 버스트 분석 모듈(712) 및 시스템 관리자를 포함하는 요소들은 컴퓨팅 기반 장치(102, 104(a)-(n))로부터 실효 파일들을 제거할 수 있다.
대안으로, 액티비티 버스트의 시그니처가 서명된 액티비티 버스트(들)(718)에 저장된 실효 파일들의 실행과 연관된 액티비티 버스트들의 시그니처들과 유사하지 않은 경우, 액티비티 버스트 분석 모듈(712)은 시스템 관리자와 같은 엔티티에게 액티비티 버스트의 존재를 보고하는 메시지를 제공할 수 있다. 또한, 스레드 데이터 레코더(108), 액티비티 버스트 분석 모듈(712) 및 시스템 관리자를 포함하는 엔티티들은 액티비티 버스트와 연관된 스레드들의 실행을 금지할 수 있다.
예시적인 컴퓨팅 환경
도 17은 여기에 설명되는 기술들을 구현하는 데 사용될 수 있고 여기에 설명되는 요소들을 전체적으로 또는 부분적으로 나타낼 수 있는 예시적인 범용 컴퓨터 환경(1700)을 나타낸다. 컴퓨터 환경(1700)은 컴퓨팅 환경의 일례에 불과하며, 컴퓨터 및 네트워크 아키텍처들의 용도 또는 기능성의 범위에 관한 어떤 제한을 암시하고자 하는 것이 아니다. 컴퓨터 환경(1700)은 예시적인 컴퓨터 환경(1700) 내에 도시된 컴포넌트들 중 어느 하나 또는 조합에 관한 임의의 종속성 또는 필요 조건을 갖는 것으로 해석되지 않아야 한다.
컴퓨터 환경(1700)은 컴퓨터(1702) 형태의 범용 컴퓨팅 기반 장치를 포함한다. 컴퓨터(1702)는 예를 들어, 데스크톱 컴퓨터, 핸드-헬드 컴퓨터, 노트북 또는 랩톱 컴퓨터, 서버 컴퓨터, 게임 콘솔 등일 수 있다. 컴퓨터(1702)의 컴포넌트들은 하나 이상의 프로세서 또는 처리 장치(1704), 시스템 메모리(1706), 및 프로세서(1704)를 비롯한 다양한 시스템 컴포넌트를 시스템 메모리(1706)에 연결시키는 시스템 버스(1708)를 포함할 수 있지만, 이에 제한되는 것은 아니다.
시스템 버스(1708)는 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 가속 그래픽 포트, 및 각종 버스 아키텍처 중 임의의 아키텍처를 이용하는 프로세서 또는 로컬 버스를 비롯한 임의의 몇몇 유형의 버스 구조 중 하나 이상을 나타낸다. 예를 들어, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 및 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스를 포함할 수 있다.
컴퓨터(1702)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 이러한 매체는 컴퓨터(1702)에 의해 액세스 가능하고 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함하는 임의의 이용 가능 매체일 수 있다.
시스템 메모리(1706)는 랜덤 액세스 메모리(RAM)(1710)와 같은 휘발성 메모리, 및/또는 판독 전용 메모리(ROM)(1712)와 같은 비휘발성 메모리 형태의 컴퓨터 판독가능 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(1702) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴들을 포함하는 기본 입/출력 시스템(BIOS)(1714)이 ROM(1712)에 저장되어 있다. RAM(1710)은 통상적으로 처리 장치(1704)가 즉시 액세스할 수 있고 및/또는 처리 장치 상에서 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다.
컴퓨터(1702)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 예를 들어, 도 17은 비이동식, 비휘발성 자기 매체(도시되지 않음)에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(1716), 이동식, 비휘발성 자기 디스크(1720)(예를 들어, "플로피 디스크")에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(1718), 및 CD-ROM, DVD-ROM 또는 기타 광 매체 등의 이동식, 비휘발성 광 디스크(1724)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(1722)를 도시하고 있다. 하드 디스크 드라이브(1716), 자기 디스크 드라이브(1718) 및 광 디스크 드라이브(1722)는 각각 하나 이상의 데이터 매체 인터페이스(1726)에 의해 시스템 버스(1708)에 접속된다. 대안으로, 하드 디스크 드라이브(1716), 자기 디스크 드라이브(1718) 및 광 디스크 드라이브(1722)는 하나 이상의 인터페이스(도시되지 않음)에 의해 시스템 버스(1708)에 접속될 수 있다.
디스크 드라이브들 및 이들과 연관된 컴퓨터 판독가능 매체들은 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈들 및 컴퓨터(1702)용의 다른 데이터의 비휘발성 저장을 제공한다. 하드 디스크(1716), 이동식 자기 디스크(1720) 및 이동식 광 디스크(1724)가 예로서 도시되지만, 자기 카세트 또는 다른 자기 저장 장치, 플래시 메모리 카드, CD-ROM, DVD 또는 다른 광 저장 장치, RAM, ROM, EEPROM 등과 같이 컴퓨터에 의해 액세스 가능한 데이터를 저장할 수 있는 다른 유형의 컴퓨터 판독가능 매체들도 예시적인 컴퓨팅 시스템 및 환경을 구현하는 데 사용될 수 있다는 것을 알아야 한다.
예를 들어, 운영 체제(1727), 하나 이상의 애플리케이션 프로그램(1728), 다른 프로그램 모듈(1730) 및 프로그램 데이터(1732)를 포함하는 임의 수의 프로그램 모듈들이 하드 디스크(1716), 자기 디스크(1720), 광 디스크(1724), ROM(1712) 및/또는 RAM(1710)에 저장될 수 있다. 이러한 운영 체제(1727), 하나 이상의 애플리케이션 프로그램(1728), 기타 프로그램 모듈(1730) 및 프로그램 데이터(1732)(또는 이들의 소정 조합) 각각은 분산형 파일 시스템을 지원하는 상주 컴포넌트들의 전부 또는 일부를 구현할 수 있다.
사용자는 키보드(1734) 및 포인팅 장치(1736)(예를 들어, "마우스") 등의 입력 장치들을 통해 명령 및 정보를 컴퓨터(1702)에 입력할 수 있다. 다른 입력 장치들(1738)(구체적으로 도시되지 않음)은 마이크, 조이스틱, 게임 패드, 위성 안테나, 병렬 포트, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 시스템 버스(1708)에 결합된 입출력 인터페이스(1740)를 통해 처리 장치(1704)에 접속되지만, 병렬 포트, 게임 포트, 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다.
모니터(1742) 또는 다른 유형의 디스플레이 장치도 비디오 어댑터(1744) 등의 인터페이스를 통해 시스템 버스(1708)에 접속될 수 있다. 모니터(1742) 외에, 다른 출력 주변 장치들은 입출력 인터페이스(1740)를 통해 컴퓨터(1702)에 접속될 수 있는 스피커(도시되지 않음) 및 프린터(1746)와 같은 컴포넌트들을 포함할 수 있다.
컴퓨터(1702)는 원격 컴퓨팅 기반 장치(1748)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 예를 들어, 원격 컴퓨팅 기반 장치(1748)는 퍼스널 컴퓨터, 휴대형 컴퓨터, 서버, 라우터, 네트워크 컴퓨터, 피어 장치 또는 기타 통상의 네트워크 노드 등일 수 있다. 원격 컴퓨팅 기반 장치(1748)는 컴퓨터(1702)와 관련하여 여기서 설명되는 요소들 및 특징들의 대부분 또는 모두를 포함할 수 있는 휴대형 컴퓨터로서 도시된다.
컴퓨터(1702)와 원격 컴퓨터(1748) 사이의 논리적 접속은 근거리 네트워크(LAN)(1750) 및 범용 원거리 네트워크(WAN)(1752)로서 도시된다. 이러한 네트워킹 환경들은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 구현될 때, 컴퓨터(1702)는 네트워크 인터페이스 또는 어댑터(1754)를 통해 LAN(1750)에 접속된다. WAN 네트워킹 환경에서 구현될 때, 컴퓨터(1702)는 통상적으로 WAN(1752)을 통해 통신을 설정하기 위한 모뎀(1756) 및 기타 수단을 포함한다. 컴퓨터(1702)에 대해 내장형이거나 외장형일 수 있는 모뎀(1756)은 입출력 인터페이스(1740) 또는 기타 적절한 메커니즘을 통해 시스템 버스(1708)에 접속될 수 있다. 도시된 네트워크 접속들은 예시적이며, 이 컴퓨터들(1702, 1748) 사이에 통신 링크(들)를 설정하기 위한 기타 수단이 사용될 수 있다는 것을 이해할 것이다.
컴퓨팅 환경(1700)과 함께 도시된 것과 같은 네트워킹 환경에서, 컴퓨터(1702) 및 그의 일부에 관해 도시된 프로그램 모듈들은 원격 메모리 저장 장치에 저장될 수 있다. 예를 들어, 원격 애플리케이션 프로그램들(1758)은 원격 컴퓨터(1748)의 메모리 장치에 위치한다. 예시적인 목적으로, 애플리케이션 프로그램들, 및 운영 체제 등의 기타 실행가능 프로그램 컴포넌트들은 여기서 개별 블록들로서 도시되지만, 이러한 프로그램들 및 컴포넌트들은 다양한 시간에 컴퓨팅 기반 장치(1702)의 상이한 저장 컴포넌트들 내에 위치하며, 컴퓨터의 데이터 프로세서(들)에 의해 실행된다는 것을 인식한다.
다양한 모듈 및 기술은 본 명세서에서, 하나 이상의 컴퓨터 또는 다른 장치에 의해 실행되는 프로그램 모듈들과 같은 컴퓨터 실행가능 명령어와 일반적으로 관련하여 설명될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 통상적으로, 프로그램 모듈의 기능은 다양한 실시예에서 원하는 대로 조합되거나 분산될 수 있다.
이러한 모듈 및 기술의 구현은 소정 형태의 컴퓨터 판독가능 매체들 상에 저장되거나 전송될 수 있다. 컴퓨터에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있다. 예로서, 컴퓨터 판독가능 매체는 "컴퓨터 저장 매체" 및 "통신 매체"를 포함할 수 있으나, 이에 제한되는 것은 아니다.
"컴퓨터 저장 매체"는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이에 제한되는 것은 아니다.
대안으로, 프레임워크의 일부는 하드웨어 또는 하드웨어, 소프트웨어 및/또는 펌웨어의 조합으로 구현될 수 있다. 예를 들어, 하나 이상의 ASIC(application specific integrated circuit) 또는 PLD(programmable logic device)가 프레임워크의 하나 이상의 부분을 구현하도록 설계 또는 프로그래밍될 수 있다.
결론
스레드 인터셉션 및 분석을 위한 실시예들이 구조적인 특징들 및/또는 방법들에 고유한 언어로 설명되었지만, 첨부된 청구범위의 주제는 설명된 특정 특징들 또는 방법들로 제한될 필요가 없다는 것을 이해해야 한다. 오히려, 특정 특징들 및 방법들은 스레드 인터셉션 및 분석의 예시적인 구현들로서 개시된다.

Claims (21)

  1. 시스템으로서,
    적어도 하나의 프로세서;
    상기 시스템 상에서 동작하는 하나 이상의 함수; 및
    상기 하나 이상의 함수가,
    상기 하나 이상의 함수를 호출하는 스레드들을 인터셉트하고,
    상기 인터셉트된 스레드들과 연관된 데이터를 캡처하며,
    상기 캡쳐된 데이터를 이용하여 확장성 포인트(extensibility point)를 검출하도록,
    상기 하나 이상의 함수를 인스트루먼팅하는(instrument) 스레드 데이터 레코더
    를 포함하는 시스템.
  2. 제1항에 있어서,
    상기 스레드 데이터 레코더는 상기 하나 이상의 함수 각각 내의 컴퓨터 실행가능 명령어를 수정함으로써 상기 하나 이상의 함수를 인스트루먼팅하도록 구성된
    시스템.
  3. 제1항에 있어서,
    상기 스레드 데이터 레코더는 상기 시스템의 시동시에 상기 하나 이상의 함수를 인스트루먼팅하도록 구성된
    시스템.
  4. 제1항에 있어서,
    상기 하나 이상의 함수는 초크 포인트 함수(choke point function)를 포함하는
    시스템.
  5. 제1항에 있어서,
    상기 스레드 데이터 레코더는
    상기 인터셉트된 스레드들과 연관된 데이터를 복제하도록 구성된 복제 모듈; 및
    상기 복제된 데이터의 압축을 실행할 것을 사용자 데몬(daemon)에게 지시(direct)하도록 구성된 지시 모듈
    을 포함하는 시스템.
  6. 제5항에 있어서,
    상기 지시 모듈은 또한,
    상기 프로세서의 자원들이 사전결정된 레벨 이하로 사용되고 있을 때와, 사전결정된 시간 중 적어도 하나의 시기에, 상기 복제된 데이터의 압축을 실행할 것을 상기 사용자 데몬에게 지시하도록 구성된
    시스템.
  7. 기존 함수를 호출하는 스레드를 인터셉트하고, 상기 스레드와 연관된 데이터를 캡처하도록 상기 기존 함수를 인스트루먼팅하는 단계;
    상기 스레드와 연관된 상기 캡처된 데이터를 복사하는 단계; 및
    상기 캡쳐된 데이터를 이용하여 확장성 포인트를 검출하는 단계
    를 포함하는 방법.
  8. 제7항에 있어서,
    상기 스레드를 발행하는 프로그램과 관련된 데이터를 액세스하는 단계; 및
    상기 기존 함수에 의해 상기 스레드와 연관된 상호작용이 수행되는 시간에 대한 정보를 액세스하는 단계
    를 더 포함하는 방법.
  9. 제7항에 있어서,
    프로그램의 식별자에 대하여 상기 스레드와 연관된 상기 데이터의 적어도 일부를 검사하는 단계; 및
    상기 프로그램의 식별자를 기지의 보증되지 않은 프로그램들의 식별자들의 리스트와 비교하는 단계
    를 더 포함하는 방법.
  10. 제9항에 있어서,
    상기 비교 단계는 상기 프로그램의 식별자가 기지의 보증되지 않은 프로그램의 식별자와 매칭되는 경우에 상기 프로그램을 제거하는 단계를 포함하는 방법.
  11. 제7항에 있어서,
    상기 스레드와 연관된 상기 데이터를 압축하는 단계를 더 포함하는 방법.
  12. 제11항에 있어서,
    상기 압축된 데이터를 분석 서버에 주기적으로 업로딩하는 단계를 더 포함하는 방법.
  13. 컴퓨터 실행가능 명령어를 포함하는 하나 이상의 컴퓨터 판독가능 저장 매체로서,
    상기 컴퓨터 실행가능 명령어는 실행되는 경우,
    하나 이상의 스레드에서 발생한 하나 이상의 관련 상호작용을 수신하는 동작;
    상기 하나 이상의 관련 상호작용과 연관된 선택된 차원(selected dimension)에 기초하여 상기 하나 이상의 관련 상호작용을 액티비티 버스트(activity burst)로 그룹화하는 동작; 및
    액티비티 버스트가 검증되지 않은 상호작용을 나타내는지 여부를 판정하는 동작
    을 포함하는 동작들을 수행하는
    컴퓨터 판독가능 저장 매체.
  14. 제13항에 있어서,
    실행시,
    유사한 상호작용들을 갖는 액티비티 버스트들에 유사한 시그니처들을 할당하여, 상기 액티비티 버스트들을 유사한 것으로서 고유하게 식별하는 동작;
    파일 경로들의 해싱 및 액티비티 유형들의 식별자들의 해싱을 포함하는, 프로세스들에 의해 상기 유사한 시그니처들을 계산하는 동작
    을 포함하는 추가 동작들을 수행하는 컴퓨터 실행가능 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  15. 제13항에 있어서,
    실행시에, 임시 파일들과의 상호작용들을 포함하는 액티비티 버스트들에 동일 시그니처를 할당하는 동작을 포함하는 추가 동작들을 수행하는 컴퓨터 실행가능 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  16. 제13항에 있어서,
    실행시에, 하나 이상의 액티비티 버스트 각각의 시그니처에 의해 분류된 상기 하나 이상의 액티비티 버스트의 리스트를 포함하는 데이터 집합(data collection)을 생성하는 동작을 포함하는 추가 동작들을 수행하는 컴퓨터 실행가능 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  17. 제13항에 있어서,
    실행시에, 검증되지 않은 상호작용의 실행을 금지하는 동작을 포함하는 추가 동작들을 수행하는 컴퓨터 실행가능 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  18. 제13항에 있어서,
    상기 상호작용들은
    메모리로부터의 판독;
    메모리로의 기록;
    설정 변경;
    애플리케이션 실행
    중 적어도 하나에 기초하는
    컴퓨터 판독가능 저장 매체.
  19. 제13항에 있어서,
    상기 그룹화하는 동작은
    상기 상호작용들과 연관된 시간;
    상기 상호작용들과 연관된 사용자;
    상기 상호작용들과 연관된 프로그램
    중 적어도 하나에 기초하여 관련 상호작용들을 그룹화하는 동작
    을 포함하는 컴퓨터 판독가능 저장 매체.
  20. 제13항에 있어서,
    실행시에, 보증되지 않은 프로그램에 대응하는 액티비티 버스트와 연관된 시그니처의 발생을 검출함으로써 상기 보증되지 않은 프로그램의 존재를 식별하는 동작을 포함하는 추가 동작들을 수행하는 컴퓨터 실행가능 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  21. 시스템으로서,
    적어도 하나의 프로세서;
    메모리;
    상기 시스템 상에서 동작하는 하나 이상의 함수;
    상기 하나 이상의 함수가,
    상기 하나 이상의 함수를 호출하는 스레드들을 인터셉트하고,
    상기 인터셉트된 스레드들과 연관된 데이터를 캡처하며,
    제1 스레드 전의 실행을 위해 상기 메모리 내에 로딩되었고 상기 제1 스레드를 참조하거나 상기 제1 스레드의 실행과 연관된 스레드에 관련된 상호작용들을 격리하기 위해 상기 캡쳐된 데이터를 이용하여 확장성 포인트를 검출하도록,
    상기 하나 이상의 함수를 인스트루먼팅하는 스레드 데이터 레코더; 및
    하나 이상의 스레드에서 발생한 하나 이상의 관련 상호작용을 수신하고,
    상기 하나 이상의 관련 상호작용과 연관된 선택된 차원(selected dimension)에 기초하여 상기 하나 이상의 관련 상호작용을 액티비티 버스트로 그룹화하며,
    상기 액티비티 버스트 각각에 대한 시그니처를 판정하고,
    검증되지 않은 것으로 알려진 액티비티의 시그니처에 액티비티 버스트의 시그니처를 비교함으로써 상기 액티비티 버스트가 검증되지 않은 상호작용을 나타내는지 여부를 판정하도록
    구성된 검증되지 않은 상호작용 모듈
    을 포함하는 시스템.
KR1020087020908A 2006-02-28 2007-02-13 스레드 인터셉션을 위한 시스템, 방법 및 컴퓨터 판독가능 매체 KR101354877B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US74338206P 2006-02-28 2006-02-28
US60/743,382 2006-02-28
US11/567,113 2006-12-05
US11/567,113 US7716530B2 (en) 2006-02-28 2006-12-05 Thread interception and analysis
PCT/US2007/003703 WO2007100484A1 (en) 2006-02-28 2007-02-13 Thread interception and analysis

Publications (2)

Publication Number Publication Date
KR20080114699A KR20080114699A (ko) 2008-12-31
KR101354877B1 true KR101354877B1 (ko) 2014-01-22

Family

ID=38459371

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087020908A KR101354877B1 (ko) 2006-02-28 2007-02-13 스레드 인터셉션을 위한 시스템, 방법 및 컴퓨터 판독가능 매체

Country Status (4)

Country Link
EP (1) EP1997018B1 (ko)
KR (1) KR101354877B1 (ko)
CN (1) CN101390077B (ko)
WO (1) WO2007100484A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103679024B (zh) * 2013-11-19 2015-03-25 百度在线网络技术(北京)有限公司 病毒的处理方法及设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7047521B2 (en) 2001-06-07 2006-05-16 Lynoxworks, Inc. Dynamic instrumentation event trace system and methods
US7386839B1 (en) 2002-11-06 2008-06-10 Valery Golender System and method for troubleshooting software configuration problems using application tracing

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7039919B1 (en) 1998-10-02 2006-05-02 Microsoft Corporation Tools and techniques for instrumenting interfaces of units of a software program
US6748556B1 (en) * 2000-08-15 2004-06-08 International Business Machines Corporation Changing the thread capacity of a multithreaded computer processor
US8473922B2 (en) * 2001-09-19 2013-06-25 Hewlett-Packard Development Company, L.P. Runtime monitoring in component-based systems
US7237242B2 (en) * 2002-12-31 2007-06-26 International Business Machines Corporation Dynamic thread pool tuning techniques
US7330889B2 (en) * 2003-03-06 2008-02-12 Actional Corporation Network interaction analysis arrangement
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7047521B2 (en) 2001-06-07 2006-05-16 Lynoxworks, Inc. Dynamic instrumentation event trace system and methods
US7386839B1 (en) 2002-11-06 2008-06-10 Valery Golender System and method for troubleshooting software configuration problems using application tracing

Also Published As

Publication number Publication date
EP1997018A4 (en) 2010-03-10
CN101390077A (zh) 2009-03-18
CN101390077B (zh) 2013-03-27
KR20080114699A (ko) 2008-12-31
EP1997018A1 (en) 2008-12-03
WO2007100484A1 (en) 2007-09-07
EP1997018B1 (en) 2015-05-27

Similar Documents

Publication Publication Date Title
US7716530B2 (en) Thread interception and analysis
KR101443932B1 (ko) 시스템 분석 및 관리
US7472420B1 (en) Method and system for detection of previously unknown malware components
US7765592B2 (en) Changed file identification, software conflict resolution and unwanted file removal
US8516582B2 (en) Method and system for real time classification of events in computer integrity system
US8244841B2 (en) Method and system for implementing group policy operations
US8326579B2 (en) Method and system for program execution integrity measurement
KR101647487B1 (ko) 패치파일 분석시스템과 분석방법
US20050091214A1 (en) Internal object protection from application programs
US11176247B2 (en) System and method for container assessment using sandboxing
JP2007109016A (ja) アクセスポリシ生成システム、アクセスポリシ生成方法及びアクセスポリシ生成用プログラム
KR101354877B1 (ko) 스레드 인터셉션을 위한 시스템, 방법 및 컴퓨터 판독가능 매체
Verbowski et al. LiveOps: Systems Management as a Service.

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: 20161220

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20171219

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20181226

Year of fee payment: 6