ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Analysis Code Obfuscateed VBScript
    tip 2011. 2. 11. 23:02

    VBScript 는 텍스트 편집기에서 위와 같이 보인다. 기본적으로 확장자는 *.vbs 로 되어 있으면 윈도우 시스템에서 *.vbs 파일을 더블클릭 했을 때 cscript 에 의해서 실행되어진다. 도스명령어 창에서 cscript.exe 를 입력하면 cscript 사용법이 출력될 것이다.


    [그림1] 코드 난독화된 악성 VBScript

    VBScript 는 텍스트 편집기에서 눈으로 쉽게 확인할 수 있다는 단점때문에 JavaScript 와 마찬가지로 코드 낙독화(Obfuscate)를 사용하고 있다. 위 그림에서와 같은 경우 다음과 같은 절차로 코드 일반화(Normalization) 해보았다.


    Code Normalization

    1. 주석제거

    VBScript 에서 주석은 ' 를 사용한다. 주석은 실행되는 문장과 관련이 없으므로 제거한다. 악성코드 제작자가 의미있는 주석을 달아 두었을 것이라고 기대하지 않는 것이 좋다.

    2. 변수이름 단순화 및 의미 부여


    일반적인 프로그래머들은 변수를 의미있는 이름으로 부여하기를 좋아한다. 더욱이 불필요한 변수의 설정은 메모리 낭비라고 생각하기 때문에 나름 최적화된 변수 사용을 고려할 것이다. 그러나 악성코드 제작자들이 사용하는 변수의 이름을 보고 그 의미를 파악할 수 있다는 것은 거의 불가능에 가깝다. 코드가 길게 느껴진다면 변수들을 의미있는 이름으로 부여하는 것이 코드 분석에 효율적이다.

    3. Indentation

    들여쓰기 역시 가독성있는 코드로 만들기위해 필요한 작업 중에 하나이다. 이 정도만 수행해도 코드가 훨씬 눈에 잘 들어 올 것이다.


    [그림2] Code Normalization 된 코드


    숨겨진 실행코드 출력

    자 그런데 [그림1] 코드에서는 Execute 함수를 통해 다시 코드가 실행되게 되는데, 코드 일반화 작업만으로는 어떠한 코드가 실행되는지 알 수가 없다. 그래서 일반적으로 사용하는 방법이 MsgBox 를 통해 코드를 확인하는 방법을 사용하지만 위 샘플의 경우 코드가 길어 MsgBox 에 코드가 모두 출력되지 않는다. 그래서 아래 WriteFileText 함수를 이용하여 파일로 그 내용을 기록하는 것이 좋을 것 같다.



    VBScript를 자주 사용하지 않는 필자와 같은 경우 위에서 제시한 WriteFileText 함수를 VBScript 에서 사용하기 위해서는 약간의 주의가 필요하다.

    VBScript 에서 Sub 는 반환값이 없는 프로시저를 말하며 Function 은 반환값이 있는 프로시저를 말한다. 반환값이 없는 Sub 를 호출할 때는 인자값을 괄호로 묶지 말아야 하며 묶고 싶을 경우에는 Call 명령을 사용 하여야 한다.

    이렇게 해서 생성된 파일을 텍스트 편집기로 확인하면 다시 VBScript 코드가 보일 것이다. 이 것도 위에서 살펴본 코드 일반화 과정을 통해 보다 가독성있는 코드로 만든 후 분석하는 것이 훨씬 효율적일 것이다.

     

Designed by Tistory.