KR20040080843A - 악성 암호화 스크립트에 대한 분석 및 해독 방법 - Google Patents

악성 암호화 스크립트에 대한 분석 및 해독 방법 Download PDF

Info

Publication number
KR20040080843A
KR20040080843A KR1020030016206A KR20030016206A KR20040080843A KR 20040080843 A KR20040080843 A KR 20040080843A KR 1020030016206 A KR1020030016206 A KR 1020030016206A KR 20030016206 A KR20030016206 A KR 20030016206A KR 20040080843 A KR20040080843 A KR 20040080843A
Authority
KR
South Korea
Prior art keywords
function
script
decryption
code
malicious
Prior art date
Application number
KR1020030016206A
Other languages
English (en)
Other versions
KR100503387B1 (ko
Inventor
이성욱
홍만표
조시행
Original Assignee
주식회사 안철수연구소
홍만표
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 안철수연구소, 홍만표 filed Critical 주식회사 안철수연구소
Priority to KR10-2003-0016206A priority Critical patent/KR100503387B1/ko
Priority to US10/685,153 priority patent/US7409718B1/en
Publication of KR20040080843A publication Critical patent/KR20040080843A/ko
Application granted granted Critical
Publication of KR100503387B1 publication Critical patent/KR100503387B1/ko

Links

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/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/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 악성 암호화 스크립트에 대한 분석 및 해독 방법에 관한 것이다.
이러한 본 발명은 악성 스크립트의 암호화 기법을 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우, 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 있는 비독립함수인 경우, 해독함수가 존재하지 않는 경우로 구분하여 분류하되, 상기 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우는, 상기 독립함수에 대한 호출식과 함수정의를 추출하는 단계; 추출된 상기 독립함수에 대한 호출식과 함수정의를 실행 또는 에뮬레이션하는 단계; 및 원래의 호출식이 위치한 원본 스크립트에 실행이나 에뮬레이션에 따른 결과값을 대치하여 해독된 스크립트를 취득하는 단계를 포함한 것을 특징으로 한다.
본 발명에 따르면, 해독에 필요한 추가적인 자료없이도 단지 1개의 해독 알고리즘을 통해서 빠르고 용이하게 알려지지 아니한 악성코드도 해독할 수 있다. 또한, 해당 스크립트에서 상수화 할 수 있는 모든 값을 상수로 대치함으로써 암호화된 코드의 해독 뿐만 아니라 추후 코드 분석의 복잡도를 감소시킬 수 있다.

Description

악성 암호화 스크립트에 대한 분석 및 해독 방법{METHOD TO DECRYPT AND ANALYZE THE ENCRYPTED MALICIOUS SCRIPTS}
본 발명은 악성 암호화 스크립트에 대한 분석 및 해독 방법에 관한 것으로서, 특히 스크립트 암호화 기법에 대한 분석적인 접근을 통해 새로운 암호화 기법의 출현에 대해서도 유연하게 대처할 수 있는 기술에 관한 것이다.
일반적으로, 암호화(Encryption)는 그 의미가 드러나지 않도록 메시지를 인코딩(Encoding)하는 절차 또는 기법을 의미한다. 그러나, 컴퓨터 바이러스 또는 악성코드에 있어서의 암호화는 악성코드를 변조(Scrambling)함에 의해 바이러스 탐색기(Scanner)가 해당 악성코드의 시그니처(Signature)를 찾지 못하도록 숨기는 기법을 지칭한다. 시그니처란 특정의 악성코드에만 존재하며 다른 프로그램에는 존재하지 않는 짧은 문자열로서, 다른 일반적인 프로그램(Legitimate program)들과 악성코드를 구분하고 그것이 어떠한 악성코드인지를 식별하는데 이용된다. 시그니처를 이용한 악성코드 탐지 방식은 다른 기법에 비해 상대적으로 빠른 속도를 보여주기 때문에 현존하는 대부분의 안티-바이러스(Anti-virus) 제품들이 이러한 시그니처 기반의 감지 방식을 채택하고 있으며, 이에 약간의 휴리스틱(Heuristic) 알고리즘을 결합한 형태가 주종을 이루고 있다.
그런데, 이러한 감지 방식에 대응하기 위하여, 악성코드 제작자들은 바이러스에 별도의 암호화 기능을 추가하고 있다. 일반적으로, 암호화된 악성코드는 해독루틴과 키값, 그리고 암호화된 악성코드로 구성되고, 실행시에 해독루틴이 먼저 수행된다. 따라서, 해독루틴은 암호화된 악성코드를 해독하고 해독된 악성코드 쪽으로 제어를 넘김으로써 악성코드가 실행되도록 한다. 이로 인해, 악성코드가 다른 시스템 또는 다른 화일에 자기 복제(Self-replication)를 시도할 때 새로운 키값을사용하여 인코딩 하는 것만으로 전혀 다른 형태를 보이므로 단순한 스캐닝만으로는 감지할 수 없게 된다.
한편, 이러한 암호화 바이러스에 대한 대응 기법으로는 엑스-레잉(X-raying)과 에뮬레이션(Emulation) 기법이 사용되고 있다. 엑스-레잉 기법은 해당 악성코드에서 찾아야 하는 시그니처와 악성코드가 사용하는 해독 알고리즘에 대한 사전 지식을 이용하여 그 범위를 좁힌 후에 모든 경우를 시도(Brute-force decryption)하는 방법을 말한다. 즉, 해당 악성코드의 암호화 기법과 시그니처에 대한 모든 정보가 있으며 단지 정확한 키값만을 모르는 경우에 가능한 모든 키값을 이용하여 시그니처가 나타날 수 있는 위치의 문자열을 해독하고 이것이 시그니처와 동일한 값을 가지는지를 검사하여 악성코드 여부를 판단한다. 그러나, 이러한 방법은 찾고자 하는 악성코드의 암호화 기법과 특성이 면밀히 분석되어 충분한 사전 지식이 얻어진 후에 실행이 가능하므로, 알려지지 않은 새로운 악성코드에는 적용하기 어렵다는 단점을 가진다.
에뮬레이션 기법은 악성코드를 에뮬레이션하여 해독된 코드를 얻는 방법을 말한다. 이진 형태의 악성코드는 해독루틴이 가장 먼저 실행되며, 그 크기가 매우 작기 때문에 가상 기계에서 해당 코드의 일부를 실행함으로써 해독된 악성코드를 얻을 수 있다. 이때, 모든 해독이 완료된 코드를 얻어내려고 한다면 가상기계의 각 메모리 유닛을 감시하여 코드 부분의 메모리에 더 이상의 변화가 일어나지 않는 시점까지 실행을 계속해야 하며, 시그니처 기반의 감지 방법과 결합하여 사용하는 경우에는 시그니처가 위치한 메모리 값들의 해독이 완료되면 그 즉시 에뮬레이션을중단하고 시그니처 비교를 실시하게 된다. 이같은 특정 시점까지의 완전한(무조건적인) 에뮬레이션 기법은 이진 파일 형태의 악성코드를 해독하는데 효과적이나, 스크립트를 위한 에뮬레이터 구축은 이진 실행 화일에 비해 어려운 것이 현실이다. 즉, 완전한 에뮬레이션을 위해서는 대상 코드가 실행될 수 있는 모든 환경을 가상적으로 만들어 주어야 하는데, 마이크로소프트 비주얼 베이직 스크립트와 같은 스크립트 언어의 경우에는 해당 프로그램에서 사용하는 각종 객체와 제반 환경들을 모두 에뮬레이션 하는 것이 현실적으로 어려우며 부하가 크기 때문이다. 또한, 아무런 위해(Harm) 행위를 하지 않는 일반적인 코드와는 달리, 악성코드는 단순하게 실행시켜 보면서 실행 내역을 프로파일링(Profiling)하는 기법을 사용할 수도 없다.
결론적으로, 상술한 방법들은 해당 악성코드의 특성과 행위가 알려져 있는 경우에만 적용 가능하거나 이진 화일의 형태를 가진 악성코드의 해독에 적합한 형태이므로, 알려지지 않은 암호화 스크립트에는 적용하기 어려운 것이 사실이다. 따라서, 종래의 스크립트 악성코드에서 사용하는 암호화 기법의 패턴과 해독방법을 정의하고 이를 이용하는 휴리스틱 기반의 방법론이 스크립트 악성코드를 위한 가장 현실적인 암호 해독 기법으로 간주되고 있다. 예컨대, 종래의 많은 비주얼 베이직 스크립트 악성코드는 실제의 악성코드를 하나의 문자열에 암호화하여 놓고 이를 스크립트 언어에서 정의하는 'execute' 문장을 통해 실행시키는 형태로 구성되어 있다. 이러한 경우, 주어진 스크립트에서 'execute' 문장을 찾아 이 문장에서 호출되는 함수를 해독함수로 간주하여 이를 실행 또는 에뮬레이션함으로써 해독된 악성코드를 얻을 수 있다. 이러한 형태의 암호 해독함수는 상술한 각종 객체와 제반 환경들을 모두 사용하지 않는 기본적인 언어 구조만으로 이루어져 있으며, 프로그램 선두에서 오직 한번만 실행된다. 따라서, 상술한 바와 같은 완전한 에뮬레이션이 필요하지 않게 되며 기본 기능만을 가진 경량의 에뮬레이터만으로도 이러한 형태의 암호 해독 함수를 실행할 수 있으므로 에뮬레이터 구축과 에뮬레이션에 대한 부담은 크지 않게 된다.
그러나, 휴리스틱 기반의 접근은 새로운 암호화 패턴이 출현할 때마다 이를 처리할 수 있는 코드를 바이러스 탐색기에 추가하여야 하므로, 알려지지 않은 악성 스크립트에 원활하게 대응할 수 없다는 근본적인 문제점을 가지고 있다. 특히, 스크립트 악성코드에서 독특하게 나타나고 있는 문자열 단위의 부분 암호화에 원활하게 대응하기 어렵게 된다.
이에 본 발명은 상기와 같은 문제점을 해결하기 위하여 안출된 것으로서, 현재의 암호화 기법 뿐만 아니라 향후 등장할 수 있는 기법들까지 포괄 할 수 있는 정확한 분류 체제를 수립하고 스크립트 암호화 기법에 대한 분석적인 접근을 통해 새로운 암호화 기법의 출현에 대해서도 유연하게 대처할 수 있는 악성 암호화 스크립트에 대한 분석 및 해독 방법을 제공하는데 그 목적이 있다.
상기와 같은 목적을 달성하기 위하여 본 발명에 따른 악성 암호화 스크립트에 대한 분석 및 해독 방법은, 악성 스크립트의 암호화 기법을 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우, 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 있는 비독립함수인 경우, 해독함수가 존재하지 않는 경우로 구분하여 분류하되, 상기 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우는, 상기 독립함수에 대한 호출식과 함수정의를 추출하는 단계; 추출된 상기 독립함수에 대한 호출식과 함수정의를 실행 또는 에뮬레이션하는 단계; 및 원래의 호출식이 위치한 원본 스크립트에 실행이나 에뮬레이션에 따른 결과값을 대치하여 해독된 스크립트를 취득하는 단계를 포함한 것을 특징으로 한다.
이때, 상기 해독함수의 외부코드와의 의존성 여부는, 해독함수 내부의 모든 코드의 외부코드와의 의존성 여부, 모든 프로그램 내에서 해독함수 호출에 대한 실 인자의 상수 여부, 및 해독함수 내부에서의 부작용이 없는 함수만의 호출 여부에 따라 판단할 수 있는데, 상기 해독함수 내부의 모든 코드의 외부코드와의 의존성 여부는,
= 스크립트에 정의된 함수의 갯수,
= 스크립트에번째로 정의된 함수(1≤),
= 함수 에서 정의 또는 사용된 모든 변수의 집합(1≤),
= 함수 에서 Dim으로 선언된 모든 변수의 집합(1≤), 및
= 어떤 함수에도 속하지 않는 글로벌(global) 영역에서 정의 또는 사용된 변수의 집합이라 할 때,
함수 에서 정의 또는 사용된 전역 변수의 집합 는 다음의 수학식
에 따라 구하고,
함수 의 외부 영역에서 정의 또는 사용된 변수들의 집합 는 다음의 수학식
에 따라 구하되,
함수 가 다음의 수학식
를 만족할 때,
함수 내부의 모든 코드는 외부코드와 의존성이 없다고 판단하여 바람직하게 실시할 수 있다.
도 1 은 본 발명에 따른 악성 스크립트의 암호화 기법의 분류도,
도 2 는 하나의 문자열로 암호화된 악성 스크립트의 실예,
도 3 은 일부 문자열들이 암호화된 악성 스크립트의 실예,
도 4 는 본 발명에 따라 별도의 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우의 암호 해독 절차를 설명하는 흐름도,
도 5 는 도 3 에 제시된 악성 스크립트에서 얻어진 임시 스크립트의 예,
도 6 은 도 5 와 같은 임시 스크립트를 실행한 결과를 나타낸 예,
도 7 은 도 6 과 같은 실행한 결과값을 대치하여 해독된 악성 스크립트를 나타낸 예이다.
이하, 첨부된 도면을 참조하여 본 발명을 상세히 설명하기로 한다.
도 1 은 본 발명에 따른 악성 스크립트의 암호화 기법의 분류도로서, 암호 해독루틴이 악성코드의 몸체(Body)와 얼마나 깊게 연관되어 있는가에 따른 것이다. 즉, 해독함수의 존재 여부, 및 해독함수가 존재할 경우 해독함수의 외부코드와의의존성 여부에 따라 분류한다. 따라서, 별도의 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우(이하, '유형 1'이라 함), 별도의 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 있는 비독립함수인 경우(이하, '유형 2'라 함), 해독함수가 존재하지 않는 경우(이하, '유형 3'이라 함)로 분류할 수 있다. 유형 1은 해독루틴이 가장 독립적으로 존재함으로써 독립적인 실행이 가능한 경우이고, 유형 3은 전체 코드 중 임의의 부분에 삽입되어 프로그램의 실행 상태와 밀접하게 연관된 경우이다.
한편, 이같은 분류를 좀 더 명확하게 하기 위해서는 단일루틴 내에서 정의되는 코드간의 의존성과는 달리, 해독함수와 외부코드간의 의존성을 정의할 필요가 있다. 즉, 프로그램 코드 내에 정의된 함수가 아래와 같은 세 가지 조건을 만족할때 '함수가 외부와 의존성이 없다' 또는 '함수가 독립적이다' 라고 하고, 이때 '함수를 독립함수' 라 한다.
① 함수 내부의 모든 코드가 외부 코드와 의존성이 없어야 한다. 즉, 함수내에서 정의 또는 사용된 전역 변수들의 집합을()라 하고, 외부에서 정의 또는 사용된 전역 변수들의 집합을()라 할 때,() ∩()=φ이어야 한다.
② 모든 프로그램 내에서, 함수호출에 대한 실 인자(Actual parameter)는 반드시 상수로 주어져야 한다. 변수가 인자로 주어질 경우 이를 통하여 의존성이 발생하기 때문이다.
③ 함수 내부에서 부작용(Side effect)이 없는 함수만을 호출하여야 한다. 여기에서의 부작용은 I/O 또는 이를 유발하는 모든 행위를 지칭하며, 외부와 의존성이 있는 다른 함수를 실행시켜 간접적으로 의존성을 유발하는 경우까지 포함한다.
이제, 상기 ① 의 조건에 대해 좀 더 상세히 설명하기로 한다. 특정함수가 독립함수인지를 판단하려면 이것이 사용하는 변수와 함수에 대한 분석이 이루어져야 한다. 독립함수가 사용할 수 있는 함수는 부작용이 없는 내장 함수와 다른 독립 함수뿐이고, 내장 함수는 언어 사양(Specification)에 명시적으로 정의되어 있으므로 그 중에서 I/O 등의 부작용이 없는 함수들의 리스트를 따로 정의하면 사용유무를 손쉽게 알아낼 수 있다. 그러나, 해당 함수가 지역 변수만을 사용하는 함수인가를 검사하는 작업은 이에 비해 복잡한 과정을 거쳐야 한다.
모든 변수가 명시적으로 선언된 후 사용되는 일반적인 함수 기반 언어에서는, 각 영역에서 선언된 변수의 집합을 추출하고 해당 함수 내에서 전역 변수를 사용하는지를 검사하는 작업이 비교적 단순하게 이루어진다. 그러나, 비주얼 베이직 스크립트와 같은 인터프리터 기반 스크립트 언어는 일반적인 함수 기반 언어와는 달리 변수의 선언을 반드시 필요로 하지 않는다. 또한, 함수 내부에서 정의되었다 하더라도 Dim 문장을 통해 그것이 지역 변수임을 명시하지 않은 것은 모두 전역 변수로 간주된다. 따라서, 전역 변수의 완전한 리스트를 얻기 위해서는 각각의 함수 내부까지 모든 코드를 검사하여야 한다. 해독 알고리즘을 위한 독립 함수의 존재를 판단할 수 있는 조건은 다음과 같이 정의된다. 먼저, 사용되는 기호를 아래와 같이정의하기로 한다.
= 스크립트에 정의된 함수의 갯수
= 스크립트에번째로 정의된 함수(1≤)
= 함수 에서 정의 또는 사용된 모든 변수의 집합(1≤)
= 함수 에서 Dim으로 선언된 모든 변수의 집합(1≤)
= 어떤 함수에도 속하지 않는 글로벌(global) 영역에서 정의 또는 사용된 변수의 집합
이때, 함수 에서 정의 또는 사용된 전역 변수의 집합 와, 함수 의 외부 영역에서 정의 또는 사용된 변수들의 집합 는 아래의 수학식 1과 수학식 2에 따라 구할 수 있다.
따라서, 함수 가 독립함수이려면 아래의 수학식 3의 조건을 만족하여야 한다.
즉, 독립함수 는 자신을 제외한 외부 영역에서 정의 또는 사용된 어떠한 변수도 정의하거나 사용하지 않는 함수이다.
다른 한편, 실용적인 측면에서 악성 스크립트의 암호화 기법을 살펴 볼 때, 현재의 보편적인 스크립트 악성코드의 암호화 패턴은 크게 두 가지로 분류할 수 있다. 첫번째 패턴은 악성코드 전체가 하나의 문자열로 암호화 되어 있는 경우로서, 도 2 는 VBS/VBSWG.T로 명명된 악성 스크립트를 나타낸다. 비주얼 베이직 스크립트의 'execute' 문장은 인자로 주어진 문자열을 프로그램 코드로 보고 실행하므로, 먼저 해독함수를 호출하게 된다. 따라서, 전체 코드가 완전히 해독된 후에 실행을 개시하게 된다.
두번째 패턴은 프로그램에서 사용하는 일부 문자열을 암호화한 경우로서, 도 3 은 VBS/TripleSix 로 명명된 악성 스크립트를 나타낸다. 이러한 유형의 악성 스크립트는 하나 또는 그 이상의 암호 해독 함수를 가지며, 함수의 인자 또는 대입문의 우변값(r-value) 들에 사용되는 임의의 문자열이 암호화된 형태를 보여준다. 따라서, 첫번째 패턴과는 달리 실행이 진행되면서 필요한 시점에 필요한 문자열이 해독되는 방식으로 동작하게 된다.
이때, 첫번째 형태의 패턴은 특정한 코드 패턴을 찾는 단순한 접근으로도 해독 가능하나, 두번째 형태의 패턴은 해당 악성 코드에 대한 사전지식 없이 자동적으로 해독 함수를 찾아내는 일이 난해하므로, 새로운 악성 스크립트에 대응하는데 어려움이 따르게 된다. 그러나, 본 발명에 따른 악성 스크립트의 암호화 기법의 분류에 따르면, 모두 유형 1에 속해 동일한 특성을 가지고 있으므로 외형상의 패턴에 관계없이 동일한 방법으로 해독할 수 있다.
이제, 알려지지 아니한 암호화 스크립트의 해독에 대해 살펴보기로 한다. 암호화된 악성코드의 해독과정에 있어서, 그것이 에뮬레이션 또는 실제 실행에 의하든 어느 정도의 프로그램 실행을 필요로 한다. 그러나, 상술한 바와 같이 완벽한 에뮬레이터의 이용이나 단순한 프로파일링 기법의 사용에는 많은 문제가 있으며, 이러한 문제를 회피하기 위해서는 해당 스크립트의 암호를 해독하는데 필요한 부분만을 발췌하여 실행하는 방법이 필요하게 된다. 특히, 알려지지 않은 새로운 스크립트를 대상으로 한다면 다음과 같은 두 가지 문제에 직면하게 된다.
첫째, '대상 스크립트가 암호화되어 있는가' 를 판단하는 문제이다. 이미 안티-바이러스 개발자들에 의해 분석된 악성코드는 암호화 여부와 암호 해독 방법이 알려져 있다. 그러나, 새롭게 등장한 악성코드의 경우에는 아무런 사전 지식 없이 대상 스크립트의 분석만으로 암호화 여부를 판단하여야 한다.
둘째, '대상 스크립트의 암호 해독 루틴이 어떤 것인가' 를 탐색하는 문제이다. 암호화된 스크립트에는 해독 함수 외에도 많은 함수들이 정의되어 있을 수 있다. 따라서, 새로운 암호화 기법의 출현에 영향 받지 않도록 특정 코드 패턴에 의존하지 않고 해독 함수의 집합을 찾아내야 한다.
이러한 문제에 대해 본 발명에서 제안하는 해결책은 대상 스크립트가 암호화되었는지, 또는 암호 해독 루틴이 어떤 것인지 분석하기보다는 해당 스크립트에서 상수화 할 수 있는 모든 값을 상수로 대치함으로써 자연적인 암호 해독을 유도하는 것이다. 자신이 악성 행위를 시도 중임을 사용자가 의식하지 못하도록 해야하는 악성 코드의 본질로 인해, 대부분의 악성코드는 특별한 사용자 입력을 받지 않으며 어느 시스템에서나 공통적으로 얻을 수 있는 자원만을 사용하게 된다. 따라서, 악성코드에 입력되는 데이터 집합은 일반 프로그램에 비해 상당히 고정적인 성향을 띄게 되고, 이로 인해 프로그램 내의 많은 변수들이 실제로 매 실행 시마다 동일한 값을 가지게 된다. 특히, 암호화에 관련된 부분은 어떤 상황에서도 원래 의도한 코드를 복원하여야 하므로 이같은 경향이 더욱 두드러지게 나타난다. 따라서, 이러한 기본 방법론은 유형 1의 암호화에 다음과 같이 적용될 수 있다.
유형 1은 해독함수가 독립함수로 존재하므로, 단순히 독립함수의 실행 결과 값을 대치하는 것만으로 암호화된 내용의 해독이 가능하다. 도 4 는 본 발명에 따라 별도의 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우의 암호 해독 절차를 설명하는 흐름도이다. 도 4 를 참조하면, 독립함수에 대한 호출식(Call expression)과 함수정의를 추출하여, 이것을 실행하거나 에뮬레이션한다(S410,S420). 이어서, 원래의 호출식이 위치한 원본 스크립트에 각각의 실행이나 에뮬레이션에 따른 결과값을 대치하여 해독된 스크립트를취득한다(S430,S440). 이때, 실제로 암호 해독과는 관계없는 다른 함수도 독립함수로 판정되어 실행될 수 있으나, 이것은 스크립트에 어떠한 문제도 발생시키지 않는다. 독립함수의 리턴값은 정의에 따라 주어진 인자에만 영향을 받으므로 어떤 상태에서 실행하여도 동일한 인자에 대해서 동일한 값이 산출되기 때문이다.
이번에는, 본 발명의 이해를 돕기 위해서 유형 1과 같은 암호화에 대응하기 위한 해독 알고리즘의 구체적인 동작 사례에 대해 설명하기로 한다. 상술한 바와 같이, 독립함수 호출식의 결과값을 얻는 방법은 실제 실행과 에뮬레이션의 두 가지가 존재하며, 에뮬레이션의 경우에는 에뮬레이터 내부의 자료 구조를 통해 추출된 함수 호출식만을 실행하는 것이 가능하므로, 이하에서는 실제 실행을 통해 결과 값을 얻는 사례를 제시한다.
먼저, 독립함수가 모두 밝혀지면 이에 대한 호출식을 모두 추출하여 임시 스크립트를 생성한다. 임시 스크립트는 다음과 같은 역할을 수행하는 문장들로 구성하는 것이 바람직하다.
a. 결과값 출력을 위한 화일 개방 및 종결
b. 독립 함수 호출 후 리턴 값을 화일에 기록
c. 독립 함수 정의
d. 타입 핸들링(type handling) 함수 정의
도 5 는 도 3 에 제시된 악성 스크립트에서 얻어진 임시 스크립트의 예로서, 함수 V와 H가 독립함수로 판정되어 이들에 대한 호출 결과를 화일에 기록하고 있음을 보여준다. 이때, 함수 호출식의 결과값 뿐만 아니라 해당 호출식에 관련된 정보가 함께 기록되는데, 제시된 예에서 함수 호출식의 앞에 기술된 숫자들이 이에 해당한다. 이러한 정보들은 다음 단계에서의 처리에 이용되며, 그 의미는 다음과 같다.
e. 해당 함수 호출식이 있었던 원본 스크립트의 행, 열, 호출식의 문자열 길이
f. 해당 호출을 포함하고 있는 함수의 ID
g. 실행 결과 값의 문자열 길이
h. 실행 결과값
이러한 정보들 중에서 실행 결과 값의 문자열 길이와 실행 결과값은 타입 핸들링 함수를 통해 얻어진다. 타입 핸들링 함수의 존재는 비주얼 베이직 스크립트의 특성에 기인한 것으로, 비주얼 베이직 스크립트에는 'Variant' 라는 단 한 가지의 타입만이 존재하며 특정값이 주어지면 아래의 표 1 과 같은 부타입(subtype)이 결정된다. 따라서, 비주얼 베이직 스크립트의 함수는 마치 매크로 함수와 같이 매번 다른 타입의 인자를 받을 수도 있으며, 그에 따라 다른 타입의 결과값을 돌려 줄 수도 있다.
Subtype Description Convertile
vbEmptyvbNullvbIntegervbLongvbSinglevbDoublevbCurrencyvbDatevbStringvbObjectvbErrorvbBooleanvbVariantvbDataObjectvbBytevbArray Empty (uninitialized)Null (no valid data)IntegerLong integerSingle-precision floating-point numberDouble-precision floating-point numberCurrencyDataStringAutomation objectErrorBooleanVariant ( used only with arrays of Variants)A data-access objectByteArray ××OOOOOOO××O××O×
이러한 비주얼 베이직 스크립트의 특성으로 인해 리턴값의 타입을 실행 전에 확신할 수 없게 되고, 실행 시간에 이를 위한 별도의 처리가 필요하게 된다. 즉, 임시 스크립트를 생성하고 실행하는 것은 그 결과값을 미리 얻어 원본 스크립트의 함수 호출식에 대치하기 위한 것인데, 부타입에 따라 문자열로의 변환이 불가능하여 스크립트에 직접 써넣을 수 없는 무형의 값도 존재하게 된다. 이와 더불어, 문자열로 표현 가능한 부타입이라도 원본 스크립트에 삽입하기 위해서는, 문자열의 양끝에는 따옴표를, Date 타입의 양끝에는 # 을 붙여주고, 기타 숫자형인 경우에는 그대로 문자열로 변환하는 작업을 해주어야 한다.
이러한 문제의 해결을 위해, 각각의 함수 호출식의 실행 결과는 도 5 에 RunFunc로 나타난 타입 핸들링 함수를 거쳐 적절한 형태의 문자열로 먼저 변환된다. 이때, 문자열로 변환할 수 없는 부타입을 가지는 결과값이 나타나면, 결과값의 길이를 0 으로 기록함으로써 함수 호출식 대치 과정에서 이를 인지하도록 한다.
이어서, 상기의 과정을 통해 임시 스크립트가 생성되면, 윈도우즈 스크립팅 호스트(Windows Scripting Host)의 호출을 통해 이를 실행시켜 해당 함수의 실행 결과값을 얻는다. 이때, 도 5 와 같이 생성된 임시 스크립트에서 얻어진 실행 결과는 도 6 과 같다. 이렇게 함수 호출식의 결과값이 얻어지면, 이 값들을 원본 스크립트에 대치하여 해독된 스크립트를 얻는다. 상술한 바와 같이 결과값의 문자열 길이가 0 인 것은 이러한 작업에서 제외되며, 또한 모든 함수 호출이 완전하게 대치된 독립함수의 정의 부분은 스크립트 실행에 아무런 영향을 주지 않으므로 삭제될 수 있다. 함수 호출 결과값 대치 이후에 해독된 악성 스크립트는 도 7 과 같다. 즉, 암호화되었던 모든 부분 문자열이 해독되었으며 해독 함수 V와 H의 모든 호출식이 결과값으로 대치되어 함수의 정의가 삭제된 것을 확인할 수 있다.
이상 설명한 바와 같이, 악성 암호화 스크립트에 대한 분석 및 해독 방법은 해독에 필요한 추가적인 자료없이도 단지 1개의 해독 알고리즘을 통해서 빠르고 용이하게 알려지지 아니한 악성코드도 해독할 수 있다. 또한, 해당 스크립트에서 상수화 할 수 있는 모든 값을 상수로 대치함으로써 암호화된 코드의 해독 뿐만 아니라 추후 코드 분석의 복잡도를 감소시킬 수 있다.

Claims (3)

  1. 암호화된 악성 스크립트를 분석하여 해독하는 방법에 있어서,
    악성 스크립트의 암호화 기법을 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우, 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 있는 비독립함수인 경우, 해독함수가 존재하지 않는 경우로 구분하여 분류하되,
    상기 해독함수가 존재하면서 해독함수가 외부코드와의 의존성이 없는 독립함수인 경우는,
    상기 독립함수에 대한 호출식과 함수정의를 추출하는 단계;
    추출된 상기 독립함수에 대한 호출식과 함수정의를 실행 또는 에뮬레이션하는 단계; 및
    원래의 호출식이 위치한 원본 스크립트에 실행이나 에뮬레이션에 따른 결과값을 대치하여 해독된 스크립트를 취득하는 단계를 포함한 것을 특징으로 하는 악성 암호화 스크립트에 대한 분석 및 해독 방법.
  2. 제 1 항에 있어서 상기 해독함수의 외부코드와의 의존성 여부는,
    해독함수 내부의 모든 코드의 외부코드와의 의존성 여부, 모든 프로그램 내에서 해독함수 호출에 대한 실 인자의 상수 여부, 및 해독함수 내부에서의 부작용이 없는 함수만의 호출 여부에 따라 판단하는 것을 특징으로 하는 악성 암호화 스크립트에 대한 분석 및 해독 방법.
  3. 제 2 항에 있어서 상기 해독함수 내부의 모든 코드의 외부코드와의 의존성 여부는,
    = 스크립트에 정의된 함수의 갯수,
    = 스크립트에번째로 정의된 함수(1≤),
    = 함수 에서 정의 또는 사용된 모든 변수의 집합(1≤),
    = 함수 에서 Dim으로 선언된 모든 변수의 집합(1≤), 및
    = 어떤 함수에도 속하지 않는 글로벌(global) 영역에서 정의 또는 사용된 변수의 집합이라 할 때,
    함수 에서 정의 또는 사용된 전역 변수의 집합 는 다음의 수학식
    에 따라 구하고,
    함수 의 외부 영역에서 정의 또는 사용된 변수들의 집합 는 다음의 수학식
    에 따라 구하되,
    함수 가 다음의 수학식
    를 만족할 때,
    함수 내부의 모든 코드는 외부코드와 의존성이 없다고 판단하는 것을 특징으로 하는 악성 암호화 스크립트에 대한 분석 및 해독 방법.
KR10-2003-0016206A 2003-03-14 2003-03-14 악성 암호화 스크립트에 대한 분석 및 해독 방법 KR100503387B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR10-2003-0016206A KR100503387B1 (ko) 2003-03-14 2003-03-14 악성 암호화 스크립트에 대한 분석 및 해독 방법
US10/685,153 US7409718B1 (en) 2003-03-14 2003-10-14 Method of decrypting and analyzing encrypted malicious scripts

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2003-0016206A KR100503387B1 (ko) 2003-03-14 2003-03-14 악성 암호화 스크립트에 대한 분석 및 해독 방법

Publications (2)

Publication Number Publication Date
KR20040080843A true KR20040080843A (ko) 2004-09-20
KR100503387B1 KR100503387B1 (ko) 2005-07-26

Family

ID=37365436

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-0016206A KR100503387B1 (ko) 2003-03-14 2003-03-14 악성 암호화 스크립트에 대한 분석 및 해독 방법

Country Status (2)

Country Link
US (1) US7409718B1 (ko)
KR (1) KR100503387B1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7058822B2 (en) 2000-03-30 2006-06-06 Finjan Software, Ltd. Malicious mobile code runtime monitoring system and methods
US8079086B1 (en) 1997-11-06 2011-12-13 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US9219755B2 (en) 1996-11-08 2015-12-22 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US6901519B1 (en) * 2000-06-22 2005-05-31 Infobahn, Inc. E-mail virus protection system and method
US8112799B1 (en) 2005-08-24 2012-02-07 Symantec Corporation Method, system, and computer program product for avoiding cross-site scripting attacks
US8151352B1 (en) * 2006-07-14 2012-04-03 Bitdefender IPR Managament Ltd. Anti-malware emulation systems and methods
US8375449B1 (en) 2007-08-10 2013-02-12 Fortinet, Inc. Circuits and methods for operating a virus co-processor
US8079084B1 (en) * 2007-08-10 2011-12-13 Fortinet, Inc. Virus co-processor instructions and methods for using such
US9100319B2 (en) 2007-08-10 2015-08-04 Fortinet, Inc. Context-aware pattern matching accelerator
US8205260B2 (en) * 2007-12-19 2012-06-19 Symantec Operating Corporation Detection of window replacement by a malicious software program
KR101181843B1 (ko) 2010-12-21 2012-09-11 한국인터넷진흥원 후킹 기법을 이용한 난독화 자바 스크립트 자동해독 및 악성 웹 사이트 탐지 방법
US8555388B1 (en) 2011-05-24 2013-10-08 Palo Alto Networks, Inc. Heuristic botnet detection
US8966625B1 (en) 2011-05-24 2015-02-24 Palo Alto Networks, Inc. Identification of malware sites using unknown URL sites and newly registered DNS addresses
US9215239B1 (en) 2012-09-28 2015-12-15 Palo Alto Networks, Inc. Malware detection based on traffic analysis
US9104870B1 (en) * 2012-09-28 2015-08-11 Palo Alto Networks, Inc. Detecting malware
US10019575B1 (en) 2013-07-30 2018-07-10 Palo Alto Networks, Inc. Evaluating malware in a virtual machine using copy-on-write
US9811665B1 (en) 2013-07-30 2017-11-07 Palo Alto Networks, Inc. Static and dynamic security analysis of apps for mobile devices
US9613210B1 (en) 2013-07-30 2017-04-04 Palo Alto Networks, Inc. Evaluating malware in a virtual machine using dynamic patching
US10171483B1 (en) 2013-08-23 2019-01-01 Symantec Corporation Utilizing endpoint asset awareness for network intrusion detection
US9690936B1 (en) * 2013-09-30 2017-06-27 Fireeye, Inc. Multistage system and method for analyzing obfuscated content for malware
US9489516B1 (en) 2014-07-14 2016-11-08 Palo Alto Networks, Inc. Detection of malware using an instrumented virtual machine environment
US9805193B1 (en) 2014-12-18 2017-10-31 Palo Alto Networks, Inc. Collecting algorithmically generated domains
US9542554B1 (en) 2014-12-18 2017-01-10 Palo Alto Networks, Inc. Deduplicating malware
US10754947B2 (en) * 2015-11-30 2020-08-25 International Business Machines Corporation System, method and apparatus for usable code-level statistical analysis with applications in malware detection
EP3352110B1 (en) * 2017-01-23 2020-04-01 Cyphort Inc. System and method for detecting and classifying malware
US10956573B2 (en) 2018-06-29 2021-03-23 Palo Alto Networks, Inc. Dynamic analysis techniques for applications
US11010474B2 (en) 2018-06-29 2021-05-18 Palo Alto Networks, Inc. Dynamic analysis techniques for applications
US11196765B2 (en) 2019-09-13 2021-12-07 Palo Alto Networks, Inc. Simulating user interactions for malware analysis
CN113051004B (zh) * 2021-03-30 2022-04-15 北京字节跳动网络技术有限公司 一种依赖函数的处理方法、装置、设备及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5696822A (en) * 1995-09-28 1997-12-09 Symantec Corporation Polymorphic virus detection module
US5964889A (en) * 1997-04-16 1999-10-12 Symantec Corporation Method to analyze a program for presence of computer viruses by examining the opcode for faults before emulating instruction in emulator
US6851057B1 (en) * 1999-11-30 2005-02-01 Symantec Corporation Data driven detection of viruses
US20030159070A1 (en) 2001-05-28 2003-08-21 Yaron Mayer System and method for comprehensive general generic protection for computers against malicious programs that may steal information and/or cause damages
US6907396B1 (en) * 2000-06-01 2005-06-14 Networks Associates Technology, Inc. Detecting computer viruses or malicious software by patching instructions into an emulator
GB2364404B (en) 2000-07-01 2002-10-02 Marconi Comm Ltd Method of detecting malicious code

Also Published As

Publication number Publication date
KR100503387B1 (ko) 2005-07-26
US7409718B1 (en) 2008-08-05

Similar Documents

Publication Publication Date Title
KR100503387B1 (ko) 악성 암호화 스크립트에 대한 분석 및 해독 방법
Sihwail et al. A survey on malware analysis techniques: Static, dynamic, hybrid and memory analysis
Hu et al. Binary code clone detection across architectures and compiling configurations
JP4950902B2 (ja) ダイナミックトランスレーションによる先取りコンピュータマルウェアの保護
Cesare et al. Classification of malware using structured control flow
Carmony et al. Extract Me If You Can: Abusing PDF Parsers in Malware Detectors.
Zhang et al. Metaaware: Identifying metamorphic malware
US20170372068A1 (en) Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
US20050108562A1 (en) Technique for detecting executable malicious code using a combination of static and dynamic analyses
CN104834859A (zh) 一种Android应用中恶意行为的动态检测方法
Arthur et al. Getting in control of your control flow with control-data isolation
Anju et al. Malware detection using assembly code and control flow graph optimization
Bello et al. Ares: triggering payload of evasive android malware
Chen et al. Malware classification using static disassembly and machine learning
KR101557455B1 (ko) 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법
Stepan Defeating polymorphism: beyond emulation
KR101731022B1 (ko) 익스플로잇 탐지 방법 및 장치
VieiraB et al. SEMEO: A Semantic Equivalence Analysis Framework for Obfuscated Android Applications
Chawdhary et al. Partial evaluation of string obfuscations for Java malware detection
Shirazi Analysis of obfuscation transformations on binary code
Coogan Deobfuscation of packed and virtualization-obfuscation protected binaries
Sand Information-based dependency matching for behavioral malware analysis
Hu et al. SEMEO: A Semantic Equivalence Analysis Framework for Obfuscated Android Applications
EP4332805A1 (en) Emulation-based malware detection
Wu et al. Efficient and automatic instrumentation for packed binaries

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

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140715

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20170717

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20180716

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20190715

Year of fee payment: 15