ABOUT ME

이 곳에 찾아와주신 모든 분들께 제 문서가 도움이 되길 진심으로 바랍니다.

Today
Yesterday
Total
  • [001] KICOM Anti-Virus DB 패턴 추가
    파이썬 프로그래밍/KICOMAV 분석 2017. 9. 27. 23:18


    preface

    이 글은 시큐리티플러스와 키콤백신 분들과 함께 작업하는 과정을 메모하는 글입니다. 문제가 될시 일부 부분은 삭제되거나 변경될 수 있습니다.


    필자의 작업환경: Windows 10 Pro


    1. 최신버전 다운로드 및 설치


    1.1 KICOM Anti-Virus 소개와 필요한 요소들


    KICOM Anti-Virus(이하 KICOM AV)는 오픈소스 안티바이러스 프로그램이다.

    이를 설치하기 위해선 Python 2.7과 pylzma, yara-python을 요구한다.


    최신버전은 다음 링크에서 얻을 수 있다.(https://github.com/hanul93/kicomav) (9월 27일자 최신버전은 0.28)


    issue1) pylzma 설치하던 중 발생한 오류.

    pylzm와 yara-python을 pycharm에서 virtualvenv 안하고 설치하던 중에 이런 오류가 있었다.


    Collecting pylzma

      Downloading pylzma-0.4.9.tar.gz (115kB)

    Installing collected packages: pylzma

      Running setup.py install for pylzma: started

        Running setup.py install for pylzma: finished with status 'error'

        Complete output from command C:\Python27\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\Administrator\\AppData\\Local\\Temp\\pycharm-packaging\\pylzma\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record c:\users\admini~1\appdata\local\temp\pip-fln0jk-record\install-record.txt --single-version-externally-managed --compile:

        running install

        running build

        running build_py

        creating build

        creating build\lib.win32-2.7

        copying py7zlib.py -> build\lib.win32-2.7

        warning: build_py: byte-compiling is disabled, skipping.

        

        running build_ext

        adding support for multithreaded compression

        building 'pylzma' extension

        error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27

        

        ----------------------------------------


    Command "C:\Python27\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\Administrator\\AppData\\Local\\Temp\\pycharm-packaging\\pylzma\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record c:\users\admini~1\appdata\local\temp\pip-fln0jk-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\Administrator\AppData\Local\Temp\pycharm-packaging\pylzma\


    그래서 비주얼 C++ 9.0 파이썬을 설치했다(http://aka.ms/vcpython27). 그러고나니 수월하게 작동했다.



    1.2 소스코드를 받고 build하는 법


    윈도우상에서 KICOM AV를 사용하기 위해선 빌드해야한다. 필자는 필요에 의해 파이썬을 2개 설치했고, 파이썬 2.7을 쓰기위해 mklink로 2.7과 3.5에 대해 적응해두었다. 그래서 build.bat을 다음과같이 수정했다.


    :BUILD

    @echo [*] Engine file copy to the Release folder...

    @xcopy Engine\* Release\ /e > nul


    if not exist "key.pkr" @python27.exe Tools\mkkey.py 

    if not exist "key.skr" @python27.exe Tools\mkkey.py 


    @copy key.* Release\plugins > nul

    @rem copy Tools\kmake.py Release\plugins > nul

    @cd Release\plugins


    @echo [*] Build Engine files...

    @python27.exe ..\..\Tools\kmake.py kicom.lst


    for %%f in (*.py) do (

        if %%f neq kmake.py (

            @python27.exe ..\..\Tools\kmake.py %%f

        )    

    )


    해당 과정을 수행하면 다음 화면이 뜬다.




    설치가 완료된 후 'python k2.py .' 를 수행하면 현재 디렉토리에 대해 검사를 수행한다.




    이렇게 뜨면 정상적으로 설치가 완료된 것이다.


    업데이트는 다음과정을 수행하면 된다.



    그러고나서 감지가능한 바이러스에 대해 보고자 한다면 해당 명령으로 확인할 수 있다.




    2. 악성코드 분류 및 패턴추가 (PE 기준)


    2.1 xsha.py

    xsha.py는 악성코드의 이름을 SHA256으로 분류하기 위해 사용한다.


    Usage: xsha.py [src 폴더] [target 폴더] (작업 후 src 내의 파일은 유지된다)




    이런식으로 분류됨을 알 수 있다.


    2.2 fileformat.exe

    악성코드 파일을 파일 포맷별로 분류한다.


    Usage: fileformat.exe [src 폴더]

    src 폴더 속에 존재하는 프로그램을 파일포맷별로 분류하고, 파일앞의 4자리로 폴더를 만들어 분리한다.




    폴더명 또한 다음과같이 앞의 4자리를 떼어온 폴더로 제작함을 알 수 있다.

    e.g. 1127a71586ff24f2f2c4a626bb0abf8b8264627b9eadbeb0e4590e3e77acec97 이란 샘플에 대해

    분류한 디렉토리1\1\2\7에 저장됨.


    fileformat.exe가 분류한 파일포맷을 기준으로 작업하도록 한다. 

    PE파일은 KICOM AV의 --verbose 옵션으로도 확인이 가능하다.




    PE 파일 악성코드를 진단/치료하는 플러그인 엔진은 emalware.py이다. 악성코드 패턴파일은 emalware.mdb 내의 형태로 저장된다.


    각 파일에 대해 python k2.py [악성코드경로] --sigtool 하면 FSIZE, 섹션 MD5값, 악성코드 이름이 분류되어 나온다! 이런식으로 패턴을 모은다. (위 그림의 빨간 글씨)

    패턴 추가는... 일단은 프로그램을 거친 수동으로 보인다(첫 세미나에 참석하지 못해 자세한 이야기는 듣지 못했다. 추후 업로드 예정).


    normfile.py에서 먼저 작업한다. [섹션크기:섹션의MD5:악성코드이름 # 주석] 형태로 실린다.

    e.g. 1000960:df12e2e35405eefb59c24a94f3b14f4f:RiskTool.Win32.OfferInstall.heur  # PE


    이후 패턴 추가를 위해선 sort.exe [old패턴] > [new패턴] 같은 방식으로 진행한다.




    sigtool_md5.py에서 패턴을 빌드한다. 그러면 emalware.c01, i01, s01, n01 파일 4개가 생기고, plugins 폴더로 이동시킨 후 작동하면 패턴을 인식하기 시작한다.


    (disclaimer: 이 상황은 어디까지나 악성행위를 하는 파일이 어떻게 추가되는지를 알려주는 상황이다. 실제로 KICOM AV Database(https://github.com/hanul93/kicomav-db) 를 적용하면 4만개 이상에 대해 대응이 가능하다)





    이상으로 PE파일에 대해 DB패턴을 추가하는 과정에 대해 설명하였다. 다음 게시글도 지금보다 더 다듬고 모든 이들이 보기에 훨씬 더 알찬 글로 게시할 수 있었으면 좋겠다.

Designed by Tistory.