KR100965644B1 - 서비스 프로세서 코드의 실행 시간 인메모리 패칭 방법 및시스템 - Google Patents

서비스 프로세서 코드의 실행 시간 인메모리 패칭 방법 및시스템 Download PDF

Info

Publication number
KR100965644B1
KR100965644B1 KR1020070098980A KR20070098980A KR100965644B1 KR 100965644 B1 KR100965644 B1 KR 100965644B1 KR 1020070098980 A KR1020070098980 A KR 1020070098980A KR 20070098980 A KR20070098980 A KR 20070098980A KR 100965644 B1 KR100965644 B1 KR 100965644B1
Authority
KR
South Korea
Prior art keywords
patch
program
memory
service processor
volatile memory
Prior art date
Application number
KR1020070098980A
Other languages
English (en)
Other versions
KR20080029949A (ko
Inventor
데이비드 더햄
호르무즈드 코스라비
트래비스 쉴리슬러
라비 사히타
우다이 사바가온카르
Original Assignee
인텔 코오퍼레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코오퍼레이션 filed Critical 인텔 코오퍼레이션
Publication of KR20080029949A publication Critical patent/KR20080029949A/ko
Application granted granted Critical
Publication of KR100965644B1 publication Critical patent/KR100965644B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions

Abstract

휘발성 메모리에 로딩된 프로그램의 인-메모리 패칭(in-memory patching)을 가능케 하는 방법 및 장치가 개시되어 있다. 서비스 프로세서는 패칭될 프로그램 및 그 프로그램에 대한 관련 패치를 식별한다. 패치는 메모리에 로딩되고, 패치에 재배치 수정(relocation fix-up)들을 적용하는 것을 포함한다. 서비스 프로세서는 프로그램을 패칭될 프로그램의 세그먼트 대신에 패치로 다이렉팅(direct)한다. 프로그램은 프로그램 상태를 유지하면서, 그리고 프로그램의 실행을 중단하는 일 없이 패치를 실행한다.
디지털 보안, 인-메모리, 패칭, 중단, 서비스 프로세서

Description

서비스 프로세서 코드의 실행 시간 인메모리 패칭 방법 및 시스템{METHOD AND APPARATUS FOR RUN-TIME IN-MEMORY PATCHING OF CODE FROM A SERVICE PROCESSOR}
본 발명의 실시예들은 디지털 보안에 관한 것으로서, 보다 상세하게는 휘발성 메모리의 프로그램 인라인 패칭에 관한 것이다.
컴퓨터 시스템은 공격에 대한 약점을 가질 수 있는 코드를 실행한다. 예를 들어, 멀웨어(malware)의 일반 공격 벡터는 버퍼에서 넘치는 스크립트를 실행한다. 공격에 대한 취약성을 줄이기 위하여, 소프트웨어 및/또는 펌웨어 개발자들은 프로그램에 대한 코드 패치를 구현할 수 있다. 프로그램의 패치는 통상적으로 프로그램과 연관된 영구 또는 이동식 기억 장치 상의 하나 이상의 파일을 갱신한 후 프로그램을 메모리에 리로드하여 패치된 프로그램을 실행하는 것을 필요로 한다. 프로그램의 리로드는 시스템 리부트 또는 리셋을 통해, 또는 때때로 단순히 프로그램 자체를 내려 놓고 감염된 프로그램을 리로드하는 것을 통해 이루어질 수 있다. 어느 경우에나, 프로그램은 "다운" 시간을 경험하며, 이때 프로그램 실행은 일시 중지되어야 한다.
패치에 대한 통상의 접근 방식은, 호스트 운영 체제가 패치된 프로그램을 실행하는 것을 허가하기 전에 디스크 상의 코드 이미지를 패치하는 패치 프로그램을 로딩하는 것을 필요로 하는데, 이는 통상적으로 프로그램 실행이 중지되는 이유이다. 또한, 통상의 패치 방법은 호스트 운영 체제에 종속하는데, 이는 패치 애플리케이션이 호스트 상에서 실행되기 때문이다. 따라서, 상이한 패치들은 통상적으로 상이한 운영 체제들에 대해 전개되어야 한다.
보안 결함, 특히 예를 들어 파괴적인 자기 번식 네트워크 웜이 확산되는 것을 가능하게 할 수 있는 치명적 보안 결함에 대한 패치 프로그램은 허용되는 불편함을 갖는다. 그러나, 시스템의 리부트 또는 프로그램의 중지 및 리로드는 어떠한 다운 시간 또는 비가용성도 허용되지 않는 고가용성 서버에 맞지 않는다. 짧은 기간 동안만 이용 가능하지 않은 경우에도, 시스템의 비가용성은 피해가 클 수 있다.
본 발명의 프로그램 패칭(patching) 방법은, 패칭될 메모리에 로딩된 아이템을 식별하는 단계 - 상기 아이템은 메모리에 로딩된 프로그램과 관련된 것임 - 와; 아이템에 대한 패치를 휘발성 메모리에 저장하는 단계와; 프로그램에 대한 상태를 유지하면서 그리고 프로그램의 실행을 중단함이 없이 프로그램이 패치를 실행하게 하기 위해 프로그램을 패치로 다이렉팅(directing)하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 제품은, 디바이스가, 패치 소스로부터 휘발성 메모리에 로딩된 프로그램에 적용할 패치를 수신하는 동작과; 프로그램의 명령을 패치로의 점프로 인라인 교체하는 동작을 수행하게 하는 명령들을 제공하는 콘텐츠가 저장되어 있는 머신 판독가능 매체를 포함하는 것을 특징으로 한다.
본 발명의 서비스 프로세서는, 패칭할 프로그램의 지시(indication)를 수신하고, 패칭될 가상 메모리 내의 상기 프로그램의 세그먼트를 식별하고, 프로그램의 세그먼트에 대한 패치를 식별하는 수신기와; 수신기에 연결되어, 패치에 재배치 수정(relocation fix-up)들을 적용하고, 패치를 휘발성 메모리에 로딩하고, 프로그램을 휘발성 메모리에 다시 로딩하는 일 없이 패치를 인-메모리(in-memory)로 적용하기 위해 프로그램을 프로그램의 세그먼트 대신에 패치로 다이렉팅하는 패치 적용 모듈을 포함하는 것을 특징으로 한다.
본 발명의 시스템은, 패칭할 프로그램의 지시를 수신하고, 패칭될 가상 메모리 내의 프로그램의 세그먼트를 식별하고, 프로그램의 세그먼트에 대한 패치를 식별하는 수신기와; 패칭할 프로그램의 지시를 수신하기 전에 프로그램을 등록하는 등록 모듈과; 수신기에 연결되어, 패치에 재배치 수정(relocation fix-up)들을 적용하고, 패치를 휘발성 메모리에 로딩하고, 프로그램을 휘발성 메모리에 다시 로딩하는 일 없이 패치를 인-메모리(in-memory)로 적용하기 위해 프로그램을 프로그램의 세그먼트 대신에 패치로 다이렉팅하는 패치 적용 모듈을 갖는 패치 에이전트와; 패치 에이전트에 연결되어, 프로그램에 대한 등록 정보를 저장하는 플래시 기억장치(flash storage)를 포함하는 것을 특징으로 한다.
본 발명에 따르면, 패치는 가동 중지 시간(downtime) 없이 적용될 수 있고, 프로그램 실행은 중단되지 않을 수 있다.
아래의 설명은 본 발명의 실시예들의 구현들의 예로서 주어진 도해를 가진 다양한 도면에 대한 설명을 포함한다.
도면들은 한정이 아니라 예로서 이해되어야 한다.
본 명세서에서 사용되는 하나 이상의 "실시예"에 대한 참조는 본 발명의 적어도 하나의 구현에 포함되는 특정 기능, 구조 또는 특성을 기술하는 것으로 이해되어야 한다. 본 명세서에 나오는 "일 실시예에서" 또는 "다른 실시예에서"와 같은 문구들은 본 발명의 다양한 실시예 및 구현을 기술하며, 이들 모두가 동일 실시예를 지칭하는 것은 아니다. 그러나, 이들은 반드시 서로 배타적인 것도 아니다. 본 발명의 실시예들의 개요 설명과 함께 소정의 상세 및 구현에 대한 설명이 이어진 후, 도면을 참조한 보다 상세한 설명이 이어진다.
서비스 프로세서는 호스트 상에서 안전한 실행 시간 인메모리 프로그램 패치를 제공하도록 인에이블링된다. 서비스 프로세서는 플랫폼의 분리된 파티션(하드웨어 및/또는 소프트웨어)일 수 있다. 분리된 파티션은 호스트 프로세서 및 운영 체제(예를 들어, 내장 서비스 마이크로프로세서, 가상 파티션, 캘리포니아, 산타 클라라의 인텔사의 ACTIVE MANAGEMENT TECHNOLOGY (AMT))로부터 안전하게 분리된 실행 환경이다. 인메모리 실행 시간 패치는 프로그램이 중단되지 않고 실행될 수 있게 한다. 서비스 프로세서는 디스크 상의 프로그램 이미지를 패치하고 프로그램을 리로드하는 것 대신, 또는 그것과 함께 프로그램의 인메모리 이미지를 패치한다. 서비스 프로세서는 분리된 파티션이거나 그 일부이므로, 패치는 호스트 프로세서 또는 호스트 운영 체제(OS)에 독립적으로 수행될 수 있다.
일 실시예에서, 서비스 프로세서를 이용한 인메모리 패치를 위한 일반 프로세스는 다음과 같다. 서비스 프로세서는 패치를 수신하여 패치를 메모리 내에 배치하거나, 패치 소스에 의해 메모리 내에 배치된 패치의 지시를 수신한다. 서비스 프로세서는 패치 상의 재배치 수정(fix-up)을 수행하여 패치에 지시된 메모리 위치를 패치될 프로그램과 연관된 메모리 위치에 일치시킨다. 서비스 프로세서는 인메모리 프로그램을 인메모리 패치로 다이렉팅시키는데, 이는 프로그램의 중지 동작 없이 패치가 적용될 수 있게 한다. 프로그램의 패치로의 다이렉팅은 예를 들어 인메모리 명령 교체 및/또는 심벌 테이블 변경에 의해 달성될 수 있다. 일 실시예에서, 서비스 프로세서는 패치에서 역으로 인메모리 프로그램 내의 "양호" 코드(즉, 교체되고 있는 "불량 코드" 이후의 명령 시퀀스)로의 점프 명령 또는 제어 흐름 전달을 포함하도록 패치를 변경한다(예를 들어, 재배치 수정을 적용할 때). 다른 실시예에서, 패치는 프로그램의 메모리 위치에 대한 지식을 이용하여 컴파일될 수 있으며, 패치의 수정은 필요 없게 될 것이다. 일반적으로, 패치의 수정 및 패치에서 프로그램 코드로의 점프 명령의 추가는 프로그램을 패치로 다이렉팅시키기 전에 수행된다. 따라서, 프로그램은 패치가 적용될 때 계속 실행될 수 있다. 패치된 프로그램의 실행 중지 없이 패치를 적용할 수 있는 능력은 예를 들어 중요한 애플리케이션 및 서버 플랫폼에 대해 특히 유용할 수 있다.
서비스 프로세서는 호스트 메모리(즉, 메인 메모리, 또는 가상 스왑 페이지를 포함할 수 있는 휘발성 메모리), 보다 구체적으로 호스트 메모리로부터 실행되는 프로그램의 호스트 소프트웨어 이미지에 대한 액세스를 갖는다. 일반적으로, 메인 메모리에서 실행되는 프로그램은 디스크 상에서, 일반적으로 호스트 시스템의 비휘발성 기억 장치에 지속 상태로 위치하는 관련 이미지를 갖는다. 프로그램은 메인 메모리로부터 호스트 프로세서에 의해 실행된다. 일 실시예에서, 호스트 시스템은 가상 메모리를 지원한다. 가상 메모리가 지원될 때, 메인 메모리는 본래 휘발성인 메모리(예를 들어, 랜덤 액세스 메모리)는 물론, 메모리 스와핑의 이용을 통해 휘발성 메모리로서 관리되는 기억 장치의 하나 이상의 세그먼트 또는 파일을 포함한다.
서비스 프로세서는 모든 프로그램 패치를 수행할 수 있거나, 일 실시예에서 서비스 프로세서는 패치 실행 파일에 대한 서비스를 제공하여, 패치가 인메모리 방식으로 적용되는 것을 가능하게 하면서, 패치 실행 파일은 패치를 프로그램의 기억 장치 내 이미지에 적용한다. 일 실시예에서, 패치 프로그램은 패치가 식별된 프로그램에 대해 적용되어야 함을 지시하기 위하여 서비스 프로세서를(예를 들어, 요청 또는 커맨드를 전송함으로써) 호출한다. 일 실시예에서, 패치 및 프로그램 지시자가 서비스 프로세서로 전송되며, 이어서 서비스 프로세서는 패치 실행 파일 없이 패치를 적용한다. 이 경우, 서비스 프로세서는 프로그램의 인메모리 및 기억 장치 내 이미지들을 패치한다.
일 실시예에서, 서비스 프로세서는 패치가 식별된 프로그램에 적용되어야 한다는 지시의 수신에 응답하여 패치되지 않은 프로그램 이미지의 서명을 위해 메인 메모리를 스캔한다. 또한, 관리 커맨드가 서비스 프로세서 스캔을 개시할 수 있다. 일 실시예에서, 패치가능 프로그램 또는 에이전트는 에이전트의 디스크 상의 그리고 메모리 내의 위치를 서비스 프로세서에 제공하기 위해 서비스 프로세서에 등록한다. 식별된 프로그램을 위치 확인한 때, 서비스 프로세서는 프로그램 이미지를 검사하여, 교정을 위해 식별된 섹션이 패치되었는지를 판정한다. 예를 들어, 서비스 프로세서는 대상 프로그램의 지시, 패치, 및 감염된 섹션과 비교하기 위한 검사 값을 수신할 수 있다. 서비스 프로세서는 메모리에 로드된 프로그램의 이미지의 식별된 섹션을 갱신한다. 메모리 내의 식별된 섹션의 갱신은 프로그램의 실행 중지를 요구하지 않고 프로그램을 패치한다.
패치 외에, 서비스 프로세서는 바이러스 스캐너 또는 다른 교정 도구와 협동하여 언제 프로그램을 패치할지를 결정할 수 있다. 예를 들어, 바이러스 스캐너는 프로그램 내의 멀웨어 서명을 검출할 수 있다. 메모리 내에서 발견된 임의의 멀웨어 서명은 서비스 프로세서에게 지시될 수 있으며, 이어서 서비스 프로세서는 감염된 프로그램의 인라인 교정을 이용하여 바이러스를 제거할 수 있다. 통상의 바이러스 스캐너는 멀웨어를 식별하지만, 감염된 프로그램에 대한 지식은 갖지 않는다. 서비스 프로세서는 메모리를 스캔하고 그리고/또는 바이러스 스캐너와 협동하며, 감염된 프로그램을 감염되지 않은 이미지 상태로 복원할 수 있다. 따라서, 프로그램은 다운 시간 없이 교정될 수 있다. 대안으로, 또는 추가로, 서비스 프로세서는 서명을 원격 관리자(remote administrator)에게 보고할 수 있다.
전술한 바와 같이, 프로그램은 메모리 내에서 인라인으로 패치될 수 있다. 동적 링크 라이브러리(DLL)를 패치하는 종래의 방법과 달리, 서비스 프로세서는 프로그램 내의 함수 호의 어드레스를 변경하는 것이 아니라 코드 패치에 적용할 실제 코드에 영향을 줄 수 있다. 일 실시예에서, 코드 외에, 프로그램은 코드의 패치와 유사하게, 패치 또한 될 수 있는 위치 확인 가능 데이터(예를 들어, 서비스 프로세 서에 등록될 수 있고 식별 가능한 어드레스를 갖는 데이터)를 갖는다.
도 1은 패치 에이전트를 갖춘 서비스 프로세서를 구비한 시스템의 일 실시예의 블록도이다. 관리 호스트(108)는 프로그램을 실행하는 전자 시스템을 나타낸다. 관리 호스트(108)는 예를 들어 데스크탑 컴퓨터, 랩탑 컴퓨터, PDA 또는 다른 핸드헬드 컴퓨팅 또는 통신 장치, 서버 등일 수 있다. 관리 호스트(108)는 프로세서, 마이크로컨트롤러, CPU 등을 나타내는 호스트 프로세서(110)를 포함한다. 도 1에는 하나의 유닛이 도시되어 있지만, 호스트 프로세서(110)는 잠재적으로 하나 이상의 프로세싱 코어 또는 처리 유닛을 포함하고 잠재적으로 병렬 처리 능력을 포함하는 것으로 이해되어야 한다.
관리 호스트(108)는 호스트 프로세서(110)에 의해 실행하기 위한 명령 및/또는 데이터를 저장/제공할 수 있는 휘발성 메모리(130)를 포함한다. 휘발성 메모리(130)는 RAM, 예를 들어 SRAM, DRAM, SDRAM, DDRRAM 등을 포함할 수 있다. 휘발성 메모리(130)는 휘발성 메모리(130)에 저장된 데이터를 관리하는 하드웨어 및/또는 소프트웨어를 포함하는 메모리 컨트롤러를 포함한다. 휘발성 메모리(130)는 휘발성 메모리(130)에 저장된 데이터가 메모리 컨트롤러에 대한 전력 중단시 무효하게 되므로 휘발성이다. 일 실시예에서, 휘발성 메모리(130)는, 일반적으로는 비휘발성일 것으로 예상되는 하드 디스크 또는 플래시 메모리의 일부 또는 세그먼트를 포함한다. 그러나, 비휘발성 기억 장치는 가상 메모리 사용을 위한 메모리 스왑 파일로서 사용될 수 있으며, 스왑 파일에 저장된 데이터는 메모리 컨트롤러에 의해 관리된다. 메모리 스왑 파일은 본 명세서에서 사용될 때 휘발성인 것으로 간주될 수 있는데, 이는 그 파일에 저장된 데이터가 "삭제"되고 그리고/또는 메모리 컨트롤러에 대한 전력의 중단시 메모리 컨트롤러에 의해 무효인 것으로 간주되기 때문이다. 따라서, 기억 장치가 가상 메모리 목적으로 사용되는 한, 사용되는 기억 장치의 세그먼트는 휘발성 메모리로 간주될 수 있다.
관리 호스트(108)는 지속적인 데이터를 저장하기 위한 비휘발성 기억 장치를 나타내는 기억 장치(140)를 더 포함한다. 비휘발성 기억 장치는 기억 장치로부터 전력이 제거된 때에도 그의 값을 유지하는 기억 매체를 지칭한다. 지속적인 데이터는 관리 호스트(108)에 대한 전력이 중단된 때 유지될 것이 요망되는 데이터, 예를 들어 시스템 파일, 운영 체제, 프로그램 파일, 구성 파일 등을 지칭한다. 기억 장치(140)는 디스크 및 관련 드라이브(예를 들어, 자기, 광학), USB 기억 장치 및 관련 포트, 플래시 메모리, ROM, 비휘발성 반도체 드라이브 등을 포함할 수 있다. 일 실시예에서, 기억 장치(140)는 가상 메모리 파티션, 또는 전술한 바와 같이 가상 메모리 목적으로 사용되는 기억 장치의 세그먼트를 나타내는 스왑 파일을 포함한다. 사용자 또는 메모리에 로드된 호스트 에이전트의 관점에서, 사용자 또는 에이전트는 휘발성 메모리에 로드되어 휘발성 메모리(130) 내에 실제로 위치하는 프로그램의 페이지들과 스왑 파일(142) 상에 일시적으로 위치할 수 있는 페이지들을 구별하지 못할 수 있다.
기억 장치(140)는 소프트웨어 프로그램의 이미지를 나타내는 호스트 소프트웨어 에이전트(102)를 포함한다. 호스트 소프트웨어 에이전트(102)는 호스트 소프트웨어 에이전트(104)(기억 장치 내의 소프트웨어 에이전트의 로드된 이미지)로서 휘발성 메모리(130)에 로드된다. 전술한 바와 같이, 호스트 소프트웨어 에이전트(104)의 페이지들의 일부 또는 모두는 물리적으로 휘발성 메모리(130) 내에, 또는 휘발성 메모리(130)의 메모리 컨트롤러에 의해 휘발성 메모리로서 관리되는 스왑 파일(142) 내에 있을 수 있다는 점에 유의한다. 프로그램의 페이지들은 여전히 기억 장치 내에 호스트 소프트웨어 에이전트(102)로서 위치할 수 있다는 점에 유의한다. 예를 들어, 요청 페이징을 이용하는 구현에서, 일반적으로 코드는 실행을 위해 필요할 때까지 휘발성 메모리에 배치되지 않는다. 또한, 소프트웨어 에이전트 페이지들은 페이지가 오염된 것으로(즉, 페이지가 변경됨) 마킹(marking)되지 않는 한 페이징 아웃시 스왑 파일(142)에 배치되지 않을 수도 있다. 이 경우, 페이지가 존재하지 않는 것으로 마킹되고, 이어서 페이지가 요청되는 경우, 일반적으로 페이지는 기억 장치(140) 내의 호스트 소프트웨어 에이전트(102) 이미지로부터 리로드된다.
로드된 소프트웨어 에이전트(104)는 호스트 프로세서(110)에 의해 실행된다. 따라서, 호스트 프로세서(110)는 에이전트 실행(exec) 스레드(106)를 갖는 것으로 보여진다. 에이전트 실행 스레드(106)는 호스트 소프트웨어 에이전트(102)(기억 장치(140)에 저장되고 휘발성 메모리(130)에 호스트 소프트웨어 에이전트(104)로서 로드됨))의 일부 또는 모두의 실행 이미지를 나타낸다. 호스트 프로세서(110) 상에서 실행중인 임의 수의 에이전트가 존재할 수 있다(관리 호스트(108) 내의 프로세서 및/또는 다른 자원들(예를 들어, 메모리, 네트워크 대역폭)의 능력 내에서). 호스트 소프트웨어 에이전트는 임의 타입의 소프트웨어 프로그램, 커널, 실행 가능 스레드 등일 수 있다. 예를 들어, 호스트 소프트웨어 에이전트(102)는 안티바이러스 소프트웨어, 침입 검출 시스템(IDS), 방화벽, OS 실행 가능 코드, 데이터, 또는 변경되지 않는 함수 포인터 등일 수 있다.
에러들은 본 명세서에서 소프트웨어 에이전트로도 지칭되는 소프트웨어 프로그램의 코드 내에 존재할 수 있고 존재한다. 에러가 검출된 때, 에러는 소프트웨어 에이전트에 대한 패치를 제공함으로써 처리될 수 있다. 패치는 새로운 명령, 루틴, 또는 패치가 적용되는 소프트웨어 에이전트의 다른 세그먼트를 지칭한다. 또한, 패치는 완전히 새로운 바이너리 및/또는 지원 파일들로서 구현될 수 있으나, 바이너리 내의 코드 변경은 전술한 바와 같은 새로운 명령 또는 루틴으로서 이해될 수 있다. 패치는 대상 소프트웨어 에이전트의 일부를 교체하는 데 사용될 것이다. 패치는 통상적으로 패치를 설치하거나 기억 장치 내의 소프트웨어 에이전트 코드를 변경하는 패치 프로그램 또는 실행 파일을 이용한 시스템 상의 패치의 전개에 의해 적용된다. 본 명세서에 설명되는 바와 같이, 패치(132)는 메모리(130)에 로드되는 호스트 소프트웨어 에이전트(104)에 대한 패치를 나타낸다. 통상의 접근 방식과 달리, 패치(132)는 메모리 내에 위치하며, 호스트 소프트웨어 에이전트(104)는 그의 중단 없이 여전히 메모리 내에 있는 동안 패치된다. 또한, 패치는 기억 장치(140)의 호스트 소프트웨어 에이전트(102)에 적용될 수 있으나, 패치된 호스트 소프트웨어 에이전트(102)의 메모리(130)로의 리로드는 호스트 소프트웨어 에이전트(104)를 패치된 상태에서 계속 실행하는 데 필요치 않다.
관리 호스트(108)는 호스트 프로세서(110)에 독립적인 관리 호스트(108)의 관리를 제공하는 하드웨어 및/또는 소프트웨어를 나타내는 서비스 프로세서(120)를 포함한다. 서비스 프로세서(120)는 전술한 바와 같이 호스트 프로세서 및 호스트 프로세서 상에서 실행중인 운영 체제로부터 안전하게 분리된 실행 환경을 제공하기 위한 분리된 파티션이다. 예를 들어, 서비스 프로세서(120)는 관리 호스트(108)의 하드웨어 플랫폼(예를 들어, 마더보드) 상에 내장된 마이크로프로세서 및/또는 다른 회로일 수 있다. 서비스 프로세서(120)는 바이러스 또는 다른 멀웨어, 또는 관리 호스트(108)의 해커 침입을 검출하는 모니터링 서비스를 제공할 수 있다. 서비스 프로세서(120)는 관리 호스트(108)에 대한 인메모리 패치를 제공하는 하드웨어 및/또는 소프트웨어를 나타내는 패치 에이전트(122)를 포함한다. 전술한 바와 같이, 인메모리 패치는 메모리 내의 패치(132)의 배치, 및 호스트 소프트웨어 에이전트(104)의 실행 중지 없이 휘발성 메모리(130)의 호스트 소프트웨어 에이전트(104)의 패치(132)로의 다이렉팅을 포함할 수 있다.
또한, 서비스 프로세서(120)는 휘발성 메모리(130)에 로드된 호스트 소프트웨어 에이전트(104) 및/또는 다른 프로그램을 등록할 수 있다. 호스트 소프트웨어 에이전트(104)의 등록은 프로그램 식별자로 호스트 소프트웨어 에이전트(104)를 식별하는 것을 포함한다. 프로그램 식별자 외에, 서비스 프로세서(120)는 일반적으로 등록된 에이전트에 대한 다른 정보, 예를 들어 메모리 위치, 프로그램 해시, 또는 휘발성 메모리(130) 내의 프로그램의 정체성 및/또는 무결성을 검증할 수 있는 다른 정보를 저장한다. 호스트 소프트웨어 에이전트(104)가 서비스 프로세서(120)에 등록되는 실시예에서, 서비스 프로세서(120)는 예상되는 거동에 대해 호스트 소프트웨어 에이전트(104)를 모니터링할 수 있으며, 에러에 대해 에이전트를 능동적 으로 스캔할 수 있다. 또한, 서비스 프로세서(120)는 호스트 소프트웨어 에이전트(104)에 대해 이용 가능해질 수 있는 패치 또는 갱신을 "주시"하기 위해 네트워크 상의 관리 또는 서비스 위치를 능동적으로 스캔할 수 있다. 대안으로, 서비스 프로세서(120)는 호스트 소프트웨어 에이전트(104)를 패치하기 위한 요청을 수신하고, 그리고/또는 휘발성 메모리(130)의 주기적 스캔과 더불어 호스트 소프트웨어 에이전트(104) 내의 에러를 검출할 수 있다.
일 실시예에서, 서비스 프로세서(120)는 네트워크(150)를 통한 보안 네트워크 접속을 갖는다. 네트워크(150)는 관련 하드웨어 및 소프트웨어 컴포넌트를 갖는 임의 타입의 네트워크를 나타낸다. 네트워크(150)는 하나 이상의 LAN, WLAN, WAN, MAN, 인터넷과 같은 GAN, 또는 이들의 임의 조합을 포함할 수 있다. 접속 하드웨어는 카테고리-5 또는 다른 트위스트 쌍 케이블, 동축 케이블, 무선 통신 트랜시버 등은 물론, 흐름 다이렉팅 하드웨어(예를 들어, 인터페이스 회로/카드, 스위치, 라우터, 서버)를 포함할 수 있다. 일 실시예에서, 관리 호스트(108)는 네트워크(150)에 접속되며(접속은 도시되지 않음), 서비스 프로세서(120)는 호스트 프로세서(110) 및 호스트 프로세서(110) 상에서 실행중인 임의의 운영 체제와 관련될 때 대역 외인 네트워크(150)에 대한 접속을 갖는다. 대역 외 접속은 호스트 프로세서(110) 상에서 실행중인 소프트웨어가 액세스할 수 없고 그리고/또는 그에게 보이지 않는 접속이다.
일 실시예에서, 네트워크(150)는 시스템(100)의 관리 엔티티 예를 들면, (관리 서버 또는 워크스테이션)를 나타내는 교정 엔티티(160)에 결합된다. 교정 엔티티(160)는, 특히 관리 호스트(108)와 관련될 때 네트워크(150) 상에서 네트워크 보안 정책을 실시 아니면 관리할 수 있다. 일 실시예에서, 교정 엔티티(160)는 관리 엔티티를 나타내며, 서비스 프로세서(120)는 패치 프로시저를 교정 엔티티(160)에 보고한다. 서비스 프로세서(120)는 모든 패치를 보고하거나, 대안으로 성공하지 못한 패치 적용 시도만을 보고할 수 있다(즉, 일부 패치는 성공하지 못할 수 있다). 서비스 프로세서(120)는 또한 호스트 소프트웨어 에이전트(104)에서 발견된 멀웨어 서명을 지시할 수 있다. 다른 정보도 교정 엔티티(160)에 전달될 수 있다.
일 실시예에서, 서비스 프로세서(120)는 패치(132)에 재배치 수정을 제공한다. 재배치 수정은 함수 호 또는 다른 루틴 호 또는 프로그램 호가 메모리에서 발견될 수 있는 메모리 내의 실제 위치를 지시하는 오프셋이다. 예를 들어, 호스트 소프트웨어 에이전트(102)의 실행 가능 코드에는 일반적으로 DLL로부터 호출 함수를 발견하기 위해 디폴트 메모리 위치에 대해 제공되는 디폴트 값이 기입된다. 동작에 있어서, DLL 함수 호의 메모리 내의 실제 위치는 실행 가능 코드 스토어에 지시된 디폴트 위치와 다른 어딘가일 가능성이 높다. 따라서, 호스트 소프트웨어 에이전트(104)가 메모리 관리의 로더에 의해 휘발성 메모리(130)에 로드될 때, 로더는 재배치 수정 값을 제공하여, 호스트 소프트웨어 에이전트(104)가 함수 호출을 행할 수 있게 한다. 마찬가지로, 서비스 프로세서(120)는 패치(132)에 재배치 수정을 제공하여, 패치(132)가 휘발성 메모리(130)에서 실행 가능하게 할 수 있다. 디폴트 메모리 위치를 가진 패치(132)의 이미지가 기억 장치(140)에 저장될 수 있으며, 프로그램이 휘발성 메모리(130)에 리로드될 경우 로더에 의해 자동으로 수정 될 것이다.
패치 에이전트(122)를 구비한 서비스 프로세서(120)의 동작의 일 실시예의 일례로서, 소프트웨어 웜의 경우를 고려한다. 웜은 일반적으로 버퍼 오버플로우로 인해 시스템을 감염시킨다. 버퍼 오버플로우는 프로그램 내의 동적 데이터 구조에 대한 부적절한 한계 검사(bounds check)로 인해 발생한다. 버퍼 오버플로우 또는 유사한 약점은 개별 메모리 영역에서 한계 검사를 제공하고, 부정확한 바이너리 이미지(즉, 적절한 한계 검사를 제공하지 않는 이미지)를 가진 프로그램 부분을 추가된 한계 검사로 리다이렉팅시킨 후, 제어 흐름을 최초 프로그램으로 다시 리다이렉팅시킴으로써 보정될 수 있다. 호스트 소프트웨어 에이전트(104)가 부적절한 한계 검사를 포함하는 것으로 고려한다. 서비스 프로세서(120)는 적절한 한계 검사를 가진 패치(132)를 휘발성 메모리(130)에 로드하고, 호스트 소프트웨어 에이전트(104)의 제어 흐름을 부적절한 한계 검사에서 패치(132)로 리다이렉팅시킨다. 이어서, 호스트 소프트웨어 에이전트(104)의 오래되고 취약한 머신 코드는 동적 데이터 구조에 대한 적절한 한계 검사를 포함하는 패치(132) 내의 올바른 이미지로 점프하거나 호출할 것이다. 인라인 패치가 서비스 프로세서(120)에 의해 인에이블되어, 점프 호 또는 제어 흐름 전달 명령을 휘발성 메모리(130) 내의 프로그램의 오래된 바이너리 이미지에 삽입하고, 한계 검사를 수행하는 새로운 명령 세트로 점프한다. 서비스 프로세서(120)에 의해 삽입된 패치(132) 내의 새로운 코드 세그먼트는 프로그램이 그의 정상 명령 시퀀스를 재개할 수 있는 실행 시점에서 호스트 소프트웨어 에이전트(104)로 반환된다. 관리 호스트(108) 및 호스트 소프트웨어 에이전트(104)가 동작하고 있는 동안, 서비스 프로세서(120)는 호스트 소프트웨어 에이전트(104)를 인라인으로 완전히 패치할 수 있다.
인라인 패치는 몇몇 경우에 완전한 패치를 제공하지만, 다른 경우들에서 인라인 패치는 충분하지 못할 수 있다. 호스트 소프트웨어 에이전트(104)에 대한 패치(132)가 실질적으로 다른 코드(예를 들어, 암호화/암호 해독 알고리즘의 변경)를 포함하는 것으로 고려한다. 이 경우, 호스트 소프트웨어 에이전트(104)의 최초 코드의 전체 함수 또는 일부는 교체될 필요가 있을 수 있다.
이 경우, 서비스 프로세서(120)는 네트워크(150)를 통해(예를 들어, 교정 엔티티(160)로부터) 패치(132)를 수신할 수 있다. 호스트 소프트웨어 에이전트(104)가 서비스 프로세서(120)의 패치 에이전트(122)에 등록되는 경우, 패치 에이전트(122)는 패치를 수행할 수 있다. 그렇지 않은 경우, 서비스 프로세서(120)는 휘발성 메모리(130)의 메모리 스캔을 수행하여 패치(132)에 의해 패치될 코드의 특정 서명에 매칭되는 호스트 소프트웨어 에이전트(104)의 코드 세그먼트를 발견할 수 있다. 서비스 프로세서(120)가 패치될 호스트 소프트웨어 에이전트 코드의 위치를 확인한 경우, 패치는 새로운 코드 세그먼트(즉, 패치(132))를 휘발성 메모리(130)에 복사하고 호스트 소프트웨어 에이전트(104)의 최초 호스트 코드 내의 적당한 심벌을 패치(132)의 새로운 코드 세그먼트를 지시하도록 변경함으로써 메모리에서 직접 적용될 수 있다. 일 실시예에서, 전체 패치 프로세스는 예를 들어 교정 엔티티(160) 또는 다른 원격 관리 콘솔(도시되지 않음)로부터 네트워크(150)를 통해 개시될 수 있다.
예를 들어, 호스트 소프트웨어 에이전트(104)가 호스트 코드 내의 심벌 _PRINT_를 통해 표현된 지정 함수 printk()를 포함하는 경우, 함수 printk()는 휘발성 메모리(130)의 심벌 테이블에 지시될 것이다. 지정 함수는 심벌에 의해 참조되는 함수를 지칭한다. 패치(132)가 printk()를 교체하도록 의도된 새로운 함수 printk_new()를 포함하는 것으로 고려한다. 패치 에이전트(122)는 이전 코드(즉, printk())를 중복 기입하지 않고 휘발성 메모리(130)에 패치(132)를 로드함으로써 패치를 적용할 수 있다. 이어서, 패치 에이전트(122)는 최초 호스트 코드 내의 모든 참조를 printk_new()에 대응하는 코드를 지시하도록 변경한다. 새로운 코드를 로드하고 오래된 코드를 새로운 함수로 리다이렉팅시키는 프로세스는 최초 코드를 중복 기입하지 않으므로, 이는 호스트 소프트웨어 에이전트(104)가 휘발성 메모리(130) 내에서 패치되는 동안 실행되고 있는 것을 가능하게 한다. 패치(132)는 또한 최초 코드 내의 코드 부분들/데이터 블록들에 대한 참조(예를 들어, 전역 변수에 대한 참조)를 포함할 수 있다는 점에 유의한다. 이 경우, 패치 에이전트(122)는 이들 참조를 휘발성 메모리(130)에 로드된 현재 버전에 매칭되도록 수정 또는 재배치한다.
하나 이상의 명령의 인라인 교체의 경우 또는 함수의 교체의 경우에, 서비스 프로세서(120)는 프로그램에 패치를 적용한다. 교체될 명령 또는 함수는 본 명세서에서 서비스 프로세서가 식별하여 패치하는 프로그램의 "항목" 또는 프로그램의 "세그먼트"로서 지칭될 수 있다. 항목은 또한 본 명세서에서 설명되는 바와 같이 패치될 수 있는 위치 확인 가능 데이터의 요소로서 지칭될 수 있다. 소정의 구현들에서, 항목은 단일 메모리 페이지에 포함될 만큼 충분히 작은 반면, 다른 실시예에서 항목은 다수의 메모리 페이지를 커버할 것이다.
상술한 바와 같이, 호스트 에이전트 프로그램은 서비스 프로세서(120)에 등록할 수 있다. 일 실시예에서, 호스트 에이전트 프로그램은 호스트 에이전트 프로그램 등록의 일부로서 또는 그것과 함께 휘발성 메모리(130) 내의 특정 심벌들의 위치와 같은 힌트들을 서비스 프로세서(120)에 제공할 것이다. 심벌 위치들은 그들 심벌을 패칭하는 데 이용될 수 있다. 다른 실시예에서는, 메모리 관리의 로더(loader)가 호스트 에이전트 프로그램 코드를 로딩하고 휘발성 메모리(130)에 로딩된 호스트 에이전트 프로그램 코드의 각 페이지의 말미에 여분의 메모리 공간을 남길 수 있고, 이 여분의 메모리 공간은 패치 코드를 로딩하는 데 이용될 수 있다. 대안적으로, 패치를 생성하는 사람 또는 엔티티는 서비스 프로세서(120)가 메모리 내의 패칭되지 않은 버전의 위치에 기초하여 패치 코드에 대하여 수행될 필요가 있는 수정/재배치(fix/relocation)들을 판정할 수 있도록 패치에 충분한 정보를 통합할 수 있다.
상술한 바와 같이, 특정 실시예들에서는, 가상 메모리가 지원되고, 스왑 파일(142)이 메모리 스왑 세그먼트로서 이용된다. 프로그램 페이지들이 휘발성 메모리(130)가 아니라 기억장치(140)에 이행적으로(transitively) 저장될 수 있는 그러한 실시예들에서, 서비스 프로세서(120)는 패치의 일부로서 추가 동작들을 수행할 수 있다. 인라인 패칭(in-line patching)을 수행하기 위해, 서비스 프로세서(120)는 먼저 상술한 바와 같이, 패칭을 수행하기 전에 휘발성 메모리(130)에 프로그램 코드가 있는 것을 보증한다. 서비스 프로세서(120)가 휘발성 메모리(130)에 프로그램 코드가 로딩되어 있는 것을 보증할 수 있는 하나의 방법은 커널 상주 에이전트(kernel resident agent)(도시되지 않음)가 서비스 프로세서(120)로부터 페이지-인 요구(page-in request)들을 수신하는 것이다. 그 후 서비스 프로세서(120)가 그것의 패칭 동작(들)을 완료할 때까지 커널 상주 에이전트는 페이지 장애(page fault)들을 발생시키고 후속하여 코드 페이지들을 메모리에 고정(pin)시킬 수 있다.
도 2는 패치 소스로부터 패치를 수신하는 서비스 프로세서를 갖는 시스템의 실시예를 도시한 블록도이다. 관리 호스트(200)는 그 위에서 프로그램이 패칭될 시스템 또는 호스트를 나타내고, 관리 호스트(108)의 일례, 또는 본 명세서에서 설명되는 시스템의 임의의 다른 실시예일 수 있다. 관리 호스트(200)는, 예를 들면, 퍼스널 컴퓨터, 핸드헬드 컴퓨터, 서버, 게임 시스템, 셋톱 박스 등일 수 있다. 관리 호스트(200)는 하나 이상의 프로세서(210), 및 프로세서(210)에 연결된 메모리(220)를 포함한다. 프로세서(210)는 메시지 인증 및 데이터 액세스 요구의 서비스에 관련된 동작들을 수행하는 임의의 유형의 마이크로프로세서, 중앙 처리 장치(CPU), 프로세싱 코어 등을 포함할 수 있다. 프로세서(210)는 관리 호스트(200)의 전체 동작을 제어하고, 하나 이상의 프로그램 가능한 범용 또는 특수 용도 마이크로프로세서, DSP(digital signal processor)들, 프로그래머블 컨트롤러, ASIC(application specific integrated circuit)들, PLD(programmable logic device)들 등, 또는 그러한 디바이스들의 조합일 수 있고, 또는 그러한 것들을 포함할 수 있다. 프로세서(210)는 멀티-코어 및/또는 멀티-프로세서 디바이스들을 포함할 수 있다.
메모리(220)는 프로세서(210)에 의해 실행될 코드 또는 데이터를 제공하는 관리 호스트(200)의 메인 메모리를 나타낸다. 메모리(220)는 전술한 바와 같은 휘발성 메모리의 일례이다. 메모리(220)는 하나 이상의 각종의 RAM(random access memory), 예를 들면, SRAM(static RAM), DRAM(dynamic RAM), SDRAM(synchronous DRAM), DDR-RAM(dual data-rate RAM) 등, 또는 메모리 기술들의 조합을 포함할 수 있다. 일 실시예에서는, 메모리(220)를 관리하는 메모리 컨트롤러는 또한 휘발성 메모리로서 관리되는 디스크 또는 플래시의 일부에 액세스할 수 있다. 따라서, 휘발성 메모리는 가상 메모리의 스왑 파일들을 포함한다.
프로세서(210)와 메모리(220)는 버스 시스템(202)에 연결된다. 버스 시스템(202)은 하나 이상의 개별 물리적 버스, 통신 라인/인터페이스, 및/또는 적당한 브리지, 어댑터, 및/또는 컨트롤러에 의해 접속된, 멀티-드롭 또는 지점 간 접속들 중 임의의 것을 나타내는 추상화(abstraction)이다. 그러므로, 버스 시스템(202)은, 예를 들면, 시스템 버스, PCI(Peripheral Component Interconnect) 버스, 하이퍼트랜스포트(HyperTransport) 또는 ISA(industry standard architecture) 버스, SCSI(small computer system interface) 버스, USB(universal serial bus), 또는 1996년 8월 30일에 발표되고 통상적으로 "파이어와이어(Firewire)"로 불리는, IEEE(Institute of Electrical and Electronic Engineers) 표준 1394-1995 버스 중 하나 이상을 포함할 수 있다.
또한 프로세서(210)에는 버스 시스템(202)을 통하여 하나 이상의 네트워크 인터페이스(들)(240), 하나 이상의 입력/출력(I/O) 인터페이스(들)(250), 및 하나 이상의 내부 기억 장치(들)(260)가 연결되어 있다. 네트워크 인터페이스(240)는 관리 호스트(200)가 네트워크를 통하여 원격 장치들(예컨대, 서버)과 통신할 수 있게 한다. 네트워크 인터페이스(240)는, 예를 들면, 이더넷 어댑터를 포함할 수 있고, 또는 이더넷 어댑터일 수 있다. 또한, 관리 호스트(200)는 일반적으로 사람인 사용자로부터 액세스 가능하게 하는 I/O 인터페이스(250)를 포함한다. I/O 인터페이스(250)는 비디오, 오디오, 및/또는 문자숫자(alphanumeric) 인터페이스(들)를 포함할 수 있다.
기억장치(260)는 데이터를 비휘발성 또는 지속적인 방식으로(즉, 관리 호스트(200)에의 전력 공급이 중단되어도 값이 유지된다) 저장하기 위한 임의의 종래의 매체이거나 그러한 매체를 포함할 수 있다. 기억장치(260)는 프로세서(210)에 의한 실행을 위해 액세스되고 메모리(220)에 배치될 수 있는 코드 및/또는 데이터(262)를 포함한다. 기억장치(260)는 메모리(220)에 로딩되어 실행될 호스트 에이전트(264)를 포함한다.
관리 호스트(200)는 메모리(220)에 로딩되어 있는 동안 호스트 에이전트(264)를 패칭하는 능력을 제공하는 서비스 프로세서(230)를 포함한다. 서비스 프로세서(230)는 상술한 바와 같이 인라인 명령 교체 및/또는 심벌 변경을 제공할 수 있다.
관리 호스트(200)는 패치 소스(270)에 연결된다. 패치 소스(270)는 관리 호스트(200)에 대하여 내부 또는 외부에 있을 수 있다. 패치 소스(270)가 내부에 있는 실시예에서는, 패치 소스(270)는 버스(202)에 연결될 수 있다. 패치 소스(270)가 외부에 있는 실시예에서는, 패치 소스(270)는 네트워크 인터페이스(240)에 연결될 수 있다. 패치 소스(270)는 프로세스(210) 상에서 실행중인 소프트웨어가 액세스할 수 있는 네트워크 인터페이스(240) 상의 링크에 연결될 수도 있고, 및/또는 서비스 프로세서(230)만 액세스할 수 있는 네트워크 인터페이스(240) 상의 링크에 연결될 수도 있다. 패치 소스(270)는, 예를 들면, 서비스 프로세서(230) 또는 관리 호스트(200) 상의 다른 하드웨어, 가상 머신 파티션, 가상 머신 매니저, 또는 프로세서(210) 상에서 실행중인 소프트웨어일 수 있고, 또는 패치 소스(270)는 원격 관리자, 정책 실시 포인트(policy enforcement point), 갱신 웹사이트 등일 수 있다. 패치 소스(270)는 호스트 에이전트가 메모리(220)에 로딩되어 있는 동안 호스트 에이전트(264)에 적용될 패치(272)를 제공한다.
도 3은 패치 에이전트를 갖는 서비스 프로세서의 일 실시예를 도시한 블록도이다. 서비스 프로세서(300) 내에 표현된 컴포넌트들 각각은 하드웨어, 소프트웨어, 또는 조합으로 구현될 수 있는 수단이다. 서비스 프로세서(300)는 서비스 프로세서(300)의 동작을 지시하는 논리적 기능 제어, 및/또는 서비스 프로세서(300)의 동작을 지시하는 것과 관련된 하드웨어를 구현하는 제어 로직(302)을 포함한다. 로직은 하드웨어 로직 회로 및/또는 소프트웨어 루틴일 수 있다. 로직은 컴퓨팅 장치의 프로세서 상에서 실행중인 명령들일 수도 있다. 일 실시예에서, 서비스 프로세서(300)는 제어 로직(302)에 명령들을 제공하는 코드 시퀀스 및/또는 프로그램 을 나타내는 하나 이상의 애플리케이션(304)을 포함한다.
서비스 프로세서(300)는 데이터 및/또는 명령들을 저장하기 위한 메모리(306) 및/또는 메모리 자원(306)에의 액세스를 포함한다. 메모리(306)는 서비스 프로세서(300)가 위치하는 관리 호스트 시스템의 메인 메모리와는 별개일 수 있다. 따라서, 메모리(306)는 서비스 프로세서(300)에 대해 로컬인 메모리를 포함할 수 있고, 그뿐 아니라, 또는 대안적으로, 서비스 프로세서(300)가 위치하는 시스템의 메모리를 포함할 수 있다. 서비스 프로세서(300)는 메모리(306)를 이용하여, 예를 들면, 등록된 소프트웨어 에이전트들에 대한 등록 정보를 보유할 수 있다. 서비스 프로세서(300)는 또한 서비스 프로세서(300)의 외부에 있는 엔티티들(전자장치 또는 사람)에 관하여 서비스 프로세서(300)로/로부터의 액세스 인터페이스들(입력/출력 인터페이스)을 나타내는 하나 이상의 인터페이스(308)를 포함한다. 인터페이스(308)는 그를 통하여 서비스 프로세서(300)가 호스트 시스템 내에 통합될 수 있게 하는 메커니즘을 포함한다. 일 실시예에서, 서비스 프로세서(300)는 또한 서비스 프로세서(300)에 대해 로컬인 기억장치를 나타내는 기억장치(309)를 포함한다. 서비스 프로세서(300)는 기억장치(309)를 이용하여, 예를 들면, 프로그램에 대한 검사 값, 암호 키, 등록된 소프트웨어 에이전트에 대한 등록 정보 등을 저장할 수 있다.
서비스 프로세서(300)는 서비스 프로세서(300)가 인-메모리 패칭(in-memory patching)을 제공할 수 있게 하는 하나 이상의 기능적 컴포넌트들을 나타내는 패치 에이전트(310)를 포함한다. 이 컴포넌트들의 기능 또는 특징은, 수신기(320), 등록 모듈(330), 및 패치 적용 모듈(340)을 포함하는 하나 이상의 수단을 포함하거나 또는 그러한 수단들에 의해 제공된다. 각 모듈은 특정 기능성을 제공하는 다른 모듈들을 더 포함할 수 있다. 본 명세서에서 사용될 때, 모듈은 하드웨어로 구현되든, 소프트웨어로 구현되든, 또는 어떤 조합으로 구현되든, 루틴, 서브시스템 등을 나타낸다. 하나 이상의 모듈은 하드웨어로 구현되고 다른 것(들)은 소프트웨어로 구현될 수 있다.
서비스 프로세서(300)는 단일 컴포넌트일 수도 있고 단일 컴포넌트가 아닐 수도 있다는 것에 유의한다. 일 실시예에서, 서비스 프로세서(300)는 인-메모리 패칭을 제공하기 위해 함께 작동하는 복수의 모듈 또는 엔티티를 나타낸다. 일 실시예에서, 서비스 프로세서(300)는 보안 또는 플랫폼 관리 엔티티의 하나 이상의 서브컴포넌트들을 나타낸다.
수신기(320)는 패치 에이전트(310)가 시스템 메인 메모리에 로딩된 프로그램에 적용할 패치를 얻을 수 있게 한다. 일 실시예에서, 수신기(320)는 프로그램을 패칭하기 위한 요구를 수신하는 요구 처리 모듈(322)을 포함한다. 요구는 일반적으로 패치 소스로부터 수신된다. 대안적으로, 패치 에이전트(310)는 메모리에 로딩된 프로그램의 패칭을 자동 개시할 수 있다. 수신기(320)는 패치 정보를 얻는 능력을 제공하는 패치 액세스 모듈(324)을 포함한다. 패치 정보는 네트워크를 통하여 수신되거나, 시스템 메인 메모리에 배치되거나 패치 에이전트(310)가 패치 액세스 모듈(324)을 통하여 액세스할 수 있는 별개의 메모리에 배치될 수 있다.
등록 모듈(330)은 패치 에이전트(310)가 시스템 메인 메모리에 로딩된 프로 그램을 등록할 수 있게 한다. 등록된 프로그램은 프로그램 및 그것의 수정(fix-up)들에 관한 메모리 위치 정보를 제공할 수 있다. 등록된 프로그램을 이용하여, 패치 에이전트(310)는 패치가 수신될 때 메모리 내의 프로그램의 위치에 관한 정보를 가질 수 있다. 프로그램이 등록되어 있지 않으면, 패치 에이전트(310)는 프로그램 및 그 프로그램의 특징부(salient portion)들(즉, 패칭될 부분(들))의 메모리 내의 위치를 판정하기 위해 메모리 스캐너(322)를 호출할 수 있다. 일 실시예에서, 메모리 스캐너(332)는 메모리를 스캔하고 하나 이상의 프로그램이 바이러스를 갖고 있고 패칭을 필요로 하는지를 판정하는 주기적인 기능을 포함한다. 상이한 목적을 위한 이들 상이한 유형의 메모리 스캐닝이 상이한 모듈들에 의해 제공될 수도 있다.
패치 적용 모듈(340)은 패치 에이전트(310)가 인-메모리 프로그램에 패치를 적용할 수 있게 한다. 패치는 인라인으로, 또는 심벌 교체를 통하여 적용될 수 있고, 둘 다 위에서 논의되었다. 일 실시예에서, 로딩된 프로그램의 하나 이상의 페이지가 가상 메모리 스왑 파일에 위치하고, 패칭을 달성하기 위해 로딩되어야 한다. 페이지 로드 모듈(load page module)(342)은 패치 적용 모듈(340)이 패치 적용 동작들이 수행되어야 하는 하나 이상의 페이지를 로딩할 수 있게 한다. 일 실시예에서, 페이지 로드 모듈(342)은 프로그램의 가상 메모리 공간 내에 메모리를 할당하는 커널 상주 컴포넌트를 포함한다. 대안적으로, 패치 적용 모듈(340)은 또한 프로그램의 페이지 테이블/페이지 디렉토리를 패칭할 것이다. 심벌 조정 모듈(344)은 패치 적용 모듈(340)이 인라인 교체로 패칭될 수 없는 프로그램에 대하여 심벌 변경을 수행할 수 있게 한다. 예를 들면, 전체 기능, 또는 기능의 대부분이 교체될 필요가 있을 수 있다. 심벌 교체로 전체 기능을 교체함으로써 프로세서 사이클 면에서의 비용 및 대량의 코드를 인라인으로 교체하는 시간이 피해질 수 있다.
일 실시예에서, 패치 적용 모듈(340)은 패칭 중에 코드의 잠금을 제공하는 잠금 모듈(lock module)(346)을 포함한다. 그러한 코드의 잠금은 코드의 일부분을 일시적으로 이용 불가능하게 할 수 있다. 그러나, 그러한 잠금은 프로그램의 실행의 중단(interruption)으로 간주되지는 않는다. 그러한 잠금은 통상적으로 기억장치로부터 시스템 메인 메모리 내로 프로그램을 다시 로딩하는 것으로부터 발생될 수 있는 수 초 이상의 시간이 아니라, 다수의 실행 클록 사이클 동안 코드의 해당 부분을 이용할 수 없게 할 수 있다. 또한, 그러한 잠금은 짧은 기간 동안 코드의 한 루틴 또는 부분만을 잠그고, 프로그램의 다른 부분의 실행을 막지는 않으므로, 프로그램을 중단하고 기억장치로부터 다시 로딩하는 경우와는 대조적이다. 그러한 잠금을 제공하는 하나의 방법은 페이지를 존재하지 않는 것으로 마킹(mark)하는 것일 수 있다. 잠금 모듈(346)은 프로그램의 페이지 테이블 엔트리들에 직접 기입할 수 있고 문제의 페이지에 대하여 테이블 내에 "존재하지 않음(not present)" 비트를 설정할 수 있다. 대안적으로, 잠금 모듈(346)은 그 페이지가 메모리에 존재하지 않는 것으로 간주하도록 하는 명령을 메모리 관리에 제공할 수 있다. 존재하지 않는 것으로 마킹되어 있는 동안 해당 페이지에 변경이 이루어지고, 그 후 그 변경이 이루어진 후에 존재하는 것으로 마킹될 수 있다. 일부 경우에, 페이지를 "존재하지 않음" 및 "존재함"으로 마킹하는 것에 의해 잠글 때 프로세서 상의 TLB(translation look aside buffer)가 플러싱(flush)될 필요가 있을 수 있다. 일 실시예에서, 패칭될 아이템은 존재하지 않는 것으로 마킹될 수 있는 페이지 내에 포함되어 있을 수 있다는 것에 유의한다. 대안적으로, 패칭될 아이템은 단일 페이지에 포함되지 못할 수도 있고, 다른 잠금 방법이 이용될 수도 있다(예컨대, 세마포어(semaphore)들).
일 실시예에서, 패치 적용 모듈(340)은 위치 확인 가능한 데이터(locatable data)의 위치를 판정하는 능력을 제공하는 데이터 로케이터(data locator)(348)를 포함한다. 전술한 바와 같이, 코드에 대하여 패칭이 일반적으로 수행되는 동안, 데이터도 본 명세서에서 설명된 것과 같은 인-메모리 패칭의 대상이 될 수 있다. 일부 데이터는 데이터 로케이터(348)를 통하여 서비스 프로세서(300)에 등록할 수 있다. 따라서, 데이터는 통상적으로 메모리에서 위치 확인 불가능하지만, 등록된 데이터는 서비스 프로세서(300)가 알고 있을 수 있는 위치 및 사이즈를 가질 수 있다. 그 후 데이터 로케이터(348)는 메모리에서 그 데이터를 발견하고 그 데이터 바이트들의 일부 또는 전부를 교체할 수 있다.
에이전트 또는 모듈에 대한 설명들은 하드웨어, 소프트웨어, 및/또는 이들의 조합을 포함할 수 있는 컴포넌트들을 설명한다. 본 명세서에서 설명된 동작들을 수행하는 컴포넌트가 소프트웨어를 포함하는 경우에는, 그 소프트웨어 데이터, 명령, 및/또는 구성은 머신/전자 장치/하드웨어에 의한 제품(article of manufacture)을 통하여 제공될 수 있다. 제품은 명령, 데이터 등을 제공하는 콘텐 츠를 갖는 머신 판독가능 매체를 포함할 수 있다. 그 콘텐츠는 본 명세서에서 설명된 전자 장치가 설명된 다양한 동작들 또는 실행들을 수행하게 할 수 있다. 머신 판독가능 매체는 머신(예컨대, 컴퓨팅 장치, 전자 장치, 전자 시스템/서브시스템 등)에 의해 액세스 가능한 형태로 정보/콘텐츠를 제공하는(즉, 저장 및/또는 전송하는) 임의의 메커니즘을 포함한다. 예를 들면, 머신 판독가능 매체는 기록가능/기록불가(recordable/non-recordable) 매체(예컨대, ROM(read only memory), RAM(random access memory), 자기 디스크 기억 매체, 광학 기억 매체, 플래시 메모리 장치 등)를 포함한다. 머신 판독가능 매체는 또한 전자 장치가 동작 중일 때 실행될 수 있는 기억 장치 상에 로딩된 코드를 갖는 전자 장치를 더 포함할 수 있다. 따라서, 그러한 코드를 갖는 전자 장치를 배송하는 것은 본 명세서에 설명된 그러한 콘텐츠를 갖는 제품을 제공하는 것으로 이해될 수 있다. 또한, 데이터베이스 또는 다른 메모리 위치에 코드를 저장하고 통신 매체를 통한 다운로드를 위해 코드를 제공하는 것은 본 명세서에 설명된 그러한 콘텐츠를 갖는 제품을 제공하는 것으로 이해될 수 있다.
도 4는 메모리 내의 프로그램의 인라인 패칭을 위한 프로세스의 일 실시예를 도시한 흐름도이다. 여기에 도시된 흐름도는 각종 동작들의 시퀀스의 일례를 제공한다. 특정 시퀀스 또는 순서로 도시되어 있지만, 달리 명시되지 않는 한, 동작 순서는 변경될 수 있다. 따라서, 도시된 구현들은 단지 예로서 이해되어야 하고, 동작들은 다른 순서로 수행될 수 있고, 어떤 동작들은 병행 수행될 수도 있다. 또한, 본 발명의 다양한 실시예들에서 하나 이상의 동작들이 생략될 수 있고, 따라 서, 어느 구현에서나 모든 동작들이 요구되는 것은 아니다.
호스트 에이전트(HA)는 선택적으로 서비스 프로세서 및/또는 그것의 패치 에이전트에 등록한다(402). 패치 에이전트에 의해 패칭될 모든 HA들이 등록될 필요는 없다. 서비스 프로세서 패치 에이전트는 HA에 패치를 적용하기 위한 요구를 수신한다(404). 이 요구는 네트워크 위치(예컨대, 도 1의 교정(remediation) 엔티티(160)로부터, 또는 패칭될 HA를 갖고 있는 관리 호스트 상의 위치로부터 올 수 있다. 요구를 수신한 서비스 프로세서는 식별된 호스트 에이전트에 패치들을 적용하기 위한 직접 요구 외에, HA에 대해 패치가 이용 가능하다는 지시(indication)를 수신하는 것을 포함할 수 있다. 호스트 에이전트를 식별하는 직접 요구가 수신되지 않는 경우, 서비스 프로세서 패치 에이전트는 패칭될 HA를 식별한다. 직접 요구 또는 이용 가능한 요구의 지시를 수신하는 것 외에, 서비스 프로세서는, 예를 들면, 호스트 메인 메모리의 스캔을 통하여, HA가 패칭되어야 할 것임을 판정할 수 있다. 서비스 프로세서는 또한, 예를 들면, 바이러스 스캐너로부터, HA가 패칭되어야 한다는 지시를 수신할 수 있다. 따라서, 요구를 수신하는 것은 패치가 이용 가능하다는 또는 호스트 에이전트가 패칭되어야 한다는 지시를 서비스 프로세서가 판정하거나 수신하는 임의의 수의 방법들을 나타낼 수 있다.
서비스 프로세서는 수신된 지시를 통하여 또는 그 자신의 판정을 통하여 HA를 식별한다. 서비스 프로세서는 HA가 등록되었는지를 판정한다(406). HA가 등록되어 있지 않다면(410), 서비스 프로세서는 호스트 에이전트 서명을 찾기 위해 호스트 메인 메모리를 스캔할 수 있다(412). 식별된 HA를 위치 확인한 후에, 호스트 메모리를 스캔하거나, 또는 HA에 대한 등록 정보를 조사(look up)하는 것을 통하여, 서비스 프로세서는 HA 페이지들이 휘발성 메모리에 있는지를 판정한다(414). 전술한 바와 같이, 휘발성 메모리는 일반적으로 본 명세서에서는 가상 메모리 스왑 파일들을 포함하는 것으로 이해될 수 있지만, 호스트 메모리 페이지들이 휘발성 메모리에 있는지를 판정하는 것은 특히 여기서는 그 페이지들이 가상 스왑 파일에서가 아니라 메인 메모리에서 액세스 가능한지를 나타낸다. 만일 하나 이상의 페이지들이 메모리에 있지 않다면(420), 서비스 프로세서는 페이지들이 메모리에 페치(fetch)되게 한다(422). 예를 들면, 서비스 프로세서는 페이지 장애를 일으켜서 페이지들을 메모리에 로딩할 수 있다. 페이지들이 메모리에 있는 것으로 판정되거나, 메모리에 있도록 페치된 후에, 서비스 프로세서는 재배치 심벌 및 특정 다이내믹 레지스터의 이용을 위하여 패치를 조정한다(424).
조정된 패치 코드는 그 후 서비스 프로세서 패치 에이전트가 호스트 휘발성 메모리 내의 HA 코드를 패칭할 때 적용된다(426). 패칭은 본 명세서에서 설명된 임의의 유형의 패칭일 수 있다. 그 후 서비스 프로세서는 패칭된 HA에 대한, 또는 다른 HA들에 대한 패칭 요구에 관해 계속 모니터링할 수 있다.
도 5는 프로그램에 코드 패치를 적용하는 서비스 프로세서의 실시예의 블록도이다. 시스템(500)은 휘발성 메모리에 로딩되는 프로그램(510), 및 수신되어 휘발성 메모리에 로딩되는 패치(520)를 포함한다. 서비스 프로세서(530)는 휘발성 메모리에 패치(520)를 로딩하거나, 또는 패치(520)가 메모리에 있다는 지시를 수신할 수 있다. 서비스 프로세서(530)는 서비스 프로세서(530)에 대한 패칭 동작을 적용하는 패치 에이전트(532)를 포함한다.
프로그램(510)은 아래에서 보다 상세히 설명되는 바와 같이, 패칭을 필요로 하는 프로그램 리스팅의 일례를 포함한다. 소스 및 일부 어셈블리가 제공된다. 특정 언어 구성의 이용은 단지 예시를 위한 것이고 제한을 제시하는 것이 아니며; 특정 코딩 언어가 요구되지 않고, 다른 시스템 아키텍처를 이용하여 유사한 기법들이 구현될 수 있다. 따라서, 소스 코드는 어떤 언어로도 작성될 수 있고, x86 머신 코드는 단지 예시일 뿐이다. 소스는 코드의 라인 8에서 한계 검사의 결여를 예시한다. 어셈블리는 한계 검사 문제를 정정하기 위해 적용될 수 있는 인라인 패치를 예시한다. 코드는 이 설명에서도 작성된다:
Figure 112007070860563-pat00001
인라인 교체(inline replacement)는 한계를 검사하지 않은 결함 있는 코드 루틴 대신에 패치로의 점프를 배치한다. 패치(520)는 메모리에 배치되고, 재배치 수정(relocation fix-up)들이 적용된다는 것에 유의한다. 따라서, 명령들의 시퀀스가 메모리에 로딩될 때 수신하는 위치에 따라서, 명령들의 시퀀스의 번호가 다시 매겨진다. 그러나, 상술한 바와 같이, 패치(520)는 고정 어드레스를 참조하여 컴파일될 수 있고, 따라서 수정이 적용되는 것을 필요로 하지 않는다. 부적당한 시퀀스를 시작한 코드의 라인은 패치 에이전트(532)에 의해 삭제되어 패치로의 점프 명령 삽입될 수 있게 한다. 패치는 한계 검사 수정(bounds check fix), 및 패치가 삽입된 위치에서 프로그램으로의 점프 복귀(jump return)의 예를 포함한다. 한계 검사에 더하여, 추가적인 새로운 코드가 패치에 삽입될 수 있다는 것에 유의한다. 또한 예시된 점프는 결함이 있는 코드의 바로 뒤에 있는 명령으로 실행을 복귀시키지만, 점프는 코드 내의 어떤 다른 위치로도 복귀할 수 있다는 것에 유의한다. 따라서, 예를 들어, 모든 코드가 양호하고 새로운 코드는 단지 프로그램을 패칭하기 위해 추가될 필요가 있는 경우에는, 패치는 다시 통상의 명령 시퀀스로 점프할 수 있다. 그러나, 일부 코드가 "불량"하거나 스킵되어야 한다면, 점프 복귀는 방해가 되는 코드(offending code)를 효과적으로 피하는 명령으로 갈 것이다. 아래에 패치(520)에 대한 소스 및 일부 어셈블리가 제시되어 있다. 패치(520)에 대한 소스 및 어셈블리는, 상기 코드에서 도시된 바와 같이, 메모리에 로딩되어 적용될 때 재배치된 것으로 이해된다.
Figure 112007070860563-pat00002
패치는 원래의 프로그램에 대해 멱등(idempotent)이었기 때문에, 인-메모리 이미지의 한 라인을 다른 메모리 영역에 미리 준비된 패치로 교체하는 것만으로, 프로그램은 패치가 적용되는 동안 실행을 계속할 수 있다. 따라서, 패치는 다운 시간(downtime) 없이 적용될 수 있고, 프로그램 실행은 중단되지 않을 것이다.
본 명세서에서 설명되어 있는 것 외에도, 본 발명의 범위에서 벗어나지 않고 본 발명의 개시된 실시예 및 구현예들에 대해 다양한 변경이 이루어질 수 있다. 그러므로, 본 명세서에서의 예시 및 예들은 제한적인 것이 아니라 예시적인 의미로 해석되어야 할 것이다. 본 발명의 범위는 다음에 오는 청구항들의 참조에 의해서만 판단될 수 있다.
도 1은 패치 에이전트를 갖춘 서비스 프로세서를 구비한 시스템의 일 실시예의 블록도.
도 2는 패치 소스로부터 패치를 수신하는 서비스 프로세서를 구비하는 시스템의 일 실시예의 블록도.
도 3은 패치 에이전트를 갖춘 서비스 프로세서의 일 실시예의 블록도.
도 4는 메모리 내의 프로그램의 인라인 패치를 위한 프로세스의 일 실시예의 흐름도.
도 5는 프로그램에 코드 패치를 적용하는 서비스 프로세서의 일 실시예의 블록도.
<도면의 주요 부분에 대한 부호의 설명>
102, 104: 호스트 소프트웨어 에이전트
106: 에이전트 실행 스레드
108: 관리 호스트
110: 호스트 프로세서
120: 서비스 프로세서
122: 패치 에이전트
140: 기억 장치

Claims (24)

  1. 프로그램을 패칭(patching)하는 방법으로서,
    패칭될 메모리에 로딩된 아이템을 서비스 프로세서를 통해 식별하는 단계 - 상기 아이템은 호스트 프로세서에 의해 실행될 메모리에 로딩된 프로그램과 관련된 것임 - 와;
    상기 아이템에 대한 패치를 휘발성 메모리에 저장하는 단계와;
    상기 프로그램에 대한 상태를 유지하면서 그리고 상기 프로그램의 실행을 중단함이 없이 상기 프로그램이 상기 패치를 실행하게 하기 위해 상기 서비스 프로세서를 통해 상기 프로그램을 상기 패치로 다이렉팅(directing)하는 단계
    를 포함하는 프로그램 패칭 방법.
  2. 제1항에 있어서, 상기 아이템을 식별하는 단계는,
    프로그램 코드의 세그먼트를 식별하는 단계를 포함하는 프로그램 패칭 방법.
  3. 제1항에 있어서, 상기 아이템을 식별하는 단계는,
    위치 확인 가능한 데이터 엘리먼트(locatable data element)를 식별하는 단계를 포함하는 프로그램 패칭 방법.
  4. 제1항에 있어서, 상기 패치를 상기 휘발성 메모리에 저장하는 단계는,
    상기 패치에 재배치 수정(relocation fix-up)들을 적용하는 단계를 더 포함 하는 프로그램 패칭 방법.
  5. 제1항에 있어서, 상기 패치를 상기 휘발성 메모리에 저장하는 단계는,
    심벌 룩업 테이블(symbol lookup table)을 변경하는 단계를 더 포함하는 프로그램 패칭 방법.
  6. 제1항에 있어서, 상기 프로그램을 상기 패치로 다이렉팅하는 단계는,
    상기 아이템에의 액세스를 방지하기 위해 상기 프로그램과 관련된 상기 아이템을 잠그는(locking) 단계와;
    상기 아이템이 잠겨 있는 동안 상기 프로그램을 상기 패치로 다이렉팅하는 단계와;
    상기 아이템에 대한 상기 잠금 상태를 제거하는 단계
    를 더 포함하는 프로그램 패칭 방법.
  7. 제6항에 있어서, 상기 아이템을 잠그는 단계는,
    상기 아이템을 포함하는 메모리 페이지를 상기 휘발성 메모리에 존재하지 않는 것으로 마킹(marking)하는 단계와;
    상기 프로그램을 상기 패치로 다이렉팅하는 단계와;
    상기 프로그램을 상기 패치로 다이렉팅한 후에 상기 메모리 페이지를 상기 휘발성 메모리에 존재하는 것으로 마킹하는 단계
    를 포함하는 프로그램 패칭 방법.
  8. 제1항에 있어서,
    상기 프로그램을 포함하는 메모리 페이지들이 휘발성 메모리에 로딩되어 있는지의 여부를 판정하는 단계와;
    만일 상기 메모리 페이지들이 로딩되어 있지 않다면, 상기 프로그램을 상기 패치로 다이렉팅하기 전에 상기 메모리 페이지들을 휘발성 메모리에 로딩하는 단계
    를 더 포함하는 프로그램 패칭 방법.
  9. 제1항에 있어서, 상기 아이템은 상기 프로그램의 지명 함수(named function)를 포함하고, 상기 프로그램을 상기 패치로 다이렉팅하는 단계는,
    상기 프로그램의 심벌 참조(symbol reference)들을 상기 아이템을 참조하는 것으로부터 상기 패치를 참조하는 것으로 교체하는 단계를 포함하는 프로그램 패칭 방법.
  10. 제1항에 있어서,
    상기 프로그램을 패칭하는 결과를 상기 호스트 프로세서 상에서 실행중인 소프트웨어에 액세스할 수 없는 네트워크 접속을 통하여 원격 관리자(remote administrator)에게 보고하는 단계
    를 더 포함하는 프로그램 패칭 방법.
  11. 디바이스가,
    패치 소스로부터 휘발성 메모리에 로딩된 프로그램에 적용할 패치를 수신하는 동작과;
    서비스 프로세서를 통해 상기 프로그램의 명령을 상기 패치로의 점프로 인라인 교체하는 동작 - 상기 프로그램은 호스트 프로세서에 의해 실행됨 -
    을 포함하는 동작들을 수행하게 하는 명령들을 제공하는 콘텐츠가 저장되어 있는 머신 판독가능 매체.
  12. 제11항에 있어서, 상기 패치 소스로부터 상기 패치를 수신하는 동작은,
    플랫폼 하드웨어로부터 상기 패치를 수신하는 동작을 포함하는 머신 판독가능 매체.
  13. 제12항에 있어서, 플랫폼 하드웨어로부터 상기 패치를 수신하는 동작은,
    상기 서비스 프로세서로부터 상기 패치를 수신하는 동작을 포함하는 머신 판독가능 매체.
  14. 제11항에 있어서, 상기 패치 소스로부터 상기 패치를 수신하는 동작은,
    원격 관리 콘솔(remote management console)로부터 상기 패치를 수신하는 동작을 포함하는 머신 판독가능 매체.
  15. 제11항에 있어서, 상기 패치 소스로부터 상기 패치를 수신하는 동작은,
    플랫폼 하드웨어 상에서 실행중인 가상 머신으로부터 상기 패치를 수신하는 동작을 포함하는 머신 판독가능 매체.
  16. 제15항에 있어서, 상기 패치 소스로부터 상기 패치를 수신하는 동작은,
    상기 프로그램의 운영 환경의 소프트웨어 컴포넌트로부터 상기 패치를 수신하는 동작을 포함하는 머신 판독가능 매체.
  17. 제11항에 있어서, 상기 콘텐츠는,
    상기 패치에 수정(fix-up)들을 적용하기 위한 명령들을 더 제공하는 머신 판독가능 매체.
  18. 서비스 프로세서로서,
    패칭할 프로그램의 지시(indication)를 수신하고, 패칭될 가상 메모리 내의 상기 프로그램의 세그먼트를 식별하고, 상기 프로그램의 상기 세그먼트에 대한 패치를 식별하는 수신기 - 상기 프로그램은 호스트 프로세서를 통해 실행됨 - 와;
    상기 수신기에 연결되어, 상기 패치에 재배치 수정(relocation fix-up)들을 적용하고, 상기 패치를 휘발성 메모리에 로딩하고, 상기 프로그램을 휘발성 메모리에 다시 로딩하는 일 없이 상기 패치를 인-메모리(in-memory)로 적용하기 위해 상기 프로그램을 상기 프로그램의 상기 세그먼트 대신에 상기 패치로 다이렉팅하는 패치 적용 모듈 - 상기 패치 적용 모듈은 상기 서비스 프로세서를 통해 실행됨 -
    을 포함하는 서비스 프로세서.
  19. 제18항에 있어서, 상기 프로그램을 상기 패치로 다이렉팅하는 상기 패치 적용 모듈은 또한,
    상기 프로그램의 상기 세그먼트의 명령들의 시퀀스를 상기 패치로 리다이렉팅(redirect)하기 위해 상기 명령들의 시퀀스 내의 명령을 상기 패치로의 제어 흐름 전송 명령으로 교체하고;
    상기 교체된 명령을 상기 패치 내에 복사하고;
    상기 프로그램으로 복귀하도록 상기 명령들의 시퀀스를 다이렉팅하기 위해 상기 패치의 명령들의 말미에 제어 흐름 전송 명령을 삽입하는
    패치 적용 모듈을 포함하는 서비스 프로세서.
  20. 제19항에 있어서, 상기 프로그램으로 복귀하도록 상기 명령들의 시퀀스를 다이렉팅하기 위해 상기 패치의 명령들의 말미에 상기 제어 흐름 전송 명령을 삽입하는 상기 패치 적용 모듈은 또한,
    상기 프로그램의 명령들의 시퀀스 중 하나 이상의 명령을 실행하는 것을 피하는 상기 프로그램 내의 위치에서 상기 프로그램으로 복귀하도록 상기 명령들의 시퀀스를 다이렉팅하기 위해 상기 제어 흐름 전송 명령을 삽입하는
    패치 적용 모듈을 포함하는 서비스 프로세서.
  21. 제18항에 있어서,
    패칭할 상기 프로그램의 지시를 수신하기 전에 상기 프로그램을 등록하는 등록 모듈을 더 포함하는 서비스 프로세서.
  22. 프로그램을 실행하는 호스트 프로세서와;
    서비스 프로세서와;
    상기 프로그램을 패칭하기 위한 지시를 수신하고, 패칭될 가상 메모리 내의 상기 프로그램의 세그먼트를 식별하고, 상기 프로그램의 상기 세그먼트에 대한 패치를 식별하는 수신기와; 상기 프로그램을 패칭하기 위한 지시를 수신하기 전에 상기 프로그램을 등록하는 등록 모듈과; 상기 수신기에 연결되어, 상기 패치에 재배치 수정(relocation fix-up)들을 적용하고, 상기 패치를 휘발성 메모리에 로딩하고, 상기 프로그램을 휘발성 메모리에 다시 로딩하는 일 없이 상기 패치를 인-메모리(in-memory)로 적용하기 위해 상기 프로그램을 상기 프로그램의 상기 세그먼트 대신에 상기 패치로 다이렉팅하는 패치 적용 모듈을 갖는, 상기 서비스 프로세서를 통해 실행되는 패치 에이전트
    를 포함하는 시스템.
  23. 제22항에 있어서, 상기 패치 에이전트는,
    멀웨어(malware)에 대하여 상기 프로그램을 스캔하는 메모리 스캐너를 더 포함하고;
    멀웨어가 검출되면, 상기 프로그램 내의 상기 멀웨어를 피하기 위해 패치를 개시하는 시스템.
  24. 제22항에 있어서, 상기 프로그램을 패칭하기 위한 지시를 수신하는 상기 수신기는 상기 등록된 프로그램에 대하여 이용 가능한 갱신 또는 패치의 지시를 수신하는 수신기를 포함하는 시스템.
KR1020070098980A 2006-09-29 2007-10-01 서비스 프로세서 코드의 실행 시간 인메모리 패칭 방법 및시스템 KR100965644B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/540,373 US8286238B2 (en) 2006-09-29 2006-09-29 Method and apparatus for run-time in-memory patching of code from a service processor
US11/540,373 2006-09-29

Publications (2)

Publication Number Publication Date
KR20080029949A KR20080029949A (ko) 2008-04-03
KR100965644B1 true KR100965644B1 (ko) 2010-06-23

Family

ID=38895794

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070098980A KR100965644B1 (ko) 2006-09-29 2007-10-01 서비스 프로세서 코드의 실행 시간 인메모리 패칭 방법 및시스템

Country Status (4)

Country Link
US (1) US8286238B2 (ko)
EP (2) EP1909171A1 (ko)
KR (1) KR100965644B1 (ko)
CN (1) CN101154187B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170032132A (ko) 2015-09-14 2017-03-22 서울대학교산학협력단 인메모리 네이티브 그래프 구조와 행 열 테이블의 조인 방법

Families Citing this family (85)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8539469B2 (en) * 2004-05-11 2013-09-17 Microsoft Corporation Efficient patching
US8381297B2 (en) 2005-12-13 2013-02-19 Yoggie Security Systems Ltd. System and method for providing network security to mobile devices
US8869270B2 (en) 2008-03-26 2014-10-21 Cupp Computing As System and method for implementing content and network security inside a chip
US20080276302A1 (en) 2005-12-13 2008-11-06 Yoggie Security Systems Ltd. System and Method for Providing Data and Device Security Between External and Host Devices
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US8533820B2 (en) * 2006-12-12 2013-09-10 International Business Machines Corporation Reserved write positions on install media
US9348730B2 (en) * 2007-01-31 2016-05-24 Standard Microsystems Corporation Firmware ROM patch method
US8365272B2 (en) 2007-05-30 2013-01-29 Yoggie Security Systems Ltd. System and method for providing network and computer firewall protection with dynamic address isolation to a device
US8458433B2 (en) * 2007-10-29 2013-06-04 International Business Machines Corporation Management of persistent memory in a multi-node computer system
US8260841B1 (en) * 2007-12-18 2012-09-04 American Megatrends, Inc. Executing an out-of-band agent in an in-band process of a host system
US8839225B2 (en) 2008-01-23 2014-09-16 International Business Machines Corporation Generating and applying patches to a computer program code concurrently with its execution
GB2460462A (en) * 2008-05-30 2009-12-02 Symbian Software Ltd Method for loading software components into RAM by modifying the software part to be loaded based on the memory location to be used.
US8631488B2 (en) * 2008-08-04 2014-01-14 Cupp Computing As Systems and methods for providing security services during power management mode
US9626511B2 (en) * 2008-08-26 2017-04-18 Symantec Corporation Agentless enforcement of application management through virtualized block I/O redirection
US8930894B2 (en) * 2008-10-08 2015-01-06 Oracle America, Inc. Method and system for executing an executable file
US8294723B2 (en) 2008-11-07 2012-10-23 Google Inc. Hardware-accelerated graphics for web applications using native code modules
US8675000B2 (en) * 2008-11-07 2014-03-18 Google, Inc. Command buffers for web-based graphics rendering
WO2010059864A1 (en) 2008-11-19 2010-05-27 Yoggie Security Systems Ltd. Systems and methods for providing real time access monitoring of a removable media device
CN101771720B (zh) * 2009-01-07 2013-01-30 上海三零卫士信息安全有限公司 主动管理技术终端的扫描发现方法
CN101482834B (zh) * 2009-01-20 2012-02-22 华为技术有限公司 在线补丁激活方法、通信装置及系统
US8429603B2 (en) 2009-03-25 2013-04-23 International Business Machines Corporation Virtual typing executables
US8615740B2 (en) * 2009-03-25 2013-12-24 International Business Machines Corporation Self-fixing executables using virtual function types
US10055251B1 (en) 2009-04-22 2018-08-21 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for injecting code into embedded devices
US8943498B2 (en) * 2009-05-31 2015-01-27 Red Hat Israel, Ltd. Method and apparatus for swapping virtual machine memory
US8797337B1 (en) 2009-07-02 2014-08-05 Google Inc. Graphics scenegraph rendering for web applications using native code modules
US8635705B2 (en) * 2009-09-25 2014-01-21 Intel Corporation Computer system and method with anti-malware
US8533701B2 (en) * 2010-03-15 2013-09-10 Microsoft Corporation Virtual machine image update service
US8365020B2 (en) 2010-03-18 2013-01-29 Red Hat Israel, Ltd. Mechanism for saving crash dump files of a virtual machine on a designated disk
US11411965B2 (en) * 2010-03-19 2022-08-09 Jeffrey Williams Method and system of attack detection and protection in computer systems
EP2375355A1 (en) * 2010-04-09 2011-10-12 ST-Ericsson SA Method and device for protecting memory content
US9392017B2 (en) 2010-04-22 2016-07-12 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for inhibiting attacks on embedded devices
EP2455879A1 (fr) * 2010-11-18 2012-05-23 Gemalto SA Procédé de ré-allocation maitrisé de la mémoire d'un dispositif, et programme informatique associé
US20120167218A1 (en) * 2010-12-23 2012-06-28 Rajesh Poornachandran Signature-independent, system behavior-based malware detection
US9058492B1 (en) * 2011-02-14 2015-06-16 Symantec Corporation Techniques for reducing executable code vulnerability
TWI607376B (zh) * 2011-04-08 2017-12-01 系微股份有限公司 用於處理改變依照統一可延伸韌體介面計算裝置中之系統安全資料庫及韌體儲存區請求的系統及方法
US8510320B2 (en) * 2011-08-10 2013-08-13 Sap Ag Silent migration of business process binaries
US9158561B2 (en) * 2011-08-18 2015-10-13 Vmware, Inc. Systems and methods for modifying an operating system for a virtual machine
US20130104119A1 (en) * 2011-10-24 2013-04-25 Brian Matsuo Streaming packetized binary patching system and method
IN2014CN03995A (ko) * 2011-12-08 2015-09-04 Ibm
US8776223B2 (en) * 2012-01-16 2014-07-08 Qualcomm Incorporated Dynamic execution prevention to inhibit return-oriented programming
KR102132501B1 (ko) 2012-02-15 2020-07-09 더 트러스티이스 오브 콜롬비아 유니버시티 인 더 시티 오브 뉴욕 매립 디바이스에 대한 공격을 금지하기 위한 방법, 시스템 및 미디어
US8959577B2 (en) * 2012-04-13 2015-02-17 Cisco Technology, Inc. Automatic curation and modification of virtualized computer programs
US20130339934A1 (en) * 2012-06-13 2013-12-19 Josef Troch Updating virtualized services
US8782632B1 (en) * 2012-06-18 2014-07-15 Tellabs Operations, Inc. Methods and apparatus for performing in-service software upgrade for a network device using system virtualization
JP5932511B2 (ja) * 2012-06-19 2016-06-08 キヤノン株式会社 情報処理装置、ソフトウェアの更新方法及びコンピュータプログラム
US9367328B2 (en) * 2012-06-28 2016-06-14 Intel Corporation Out-of-band host OS boot sequence verification
WO2014002079A2 (en) * 2012-06-29 2014-01-03 Happy Cloud Inc. Managing the writing of a dataset to a data storage device
WO2014025830A1 (en) * 2012-08-07 2014-02-13 South Point Poker Llc Methods and systems for updating online gaming clients
CN103677878B (zh) * 2012-09-12 2017-07-14 国际商业机器公司 一种打补丁的方法和装置
US9973501B2 (en) 2012-10-09 2018-05-15 Cupp Computing As Transaction security systems and methods
CN103064718A (zh) * 2013-01-23 2013-04-24 北京伸得纬科技有限公司 一种虚拟机载入器
CN103197942B (zh) * 2013-03-18 2016-03-02 华为技术有限公司 一种补丁的生成方法、打补丁的方法及装置
DE102013206751A1 (de) * 2013-04-16 2014-10-16 Continental Automotive Gmbh System und Verfahren zum Betreiben eines Steuergeräts
US9158914B2 (en) * 2013-04-19 2015-10-13 Crowdstrike, Inc. Executable component injection utilizing hotpatch mechanisms
WO2015006375A1 (en) 2013-07-08 2015-01-15 Cupp Computing As Systems and methods for providing digital content marketplace security
CN103345412B (zh) * 2013-07-10 2016-08-24 华为技术有限公司 打补丁的方法及装置
EP2951955B1 (en) * 2013-08-15 2017-11-15 IMMUN.IO Inc. Method and system for protecting web applications against web attacks
US9086934B2 (en) * 2013-08-27 2015-07-21 International Business Machines Corporation Selecting output destinations for kernel messages
US10089461B1 (en) * 2013-09-30 2018-10-02 Fireeye, Inc. Page replacement code injection
US9762614B2 (en) 2014-02-13 2017-09-12 Cupp Computing As Systems and methods for providing network security using a secure digital device
CN103942073B (zh) * 2014-04-08 2017-12-01 北京奇虎科技有限公司 实现系统热补丁的方法及装置
WO2015163931A1 (en) * 2014-04-24 2015-10-29 Hewlett-Packard Development Company, L.P. Dynamically applying a patch to a computer application
WO2015178896A1 (en) * 2014-05-20 2015-11-26 Hewlett-Packard Development Company, L.P. Point-wise protection of application using runtime agent and dynamic security analysis
CN104125101B (zh) * 2014-08-12 2017-10-10 烽火通信科技股份有限公司 通信系统网元使用热补丁批量升级所属业务单盘的方法
WO2016068845A1 (en) * 2014-09-01 2016-05-06 Hewlett Packard Enterprise Development Lp Dynamically applying a patch to a shared library
US10657262B1 (en) 2014-09-28 2020-05-19 Red Balloon Security, Inc. Method and apparatus for securing embedded device firmware
CN104539651B (zh) * 2014-12-05 2017-07-14 浪潮集团有限公司 一种快速接入嵌入式硬件设备到后台管理平台代理服务器的方法
US9921563B2 (en) * 2015-10-02 2018-03-20 Rockwell Automation Technologies, Inc. System for updating a control program actively controlling an industrial process
JP6518795B2 (ja) * 2016-01-15 2019-05-22 株式会社日立製作所 計算機システム及びその制御方法
CN105868639A (zh) * 2016-03-30 2016-08-17 百度在线网络技术(北京)有限公司 内核漏洞修复方法和装置
CN105893850B (zh) * 2016-03-30 2017-12-15 百度在线网络技术(北京)有限公司 漏洞修复方法和装置
CN107451474B (zh) * 2016-05-31 2020-06-26 百度在线网络技术(北京)有限公司 用于终端的软件漏洞修复方法和装置
KR102419574B1 (ko) * 2016-06-16 2022-07-11 버섹 시스템즈, 인코포레이션 컴퓨터 애플리케이션에서 메모리 손상을 교정하기 위한 시스템 및 방법
US10108482B2 (en) * 2016-06-20 2018-10-23 Bank Of America Corporation Security patch tool
JP6812727B2 (ja) 2016-09-30 2021-01-13 オムロン株式会社 安全制御ユニット、安全制御方法、安全制御プログラム
US10528479B2 (en) * 2017-06-02 2020-01-07 Huawei Technologies Co., Ltd. Global variable migration via virtual memory overlay technique for multi-version asynchronous dynamic software update
CN109150557A (zh) * 2017-06-13 2019-01-04 中兴通讯股份有限公司 Vnf加固方法、相关设备和计算机可读存储介质
US10496398B2 (en) * 2017-07-25 2019-12-03 Aurora Labs Ltd. Hot updates to ECU software using tool chain
CN108241500B (zh) * 2018-01-15 2022-02-01 腾讯科技(深圳)有限公司 一种硬件组件的修复方法、装置、系统和存储介质
US10762202B2 (en) * 2018-04-11 2020-09-01 Crowdstrike, Inc. Securely and efficiently providing user notifications about security actions
US10805087B1 (en) 2018-09-28 2020-10-13 Amazon Technologies, Inc. Code signing method and system
GB202001687D0 (en) * 2020-02-07 2020-03-25 Secr Defence An industrial programmable logic controller
KR102421394B1 (ko) * 2020-06-15 2022-07-15 한양대학교 산학협력단 하드웨어와 소프트웨어 기반 트레이싱을 이용한 악성코드 탐지 장치 및 방법
CN113312620B (zh) * 2021-06-01 2022-12-09 海光信息技术股份有限公司 一种程序安全检测方法及装置、处理器芯片、服务器
US20230059796A1 (en) * 2021-08-05 2023-02-23 Cloud Linux Software Inc. Systems and methods for robust malware signature detection in databases

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001006798A1 (en) * 1999-07-16 2001-01-25 Excel Switching Corporation Method and apparatus for in service software upgrade for expandable telecommunications system
JP2002328813A (ja) 2001-04-27 2002-11-15 Hitachi Ltd プログラム修正方法
KR20060015969A (ko) * 2004-08-16 2006-02-21 삼성전자주식회사 전자장치 및 그 프로그램 업데이트 방법

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IT1254937B (it) * 1991-05-06 1995-10-11 Aggiornamento dinamico di memoria non volatile in un sistema informatico
US6438621B1 (en) * 1994-11-14 2002-08-20 Microsoft Corporation In-memory modification of computer programs
US6112304A (en) * 1997-08-27 2000-08-29 Zipsoft, Inc. Distributed computing architecture
US6202208B1 (en) * 1998-09-29 2001-03-13 Nortel Networks Limited Patching environment for modifying a Java virtual machine and method
US6546553B1 (en) * 1998-10-02 2003-04-08 Microsoft Corporation Service installation on a base function and provision of a pass function with a service-free base function semantic
US20020073398A1 (en) * 1998-12-14 2002-06-13 Jeffrey L. Tinker Method and system for modifying executable code to add additional functionality
US6317880B1 (en) * 1999-03-03 2001-11-13 Microsoft Corporation Patch source list management
US6363524B1 (en) * 1999-09-10 2002-03-26 Hewlett-Packard Company System and method for assessing the need for installing software patches in a computer system
GB0004090D0 (en) * 2000-02-22 2000-04-12 Innovation Venture Ltd Application programming system and method of operation thereof
US6658657B1 (en) * 2000-03-31 2003-12-02 Intel Corporation Method and apparatus for reducing the overhead of virtual method invocations
TW495675B (en) * 2000-09-14 2002-07-21 Acer Ipull Inc System for updating program executable being running and the method thereof
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7386846B2 (en) * 2001-07-26 2008-06-10 Kyocera Wireless Corp. System and method for the management of wireless communications device system software downloads in the field
US7162710B1 (en) * 2001-11-01 2007-01-09 Microsoft Corporation Dynamic modifications to a heterogeneous program in a distributed environment
US7577951B2 (en) * 2002-05-30 2009-08-18 Hewlett-Packard Development Company, L.P. Performance of computer programs while they are running
US7784044B2 (en) * 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US20040143749A1 (en) * 2003-01-16 2004-07-22 Platformlogic, Inc. Behavior-based host-based intrusion prevention system
US7603663B2 (en) * 2003-05-20 2009-10-13 Intel Corporation Apparatus and methods for restoring synchronization to object-oriented software applications in managed runtime environments
US8065725B2 (en) * 2003-05-30 2011-11-22 Yuliang Zheng Systems and methods for enhanced network security
WO2004109510A2 (en) * 2003-06-04 2004-12-16 Bitfone Corporation Network having customizable generators of software updates and mobile electronic devices having customizable updating software
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7886287B1 (en) * 2003-08-27 2011-02-08 Avaya Inc. Method and apparatus for hot updating of running processes
US7472384B1 (en) * 2003-12-02 2008-12-30 Swsoft Holdings, Ltd. System, method and computer program product for on-the-fly patching of executable code
US7421698B2 (en) * 2003-12-22 2008-09-02 Sun Microsystems, Inc. System and method for dynamically and persistently tracking incremental profiling data in a process cloning application environment
US7984304B1 (en) * 2004-03-02 2011-07-19 Vmware, Inc. Dynamic verification of validity of executable code
US7424705B2 (en) * 2004-03-11 2008-09-09 Intel Corporation Dynamic management of compiled code
US20050223291A1 (en) * 2004-03-24 2005-10-06 Zimmer Vincent J Methods and apparatus to provide an execution mode transition
US7890946B2 (en) * 2004-05-11 2011-02-15 Microsoft Corporation Efficient patching
US7559058B2 (en) * 2004-05-11 2009-07-07 Microsoft Corporation Efficient patching
US7590864B2 (en) * 2004-05-21 2009-09-15 Intel Corporation Trusted patching of trusted code
US8074277B2 (en) * 2004-06-07 2011-12-06 Check Point Software Technologies, Inc. System and methodology for intrusion detection and prevention
US8443171B2 (en) * 2004-07-30 2013-05-14 Hewlett-Packard Development Company, L.P. Run-time updating of prediction hint instructions
US7647586B2 (en) * 2004-08-13 2010-01-12 Sun Microsystems, Inc. System and method for providing exceptional flow control in protected code through watchpoints
US20060135230A1 (en) * 2004-12-16 2006-06-22 Dhananjay Godse Post-deployment spot creation
US20060174226A1 (en) * 2005-02-03 2006-08-03 Sytex, Inc. Methods, Test Systems And Computer-Readable Medium For Dynamically Modifying Flow Of Executable Code
US7788661B2 (en) * 2005-03-11 2010-08-31 International Business Machines Corporation Method and system for applying patches to a computer program concurrently with its execution
US7568186B2 (en) * 2005-06-07 2009-07-28 International Business Machines Corporation Employing a mirror probe handler for seamless access to arguments of a probed function
US20060288341A1 (en) * 2005-06-15 2006-12-21 Microsoft Corporation Patch-impact assessment through runtime insertion of code path instrumentation
US7853934B2 (en) * 2005-06-23 2010-12-14 Hewlett-Packard Development Company, L.P. Hot-swapping a dynamic code generator
US8055096B2 (en) * 2006-05-10 2011-11-08 Research In Motion Limited Method and system for incremental patching of binary files
US7984432B2 (en) * 2006-05-30 2011-07-19 Infineon Technologies Ag Method for patching a read-only memory and a data processing system comprising a means of patching the read-only memory based on patch contexts

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001006798A1 (en) * 1999-07-16 2001-01-25 Excel Switching Corporation Method and apparatus for in service software upgrade for expandable telecommunications system
JP2002328813A (ja) 2001-04-27 2002-11-15 Hitachi Ltd プログラム修正方法
KR20060015969A (ko) * 2004-08-16 2006-02-21 삼성전자주식회사 전자장치 및 그 프로그램 업데이트 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170032132A (ko) 2015-09-14 2017-03-22 서울대학교산학협력단 인메모리 네이티브 그래프 구조와 행 열 테이블의 조인 방법

Also Published As

Publication number Publication date
EP1909171A1 (en) 2008-04-09
CN101154187B (zh) 2011-04-13
EP2287724A3 (en) 2011-06-01
EP2287724A2 (en) 2011-02-23
KR20080029949A (ko) 2008-04-03
US20080083030A1 (en) 2008-04-03
US8286238B2 (en) 2012-10-09
CN101154187A (zh) 2008-04-02

Similar Documents

Publication Publication Date Title
KR100965644B1 (ko) 서비스 프로세서 코드의 실행 시간 인메모리 패칭 방법 및시스템
US9747172B2 (en) Selective access to executable memory
US9832226B2 (en) Automatic curation and modification of virtualized computer programs
US9229881B2 (en) Security in virtualized computer programs
AU2014348812B2 (en) Improved control flow integrity system and method
JP4793733B2 (ja) 高インテグリティファームウェア
US9147070B2 (en) Binary translation and randomization system for application security
KR101137157B1 (ko) 효과적 패칭
JP4708414B2 (ja) ランタイム・セキュリティ保証用の自律型メモリ・チェッカ
US8656497B2 (en) Constraint injection system for immunizing software programs against vulnerabilities and attacks
EP2840492A1 (en) Method and apparatus for modifying a computer program in a trusted manner
US8413253B2 (en) Protecting persistent secondary platform storage against attack from malicious or unauthorized programs
JP2005327239A (ja) セキュリティ関連プログラミング・インターフェース
US11803639B2 (en) Measuring integrity of computing system using jump table
US20090144828A1 (en) Rapid signatures for protecting vulnerable browser configurations

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140603

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150529

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160527

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee