KR20220047927A - Dva(difference validation and auditing) 도구 - Google Patents

Dva(difference validation and auditing) 도구 Download PDF

Info

Publication number
KR20220047927A
KR20220047927A KR1020217037437A KR20217037437A KR20220047927A KR 20220047927 A KR20220047927 A KR 20220047927A KR 1020217037437 A KR1020217037437 A KR 1020217037437A KR 20217037437 A KR20217037437 A KR 20217037437A KR 20220047927 A KR20220047927 A KR 20220047927A
Authority
KR
South Korea
Prior art keywords
binary
original program
source
transformation
program binary
Prior art date
Application number
KR1020217037437A
Other languages
English (en)
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 KR20220047927A publication Critical patent/KR20220047927A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Stored Programmes (AREA)

Abstract

하나 이상의 어셈블리 소스 파일들을 수정함으로써 소프트웨어를 사이버 하드닝하는 시스템들 및 방법들. 일부 실시예들에서, 개시된 SME 도구는 수정되는 어셈블리 소스 파일들의 빌드 프로세스로 투명하게 그리고 끊김 없이 통합한다. 예컨대, 애플리케이션의 개발 환경으로의 개시된 SME 도구의 통합 시에, 최종 실행 파일의 수정들은 개발자에게 투명하며, 다른 사이버 하드닝 기법들을 지원할 수 있다. SME 도구는 어셈블리 소스 파일과 연관된 속성들(예컨대, 함수들)을 식별하기 위한 사전 프로세싱 도구를 포함한다. SME 도구는 또한 어셈블리 소스 파일을 수정하기 위한 변환 도구를 포함한다. 일부 실시예들에서, 변환들은 어셈블리 소스 파일과 연관된 속성들에 하나 이상의 변환들을 적용하는 것에 대응한다.

Description

DVA(DIFFERENCE VALIDATION AND AUDITING) 도구
[0001] 본 출원은 2019년 4월 18일자로 출원된 미국 가특허 출원 번호 제 62/835,622호에 대한 우선권을 주장하는 국제 출원이고, 상기 출원은 그 전체가 인용에 의해 본원에 포함된다.
[0002] 본 개시내용은 코드 변환(code transformation)들에 관한 것이다. 더 상세하게, 본원에서 개시된 실시예들은 사이버 하드닝(cyber hardening)을 가능하게 하기 위해 소스 코드(source code)(예컨대, 어셈블리 코드(assembly code))의 변환을 수행하는 시스템들, 장치들, 및 방법들에 관한 것이다.
[0003] 네트워크 방화벽들 및 IDS(Intrusion Detection System)들은 컴퓨터 네트워크들 및 시스템들을 위한 제1 방어 라인들이다. 방화벽들은 노드들 자체 또는 네트워크 서비스들(예컨대, 웹, 이메일 등)에 대한 액세스를 제한함으로써 네트워크 상의 노드들을 보호한다. IDS들은 악의적 활동 및 정책 위반들에 대해 시스템들을 모니터링한다. 방화벽이 서비스들에 대한 액세스를 제한할 수 있지만, 보안 결함이 존재하는 경우, 액세스가능하고 제한되지 않은 상태의 임의의 서비스(예컨대, 웹 서버)는 여전히 취약하다. IDS는 인증되지 않은 액세스, 정책 위반들, 또는 악의적 활동을 검출 및 보고한다. 그러나, IDS는 활동이 발생하는 시점에 또는 활동이 발생한 이후에, 의심스러운 네트워크 활동을 검출 및 보고할 수 있다. 따라서, 시스템들이 손상되기 이전에 시스템들의 공격 또는 악용을 방지하기 위한 개선된 시스템들 및 방법들이 필요하다.
[0004] 도 1은 사이버 하드닝과 관련하여 취해진 동작(action)들 또는 단계들을 도시하는 예시적 타임라인(timeline)을 예시한다.
[0005] 도 2는 애플리케이션 코드에 대한 수정들을 도시하는 예시적 코드 스니펫(snippet)이다.
[0006] 도 3은 외부 디스어셈블리와 연관된 DVA 도구의 실시예의 컴포넌트 다이어그램을 예시한다.
[0007] 도 4는 바이너리 변환 또는 소스 변환 방법들을 이용하여 사이버 하드닝 애플리케이션들에 사용되는 개시된 DVA 도구의 개념적 작업 흐름을 도시하는 UML 활동 다이어그램을 예시한다.
[0008] 도 5a 및 도 5b는 수정들 이전의 애플리케이션 코드의 블록들의 시각적 예시이다.
[0009] 도 6a 및 도 6b는 애플리케이션 코드의 수정된 블록들의 시각적 예시들이다.
[0010] 도 7은 개시된 DVA 도구에 의한 프로세스의 단계들을 도시하는 작업 흐름 다이어그램이다.
[0011] 도 8은 개시된 DVA 도구에 의한 프로세스의 단계들을 예시하는 예시적 흐름도이다.
[0012] 도 9a는 소스 코드의 예시적 스니펫을 예시한다.
[0013] 도 9b는 컴파일러 출력의 예를 예시한다.
[0014] 도 9c는 어셈블리어 코드의 디스어셈블리를 도시하는 예시적 출력을 예시한다.
[0015] 본 개시내용은 예컨대, 사이버 하드닝을 가능하게 하기 위해, 런타임 애플리케이션에 이루어진 시스템-레벨 엔지니어링 변경들의 단순화된 요약을 제공하는 DVA(Difference Validation and Auditing) 도구의 시스템들 및 방법들에 관한 것이다. 이것은, 만약 있다면, 애플리케이션에서 다양한 변경들이 무엇인지를 인식하게 될 개발자들, 시스템 엔지니어들, 및 품질 보증 엔지니어들에게 유익할 수 있다. 소스 코드(예컨대, 어셈블리 소스)를 수정하는 성질은 애플리케이션들의 거동을 수정할 잠재력을 갖는다. 이 도구는 사용자가 애플리케이션에 대해 어떤 변경들이 이루어졌는지 그리고 사이버 하드닝의 결과로서 어디서 이루어졌는지를 시각적으로 식별할 수 있게 할 수 있다.
[0016] 개시된 DVA 도구의 하나의 이점은, 그것이 애플리케이션의 바이너리 재구성의 유효성을 긍정적으로 입증할 수 있다는 것이다. 이러한 유효성은, 수정된 소프트웨어가 (통상적으로, 해커들에 의해) 의도하지 않은 프로그램 거동을 생성하기 쉽지 않다는 것을 개발자들에게 보장할 수 있다. 따라서, 개시된 DVA 도구(예컨대, 주로 소프트웨어 도구)는 의도된 프로그램 함수들에 대해 애플리케이션의 수정들이 "불활성"이라는 것을 나타낼 수 있다. 예컨대, DVA 도구는 수정된 소프트웨어가 주어진 입력 세트에 대해 동일한 출력들을 생성하는 것을 검사할 수 있다. 일부 실시예들에서, 개시된 DVA 도구는 메모리 소비, 실행 시간, 및 파일 사이즈와 같은 일반적으로 이해되는 메트릭들을 사용하여 수정/변환의 영향을 특성화할 수 있다.
[0017] 이제 본 기술을 더 상세하게 참조하면, 도 1은 사이버 하드닝과 관련하여 취해진 동작들 또는 단계들의 예시적 타임라인을 예시한다. 소스 코드의 개발(좌측 끝) 이후에, 이 동작들 또는 단계들(사이버 하드닝 단계들로 또한 알려짐)은 미래의 사이버 공격들로부터 소프트웨어를 보호하는 것을 돕기 위해 연속체의 특정 스테이지에서의 파일의 수정 또는 변환을 포함한다. 도 1의 예시적 타임라인은 소스 코드로부터 최종 바이너리까지의 연속체를 도시하고, 사이버 하드닝이 발생할 수 있는 가능한 위치들을 포함한다. 사이버 하드닝 위치들의 예들은 소스 파일(고급 언어로 기록됨), 어셈블리 소스 파일, 및/또는 프로그램 바이너리에 있을 수 있다.
[0018] 컴파일된 프로그램 바이너리들의 전체적 그리고 완전한 분석은 어렵다. 바이너리 분석이 불완전하거나 또는 부정확하면, 바이너리의 변환은, 변환이 성장하거나, 리로케이팅(relocate)되거나, 또는 함수들을 이동시키는 경우 부정확성들을 초래할 수 있다.
[0019] 반대로, 어셈블리 소스 파일들은 CFI 검사들의 삽입과 같은 수정들을 위한 더 양호한 로케이션을 제공한다. CFI 검사들과 관련된 구현의 세부사항들은 2018년 8월 15일자로 출원된 출원 번호 제 62/764,705호, 및 2018년 8월 15일자로 출원된 제 62/764,751호에서 논의되었으며, 이 출원들 모두는 본원에 인용에 의해 포함된다. CFI 검사들은, 컴파일 프로세스를 구성들을 컴파일 및 어셈블링 구성들로 분리함으로써 어셈블리 레벨에서 삽입될 수 있다. 컴파일 이후에, 도구는 CFI 구현에 의해 필요한 지원 코드 및 CFI 검사들을 추가하는 어셈블리를 수정할 수 있다. 그런 다음, 수정된 어셈블리가 어셈블링되고 링크된다.
[0020] 일부 실시예들에서, 개시된 DVA 도구는 바이너리 변환을 검증 및 감사할 수 있다. 일부 실시예들에서, 개시된 DVA 도구는 SME(source modification engine) 변환을 검증 및 감사할 수 있다. 그러나, DVA 도구는 위의 검증 시나리오들에서 상이하게 작업한다. 바이너리 변환을 검증할 때, DVA 도구는 디스어셈블링된 프로그램 바이너리에 대해 작업한다. 그러나, 소스 변환을 검증하기 위해, 어셈블리 소스가 쉽게 이용가능하므로, DVA 도구는 디스어셈블리를 요구하지 않고 오리지널 소스 및 수정된 소스에 대해 직접적으로 동작한다. 일부 실시예들에서, 바이너리 변환은 디스어셈블리와 연관되고, 따라서 DVA 도구는 바이너리 변환으로부터 생성된 디스어셈블링된 바이너리를 사용할 수 있다.
[0021] 도 2는 애플리케이션 코드에 대한 수정들을 도시하는 예시적 코드 스니펫이다. 수정들은 소스 변환들 또는 바이너리 변환들의 애플리케이션으로 인한 것일 수 있다. 예컨대, Linux의 diff 도구는 애플리케이션 코드에 대한 변경들(추가들 및/또는 삭제들)을 나타낼 수 있다. 도 2에서, 마이너스('-'로 도시됨)가 있는 코드 라인들은 삭제된 라인들에 대응하고, 플러스('+'로 도시됨)가 있는 라인들은 오리지널 애플리케이션 코드에 대한 추가들에 대응한다. 도 2의 예는, 함수 "exampleprint"가 호출되는 코드에서의 사이트 또는 위치에서 CFI(Control Flow Integrity) 변환을 적용함으로써 이루어진 애플리케이션 코드로 인한 변경들을 나타낸다. 함수의 호출 사이트에서 유효 함수가 호출되는 것을 검증하는 검사를 삽입함으로써, 변환은 애플리케이션 코드에 대해 변경할 수 있다. 개시된 DVA 도구의 하나의 특허가능한 이점은, 검증되는 함수의 이름을 제외하고, 삽입된 어셈블리(도 2에서 플러스로 도시된 변경들)가 함수의 각각의 호출 사이트에서 동일하기 때문에, 검증이 더 단순해진다는 것이다. 예컨대, "foobar"로 명명된 상이한 함수가 호출되는 경우, "foobar"에 대한 삽입된 어셈블리 및 "exampleprint"에 대한 삽입된 어셈블리는 동일하다.
[0022] 일부 실시예들에서, 도 2에 도시된 것들 이외의 변경들(또는 차이들)이 애플리케이션 코드에 대해 이루어질 수 있다. 이러한 변경들은 예컨대, 각각의 함수 호출 이후에의 그리고 함수들의 시작에서의 애플리케이션 코드에 CFI 토큰(검증을 위해 사용됨)의 삽입, 호출 CFI 검사의 삽입, 리턴 CFI 검사의 삽입, 토큰 비교 함수의 삽입, 간접 호출 검사들을 위한 래퍼 함수의 삽입, 레지스터 호출 검사들을 위한 래퍼 함수의 삽입, 또는 정상적으로 리턴하지 않는 함수들에서 리턴 CFI 코드를 점프하기 위한 코드의 삽입일 수 있다. CFI 검사들과 관련된 구현의 세부사항들은 2018년 8월 15일자로 출원된 출원 번호 제 62/764,705호, 및 2018년 8월 15일자로 출원된 제 62/764,751호에서 논의되었으며, 이 출원들 모두는 본원에 인용에 의해 포함된다.
[0023] 도 3은 외부 디스어셈블리와 연관된 DVA 도구의 실시예의 컴포넌트 다이어그램(300)이다. 구체적으로, 도 3은 DVA 도구(304)의 컴포넌트들 및 외부 디스어셈블리 컴포넌트(302)와의 상호 작용들을 예시하는 UML 컴포넌트 다이어그램이다. DVA 도구(304)는 GUI(graphical user interface) 컴포넌트(306) 및 차이 분석 컴포넌트(308)를 포함한다. 외부 디스어셈블리 컴포넌트(302)는 DVA가 사용자에게 이 정보를 제시할 수 있도록 바이너리들의 디스어셈블리를 제공한다. 차이 분석 컴포넌트(308)는 GUI 컴포넌트(306) 상에서 사용자들에게 제시되는 오리지널 어셈블리 소스 코드와 수정된 어셈블리 소스 코드 사이의 차이들을 프로세싱한다.
[0024] 도 4는 바이너리 변환 또는 소스 변환 방법들을 이용하여 사이버 하드닝 애플리케이션들을 위한 개시된 DVA 도구의 개념적 작업 흐름을 도시하는 UML 활동 다이어그램을 예시한다. 엘리먼트(420)는 작업 흐름의 시작 포인트를 표현한다. 엘리먼트(424)는 DVA 도구가 바이너리 변환 또는 소스 변환에 의해 이루어진 변경들로 인한 차이들을 검증하고 있는지 여부를 검사하는 판정 노드를 표현한다. 엘리먼트(402)는 사이버 하드닝될 오리지널 프로그램 바이너리(예컨대, 데이터스토어에 저장됨)를 표현한다. DVA 도구가 변경들이 바이너리 변환에 대응한다고 결정하면, 활동은 오리지널 프로그램 바이너리를 판독하는 것(402), 바이너리 변환을 적용하는 것(404), 및 변환된 바이너리를 출력하는 것(406)(이는 데이터스토어에 저장될 수 있음)을 수반한다. 엘리먼트(408)는 하나 이상의 바이너리들을 디스어셈블링하여 어셈블리 소스가 각각의 바이너리에 대응하게 하는 활동을 표현한다. 엘리먼트(408)로의 입력들은 엘리먼트들(402 및 406)이다. 디스어셈블링된 바이너리들은 410 및 412로서 출력되며, 이들 중 하나 또는 둘 모두는 데이터스토어에 저장될 수 있다. 엘리먼트(410)는 변환된 바이너리의 디스어셈블리를 표현하고, 엘리먼트(412)는 오리지널 바이너리의 디스어셈블리를 표현한다.
[0025] 판정 노드(424)에서, DVA 도구가 변경들이 소스 변환에 대응한다고 결정하는 경우, 414에서 소스 변환이 (예컨대, SME(source modification engine) 도구를 사용하여) 오리지널 어셈블리(428)에 적용된다. 엘리먼트(416)는 SME로 변환된 어셈블리를 표현한다. 엘리먼트(426)는 병합 노드, 예컨대, DVA 도구가 디스어셈블리(408)에 의해 또는 소스 변환(414)을 통해 생성된 어셈블리 소스에 액세스하고 다음 단계(418)로 진행할 수 있는 미팅 포인트(meeting point)를 표현한다.
[0026] 엘리먼트(418)는 차이 비교 포인트를 표현한다. 구체적으로, 418에서, DVA 도구는 (i) 오리지널 디스어셈블리(412)와 변환된 디스어셈블리(410)(바이너리 변환의 경우) 사이의 또는 (ii) 오리지널 어셈블리(428)와 변환된 어셈블리(416)(소스 변환의 경우) 사이의 차이들을 비교한다. 비교의 출력이 사용자에게 제시된다. 엘리먼트(422)는 UML 활동 다이어그램의 엔드 포인트를 표현한다.
[0027] 도 5a 및 도 5b는 바이너리 변환 또는 소스 변환을 적용함으로써 수정되기 이전의 어셈블리 소스 코드 또는 애플리케이션 코드의 스니펫들의 시각적 예시이다. 어셈블리 소스 코드(또는 기계 코드)는 결국 메모리의 텍스트 영역으로부터 실행가능한 어셈블리 명령들이 된다. fn_table은 함수 포인터들의 어레이를 저장하는 데이터 섹션을 포함한다. 이 예시에서, fn_table은 function2 및 function3의 어드레스들을 저장한다고 가정된다. 예컨대, fn_table [0]은 function2의 어드레스를 메모리에 저장하고, fn_table [1]은 function3의 어드레스를 메모리에 저장한다. 또한, function1은 function2에 대한 간접 호출(화살표(510A)로 도시됨)을 수행하고, function2는 function3에 대한 간접 호출(화살표(520A)로 도시됨)을 수행한다고 가정된다. 간접 호출들에 대응하는 어셈블리 소스 코드는
Figure pct00001
Figure pct00002
이다. 도 5a는 간접 호출들(510A, 520A)에 대응하는 역참조(de-reference)된 호출들(510B, 520B)(예컨대, function2 및 function3을 포인팅(point)함)을 도시한다. 일부 실시예들에서, 스니펫의 시각적 예시(직접/간접 함수 호출들을 포함함)는 GUI 상에서의 디스플레이를 위해 개시된 DVA 도구의 실시예에 의해 생성될 수 있다. 도 5a에 도시된 블록들은 단지 예시를 위한 것이다. 대안적 실시예들에서, 어셈블리 소스의 다른 블록들이 존재할 수 있다.
[0028] 도 5b는 바이너리 변환 또는 소스 변환을 적용함으로써 수정되기 이전의 어셈블리 소스 코드 또는 애플리케이션 코드의 스니펫들의 다른 시각적 예시이다. 구체적으로, 도 5b는 도 5a 상에 어셈블리 소스 코드 블록들을 오버레이함으로써 생성된다. 어셈블리 소스 코드(점선 블록들로 도시됨)는 fn_table, function1 및 function2에 대응한다. 예컨대, 도 5b는, 사용자(예컨대, 프로세스 엔지니어)가 도 5a에서 fn_table, function1 및 function2 블록들을 클릭할 때 생성될 수 있다. 도 5a 및 도 5b에 도시된 블록들은 단지 예시를 위한 것이다. 대안적 실시예들에서, 사용자는 도 5a의 블록들 중 임의의 하나 또는 심지어 다른 블록들을 클릭할 수 있다. 개시된 DVA 도구의 하나의 특허가능한 이점은 고레벨 뷰를 확장시키기 위한 능력으로 코드의 그래픽적 시각화를 생성하는 것이다. 시각화는 어셈블리에 익숙하지 않거나 또는 전문 지식이 부족한 시스템 엔지니어들 및 프로세스 엔지니어들에 의한 간단한 검증을 가능하게 한다.
[0029] 변환이 애플리케이션 코드에 적용되면, 오리지널 코드가 변환된다. 예컨대, 오리지널 함수 호출들의 구조를 변경할 수 있는 새로운 함수들이 추가될 수 있다. 도 6a 및 도 6b는 소스 변환될 시에, 애플리케이션 코드의 블록들에 대한 그러한 수정들을 예시한다.
[0030] 도 6a 및 도 6b는 애플리케이션 코드의 수정된 블록의 시각적 예시들이다. 개시된 DVA 도구의 하나의 특허가능한 이점은 그것이 애플리케이션 코드에 대한 변경들의 그래픽적 시각화를 생성할 수 있다는 것이다. 도 6a는 도 5a의 애플리케이션 코드에 대한 소스 변환의 적용으로부터 발생하는 시각적 예시를 도시한다. fn_table은 함수 포인터들의 어레이를 저장하는 데이터 섹션을 포함한다. 오리지널 fn_table이 function2 및 function3의 어드레스들을 저장한다고 가정된다. 그러나, 소스 변환을 적용한 이후에, SME 도구는 function2 및 function3에 대응하는 래퍼 함수들을 포인팅하도록 함수 포인터들에 저장된 값들을 수정한다. 예컨대, fn_table[0]은 function2_wrapper의 어드레스를 메모리에 저장하고, fn_table[1]은 function3_wrapper의 어드레스를 메모리에 저장한다. function2_wrapper로 명명되는 래퍼 함수는 function2의 호출/리턴에 대해 CFI 검사들을 수행한다. 유사하게, function3_wrapper로 명명되는 래퍼 함수는 function3의 호출/리턴에 대해 CFI 검사들을 수행한다. 또한, function1은 function2에 대한 간접 호출(화살표(610A)로 도시됨)을 수행하고, function2는 function3에 대한 간접 호출(화살표(620A)로 도시됨)을 수행한다고 가정된다. 간접 호출들에 대응하는 어셈블리 소스 코드는
Figure pct00003
Figure pct00004
이다. 소스 변환에 의한 수정의 결과로서, 역참조될 시에, 간접 호출들(610A, 620B)은 function2 및 function3을 포인팅하는 대신에 각각 function2_wrapper 및 function3_wrapper로 재라우팅된다. 화살표들(610B, 620B)은 간접 호출들(610A, 620B)에 대응하는 결과적 역참조들을 도시한다. 래퍼 함수를 배치함으로써, 코드 흐름은 래퍼 함수로 일시적으로 재라우팅된다. 이들의 필수 태스크를 수행한 이후에, 래퍼 함수들은 결국 오리지널 (의도된 코드 흐름) 함수들을 포인팅하도록 의도된다. 따라서, 도 6a는 function2_wrapper 및 function3_wrapper의 마지막 라인들이 각각 function2 및 function3에 대한 직접 호출들을 수행하는 것을 도시한다. 점선들을 사용하여 직접 호출들 (610C, 620C)이 도 6a에 도시된다. 추가로, 일부 실시예들에서, 소스 변환은 CFI 토큰 비교들을 수행하기 위한 토큰 비교 함수를 삽입하는 것을 포함할 수 있다. 토큰 비교 함수(도 6a에서 token_compare로 명명됨)는 function2_wrapper 및 function3_wrapper에 의해 호출된다. token_compare에 의한 토큰 비교의 결과가 성공적인 경우, function3 및 function3이 호출된다.
[0031] 도 6b는 도 6a의 시각적 예시 상에 오버레이된 어셈블리 소스 코드를 도시한다. 예컨대, 도 6b는 fn_table, function1, function2, 및 function2_wrapper에 대응하는 어셈블리 소스(점선 블록들로 도시됨)를 도시한다. 개시된 DVA 도구의 하나의 특허가능한 이점은, 어셈블리 소스 코드를 이용하여 단순화된 형태(예컨대, 도 6a에 도시된 바와 같음)로 또는 상세한 형태(예컨대, 도 6b)로 소스 코드에 대한 변경들을 디스플레이하기 위한 시각화들을 생성하는 것이다. 따라서, DVA 도구의 유연성은 숙련된 실무자 또는 어셈블리 코드에 대한 제한된 지식을 갖는 사람의 관심사들을 수용하는 데 있어 인식될 수 있다. 도 5a, 도 5b, 도 6a, 도 6b는 컴파일되지 않은 코드의 시각화들에 대응한다는 것이 또한 인식될 것이다.
[0032] 도 7은 소프트웨어 애플리케이션을 검증하기 위한 개시된 DVA 도구에 의한 프로세스의 단계들을 도시하는 작업 흐름 다이어그램이다. 이 프로세스의 단계들은 영역(724 및 726)에 도시된 바와 같이, (예컨대, 어셈블리 레벨 엔지니어 및 시스템 레벨 엔지니어와 같은 엔지니어들의 일반적 스킬 레벨들에 대응하는) 2개의 카테고리들로 광범위하게 그룹핑된다. 영역(724)은 변환에 의해 이루어진 코드 변경들의 타입들을 검증하는 것과 연관된 활동들을 표현한다. 코드 변경들은, 이를테면, 호출 사이트들을 수정하거나 또는 프로그램 바이너리에 액세스가능한 스택 프레임의 사이즈를 변경함으로써, 변환이 프로그램 바이너리를 수정할 수 있는 상이한 방식들이다. 영역(726)은 시스템 레벨에서 변환된 애플리케이션을 감사 및 검증하는 것과 연관된 활동들을 표현한다. 전체 프로세스는 노드(702)에서 시작된다. 단계(704)에서, 소프트웨어 애플리케이션에 대한 어셈블리 코드 변경들은 (예컨대, RUNSAFE SECURITY로부터의 ALKEMIST 또는 소스 수정 엔진 도구와 같은 바이너리 변환 도구로부터) 수신된다. 노드(706)에서, 엔지니어/사용자는 DVA 도구를 사용하여 어셈블리 코드 변경들을 조사한다. 어셈블리 코드 변경들을 디스플레이하는 인터페이스의 예들은 도 6a 및 도 6b와 관련하여 논의된다. 판정 노드(708)에서, 어셈블리 코드 변경들은 엔지니어/사용자에 의한 시험을 통과하거나 또는 통과하지 못한다. 따라서, 노드(710)에서, 엔지니어링 팀에 의해 어셈블리 소스 차이들이 거부된다. 예컨대, 엔지니어링 팀은 변환에 대한 수정들을 제안할 수 있거나, 또는 팀은 변환이 수정하는 것을 제한하기 위해 변환(예컨대, 소스 변환 또는 바이너리 변환)을 편집하는 것을 제안할 수 있다. 예컨대, 소스 변환 또는 바이너리 변환의 정의는 개개의 변환이 수정할 수 있는 것의 제한들을 설명할 수 있다.
[0033] 어셈블리 코드 변경들이 리뷰를 통과하는 경우, 소프트웨어 애플리케이션은 (예컨대, UNSAFE SECURITY로부터의 ALKEMIST 또는 소스 수정 엔진 도구와 같은 바이너리 변환 도구에 의해) 변환된다. 노드(712)에서, 시스템-레벨 엔지니어링 리뷰는 코드베이스 전반에 걸쳐 이루어진 변경들이 적절하고 요건 비준수를 초래하지 않음을 확인한다. 개시된 DVA 도구는 이러한 리뷰를 수행하는 데 사용될 수 있다. 판정 노드(718)에서, 리뷰가 통과되거나 또는 통과되지 않는다. 노드(716)에서, 리뷰 동안의 문제들이 처리된다. 예컨대, 소프트웨어 애플리케이션에 대한 변환의 영향을 감소시킨다. 새롭게 사이버 하드닝된 소프트웨어 애플리케이션은 리뷰를 통과하고 노드(720)에서 사용을 위해 검증된다. 프로세스는 노드(722)에서 종료된다.
[0034] 도 8은 개시된 DVA 도구에 의한 프로세스의 단계들을 예시하는 예시적 흐름도이다. 단계(802)에서, 프로세스는 오리지널 프로그램 바이너리를 검증하기 위해 소스-기반 변환 또는 바이너리 변환 중 어느 것이 요청되는지를 표시하는 정보를 수신한다. 프로세스가 바이너리 변환이 요청된다고 결정하는 경우, 프로세스는 단계들(804A, 806A, 808A, 810A)을 수행한다. 프로세스가 소스 변환이 요청된다고 결정하는 경우, 프로세스는 단계들(804B, 806B, 808B)을 수행한다.
[0035] 단계(804A)에서, 프로세스는 (검증이 바이너리 변환과 연관된다고 결정할 시에) 데이터스토어로부터 오리지널 프로그램 바이너리를 판독한다. 단계(806A)에서, 프로세스는 변환된 바이너리를 생성하기 위해 오리지널 프로그램 바이너리에 바이너리 변환을 적용한다. 단계(808A)에서, 프로세스는 오리지널 프로그램 바이너리의 디스어셈블리 및 변환된 바이너리의 디스어셈블리를 생성하기 위해 오리지널 프로그램 바이너리 및 변환된 바이너리를 사용한다. 단계(810A)에서, 프로세스는 오리지널 프로그램 바이너리의 디스어셈블리와 변환된 바이너리의 디스어셈블리 사이의 바이너리 변환-기반 차이를 생성한다. 단계(810A) 이후에, 프로세스는 단계(820)로 이동한다.
[0036] 단계(804B)에서, 프로세스는 (검증이 소스-기반 변환과 연관된다고 결정할 시에) 데이터스토어로부터 오리지널 프로그램 바이너리의 어셈블리 소스를 판독한다. 단계(806B)에서, 프로세스는 소스-변환된 어셈블리를 생성하기 위해 오리지널 프로그램 바이너리의 어셈블리 소스에 소스-기반 변환을 적용한다. 단계(808B)에서, 프로세스는 오리지널 프로그램 바이너리의 어셈블리 소스와 소스-변환된 어셈블리 사이의 소스 변환-기반 차이를 생성하며, 여기서 소스 변환-기반 차이를 생성하는 것은 오리지널 프로그램 바이너리의 디스어셈블리를 배제한다. 단계(808B) 이후에, 프로세스는 단계(820)로 이동한다.
[0037] 단계(820)에서, 프로세스는 한 세트의 더 작은 시각화 영역들을 포함하는 하나의 큰 시각화 영역을 GUI 상에 디스플레이하며, 큰 시각화 영역은 오리지널 프로그램 바이너리를 표현하고, 한 세트의 더 작은 시각화 영역들은 오리지널 프로그램 바이너리를 구성 함수들 및 데이터로 분해하는 것을 표현한다. GUI의 더 작은 시각화 영역에 대한 (단계(822)에서의) 선택에 대한 응답으로, 프로세스는 구성 함수 또는 데이터의 일부에 속하는 기본 컴퓨터 코드를 디스플레이하며, 여기서 GUI는 더 작은 시각화 영역과 연관된 컴퓨터 코드 상에 오버레이된 시각적으로 강조된 형태로 바이너리 변환-기반 차이 또는 소스 변환-기반 차이를 추가적으로 디스플레이한다. 단계(822)에서의 선택은 사용자-구동될 수 있거나 또는 완전히 자동화될 수 있다. 일부 실시예들에서, 시각적으로 강조된 형태는, (i) 함수 호출 이후의 그리고 함수의 시작에서의 오리지널 프로그램 바이너리에 CFI 토큰의 삽입, (ii) 호출 CFI 검사의 삽입, (iii) 리턴 CFI 검사의 삽입, (iv) 토큰 비교 함수의 삽입, (v) 간접 호출 검사들을 위한 래퍼 함수의 삽입, (vi) 레지스터 호출 검사들을 위한 래퍼 함수의 삽입, (vii) 비정상적으로 리턴하는 함수에서 리턴 CFI 코드를 점프하기 위한 코드의 삽입, 또는 (viii) 오리지널 프로그램 바이너리에 액세스가능한 스택 프레임의 오리지널 사이즈의 변경 중 적어도 하나를 표시하는 정보를 포함한다.
[0038] 도 9a는 C(고급 아키텍처-독립적 언어)로 기록된 소스 코드의 예시적 스니펫을 예시한다.
[0039] 도 9b는 컴파일러 출력의 예를 예시한다. (예컨대, GCC 컴파일러를 사용한) 컴파일의 결과로서, 소스 코드는 고급 언어로부터 저급 아키텍처-특정 언어 이를테면, INTEL® i386 패밀리 CPU들과 연관된 x86 어셈블리어로 변환된다. 도 9b의 컴파일러 출력은 인간 판독가능한 포맷이다.
[0040] 코드를 실행하기 위해, 어셈블러 프로그램은 어셈블리어를 입력으로서 취하고, CPU가 실행할 수 있는 기계어를 생성한다. 기계어는 ASCII로 인코딩되지 않고, 인간 판독가능하지 않다.
[0041] 도 9c는 어셈블리어 코드의 디스어셈블리를 도시하는 예시적 출력을 예시한다. 도 9c의 예시적 출력은 기계어 코드들이다. 좌측은 기계어 연산 코드들의 16진수 값들이고, 우측은 기계어 연산 코드들에 대응하는 니모닉들이다. 따라서, 어셈블리어 코드의 디스어셈블리가 인간 판독가능한 니모닉들로서 기계어 동작 코드들의 디스플레이를 초래한다는 것을 인식할 것이다.
[0042] 본원에서 개시된 일부 실시예들은 이제 조항-기반 포맷으로 제시된다.
[0043] 조항 1. 사이버 하드닝하기 위해 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI(graphical user interface) 상에 시각적으로 디스플레이하는 방법으로서,
[0044] 오리지널 프로그램 바이너리를 검증하기 위해 소스 변환이 요청되는지 아니면 바이너리 변환이 요청되는지를 표시하는 정보를 수신하는 단계;
[0045] 검증이 바이너리 변환과 연관된다고 결정할 시에, 오리지널 프로그램 바이너리의 디스어셈블리와 변환된 바이너리의 디스어셈블리 사이의 바이너리 변환-기반 차이를 생성하는 단계;
[0046] 검증이 소스 변환과 연관된다고 결정할 시에, 오리지널 프로그램 바이너리의 어셈블리 소스와 소스-변환된 어셈블리 사이의 소스 변환-기반 차이를 생성하는 단계;
[0047] 한 세트의 더 작은 시각화 영역들을 포함하는 하나의 큰 시각화 영역을 GUI 상에 디스플레이하는 단계 ― 큰 시각화 영역은 오리지널 프로그램 바이너리를 표현하고, 한 세트의 더 작은 시각화 영역들은 오리지널 프로그램 바이너리를 구성 함수들 및 데이터로 분해하는 것을 표현함 ― ; 및
[0048] GUI의 더 작은 시각화 영역에 대한 선택에 대한 응답으로, 구성 함수 또는 데이터의 일부에 속하는 기본 컴퓨터 코드를 디스플레이하는 단계를 포함하며, GUI는 더 작은 시각화 영역과 연관된 컴퓨터 코드 상에 오버레이된 시각적으로 강조된 형태로 바이너리 변환-기반 차이 또는 소스 변환-기반 차이를 추가적으로 디스플레이한다.
[0049] 조항 2. 조항 1의 방법에 있어서, 바이너리 변환-기반 차이를 생성하는 단계는,
[0050] 변환된 바이너리를 생성하기 위해 오리지널 프로그램 바이너리에 바이너리 변환을 적용하는 단계; 및
[0051] 오리지널 프로그램 바이너리의 디스어셈블리 및 변환된 바이너리의 디스어셈블리를 생성하기 위해 오리지널 프로그램 바이너리 및 변환된 바이너리를 사용하는 단계를 포함한다.
[0052] 조항 3. 조항 1의 방법에 있어서, 소스 변환-기반 차이를 생성하는 단계는,
[0053] 소스-변환된 어셈블리를 생성하기 위해 오리지널 프로그램 바이너리의 어셈블리 소스에 소스 변환을 적용하는 단계를 포함한다.
[0054] 조항 4. 조항 1의 방법에 있어서, 소스 변환-기반 차이를 생성하는 단계는 오리지널 프로그램 바이너리의 디스어셈블리를 배제한다.
[0055] 조항 5. 조항 2의 방법에 있어서, 바이너리 변환-기반 차이를 생성하는 단계는,
[0056] 데이터스토어로부터 오리지널 프로그램 바이너리를 판독하는 단계를 포함한다.
[0057] 조항 6. 조항 3의 방법에 있어서, 소스 변환-기반 차이를 생성하는 단계는,
[0058] 데이터스토어로부터 오리지널 프로그램 바이너리의 어셈블리 소스를 판독하는 단계를 포함한다.
[0059] 조항 7. 조항 5의 방법에 있어서, 바이너리 변환-기반 차이는 추가 분석을 위해 데이터스토어에 기록된다.
[0060] 조항 8. 조항 6의 방법에 있어서, 소스 변환-기반 차이는 추가 분석을 위해 데이터스토어에 기록된다.
[0061] 조항 9. 조항 1의 방법에 있어서, 소스 변환은 CFI(call flow integrity) 토큰 비교들을 수행하기 위해 오리지널 프로그램 바이너리의 함수에 토큰을 삽입하는 단계를 포함한다.
[0062] 조항 10. 조항 1의 방법에 있어서,
[0063] 소스 변환 및 바이너리 변환의 제한들을 정의하는 단계를 더 포함한다.
[0064] 조항 11. 조항 1의 방법에 있어서, 시각적으로 강조된 형태로 디스플레이되는 바이너리 변환-기반 차이 또는 소스 변환-기반 차이는,
[0065] (i) 함수 호출 이후의 그리고 함수의 시작에서의 오리지널 프로그램 바이너리에 CFI 토큰의 삽입,
[0066] (ii) 호출 CFI 검사의 삽입,
[0067] (iii) 리턴 CFI 검사의 삽입,
[0068] (iv) 토큰 비교 함수의 삽입,
[0069] (v) 간접 호출 검사들을 위한 래퍼 함수의 삽입,
[0070] (vi) 레지스터 호출 검사들을 위한 래퍼 함수의 삽입,
[0071] (vii) 비정상적으로 리턴하는 함수에서 리턴 CFI 코드를 점프하기 위한 코드의 삽입, 또는
[0072] (viii) 오리지널 프로그램 바이너리에 액세스가능한 스택 프레임의 오리지널 사이즈의 변경 중 적어도 하나를 표시하는 정보를 포함한다.
[0073] 조항 12. 사이버 하드닝하기 위해 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI(graphical user interface) 상에 시각적으로 디스플레이하기 위한 명령들이 저장된 비일시적 컴퓨터 판독가능한 저장 매체로서, 명령들은, 전자 디바이스의 프로세서에 의해 실행될 때, 프로세서로 하여금,
[0074] 오리지널 프로그램 바이너리를 검증하기 위해 소스 변환이 요청되는지 아니면 바이너리 변환이 요청되는지를 표시하는 정보를 수신하게 하고;
[0075] 검증이 바이너리 변환과 연관된다고 결정할 시에, 오리지널 프로그램 바이너리의 디스어셈블리와 변환된 바이너리의 디스어셈블리 사이의 바이너리 변환-기반 차이를 생성하게 하고;
[0076] 검증이 소스 변환과 연관된다고 결정할 시에, 오리지널 프로그램 바이너리의 어셈블리 소스와 소스-변환된 어셈블리 사이의 소스 변환-기반 차이를 생성하게 하고;
[0077] 한 세트의 더 작은 시각화 영역들을 포함하는 하나의 큰 시각화 영역을 GUI 상에 디스플레이하게 하고 ― 큰 시각화 영역은 오리지널 프로그램 바이너리를 표현하고, 한 세트의 더 작은 시각화 영역들은 오리지널 프로그램 바이너리를 구성 함수들 및 데이터로 분해하는 것을 표현함 ― ; 그리고
[0078] GUI의 더 작은 시각화 영역에 대한 선택에 대한 응답으로, 구성 함수 또는 데이터의 일부에 속하는 기본 컴퓨터 코드를 디스플레이하게 하며, GUI는 더 작은 시각화 영역과 연관된 컴퓨터 코드 상에 오버레이된 시각적으로 강조된 형태로 바이너리 변환-기반 차이 또는 소스 변환-기반 차이를 추가적으로 디스플레이한다.
[0079] 조항 13. 조항 12의 비일시적 컴퓨터 판독가능한 저장 매체에 있어서, 바이너리 변환-기반 차이를 생성하기 위한 명령들은,
[0080] 변환된 바이너리를 생성하기 위해 오리지널 프로그램 바이너리에 바이너리 변환을 적용하게 하고; 그리고
[0081] 오리지널 프로그램 바이너리의 디스어셈블리 및 변환된 바이너리의 디스어셈블리를 생성하기 위해 오리지널 프로그램 바이너리 및 변환된 바이너리를 사용하기 위한 명령들을 포함한다.
[0082] 조항 14. 조항 12의 비일시적 컴퓨터 판독가능한 저장 매체에 있어서, 소스 변환-기반 차이를 생성하기 위한 명령들은,
[0083] 소스-변환된 어셈블리를 생성하기 위해 오리지널 프로그램 바이너리의 어셈블리 소스에 소스 변환을 적용하기 위한 명령들을 포함한다.
[0084] 조항 15. 조항 12의 비일시적 컴퓨터 판독가능한 저장 매체에 있어서, 시각적으로 강조된 형태로 바이너리 변환-기반 차이 또는 소스 변환-기반 차이를 디스플레이하기 위한 명령들은,
[0085] (i) 함수 호출 이후의 그리고 함수의 시작에서의 오리지널 프로그램 바이너리에 CFI 토큰의 삽입,
[0086] (ii) 호출 CFI 검사의 삽입,
[0087] (iii) 리턴 CFI 검사의 삽입,
[0088] (iv) 토큰 비교 함수의 삽입,
[0089] (v) 간접 호출 검사들을 위한 래퍼 함수의 삽입,
[0090] (vi) 레지스터 호출 검사들을 위한 래퍼 함수의 삽입,
[0091] (vii) 비정상적으로 리턴하는 함수에서 리턴 CFI 코드를 점프하기 위한 코드의 삽입, 또는
[0092] (viii) 오리지널 프로그램 바이너리에 액세스가능한 스택 프레임의 오리지널 사이즈의 변경 중 적어도 하나를 표시하는 정보를 디스플레이하기 위한 명령들을 포함한다.
[0093] 본원에서 설명된 실시예들 중 일부는, 네트워킹된 환경들에서 컴퓨터들에 의해 실행되는 프로그램 코드와 같은 컴퓨터 실행가능한 명령들을 포함하는 컴퓨터 판독가능한 매체에서 구현되는, 컴퓨터 프로그램 제품에 의해 일 실시예에서 구현될 수 있는 방법들 또는 프로세스들의 일반적 맥락에서 설명된다. 컴퓨터 판독가능한 매체는 ROM(Read Only Memory), RAM(Random Access Memory), CD(compact disc)들, DVD(digital versatile disc) 등을 포함하는(그러나 이에 제한되지 않음) 탈착식 및 비탈착식 저장 디바이스들을 포함할 수 있다. 따라서, 컴퓨터 판독가능한 매체들은 비일시적 저장 매체들을 포함할 수 있다. 일반적으로, 프로그램 모듈들은 특정 태스크들을 수행하거나 또는 특정 추상 데이터 타입들을 구현하는 루틴들, 프로그램들, 오브젝트들, 컴포넌트들, 데이터 구조들 등을 포함할 수 있다. 컴퓨터 또는 프로세서 실행가능한 명령들, 연관된 데이터 구조들, 및 프로그램 모듈들은 본원에서 개시된 방법들의 단계들을 실행하기 위한 프로그램 코드의 예들을 표현한다. 그러한 실행가능한 명령들 또는 연관된 데이터 구조들의 특정 시퀀스는 그러한 단계들 또는 프로세스들에서 설명된 기능들을 구현하기 위한 대응하는 동작들의 예들을 표현한다.
[0094] 개시된 실시예들 중 일부는 하드웨어 회로들, 소프트웨어, 또는 이들의 조합들을 사용하여 디바이스들 또는 모듈들로서 구현될 수 있다. 예컨대, 하드웨어 회로 구현은 예컨대, 인쇄 회로 보드의 일부로서 통합되는 이산 아날로그 및/또는 디지털 컴포넌트들을 포함할 수 있다. 대안적으로 또는 부가적으로, 개시된 컴포넌트들 또는 모듈들은 ASIC(Application Specific Integrated Circuit)로서 그리고/또는 FPGA(Field Programmable Gate Array) 디바이스로서 구현될 수 있다. 일부 구현들은 추가적으로 또는 대안적으로, 본 출원의 개시된 기능성들과 연관된 디지털 신호 프로세싱의 동작 요구들을 위해 최적화된 아키텍처를 갖는 특수화된 마이크로프로세서인 DSP(digital signal processor)를 포함할 수 있다. 유사하게, 각각의 모듈 내의 다양한 컴포넌트들 또는 서브컴포넌트들은 소프트웨어, 하드웨어 또는 펌웨어로 구현될 수 있다. 모듈들 및/또는 모듈들 내의 컴포넌트들 사이의 연결은 적절한 프로토콜들을 사용하여 인터넷, 유선, 또는 무선 네트워크들을 통한 통신들을 포함하는(그러나 이에 제한되지 않음), 당해 기술 분야에 알려져 있는 연결 방법들 및 매체들 중 임의의 하나를 사용하여 제공될 수 있다.
[0095] 실시예들에 대한 전술된 설명은 예시 및 설명을 목적으로 제시되었다. 전술된 설명은 포괄적이거나 본 발명의 실시예들을 개시된 정확한 형태로 제한하는 것으로 의도되지 않고, 위의 교시들에 비추어 수정들 및 변형들이 가능하거나 또는 다양한 실시예들의 실시로부터 포착될 수 있다. 본원에서 논의된 실시예들은, 다양한 실시예들의 원리들 및 특성, 및 당업자가 다양한 실시예들에서 그리고 고려되는 특정 용도에 적합한 것으로서 다양한 수정들과 함께 본 발명을 이용하는 것을 가능하게 하기 위한 그것의 실제적 애플리케이션을 설명하기 위해 선택되고 설명되었다. 본원에서 설명된 실시예들의 특징들은 방법들, 장치, 모듈들, 시스템들, 및 컴퓨터 프로그램 제품들의 모든 가능한 조합들로 조합될 수 있다.

Claims (15)

  1. 미래의 사이버 공격들로부터 오리지널 프로그램 바이너리를 선제적으로 보호하기 위해 오리지널 프로그램 바이너리를 사이버 하드닝(cyberharden)하기 위해 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI(graphical user interface) 상에 시각적으로 디스플레이하는 방법으로서,
    상기 오리지널 프로그램 바이너리를 검증하기 위해 소스 변환이 요청되는지 아니면 바이너리 변환이 요청되는지를 표시하는 정보를 수신하는 단계;
    검증이 바이너리 변환과 연관된다고 결정할 시에, 상기 오리지널 프로그램 바이너리의 디스어셈블리와 변환된 바이너리의 디스어셈블리 사이의 바이너리 변환-기반 차이를 생성하는 단계;
    검증이 소스 변환과 연관된다고 결정할 시에, 상기 오리지널 프로그램 바이너리의 어셈블리 소스와 소스-변환된 어셈블리 사이의 소스 변환-기반 차이를 생성하는 단계;
    한 세트의 더 작은 시각화 영역들을 포함하는 하나의 큰 시각화 영역을 GUI 상에 디스플레이하는 단계 ― 상기 큰 시각화 영역은 상기 오리지널 프로그램 바이너리를 표현하고, 상기 한 세트의 더 작은 시각화 영역들은 상기 오리지널 프로그램 바이너리를 구성 함수들 및 데이터로 분해하는 것을 표현함 ― ; 및
    상기 GUI의 더 작은 시각화 영역에 대한 선택에 대한 응답으로, 구성 함수 또는 상기 데이터의 일부와 관련된 기본 컴퓨터 코드를 디스플레이하는 단계를 포함하며,
    상기 GUI는 상기 더 작은 시각화 영역과 연관된 상기 컴퓨터 코드 상에 오버레이된 시각적으로 강조된 형태로 상기 바이너리 변환-기반 차이 또는 상기 소스 변환-기반 차이를 추가적으로 디스플레이하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  2. 제1 항에 있어서,
    상기 바이너리 변환-기반 차이를 생성하는 단계는,
    상기 변환된 바이너리를 생성하기 위해 상기 오리지널 프로그램 바이너리에 상기 바이너리 변환을 적용하는 단계; 및
    상기 오리지널 프로그램 바이너리의 디스어셈블리 및 상기 변환된 바이너리의 디스어셈블리를 생성하기 위해 상기 오리지널 프로그램 바이너리 및 상기 변환된 바이너리를 사용하는 단계를 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  3. 제1 항에 있어서,
    상기 소스 변환-기반 차이를 생성하는 단계는,
    소스-변환된 어셈블리를 생성하기 위해 상기 오리지널 프로그램 바이너리의 어셈블리 소스에 상기 소스 변환을 적용하는 단계를 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  4. 제1 항에 있어서,
    상기 소스 변환-기반 차이를 생성하는 단계는 상기 오리지널 프로그램 바이너리의 디스어셈블리를 배제하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  5. 제2 항에 있어서,
    상기 바이너리 변환-기반 차이를 생성하는 단계는,
    데이터스토어로부터 상기 오리지널 프로그램 바이너리를 판독하는 단계를 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  6. 제3 항에 있어서,
    상기 소스 변환-기반 차이를 생성하는 단계는,
    데이터스토어로부터 상기 오리지널 프로그램 바이너리의 어셈블리 소스를 판독하는 단계를 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  7. 제5 항에 있어서,
    상기 바이너리 변환-기반 차이는 추가 분석을 위해 상기 데이터스토어에 기록되는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  8. 제6 항에 있어서,
    상기 소스 변환-기반 차이는 추가 분석을 위해 상기 데이터스토어에 기록되는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  9. 제1 항에 있어서,
    상기 소스 변환은 CFI(call flow integrity) 토큰 비교들을 수행하기 위해 상기 오리지널 프로그램 바이너리의 함수에 토큰을 삽입하는 단계를 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  10. 제1 항에 있어서,
    상기 소스 변환 및 상기 바이너리 변환의 제한들을 정의하는 단계를 더 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  11. 제1 항에 있어서,
    상기 시각적으로 강조된 형태로 디스플레이되는 상기 바이너리 변환-기반 차이 또는 상기 소스 변환-기반 차이는,
    (i) 함수 호출 이후의 그리고 함수의 시작에서의 상기 오리지널 프로그램 바이너리에 CFI 토큰의 삽입,
    (ii) 호출 CFI 검사의 삽입,
    (iii) 리턴 CFI 검사의 삽입,
    (iv) 토큰 비교 함수의 삽입,
    (v) 간접 호출 검사들을 위한 래퍼 함수의 삽입,
    (vi) 레지스터 호출 검사들을 위한 래퍼 함수의 삽입,
    (vii) 비정상적으로 리턴하는 함수에서 리턴 CFI 코드를 점프하기 위한 코드의 삽입, 또는
    (viii) 상기 오리지널 프로그램 바이너리에 액세스가능한 스택 프레임의 오리지널 사이즈의 변경
    중 적어도 하나를 표시하는 정보를 포함하는, 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI 상에 시각적으로 디스플레이하는 방법.
  12. 미래의 사이버 공격들로부터 오리지널 프로그램 바이너리를 선제적으로 보호하기 위해 오리지널 프로그램 바이너리를 사이버 하드닝하기 위해 오리지널 프로그램 바이너리에 대해 이루어진 변경들을 컴퓨터의 GUI(graphical user interface) 상에 시각적으로 디스플레이하기 위한 명령들이 저장된 비일시적 컴퓨터 판독가능한 저장 매체로서,
    상기 명령들은, 전자 디바이스의 프로세서에 의해 실행될 때, 상기 프로세서로 하여금,
    상기 오리지널 프로그램 바이너리를 검증하기 위해 소스 변환이 요청되는지 아니면 바이너리 변환이 요청되는지를 표시하는 정보를 수신하게 하고;
    검증이 바이너리 변환과 연관된다고 결정할 시에, 상기 오리지널 프로그램 바이너리의 디스어셈블리와 변환된 바이너리의 디스어셈블리 사이의 바이너리 변환-기반 차이를 생성하게 하고;
    검증이 소스 변환과 연관된다고 결정할 시에, 상기 오리지널 프로그램 바이너리의 어셈블리 소스와 소스-변환된 어셈블리 사이의 소스 변환-기반 차이를 생성하게 하고;
    한 세트의 더 작은 시각화 영역들을 포함하는 하나의 큰 시각화 영역을 GUI 상에 디스플레이하게 하고 ― 상기 큰 시각화 영역은 상기 오리지널 프로그램 바이너리를 표현하고, 상기 한 세트의 더 작은 시각화 영역들은 상기 오리지널 프로그램 바이너리를 구성 함수들 및 데이터로 분해하는 것을 표현함 ― ; 그리고
    상기 GUI의 더 작은 시각화 영역에 대한 선택에 대한 응답으로, 구성 함수 또는 상기 데이터의 일부와 관련된 기본 컴퓨터 코드를 디스플레이하게 하며,
    상기 GUI는 상기 더 작은 시각화 영역과 연관된 상기 컴퓨터 코드 상에 오버레이된 시각적으로 강조된 형태로 상기 바이너리 변환-기반 차이 또는 상기 소스 변환-기반 차이를 추가적으로 디스플레이하는, 비일시적 컴퓨터 판독가능한 저장 매체.
  13. 제12 항에 있어서,
    상기 바이너리 변환-기반 차이를 생성하기 위한 명령들은,
    상기 변환된 바이너리를 생성하기 위해 상기 오리지널 프로그램 바이너리에 상기 바이너리 변환을 적용하고; 그리고
    상기 오리지널 프로그램 바이너리의 디스어셈블리 및 상기 변환된 바이너리의 디스어셈블리를 생성하기 위해 상기 오리지널 프로그램 바이너리 및 상기 변환된 바이너리를 사용하기 위한 명령들을 포함하는, 비일시적 컴퓨터 판독가능한 저장 매체.
  14. 제12 항에 있어서,
    상기 소스 변환-기반 차이를 생성하기 위한 명령들은,
    소스-변환된 어셈블리를 생성하기 위해 상기 오리지널 프로그램 바이너리의 어셈블리 소스에 상기 소스 변환을 적용하기 위한 명령들을 포함하는, 비일시적 컴퓨터 판독가능한 저장 매체.
  15. 제12 항에 있어서,
    상기 시각적으로 강조된 형태로 상기 바이너리 변환-기반 차이 또는 상기 소스 변환-기반 차이를 디스플레이하기 위한 명령들은,
    (i) 함수 호출 이후의 그리고 함수의 시작에서의 상기 오리지널 프로그램 바이너리에 CFI 토큰의 삽입,
    (ii) 호출 CFI 검사의 삽입,
    (iii) 리턴 CFI 검사의 삽입,
    (iv) 토큰 비교 함수의 삽입,
    (v) 간접 호출 검사들을 위한 래퍼 함수의 삽입,
    (vi) 레지스터 호출 검사들을 위한 래퍼 함수의 삽입,
    (vii) 비정상적으로 리턴하는 함수에서 리턴 CFI 코드를 점프하기 위한 코드의 삽입, 또는
    (viii) 상기 오리지널 프로그램 바이너리에 액세스가능한 스택 프레임의 오리지널 사이즈의 변경
    중 적어도 하나를 표시하는 정보를 디스플레이하기 위한 명령들을 포함하는, 비일시적 컴퓨터 판독가능한 저장 매체.
KR1020217037437A 2019-04-18 2020-04-20 Dva(difference validation and auditing) 도구 KR20220047927A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962835622P 2019-04-18 2019-04-18
US62/835,622 2019-04-18
PCT/US2020/028973 WO2020215070A1 (en) 2019-04-18 2020-04-20 Difference validation and auditing (dva) tool

Publications (1)

Publication Number Publication Date
KR20220047927A true KR20220047927A (ko) 2022-04-19

Family

ID=72837997

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217037437A KR20220047927A (ko) 2019-04-18 2020-04-20 Dva(difference validation and auditing) 도구

Country Status (4)

Country Link
US (1) US11650803B2 (ko)
EP (1) EP3956786A4 (ko)
KR (1) KR20220047927A (ko)
WO (1) WO2020215070A1 (ko)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6748584B1 (en) 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US7269828B2 (en) * 2002-12-09 2007-09-11 Sun Microsystems, Inc. Method for safely instrumenting large binary code
US8533668B2 (en) 2010-04-26 2013-09-10 Red Hat, Inc. Comparing source code using code statement structures
CA2930424C (en) * 2013-11-12 2021-08-24 Andrew Michael Wesie Improved control flow integrity system and method
US9448788B1 (en) * 2014-01-22 2016-09-20 SecondWrite LLC Binary rewriting system
US10452370B2 (en) * 2015-01-09 2019-10-22 University Of Virginia Patent Foundation System, method and computer readable medium for space-efficient binary rewriting
US10007498B2 (en) * 2015-12-17 2018-06-26 Architecture Technology Corporation Application randomization mechanism
US10657253B2 (en) * 2016-05-18 2020-05-19 The Governing Council Of The University Of Toronto System and method for determining correspondence and accountability between binary code and source code
US10656940B1 (en) * 2019-02-04 2020-05-19 Architecture Technology Corporation Systems, devices, and methods for source code generation from binary files

Also Published As

Publication number Publication date
US11650803B2 (en) 2023-05-16
WO2020215070A1 (en) 2020-10-22
EP3956786A4 (en) 2023-01-11
US20220197619A1 (en) 2022-06-23
EP3956786A1 (en) 2022-02-23

Similar Documents

Publication Publication Date Title
US9720798B2 (en) Simulating black box test results using information from white box testing
US8407800B2 (en) Method for software vulnerability flow analysis, generation of vulnerability-covering code, and multi-generation of functionally-equivalent code
Mohammadi et al. Detecting cross-site scripting vulnerabilities through automated unit testing
EP3234851B1 (en) A system and method for facilitating static analysis of software applications
US9405906B1 (en) System and method for enhancing static analysis of software applications
CN114021142A (zh) 一种安卓应用程序漏洞检测方法
Rivera-Ortiz et al. Automated modelling of security incidents to represent logging requirements in software systems
Laranjeiro et al. A technique for deploying robust web services
Kupsch et al. Bad and good news about using software assurance tools
Borzykh et al. Detecting Code Security Breaches by Means of Dataflow Analysis
Zheng et al. Regression test selection for black-box dynamic link library components
KR20220047927A (ko) Dva(difference validation and auditing) 도구
Kuusela Security testing in continuous integration processes
Peldszus et al. UMLsecRT: Reactive Security Monitoring of Java Applications with Round-Trip Engineering
Pitchford Embedded software quality, integration, and testing techniques
Heyman et al. Security in context: Analysis and refinement of software architectures
Gudka et al. Clean application compartmentalization with SOAAP (extended version)
Mariani et al. MASH: tool integration made easy
Cruz et al. Open Source Solutions for Vulnerability Assessment: A Comparative Analysis
Bhatt et al. Comparison of static and dynamic analyzer tools for iOS applications
Chang et al. Tomato: A trustworthy code mashup development tool
Almuhtadi et al. Malware Detection and Security Analysis Capabilities in a Continuous Integration/Delivery Context Using Assemblyline
Antunes et al. Software Assurance Guidance and Evaluation (SAGE) Tool
van Merode Requirements Analysis
Spottka Evaluating Dynamic AnalysisMethods for Android Applications