KR20060092832A - 웜 봉쇄 방법 - Google Patents

웜 봉쇄 방법 Download PDF

Info

Publication number
KR20060092832A
KR20060092832A KR1020050066294A KR20050066294A KR20060092832A KR 20060092832 A KR20060092832 A KR 20060092832A KR 1020050066294 A KR1020050066294 A KR 1020050066294A KR 20050066294 A KR20050066294 A KR 20050066294A KR 20060092832 A KR20060092832 A KR 20060092832A
Authority
KR
South Korea
Prior art keywords
vulnerability
program
alert
dirty
data
Prior art date
Application number
KR1020050066294A
Other languages
English (en)
Other versions
KR101137128B1 (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/095,291 external-priority patent/US7634813B2/en
Priority claimed from US11/096,054 external-priority patent/US7603715B2/en
Priority claimed from US11/095,287 external-priority patent/US7634812B2/en
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060092832A publication Critical patent/KR20060092832A/ko
Application granted granted Critical
Publication of KR101137128B1 publication Critical patent/KR101137128B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1441Countermeasures against malicious traffic
    • H04L63/145Countermeasures against malicious traffic the attack involving the propagation of malware through the network, e.g. viruses, trojans or worms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Abstract

검출된 웜들에 관한 지식을 안전하게 공유하기 위한 토대로서 경보를 발생시키고 및/또는 송신하는 것을 포함할 수 있는 봉쇄 시스템이 개시되어 있다. 경보는 주어진 프로그램이 취약성을 갖고 있음을 증명하는 정보를 포함할 수 있다. 경보는 그것의 진정성(authenticity)이 컴퓨팅 시스템에 의해 독립적으로 검증될 수 있는 자기 인증(self-certifying)의 것일 수 있다.
컴퓨터 보안, 웜, 취약성(vulnerablity), 자기 인증 경보(self-certifying alert)

Description

웜 봉쇄 방법{CONTAINMENT OF WORMS}
도 1은 네트워크 시스템의 노드를 구현하기 위한 예시적인 컴퓨팅 시스템의 개략도.
도 2는 예시적인 컴퓨팅 네트워크의 개략도.
도 3은 예시적인 봉쇄 시스템의 데이터 흐름도(dataflow diagram).
도 4는 예시적인 메모리 위치 오염 데이터 스토어와 관련된 예시적인 페이지 오염 데이터 스토어의 테이블.
도 5는 다른 예시적인 페이지 오염 데이터 스토어의 테이블.
도 6은 웜 공격 및/또는 프로그램 취약성을 검출하는 예시적인 방법의 흐름도.
도 7은 예시적인 경보의 개략도.
도 8은 자기 인증 경보를 인증하는 예시적인 방법의 흐름도.
도 9는 예시적인 추상 머신(abstract machine)의 코드 리스팅.
도 10은 예시적인 안전 조건에 대한 조건 리스팅.
도 11은 취약성이 있는 명령들의 명령 리스팅.
도 12는 피어 투 피어 네트워크의 개략도.
도 13은 예시적인 피어 투 피어 네트워크 내의 검출 모듈들의 비율 (fraction)이 주어질 때 생존 노드들의 비율을 예시하는 그래프 예.
도 14는 예시적인 레지스터 오염 데이터 스토어의 테이블.
도 15는 취약성이 있는 명령들의 명령 리스팅.
도 16은 자기 인증 경보를 발생시키는 예시적인 방법의 흐름도.
도 17은 실행 가능한 버퍼 내로의 임의의 점프에 대한 취약성의 예시적인 소스 코드 리스팅.
도 18은 예시적인 오염 데이터 스토어의 테이블.
<도면의 주요 부분에 대한 부호의 간단한 설명>
330 : 경보
340 : 검출 모듈
350 : 경보 모듈
360 : 경보 검증 모듈
370 : 분배 모듈
380 : 응답 모듈
390 : 오염 데이터 스토어
본 발명은 일반적으로 컴퓨터 보안에 관한 것으로 보다 구체적으로는 네트워킹된 컴퓨터들의 시스템에서 웜들(worms)의 확산을 검출, 경보, 및/또는 저감시키 는 것에 관한 것이다.
다음은 독자에게 기본적인 이해를 제공하기 위하여 본 개시 내용의 간략화된 요약을 제시한다. 이 요약은 본 개시 내용의 광범위한 개요가 아니고 본 발명의 기본적인 또는 중요한 구성 요소들을 확인하거나 본 발명의 범위를 서술하는 것이 아니다. 이것의 유일한 목적은 뒤에 제시되는 보다 상세한 설명의 도입부로서 여기에 개시된 몇몇 개념들을 간략화된 형태로 제시하기 위함이다.
웜으로도 알려진 자기 전파 프로그램(self-propagating programs)은 인터넷에 접속된 컴퓨터들에 위협을 준다. 웜은 인기 있는 소프트웨어 패키지와 같은 프로그램들 내의 취약성을 부당 이용하여 감염된 머신에 대한 제어를 획득한다. 따라서, 이런 문제에 대한 한 가지 장기 해법은 취약성이 없는 소프트웨어를 작성하는 것이다. 그러나, 그때까지는 소프트웨어가 계속해서 취약성을 가질 것이고, 웜의 영향을 저감시키기 위해 웜 봉쇄 시스템이 전개(deploy)될 수 있다. 웜은 신속히 확산될 수 있으므로, 봉쇄 시스템은 신속히 및/또는 효율적으로 검출 및 응답하도록 자동화될 수 있고 또한 네트워크 내의 다른 컴퓨팅 시스템 노드에 경보를 분배할 수 있다.
봉쇄 시스템의 일 양태는 동적 흐름 분석(dynamic flow analysis)을 포함하는 다양한 기법들을 통하여 많은 부류의 공격들을 검출할 수 있는 검출 시스템을 포함할 수 있다. 봉쇄 시스템의 다른 양태는 검출된 웜에 관한 지식을 안전하게 공유하기 위한 토대로서 경보를 발생시키고 및/또는 송신하는 것을 포함할 수 있 다. 경보는 주어진 프로그램이 취약성을 갖고 있음을 증명하는 정보를 포함할 수 있다. 경보는 그 인증(authenticity)이 컴퓨팅 시스템에 의해 독립적으로 검증될 수 있는 자기 인증(self-certifying)일 수 있다. 봉쇄 시스템은 웜 발생 중에 활발한 공격 중일 때에도, 비감염된 노드들에 시기적절하게 경보를 전파하기 위한 탄력성이 있고/거나 자기 조직적인(self-organizing) 프로토콜을 포함할 수 있다. 봉쇄 시스템은 웜이 신속히 확산하여 소프트웨어 패키지들 내의 알려지지 않은 취약성들을 부당 이용하는 중에도, 다수의 상호 불신하는 컴퓨터들이 그 웜을 봉쇄하는 작업에서 공동 협력할 수 있게 하는 시스템 아키텍처를 포함할 수 있다. 봉쇄 시스템은 미래의 공격들로부터 컴퓨팅 장치를 보호할 수 있는 보호 시스템을 포함할 수 있다.
이하의 상세한 설명을 첨부 도면들과 관련하여 참조함으로써 많은 부수적인 특징들을 더 잘 이해하게 되면서 보다 쉽게 알 수 있을 것이다.
본 발명은 첨부 도면에 비추어 이하의 상세한 설명을 읽으면 더 잘 이해될 것이다.
첨부 도면 중의 유사한 부분들을 지시하기 위해 유사한 참조 번호가 사용된다.
예시적인 운영 환경
도 1 및 이하의 논의는 웜 봉쇄 시스템의 전부 또는 일부가 구현될 수 있는 적당한 컴퓨팅 환경에 대한 간략하고 개괄적인 설명을 제공하도록 의도되어 있다. 도 1의 운영 환경은 적당한 운영 환경의 일례일 뿐이고 운영 환경의 기능 또는 이용 범위에 대해 어떠한 제한도 제시하도록 의도되어 있지 않다. 여기에서 설명된 웜 봉쇄 시스템으로 사용하기에 적합할 수 있는 다른 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 구성들은 퍼스널 컴퓨터, 핸드헬드 또는 랩탑 디바이스, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 프로그램 가능한 소비자 전자 기기, 네트워크 퍼스널 컴퓨터, 서버 컴퓨터, 미니 컴퓨터, 메인프레임 컴퓨터, 상기 시스템들 또는 디바이스들 중 임의의 것을 포함하는 분산 컴퓨팅 환경 등을 포함하지만, 이들에 한정되지는 않는다.
필수적인 것은 아니지만, 웜 봉쇄 시스템은 하나 이상의 컴퓨터 또는 다른 디바이스들에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령들의 일반적인 문맥에서 설명될 것이다. 일반적으로, 프로그램 모듈들은, 특정 작업을 수행하거나 또는 특정 추상 데이터 타입들을 구현하는, 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 전형적으로, 프로그램 모듈들의 기능은 다양한 환경들에서의 요구에 따라서 조합되거나 분산될 수 있다. 분산 환경에서, 프로그램 모듈들은 메모리 기억 장치들을 포함하는 로컬 및 원격 컴퓨터 기억 매체 양쪽 모두에 배치될 수 있다.
도 1을 참조하면, 웜 봉쇄 시스템을 구현하기 위한 예시적인 시스템이 컴퓨팅 장치(100)와 같은 컴퓨팅 장치를 포함한다. 가장 기본적인 구성에서, 컴퓨팅 장치(100)는 전형적으로 적어도 하나의 프로세싱 유닛(102) 및 메모리(104)를 포함한다. 컴퓨팅 장치의 정확한 구성 및 타입에 따라서, 메모리(104)는 (RAM과 같은) 휘발성, (ROM, 플래시 메모리 등과 같은) 비휘발성 또는 그 둘의 어떤 조합일 수 있다. 이 가장 기본적인 구성은 도 1에서 점선(106) 에 의해 예시되어 있다. 게다가, 장치(100)는 부가적인 특징 및/또는 기능성을 가질 수 있다. 예를 들면, 장치(100)는 또한 자기 또는 광 디스크 또는 테이프를 포함하지만 그것에 한정되지 않는 부가적인 데이터 기억 장치(예컨대, 분리형 및/또는 비분리형)을 포함할 수 있다. 그러한 부가적인 기억 장치는 도 1에서 분리형 기억 장치(108) 및 비분리형 기억 장치(110)로 예시되어 있다. 컴퓨터 기억 매체는 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈, 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 포함할 수 있다. 메모리(104), 분리형 기억 장치(108) 및 비분리형 기억 장치(110)는 모두 컴퓨터 기억 매체의 예들이다. 컴퓨터 기억 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 비디오 디스크(DVD) 또는 다른 광학 기억 장치, 자기 카세트, 자기 테이프, 자기 디스크 기억 장치 또는 다른 자기 기억 장치, 또는 원하는 정보를 저장하기 위해 사용될 수 있고 장치(100)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들에 한정되는 것은 아니다. 임의의 그런 컴퓨터 기억 매체는 장치(100)의 일부일 수 있다.
장치(100)는 또한 장치(100)가 컴퓨팅 시스템 네트워크(211) 내의 다른 컴퓨팅 장치들(118)과 통신할 수 있게 하는 통신 접속부(들)(112)를 포함할 수 있다. 통신 접속부(들)(112)은 통신 매체의 일례이다. 통신 매체는 전형적으로 반송파나 다른 전송 메커니즘과 같은 변조된 데이터 신호 내에 컴퓨터 판독 가능 명령, 데이 터 구조, 프로그램 모듈, 또는 다른 데이터를 구현할 수 있고 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 신호 내에 정보를 인코딩하는 방식으로 하나 이상의 그것의 특징들이 설정 또는 변경되어 있는 신호를 의미한다. 한정이 아니라 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 접속과 같은 유선 매체, 및 음향, 무선 주파수(radio frequency), 적외선, 및 다른 무선 매체와 같은 무선 매체를 포함한다. 여기에서 사용된 컴퓨터 판독 가능 매체라는 용어는 기억 매체 및 통신 매체 양자 모두를 포함한다.
장치(100)는 또한 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 레이저 레인지 파인더(laser range finder), 적외선 카메라, 비디오 입력 장치, 및/또는 다른 입력 장치와 같은 입력 장치(들)(114)를 가질 수 있다. 디스플레이, 스피커, 프린터, 및/또는 다른 출력 장치와 같은 출력 장치(들)(116)도 포함될 수 있다.
다음 설명에서, 본 발명은 달리 지적하지 않는 한 하나 이상의 컴퓨팅 장치들에 의해 수행되는 연산들의 기호적 표현들 및 행위들과 관련하여 설명된다. 그러므로, 때때로 컴퓨터 실행되는 것으로 불리는 그러한 행위들 및 연산들은 컴퓨팅 장치의 프로세싱 유닛이 구조화된 형태로 데이터를 표현하는 전기 신호들이 조작하는 것을 포함한다는 것을 이해할 것이다. 이 조작은 데이터를 변환하여 컴퓨팅 장치의 메모리 시스템 내의 위치들에 유지하여, 숙련된 당업자가 잘 이해하는 방식으로 장치의 동작을 재구성하거나 또는 변경한다. 다음 설명은 전술한 문맥에서 설명되지만, 한정하려는 의도는 아니다. 숙련된 당업자라면 알겠지만, 이하에서 설 명되는 다양한 행위들 및 연산들이 하드웨어로 구현될 수도 있다. 예를 들면, 숙련된 당업자에게 알려져 있는 종래의 기법들을 이용함으로써, 소프트웨어 명령들의 전부 또는 일부는 DSP, 프로그램 가능 논리 배열(PLA) 등과 같은 전용 회로에 의해 수행될 수도 있다.
데이터가 유지되는 데이터 구조는 데이터의 포맷에 의해 정의된 특정 속성들을 갖는 메모리의 물리적 위치들이다. 숙련된 당업자라면 프로그램 명령들을 저장하기 위해 이용되는 기억 장치들이 네트워크에 걸쳐서 분산될 수 있다는 것을 알 것이다. 예를 들면, 원격 컴퓨터가 소프트웨어로서 기술된 프로세스의 예를 저장할 수 있다. 로컬 또는 단말 컴퓨터가 원격 컴퓨터에 액세스하여 그 소프트웨어의 일부 또는 전부를 다운로드하여 프로그램을 실행할 수 있다. 대안적으로, 로컬 컴퓨터는 필요에 따라 소프트웨어의 단편들을 다운로드하거나, 또는 일부 소프트웨어 명령들은 로컬 단말기에서 실행하고 일부는 원격 컴퓨터(또는 컴퓨터 네트워크)에서 실행함으로써 분산 처리할 수 있다.
봉쇄 시스템이 이용될 수 있는 네트워크 환경의 예를 도 2를 참조하여 설명한다. 예시적인 네트워크는 구름으로 표현된 네트워크(211)를 통하여 서로 통신하는 수 개의 컴퓨터 또는 노드(210)를 포함한다. 네트워크(211)는 라우터, 게이트웨어, 허브 등과 같은 다수의 잘 알려진 컴포넌트들을 포함하여 노드들(210)이 유선 및/또는 무선 매체를 통하여 통신하게 할 수 있다. 네트워크(211)를 통하여 서로 상호 작용할 때, 하나 이상의 노드들은 다른 노드들에 대하여 클라이언트, 네트워크 서버, 또는 피어로서 기능할 수 있다. 따라서, 비록 본원에 포함된 특정 예 들은 이들 컴퓨터 타입들 모두를 참조하지는 않지만, 봉쇄 시스템의 다양한 예들은 클라이언트나, 네트워크 서버나, 피어나, 그 조합 상에서 실시될 수 있다.
웜 봉쇄
웜은 전형적으로 컴퓨터 시스템에 저장될 수 있는, 메시지와 같은, 수신 데이터를 통하여 컴퓨팅 시스템에 도입된다. 수신되어 저장된 데이터는 컴퓨팅 시스템의 저장 특징을 부당 이용하여 웜이 공격 및/또는 전파할 수 있게 하는 취약성을 생성할 수 있다. 예를 들면, 다수의 웜은 취약성이 있는 프로그램에 코드를 주입하여 프로그램에게 그 코드를 실행하도록 강제한다. 다른 웜들은 새로운 코드를 주입하지 않고 취약성이 있는 프로그램의 실행을 원격 제어함으로써 공격한다.
도 3을 참조하면, 웜 봉쇄 시스템(300)이 하나 이상의 검출 모듈(340), 경보 모듈(350), 경보 검증 모듈(360), 분배 모듈(370), 및 응답 모듈(380)을 포함할 수 있다. 검출 모듈(340)은 웜이 컴퓨터 시스템을 공격하는 것을 검출할 수 있다. 웜은 검출 전에 알려진 것이거나 또는 알려지지 않은 것일 수 있다. 임의의 웜 검출 시스템이 적절하게 사용될 수 있다는 것을 알 것이다. 웜 봉쇄 시스템(300)은 상이한 기법들을 이용하여 상이한 검출 모듈들(340)을 실행할 수 있고 각각의 검출 모듈(340)은 웜을 검출하기 위해 하나 이상의 기법들을 이용할 수 있다. 수신된 정보가 알려진 웜들을 포함하는 것을 식별하고; 수신된 정보를 저장된 정보와 비교하여 변경된 파일 및 불필요한 파일의 존재를 검출하고, 구성의 변경을 검출하고, 및/또는 리턴 어드레스와 같은 파라미터 값을 검증하고; 저장될 것으로 기대되는 정보를 실제로 저장된 정보와 비교하여 버퍼 겹쳐쓰기(buffer overwrites)를 검출 하고; 가드 저장 세그먼트(guard storage segment)로 버퍼 오버플로를 검출하고; 어레이 경계 체킹(array bounds checking)을 실시하여 버퍼 오버플로 및 언더플로를 직접 검출하고; 통신 패턴들 및/또는 프로그램의 런타임(run-time)을 모니터하여 기대되는 거동(behavior)으로부터의 편차를 검출하고; 문자열 및/또는 메시지 길이와 같은 알려진 웜 서명(worm signature)을 확인하기 위해 착신 데이터를 검사하고; 동적 데이터 흐름 분석을 행하는 등을 포함하는 적당한 검출 기법들의 조합이 이용될 수 있다. 동적 데이터 흐름 분석에 대해서는 아래에서 더 설명한다.
웜이 검출되면, 봉쇄 시스템은 조치를 취할 수 있다. 예를 들면, 경보 모듈(350)은 경보(330)를 발생시키고 그 경보를 하나 이상의 컴퓨팅 시스템에 송신하여 검출된 웜들에 관한 지식을 공유하게 한다. 경보 모듈은 자기 인증 경보를 발생시킬 수 있고, 이것은 하나 이상의 컴퓨팅 시스템에 송신될 수 있고, 주어진 프로그램이 취약성을 갖는다는 것을 입증하는 정보를 포함할 수 있다. 경보의 분배는 분배 모듈(370)에 의해 결정될 수 있고, 분배 모듈은 다수의 상호 불신하는 컴퓨터 시스템들이 웜을 봉쇄하는 데 공동 협력할 수 있게 할 수 있다. 수신된 자기 인증 경보는 그 자기 인증 경보를 수신하는 컴퓨터 시스템에 의해 독립적으로 검증될 수 있다. 자기 인증 경보의 검증은 수신 컴퓨팅 시스템(320)의 경보 검증 모듈(360)에 의해 수행될 수 있다.
웜을 검출하고 및/또는 경보를 수신하는 컴퓨팅 시스템은 응답 모듈(380)을 통하여 시스템을 정화(cleanse)하고 및/또는 보호하고, 웜의 해로운 영향을 저감시키고, 및/또는 웜의 전파를 방지하는 로컬 액션을 취할 수 있다. 응답 모듈(380) 에 의해 채용되는 정확한 보호 메커니즘은 노드마다 다를 수 있고 적절하게 구현될 수 있다. 예를 들면, 일부 노드들은 단순히 취약성이 있는 소프트웨어 패키지를 중단할 수 있고, 다른 노드들은 로컬 패칭 및/또는 필터링 절차(local patching and/or filtering procedure)를 채용할 수 있다.
동적 흐름 분석에 의한 검출
동적 데이터 흐름 분석은 다수의 상이한 웜들 또는 동일 웜의 변종들이 취약성을 부당 이용하여 타깃 프로그램에 대한 제어를 획득할 수 있는 방식을 검출할 수 있다. 따라서, 동적 데이터 흐름 분석은 웜 중심(worm-centric)이 아니라, 취약성 중심이다. 동적 데이터 흐름 분석은 취약성 또는 웜이 그 취약성을 부당 이용하기 위해 이용하는 특정 액션 세트를 포함하는 특정 명령 세트에 관한 선험적 지식을 필요로 하지 않기 때문에 미지의 웜들을 검출할 수 있다. 이런 식으로, 동적 데이터 흐름 분석은 미지의 웜들을 검출할 수 있다. 웜들에 의해 사용되는 많은 공격들은 취약성이 있는 프로그램에 코드를 주입하여 프로그램에게 그 코드를 실행하도록 강제하는 것을 포함한다. 다른 통상적인 공격 메커니즘은 새로운 코드를 주입하지 않고 취약성이 있는 프로그램의 실행을 원격 제어하는 것이다. 예를 들어, 만일 프로그램이 C 런타임을 이미 로딩하였다면, 웜은 취약성이 있는 프로그램에게 system() 함수를 호출하도록 강제한다. 동적 흐름 분석은 이들 2가지의 감염 방법들은 물론 다른 것들도 검출할 수 있다.
동적 흐름 분석은 입력 동작에서 수신된 데이터(예컨대, 네트워크 접속부로부터 수신된 데이터)를 추적한다. 동적 흐름 분석은 도 3을 참조하여 위에서 논의 된 검출 모듈(340)에 의해 실시될 수 있다. 보다 구체적으로, 검출 모듈(340)은 어떤 정보 저장 위치들, 예컨대, 외부 소스로부터 수신된 정보를 저장하는 저장 위치들 및/또는 외부 소스로부터의 정보로부터 파생된 정보를 저장하는 저장 위치들을 '불결한'(dirty) 것으로 식별할 수 있다. 검출 모듈은 불결한 위치들에 저장된 데이터의 실행을 선택적으로 저지하고 및/또는 그 데이터를 명령 포인터에 로딩하는 것을 선택적으로 저지할 수 있다. 이런 식으로, 불결한 데이터의 실행 및/또는 불결한 데이터를 명령 포인터에 로딩하는 것을 저지함으로써 원격으로 로딩된 코드의 실행 및 그 실행의 원격 제어를 방지하거나 감소시킬 수 있다. 명령 포인터 또는 프로그램 카운터는 프로그램 시퀀스에서 다음에 실행될 명령의 어드레스 또는 위치를 담고 있는 레지스터이다.
저장된 데이터가 불결한지 청결한지를 추적하는 동작 흐름 분석은 임의의 적당한 방식으로 수행될 수 있다. 예를 들면, 외부 소스로부터의 정보를 저장하는 명령들은 어느 메모리 위치 및/또는 CPU 레지스터들이 입력 동작으로부터 수신된 불결한 데이터 및/또는 입력 동작으로부터 수신된 데이터로부터 파생된 불결한 데이터를 담고 있는지를 계속 알고 있도록 설치될 수 있다. 설치된 명령들의 선택은 로드 및/또는 저장 연산과 같은, 데이터를 판독 및/또는 기입하는 임의의 적당한 명령들(예컨대, x86 CPU들에서의 MOV, MOVS, PUSH, POP), 산술 논리 연산 명령들(예컨대, x86 CPU들에서의 ADD, MUL, XOR, AND)을 포함할 수 있다. 모든 제어 이전 명령들(예컨대, x86 CPU들에서의 RET, CALL, JMP), 또는 적절하다고 생각되는 서브세트는 또한 명령 포인터에 로딩된 데이터에 대한 체크를 실시하도록 설치될 수 있 다.
불결한 메모리 위치들은 임의의 적당한 방식으로 추적될 수 있다. 예를 들면, 불결한 저장 위치들은 불결 지시자(dirty indicator)를 컴퓨팅 장치의 메모리의 부분 내의 그 저장 위치와 관련시키는 오염 데이터 스토어(contamination data store)에서 추적될 수 있다. 메모리의 그 부분은 메모리 위치, 레지스터, 오프셋의 표시 등일 수 있다.
불결 지시자는 관련 메모리 위치에 저장된 정보가 신뢰할 수 없는 외부 소스(un-trusted outside source)로부터의 것임을 나타내는 임의의 적당한 지시자일 수 있고, 그것은 일부 예들에서 정보를 송신하는 모든 다른 노드들을 신뢰할 수 없는 것으로 간주할 수 있다. 예를 들면, 불결 지시자는, 1은 관련 데이터가 불결함을 나타내고 0은 관련 데이터가 청결함을 나타내는 것과 같이, 2진수일 수 있다. 다른 예에서, 불결 지시자는 불결한 정보의 메시지 및/또는 소스를 나타내는, 정수 또는 영숫자 문자열과 같은 메시지 식별자일 수 있다. 이런 식으로, 불결 지시자는 데이터가 불결하다면 고유 메시지 지시자가 되고 데이터가 '청결'하다면 널 또는 '0'과 같은 디폴트 값이 될 수 있다. 다른 예에서, 불결 지시자는 메시지 및 그 메시지 내의 오프셋을 모두 지시하는 지시자일 수 있다. 다른 예에서, 불결 지시자는 불결한 정보의 메시지/소스 내의 값들로부터 불결한 메모리 부분에 있는 값을 계산하기 위해 사용된 명령들의 시퀀스의 전체 시퀀스 또는 관련 부분을 포함하는 데이터 흐름 그래프의 식별자일 수 있다.
불결한 또는 청결한 관련 메모리 부분의 위치는, 관련 불결 지시자에 의해 표시될 때, 임의의 적당한 방식으로 표시될 수 있다. 일례에서, 불결 지시자는 메모리 내의 특정 위치를 표시하는 메모리 위치 지시자와 관련될 수 있다. 다른 예에서, 불결 지시자들의 벡터 내의 불결 지시자의 배치는 메모리 위치를 나타낼 수 있다. 예를 들면, 불결 지시자들의 벡터 또는 어레이 내의 제1 불결 지시자는 (스택의 상단과 같은) 제1 메모리 위치를 나타낼 수 있고, 제2 불결 지시자는 (스택의 상단으로부터 아래로 두 번째 위치와 같은) 제2 메모리 위치를 나타낼 수 있다.
일례에서, 각각의 메모리 위치는 오염 데이터 스토어 내의 불결 지시자로 추적될 수 있다. 예시적인 오염 데이터 스토어(390)가 도 3에 도시되어 있다. 예컨대, 메모리 페이지, 메모리 페이지 내의 개개의 메모리 위치, CPU 레지스터 등과 같은, 컴퓨팅 장치 내의 메모리의 임의의 타입 또는 부분이 추적될 수 있다.
메모리의 각각의 페이지는 메모리의 각각의 페이지를 페이지 불결 지시자와 관련시킴으로써 추적될 수 있다. 메모리의 페이지는 4 KB 메모리 세그먼트와 같은 임의의 메모리 세그먼트일 수 있다. 페이지 불결 지시자는 메모리 페이지 내의 적어도 하나의 위치가 불결한지 여부를 나타낼 수 있다. 만일 페이지 불결 지시자가 페이지 내의 적어도 하나의 불결한 메모리 위치를 나타낸다면, 불결한 페이지 내의 각각의 메모리 위치는 메모리 위치 불결 지시자와 관련될 수 있다. 메모리 위치 불결 지시자는 관련 메모리 위치(벡터 내의 위치에 의해 표시되거나, 또는 임의의 다른 적당한 방식으로 표시됨)가 청결한지 불결한지 여부를 해당 메모리 위치에 포함된 정보에 따라서 표시할 수 있다. 이런 식으로, 각각의 메모리 페이지는 페이지 불결 지시자와 관련될 수 있고, 불결 정보를 포함하는 페이지들만이 불결한 정 보의 메모리 위치 추적에 의해 메모리 위치로 더 분리될 수 있다.
도 4는 검출 모듈이 어느 메모리 위치들이 불결한지를(예컨대, 입력 동작들로부터 수신된 데이터를 포함하는지를) 계속 알고 있게 하는 예시적인 데이터 구조들(410, 420)을 예시한다. 페이지 오염 데이터 스토어(410)는 관련 메모리 페이지가 청결한지 불결한지를 나타내는 페이지 불결 지시자들의 벡터를 포함할 수 있다. 예를 들면, 도 4에 도시된 바와 같이, 제1 메모리 페이지는 페이지 불결 지시자 값(412)이 표시하는 바와 같이 청결할 수 있고, 제2 메모리 페이지는 페이지 불결 지시자 값(414)이 표시하는 바와 같이 불결할 수 있다. 이런 식으로, 페이지 오염 데이터 스토어(410)는 만일 페이지 내의 임의의 위치가 불결하면 세트되는 4KB 메모리 페이지당 하나의 비트를 갖는 벡터 비트맵이다.
페이지 오염 데이터 스토어(410) 내에 표시된 모든 불결 페이지마다, 부가적인 메모리 위치 오염 데이터 스토어(420)가 도 4에 도시된 바와 같이 불결한 페이지를 표시하는 페이지 오염 데이터 스토어의 페이지 불결 지시자와 관련될 수 있다. 메모리 위치 오염 데이터 스토어(420)는 불결한 페이지 내의 관련 메모리 위치가 청결한지 불결한지를 나타내는 메모리 위치 불결 지시자들의 벡터를 포함할 수 있다. 예를 들면, 도 4에 도시된 바와 같이, 제2 페이지는 페이지 불결 지시자(414)의 값이 표시하는 바와 같이 불결한 데이터를 포함한다. 메모리 위치 오염 데이터 스토어(420)는 페이지 불결 지시자(414)와 관련될 수 있다. 메모리 위치 오염 데이터 스토어(420)는 그 특정 페이지에서 어느 메모리 위치들이 청결한지 및/또는 불결한지를 나타내는 메모리 위치 불결 지시자들(422, 424)의 벡터를 포함할 수 있다. 도 4에 도시된 예시적인 메모리 위치 오염 데이터 스토어에서, 제1 메모리 위치는 메모리 위치 불결 지시자 값(422)이 표시하는 바와 같이 청결할 수 있고, 제2 메모리 위치는 메모리 위치 불결 지시자 값(424)이 표시하는 바와 같이 불결할 수 있다. 이런 식으로, 메모리 위치 오염 데이터 스토어(420)는 관련 페이지 상의 관련 메모리 위치가 불결하면 세트되는 메모리 위치당 하나의 비트를 갖는 벡터 비트맵이다. 메모리 위치 오염 데이터 스토어는 예를 들면, 불결 지시자들을 페이지, 워드, 및/또는 바이트 세분성으로 유지함으로써, 임의의 적당한 세분성(granularity)으로 불결한 메모리 위치들을 추적할 수 있다. 유사하게, 또 다른 메모리 위치 오염 데이터 스토어들이 불결한 메모리 위치를 표시하는 메모리 위치 불결 지시자와 관련될 수 있다. 이 또 다른 메모리 위치 오염 데이터 스토어들은 보다 미세한 레벨의 세분성으로, 예를 들면, 각각의 정보 바이트마다 불결한 메모리 위치들을 표시할 수 있다.
도 4에 도시된 바와 같이, 페이지 불결 지시자는 페이지 오염 데이터 스토어(410)에 저장될 수 있고 메모리 위치 불결 지시자는 메모리 위치 오염 데이터 스토어(420)에 저장될 수 있다. 대안적으로, 메모리 부분 세분성의 각 레벨마다 개별적인 데이터 스토어보다는, 다음의 보다 미세한 세분성 레벨에 대한 불결 지시자들의 벡터를 포함하는 불결한 메모리 부분을 표시하는 불결 지시자를 갖는 단일 데이터 스토어가 이용될 수도 있다. 예를 들면, 페이지 불결 지시자는 어레이로서 오염 데이터 스토어에 저장될 수 있다. 청결한 페이지를 표시하는 페이지 불결 지시자는 0 또는 널 값과 같은 임의의 적당한 지시자일 수 있다. 불결한 값을 나타내 는 페이지 불결 지시자는 해당 페이지의 어느 메모리 위치들이 불결하고 청결한지를 나타내는 지시자 값들의 벡터를 포함하는 비트맵일 수 있다.
도 5에 도시된 예시적인 오염 데이터 스토어(510)에서는, 제1 메모리 페이지는 페이지 불결 지시자 값(512)이 표시하는 바와 같이 청결할 수 있고, 제2 메모리 페이지는 페이지 불결 지시자 값(514)이 표시하는 바와 같이 불결할 수 있다. 페이지가 불결함을 나타내는 불결 페이지 지시자는 관련 메모리 위치가 청결한지 불결한지를 나타내는 메모리 위치 불결 지시자들의 벡터를 포함할 수 있다. 이런 식으로, 오염 데이터 스토어(510)는 페이지가 청결하면 메모리 페이지당 1 비트를 갖는 어레이 비트맵이고 페이지가 불결하면 메모리 위치 불결 지시자들의 벡터이다. 예를 들면, 도 5에 도시된 바와 같이, 제2 페이지는 페이지 불결 지시자(514)의 값이 표시하는 바와 같이 불결 데이터를 포함한다. 페이지 불결 지시자(514)의 값은 해당 페이지 내의 어느 메모리 위치들이 불결한지 청결한지를 나타낼 수 있다. 예를 들면, 도 5에 도시된 바와 같이, 메모리 위치 불결 지시자 값(542)은 페이지의 제1 메모리 위치가 청결함을 나타내고, 메모리 위치 불결 지시자(544)는 관련 메모리 위치가 불결함을 나타낸다.
동적 데이터 흐름 분석이 부가적으로 및/또는 대안적으로 CPU 레지스터들에 저장된 데이터가 청결한지/불결한지를 추적한다. 예를 들면, 메모리의 각각의 레지스터는 레지스터 오염 데이터 스토어 내의 레지스터 불결 지시자로 추적될 수 있다. 레지스터 불결 지시자는 저장된 정보의 소스에 따라서 관련 메모리 레지스터가 청결한지 불결한지를 나타낼 수 있다. 위에서 언급한 바와 같이, 추적은 또한 부가적으로 또는 대안적으로 예를 들면, 레지스터 내의 각각의 바이트마다 불결 지시자를 유지함으로써, 레지스터보다 작은 세분성으로 수행될 수 있다.
도 14는 검출 모듈이 어느 레지스터들이 불결한지를(예컨대, 입력 동작들로부터 수신된(또는 그로부터 파생된) 데이터를 담고 있는지를) 계속 알고 있게 하는 예시적인 데이터 스토어(1400)를 예시한다. 레지스터 오염 데이터 스토어(1400)는 레지스터 불결 지시자들의 벡터를 포함할 수 있다. 예를 들면, 도 14에 도시된 바와 같이, 제1 CPU 레지스터는 레지스터 불결 지시자 값(1422)이 표시하는 바와 같이 청결할 수 있고, 제2 CPU 레지스터는 레지스터 불결 지시자 값(1424)이 표시하는 바와 같이 불결할 수 있다. 이런 식으로, 레지스터 오염 데이터 스토어(1400)는 관련 페이지 상의 관련 CPU 레지스터가 불결하면 세트되는 CPU 레지스터당 하나의 비트를 갖는 벡터 비트맵이다.
메모리 페이지, 메모리 위치, 레지스터의 예들을 위에서 설명하였지만, 메모리의 임의의 타입, 부분, 및/또는 포맷이 상술한 바와 같은 동적 데이터 흐름 분석을 이용하여 추적될 수 있다는 것을 알아야 할 것이다.
위에서 언급한 바와 같이, 불결 지시자는 관련 메모리 부분이 청결한지/불결한지를 나타낼 뿐만 아니라, 그 메모리 부분에 저장된 정보의 소스 및/또는 파생 경로를 나타낼 수도 있다. 불결 메모리 부분에 저장된 정보의 소스, 계산, 또는 파생은, 선택적(optional) 오프셋 표시를 갖는 입력 메시지 식별자, 불결 메모리 위치의 값을 계산하기 위해 사용된 명령 시퀀스를 포함하는 데이터 흐름 그래프 등과 같은, 임의의 적당한 방식으로 표시될 수 있다. 불결 지시자는 또한 명령들에 서 조작된 값들의 원본 소스를 표시할 수도 있다.
도 18은 검출 모듈이 어느 메모리 위치들 및/또는 레지스터들이 불결한지(예컨대, 입력 동작들로부터 수신되거나 파생된 데이터를 담고 있는지)와 그 불결 데이터의 소스를 계속 알고 있게 하는 예시적인 데이터 스토어(1800)를 예시한다. 도 18에 도시된 바와 같이, 불결 지시자 값(1812)과 같은 불결 지시자는 널 값 등과 같은 임의의 적당한 방식으로 해당 위치 내의 관련 데이터가 청결함을 나타낼 수 있다. 불결 지시자 값(1814)은 관련 위치에 저장된 관련 데이터가 불결함을 나타낼 수 있고, 불결 정보의 소스를 나타낼 수도 있다. 예를 들면, 도 18에 도시된 바와 같이, 불결 지시자 값(1814)은 관련 메모리 위치에 저장된 데이터가 신뢰할 수 없는 소스로부터의 불결한 입력 데이터로부터 파생된 것임을 나타내고, 또한 관련 메모리 위치에 저장된 데이터가 불결한 입력 데이터로부터 어떻게 파생되는지를 나타내는 데이터 흐름 다이어그램을 포함할 수 있다. 데이터 흐름 그래프는 입력 값, 그 입력 데이터의 소스 메시지, 그 입력 데이터의 메시지 내의 오프셋, 현재 저장된 데이터를 파생시키기 위해 그 입력 데이터에 적용된 명령 등을 나타낼 수 있다. 도 18에 도시된 바와 같이, 불결 지시자 값(1814)은 데이터 흐름 그래프(1816)를 표시할 수 있다. 도 18의 데이터 흐름 그래프(1816)는 입력 데이터(1818)가 mess_1의 메시지 식별자를 갖는 메시지 내에 0의 오프셋을 갖는 것을 나타낸다. 이 데이터 흐름 그래프는 입력 데이터에 적용된 연산 및/또는 명령들을 나타낼 수 있다. 도 18에 도시된 바와 같이, 입력 값(1818) 및 2의 값으로 예시된 값(1824)을 이용하여 가산 연산(1820)이 실행된다. 그 가산 연산의 결과는 승산 연산자(1826)에 의해 값(1828)과 승산된다. 이런 식으로, 데이터 흐름 그래프는 관련 메모리 위치가 불결한 데이터, 예컨대, 입력 데이터(1818)로부터 어떻게 파생되는지를 예시한다.
도 4의 페이지 오염 데이터 스토어(410) 및 레지스터 오염 데이터 스토어(420), 도 5의 오염 데이터 스토어(510), 도 14의 레지스터 오염 데이터 스토어(1400), 및 도 18의 오염 데이터 스토어(1800)와 같은, 불결 지시자(들)를 저장하는, 오염 데이터 스토어(들)는 컴퓨팅 장치의 메모리 내의 임의의 하나 이상의 적당한 데이터 스토어들에 저장될 수 있다. 관계 데이터베이스, 객체 지향 데이터베이스, 비구조화 데이터베이스, 인메모리(in-memory) 데이터베이스, 순차적 메모리, 또는 다른 데이터 스토어를 포함하여, 임의의 적당한 포맷의 임의의 적당한 데이터 스토어가 오염 데이터 스토어 정보를 저장하고 및/또는 그 정보를 검출 모듈에 통신하기 위해 이용될 수 있다는 것을 알아야 할 것이다. ASCII 텍스트, 이진 파일, 통신 네트워크를 통하여 전송된 데이터, 또는 임의의 다른 파일 시스템과 같은 단층 파일 시스템(flat file system)을 이용하여 기억 장치 배열(storage array)이 구성될 수 있다. 전술한 데이터 스토어들의 이들 가능한 구현들에도 불구하고, 여기에서 사용된 데이터 스토어(data store) 및 기억 장치 배열(storage array)이라는 용어는 컴퓨터에 의해 액세스될 수 있는 임의의 방식으로 수집되어 저장되는 임의의 데이터를 가리킨다.
레지스터, 페이지, 메모리 위치 등에 대한 불결 지시자들은 임의의 적당한 시간에 발생될 수 있다. 예를 들면, 입력 동작이 수행될 때마다(예컨대, 네트워크 접속부로부터의 데이터를 수신 및/또는 조작하는), 결과의 데이터가 기입되는 메모리 위치들 및/또는 레지스터들은 불결 지시자로 표시될 수 있다. 도 3을 참조하면, 검출 모듈(340)은 [MoveData 데스티네이션, 소스] 형태의 명령이 실행될 때마다 메모리의 관련 부분들에 대해 하나 이상의 불결 지시자들을 발생시킬 수 있다. 보다 구체적으로, 불결한 소스로부터의 데이터가 데스티네이션에 기입될 때마다, 데스티네이션 메모리 부분, 예컨대, 메모리 위치, 레지스터 등은 불결한 것으로 표시될 수 있고, 다른 경우에는,그 데스티네이션 메모리 부분은 청결한 것으로 표시될 수 있다. 명령 또는 시스템 호출이 신뢰할 수 없는 외부 소스로부터의 데이터를 데스티네이션에 기입할 때, 데스티네이션 메모리 부분은 불결한 것으로 표시될 수 있다. MoveData라는 명령은 임의의 특정 CPU에 존재하지 않는 일반화된 명령이고, 컴퓨터 장치의 메모리 내의 데이터를 조작할 수 있는 임의의 수 및/또는 조합의 명령들을 포함할 수 있다. 예를 들면, MoveData 명령은 피연산자가 레지스터 또는 메모리인 x86 MOV 명령, 데스티네이션이 ESP 레지스터에 의해 지시되는 메모리 위치이고 다른 레지스터가 피연산자인 PUSH 연산을 포함할 수 있다. 다른 예들은 MOV, MOVS, PUSH, POP 등과 같은 로드 및 저장 연산들을 포함할 수 있다. 다른 예들은 ADD, MUL, AND, XOR 등과 같은 산술 및 논리 연산 명령들을 포함할 수 있다. 산술 또는 논리 연산 명령이 실행되기 때문에 메모리 위치가 불결해질 때마다, 불결 지시자는 그 메모리 위치가 불결해지게 한 명령들의 전체 또는 부분 시퀀스를 포함할 수 있다. 상기 예들은 x86 CPU에 특정한 것이지만, 숙련된 당업자라면 다른 컴퓨팅 장치들에 의해 수행되는 다른 연산들 및/또는 명령들도 적당할 수 있다는 것을 알 것이다.
동작 데이터 흐름 분석을 이용하여 웜의 존재를 검출하기 위하여, 데이터를 실행하고 및/또는 명령 포인터에 로딩하기 전에 그 데이터를 검사할 수 있다. 이런 식으로, 동작 데이터 흐름 분석은 웜이 제어를 취하기 전에 실행을 가로챌 수 있다. 구체적으로, 실행 제어가 불법 위치로 방향 전환(redirect)될 때 검출이 일어날 수 있다. 예를 들면, 명령이 실행되기 전에, 적당한 오염 데이터 스토어를 검사하여 실행될 데이터를 저장하는 메모리 부분에 대한 관련 불결 지시자(들)가 청결한 것을 보증할 수 있다. 만일 불결 지시자가 데이터를 저장하는 메모리 위치가 불결함을 표시하면, 명령의 실행이 중지되고, 웜의 존재가 검출될 수 있다. 유사하게, 메모리의 부분으로부터 명령 포인터로 데이터가 로딩되기 때문에, 데이터의 해당 메모리 부분에 대한 관련 오염 데이터 스토어를 검사할 수 있다. 만일 관련 메모리 부분에 대한 불결 지시자가 그 데이터가 신뢰할 수 없는 소스로부터 왔거나 그로부터 파생되었음을 표시하면, 포인터 값은 명령 포인터에 로딩되지 않고 웜의 존재가 검출될 수 있다. 이 마지막 테스트가 발생시킬 수 있는 임의의 잘못된 긍정들(false positives)을 저감시키기 위하여, 검출 모듈은 명령 포인터에 막 로딩될 값에 대하여 아무런 범위 비교(예를 들면 값이 주어진 상수보다 작은지를 체크하는 것) 또는 논리 연산(예를 들면 주어진 비트 패턴과의 AND 연산)도 계산되지 않았음을 더 검증할 수 있다. 검출 모듈은 또한 후술되는 취약성 검증 절차를 이용하여 잘못된 긍정 없이 웜의 존재가 정확히 검출되도록 보증할 수 있다.
대부분의 현재 이용 가능한 도구들이 알려진 타깃을 보호하기 위해 설계된 반면 동작 데이터 흐름 분석은 알려지지 않은 공격 타깃들에 대하여 보호할 수 있으므로, 동적 데이터 흐름 분석은 매우 일반적이다. 상술한 바와 같이 동적 데이터 흐름 분석을 구현하는 검출 모듈은 임의의 특정 데이터 구조의 겹쳐쓰기를 검출하는 것에 의지하지 않고, 그보다는 실행되거나 또는 명령 포인터에 로딩되는 데이터의 소스를 추적할 수 있다. 이를테면, 몇몇 도구들은 스택을 보호하도록 설계되어 있지만, 공격자가 그러한 타입의 보호를 우회하기 위하여 함수 포인터 또는 setjmp 버퍼를 타깃으로 정하는 쪽을 선택할 수 있다. 어느 경우든, 공격자는 실행 중인 프로그램에 어떤 데이터를 입력해야 할 것이고, 이는 동적 데이터 흐름 분석이 그 공격을 검출할 수 있음을 의미한다. 사실상, 동적 데이터 흐름 분석은 공격 타깃을 식별하기 매우 어려운 경우에 문제를 검출할 수 있다.
예를 들면, 도 17에 예시된 소스 코드 리스팅(1700)과 같은 프로그램은 네트워크 접속부로부터 데이터를 로딩하여, 그 데이터를 제2 버퍼에 복사할 수 있다. 프로그램은 실행을 허용한 다음 버퍼로 점프하도록 버퍼를 포함하는 페이지에 대한 페이지 보호 사용 권한(page protection permissions)을 변경할 수 있다. 이 문제는 스택 또는 임의의 다른 프로그램 데이터 구조를 보호하는 도구들에 의해 검출되지 않을 것인데, 왜냐하면 프로그램의 스택에 대해 아무런 손상도 이루어지지 않고 버퍼 오버런(buffer overruns)이 없기 때문이다. 이 문제는 또한 페이지들에 대한 실행 사용 권한(execute permissions)을 실시하는 CPU에서 프로그램이 실행된다면 검출되지 않을 것인데, 왜냐하면 프로그램은 페이지 사용 권한을 명백히 변경하기 때문이다. 그러나, 상술한 것과 같은 동적 데이터 흐름 분석은 문제를 검출할 수 있는데, 왜냐하면 버퍼 내의 데이터는 원래 네트워크 접속부 상의 입력 동작을 통하여 프로그램의 어드레스 공간에 들어갔기 때문이다. 이 예는 약간 고안되어 있지만, 그것은 프로그램들이 포함할 수 있는 임의의 에러의 종류를 보여준다.
일부 경우에, 검출 모듈에 의해 구현된 동적 흐름 분석은, 대부분의 보호 도구들이 소스 코드에의 액세스를 필요로 하는 데 반하여, 소스 코드에의 액세스를 필요로 하지 않을 수 있다는 것을 알아야 할 것이다. 이 검출 메커니즘은 몇몇 다른 방법으로 구현될 수 있다. 그것은 페이지 사용 권한을 사용하여 메모리 액세스를 추적함으로써, 또는 이진 설계(binary instrumentation) 기법을 사용함으로써, 또는 운영 체제 디버깅 인터페이스를 이용하여 프로그램의 실행을 제어함으로써 구현될 수 있다. 게다가, 일부 경우에, 실행 환경이 모든 실행 명령들에 대한 제어를 계속 유지할 수 있는 한, 상술한 것과 같은 동적 데이터 흐름 분석은 자기 변경 코드(self-modifying code) 및 동적으로 생성된 코드(예컨대, JIT(just-in-time) 컴파일 환경에서 생성된 코드 등)에서도 보안 문제를 검출할 수 있다. 만일 프로그램들이 번역(interpretation) 환경에서 실행된다면, 모든 명령에 대해 제어를 유지하는 것은 사소한 것이지만, 자기 변경 코드를 지원하는 이진 재기록기(binary re-writers)도 존재한다.
동적 흐름 분석은 시스템의 알려진 취약성들, 및/또는 웜을 포함하는 메시지의 규정 특성에 의존하지 않으므로, 상술한 동적 흐름 분석은 알려진 및/또는 알려지지 않은 웜들을 검출할 수 있다. 게다가, 동적 흐름 분석을 구현하는 검출 모듈은 저속 웜들(slow-speed worms) 및/또는 정상적인 트래픽으로 가장된 웜들을 검출 할 수 있다. 웜들이 정상적인 애플리케이션 트래픽 상에서만 자신을 피기백(piggyback) 수송한다 하더라도, 동적 흐름 분석을 이용한 검출 모듈은 그 웜을 검출할 수 있다. 게다가, 동적 흐름 분석을 구현하는 검출 모듈은 다형(polymorphic) 및/또는 변형(metamorphic) 웜들을 검출할 수 있다. 암호화를 포함한 일반적인 혼란화 기법들(obfuscation techniques)을 이용하는 웜 돌연변이 엔진들(worm mutation engines)이 널리 이용될 수 있다. 따라서, 미래의 웜들은 이들 도구들을 광범하게 이용할 수 있어, 동적 흐름 분석이 없이는 검출의 어려움이 증가할 수 있다.
동적 데이터 흐름 분석을 구현하는 검출 모듈은 시스템 호출 파라미터들을 겹쳐쓰기함으로써 타깃 프로그램에 대한 제어를 획득하는 웜들을 검출하도록 확장될 수 있다. 그런 웜들은, 이를테면, 프로세스를 생성하고 다른 웜 인스턴스들로부터의 커맨드들을 수령하는 프로그램을 시작(launch)하는 시스템 호출의 파라미터들을 겹쳐쓰기할 수 있다. 검출 모듈은 시스템 호출들이 불결한 인수들(dirty arguments), 예컨대, 불결한 메모리 위치들에 저장된 인수들을 이용하는 것과, 그 인수들이 시스템에 의해 체크되지 않았다는 것, 즉 그 불결한 인수들에 대해 계산된 논리 연산들(예컨대, 특정 값들 또는 값 범위들과의 비교)이 그것들을 안전한 값들로 제한하기에 충분하지 않다는 것을 체크함으로써 그런 공격들을 검출할 수 있다. 예를 들면, 검출 모듈은 웜이 타깃 프로그램에게 타깃 시스템에 저장된 임의의 프로그램을 시작하도록 강제할 수 있다고 결정할 수 있다.
검출 모듈은 2 이상의 검출 메커니즘을 구현할 수 있고 네트워크 내의 하나 이상의 상이한 노드들의 각각의 검출 모듈은 상이한 검출 기법을 구현할 수 있다. 예를 들면, 검출 모듈은 하나 이상의 다른 검출 메커니즘과 함께 상술한 데이터 흐름 분석 검출 메커니즘을 구현할 수 있다. 또한 각각의 검출 메커니즘의 다수의 구현들이 있을 수 있다. 이런 식으로, 검출 메커니즘들의 타입 및 구현 양쪽 모두의 다양성이 성취될 수 있다. 예시적인 부가 및/또는 대안 검출 메커니즘들은 동적 데이터 흐름 분석보다 덜 일반적이면서도 상당한 공격들을 검출할 수 있는 검출 메커니즘들을 포함할 수 있다.
한 가지 그런 단순한 기법은 모든 RET 명령마다 실행 가능한 페이지에 제어를 이전하는 것을 검출하는 것이다. 이 검출 메커니즘은 효과적일 수 있는데, 왜냐하면 많은 웜들이 스택을 겹쳐쓰기하고 그 스택을 겹쳐쓰기한 데이터에 점프하는 단순한 기법을 이용하고, 그 스택은 대개 실행 사용 권한을 갖는 메모리의 영역에 있지 않기 때문이다. 이 기법은 이진 재개록(binary re-writing)을 이용하여, 실행 가능한 타깃에 대한 모든 RET 명령을 설치함으로써 구현될 수 있다.
다른 예시적인 부가 및/또는 대안 검출 메커니즘은 모든 CALL 및/또는 RET 명령을 설치함으로써 섀도우 스택(shadow stack)을 유지할 수 있다. 섀도우 스택은 기본적으로 정상 스택의 복사본이지만 상이한 메모리 위치에 유지되므로, 모든 RET에서 스택의 무결성이 체크될 수 있다.
수신된 정보가 알려진 웜들을 포함하는 것을 식별하고; 수신된 정보를 저장된 정보와 비교하여 변경된 파일 및 불필요한 파일의 존재를 검출하고, 구성의 변경을 검출하고, 및/또는 리턴 어드레스와 같은 파라미터 값을 검증하고; 저장될 것 으로 기대되는 정보를 실제로 저장된 정보와 비교하여 버퍼 겹쳐쓰기(buffer overwrites)를 검출하고; 가드 저장 세그먼트(guard storage segment)로 버퍼 오버플로를 검출하고; 어레이 경계 체킹(array bounds checking)을 실시하여 버퍼 오버플로 및 언더플로를 직접 검출하고; 통신 패턴들 및/또는 프로그램의 런타임(run-time)을 모니터하여 기대되는 거동(behavior)으로부터의 편차를 검출하고; 문자열 및/또는 메시지 길이와 같은 알려진 웜 서명(worm signature)을 확인하기 위해 착신 데이터를 검사하고; 동적 데이터 흐름 분석을 행하는 등을 포함하는, 웜, 바이러스 등의 존재 및 위험을 검출하는 검출 모듈에 의해 다른 부가 및/또는 대안 검출 메커니즘들이 구현될 수 있다는 것을 알아야 할 것이다.
동작 시에, 도 3의 검출 모듈(340)과 같은 검출 모듈은 웜을 검출하는 방법을 구현할 수 있다. 도 6은 웜을 검출하는 예시적인 방법(600)을 예시한다. 도 1을 참조하여 설명한 컴퓨터 장치 등에 의해 데이터를 조작하는 명령이 수신될 수 있다(602). 위에서 언급한 바와 같이, 데이터를 조작하는 명령은 데이터를 이동시키고(move), 결합하고(combine), 전송하고(transfer), 로딩하는 등의 임의의 명령일 수 있다. 데이터는 컴퓨팅 장치의 적당한 로컬 애플리케이션, 운영 체제 등에 의해 지시된 대로 조작될 수 있다(604). 데이터의 조작은 데이터의 적어도 일부, 또는 데이터의 조작된 부분(예컨대, 데이터의 파생물)을 메모리 위치 및/또는 레지스터에 저장하는 것(606)을 포함할 수 있다. 메모리는 스택, 버퍼의 일부, 또는 컴퓨팅 장치의 메모리의 임의의 다른 부분일 수 있다. 저장된 데이터의 위치는 임의의 적당한 방식으로 결정될 수 있다(608). 정보를 저장한 메모리 부분이 '불결' 한지 '청결'한지를 판정하기 위해 데이터의 소스를 검사할 수 있다(610). 저장된 정보가 신뢰할 수 없는 소스로부터 파생된 경우 메모리 부분은 불결하다. 마찬가지로, 데이터가 신뢰할 수 있는 소스로부터 온 것이고 및/또는 다른 청결한 데이터로부터 파생된 것이면 데이터는 청결한 것으로 생각될 수 있다.
만일 데이터가 청결하다면, 그 데이터가 청결함을 표시하기 위해 불결 지시자 값이 세트된다(612). 위에서 언급한 바와 같이, 청결한 데이터를 표시하는 불결 지시자는 '0'의 값, 널 값 등을 포함한 임의의 적당한 지시자일 수 있다.
결정된 불결 지시자 값은 도 3의 오염 데이터 스토어(390)에 그 불결 지시자 값을 저장하는 것 등에 의해 저장된 데이터의 메모리 부분과 관련될 수 있다(614). 오염 데이터 스토어는 디폴트 불결 지시자 값으로 초기화되고 및/또는 채워질 수 있다. 보다 구체적으로, 모든 메모리 부분들이 처음에 고려될 수 있고 및/또는 청결한 데이터가 명확하게 결정되고 관련 메모리 부분에 저장되면 일부러 청결로 변경되지 않는 한 불결한 메모리 부분들을 표시하는 불결 지시자와 관련될 수 있다. 다른 예에서는, 모든 메모리 부분들이 처음에 고려될 수 있고 및/또는 불결한 데이터가 명확하게 결정되고 관련 메모리 부분에 저장되면 일부러 불결로 변경되지 않는 한 청결함을 표시하는 불결 지시자와 관련될 수 있다. 오염 데이터 스토어는 적당한 값으로 초기화될 수 있다는 것을 알아야 할 것이다. 더욱이, 위에서 언급한 바와 같이, 오염 데이터 스토어는 각각의 메모리 레지스터, 메모리 페이지, 메모리 위치 등과 관련된 하나 이상의 불결 지시자들을 갖는 하나 이상의 데이터 스토어를 포함할 수 있다.
만일 데이터가 불결하다면, 결정된 위치의 데이터가 불결함을 표시하기 위해 불결 지시자 값이 세트될 수 있다(612). 위에서 언급한 바와 같이, 불결한 데이터를 표시하는 불결 지시자는 '1'의 값 또는 고유 원본 식별자(unique origin identifier), 예컨대, 데이터의 소스와 관련된 메시지 식별자, 저장되는 현재 데이터에 입력을 제공하는 데이터에 대한 메모리 위치, 메시지 내의 오프셋과 결합된 메시지 식별자, 저장된 데이터를 계산하는 데 사용된 명령들의 전부 또는 일부를 포함하는 데이트 흐름 그래프 등을 포함하는, 임의의 적당한 지시자일 수 있다. 만일 저장된 데이터가 다른 불결한 메모리 위치에 저장된 다른 '부모' 데이터로부터 파생된 것이라면, '부모' 데이터와 동일한 원본 지시자, 부모 데이터의 메모리 위치, 수신된 명령과 그 명령의 피연산자들의 데이터 흐름 그래프를 조합하여 생성된 데이터 흐름 그래프 등이다. 결정된 불결 지시자 값은 적당한 오염 데이터 스토어에 그 불결 지시자를 저장하는 것 등에 의해 저장된 데이터의 메모리 부분(예컨대, 위치 또는 레지스터)과 관련될 수 있다(614). 예를 들면, 메모리 위치가 불결한 것으로 결정되면, 메모리 위치 불결 지시자가 불결한 데이터를 표시하기 위해 세트될 수 있고, 및/또는 페이지 불결 지시자가 메모리의 불결한 페이지를 표시하기 위해 세트될 수 있다.
일부 경우에, 시스템 호출 인수를 부당 이용하는 웜의 존재를 검출하기 위해, 방법은 불결한 메모리 부분들이 언제 시스템 호출에의 인수로서 사용되는지를 결정할 수 있다. 보다 구체적으로, 시스템 호출을 수행하는 명령이 수신될 수 있다(616). 시스템 호출의 인수로서 전달될 데이터의 메모리 부분이 결정될 수 있다 (618). 결정된 메모리 부분(들)과 관련된 불결 지시자가 검사될 수 있다(620). 예를 들면, 위에서 언급한 바와 같이, 저장된 정보가 청결한지 불결한지를 나타내기 위해 불결 지시자가 각각의 메모리 부분과 관련될 수 있다. 만일 불결 지시자가 로딩될 데이터가 '청결'함을 나타낸다면, 일부 경우에, 수신된 명령이 실행될 수 있다(636). 예컨대, 정보가 로딩될 수 있다. 일부 경우에, 다양한 검출 메커니즘들을 포함시키기 위해, 명령 및/또는 데이터를 다른 검출 기법들을 이용하여 더 검사하여 웜, 바이러스 등의 존재를 검출할 수 있다(634).
일부 경우에, 웜의 존재를 검출하기 위해, 방법은 웜의 존재를 표시하는 방식으로 불결한 메모리 위치에 저장된 데이터가 언제 조작되는지를 결정할 수 있다. 보다 구체적으로, 실행 흐름을 변경하는 명령이 수신될 수 있다(622). 명령 포인터에 로딩될 값을 저장하는 메모리 부분이 결정될 수 있다(624). 결정된 메모리 부분(들)과 관련된 불결 지시자가 검사될 수 있다(626). 만일 불결 지시자가 명령 포인터에 로딩될 값을 저장하는 메모리 부분이 불결함을 표시하면, 위에서 언급한 바와 같이 적절한 조치가 취해질 수 있다(627). 만일 불결 지시자가 명령 포인터에 로딩될 값을 저장하는 메모리 부분이 '청결'함을 표시하면, 일부 경우에, 수신된 명령이 실행되어(636), 값이 로딩될 수 있다. 일부 경우에, 로딩될 값의 메모리 부분이 청결한 것으로 표시되면, 로딩된 값이 나타내는 명령의 위치가 결정되고(628) 그 명령을 저장하는 메모리 부분이 청결한지 불결한지 판정하기 위해 검사될 수 있다(630). 만일 명령을 저장하는 위치가 불결하다면, 적절한 조치가 취해질 수 있다(626). 만일 그 위치가 청결하나 것으로 표시되면, 그 명령 및/또는 데이 터를 다른 검출 기법들을 이용하여 더 검사하여 웜, 바이러스 등의 존재를 검출할 수 있다(634). 만일 불결 지시자가 로딩될 값의 저장 위치들 및 그 값이 나타내는 명령이 청결함을 나타내면, 명령이 실행될 수 있다(636).
만일 불결 지시자가 조작될 데이터가 '불결'함을 나타내면, 적절한 조치가 취해질 수 있다(626). 위에서 언급한 바와 같이, 웜의 검출에 응답한 적절한 조치는 취약성이 있는 프로그램을 셧다운하고, 호스트 시스템을 셧다운하고, 경보 메시지를 생성하여 송신하고, 취약성에 대한 패치 및/또는 필터를 생성하는 등을 포함할 수 있다.
자기 인증 경보(" SCA ")
일부 경우에, 단일 노드가 자신을 보호하기 위한 검출 모듈을 포함할 수 있다. 그러나, 웜의 검출은 계산 집약적 프로세스(computationally intensive process)일 수 있다. 따라서, 일부 경우에, 도 2에 예시된 네트워크와 같은 네트워크의 하나 이상의 노드들이 웜, 취약성, 및/또는 공격을 검출할 수 있고, 네트워크 내의 하나 이상의 노드들에 경보할 수 있다. 만일 중앙 노드가 다수의 다른 노드들을 대신해서 웜을 검출하면, 검출 시스템은 서버 중심(server centric)일 수 있다. 이런 식으로, 웜을 검출하는 부하가 전용 시스템에 의해 수행될 수 있다. 대안적으로, 네트워크 내의 노드들의 전부 또는 서브세트가 취약성을 검출하는 책임이 있을 수 있고, 그 경우 검출 시스템은 호스트 중심(host-centric)일 수 있다. 취약성을 검출하는 네트워크 내의 노드들의 세트는 고정이거나 또는 시간에 따라서 변할 수 있고 언제라도 합류하고 탈퇴할 수 있다. 서버 및 호스트 중심 검출 시스 템들의 조합이 네트워크의 다양한 노드들 사이에서 다양한 검출 시스템을 구현하고 검출 결과를 서로에게 및/또는 네트워크 내의 다른 노드들에게 통신할 수 있다.
검출 메커니즘이 웜 공격을 검출할 때마다, 소프트웨어 프로그램의 취약성 및/또는 식별된 웜의 특징(예컨대, 메시지 소스 등)을 식별하는 경보가 발생될 수 있다. 예를 들면, 경보는 착신 데이터로서의 웜의 특징에 의하여(웜 중심) 및/또는 웜에 의해 부당 이용될 수 있는 소프트웨어 애플리케이션의 취약성에 의하여(취약성 중심) 웜을 식별할 수 있다. 경보의 발생은 자동이거나 수동일 수 있고, 검출된 취약성 및/또는 웜에 응답하는 것일 수 있다. 경보는 도 3에 도시된 바와 같이, 검출 모듈(340)로부터의 입력에 응답하여 경보 모듈(350) 등을 통하여 임의의 적당한 방식으로 발생될 수 있다.
일부 경우에, 경보는 수신 시스템이 경보 메시지의 발신 및/또는 내용의 진정성을 인증할 수 있도록 발생될 수 있다. 경보의 발신을 인증하기 위하여, 경보를 디지털로 서명하거나 또는 그러지 않고 경보가 신뢰할 수 있는 소스로부터 온 것을 식별할 수 있다. 경보에서 표시된 프로그램의 취약성을 인증하기 위해, 경보는 이벤트들의 리스트 및/또는 취약성을 어떻게 트리거하는지를 기술하는 프로그램 경로 등을 포함할 수 있다. 일례에서, 자기 인증 경보는 소프트웨어 취약성을 식별하고 및/또는 기술하는 머신 검증 가능한 증거(machine verifiable proof)를 포함할 수 있다. 이런 식으로, 자기 인증 경보는 수신자들이 감염 프로세스(infection process)를 재현(reproduce)함으로써 경보에서의 취약성 주장(vulnerability claim)의 진정성을 효율적으로 및/또는 효과적으로 체크할 수 있게 한다. 자기 인증 경보는 예컨대 문자 기술(textual description)과, 1996년 10월, 운영 체제 설계 및 구현에 관한 2차 심포지엄에서 Necula 등의 "Safe Kernel Extensions without Runtime Checking," 229-243페이지 - 이 내용은 참고로 본 명세서 중에 통합됨 - 에 의해 설명된 증거 운송 코드(proof carrying code)를 포함하여, 취약성을 예시하는 비결정적 이벤트들(non-deterministic events)의 완전 및/또는 부분 로그 등을 통하여 임의의 적당한 방법으로 소프트웨어 시스템의 취약성을 기술할 수 있다. 예를 들면, 비결정적 이벤트들의 로그는 수신된 데이터를 포함할 수 있고, 예컨대, 불결한 메모리 부분에 저장된 데이터의 실행 및/또는 불결한 메모리 부분으로부터의 데이터를 프로그램 카운터에 로딩하는 것과 같은 검출된 공격의 순간까지의 이벤트들을 예시할 수 있다.
소프트웨어 취약성의 기술(description)은 경보를 자기 인증하는 데 이용될 수 있다. 왜냐하면 수신 컴퓨팅 장치는 식별된 소프트웨어 애플리케이션이 웜 공격에 대한 취약성을 나타내는 지시된 방식으로 응답하는 것을 검증할 수 있기 때문이다. 이런 식으로, 경보는 경보에 포함된 정보 및 수신 노드가 알고 있는 정보에 기초하여(예컨대, 로컬 애플리케이션의 응답의 검증을 통하여) 인증될 수 있기 때문에 경보는 자기 인증될 수 있다. 이런 식으로, 자기 인증 경보는 웜 중심이라기보다는, 취약성 중심일 수 있다.
프로그램의 검출된 취약성은 비결정적 이벤트들의 리스트로서 자기 인증 경보에서 기술될 수 있다. 보다 구체적으로, 취약성이 있는 프로그램의 실행은 구분 결정적 프로세스(piece deterministic process)로서 모델링될 수 있다. 실행은 간 격들의 시퀀스(a sequence of intervals)이고, 각각의 간격은 비결정적 이벤트(예컨대, 메시지의 수신)에서 시작하고, 결정적 이벤트들의 시퀀스가 뒤를 따른다. 간격 내의 실행은 결정적이다. 예컨대, 프로그램의 응답은 전적으로 현재 상태에 의해 결정된다. 이런 식으로, 모든 비결정적 이벤트들을 기록함으로써 프로그램의 취약성을 예시할 수 있는 실행의 리플레이(replay)를 가능케 할 수 있다. 식별된 프로그램의 취약성이 있는 거동을 나타내는 실행을 리플레이함으로써 노드가 자기 인증 경보의 진정성을 체크하게 할 수 있다.
도 7은 취약성 중심인 예시적인 자기 인증 경보(700)를 예시한다. 자기 인증 경보는 임의의 적당한 포맷으로 및/또는 임의의 적당한 메시지 프로토콜에 따라서 구성될 수 있다. 자기 인증 경보는 프로그램 식별자(702) 및 이벤트 리스트(704)를 포함할 수 있고, 선택적으로 취약성 타입 식별자(706), 하나 이상의 검증 힌트(708), 및/또는 응답 지시자(710)를 포함할 수 있다.
프로그램 식별자(702)는 검출된 취약성을 갖는 프로그램 또는 애플리케이션을 식별할 수 있다. 프로그램 식별자(702)는 상업적 명칭, 소정의 명칭, 버전 번호, 제조 명칭 등과 같은 취약성이 있는 프로그램의 임의의 적당한 식별자 중 어느 하나 또는 그 이상을 포함할 수 있다.
이벤트 리스트(704)는 실행될 때 프로그램이 불허 상태(disallowed state)에 이르게 할 하나 이상의 비결정적 이벤트들의 시퀀스이다. 이 이벤트 리스트를 리플레이함으로써 프로그램의 검출된 취약성을 예시 및/또는 표시할 수 있다. 이벤트 리스트(702) 내의 이벤트들의 시퀀스는 임의의 적당한 방식으로 발생될 수 있 다. 비결정적 이벤트들에 로깅하는 기법들에 대해서는, 2002년 12월 매사추세츠주 보스턴, 운영 체제 설계 및 구현에 관한 Dunlap 등의 "Revirt: enabling intrusion analysis through virtual-machine logging and replay", 및 2002년 9월, ACM Computer Surveys, 제32권 제3호, Elnozahy 등의, "A survey of rollback-recovery protocols in message passing systems", 375-408페이지에 의해 설명된 장애 허용 오차(fault tolerance) 문헌에서 더 설명되어 있고, 이들 문헌은 본 명세서에 참고로 통합된다.
이벤트들의 시퀀스는 위에서 논의한 동적 흐름 검출 기법 동안에 로깅된 이벤트들과 같이, 검출 프로세스 동안에 로깅된 이벤트들을 포함하거나 또는 그들로부터 파생될 수 있다. 이벤트 리스트 내의 이벤트들의 시퀀스는 도 3의 검출 모듈(340)에 의해 로깅된 이벤트들과 같이, 공격 중에 실제로 로깅된 이벤트들과 일치할 수도 있고 또는 아닐 수도 있다. 자기 인증 경보를 준비하는 노드는 불허 상태에 이르는 데 불필요한 이벤트들을 제거하고 웜 코드의 부분들을 해가 없는 값들로 대체하는 등을 포함하여, 임의의 적당한 방식으로 로깅된 이벤트들을 변경할 수 있다. 이벤트 리스트(702) 내의 비결정적 이벤트들의 시퀀스는 임의의 적당한 포맷을 취할 수 있고 및/또는 임의의 적당한 명령 또는 다른 데이터를 포함할 수 있다. 예를 들면, 이벤트 리스트는 운영 체제 호출들로부터의 결과들의 리스트 및/또는 수신된 메시지들의 리스트를 포함할 수 있다. 웜들은 취약성이 있는 프로그램과의 긴 상호 작용을 필요로 하지 않는 취약성들을 부당 이용할 수 있으므로, 비결정적 이벤트들의 시퀀스는 매우 짧다. 보다 구체적으로, 취약성이 있는 거동은 소량의 데이터로 트리거될 수 있다. 예를 들면, 많은 이전의 웜들에 대해서, 단일 수신 이벤트가 충분할 수 있다.
동적 흐름 분석을 이용한 웜의 검출을 위하여, 검출 모듈(340)은 웜이 제어를 취하기 전에 실행을 가로챈다. 구체적으로, 웜 공격의 검출은 실행 제어가 불법 위치로 방향 전환되고 있을 때, 예컨대, 데이터가 막 실행되려고 하거나 또는 불결한 메모리 위치로부터 명령 포인트 내로 로딩되려고 할 때 일어날 수 있다. 경보 내의 이벤트 리스트의 사이즈를 제한하기 위하여, 검출이 사이에 일어나지 않았다면 실행되었거나 또는 프로그램 카운터 내로 로딩되었을 불결한 메모리 위치에 저장된 데이터를 포함하는 이벤트를 찾아 비결정적 이벤트들의 로그가 탐색될 수 있다. 많은 경우에, 취약성은 단일 이벤트에 의해 트리거될 수 있고 자기 인증 경보는 이 탐색의 결과인 이벤트만 포함할 수 있다. 일례에서, 전체 로그에 대하여 불결 데이터, 예컨대, 불법 어드레스에 대한 탐색이 수행될 수 있다. 다른 예에서는, 탐색을 피하고 잘못된 일치의 발생을 저감시키기 위하여 검출 모듈의 검출 메커니즘과 관련하여 상술한 데이터 흐름 분석이 이용될 수 있다. 동적 흐름 분석은 모든 입력 이벤트들로부터의 완전한 데이터 흐름 추적을 제공하므로, 막 실행되려고 했거나 프로그램 카운터 내로 로딩되려고 했던 불결한 데이터의 값을 결정하는 정확한 이벤트 또는 이벤트들이 결정될 수 있다. 예를 들면, 데이터 흐름 추적은 웜 공격에서 사용된 정보를 도입하는 외부 소스로부터의 특정 메시지, 취약성을 부당 이용할 수 있는 입력 이벤트(들), 및/또는 입력 데이터 내의 데이터 및/또는 명령의 오프셋을 식별할 수 있다.
입력 이벤트를 결정하기 위하여, 불결한 데이터의 현재 값을 결정하는 이력 이벤트를 표시하기 위해 불결한 메모리 부분에 저장된 데이터와 입력 이벤트 식별자가 관련될 수 있다. 입력 이벤트 식별자는 불결 지시자에 부가되거나 및/또는 그 불결 지시자에 포함될 수 있다. 입력 이벤트 식별자는 정수, 텍스트 문자열 등과 같이, 불결한 데이터의 소스 및/또는 불결한 메모리 부분으로부터의 데이터를 로딩하는 입력 이벤트를 식별하는 임의의 적당한 식별자일 수 있다. 일례에서, 불결 지시자는 불결한 데이터의 소스를 식별하는 입력 이벤트 식별자를 포함한다. 보다 구체적으로, 청결을 표시하는 불결 지시자는 널 또는 0과 같은 임의의 적당한 값일 수 있다. 그러나, 일부 경우에, '1'과 같은 정수가 불결한 메모리 부분을 표시하게 하기보다는, 불결한 메모리 부분을 표시하는 불결 지시자는 입력 이벤트 지시자 또는 다른 소스 지시자일 수 있다. 대안적으로, 불결 지시자는 불결한 메모리 부분에 저장된 현재 값을 결정하는 입력 이벤트들 또는 이들 이벤트들 내의 바이트 범위들을 결정하기 위해, 도 18에 도시된 것과 같은, 데이터 흐름 그래프를 포함할 수 있다. 데이터 흐름 분석이 취약성을 신호할 때, 막 실행되려고 하거나 프로그램 카운터에 로딩되려고 하는 불결한 데이터의 데이터 흐름 그래프 내의 식별자들을 갖는 이벤트들 및 실행 로그 내의 마지막 비결정적 이벤트가 경보 내의 이벤트 리스트를 형성하는 데 사용될 수 있다.
취약성이 있는 실행을 리플레이하는 데 필요한 비결정적 이벤트들의 시퀀스의 사이즈를 줄이는 것 외에 또는 그에 대한 대안으로서, 이벤트 로그의 추가물(suffix)이 점점 더 커지는 경보 이벤트 리스트 발생 중에 실행이 리플레이될 수 있고(예컨대, 로그를 통하여 거꾸로 이동) 에러 조건의 존재를 찾아 각각의 반복(iteration)이 체크될 수 있다. 이런 식으로, 이벤트들의 리스트는 취약성의 검출에 이르는 원래 이벤트들로부터 저감될 수 있다. 대부분의 현재 웜들에 대해서 이 전략은 효과적인데, 왜냐하면 네트워크 접속부를 통하여 수신된 최종 몇 개의 패킷들이 취약성을 트리거할 수 있기 때문이다.
취약성 타입 식별자(706)는 지시된 프로그램에 존재하고 부당 이용될 수 있는 에러 조건 또는 프로그램 취약성의 타입을 식별 및/또는 기술한다. 취약성 타입 식별자는 용인할 수 없는 에러 조건을 허용하는 지시된 프로그램의 미리 결정된 취약성을 나타내는, 영숫자 문자열 등과 같은 임의의 적당한 식별자일 수 있다. 에러 조건의 기술 및/또는 용인성은 경보의 발생기들 및 수신기들 사이에서 합의되고 미리 결정될 수 있다. 더욱이, 자기 인증 경보의 수신 노드들은 실행의 어떤 결과 또는 조건들이 취약성의 표현인지를 합의할 수 있다. 취약성의 타입에 대한 합의는 선험적인, 예컨대, 미리 결정되거나, 동적인, 예컨대, 웜 검출 및/또는 경보 수신 시에 결정되는 것일 수 있다. 취약성 타입 식별자에 의해 식별된 취약성 타입들은 프로그램 또는 애플리케이션의 임의의 적당한 취약성일 수 있다. 선험적인, 취약성의 표현으로서 합의될 수 있는 여러 상이한 타입의 조건들이 있을 수 있다. 취약성 타입의 일례는 임의 실행 제어("AEC" : arbitrary execution control)일 수 있다. ACE 경보들은 웜들이 프로그램의 어드레스 공간 내의 임의의 코드 단편들에 실행을 방향 전환하도록 허용하는 취약성들을 식별한다. 그것들은 취약성이 있는 프로그램에의 입력에서 그 어드레스가 공급되는 코드 단편을 어떻게 호출 (invoke)하는지를 기술한다. 취약성 타입의 다른 예는 임의 코드 실행(ACE : Arbitrary Code Execution)일 수 있다. ACE 경보들은 코드 주입(code-injection) 취약성들을 기술한다. 그것들은 취약성이 있는 프로그램에의 입력에서 공급되는 임의 코드 단편을 어떻게 실행하는지를 기술한다. 취약성 타입의 또 다른 예는 임의 함수 인수(AFA : Arbitrary Function Argument)일 수 있다. AFA 경보들은 웜들이 중요 함수들(critical functions)에의 인수들의 값을 변경하도록, 예를 들면, 프로세스들을 생성하는 시스템 호출의 호출(invocation) 시에 동작할 실행 파일의 명칭을 변경하도록 허용하는 데이터 주입 취약성들을 식별한다. 그것들은 취약성이 있는 프로그램에의 입력에서 공급되는 인수 값으로 특정 중요 함수를 어떻게 호출하는지를 기술한다.
검증 힌트(들)(708)는 이벤트들의 지시된 리스트를 리플레이한 후에 취약성의 지시된 조건이 참임을 체크하는 것을 용이하게 할 수 있는 임의의 적당한 정보를 포함할 수 있다.
응답 지시자(710)는 프로그램 취약성 대한 적절한 응답을 용이하게 할 수 있는 임의의 적당한 정보를 포함할 수 있다. 예를 들면, 응답 지시자는 패치가 취약성을 해결할 수 있다는 것과, 취약성의 잠재적 부당 이용을 검출하기 위한 필터가 발생될 수 있다는 것과, 식별된 웜을 포함하는 메시지의 수신을 검출하기 위한 필터, 패치/필터를 구현하는 실제 코드 등을 나타낼 수 있다.
일례에서, 취약성 중심 자기 인증 경보는 프로그램이 임의 실행 제어(AEC) 취약성을 갖고 있음을 표시할 수 있다. 웜 공격들은 취약성이 있는 프로그램의 실 행의 흐름을 임의로 변경하는 능력에 기초할 수 있으므로, 취약성은 AEC 취약성 타입 지시자로 표시될 수 있다. 프로그램에 메시지를 보냄으로써 프로그램 카운터를 임의 위치들로 방향 전환하는 능력을 제공하는 것은 드물고 위험하므로, 호스트들은 이 조건이 취약성을 표현하는 것으로 합의할 수 있다. 이런 타입의 취약성에 대하여, 검증 힌트는 프로그램 카운터(예를 들어, x86 CPU들 상의 EIP)에 임의 값이 로딩될 것임을 특정할 수 있고, 비결정적 이벤트들의 리스트 내의 어디에 프로그램 카운터 내에 로딩될 값이 있는지를 특정할 수 있다. 이를테면, 만일 비결정적 이벤트들의 리스트가 수신된 메시지들의 리스트이면, 검증 힌트는 어느 메시지에 및 어떤 오프셋에 프로그램 카운터에 로딩될 값이 있는지를 특정할 수 있다. 메시지 및 오프셋은 위에서 논의한 기법들을 이용하여 결정될 수 있다.
다른 예에서, 취약성 중심 자기 인증 경보는 프로그램이 임의 코드 실행(ACE) 취약성을 가짐을 나타낼 수 있다. 웜 공격들은 취약성이 있는 프로그램 내에 코드를 주입하는 능력에 기초할 수 있으므로, 취약성은 ACE 취약성 타입 지시자로 표시될 수 있다. 프로그램에 메시지를 보냄으로써 프로그램 내에 새로운 코드를 주입하는 능력을 제공하는 것은 드물고 위험하므로, 호스트들은 이 조건이 취약성을 표현하는 것으로 합의할 수 있다. 이런 타입의 취약성에 대하여, 검증 힌트는 새로운 코드가 주입되고 실행될 것임을 특정할 수 있고, 비결정적 이벤트들의 리스트 내의 어디에 실행될 코드가 있는지를 특정할 수 있다. 이를테면, 만일 비결정적 이벤트들의 리스트가 수신된 메시지들의 리스트이면, 검증 힌트는 어느 메시지에 및 어떤 오프셋에 주입되고 실행될 코드가 있는지를 특정할 수 있다. 메시 지 및 오프셋은 위에서 논의한 기법들을 이용하여 결정될 수 있다.
또 다른 예에서, 취약성 중심 자기 인증 경보는 프로그램이 임의 함수 인수(AFA) 취약성을 가짐을 나타낼 수 있다. 웜 공격들은 함수 인수로서 사용될 값을 주입하는 능력에 기초할 수 있으므로, 취약성은 AFA 취약성 타입 지시자로 표시될 수 있다. 프로그램에 메시지를 보냄으로써 프로그램에 의해 사용되는 시스템 호출들에 새로운 인수들을 주입하는 능력을 제공하는 것은 드물고 위험하므로, 호스트들은 이 조건이 취약성을 표현하는 것으로 합의할 수 있다. 이런 타입의 취약성에 대하여, 검증 힌트는 임의 함수 인수가 주입되고 실행될 것임을 특정할 수 있고, 비결정적 이벤트들의 리스트 내의 어디에 주입될 인수가 있는지를 특정할 수 있다. 이를테면, 만일 비결정적 이벤트들의 리스트가 수신된 메시지들의 리스트이면, 검증 힌트는 어느 메시지에 및 어떤 오프셋에 주입될 인수가 있는지를 특정할 수 있다. 메시지 및 오프셋은 위에서 논의한 기법들을 이용하여 결정될 수 있다.
자기 인증 경보의 대안적인 형태는 1996년 10월, 운영 체제 설계 및 구현에 관한 2차 심포지엄에서의 Necula 등의 "Safe Kernel Extensions without Runtime Checking," 229-243페이지의 증거 운송 코드(proof-carrying code)와 유사하게 프로그램이 취약성이 있다는 증거를 포함할 수 있다. 가장 간단한 형태에서, 이 증거는 예컨대 명령들의 시퀀스의 형태 등으로, 불허 상태에 이르는 실행 경로에 대한 기술을 포함할 수 있다. 이 경보 형태는 비결정적 이벤트들의 리스트들만을 갖는 대신, 프로그램 명령들의 시퀀스들을 운송하기 때문에 이전의 경보 형태들과 다르고, 이것은 또한 아래 설명되는 검증 메커니즘들을 용이하게 하는 논리식들 (logic formulas)을 운송할 수도 있다.
경보를 발생시키는 노드는 적어도 하나의 노드에 경보를 송신하여 검출된 웜 또는 취약성을 통지할 수 있다. 경보의 분배는 도 3에 도시된 바와 같이 경보 모듈(350)에 응답하여 분배 모듈(370)을 통하여 결정될 수 있다. 그 노드는 임의의 적당한 메시지 포맷 또는 프로토콜로 통신 매체를 통하여 경보를 송신할 수 있다. 경보는 그 경보를 발생시키는 노드와 통신하는 임의의 적당한 노드들에 분배될 수 있다. 노드가 경보를 수신하면, 그 노드는 또한 그 경보를 자신과 통신하는 임의의 적당한 노드들에 분배할 수 있다. 예를 들면, 경보는 미리 결정된 경보 어드레스 리스트에 따라서 모든 노드들에, 또는 발생 노드와 최근 접촉한 모든 노드들에, 또는 임의의 다른 적당한 분배 방식에 따라서 송신될 수 있다. 한 가지 분배 방식에 대하여 아래에서 더 상세히 논의한다.
자기 인증 경보의 인증
도 7의 자기 인증 경보(700)와 같은 자기 인증 경보는 그 경보를 수신하는 노드에 의해 자기 인증될 수 있다. 예를 들면, 도 3에 도시된 수신 노드(320)의 경보 검증 모듈(360)은 수신된 경보(330)를 인증할 수 있다. 일례에서, 수신 노드는 경보를 구문 분석하여 프로그램 식별자와 이벤트 리스트 및 취약성 지시자 및 하나 이상의 검증 힌트와 같은 임의의 다른 파라미터들을 검색한다. 수신 노드는 지시된 프로그램에서 이벤트 리스트들에 의해 규정된 실행을 리플레이할 수 있다. 어떤 타입의 샌드박스(sandbox) 환경에서 프로그램에서 이벤트들을 리플레이하는 것을 포함하여, 이벤트 리스트를 리플레이하기 위해 임의의 적당한 기법이 이용될 수 있다. 이벤트 리스트의 리플레이 결과들은 지시된 에러 또는 취약성 조건이 존재하는지를 결정하기 위해 제공된 취약성 타입 및/또는 검증 힌트(들)가 부가될 수 있는 프로그램 취약성을 검증하기 위해 수신 노드에 의해 검사될 수 있다. 만일 아니라면, 경보는 인증되지 않고 예컨대 메시지를 버리는 것과, 잘못된 경보를 확인하는 경보를 다른 노드들에게 송신하는 것 등의 적절한 조치가 취해질 수 있다.
이벤트 리스트를 글자 그대로 실행하기보다는, 이벤트 리스트는 1차 논리(first-order logic)를 이용하여 인증될 수 있다. 예를 들면, 자기 인증 경보에 포함된 증거는 증거 운송 코드의 미캐닉(mechanics)과 유사한 방식으로 검증될 수 있다. 그러나, 프로그램의 모든 실행들이 안전 조건을 고려하는 것을 보여주기보다는, 자기 인증 경보를 인증하는 것은 프로그램의 하나의 특정 실행이 취약성을 나타내는 것을 보여줄 수 있다. 완전한 프로그램을 고려하기보다는, 자기 인증 경보의 인증은 하나 이상의 식별된 실행 경로, 예컨대, 이벤트 리스트 내의 비결정적 이벤트들의 시퀀스에 의해 규정된 것에 초점을 맞출 수 있다. 간단한 형태에서, 자기 인증 경보 내의 증거는 이벤트들의 리스트에 의해 규정된 경로에서 실행된 명령의 리스트를 포함할 수 있다. 이런 식으로, 논리적 검증이 취약성이 있는 프로그램 내의 식별된 경로들에 대한 안전 조건을 발생시키고 그 안전 조건은 프로그램이 자기 인증 경보에 의해 제공된 이벤트 리스트 내의 리스트들을 수신할 경우 유효하지 않음을 보여줄 수 있다.
예를 들면, 위에서 논의한 AEC 자기 인증 경보에서, 지시된 프로그램의 취약성이 있는 실행 경로는 단일 메시지의 수신에 의해 트리거될 수 있고 자기 인증 경 보는 그 경로 내의 명령들의 리스트를 포함할 수 있다. 경보를 인증하기 위하여, 명령들의 리스트는, 예컨대 프로그램 텍스트를 이용하여 안전 조건을 결정하고 이벤트 리스트 내의 이벤트가 이 조건을 위반하는 것을 검증하는 것에 의해 체크될 수 있다. 해당 실행 경로에 대한 프로그램의 명령들로부터 논리 안전 조건이 발생될 수 있다. 실행 경로에 대한 안전 조건을 얻기 위하여, 안전한 프로그램들의 실행을 시뮬레이션하는 추상 머신(abstract machine)이 정의될 수 있다. 이 추상 머신에 대한 명령들은 취약성이 있는 프로그램에 의해 발생된 실제 CPU에 대한 명령들과 유사할 수 있다.
도 9는 x86 CPU 명령들의 서브세트에 대한 예시적인 추상 머신(900)을 예시한다. 도 9에서,
Figure 112005039640102-PAT00001
는 CPU 명령들의 벡터(예컨대, 자기 인증 경보 내의 명령들의 리스트)를 나타내고; pc는 프로그램 카운터를 나타내고;
Figure 112005039640102-PAT00002
pc는 현재 명령을 나타내고; ρ는 머신 레지스터들 및 메모리의 상태를 나타내고; ρ[ri]는 상태 ρ의 레지스터 ri의 값을 나타내고(ri로 단축될 수도 있다); rm은 메모리의 상태를 표시하는 특수 레지스터를 나타내고; ρ[rd←rs]는 rd의 값을 rs의 값으로 대체함으로써 ρ로부터 얻어진 새로운 상태를 나타내고; sel(rm,n)은 메모리 어드레스 n의 콘텐츠를 나타내고; upd(rm,rd,rs)는 레지스터 rd에 레지스터 rs를 기입하는 것으로부터 생기는 새로운 메모리 상태를 나타내고; ZF는 제로 플래그(예컨대, 메모리의 한 비트)를 나타낸다.
예시적인 추상 머신(900)은, 리턴 명령들(RET)을 실행할 때, 스택 포인터 레지스터(ESP)가 가리키는 메모리 위치가 웜을 포함하지 않는지를 체크한다. 도 9에 도시된 것과 같은 추상 머신의 정의로부터, 프로그램에 대하 안전 조건을 기계적으로 발생시키는 규칙 세트가 얻어질 수 있다. 도 10은 도 9의 추상 머신에 대응하는 규칙들(100)의 예시적인 세트를 예시한다. 규칙들(1000)은 안전 조건 파라미터 SCpc +1(1004)에 의하여 안전 조건 파라미터 SCpc(1002)를 특정한다. 이런 식으로, 프로그램의 안전 조건은, 최종 명령으로부터 시작하여 처음(beginning)까지 각각의 이전 명령을 처리하면서 프로그램 텍스트가 주어지면 명령들의 리스트가 유효 실행을 나타내는 것을 체크함으로써 얻어질 수 있다. 보다 구체적으로, 최종 명령이 검사될 수 있고, 그 후에 최종 2개의 명령이 검사될 수 있고, 등등이다.
사전 조건(precondition)이 정의될 수 있다. 보다 구체적으로, 사전 조건은, 레지스터들 및/또는 메모리의 상태와 같은, 취약성이 있는 실행 경로의 시작에서의 프로그램의 초기 상태를 반영할 수 있다. 취약성 술어(vulnerability predicate)가 정의될 수 있다. 예를 들면, 취약성 술어는 사전 조건(Precondition) ⇒안전 조건(Safety Condition)으로 정의될 수 있다. 취약성 술어는 그 후 1차 술어 계산법(first-order predicate calculus)의 규칙들에 따라서 증명될 수 있다.
예를 들면, 자기 인증 경보의 이벤트 리스트에 의해 제공된 명령들의 취약성이 있는 시퀀스는 도 11에 도시된 명령들(1100)로서 정의될 수 있다. 도 10의 규 칙들(1000)을 이용하여, 안전 조건 SafetyCondition은 다음과 같이 정의될 수 있다:
(ECX = 10 ⇒Worm(sel(rm, ESP)))∧(ECX ≠ 10 ⇒Worm(sel(rm, 1234))
이런 식으로, 경보의 이벤트 리스트(1100)에 의해 식별된 실행 경로의 시작에서, ECX 레지스터의 값은 10에 대해 다르고 메모리 위치 1234는 네트워크 입력 동작에 의해 방금 기입되었다(따라서 '불결'한 것으로 간주되고 웜을 포함할 수 있다). 식 1에 의해 주어진 안전 조건으로부터, 사전 조건이 다음과 같이 정의될 수 있다.
(ECX ≠ 10 ∧ Worm(sel(rm, 1234))
식 1의 안전 조건과 식 2의 사전 조건으로부터, 취약성 술어가 발생되고 증명될 수 있다. 취약성을 증명함으로써, 경보를 인증할 수 있는 이벤트 리스트에 표시된 취약성의 존재를 검증할 수 있다. 메모리 위치 1234는 반드시 웜을 포함하지는 않음을 알아야 할 것이다. 예를 들면, 외부 입력 동작이 프로그램의 실행을 임의로 변경할 수 있다는 사실은, 비록 프로그램의 취약성에 대한 부당 이용이 아직 존재하지 않는다 하더라도, 프로그램이 공격에 대해 취약성이 있다는 것을 의미할 수 있다.
도 16은 자기 인증 경보를 발생시키는 예시적인 방법(1600)을 예시하고, 도 8은 자기 인증 경보를 발생시키는 예시적인 방법(800)을 예시한다. 도 16을 참조하여, 예컨대 검출 모듈(340) 등에 의해 프로그램 취약성이 검출될 수 있다(802). 취약성이 있는 프로그램에 대한 프로그램 식별자가 결정될 수 있다(804). 취약성의 타입이 결정될 수 있고(806), 적절한 취약성 지시자가 선택된다. 취약성의 머신 검증 가능한 증거를 제공하는 이벤트 리스트가 결정될 수 있다(808). 위에서 언급한 바와 같이, 이벤트 리스트는 동적 데이터 흐름 분석을 구현하는 검출 프로세스 동안에 로깅된 이벤트들로부터 파생될 수 있다. 이벤트 리스트는 또한 표시된 취약성을 예시한 이벤트들의 최소 또는 저감된 세트를 결정하기 위해 검출 중에 로깅된 이벤트들로부터 삭감되거나 저감될 수도 있고, 데이터 흐름 그래프로부터 파생될 수도 있고, 부분들을 해가 없는 값들로 대체하도록 변경될 수도 있고, 등등이다. 결정된 이벤트 리스트 및/또는 취약성 지시자에 기초하여 하나 이상의 검증 힌트가 결정될 수 있다(810). 일부 경우에, 웜에 대한 잠재적 해법들에 관한 힌트들, 예컨대, 패치들 및/또는 필터들, 패치 및/또는 필터를 구현하는 실제 코드, 웜 서명 등을 포함할 수 있는 응답 지시자가 결정될 수 있다(812). 임의의 적당한 프로토콜에 따라서 임의의 적당한 포맷으로 자기 인증 경보 메시지가 형성될 수 있다(814). 경보는 통신 매체 등을 통하여 네트워크 내의 다른 노드에 송신될 수 있다(816). 위에서 언급한 바와 같이, 자기 인증 경보에 대한 수신자 노드들을 결정하기 위해 분배 모듈(370)이 이용될 수 있다.
도 8을 참조하여, 통신 매체 등을 통하여 수신 노드에 의해 자기 인증 경보가 수신될 수 있다(850). 경보는 도 3의 경보 검증 모듈(360) 등에 의해 프로그램 식별자 및 이벤트 리스트를 결정하기 위해 구문 분석될 수 있다(852). 프로그램 식별자는 수신 노드 상에 존재하는 프로그램 모듈(360)과 비교될 수 있다(854). 만일 수신 노드에 프로그램 식별자가 존재하지 않으면, 적절한 조치가 취해질 수 있다(856). 예를 들면, 적절한 조치는 경보를 버리는 것 및/또는 통신 네트워크에서 그 경보를 더 분배하기 위해 다른 노드로 그 경보를 전송하는 것을 포함할 수 있다.
만일 프로그램 식별자가 수신 노드의 프로그램 또는 애플리케이션을 표시한다면, 수신 노드는 도 3의 경보 검증 모듈(360) 등을 통하여 지시된 프로그램을 로딩할 수 있다(858). 일부 경우에, 프로그램은 일시 정지된 프로세스 내에 로딩될 수 있다. 일부 경우에, 프로그램은 표시된 취약성의 액션, 다른 것들과의 접촉, 및/또는 다른 악의적 사이드 효과를 제한할 수 있는 '샌드박스' 환경 내에 로딩될 수 있다. 가상 머신들이 경보 검증이 일어날 수 있는 샌드박스 환경을 제공할 수 있다. 다른 샌드박스 환경들은 사이드 효과를 제한하기 위해 실행 중인 프로그램으로부터의 모든 출력들을 조용히 버릴 수 있다. 일부 경우에, 수신 노드는 분리된 및/또는 테스팅 디바이스와 같은 다른 컴퓨팅 장치에게 지시된 프로그램을 로딩하고 및/또는 자기 인증 경보를 인증하도록 명령할 수 있다.
검증 함수가 일시 정지된 프로세스 어드레스 공간 내에 로딩될 수 있다(860). 검증 함수가 지시된 프로그램에 의해 호출되면 검증 함수는 성공 지시자를 리턴할 수 있고 아니면 그것은 응답 모듈을 호출할 수 있다. 성공 지시자는 특정 값을 갖고 프로그램을 나와서, 네트워크 인터페이스에 값을 기입하고, 동기화 객체 에 신호하는 등을 행하는, 시각 또는 청각 신호를 포함하는 검증 함수의 실행을 표시하는 임의의 적당한 지시자일 수 있다. 검증 함수의 구조는 이벤트 리스트에 의해 예시될 취약성의 타입의 의존할 수 있다. 이런 식으로, 취약성 지시지 및/또는 검증 힌트가 자기 인증 경보로부터 구문 분석되어 적절한 검증 함수를 선택 및/또는 발생시키는 데 사용된다.
이벤트 리스트는 로딩된 프로그램을 이용하여 리플레이될 수 있다(862). 이벤트 리스트가 실행될 때, 지시된 프로그램 내의 취약성의 존재를 표시할 수 있는 검증 함수가 호출될 수 있다. 예를 들면, AEC를 표시하는 취약성 지시자의 경우, 자기 인증 경보 내의 힌트는 이벤트 및/또는 프로그램 카운터에 로딩될 어드레스의 해당 이벤트 내의 오프셋을 표시할 수 있다. 검증 함수가 로딩된 어드레스가 해당 이벤트 및/또는 오프셋에 배치될 수 있다. 이런 식으로, 이벤트 리스트의 리플레이 중에 검증 함수가 실행되면(864), 취약성이 증명되고 경보는 인증된 것으로 간주될 수 있다. 이런 식으로, 수신 노드는 인증된 경보에 응답하여, 예컨대 취약성이 있는 프로그램을 중단하고 및/또는 취약성을 해결하기 위한 적당한 패치 및/또는 필터를 구현하는 등의, 적절한 조치를 취할 수 있다(866). 만일 경보가 인증되지 않으면, 예컨대, 검증 함수가 실행되지 않으면, 메시지를 버리고 및/또는 다른 노드(들)에게 무효 경보를 통지하는 등의, 적절한 조치가 취해질 수 있다(856).
다른 예에서, ACE 경보를 표시하는 취약성 지시자의 경우, 자기 인증 경보 내의 힌트는 이벤트 및/또는 주입되어 타깃 프로그램에 의해 실행될 코드의 해당 이벤트 내의 오프셋을 표시할 수 있다. "검증 호출"(call verification) 명령들의 시퀀스, 즉 CPU에게 검증 함수를 호출하도록 명령하는 타깃 CPU의 명령들의 시퀀스가 해당 이벤트 및/또는 오프셋에 배치될 수 있다. 이런 식으로, 이벤트 리스트의 리플레이 중에 검증 함수가 실행되면(864), 취약성이 증명되고 경보는 인증된 것으로 간주될 수 있다. 이런 식으로, 수신 노드는 인증된 경보에 응답하여, 예컨대 취약성이 있는 프로그램을 중단하고 및/또는 취약성을 해결하기 위한 적당한 패치 및/또는 필터를 구현하는 등의, 적절한 조치를 취할 수 있다(866). 만일 경보가 인증되지 않으면, 예컨대, 검증 함수가 실행되지 않으면, 메시지를 버리고 및/또는 다른 노드(들)에게 무효 경보를 통지하는 등의, 적절한 조치가 취해질 수 있다(856).
또 다른 예에서, AFA 경보를 표시하는 취약성 지시자의 경우, 자기 인증 경보 내의 힌트는 이벤트 및/또는 타깃 프로그램의 함수에 전달될 임의 인수의 해당 이벤트 내의 오프셋을 표시할 수 있다. 임의 인수가 해당 이벤트 및/또는 오프셋에 배치될 수 있고 검증기(verifier)는 비결정적 이벤트들의 리플레이 중에 함수 호출에서 사용된 실제 인수 값과 공급된 임의 인수의 값을 대조하는 래퍼(wrapper)로 AFA 경보에서 식별된 중요 함수를 설치할 수 있다. 래퍼는 그것들이 일치하면 검증 함수를 호출한다. 이런 식으로, 이벤트 리스트의 리플레이 중에 검증 함수가 실행되면(864), 취약성이 증명되고 경보는 인증된 것으로 간주될 수 있다. 이런 식으로, 수신 노드는 인증된 경보에 응답하여, 예컨대 취약성이 있는 프로그램을 중단하고 및/또는 취약성을 해결하기 위한 적당한 패치 및/또는 필터를 구현하는 등의, 적절한 조치를 취할 수 있다(866). 만일 경보가 인증되지 않으면, 예컨 대, 검증 함수가 실행되지 않으면, 메시지를 버리고 및/또는 다른 노드(들)에게 무효 경보를 통지하는 등의, 적절한 조치가 취해질 수 있다(856).
상술한 바와 같이 이벤트 리스트를 글자 그대로 실행하기보다는, 이벤트 리스트는 1차 논리(first-order logic)를 이용하여 인증될 수 있다. 도 8의 방법을 참조하여, 이벤트 리스트에 의해 지시된 실행 경로에 대한 프로그램의 명령으로부터 논리 안전 조건이 발생될 수 있다(872). 이 안전 조건은 임의의 적당한 방식으로, 예컨대 안전한 프로그램의 실행을 시뮬레이션하는 추상 머신을 정의하는 것에 의해, 발생될 수 있다. 취약성이 있는 실행 경로의 시작에서의 프로그램의 초기 상태를 반영할 수 있는 사전 조건이 정의될 수 있다(874). 취약성 술어(vulnerable predicate)가 정의될 수 있고(876), 이것은 그 후에 1차 술어 계산법(first order predicate calculus)의 규칙들에 따라서 증명될 수 있다(878). 만일 술어가 증명되면, 인증된 경보에 응답하여, 예컨대 취약성이 있는 프로그램을 중단하고 및/또는 취약성을 해결하기 위한 적당한 패치 및/또는 필터를 구현하는 등의, 적절한 조치를 취할 수 있다(866). 만일 술어가 증명되지 않으면, 예컨대 메시지를 버리고 및/또는 다른 노드(들)에게 무효 경보를 통지하는 등의, 적절한 조치가 취해질 수 있다(856).
응답
만일 실행 결과가 표시된 취약성을 식별하지 않으면, 프로그램 내의 인증된 취약성에 응답하여 적절한 조치가 취해질 수 있다. 컴퓨팅 장치의 응답은 도 3의 응답 모듈(380) 등에 의해, 시스템 관리자에 의해 수동으로 지시된 응답을 포함하 는 임의의 적당한 방식으로 수동으로 및/또는 자동으로 수행될 수 있다. 예를 들면, 프로그램이 오프라인으로 취해질 수도 있고, 및/또는 다른 대응 조치가 취해질 수도 있다. 대응 조치들은 이벤트 리스트 및/또는 취약성 타입 지시자 및/또는 검증 힌트에 기초하여 패치 및/또는 필터를 발생시키는 것을 포함할 수 있다. 이런 식으로, 자기 인증 경보 내의 정보는 애플리케이션을 중단하지 않고 감염을 방지하기 위한 패치 및/또는 필터를 수동으로 및/또는 자동으로 발생시키기 위해 이용될 수 있다. 더욱이, 발생된 패치/필터는 도 7의 응답 지시자(710)에서와 같이, 수신 노드에 의해 사용되도록 자기 인증 경보 내에 포함될 수 있다.
자기 인증 경보의 이벤트 리스트 및/또는 검증 힌트들은 취약성을 고칠 취약성이 있는 프로그램에 대한 이진 변경들(예를 들어, 패치)을 자동으로 발생시키기 위해 이용될 수 있다.
예를 들어, 만일 감염이 데이터 구조의 겹쳐쓰기를 수반했다면, 이것을 방지하는 특별한 체크를 수행하는 코드가 발생될 수 있다. 예를 들어, 만일 그 겹쳐쓰기가 버퍼 오버플로 또는 언더플로에 기인한 것이라면, 겹쳐쓰기를 방지하기 위해 어레이 경계 체킹 코드(array bounds checking code)가 발생될 수 있다. 발생된 코드는 그 후 취약성이 있는 프로그램에 적용된다. 다른 예에서는, 원본 데이터 구조를 이용하여, 겹쳐쓰기된 데이터 구조의 별도 복사본을 유지하고, 실행 전에 원본 데이터 구조에의 각각의 액세스 전에 복사본과 원본 데이터 구조들을 비교함으로써 동적 패치(dynamic patch)가 발생될 수 있다. 또 다른 예에서는, 루프 내의 경계 조건이 다른 조건으로(이를테면 루프 본체(loop body)가 실행되는 횟수가 더 적어지게 하는 조건으로) 대체될 수 있다.
웜을 품은 소스 메시지 내의 충분히 고유한 영숫자 문자열, 및/또는 특정 길이를 가진 메시지에 기초하여 웜 특정 필터(worm specific filter)가 발생될 수 있다.
다형 웜들(polymorphic worms)을 검출할 수 있는 취약성 특정 필터가 발생될 수 있다. 일례에서, 네트워크 스택 위에 필터가 설치될 수 있다. 취약성 특정 필터는 애플리케이션 상태를 이용하여 언제 착신 트래픽(incoming traffic)을 드롭(drop)할지를 결정할 수 있다. 보다 구체적으로, 자기 인증 경보의 이벤트 리스트 내에 리스트된 실행 경로를 분석하고, 착신 메시지 내의 어느 바이트들이 감염에 이르는 실행 경로를 결정하는지 및 그 바이트들 상의 어느 조건들이 실행 경로에서 테스트되는지를 체크함으로써 필터의 일반 조건들이 발생될 수 있다. 이들 취약성 특정 필터들은 프로그램 카운터 내로 로딩되어 웜에 의해 실행될 불결한 데이터가 기록될 때까지 동적 흐름 분석과 유사한 메커니즘을 이용하여 발생될 수 있다.
일례에서, 동적 흐름 분석을 이용하여 취약성 중심 필터를 발생시키는 응답 모듈이 메모리 위치 및/또는 레지스터와 같은 각각의 불결한 메모리 부분에 대한 데이터 흐름 그래프를 유지할 수 있다. 이 응답 모듈은 또한 각각의 CPU 플래그에 대한 데이터 흐름 그래프를 유지할 수 있다. 각각의 데이터 흐름 그래프는 다른 외부의 정보 소스들 또는 메시지들 내의 값들로부터 불결한 메모리 위치에 있는 값을 계산하는 데 이용된 명령들의 시퀀스의 전체 또는 관련 부분을 포함할 수 있다. 이 응답 모듈은 제어 흐름 분석을 이용하여 제어 이전 명령들을 실행한 후 명령 포 인터 값을 결정하는 모든 조건들, 및 조건부 이동 및 세트 명령들(conditional move and set instructions)을 실행할 때 이용된 조건들을 계속 알 수 있다. 이들 조건들의 논리곱은 필터 조건이라 불릴 수 있다. 필터 조건은 처음에는 참이고 불결한 프로세서 플래그를 사용하거나 또는 불결한 위치로부터 판독된 어드레스에 제어를 이전하는 명령이 있은 후마다 업데이트될 수 있다. 필터 조건은 그것의 기존 값과 불결한 플래그 및 어드레스 위치의 데이터 흐름 그래프들에 의해 계산된 식들에 대한 적당한 조건들의 논리곱이 되도록 업데이트된다. 예를 들면, JZ EXE(만일 제로 플래그가 세트이면, EAX 레지스터에 저장된 어드레스로 점프)가 실행되고 점프가 취해질 경우, 만일 제로 플래그와 EAX 레지스터가 모두 청결하면 필터 조건은 불변 상태로 남는다. 만일 제로 플래그가 불결하면, 제로 플래그의 데이터 흐름 그래프에 의해 계산된 식이 거짓이어야 하는 조건을 부가한다. 만일 EAX도 불결하면, EAX의 데이터 흐름 그래프에 의해 계산된 식이 EAX에 의해 현재 저장된 값과 같아야 하는 조건을 또한 부가한다. 만일 점프가 취해지지 않으면 제로 플래그의 데이터 흐름 그래프에 의해 계산된 조건이 참이어야 하는 조건을 부가하고 EAX의 데이터 흐름 그래프에 대한 아무런 조건도 부가되지 않는다. 이 절차 후에, 필터 조건은 동일한 취약성을 부당 이용하는 웜 또는 그 웜의 변종들을 저지하기 위해 착신 메시지들에 적용된다. 이런 식으로, 필터 조건은 잘못된 긍정들의 발생을 저감시킬 수 있다.
도 15에 예시된 취약성이 있는 코드 예는 필터의 발생을 예시하기 위해 사용될 수 있다. 도 15의 코드(1500)는 네트워크 버퍼 내의 메시지의 제1 바이트와 상 수(0x31)를 비교하는 것으로 시작한다. 만일 일치하면, 네트워크 내의 바이트들은 제로 바이트가 발견될 때까지 스택 기반 버퍼에 복사된다. 이것은 스택 상의 리턴 어드레스를 겹쳐쓰기할 수 있는 잠재적 버퍼 오버플로이고 그것은 문자열 라이브러리들(string libraries) 내의 취약성을 나타낸다. 위에서 논한 바와 같이 동적 데이터 흐름 분석을 실행함으로써 이 취약성에 대한 필터가 발생될 수 있다. 예를 들면, 도 15의 예시적인 명령들 중 처음 4개의 명령들(1502)을 실행한 후에, 동적 데이터 흐름 분석을 구현하는 검출 모듈이 메시지 내의 제1 바이트가 0x31과 같아야 한다는 조건을 결정할 수 있다. 유사하게, 루프를 실행하면 제로와 다른 네트워크 버퍼 내의 바이트들의 시퀀스에 대한 조건들이 파생될 것이다. 이들 조건들을 갖는 필터를 착신 메시지들에 적용함으로써 잘못된 긍정들을 발생시키지 않을 수 있고 이 취약성을 부당 이용하는 실질적으로 모든 웜 변형들을 저지할 수 있다. 필터 조건을 세련(refine)하기 위해 몇 가지 부가적인 메커니즘들이 이용될 수 있다. 일례에서, 응답 모듈은 SCA 내의 검증 힌트에 의해 식별된 오프셋 후에 나타나는 메시지 바이트들에 대한 조건들을 제거한다. 메시지 내의 바이트들은 대개 순서대로 처리되므로, 이 발견적 방법(heuristic)은 잘못된 긍정들을 도입할 것 같지 않다. 다른 예에서, 응답 모듈은 함수가 리턴할 때 함수의 실행에 의해 부가된 조건들을 제거한다. 이론적 근거는 이 조건들은 대개 함수가 리턴한 후에 중요하지 않고 함수의 중요한 효과들은 불결한 데이터의 데이터 흐름 그래프들에서 포착된다는 점이다.
발생된 패치들 또는 필터들은 경보 메시지를 수신하고 인증하는 임의의 머신 에 의해, 예컨대 도 3의 응답 모듈(380) 등을 통하여 독립적으로 발생될 수 있다. 다른 예에서, 발생된 패치 또는 필터는 경보 메시지 내에 포함될 수 있고, 이 패치 또는 필터는 수신 노드에 의해 임의의 적당한 방식으로 인증되거나 유효성 검사(validate)될 수 있다. 도 7에 도시된 바와 같이, 자기 인증 경보는 또한 검증된 취약성 및/또는 웜 공격에 대한 적당한 응답을 포함할 수 있는 응답 지시자(710)를 포함할 수 있다. 예를 들면, 응답 지시자는 적당한 패치 및/또는 필터, 적당한 패치 및/또는 필터를 구현하는 코드 등에 대한 기술 또는 힌트를 제공할 수 있다.
경보의 분배
취약성을 검출하는 노드는 그 검출 노드와 통신하는 네트워크 내의 하나 이상의 노드들에 경보를 송신할 수 있다. 예를 들면, 통신 네트워크의 노드들 중 일부는 취약성 및/또는 웜 검출 모듈들을 실행할 수 있고, 이는 웜들에 대한 중앙 타깃을 제거할 뿐만 아니라 검출의 부하를 분산시키는 데 도움이 될 수 있다. 위에서 언급한 바와 같이, 검출 모듈은 각종 검출 메커니즘을 포함할 수 있고, 이들 중 일부는 단순하고 일부는 복잡하다. 네트워크의 검출 노드는 검출 모듈을 그것이 아이들 상태일 때 그것의 정상 동작의 일부로서 및/또는 네트워크 내의 그것의 주요 또는 배타적 기능으로서 실행할 수 있다. 검출 모듈을 실행함으로써 통신 네트워크의 하나의 노드, 일부 노드, 또는 모든 노드와 같이 임의의 수의 노드들이 검출 노드로 간주될 수 있다는 것을 알아야 할 것이다.
위에서 언급한 바와 같이, 취약성 및/또는 웜 공격이 검출될 때, 하나의 응답은 자기 인증 경보와 같은 경보를 발생시켜서 그것을 네트워크 내의 하나 이상의 노드들에 송신하는 것일 수 있다. 이런 식으로, 취약성을 검출하지 못했거나 및/또는 검출된 웜으로 감염되지 않은 노드들이 웜 및/또는 프로그램 취약성에 대하여 경고를 받을 수 있고, 적절한 보호 조치를 취할 수 있다. 자기 인증 경보는, 위에서 언급한 바와 같이, 수신 노드가 경보의 진정성을 독립적으로 검증할 수 있게 하는 머신 검증 가능한 정보를 포함할 수 있다. 이런 식으로, 경보를 수신하는 네트워크 내의 임의의 노드가 인증 기관(certification authority) 등과 통신하지 않고 경보를 인증할 수 있다. 따라서, 자기 인증 경보는 상호 불신하는 노드들 간의 협력을 증진하는 아키텍처의 일부일 수 있다.
오버레이 네트워크
웜 및/또는 취약성이 검출되면, 취약성이 있는 프로그램을 실행하고 있거나 또는 웜 공격에 대해 감염되기 쉬울 수 있는 다른 노드들에게 경보가 신속히 및/또는 탄력성 있게(resiliently) 송신될 수 있다. 경보는 네트워크 내의 임의의 수의 결정 가능한 및/또는 미리 결정된 노드들에 임의의 적당한 방식으로 송신될 수 있다. 일례에서, 경보는 악의적인 내부자(insiders) 및/또는 웜들에 의한 서비스 거부 공격들(denial of service attacks)에 대하여 보호되는 네트워크 오버레이를 이용하여 송신될 수 있다. 예를 들면, 경보는 구조화된 피어 투 피어 오버레이(structured peer-to-peer overlay)를 통하여 브로드캐스트될 수 있다.
피어 투 피어 오버레이는 자기 편성 애플리케이션(self-organized applications)의 구성을 위한 적당한 기반을 제공할 수 있다. 왜냐하면, 피어 투 피어 네트워크는 매우 많은 수의 노드들로 증대될 수 있고 탄력성이 있을 수 있기 때문이다. 예컨대, 많은 수의 노드들이 충돌(crash)하거나 접속 분리되는 경우에도 접속성을 유지할 수 있기 때문이다. 다음 설명은 구조화된 피어 투 피어 오브레이에 대한 개관을 제공하고 시스템 내의 실질적으로 모든 비감염된 노드들에 경보를 전달하는 확률을 증가시키기 위해 피어 투 피어 오버레이를 안전하게 하는 일례를 예시한다. 비록 아래 논의에서는 패스트리(Pastry) 피어 투 피어 오버레이가 예로서 이용되지만, 임의의 다른 적당한 네트워크 및/또는 피어 투 피어 네트워크 오버레이가 이용될 수도 있다는 것을 알아야 할 것이다. 피어 투 피어 네트워크들에 대한 오버레이 네트워크 타입들의 현재 예들은 버클리의 캘리포니아 대학에서 개발된 태피스트리(Tapestry), 매사추세츠 공과 대학에서 개발된 코드(chord), 및 마이크로소프트 앤드 라이스 대학에서 개발된 패스트리(Pastry)를 포함한다. 태피스트리, 코드, 및 패스트리는 분산 시스템들을 구축하기 위한 툴키트들(toolkits)이다. CAN, Kademlia, Skipnet, 및 Viceroy는 유사한 다른 시스템들이다. 새로운 오버레이 디지인들이 빈번하게 나타나고 있다.
패스트리와 같은 구조화된 오버레이들은 오버레이 노드들에 키들을 매핑한다. 각각의 노드에는 식별자 공간으로부터 선택되는 노드 식별자가 할당된다. 키들은 동일한 식별자 공간으로부터 선택된다. 키는 식별자 공간 내의 그 키에 가장 가까운 또는 가장 유사한 노드 식별자를 갖는 노드에 매핑된다. 이 노드는 키의 루트 노드라 불릴 수 있다. 키들의 노드들에의 매핑은 사용자들이 예를 들면 2003년 2월, P2P 시스템에 관한 2차 국제 워크숍, Dabek 등의 "Towards a common API for structured peer-to-peer overlays", 33-44페이지 - 이 문헌은 본 명세서에 참 고로 통합됨 - 에서 더 논의되는 KBR 인터페이스를 이용하여 룩업 메시지를 데스티네이션 키에 송신할 수 있게 하는 프리미티브를 통하여 공개될 수 있다. 룩업 메시지는 오버레이를 통하여 데스티네이션 키의 루트 노드에 라우팅될 수 있다. 예를 들면, 패스트리는 128비트의 부호 없는 정수들의 세트로부터 랜덤하게 균일하게 노드 식별자들 및 키들을 선택한 다음, 지시된 데스티네이션 키를 그 노드 식별자가 수치적으로 키에 가장 가까운 활성 노드에 매핑한다. 예를 들면, 수치적으로 가장 가까운 노드 식별자는 데스티네이션 키 모듈로 2128에 가장 가까운 노드 식별자일 수 있다.
노드들에 대한 라우팅 상태 정보는 라우팅 테이블에 저장될 수 있다. 라우팅 테이블은 어드레스 공간 내의 각종 노드들에 대한 노드 식별자와 네트워크 어드레스를, 라우팅 테이블에 표시된 노드 공간이 노드 테이블을 저장하는 노드의 노드 식별자에 접근할수록 점점 더 상세한 레벨로, 관련시킬 수 있다. 노드의 리프 세트(leaf set)는 라우팅 테이블을 호스팅하는 노드의 노드 식별자에 가장 가까운 또는 가장 유사한 노드들에 대한, 노드 식별자 및 네트워크 어드레스와 같은 정보를 포함한다. 오버레이 프로토콜에 따라서, 리프 세트는 라우팅 테이블과 별개인 데이터 구조에 저장될 수 있고 및/또는 라우팅 테이블의 최하위 레벨일 수 있다.
패스트리와 관련하여 예시적인 라우팅 테이블 구조에 대하여 설명한다. 패스트리의 라우팅 알고리즘은 노드 식별자들 및 키들을 베이스 2b의 부호 없는 정수들로 해석하고, 여기서 b는 4의 전형적인 값을 갖는 파라미터이다. 이 해석에 기 초하여, 라우팅 테이블은 128/b개 행(low)과 2b개의 열(column)을 갖는 행렬이다. 라우팅 테이블의 행 r 및 열 c의 엔트리는, 라우팅 테이블 내의 제1 행이 r=0을 나타낸다고 가정하고, 처음 r개 숫자(digit)를 로컬 노드의 노드 식별자와 공유하고, (r+1)번째 숫자가 c와 같은 노드 식별자를 포함한다. 만일 그러한 노드 식별자가 없다면, 예컨대 네트워크 내의 어떤 활성 노드도 그 노드 식별자를 이용하지 않는다면, 엔트리는 널일 수 있다. 노드 식별자들은 식별자 공간을 통하여 균일하게 그리고 랜덤하게 할당될 수 있으므로, 라우팅 테이블 내의 비지 않은 엔트리들의 평균 수는 (2b-1)* 피어 투 피어 네트워크 내의 노드들의 수의 log(2b의 베이스를 가짐)로서 근접될 수 있다. 패스트리 노드의 리프 세트는 로컬 노드의 노드 식별자의 좌측으로 l/2개의 가장 가까운 노드 식별자들 및 로컬 노드의 노드 식별자의 우측으로 l/2개의 가장 가까운 노드 식별자들을 포함할 수 있고, 여기서 l은 8의 전형적인 값을 갖는 파라미터이다. 피어 투 피어 네트워크 내의 각 노드의 리프 세트들의 세트는 그 후 오버레이 노드들을 링으로 연결한다. 이런 식으로, 데스티네이션 키와 일치하는 점진적으로 긴 프리픽스(prefix)를 갖는 노드들에 메시지를 전송함으로써 피어 투 피어 네트워크 내에서 메시지가 라우팅될 수 있다.
도 12는 b=2 및 l=4를 갖는 예시적인 구조화된 오버레이 네트워크(1200)를 도시한다. 이 구조화된 오버레이 네트워크 도면은 노드(1202)에서 발신되는 룩업 메시지의 루트(1210)를 예시한다. 룩업 메시지는 표시된 키에 가장 가까운 노드 식별자에 매칭되는 키를 포함한다. 예컨대, 키와 관련된 원하는 정보를 저장하는 노드가 그 키에 가장 가까운 노드 식별자를 갖는 노드이다. 예를 들면, 노드(1202)는 203231의 노드 식별자를 가질 수 있고 룩업 메시지의 키는 323310일 수 있다. 이 룩업 메시지를 송신하기 위하여, 발신 노드(1202)는 그 룩업 메시지의 데스티네이션 키에 가장 가까운 알려진 노드 식별자를 찾아 그것의 라우팅 테이블의 한 레벨을 탐색할 수 있다. 보다 구체적으로, 노드(1202)는 키의 처음 숫자인 숫자 3으로 시작하는 노드 식별자를 찾아 그것의 라우팅 테이블의 제1 행을 탐색할 수 있다. 발신 노드는 3으로 시작하는 노드 식별자의 라우팅 테이블 위치에서 노드 식별자 313221을 찾을 수 있다. 도 12를 참조하면, 발신 노드(1202)는 그 후 루트(1212)를 통하여 그것의 라우팅 테이블 내의 노드 식별자 (313221)와 관련된 어드레스에 있는 노드(1204)로 통신 매체를 이용하여 룩업 메시지를 전송할 수 있다. 노드(1204)는 그 후 룩업 메시지를 수신하고 32로 시작하는 노드 식별자, 예컨대 룩업 메시지 키 323310이 처음 2개의 숫자와 일치하는 노드 식별자를 찾아 그것의 라우팅 테이블(예컨대, 테이블의 제2 레벨)을 탐색할 수 있다. 노드(1204)는 32로 시작하는 노드 식별자의 위치에서 노드 식별자 322021을 찾을 수 있다. 노드(1204)는 그 후 루트(1214)를 통하여 그것의 라우팅 테이블 내의 노드 식별자 (322021)와 관련된 어드레스에 있는 노드(1206)로 통신 매체를 이용하여 룩업 메시지를 전송할 수 있다. 노드(1206)는 룩업 메시지를 수신하고 그것의 라우팅 테이블을 탐색할 수 있고, 룩업 메시지가 키의 루트 노드(1208)에 도달할 때까지 계속된다. 많은 경우에, 만일 노드 식별자들의 분포가 충분히 랜덤하고 균일하면 라우 팅은 대략 평균적으로
Figure 112005039640102-PAT00003
개 홉(hop)을 취할 수 있다(여기서 파라미터 N은 네트워크 내의 노드들의 수이고 b는 노드 식별자 공간의 베이스이다).
네트워크 보안
구조화된 네트워크 오버레이를 통하여 경보 분배의 탄력성(resiliency)을 증가시키기 위하여, 구조화된 피어 투 피어 오버레이 네트워크를 보안하기 위한 하나 이상의 보안 메커니즘이 이용될 수 있다. 임의의 보안 조치가 적절하게 이용될 수 있다. 보안 조치는 예를 들면 2002년 12월 운영 체제 설계 및 구현에 관한 5차 Usenix 심포지엄, Castro 등의 "Secure routing for structured P2P overlay networks", 299-314페이지에 설명된 기법들을 포함할 수 있고, 상기 문헌은 본 명세서에 참고로 통합된다. 부가적인 보안 메커니즘들은 정보 노출(information disclosure)을 저감시키고, (오버레이 레벨에서 정체 현상(congestion)을 야기하는) 서비스 거부(denial of service)를 저감시키고, 오버레이 노드들의 많은 비율이 감염된 경우에도 비감염 노드들에 브로드캐스트 경보를 송신하는 등을 할 수 있다.
한 가지 보안 조치는 피어 투 피어 네트워크에 들어가는 노드들에 노드 식별자들을 할당할 수 있다. 노드 식별자는 임의의 적당한 소스, 예컨대 하나 이상의 신뢰할 수 있는 인증 기관들(CAs)에 의해 할당될 수 있다. 인증 기관은 노드 식별자들이 노드 식별자 공간으로부터 실질적으로 랜덤하게 선택되도록 보증할 수 있고 및/또는 노드들이 노드 식별자를 위조하지 못하게 할 수 있다. 인증 기관은 예를 들어 특정 제품을 소유하는 지불, 증거, 자선을 위한 재정적 선물의 증거 등을 요구함으로써 노드 식별자를 인증하는 서명된 인증서의 유효성을 제어하는 기법들을 이용할 수 있다. 인증 기관을 이용하여 노드 식별자를 할당함으로써 Sybil 공격을 저감시킬 수 있다. 공격으로부터 인증 기관을 보호하기 위하여, 하나 이상의 인증 기관들은 오프라인일 수 있고 및/또는 오버레이 네트워크의 통상의 동작에 관여하지 않을 수 있다.
하나의 대안적인 및/또는 부가적인 보안 조치는 임의의 적당한 방식으로 성취될 수 있는 안전한 라우팅 테이블 유지 보수를 인에이블하는 것을 포함할 수 있다. 예를 들면, 라우팅 테이블 내의 각각의 필드를 채울 수 있는 노드 식별자들의 세트에 제약들이 부과될 수 있다. 식별자 i를 갖는 노드의 패스트리 라우팅 테이블에서, 행 r 및 열 c에 있는 필드는 노드 식별자 i와 처음 r개 숫자들을 공유하고 r+1번째 숫자에 값 c를 갖는 임의의 노드 식별자를 포함하도록 제약될 수 있다. 노드 식별자의 나머지 숫자들은 라우팅과 무관할 수 있다. 그러나, 라우팅 테이블 내의 엔트리는 도메인 내의 포인트 p에 가장 가까운 노드 식별자를 지시하거나 포함하도록 더 제약될 수 있다. 포인트 p는 노드 식별자 i와 처음 r개 숫자들을 공유하고 r+1번째 숫자에 값 c를 갖고 도메인 내의 유효 포인트 p의 노드 식별자를 제한하는 어떤 결정 가능한 일련의 숫자들을 갖는 노드 공간 내의 노드 식별자 위치로서 정의될 수 있다. 예를 들면, 포인트 p는 노드 식별자 i와 처음 r개 숫자들을 공유하고 r+1번째 숫자에 값 c를 갖고 i와 동일한 나머지 숫자들을 가진 노드 식별자로서 정의될 수 있다. 라우팅 테이블 엔트리들을 식별자 공간 내의 가상 포 인트들에 결합시킴으로써 만일 라우팅 업데이트가 가상 포인트 제약을 만족시키지 않을 경우 악의적인 노드에 의해 송신되고 정직한 노드에 의해 수신되는 상기 라우팅 업데이트의 용인(acceptance)을 저감시킬 수 있다. 이런 식으로, 악의적인 노드들이 차지할 수 있는 라우팅 테이블 엔트리들의 수가 제한될 수 있다. 이 기법은 2002년 12월 매사추세츠주 보스턴에서 열린 운영 체제 설계 및 구현에 관한 5차 Usenix 심포지엄, Castro 등의 "Secure routing for structured P2P overlay networks", 299-314페이지에 더 설명되어 있고, 이 문헌은 본 명세서에 참고로 통합된다.
부가적인 또는 대안적인 보안 조치는 정보 노출을 피하는 것을 포함할 수 있다. 보다 구체적으로, 네트워크 오버레이를 크롤링(crawling)하는 것이 불허(disallow)되거나 저지(oppose)될 수 있다. 따라서, 오버레이 멤버십 정보에 대한 액세스가 저감될 수 있다. 라우팅 테이블 내의 엔트리들을 제약하는 것과 같은 멤버십 정보의 누설을 피하기 위한 임의의 적당한 기법들이 이용될 수 있다. 예를 들면, i의 노드 식별자를 갖는 노드는 그것의 라우팅 테이블 내에 행 r 및 열 c에 슬롯을 채울 필요가 있다. 왜냐하면 노드 장애(node fail), 다른 노드에 의한 오버레이로부터의 이탈로 인해 그 슬롯이 비게 되었고, 및/또는 그 노드가 그것의 라우팅 테이블에 합류하여 초기화하기 때문이다. 그 슬롯을 채우기 위해, 노드는 해당 슬롯에 대한 제약을 정의하는 식별자 s, 예컨대, r+1번째 숫자에 값 c를 갖는 것을 제외하고 노드 식별자와 같은 식별자에 대한 요구 메시지를 라우팅할 수 있다. 그러한 요구가 노드에서 전달되면, 수신 노드는 그것의 라우팅 테이블 및/또 는 식별자 s에 가까운 리프 세트 내에 임의의 노드가 있는지를 체크할 수 있다. 수신 노드는 또한 식별자 s가 요구자의 노드 식별자에 대한 유효 포인트 p를 나타내지 않는지를 체크할 수 있다. 만일 그렇다면, 수신 노드는 그 요구를 버리거나, 그 요구를 보다 가까운 노드에 전송하거나, 및/또는 임의의 다른 적당한 조치를 취할 수 있다. 이런 식으로, 악의적인 노드들은 라우팅 테이블 엔트리 제약들을 만족시키는 노드들만을 발견할 수 있다. 일부 경우에, 다른 애플리케이션들은 경보의 분배를 지원하는 오버레이의 위에서 실행하는 것으로부터 제한될 수 있다. 왜냐하면 일부 경우에, 그 애플리케이션은 오버레이 멤버십에 관한 정보를 누설할 수 있기 때문이다.
또 다른 대안적인 및/또는 부가적인 보안 조치는 노드가 손상(compromise)될 때 오버레이 이웃들의 식별자들을 노출하는 것을 저감시킬 수 있다. 예를 들면, 오버레이는 운영 체제 커널 내부, 가상 머신 모니터, 하드웨어 칩 등에서 실행될 수 있다.
또 다른 대안적인 및/또는 부가적인 보안 조치는 피어 투 피어 네트워크 내의 노드들 간의 메시지 트래픽의 정체 현상을 저감시킬 수 있고, 이것은 네트워크에 대한 서비스 거부 공격(denial of service attack)의 발생 및/또는 영향을 저감시킬 수 있다. 네트워크 내의 정체 현상을 저감시키기 위해 각종 적당한 메커니즘들 중 임의의 하나 이상의 메커니즘이 이용될 수 있다. 예를 들면, 노드는 무한 개수의 메시지를 오버레이에 주입하지 못하게 될 수 있다. 부가적으로 또는 대안적으로, 오버레이 메시지들이 서명될 수 있고 각각의 노드는 메시지의 서명에 의해 식별된 오버레이 내의 다른 노드들에 대해 그것이 처리하는 메시지들의 레이트에 대한 제한을 행할 수 있다. 예를 들면, 인증 기관이 각 노드의 노드 식별자 및 공개 키 둘 다를 포함하는 인증서를 서명할 수 있다. 송신 노드가 오버레이 노드를 송신할 때, 그 노드는 그것의 개인 키를 이용하여 메시지를 서명하고 그 메시지를 라우팅할 수 있다. 인증 기관에 의해 서명된 노드의 인증서는 메시지에 첨부될 수 있다. 메시지를 라우팅하는 각각의 노드는 송신 노드가 메시지의 소스임을 검증할 수 있고(예컨대, 인증서를 이용하여 메시지의 서명을 검증할 수 있고) 그 특정 노드에 대해 그것이 라우팅한 메시지의 수(예컨대, 메시지 카운터 파라미터 내의)를 기록할 수 있다. 메시지 카운트 파라미터는 송신 노드로부터 라우팅되는 메시지의 수를 제한할 수 있는 소정의 임계값과 비교된다. 다른 예에서, 임의의 주어진 노드가 네트워크 내에 메시지를 삽입할 수 있는 레이트는 각각의 이웃 링크(예컨대, 로컬 노드의 노드 식별자와 유사한 노드 식별자들을 갖는 노드들)에 대한 레이트 한계를 적용함으로써 제한될 수 있다. 만일 인증 기관에 의해 노드 식별자들이 할당되면, 노드의 이웃들을 변경하는 것은 제한될 수 있다.
탄력성 있는 분배(Resilient Distribution)
경보의 분배, 예컨대, 그 경보에 대한 수신 노드의 식별은 임의의 적당한 방식으로 결정될 수 있다. 예를 들면, 도 3에 도시된 바와 같이, 경보가 발생되면 경보 모듈(350)로부터의 입력에 응답하여, 및/또는 수신된 경보가 검증되면 경보 검증 모듈(360)로부터의 입력에 응답하여 분배 모듈(370)이 트리거될 수 있다. 웜 공격 및/또는 프로그램 취약성을 나타내는 경보의 분배는 경보의 전파를 저지하는 하나 이상의 라우팅 노드들의 시도에 대해 탄력성이 있을 수 있다. 저지 노드(blocking node)는 경보 전파를 의도적으로 방해하는 악의적인 노드일 수 있고, 또는 그 노드는 메시지의 라우팅에 참여하는 것으로부터 손상(compromise)될 수 있다. 예컨대, 그 노드는 웜으로 감염될 수 있다. 따라서, 피어 투 피어 네트워크 내의 노드들에 경보를 송신하기 위한 분배 스킴(distribution scheme)은 다중 오버레이 경로들을 통하여 동일 노드에 경보를 송신할 수 있다. 보다 구체적으로, 노드는 다수의 경보들을 수신할 수 있고, 각각의 경보는 서로 다른 노드에서 발신되거나, 및/또는 서로 다른 라우팅 경로를 통하여 송신되는 것이다.
만일 단일 경로가 사용된다면, 그 경로가 저지될 수 있는 확률은 다음 식 3에 의해 근사(approximate)될 수 있다:
Figure 112005039640102-PAT00004
여기서 파라미터 f는 라우팅을 저지하고 있는 네트워크 내의 노드들의 비율(fraction)이다. 따라서, 예를 들어 모든 노드마다 복수의 독립된 멀티캐스트 트리들을 구축함으로써 복수의 독립된 경로들이 경보를 송신하기 위해 이용된다면, 적어도 하나의 경로가 정직한 및/또는 유능한 노드들만을 포함하는 확률은 다음 식 4에 의해 근사될 수 있다:
Figure 112005039640102-PAT00005
여기서 N은 네트워크 내의 노드들의 수이고,
Figure 112005039640102-PAT00006
은 트리 경로이고, p는 각각의 노드에 대한 독립된 경로들의 수이고, binom은 0개의 성공적인 루트, p개의 시도를 갖는 이항 분포(binomial distribution)이고, 각각의 시도에서의 성공적으로 라우팅하는 확률은
Figure 112005039640102-PAT00007
이다. 따라서, b=4이고 100,000개 노드 네트워크에서 50 퍼센트의 노드들이 손상될 때, 주어진 노드에 도달하는 90% 확률을 성취하기 위하여, 대략 40개 경로가 선택될 필요가 있을 것이다. 만일 네트워크 내의 각 노드에 단일 경보를 전송하기 위해 40개 경로가 이용된다면, 네트워크 비용은 p*N의 값에 의해 근사될 수 있다.
메시지를 라우팅하기 위해 선택된 독립된 경로들은 임의의 적당한 방식으로 선택될 수 있다. 예를 들면, 랜덤 경로들이 선택될 수 있다. 다른 예에서, 모든 노드마다 그것의 라우팅 테이블 내의 엔트리들의 전부 또는 일부에 경보를 송신할 수 있다. b=1인 피어 투 피어 네트워크에서, 모든 라우팅 테이블 엔트리들에 대한 완전한 라우팅 테이블 브로드캐스트는 대략
Figure 112005039640102-PAT00008
개 메시지의 메시지 비용을 가질 수 있다. 완전한 라우팅 테이블 브로드캐스트는 경보의 소스에 대해 양호한 경로가 존재하는 모든 노드에 도달할 가능성이 있다. 다른 예에서, 수신 노드들은 라우팅 테이블 내의 소정의 레벨 아래의 엔트리들에 의해 식별될 수 있다. 대안적으로 또는 부가적으로, 경보를 송신하는 노드는 리프 세트 내의 각각의 엔트리에 경보를 송신할 수 있다.
경보를 수신하고 인증하는 노드들은 분배 기법, 예컨대 다중 랜덤 경로에 따 라 다른 노드들에, 라우팅 테이블 엔트리들 내의 엔트리들에, 리프 세트 내의 엔트리들 등에 경보를 송신할 수 있다. 예를 들면, 만일 노드가 그것의 라우팅 테이블 내의 모든 노드들에 인증된 경보를 전송하는 경우에, 각각의 수신 노드는 그것의 라우팅 테이블 내에 그 수신 노드를 리스트하는 모든 노드들로부터 경보를 수신할 수 있고, 따라서, 네트워크 내의 모든 노드마다 다중 경로를 형성한다. 따라서, 경보는 네트워크 내의 실질적으로 모든 노드들에 분배될 수 있고 다중 경보들이 서로 다른 경로를 통하여 각각의 노드에 라우팅될 수 있어 경보의 저지를 저감시킨다.
부가적으로, 노드는 경보의 발신 및/또는 경보의 콘텐츠, 예컨대, 프로그램 내의 취약성의 표시를, 경보를 전송하기 전에, 검증할 수 있다. 만일 경보의 발신이 검증될 수 없지만 검증되는 취약성을 기술하는 것으로 확인되면, 노드는 경보를 전송할 수도 있고 아닐 수도 있다. 만일 경보의 발신이 검증될 수 있지만 취약성을 기술하지 않는 것으로 확인되면, 노드는 경보를 드롭할 수 있다.
노드는 경보를 이미 전송된 경보들과 비교할 수 있다. 만일 경보가 이전에 전송된 경보와 동일한 취약성을 기술한다면, 노드는 경보를 전송하지 않을 수 있다. 동일한 경보 메시지의 끊임없는 송신을 저감시키기 위하여, 경보는 그 경보가 중복인지 여부를 결정하기 위해 검사될 수 있는 경보 식별자나, 그 경보를 전송하는 특정 시간량을 나타내는 타임아웃 지시자나, 경보가 전송되는 횟수를 제한하는 전송 수의 카운터나, 또는 임의의 다른 적당한 지시자를 포함할 수 있다.
노드가 오버레이에 합류할 때, 그 합류 노드는 오버레이의 하나 이상의 노드 들, 예컨대 그것의 리프 세트 및/또는 라우팅 테이블 내에 존재하는 노드들에 대해 관련 경보들을 전송하도록 요구할 수 있다. 관련 경보들은 오버레이 내의 노드들에 의해 저장된 임의의 적당한 경보, 예를 들어, 합류 노드가 마지막으로 오버레이에의 접속을 떠난 이후의 인증된 경보들, 소정 시간 기간 내의 경보들 등을 포함하는 임의의 적당한 경보일 수 있다. 경보 요구를 수신하는 노드는 요구된 경보들의 전부 또는 일부를 리턴할 수 있다. 부가적으로 또는 대안적으로, 경보 요구를 수신하는 노드는 그것이 수신 및/또는 저장한 경보들의 요약을 송신할 수 있다. 합류 노드는 그 요약 내의 식별된 경보들의 부분을 선택하고 네트워크 오버레이 내의 수신 노드 및/또는 다른 노드들에게 그 특정 경보들을 요구할 수 있다. 경보 요약은 적절하게 임의의 적당한 형태를 취할 수 있다.
도 12의 예시적인 피어 투 피어 네트워크를 참조하면, 노드(1202)는 노드들(1220, 1222, 1224, 1226)에 대한 엔트리들을 포함하는 리프 세트(1232)를 가질 수 있다. 노드(1202)는 노드들(1220, 1222, 1224, 1226)에게 경보를 송신할 수 있고 이들 노드들 각각은 그들의 리프 세트들 내에 포함된 노드들에 인증된 경보를 전송할 수 있다. 예를 들면, 노드(1222)는 노드들(1202, 1220, 1244, 1246)을 포함하는 리프 세트(1242)를 가질 수 있다. 이런 식으로, 노드(1220)는 노드(1202) 및 노드(1222) 양쪽 모두로부터 경보를 수신할 수 있다. 더욱이, 각각의 후속 리프 세트가 경보를 송신함에 따라서, 경보는 네트워크 여기저기로 분배된다.
더욱이, 분배 시스템은 오버레이 네트워크의 사이즈가 커지거나 줄어듦에 따라서 자동으로 스케일링할 수 있다. 라우팅 테이블 및/또는 리프 세트 분배 기법 은 피어 투 피어 네트워크의 임의의 노드가 독립적으로 웜 봉쇄 시스템에 합류하거나 탈퇴하도록 허용할 수 있다. 더욱이, 자기 인증 경보의 분배는 파트너들 간의 외연적 합의(extensive agreements)를 요구하지 않을 수 있다. 보다 구체적으로, 각각의 노드는 단일 포인트, 예컨대, ISP 또는 다른 중앙 서버에 의존하지 않고, 그들을 통지하거나 및/또는 감염으로부터 보호할 수 있다.
웜 봉쇄 시스템의 검출, 경보 인증, 경보 분배, 및/또는 응답 모듈은 단일 중앙 프로세서에 의존하지 않기 때문에, 어떠한 중앙 인프라(centra infrastructure)도 전용 공격에 대한 타깃으로 기능할 수 없고 및/또는 단일 포인트 장애(single point failure)가 될 수 없다. 일부 경우에, 웜 봉쇄 시스템의 인프라를 더 분산(de-centralize)시키기 위하여, 봉쇄 시스템의 일부(예컨대, 피어 투 피어 네트워크의 노드의 리프 세트의 일부)인 모든 노드가 소모성(expendable)일 수 있다. 이런 식으로, 봉쇄 시스템 내의 노드들의 전부 또는 적어도 일부가 동일한 타입의 기능들을 수행할 수 있다(비록 그것들이 서로 다르게 구현될 수는 있지만).
예컨대 인터넷 프로토콜 멀티캐스트 및 풀 기반(pull-based) 메커니즘들과 같은 다른 분배 또는 확산 기법들도 적당할 수 있다.
전개 시나리오(Deployment Scenarios)
위에서 언급한 바와 같이, 오버레이 네트워크의 하나 이상의 노드들은 웜 공격 및/또는 소프트웨어 프로그램 내의 취약성들을 검출하는 검출 모듈을 실행할 수 있다. 검출 모듈은 하나 이상의 전용 컴퓨팅 장치(예컨대, 꿀단지(honeypot) 타입 의 전개에서), 하나 이상의 컴퓨팅 장치들이 아이들 상태일 때 그 하나 이상의 컴퓨팅 장치들(예컨대, 스크린 세이버 타입의 애플리케이션의 일부로서), 및 정상 제작 전개(normal production deployments)의 일부로서 하나 이상의 노드들의 임의의 조합에 의해 실행될 수 있다.
웜이 확산 중일 때 경보를 브로드케스트하기 위해 이용되는 오버레이 네트워크는 전체 인터넷 또는 다른 통신 네트워크에 걸쳐서 전개될 수 있고, 단일 기업 로컬 네트워크의 노드들에 걸쳐서 전개될 수 있고, 특정 클래스의 사용자들(예컨대, 소프트웨어 패키지의 사용자들)로서 정의된 노드들에 걸쳐서, 등등에 걸쳐서 전개될 수 있다.
위에서 언급한 바와 같이, 경보 메시지들은 취약성 또는 웜 공격이 검출될 때 자동으로 발생될 수 있다. 더욱이, 경보는 경보 메시지의 수신과 동시에 및/또는 경보 메시지의 인증과 동시에 소정의 분배 프로토콜에 따라서 자동으로 전송될 수 있다. 다른 경우에, 수동 또는 인간 상호 작용이 경보를 발생시키고 및/또는 전송하기 위한 감시(oversight) 및/또는 인가(authorization)를 제공할 수 있다.
만일 네트워크의 모든 부분 또는 적어도 일부분이 봉쇄 시스템에서의 검출, 경보 인증, 및/또는 경보 분배에 관여한다면, 대규모 공격이 일어나기 전에라도 공격자들이 시스템에 침입할 가능성이 있을 수 있다. 시스템 내의 임의의 노드가 악의적일 수 있고 각각의 노드가 서로 다른 엔티티에 의해 소유될 수 있다고 가정하면, 노드들이 인증 기관에 의해 서명되는 식별 정보를 갖고 있다 하더라도 노드들 간에 신뢰가 없을 수 있다. 그래도, 노드들은 알려지지 않은 취약성들을 부당 이 용하는 웜을 저지하는 작업에서 공동 협력할 수 있다. 악의적인 노드들을 식별하는 것은 악의적인 노드들에 의해 부당 이용될 수 있는 메커니즘들을 도입할 수 있다. 따라서, 봉쇄 시스템 아키텍처는, 상술한 바와 같이, 네트워크 내의 기존의 악의적이지만 알려지지 않은 노드들 주위를 허용하고 및/또는 설계하도록 개발될 수 있다.
동작 시에, 웜 봉쇄 시스템은 웜 또는 프로그램 취약성에 대한 검출, 경보 발생, 경보 인증, 경보 분배, 및/또는 응답을 제공할 수 있다. 보다 구체적으로, 일부 경우에, 봉쇄 시스템에 의해 보호를 받는 네트워크의 각 노드는 공격 또는 취약성에 대한 검출, 경보 발생, 경보 인증, 경보 분배, 및/또는 응답에 관여할 수 있다. 예를 들면, 도 3을 참조하면, 피어 투 피어 네트워크(310)의 검출 노드는 검출 모듈(340), 경보 모듈(350), 분배 모듈(370), 및 응답 모듈(380)을 포함할 수 있다. 위에서 언급한 바와 같이, 검출 모듈은 예컨대 동적 데이터 흐름 분석을 이용함으로써 웜 공격 및/또는 소프트웨어 취약성을 검출할 수 있다. 임의의 적당한 런타임 분석 시스템이 이벤트들을 추적하기 위해 이용될 수 있다.
웜 공격 및/또는 프로그램 취약성을 검출하면, 검출 모듈(340)은 하나 이상의 보호 조치를 트리거하는 응답 모듈(380)과 통신할 수 있다. 식별된 웜 및/또는 프로그램 취약성을 비감염된 노드들에 통신하기 위하여, 검출 노드(310)는 경보 모듈(350)을 이용하여 경보 메시지(330)를 발생시킬 수 있다. 위에서 언급한 바와 같이, 경보 메시지는 자기 인증의 것일 수 있고 및/또는 취약성이 있는 프로그램 식별자, 취약성 타입 지시자, 이벤트 리스트, 하나 이상의 검증 힌트, 및 응답 식 별자 중 하나 이상을 포함할 수 있다. 경보 모듈(350)은 분배 프로토콜에 따라서 네트워크의 하나 이상의 노드들에 경보 메시지(330)를 송신하는 분배 모듈(370)과 통신할 수 있다. 예를 들면 위에서 언급한 바와 같이, 경보 메시지는 네트워크 오버레이 프로토콜에 따라서 유지된 라우팅 테이블에서 식별된 노드들에 분배될 수 있다. 부가적으로 또는 대안적으로, 경보 메시지는 피어 투 피어 오버레이 프로토콜에 따라서 유지된 리프 세트에서 식별된 모든 노드들에 분배될 수 있다.
도 3에 도시된 바와 같이 경보 메시지(330)는 노드(310)의 리프 세트에서 식별된 수신 노드(320)에 송신될 수 있다. 수신 노드는 경보 메시지(330)를 수신하고 경보 검증 모듈(360)을 이용하여 경보 메시지를 인증할 수 있다. 만일 경보가 인증되면, 수신 노드(320)는 응답 모듈(380)을 이용하여 하나 이상의 보호 조치를 트리거할 수 있다. 통신 네트워크를 통하여 경보(330)를 분배하기 위하여, 수신 모듈(320)은 분배 모듈(370)을 이용하여 분배 프로토콜에 따라서 네트워크의 하나 이상의 노드들에 경보 메시지(330)를 전송할 수 있다. 예를 들면 위에서 언급한 바와 같이, 경보 메시지는 라우팅 테이블에서 식별된 노드들 및/또는 피어 투 피어 오버레이 프로토콜에 따라서 유지된 리프 세트에 분배될 수 있다.
하나의 실험에서, SQL 슬래머와 유사한 웜에 의한 공격에서 생존하는 노드들의 비율(fraction)은 시스템 내의 검출기들의 비율의 함수로서 결정될 수 있다. 하나의 실험에서, 100,000개 노드(예컨대, 호스트 컴퓨팅 장치들)의 집단(population)이 네트워크의 일부였고 10개가 감염되는 것으로 시뮬레이션되었다. 더욱이, 네트워크 내의 노드들 중 10%가 웜 공격 전에도 악의적인 것으로 상정되었 다. 감염 비율 β는 대략 0.117인 것으로 추정되었고, 이것은 인터넷 상의 SQL 슬래머의 관찰된 거동과 근사한 것으로 생각된다. 실험의 예시적인 결과들이 도 13의 그래프(1300)에 예시되어 있고 검출기들의 비율은 축(1302)을 따라서 표시되어 있고 생존 노드들의 비율은 축(1304)을 따라서 표시되어 있다. 도 13의 그래프는 네트워크 내의 검출기 노드들의 작은 비율, 예컨대, 0.001이면 웜 감염을 취약성이 있는 집단의 10% 미만으로 봉쇄하기에 충분할 수 있음을 보여준다.
예시된 실시예들을 참조하여 본 발명의 원리들을 설명하고 예시하였지만, 예시된 실시예들은 그러한 원리들을 일탈하지 않고 구성 배열 및 상세에서 변경될 수 있는 것을 알 것이다.
예를 들면, 하나의 방법은 수신 컴퓨팅 장치에서, 프로그램 식별자 및 이벤트 리스트를 포함하는 자기 인증 경보를 수신하는 단계 - 상기 프로그램 식별자는 검출된 취약성을 갖는 프로그램을 식별하고, 상기 이벤트 리스트는 검출된 취약성을 예시하는 하나 이상의 비결정적 이벤트들을 포함함 - 와; 상기 수신 컴퓨팅 장치가 상기 검출된 취약성을 갖는 프로그램을 포함하는지 여부를 결정하는 단계와; 상기 이벤트 리스트가 상기 검출된 취약성을 예시함을 검증하는 단계를 포함할 수 있다. 상기 검증 단계는 상기 프로그램에서 상기 이벤트 리스트를 실행하는 단계를 포함할 수 있다. 상기 검증 단계는 상기 프로그램의 명령들로부터 논리 안전 조건(logic safety condition)을 발생시키는 단계와; 상기 이벤트 리스트의 시작에서의 상기 프로그램의 상태를 정의하는 사전 조건을 정의하는 단계와; 상기 이벤트 리스트에 기초하여 취약성 술어(predicate)를 정의하는 단계와; 술어 계산법 (predicate calculus)에 기초하여 상기 논리 안전 조건, 상기 사전 조건, 및 상기 취약성 술어를 평가하는 단계를 포함할 수 있다. 상기 방법에서, 상기 자기 인증 경보는 상기 프로그램에서 검출된 취약성의 타입을 지시하기 위한 취약성 타입 식별자를 포함할 수 있고, 상기 검증 단계는 상기 취약성 타입 식별자를 참조하는 것을 포함한다. 상기 방법에서, 상기 자기 인증 경보는 상기 이벤트 리스트가 상기 검출된 취약성을 어떻게 예시하는지에 대한 표시를 제공하는 하나 이상의 검증 힌트를 포함할 수 있다. 상기 이벤트 리스트를 검증하는 단계는 상기 하나 이상의 검증 힌트에 기초하여 상기 이벤트 리스트를 변경하여 성공적인 검증을 신호하는 상기 프로그램 내에 로딩된 검증 함수의 실행을 트리거하는 단계를 포함할 수 있다. 상기 방법에서, 상기 이벤트 리스트는 감염 시도들을 검출하는 소프트웨어 또는 하드웨어 인스트루먼테이션(instrumentation)을 갖는 프로그램의 실행 중에 로깅된 이벤트들로부터 파생될 수 있다. 상기 방법은 상기 이벤트 리스트를 검증하는 것에 응답하여, 상기 자기 인증 경보를 적어도 하나의 다른 노드에 전송하는 단계를 더 포함할 수 있다. 상기 자기 인증 경보가 전송되는 경우에, 상기 적어도 하나의 다른 노드 중 적어도 하나의 노드가 오버레이 네트워크 내의 이웃들의 세트로부터 검색(retrieve)될 수 있다. 상기 자기 인증 경보가 전송되는 경우에, 상기 적어도 하나의 다른 노드 중 적어도 하나의 노드가 상기 오버레이 네트워크 내의 모든 이웃 노드들을 포함할 수 있다. 상기 방법은 상기 이벤트 리스트에 기초하여 상기 취약성을 해결하는 패치 또는 필터를 발생시키는 단계를 더 포함할 수 있다.
다른 예에서, 자기 인증 경보 데이터 구조가 저장되어 있는 하나의 컴퓨터 판독 가능 매체는 웜 공격에 대해 검출된 취약성을 갖는 프로그램을 식별하는 프로그램 식별자를 나타내는 데이터를 담고 있는 제1 데이터 필드와; 상기 검출된 취약성을 예시하는 하나 이상의 비결정적 이벤트들을 포함하는 이벤트 리스트를 나타내는 데이터를 담고 있는 제2 데이터 필드와; 상기 프로그램에서 검출된 취약성의 타입을 지시하기 위한 취약성 타입 식별자를 나타내는 데이터를 담고 있는 제3 데이터 필드를 포함할 수 있다. 상기 컴퓨터 판독 가능 매체에서, 상기 취약성 타입 지시자는 상기 프로그램의 실행을 임의 코드에 방향 전환(redirect)하는 능력이나, 임의 코드를 실행하는 능력이나, 또는 함수에 임의 인수(argument)를 공급하는 능력을 지시할 수 있다. 상기 컴퓨터 판독 가능 매체는 상기 이벤트 리스트가 상기 검출된 취약성을 어떻게 예시하는지에 대한 표시를 제공하는 하나 이상의 검증 힌트를 나타내는 데이터를 담고 있는 제4 데이터 필드를 더 포함할 수 있다. 상기 하나 이상의 검증 힌트는 상기 이벤트 리스트 내의 이벤트 및 상기 취약성 타입에 따라서 실행될 코드의 임의 어드레스나, 실행될 임의 코드나, 또는 함수에 대한 임의 인수의 상기 이벤트 내의 오프셋을 지시할 수 있다. 상기 컴퓨터 판독 가능한 매체는 상기 검출된 취약성을 해결하기에 적당한 패치 및 필터 중 적어도 하나를 나타내는 데이터를 담고 있는 제5 데이터 필드를 더 포함할 수 있다.
다른 예에서, 컴퓨터 실행 가능 컴포넌트들을 갖는 하나 이상의 컴퓨터 판독 가능 매체는 웜 공격을 검출하기 위한 수단과; 검출된 웜에 응답하여 자기 인증 경보를 발생시키기 위한 수단과; 상기 자기 인증 경보를 네트워크 오버레이의 적어도 하나의 다른 노드에 분배하기 위한 수단을 포함할 수 있다. 상기 컴퓨터 판독 가 능 매체는 구조화된 네트워크 오버레이의 리프 세트 및 라우팅 테이블 중 적어도 하나를 더 포함할 수 있고, 상기 자기 인증 경보를 분배하기 위한 수단은 상기 라우팅 테이블과 상기 리프 세트 중 적어도 하나에 액세스하여 상기 적어도 하나의 다른 노드를 결정한다. 상기 컴퓨터 판독 가능 매체는 상기 라우팅 테이블 내의 엔트리들의 누설을 저감시키기 위한 수단을 더 포함할 수 있다. 상기 자기 인증 경보를 발생시키기 위한 수단은 이벤트 로그에 액세스하여 상기 웜 공격에 의해 부당 이용될 수 있는 프로그램 내의 취약성을 예시하는 적어도 하나의 비결정적 이벤트를 결정할 수 있다. 상기 컴퓨터 판독 가능 매체는 수신된 자기 인증 경보를 유효성 검사(validate)하기 위한 수단을 포함할 수 있고, 상기 분배하기 위한 수단은 프로그램 내의 취약성 및 웜 공격 중 적어도 하나를 지시하는 상기 수신된 자기 인증 경보의 검증에 의해 트리거된다.
또 다른 예에서, 컴퓨터 판독 가능 명령들을 담고 있는 하나 이상의 컴퓨터 판독 가능 매체로서, 상기 컴퓨터 판독 가능 명령들은, 실행될 때, 컴퓨팅 시스템의 메모리의 제1 부분에 수신된 정보를 기입하거나 저장하는 명령을 수신하는 단계와; 상기 수신된 정보가 신뢰할 수 없는 소스로부터 또는 '불결'(dirty)을 표시하는 불결 지시자를 갖는 메모리의 부분으로부터 수신되는 경우에 '불결'을 표시하는 제1 불결 지시자를 상기 메모리의 상기 제1 부분과 관련시키는 단계와; 상기 수신된 정보를 프로그램 카운터에 로딩하거나 상기 수신된 정보를 실행하는 명령을 수신하는 단계와; 상기 제1 불결 지시자가 '불결'을 표시하면 프로그램 취약성의 표시를 제공하는 단계를 포함하는 방법을 수행할 수 있다. 수신된 정보를 로딩하거 나 실행하는 상기 수신된 명령은 데이터를 이동시키는 명령, 산술 및 논리 연산 명령, 및 프로그램의 제어 흐름을 변경하는 명령을 포함할 수 있다. 프로그램 취약성의 표시를 제공하는 단계는 상기 수신된 정보에 기초하여 패치 또는 필터를 발생시키는 단계를 포함할 수 있다. 프로그램 취약성의 표시를 제공하는 단계는 적어도 하나의 다른 노드에 자기 인증 경보를 송신하는 단계를 포함할 수 있다. 상기 컴퓨터 판독 가능 매체는 오버레이 네트워크 내의 이웃들의 세트로부터 상기 적어도 하나의 다른 노드를 식별하는 노드 식별자를 검색하는 단계를 더 포함할 수 있다. 상기 컴퓨터 판독 가능 매체는 상기 수신된 정보의 소스를 식별하는 입력 이벤트 식별자를 상기 메모리의 제1 부분과 관련시키는 단계를 더 포함할 수 있다. 상기 제1 불결 지시자는 상기 입력 이벤트 식별자를 포함할 수 있다. 상기 컴퓨터 판독 가능 매체는 상기 수신된 정보로부터 새로운 데이터를 계산하는 단계와, 상기 새로운 데이터를 상기 메모리의 제2 부분에 저장하는 단계와, 상기 수신된 정보가 신뢰할 수 없는 소스로부터 또는 불결을 표시하는 불결 지시자를 갖는 메모리의 부분으로부터 수신되는 경우에 '불결'을 표시하는 제2 불결 지시자를 상기 메모리의 상기 제2 부분과 관련시키는 단계를 더 포함할 수 있다. 상기 제2 불결 지시자는 상기 수신된 정보로부터 상기 새로운 데이터를 계산하는 적어도 하나의 단계를 나타내는 데이터 흐름 그래프 또는 상기 정보가 수신되는 메모리 부분들의 상기 불결 지시자 내의 상기 데이터 흐름 그래프를 포함할 수 있다. 상기 메모리의 상기 제1 부분은 CPU 레지스터, 메모리 페이지, 및 상기 페이지 내의 메모리 위치로 이루어지는 그룹 중 적어도 하나를 포함할 수 있다. 상기 메모리의 상기 제1 부분은 메 모리 위치를 포함할 수 있고, 상기 메모리 위치는 제1 메모리 페이지의 일부이고, 상기 방법은 상기 제1 불결 지시자에 기초하여 페이지 불결 지시자를 상기 메모리 페이지와 관련시키는 단계를 더 포함한다. 상기 수신된 정보를 프로그램 카운터 내에 로딩하거나 상기 수신된 정보를 실행하는 명령을 수신하는 단계는 상기 수신된 정보를 실행하는 명령을 수신하는 단계를 포함할 수 있고, 상기 제1 불결 지시자가 '청결'을 표시하면, 상기 수신된 정보에 의해 참조되는 명령을 저장하는 상기 메모리의 제3 부분과 관련된 제3 불결 지시자를 검사한다. 상기 컴퓨터 판독 가능 매체는 상기 제3 불결 지시자가 '불결'을 표시하면 프로그램 취약성의 표시를 제공하는 단계를 더 포함할 수 있다.
또 다른 예에서, 하나의 방법은 저장된 값의 소스가 신뢰할 수 없는 소스인지 신뢰할 수 있는 소스인지를 추적(track)하는 적어도 하나의 오염 데이터 스토어를 유지하는 단계와; 상기 저장된 값을 프로그램 포인터 내에 로딩하기 전에, 상기 적어도 하나의 오염 데이터 스토어를 검사하는 단계와; 만일 상기 적어도 하나의 오염 데이터 스토어가 상기 저장된 값이 신뢰할 수 있는 소스로부터의 것임을 지시하면, 상기 저장된 값을 로딩하는 단계와; 만일 상기 적어도 하나의 오염 데이터 스토어가 상기 저장된 값이 신뢰할 수 없는 소스로부터의 것임을 지시하면, 상기 저장된 값을 자동으로 로딩하는 것을 거부하는 단계와; 상기 저장된 값을 자동으로 로딩하는 것을 거부하는 것에 응답하여, 상기 저장된 값의 저장 위치를 결정하고 상기 적어도 하나의 오염 데이터 스토어로부터 상기 저장된 값의 입력 소스를 결정하는 단계를 포함할 수 있다. 상기 적어도 하나의 오염 데이터 스토어는 상기 저 장된 값을 계산하는 데 이용되는 단계들의 세트를 나타내는 데이터 흐름 그래프를 포함할 수 있다. 입력 소스를 결정하는 단계는 입력 소스 및 상기 저장된 값의 상기 입력 소스 내의 오프셋을 결정하는 단계를 포함할 수 있다. 상기 방법은 만일 상기 적어도 하나의 오염 데이터 스토어가 상기 저장된 값이 신뢰할 수 있는 소스로부터의 것임을 지시하면, 상기 저장된 값에 의해 지시되는 명령이 신뢰할 수 있는 소스로부터의 것인지를 결정하는 단계와; 상기 저장된 값 및 상기 명령 모두가 적어도 하나의 신뢰할 수 있는 소스로부터의 것인 경우에만 상기 명령을 실행하는 단계를 더 포함할 수 있다.
또 다른 예에서, 컴퓨터 실행 가능 컴포넌트들을 담고 있는 하나 이상의 컴퓨터 판독 가능 매체는 동적 데이터 흐름 분석을 이용하여 웜 공격을 검출하기 위한 수단과; 웜 공격의 검출에 응답하여, 경보를 발생시키기 위한 수단과; 상기 경보의 발생에 응답하여, 상기 경보를 분배하기 위한 수단을 포함할 수 있다. 상기 컴퓨터 판독 가능 매체는 상기 검출 수단의 상기 동적 데이터 흐름 분석에 기초하여 패치 또는 필터를 발생시키기 위한 수단을 더 포함할 수 있다. 상기 경보 발생 수단은 상기 검출 수단의 상기 동적 데이터 흐름 분석에 적어도 일부분 기초하여 자기 인증 경보를 발생시키기 위한 수단을 포함할 수 있다.
또 다른 예에서, 하나의 방법은 웜 공격에 의해 부당 이용될 수 있는 프로그램의 취약성을 예시하는 제1 실행 경로를 검색하는 단계와; 상기 제1 실행 경로의 적어도 일부분을 결정하는 착신 메시지 내의 적어도 하나의 바이트를 결정하는 단계와; 상기 적어도 하나의 바이트의 존재를 검증하기 위해 테스트될 수 있는 상기 결정된 바이트에 대한 적어도 하나의 조건을 결정하는 단계와; 상기 적어도 하나의 조건으로 새로운 메시지의 적어도 일부분을 테스트하여 웜 공격의 존재를 검출하는 단계와; 상기 테스트에 기초하여 상기 새로운 메시지를 처리하는 것을 거부하는 단계를 포함할 수 있다. 상기 제1 실행 경로는 상기 취약성을 검출하는 데 이용된 이벤트 로그로부터 파생될 수 있다. 상기 방법은 다른 컴퓨팅 장치로부터 자기 인증 경보를 수신하는 단계를 더 포함할 수 있고, 상기 제1 실행 경로를 검색하는 단계는 상기 자기 인증 경보를 구문 분석하여 이벤트 리스트를 검색하는 단계를 포함할 수 있다. 상기 적어도 하나의 조건을 결정하는 단계는 불결한 메모리 부분이 제어 흐름 결정에 이용될 때 상기 불결한 메모리 부분으로부터의 데이터에 대해 계산된 논리 연산을 기록하는 단계를 포함할 수 있다. 상기 방법은 필터 조건을 '참'으로 초기화하는 단계를 더 포함할 수 있고, 기록하는 단계는 상기 필터 조건을 상기 필터 조건의 이전 값과 상기 적어도 하나의 조건의 논리 AND 함수로서 업데이트하는 단계를 포함한다. 상기 방법은 상기 불결한 메모리 부분의 데이터 흐름 그래프를 포함하는 명령들의 시퀀스를 기록하는 단계를 더 포함할 수 있다. 상기 방법은 상기 취약성을 지시하는 자기 인증 경보 내에 상기 필터 조건을 포함시키는 단계와, 상기 자기 인증 경보를 다른 컴퓨팅 장치에 송신하는 단계를 더 포함할 수 있다. 상기 제1 실행 경로는 비결정적 이벤트들의 이벤트 리스트를 포함할 수 있다.
다른 예에서, 컴퓨터 판독 가능 명령들을 담고 있는 하나 이상의 컴퓨터 판독 가능 매체로서, 상기 컴퓨터 판독 가능 명령들은, 실행될 때, 필터 조건 값을 ' 참'으로 초기화하는 단계와; 프로그램 카운터 내에 로딩되거나 실행될 데이터를 담고 있는 메모리의 부분과 관련된 불결 지시자의 값을 결정하는 단계와; 조건부 제어 이전을 수행하는 명령을 수신하는 단계와; 상기 필터 조건의 이전 값 및 상기 불결 지시자의 결정된 값에 기초하여 상기 필터 조건을 업데이트하는 단계와; 프로그램 내의 취약성을 부당 이용하는 웜 공격을 저지하기 위해 착신 메시지에 대해 상기 필터 조건을 적용하는 단계를 포함하는 방법을 수행할 수 있다. 상기 하나 이상의 컴퓨터 판독 가능 매체는 검출 모듈로부터 상기 취약성의 표시를 수신하는 단계를 더 포함할 수 있다. 상기 하나 이상의 컴퓨터 판독 가능 매체는 자기 인증 경보로부터 상기 취약성의 표시를 수신하는 단계를 더 포함할 수 있다. 상기 하나 이상의 컴퓨터 판독 가능 매체는 상기 취약성을 지시하는 자기 인증 경보에 상기 필터 조건을 포함시키는 단계와, 상기 자기 인증 경보를 다른 컴퓨팅 장치에 송신하는 단계를 더 포함할 수 있다. 상기 불결 지시자는 메모리의 부분 내에 포함된 값을 계산하는 데 이용된 명령의 시퀀스를 포함하는 데이터 흐름 그래프를 포함할 수 있다.
또 다른 예에서, 컴퓨터 실행 가능 컴포넌트들을 갖는 하나 이상의 컴퓨터 판독 가능 매체는 웜에 의해 부당 이용될 수 있는 프로그램 내의 취약성을 예시하는 명령들의 시퀀스를 자동으로 발생시키기 위한 수단과; 상기 명령들의 시퀀스에 기초하여 상기 취약성에 대한 레졸루션(resolution)을 자동으로 발생시키기 위한 수단을 포함할 수 있다. 명령들의 시퀀스를 자동으로 발생시키기 위한 수단은 웜 공격을 검출하기 위한 수단을 포함할 수 있다. 명령들의 시퀀스를 자동으로 발생 시키기 위한 수단은 수신된 자기 인증 경보를 인증하기 위한 수단을 포함할 수 있다. 레졸루션을 자동으로 발생시키기 위한 수단은 상기 취약성을 부당 이용하는 수신된 명령들에 대한 필터를 발생시키기 위한 수단을 포함할 수 있다. 레졸루션을 자동으로 발생시키기 위한 수단은 상기 프로그램 내의 취약성에 대한 패치를 발생시키기 위한 수단을 포함할 수 있다. 상기 하나 이상의 컴퓨터 판독 가능 매체는 상기 명령들의 시퀀스 및 상기 레졸루션 중 적어도 일부를 포함하는 자기 인증 경보를 발생시키기 위한 수단을 더 포함할 수 있다. 상기 하나 이상의 컴퓨터 판독 가능 매체는 상기 자기 인증 경보를 네트워크 오버레이의 적어도 하나의 다른 노드에 분배하기 위한 수단을 더 포함할 수 있다.
본 발명의 원리가 적용될 수 있는 다수의 가능한 실시예들을 고려할 때, 상세 설명된 실시예들은 예시일 뿐이고 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다는 것을 알아야 할 것이다. 오히려, 다음의 청구항들 및 그에대한 균등물들의 범위 및 의미 내에 들 수 있는 모든 그러한 실시예들을 본 발명으로서 청구한다.
본 발명의 일 양태에 따른 봉쇄 시스템은 동적 흐름 분석(dynamic flow analysis)을 포함하는 다양한 기법들을 통하여 많은 부류의 공격들을 검출할 수 있는 검출 시스템을 포함할 수 있다. 본 발명의 다른 양태에 따른 봉쇄 시스템은 검출된 웜에 관한 지식을 안전하게 공유하기 위한 토대로서 경보를 발생시키고 및/또는 송신하는 것을 포함할 수 있다. 경보는 주어진 프로그램이 취약성을 갖고 있음 을 증명하는 정보를 포함할 수 있다. 경보는 그것의 진정성(authenticity)이 컴퓨팅 시스템에 의해 독립적으로 검증될 수 있는 자기 인증(self-certifying)의 것일 수 있다. 또한, 봉쇄 시스템은 웜 발생 중에 활발한 공격 중일 때에도, 비감염된 노드들에 시기적절하게 경보를 전파하기 위한 탄력성이 있고(resilient) 및/또는 자기 조직적인(self-organizing) 프로토콜을 포함할 수 있다. 또한, 봉쇄 시스템은 웜이 신속히 확산하여 소프트웨어 패키지들 내의 알려지지 않은 취약성들을 부당 이용하는 중에도, 다수의 상호 불신하는 컴퓨터들이 그 웜을 봉쇄하는 작업에서 공동 협력할 수 있게 하는 시스템 아키텍처를 포함할 수 있다. 또한, 봉쇄 시스템은 미래의 공격들로부터 컴퓨팅 장치를 보호할 수 있는 보호 시스템을 포함할 수 있다.

Claims (22)

  1. a) 수신 컴퓨팅 장치에서, 프로그램 식별자 및 이벤트 리스트를 포함하는 자기 인증 경보(self-certifying alert)를 수신하는 단계 - 상기 프로그램 식별자는 검출된 취약성을 갖는 프로그램을 식별하고, 상기 이벤트 리스트는 검출된 취약성을 예시하는 하나 이상의 비결정적 이벤트들(non-deterministic events)을 포함함 -,
    b) 상기 수신 컴퓨팅 장치가 상기 검출된 취약성을 갖는 프로그램을 포함하는지 여부를 결정하는 단계, 및
    c) 상기 이벤트 리스트가 상기 검출된 취약성을 예시함을 검증하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 검증하는 단계는 상기 프로그램에서 상기 이벤트 리스트를 실행하는 단계를 포함하는 방법.
  3. 제1항에 있어서,
    상기 검증하는 단계는 상기 프로그램의 명령들로부터 논리 안전 조건(logic safety condition)을 발생시키는 단계와, 상기 이벤트 리스트의 시작부에 상기 프로그램의 상태를 정의하는 사전 조건(pre-condition)을 정의하는 단계와, 상기 이 벤트 리스트에 기초하여 취약성 술어(vulnerable predicate)를 정의하는 단계와, 술어 계산법(predicate calculus)에 기초하여 상기 논리 안전 조건, 상기 사전 조건, 및 상기 취약성 술어를 평가하는 단계를 포함하는 방법.
  4. 제1항에 있어서,
    상기 자기 인증 경보는 상기 프로그램에서 검출된 취약성의 타입을 지시하기 위한 취약성 타입 식별자를 포함하고, 상기 검증하는 단계는 상기 취약성 타입 식별자를 참조하는 것을 포함하는 방법.
  5. 제1항에 있어서,
    상기 자기 인증 경보는 상기 이벤트 리스트가 상기 검출된 취약성을 어떻게 예시하는지에 대한 표시(indication)를 제공하는 하나 이상의 검증 힌트를 포함하는 방법.
  6. 제1항에 있어서,
    수신된 정보를 컴퓨팅 시스템의 메모리의 제1 부분에 기입하거나 저장하는 명령을 수신하는 단계와, 상기 수신된 정보가 신뢰할 수 없는 소스(untrusted source)로부터 또는 '불결'(dirty)을 표시하는 불결 지시자(dirty indicator)를 갖는 메모리의 부분으로부터 수신되는 경우에 '불결'을 표시하는 제1 불결 지시자를 상기 메모리의 상기 제1 부분과 관련시키는 단계와, 상기 수신된 정보를 프로그램 카운터 내에 로딩하거나 상기 수신된 정보를 실행하는 명령을 수신하는 단계와, 상기 제1 불결 지시자가 '불결'을 표시하면, 상기 프로그램 식별자 및 상기 이벤트 리스트를 포함하는 프로그램 취약성을 지시하는 상기 자기 인증 경보를 발생시키는 단계 - 상기 이벤트 리스트는 기입 또는 저장 명령을 수신하는 동작과, 제1 불결 지시자를 관련시키는 동작과, 상기 수신된 정보를 로딩하는 명령을 수신하는 동작 중에 로깅된 하나 이상의 이벤트들을 지시함 - 를 더 포함하는 방법.
  7. 제6항에 있어서,
    상기 수신된 정보의 소스를 식별하는 입력 이벤트 식별자를 상기 메모리의 제1 부분과 관련시키는 단계를 더 포함하는 방법.
  8. 제6항에 있어서,
    상기 수신된 정보로부터 새로운 데이터를 계산하는 단계와, 상기 새로운 데이터를 상기 메모리의 제2 부분에 저장하는 단계와, 상기 수신된 정보가 신뢰할 수 없는 소스로부터 또는 불결을 표시하는 불결 지시자를 갖는 메모리 부분으로부터 수신되는 경우에 '불결'을 표시하는 제2 불결 지시자를 상기 메모리의 상기 제2 부분과 관련시키는 단계를 더 포함하는 방법.
  9. 제8항에 있어서,
    상기 제2 불결 지시자는 상기 수신된 정보로부터 상기 새로운 데이터를 계산 하는 적어도 하나의 단계를 나타내는 데이터 흐름 그래프 또는 상기 정보가 수신되는 메모리 부분들의 상기 불결 지시자 내의 데이터 흐름 그래프를 포함하는 방법.
  10. 제6항에 있어서,
    상기 수신된 정보를 프로그램 카운터 내에 로딩하거나 상기 수신된 정보를 실행하는 명령을 수신하는 상기 단계는 상기 수신된 정보를 실행하는 명령을 수신하는 단계를 포함하고, 상기 제1 불결 지시자가 '청결'(clean)을 표시하면, 상기 방법은 상기 수신된 정보에 의해 참조되는 명령을 저장하는 상기 메모리의 제3 부분과 관련된 제3 불결 지시자를 검사하는 단계를 더 포함하는 방법.
  11. 제1항에 있어서,
    상기 이벤트 리스트를 검증하는 단계에 응답하여, 상기 자기 인증 경보를 네트워크 오버레이 내의 노드 식별자에 의해 식별된 적어도 하나의 이웃 노드에 전송하는 단계를 더 포함하는 방법.
  12. 제1항에 있어서,
    상기 이벤트 리스트에 기초하여 상기 취약성을 해결하는 패치 및 필터 중 적어도 하나를 발생시키는 단계를 더 포함하는 방법.
  13. 컴퓨터 실행 가능한 컴포넌트들을 갖는 하나 이상의 컴퓨터 판독 가능 매체 로서,
    a) 동적 데이터 흐름 분석을 이용하여 웜 공격에 대한 취약성을 검출하기 위한 수단과,
    b) 검출된 웜에 응답하여 자기 인증 경보를 발생시키기 위한 수단
    을 포함하고, 상기 자기 인증 경보는
    i) 웜 공격에 대한 상기 취약성을 갖는 프로그램을 식별하는 프로그램 식별자를 나타내는 데이터를 담고 있는 제1 데이터 필드와,
    ii) 상기 취약성을 예시하는 하나 이상의 비결정적 이벤트들을 포함하는 이벤트 리스트를 나타내는 데이터를 담고 있는 제2 데이터 필드와,
    iii) 상기 프로그램에서 검출된 취약성의 타입을 지시하기 위한 취약성 타입 식별자를 나타내는 데이터를 담고 있는 제3 데이터 필드
    를 포함하는 컴퓨터 판독 가능 매체.
  14. 제13항에 있어서,
    상기 자기 인증 경보는, 상기 이벤트 리스트가 상기 취약성을 어떻게 예시하는지에 대한 표시를 제공하는 하나 이상의 검증 힌트를 나타내는 데이터를 담고 있는 제4 데이터 필드를 더 포함하고, 상기 검증 힌트는 상기 이벤트 리스트 내의 이벤트 및 상기 취약성 타입에 따라서 실행될 코드의 임의 어드레스나, 실행될 임의 코드나, 또는 함수에 대한 임의 인수(arbitrary argument)의 상기 이벤트 내의 오프셋을 지시하는 컴퓨터 판독 가능 매체.
  15. 제13항에 있어서,
    상기 취약성 타입은 상기 프로그램에 의한 실행을 임의 코드에 방향 전환(redirect)하는 능력이나, 임의 코드를 실행하는 능력이나, 또는 함수에 임의 인수를 공급하는 능력을 지시하는 컴퓨터 판독 가능 매체.
  16. 제13항에 있어서,
    상기 자기 인증 경보를 네트워크 오버레이의 적어도 하나의 다른 노드에 분배하기 위한 수단을 더 포함하는 컴퓨터 판독 가능 매체.
  17. 제13항에 있어서,
    상기 검출하기 위한 수단은 상기 취약성을 예시하는 적어도 하나의 비결정적 이벤트를 담고 있는 이벤트 로그를 생성하는 컴퓨터 판독 가능 매체.
  18. 제13항에 있어서,
    성공적인 검증을 신호하는 상기 프로그램 내에 로딩된 검증 함수의 실행을 트리거하기 위해 상기 공급된 힌트를 이용하여 상기 이벤트 리스트를 변경하는 것을 포함하는 수신된 자기 인증 경보의 유효성 검사(validate)를 하기 위한 수단을 더 포함하는 컴퓨터 판독 가능 매체.
  19. a) 자기 인증 경보로부터 제1 실행 경로를 검색하는 단계 - 상기 제1 실행 경로는 웜 공격에 의해 부당 이용될 수 있는 프로그램의 취약성을 예시함 - 와;
    b) 상기 제1 실행 경로의 적어도 일부분을 결정하는 착신 메시지 내의 적어도 하나의 바이트를 결정하는 단계와;
    c) 상기 적어도 하나의 바이트의 존재를 검증하기 위해 테스트될 수 있는 상기 결정된 바이트에 대한 적어도 하나의 조건을 결정하는 단계와;
    d) 상기 적어도 하나의 조건으로 새로운 메시지의 적어도 일부분을 테스트하여 웜 공격의 존재를 검출하는 단계와;
    e) 상기 테스트에 기초하여 상기 새로운 메시지를 처리하는 것을 거부하는 단계
    를 포함하는 방법.
  20. 제19항에 있어서,
    적어도 하나의 조건을 결정하는 상기 단계는 불결한 메모리 부분이 제어 흐름 결정에 이용될 때 상기 불결한 메모리 부분으로부터의 데이터에 대해 계산된 논리 연산을 기록하는 단계를 포함하는 방법.
  21. 컴퓨터 판독 가능 명령들을 담고 있는 하나 이상의 컴퓨터 판독 가능 매체로서, 구현될 때 상기 컴퓨터 판독 가능 명령들은,
    a) 자기 인증 경보로부터 웜 공격에 대한 프로그램 내의 취약성의 표시를 수 신하는 단계와,
    b) 필터 조건 값을 '참'으로 초기화하는 단계와,
    c) 프로그램 카운터 내에 로딩되거나 또는 실행될 데이터를 담고 있는 메모리의 부분과 관련된 불결 지시자의 값을 결정하는 단계와,
    d) 조건부 제어 이전(conditional control transfer)을 수행하는 명령을 수신하는 단계와,
    e) 상기 필터 조건의 이전 값 및 상기 불결 지시자의 결정된 값에 기초하여 상기 필터 조건을 업데이트하는 단계와,
    f) 상기 취약성을 부당 이용하는 웜 공격을 저지하기 위해 착신 메시지에 대해 상기 필터 조건을 적용하는 단계
    를 포함하는 방법을 수행하는 하나 이상의 컴퓨터 판독 가능 매체.
  22. 제21항에 있어서,
    상기 불결 지시자는 메모리의 부분 내에 포함된 값을 계산하는데 이용된 명령들의 시퀀스를 포함하는 데이터 흐름 그래프를 포함하는 하나 이상의 컴퓨터 판독 가능 매체.
KR1020050066294A 2004-07-21 2005-07-21 웜 봉쇄 방법 KR101137128B1 (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US58993204P 2004-07-21 2004-07-21
US60/589,932 2004-07-21
US11/096,054 2005-03-30
US11/095,291 US7634813B2 (en) 2004-07-21 2005-03-30 Self-certifying alert
US11/095,291 2005-03-30
US11/095,287 2005-03-30
US11/096,054 US7603715B2 (en) 2004-07-21 2005-03-30 Containment of worms
US11/095,287 US7634812B2 (en) 2004-07-21 2005-03-30 Filter generation

Publications (2)

Publication Number Publication Date
KR20060092832A true KR20060092832A (ko) 2006-08-23
KR101137128B1 KR101137128B1 (ko) 2012-04-23

Family

ID=35457296

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050066294A KR101137128B1 (ko) 2004-07-21 2005-07-21 웜 봉쇄 방법

Country Status (4)

Country Link
EP (1) EP1630710B1 (ko)
JP (1) JP4878447B2 (ko)
KR (1) KR101137128B1 (ko)
CN (1) CN1725759B (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100033233A (ko) * 2008-09-19 2010-03-29 엘지전자 주식회사 휴대 단말기 및 그 동작 제어방법
US20110113491A1 (en) * 2009-11-12 2011-05-12 Deutsche Telekom Ag Collaborative system for protecting against the propagation of malwares in a network
CN102141956B (zh) * 2010-01-29 2015-02-11 国际商业机器公司 用于开发中的安全漏洞响应管理的方法和系统
US8823536B2 (en) 2010-04-21 2014-09-02 Microsoft Corporation Automated recovery and escalation in complex distributed applications
CN101827104B (zh) * 2010-04-27 2013-01-02 南京邮电大学 一种基于多反病毒引擎的网络病毒联合防御方法
US9047441B2 (en) * 2011-05-24 2015-06-02 Palo Alto Networks, Inc. Malware analysis system
CN103428212A (zh) * 2013-08-08 2013-12-04 电子科技大学 一种恶意代码检测及防御的方法
US10803165B2 (en) * 2015-06-27 2020-10-13 Mcafee, Llc Detection of shellcode
US10599838B2 (en) * 2017-05-08 2020-03-24 Micron Technology, Inc. Crypto-ransomware compromise detection
US11163645B2 (en) * 2019-09-23 2021-11-02 Denso Corporation Apparatus and method of control flow integrity enforcement utilizing boundary checking
CN110941552B (zh) * 2019-11-20 2023-07-07 广州大学 一种基于动态污点分析的内存分析方法及装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3848684B2 (ja) * 1996-03-22 2006-11-22 株式会社日立製作所 コンピュータネットワークシステムの管理方法,および,コンピュータネットワークシステムに用いるコンピュータ
AU2002360844A1 (en) * 2001-12-31 2003-07-24 Citadel Security Software Inc. Automated computer vulnerability resolution system
JP2003233521A (ja) * 2002-02-13 2003-08-22 Hitachi Ltd ファイル保護システム
JP2004102479A (ja) * 2002-09-06 2004-04-02 Hitachi Software Eng Co Ltd 脆弱性検査情報提供システム及び脆弱性検査情報提供方法
JP2006504178A (ja) * 2002-10-22 2006-02-02 ウンホ チェ Itインフラにおける総合侵害事故対応システムおよびその動作方法
KR100456637B1 (ko) 2002-12-12 2004-11-10 한국전자통신연구원 블랙리스트 기반의 분류기를 포함하는 네트워크 보안서비스 시스템
KR20040062735A (ko) * 2003-01-03 2004-07-09 한국정보보호진흥원 정보시스템 진단방법
JP4547861B2 (ja) * 2003-03-20 2010-09-22 日本電気株式会社 不正アクセス防止システム、不正アクセス防止方法、および不正アクセス防止プログラム

Also Published As

Publication number Publication date
JP4878447B2 (ja) 2012-02-15
JP2006031718A (ja) 2006-02-02
KR101137128B1 (ko) 2012-04-23
EP1630710B1 (en) 2019-11-06
EP1630710A3 (en) 2013-05-15
CN1725759B (zh) 2011-10-26
CN1725759A (zh) 2006-01-25
EP1630710A2 (en) 2006-03-01

Similar Documents

Publication Publication Date Title
US7634813B2 (en) Self-certifying alert
US7634812B2 (en) Filter generation
US7603715B2 (en) Containment of worms
KR101137128B1 (ko) 웜 봉쇄 방법
US11082435B1 (en) System and method for threat detection and identification
US11606211B2 (en) Secured system operation
Costa et al. Vigilante: End-to-end containment of internet worms
US7437766B2 (en) Method and apparatus providing deception and/or altered operation in an information system operating system
US8375444B2 (en) Dynamic signature creation and enforcement
US9503470B2 (en) Distributed agent based model for security monitoring and response
US20040168173A1 (en) Method and apparatus providing deception and/or altered execution of logic in an information system
Grégio et al. Toward a taxonomy of malware behaviors
JP2006285983A (ja) コンピュータシステムからナレッジベースをアグリゲートし、コンピュータをマルウェアから事前に保護すること
Costa et al. Can we contain Internet worms
Capobianco et al. Employing attack graphs for intrusion detection
Weaver et al. Large scale malicious code: A research agenda
Sasi et al. A Comprehensive Survey on IoT Attacks: Taxonomy, Detection Mechanisms and Challenges
Falcarin et al. Software Tampering Detection using AOP and mobile code
MacLennan Path-Safe: Enabling Dynamic Mandatory Access Controls Using Security Tokens
Bombs Resilient User-Side Android Application Repackaging and Tampering Detection Using Cryptographically Obfuscated Logic Bombs
Manna Detection, propagation modeling and designing of advanced Internet worms
Reichert et al. An Integrity-Focused Threat Model for Software Development Pipelines
Rodrigues Dissection of modern malicious software
Fresia Macos X Malware Analysis
Costa et al. Stopping internet epidemics

Legal Events

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

Payment date: 20160318

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170317

Year of fee payment: 6