정적 휴리스틱 분석은 알려지지 않은 악성 코드를 감지하는데 널리 사용되는 기법으로, 악성 코드에 보편적으로 존재하는 코드 조각들을 탐색하여 대상 코드의 악성 여부를 판단한다. 그러나, 스크립트로 작성된 악성 코드에서는 정형화된 코드 조각들을 찾아내기 어려우므로, 특정한 메소드 호출들의 존재만을 검사하는 것이 보편적이다. 이러한 감지 방식은 높은 감지 오류율을 보이게 되는데, 이는 많은 메소드들이 일반 스크립트에서도 빈번하게 사용될 수 있는 것들임에 기인한다. 따라서, 현재 정적 휴리스틱 분석은 일반 스크립트에서 거의 사용되지 않는 특별한 메소드 호출들로 이루어진 악성 행위만을 감지하는데 제한적으로 사용되고 있다. 본 논문에서는 메소드 호출 뿐 아니라 이에 관련된 파라미터와 리턴 값까지 고려하여 악성 행위 패턴을 정확하게 감지함으로써 이러한 단점을 극복할 수 있는 정적 분석 기법을 제안하고 그 구현을 제시한다. 또한, 구현된 시스템 상에서의 실험을 통해, 높은 긍정 오류 때문에 기존 기법의 적용이 어려웠던 악성 행위가 제안된 기법으로 감지될 수 있음을 보인다.
정적 휴리스틱 분석은 알려지지 않은 악성 코드를 감지하는데 널리 사용되는 기법으로, 악성 코드에 보편적으로 존재하는 코드 조각들을 탐색하여 대상 코드의 악성 여부를 판단한다. 그러나, 스크립트로 작성된 악성 코드에서는 정형화된 코드 조각들을 찾아내기 어려우므로, 특정한 메소드 호출들의 존재만을 검사하는 것이 보편적이다. 이러한 감지 방식은 높은 감지 오류율을 보이게 되는데, 이는 많은 메소드들이 일반 스크립트에서도 빈번하게 사용될 수 있는 것들임에 기인한다. 따라서, 현재 정적 휴리스틱 분석은 일반 스크립트에서 거의 사용되지 않는 특별한 메소드 호출들로 이루어진 악성 행위만을 감지하는데 제한적으로 사용되고 있다. 본 논문에서는 메소드 호출 뿐 아니라 이에 관련된 파라미터와 리턴 값까지 고려하여 악성 행위 패턴을 정확하게 감지함으로써 이러한 단점을 극복할 수 있는 정적 분석 기법을 제안하고 그 구현을 제시한다. 또한, 구현된 시스템 상에서의 실험을 통해, 높은 긍정 오류 때문에 기존 기법의 적용이 어려웠던 악성 행위가 제안된 기법으로 감지될 수 있음을 보인다.
Analyzing the code using static heuristics is a widely used technique for detecting unknown malicious codes. It decides the maliciousness of a code by searching for some fragments that had been frequently found in known malicious codes. However, in script codes, it tries to search for sequences of m...
Analyzing the code using static heuristics is a widely used technique for detecting unknown malicious codes. It decides the maliciousness of a code by searching for some fragments that had been frequently found in known malicious codes. However, in script codes, it tries to search for sequences of method calls, not code fragments, because finding such fragments is much difficult. This technique makes many false alarms because such method calls can be also used in normal scripts. Thus, static heuristics for scripts are used only to detect malicious behavior consisting of specific method calls which is seldom used in normal scripts. In this paper. we suggest a static analysis that can detect malicious behavior more accurately, by concerning not only the method calls but also parameters and return values. The result of experiments show that malicious behaviors, which were difficult to detect by previous works, due to high false positive, will be detected by our method.
Analyzing the code using static heuristics is a widely used technique for detecting unknown malicious codes. It decides the maliciousness of a code by searching for some fragments that had been frequently found in known malicious codes. However, in script codes, it tries to search for sequences of method calls, not code fragments, because finding such fragments is much difficult. This technique makes many false alarms because such method calls can be also used in normal scripts. Thus, static heuristics for scripts are used only to detect malicious behavior consisting of specific method calls which is seldom used in normal scripts. In this paper. we suggest a static analysis that can detect malicious behavior more accurately, by concerning not only the method calls but also parameters and return values. The result of experiments show that malicious behaviors, which were difficult to detect by previous works, due to high false positive, will be detected by our method.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
따라서, 자기복제 행위를 대상으로 악성 행위 패턴 규칙의 기술 사례를 제시한다.
본 논문에서는 메소드 호출 뿐 아니라 이에 관련된 파라미터와 리턴 값까지 고려하여 악성 행위 패턴을 정확하게 감지함으로써 이러한 단점을 극복할 수 있는 정적 분석 기법을 제안하고 그 구현을 제시한다. 또한, 구현된 시스템상에서의 실험을 통해, 높은 긍정 오류 때문에 기존 기법의 적용이 어려웠던 악성 행위가 제안된 기법으로 감지될 수 있음을 보인다.
이러한 감지 방식은 일반 스크립트에서도 빈번하게 사용될 수 있는 메소드 호출만으로 구성된 악성 행위는 감지하기 어려우므로, 실제로는 일반 스크립트에서 거의 사용되지 않는 특별한 메소드 호출들로 이루어진 악성행위만을 감지하는데 제한적으로 사용되고 있다. 본 논문에서는 메소드 호출 뿐 아니라 이에 관련된 파라미터와 리턴값까지 고려하여 악성 행위 패턴을 정확하게 감지함으로써 이러한 단점을 극복할 수 있는 정적 분석 기법을 제안하였다. 이를 구현한 시스템 상에서의 실험 결과는 높은 긍정오류 때문에 기존 기법의 적용이 어려웠던 악성 행위가 제안된 기법으로 감지될 수 있음을 보여주고 있다.
제안된 시스템은 전처리, 코드 패턴 탐색, 관계 분석 과정을 거쳐 스크립트의 악성 여부를 판정하고 결과를 보고한다. 이러한 작업 수행 과정을 도시하면 (그림 9)와 같다.
제안 방법
감지 시점에 의한 분류는 실행 전에 해당 코드를 분석하여 악성 여부를 판단하는 직접적 방식(direct method)과, 실행 중 또는 후에 나타나는 악성 행위 및 결과를 관측하여 판단하는 간접적 방식 (indirect method)으로 악성 코드 감지 방식을 크게 구분한 것이다[31 이와는 다른 관점에서의 전통적인 분류는 악성 여부를 판단하는 근거에 의한 것으로, 코드의 스캐닝을 통해 특정 패턴을 검색하는 스캐너, 에뮬레이션 또는 실제 실행을 통해 대상 코드의 행위 패턴을 감시하는 행위 감시기, 그리고 화일의 변형을 검사하는 무결성 검사기로 악성 코드 감지 기법을 분류하였다[6].
따라서, 가급적 많은 수의 샘플을 확보하고, 알려지지 않은 악성 스크립트에 대한 감지율을 반영하기 위하여 웜 생성기를 통해 50종의 새로운 악성 스크립트를 만들어 내고 이를 실험에 사용하였다. 그러나, 웜 생성기를 통해 생성된 스크립트 코드는 대개 일정한 패턴을 가지고 있으므로, 수작업에 의해 주석 삭제, 변수명과 문자열 상수의 변경, 그리고 동작에 문제가 없는 문장의 순서를 바꾸는 등의 변형을 통해 새로운 악성 코드를 만들어 냈다. 이러한 샘플 집합에 대해 3개의 기존 안티바이러스와 제안된 기법이 보여준 감지 결과는<표 3>과 같다.
따라서, 프로그램에 사용된 변수 이름이나 문자열 상수를 변경하거나 동작에 문제가 없는 문장의 순서를 바꾸는 것만으로도 시그너쳐에 의한 감지를 피할 수 있게 된다. 그러나, 이러한 실험만으로는 특정 악성 행위의 감지 여부를 판단할 수 없으므로, 각각의 악성 스크립트를 분리하여 하나의 악성 행위만을 수행하는 여러 개의 스크립트로 만들고 이에 대한 실험을 수행하였다. 즉, 로컬 시스템의 복사본 생성, 메일, 그리고 IRC를 통해 자기 복제를 수행하는 악성 스크립트가 주어졌을 때, 각각의 자기 복제를 수행하는 3개의 스크립트 코드로 분리하여 검사를 실시하면, 시그너쳐에 의한 감지는 거의 이루어지지 않고 휴리스틱 분석에 의해 악성 여부를 판단하게 된다.
따라서, 긍정 오류의 실험을 위해 사용된 스크립트들은 인터넷의 비주얼 베이직 스크립트 관련 사이트로부터 수집된 것들 중, <표 2>에 제시된 객체들을 포함하는 것들 50개가 선별되었다. 그러나, 이러한 일반적인 코드들만으로는 긍정 오류의 발생 빈도가 지나치게 낮아 비교가 정확하게 이루어지지 않을 가능성이 높으므로, 기존의 악성 코드 10개를 수정하여 악성 행위를 수행하지 않도록 한 뒤 추가하였다. 이렇게 수정된 스크립트 코드는 악성 행위의 구성에 사용되는 메소드들을 다수 포함하고 있으나, 실제로는 아무런 악성 행위를 수행하지 않게 된다.
일반적으로 현재까지 알려진 악성코드는 변종까지 포함할 때 수만 종에 이르는 것으로 집계되고 있으나, 와일드 리스트(wild list)에 따르면 특정시기에 활동하는 악성 코드는 200종 내외이며, 악성 스크립트는 그 중의 10% 내외인 것으로 나타나고 있다[13]. 따라서, 가급적 많은 수의 샘플을 확보하고, 알려지지 않은 악성 스크립트에 대한 감지율을 반영하기 위하여 웜 생성기를 통해 50종의 새로운 악성 스크립트를 만들어 내고 이를 실험에 사용하였다. 그러나, 웜 생성기를 통해 생성된 스크립트 코드는 대개 일정한 패턴을 가지고 있으므로, 수작업에 의해 주석 삭제, 변수명과 문자열 상수의 변경, 그리고 동작에 문제가 없는 문장의 순서를 바꾸는 등의 변형을 통해 새로운 악성 코드를 만들어 냈다.
있다. 따라서, 실험은 기존 안티바이러스와 제안된 기법에 대한 단순한 감지율 비교 뿐 아니라, 기존 안티바이러스가 감지하지 못하는 자기 복제 행위를 찾아내고 제안된 기법으로 이들에 대한 감지를 시도하는 방식으로 이루어졌다. 실험에 사용된 샘플은 비주얼 베이직 스크립트로 작성된 것들로 인터넷에서 수집된 50개의 악성 스크립트와 비주얼 베이직스크립트 웜 생성기로 만들어진 50개였다.
조합으로 이루어진다. 따라서, 제안하는 기법에서는 악성 행위가 단위 행위들의 조합으로 이루어지며, 각각의 단위 행위는 더욱 작은 단위 행위 또는 하나 이상의 메소드 호출들로 이루어진다고 모델링하고, 각 단위 행위와 메소드 호출 문장을 하나의 규칙(rule)으로 표현한다.
이렇게 수정된 스크립트 코드는 악성 행위의 구성에 사용되는 메소드들을 다수 포함하고 있으나, 실제로는 아무런 악성 행위를 수행하지 않게 된다. 또한, 기존 안티바이러스들이 시그너쳐로 사용할 것으로 예상되는 문자열들을 삭제하여, 모든 감지가 휴리스틱 분석에 의해서만 이루어지도록 하였다. 이렇게 구성된 60개의 정상 스크립트 집합에 대한 긍정 오류 발생은<표 5>와 같다.
이와 같이, 제안된 기법은 단순한 키워드(keyword)의 검색에 의존하지 않으며, 악성 행위에 사용되는 모든 메소드 호출이 존재하여도 이들의 인자와 리턴 값들이 정확하게 정해진 관계를 만족하지 않으면 이것을 악성 행위로 간주하지 않는다. 이로 인해<표 4>와 같이 악성 행위가 실제로 존재함에도 불구하고 이를 감지하지 못하는 부정 오류가 발생할 뿐, 긍정 오류의 확률은 극히 낮아지게 된다.
대상 데이터
따라서, 긍정 오류의 실험을 위해 사용된 스크립트들은 인터넷의 비주얼 베이직 스크립트 관련 사이트로부터 수집된 것들 중, 에 제시된 객체들을 포함하는 것들 50개가 선별되었다.
따라서, 실험은 기존 안티바이러스와 제안된 기법에 대한 단순한 감지율 비교 뿐 아니라, 기존 안티바이러스가 감지하지 못하는 자기 복제 행위를 찾아내고 제안된 기법으로 이들에 대한 감지를 시도하는 방식으로 이루어졌다. 실험에 사용된 샘플은 비주얼 베이직 스크립트로 작성된 것들로 인터넷에서 수집된 50개의 악성 스크립트와 비주얼 베이직스크립트 웜 생성기로 만들어진 50개였다.
성능/효과
그러나, 제안하는 기법은 악성 행위를 구성하는 메소드 시퀀스의 파라미터와 리턴 값들까지 참조하므로 메일에 첨부된 파일이 자기 자신 또는 자신의 복제본이 아니라면 이것을 악성 행위로 간주하지 않게 된다. (그림 4)와 같은 예에서, 제안하는 기법은 메소드 호출의 존재 뿐 아니라, 사용된 파일명, “fso”, “c”, “out”, “male” 등 모든 관계 있는 값들이 일치하는가를 검사함으로써, 단순한 문자열 탐색보다 정확한 감지 결과를 얻을 수 있다. 즉, 제안하는 기법은 기본적으로 악성 행위에 대한 휴리스틱을 이용한다는 점에서 기존 기법과 유사하지만, 컴파일러 최적화 또는 소프트웨어엔지니어링 분야에서 프로그램의 분석에 이용되던 코드 정적 분석 기법과 유사한 정밀한 분석을 수행한다는 차이점을 가지고 있다.
악성 코드 또한 프로그램이므로 선도적인 역할을 수행하는 일부 악성 코드 제작자들에 의해 새로운 악성행위의 기법이 공개되고, 그 뒤로 이를 이용한 다수의 악성코드들이 출현하게 된다. 따라서, 이미 알려진 악성 행위의 기법에 대한 휴리스틱을 이용하여 주어진 코드를 분석함으로써, 이미 알려진 악성 행위를 포함하고 있는 많은 새로운 악성 코드를 감지할 수 있다.
제안하고 그 구현을 제시한다. 또한, 구현된 시스템상에서의 실험을 통해, 높은 긍정 오류 때문에 기존 기법의 적용이 어려웠던 악성 행위가 제안된 기법으로 감지될 수 있음을 보인다. 이를 위해 본 논문의 2장에서는 기존의 관련 연구들과 문제점을 제시하고, 3장에서는 제안하는 악성 스크립트 감지 기법을 설명한다.
본 논문에서는 메소드 호출 뿐 아니라 이에 관련된 파라미터와 리턴값까지 고려하여 악성 행위 패턴을 정확하게 감지함으로써 이러한 단점을 극복할 수 있는 정적 분석 기법을 제안하였다. 이를 구현한 시스템 상에서의 실험 결과는 높은 긍정오류 때문에 기존 기법의 적용이 어려웠던 악성 행위가 제안된 기법으로 감지될 수 있음을 보여주고 있다.
하나의 악성 스크립트는 하나 이상의 자기 복제 행위를 포함하는 것이 일반적이므로 이들의 총합이 샘플 악성 스크립트의 수 보다 큰 것이 정상이다. 이상의 실험에서, 기존 안티바이러스들은 알려지지 않은 악성 스크립트를 위한 정적 휴리스틱 분석을 수행할 때, 메일 전송을 통한 자기 복제 행위를 주로 감지하며, 상대적으로 긍정 오류의 여지가 높은 행위들은 적극적으로 감지하지 않고 있음을 확인할 수 있다. 따라서, 기존 기법으로 감지가 어려운 다른 수단만을 이용하는 새로운 악성 스크립트는 감지할 수없게 된다.
제안된 기법은 기존의 정적 휴리스틱 분석 기법과 같이 단순한 문자열 탐색에 의존하지 않고, 악성 행위를 구성하는 일련의 코드를 '정확하게 탐지함으로써, 기존 기법에서 감지하기 어려웠던 악성 행위를 정확하게 감지할 수 있다. 따라서, 실험은 기존 안티바이러스와 제안된 기법에 대한 단순한 감지율 비교 뿐 아니라, 기존 안티바이러스가 감지하지 못하는 자기 복제 행위를 찾아내고 제안된 기법으로 이들에 대한 감지를 시도하는 방식으로 이루어졌다.
(그림 4)와 같은 예에서, 제안하는 기법은 메소드 호출의 존재 뿐 아니라, 사용된 파일명, “fso”, “c”, “out”, “male” 등 모든 관계 있는 값들이 일치하는가를 검사함으로써, 단순한 문자열 탐색보다 정확한 감지 결과를 얻을 수 있다. 즉, 제안하는 기법은 기본적으로 악성 행위에 대한 휴리스틱을 이용한다는 점에서 기존 기법과 유사하지만, 컴파일러 최적화 또는 소프트웨어엔지니어링 분야에서 프로그램의 분석에 이용되던 코드 정적 분석 기법과 유사한 정밀한 분석을 수행한다는 차이점을 가지고 있다.
참고문헌 (14)
Alex Shipp, 'Heuristic Detection of Viruses within Email,' virus bulletin conference, 2001
CERTCC-KR, '2000년 5월 바이러스 통계', http://www.certcc.or.kr/statistics/virus/virus-200005.html, 2000
Francisco Femandez, 'Heuristic Engines,' 11th International Virus Bulletin Conference, 2001
Igor Muttik, 'Stripping down an AV Engine,' Virus Bulletin Conference, 2000
Eugene H. Spafford, 'Computer Viruses as Artificial Life,' Journal of Artificial Life, MIT Press, 1994
Sandeep Kumar, Eugene H. Spafford, 'A Generic Virus Scanner in C++,' Purdue University Technical Report CSD-TR-92-062, 1992
Mark Kennedy, 'Script-Based Mobile Threats,' Symantec White Paper, 2000
Baudouim Le Charler, Morton Swimmer, Abdelaziz Mounji, 'Dynamic detection and classification of computer viruses using general behaviour patterns,' Fifth International Virus Bulletin Conference, Boston, pp.20-22, September, 1995
Symantec AntiVirus Research Center, 'Understanding Heuristic,' Symantec White Paper, 1998
Gene H. Kim, Eugene H. Spafford, 'The Design and Implementation of Tripwire : A File System Integrity Checker,' ACM Conference on Computer and Communications Security, 1994
The WildList Organization International, 'PC Viruses In-the-Wild-February, 2002,' http://www.wildlist.org/WildList/200202.htm, 2002
Tim Hollebeek and Dur Berrier,' Interception, Wrapping and Analysis Framework for Win32 Scripts,' Cigital Labs
※ AI-Helper는 부적절한 답변을 할 수 있습니다.