[국내논문]악성코드의 효율적인 분석을 위한 안전한 오픈소스 함수에 대한 시그니처 기반 식별 도구 A Tool for Signature-Based Identification of Safe Open-Source Functions Toward Efficient Malware Analysis원문보기
악성코드에 대한 빠른 대응을 위해서는 악성코드에 대한 효율적인 분석이 필요하다. 그 중 하나로, 오픈 소스 함수들과 같이 안전한 것으로 확인된 부분을 분석 대상에서 제외하여 방대한 분석 대상을 줄이는 방법이 도움이 될 수 있다. 본 논문은 여러 오픈소스의 동적 링크 라이브러리 파일을 윈도우 환경에서 생성하여 오픈소스의 함수 정보들을 버전별, 컴파일러별로 시그니처 정보를 추출하고 비교하여 변경이 의심스러운 함수를 찾을 수 있는 자동화 도구를 제시한다. 또한 해당 도구는 비교에 사용된 정보들을 DB에 저장, 추후에 사용할 수 있어 분석 시간 오버헤드를 줄일 수 있다.
악성코드에 대한 빠른 대응을 위해서는 악성코드에 대한 효율적인 분석이 필요하다. 그 중 하나로, 오픈 소스 함수들과 같이 안전한 것으로 확인된 부분을 분석 대상에서 제외하여 방대한 분석 대상을 줄이는 방법이 도움이 될 수 있다. 본 논문은 여러 오픈소스의 동적 링크 라이브러리 파일을 윈도우 환경에서 생성하여 오픈소스의 함수 정보들을 버전별, 컴파일러별로 시그니처 정보를 추출하고 비교하여 변경이 의심스러운 함수를 찾을 수 있는 자동화 도구를 제시한다. 또한 해당 도구는 비교에 사용된 정보들을 DB에 저장, 추후에 사용할 수 있어 분석 시간 오버헤드를 줄일 수 있다.
In order to take rapid action against malware, efficiency in malware analysis is essential. For instance, it would be helpful to identify and eliminate open-source function bodies or other safe portions out of the target binary codes. In this paper, we propose an tool to create open source dynamic l...
In order to take rapid action against malware, efficiency in malware analysis is essential. For instance, it would be helpful to identify and eliminate open-source function bodies or other safe portions out of the target binary codes. In this paper, we propose an tool to create open source dynamic link library files in Windows environment, extract signature information by opensource and compiler version, and compare open source function information to find suspicious function. In addition, the tool can save the information used in the comparison to the DB and use it later, reducing the analysis time overhead.
In order to take rapid action against malware, efficiency in malware analysis is essential. For instance, it would be helpful to identify and eliminate open-source function bodies or other safe portions out of the target binary codes. In this paper, we propose an tool to create open source dynamic link library files in Windows environment, extract signature information by opensource and compiler version, and compare open source function information to find suspicious function. In addition, the tool can save the information used in the comparison to the DB and use it later, reducing the analysis time overhead.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문은 안전한 오픈소스 함수를 찾기까지의 분석 시간을 줄여 전체적인 분석 시간을 줄이는 것을 궁극적인 목표로 한다. 기존의 바이너리 분석을 위해 활용되고 있는 도구 및 알고리즘은 위에서 말했듯이 오픈소스의 버전업과 컴파일러 버전별에 따라서 해당코드의 안전성을 판단하기에는 불충분하거나 비교하는 과정에서 시간이 많이 걸린다는 단점이 있다[2].
본 논문에서는 BinDiff와 FLIRT의 단점을 보완하여 비교 대상의 버전과 컴파일러의 변경에도 바이너리 분석의 오버헤드를 최소화 할 수 있도록 도구를 제작하였다.
본 논문에서는 오픈소스 함수의 안전성을 판단하기 위해 2개의 도구를 제안 및 제작하였다. 먼저 안전성을 비교하기 위해 DLL파일을 자동으로 생성하기 위한 오픈소스 DLL자동화 도구와 디스어셈블러 프로그램을 이용하여 다양한 오픈소스의 버전별, 컴파일러별로 각 함수의 시그니처를 추출하고 DB에 저장하는 도구.
궁극적으로 본 논문에서는 하나이상의 의심이 되거나 비슷한 한 함수만의 결과 비교를 통해 분석자의오버헤드를 줄이는 것을 목표로 했다. 실생활에 본 논문에서 제안한 도구는 이전에 배포된 오픈소스 함수들의 악성코드 삽입 여부 및 안전성을 판단할 수 있고, 새롭게 배포되는 오픈소스 함수를 DB에 저장된 데이터를 이용하여 쉽고 빠르게 검사 할 수 있다.
제안 방법
기존의 바이너리 분석을 위해 활용되고 있는 도구 및 알고리즘은 위에서 말했듯이 오픈소스의 버전업과 컴파일러 버전별에 따라서 해당코드의 안전성을 판단하기에는 불충분하거나 비교하는 과정에서 시간이 많이 걸린다는 단점이 있다[2]. 이를 극복하기 위해 본 논문에서 제안하는 도구는 오픈소스 함수의 시그니처를 손쉽게 등록하고, 악성코드 분석 과정에서 시그니처 비교를 편리하게 수행할 수 있도록 하고자 한다. 또한 버전이나 컴파일러 등이 다른 경우에 대해서도 시그니처 기반 오픈소스 소프트웨어 식별이 최대한 올바르게 동작하는 방법을 찾기 위해 다양한 기준으로 비교하였다.
이를 극복하기 위해 본 논문에서 제안하는 도구는 오픈소스 함수의 시그니처를 손쉽게 등록하고, 악성코드 분석 과정에서 시그니처 비교를 편리하게 수행할 수 있도록 하고자 한다. 또한 버전이나 컴파일러 등이 다른 경우에 대해서도 시그니처 기반 오픈소스 소프트웨어 식별이 최대한 올바르게 동작하는 방법을 찾기 위해 다양한 기준으로 비교하였다.
본 논문에서 제안하는 도구는 아래 Fig 3과 같이오픈소스 DLL(Dynamic-Link Library)추출 도구 하나와 DLL을 통한 함수 시그니처 생성, DB저장 및 비교해주는 2개의 IDA Pro플러그인으로 구성되어있다. IDA Pro는 Hex-Rays에서 만든 디스어셈블리 도구로 다양한 환경에서의 실행 파일 및 DLL파일을 분석할 때 주로 사용되는 도구이다.
본 논문에서는 DLL파일을 IDA Pro플러그인의 형태인 비교도구를 이용하여 각 함수의 시그니처를 추출 및 비교한다. 3가지의 오픈소스의 DLL마다 각함수의 시그니처를 만들 때 3가지의 정보를 이용하여 시그니처를 만든다.
본 논문에서는 DLL파일을 IDA Pro플러그인의 형태인 비교도구를 이용하여 각 함수의 시그니처를 추출 및 비교한다. 3가지의 오픈소스의 DLL마다 각함수의 시그니처를 만들 때 3가지의 정보를 이용하여 시그니처를 만든다. 시그니처는 크게 HEX, Assembly, Mnemonic을 이용하여 만든다.
시그니처는 크게 HEX, Assembly, Mnemonic을 이용하여 만든다. 각각의 함수에 관련된 정보를 위의 3가지 값을 이용하여 시그니처를 뽑아서 비교한다. 각각의 장점과 단점은 아래와 같다.
Assembly code는 HEX보다 넓은 범위로 함수의 일치여부를 판단해 준다. 그러나 컴파일러의 차이에 의해서 call, jmp 부분의 순서가 뒤바뀌는 경우가 존재하기 때문에 해당 부분을 보완하기 위해 본 논문에서 제시한 도구는 Assembly code에서 call,jmp명령어를 다른 명령어로 치환하여 시그니처를 추출했다.
위의 3가지 정보를 가지고 오픈소스 각각의 함수 시그니처를 뽑아 해당 시그니처를 MD5로 해싱한다. MD5로 해싱함으로 프로그램마다 함수의 길이가 다양하고 함수의 길이가 길어질 경우 분석 데이터가 증가하여 분석 오버헤드가 증가되는 문제를 해결 할 수 있다.
위에서 제시한 3가지 오픈소스에서 DLL을 추출하기 위하여 제작된 도구는 먼저 오픈소스의 최신버전의 DLL을 제공해주는지를 판단하여 제공한다면 해당 파일을 자동으로 다운로드 한다. 먼저 다운로드과정에서 해당 파일의 SHA1 해시 값을 비교하여 다운로드 받을 파일의 변조 여부를 판단하였다. 하지만 위와 같이 DLL파일을 제공하지 않고 압축파일의 형식으로 제공하는 오픈소스의 경우에는 직접 컴파일을 하여 DLL파일을 생성하였다.
직접 컴파일하여 DLL을 추출하는 과정은 자동으로 이루어지며 batch코드 언어를 사용하여 도구를 제작하였다. 도구는 Fig 4와 같은 과정을 통해 사용자에게 DLL파일을 제공한다.
각 오픈소스 DLL파일에서 함수 시그니처를 생성하고 비교하기 위해 우리는 IDA Pro API[14]를 이용하여 IDA Pro에서 사용 할 수 있는 2개의 플러그인으로 제작했다. 먼저 Update plugin은 DLL파일에서 각 함수에 대한 정보를 받는다.
해싱하는 이유는 각 함수마다 함수의 길이가 다르고 또 함수 시그니처를 생성하는 정보 중 Assembly의 경우 위의 장에서 설명한 부분을 고려하여 정보를 얻은 후의 비교 데이터들을 비교하기 편하게 동일한 형식으로 통일해주어야 되기 때문이다. 또 생성된 시그니처를 다른 시그니처와 비교 시 일정한 길이의 두 값을 비교하는 것이 비교시간을 줄이는 것에 효과적이기 때문에 시그니처를 MD5 해싱하여 사용했다. 아래 Fig 5는 함수 정보를 받은 후의 해시값을 생성하는 함수의 의사코드이다.
BSC의 두 번째 플러그인인 Query plugin은 비교하고자 하는 대상 바이너리 파일을 입력받아 해당파일의 함수를 위와 같은 방법으로 해시하여 기존의DB에 존재하는 해시값과 비교, 함수의 안전성을 판단한다. Fig 7은 이러한 과정을 보여준다.
이 후 IDA Pro플러그인으로 제작된 비교도구를 이용하여 각 함수를 비교하였다. Fig 9와 같이 DB에 저장된 데이터는 추후 다른 함수 또는 바이너리와의 비교 시 사용된다.
본 논문에서는 오픈소스 함수의 안전성을 판단하기 위해 2개의 도구를 제안 및 제작하였다. 먼저 안전성을 비교하기 위해 DLL파일을 자동으로 생성하기 위한 오픈소스 DLL자동화 도구와 디스어셈블러 프로그램을 이용하여 다양한 오픈소스의 버전별, 컴파일러별로 각 함수의 시그니처를 추출하고 DB에 저장하는 도구. 이 2개의 도구를 이용, 오픈소스 함수의 시그니처를 바탕으로 오픈소스 함수의 안전성을 검사하였다.
먼저 안전성을 비교하기 위해 DLL파일을 자동으로 생성하기 위한 오픈소스 DLL자동화 도구와 디스어셈블러 프로그램을 이용하여 다양한 오픈소스의 버전별, 컴파일러별로 각 함수의 시그니처를 추출하고 DB에 저장하는 도구. 이 2개의 도구를 이용, 오픈소스 함수의 시그니처를 바탕으로 오픈소스 함수의 안전성을 검사하였다. 해당 도구는 기존의 다른 비교 도구들과 달리 향후 더욱더 많이 사용되고 있는 다양한 오픈소스에 대해 버전이 달라지거나 다양한 컴파일러를 통해서 빌드 된 각 함수의 정보를 해시하여 DB에 지속적으로 업로드 할 수 있으므로 프로그램에 사용되는 오픈소스 함수들의 안전성을 빠른 시간에 판단 할수 있을 것이다.
대상 데이터
본 논문의 실험에서 사용된 오픈소스는 OpenSSL,Zlib[10], Crypto++[11]이다. 해당 오픈소스들은 현재 보안과 관련된 다양한 암호 함수 및 네트워크상에서 안전한 연결 서비스 이용할 수 있는 함수들을 제공하고 있다.
Crypto++의 경우 C++로 제작된 바이너리의 특수성을 확인하기 위한 좋은 오픈소스이다. 따라서 해당 오픈소스들을 실험대상으로 정하였다.
이론/모형
기존의 바이너리를 기반으로 함수를 비교하는 연구는 다양하게 진행되었다[3]. 프로그램 특징을 이용하여 함수를 비교하는 연구는 Graph-editdistance와 Hungarian algorithm 및 기타 비교알고리즘을 이용하였다[4][5]. 하지만 이러한 비교알고리즘은 프로그램의 사이즈가 큰 경우 비교 속도가 느리다는 단점이 있다.
이와 같은 방법으로 생성된 각 함수의 해시값은 DB에 업로드된다. 본 논문에서 제시하는 도구는 설치 및 이용이 쉬운 MongoDB[15]를 활용하였다. 각 함수의 정보는 업로드 전에 JSON(JavaScriptObject Notation)으로 변환된다.
성능/효과
Fig 1는 BinDiff를 이용하여 OpenSSL[8]을 다른 버전의 컴파일러로 컴파일 한 비교 결과이다. 해당 그림에서 볼 수 있듯이 컴파일러만 다른 2개 파일의 유사도는 10%로, 일치하다고 볼 수 없다는 결론을 내어준다.
함수의 안전성을 판단한 후, 본 논문의 궁극적인목적인 분석 시간 오버헤드를 줄이기 위해 지속적으로 업데이트된 DB의 값과 의심되는 함수와의 1:1비교도 가능하다. 생성된 DB의 경우 DB 쿼리문을 이용하여 접근과 수정 및 삭제가 가능하다.
또한 Assembly code 해시값과 일치함을 볼 수 있는데, Mnemonic code 해시값은 위에서 설명 했듯이여러 함수와의 폭 넓은 일치를 보여주기 때문에 정확성을 기대하기 힘들다. 따라서 정확도가 상대적으로 높은 Aseembly code 해시값과 일치함을 보아 해당 함수는 OpenSSL의 memset()함수일 것이라는 판단을 할 수 있다.
Table1의 상단부분은 HEX코드에 대한 시그니처 해시값의 결과이다. HEX값을 이용한 시그니처 값을 비교한 결과 각 함수에 대해 컴파일러 버전 및 오픈소스 버전에 따라 변화가 있는 것을 확인 할 수 있다.그러나 RSA_public_encrypt함수와 RSA_public_decrypt 함수에서는 버전의 변화에만 값이 변하는 것을 확인 할 수 있는데 해당 이유는 OpenSSL DLL파일에서 RSA encrypt와 decrypt의 함수가 똑같기 때문이다.
궁극적으로 본 논문에서는 하나이상의 의심이 되거나 비슷한 한 함수만의 결과 비교를 통해 분석자의오버헤드를 줄이는 것을 목표로 했다. 실생활에 본 논문에서 제안한 도구는 이전에 배포된 오픈소스 함수들의 악성코드 삽입 여부 및 안전성을 판단할 수 있고, 새롭게 배포되는 오픈소스 함수를 DB에 저장된 데이터를 이용하여 쉽고 빠르게 검사 할 수 있다.또한 악성코드와 관련된 오픈소스에 대해 분석할 경우 특정 오픈소스의 함수의 버전별 컴파일러 별 비교를 빠르게 진행하여 분석시간을 줄일 수 있다.
후속연구
이 2개의 도구를 이용, 오픈소스 함수의 시그니처를 바탕으로 오픈소스 함수의 안전성을 검사하였다. 해당 도구는 기존의 다른 비교 도구들과 달리 향후 더욱더 많이 사용되고 있는 다양한 오픈소스에 대해 버전이 달라지거나 다양한 컴파일러를 통해서 빌드 된 각 함수의 정보를 해시하여 DB에 지속적으로 업로드 할 수 있으므로 프로그램에 사용되는 오픈소스 함수들의 안전성을 빠른 시간에 판단 할수 있을 것이다.
그러나 해당 도구는 버전업데이트와 컴파일러버전에 따른 데이터를 수동적으로 업데이트해야 하는 단점이 존재한다. 따라서 추후 해당 부분에 대해서 자동으로 업데이트가 가능하도록 연구할 예정이다. 또한 본 논문에서는 보안적인 부분을 강조하여 암호화와 관련된 오픈소스들을 실험 대상으로 선정하여 실험하였지만 일반적인 오픈소스 함수들에 대해서는 다르게 함수 정보를 얻어야 할 경우가 발생할 수 있어 해당 부분에 대한 추가 연구도 필요하다.
따라서 추후 해당 부분에 대해서 자동으로 업데이트가 가능하도록 연구할 예정이다. 또한 본 논문에서는 보안적인 부분을 강조하여 암호화와 관련된 오픈소스들을 실험 대상으로 선정하여 실험하였지만 일반적인 오픈소스 함수들에 대해서는 다르게 함수 정보를 얻어야 할 경우가 발생할 수 있어 해당 부분에 대한 추가 연구도 필요하다.
질의응답
핵심어
질문
논문에서 추출한 답변
FLIRT의 기능은 무엇인가?
FLIRT(Fast Library Identification andRecognition Technology)[9]는 IDA Pro에 내장된 기능으로 IDA Pro를 이용하여 분석된 바이너리 내부의 함수들을 시그니처를 이용하여 매칭 시켜주는 기능을 한다. FLIRT의 기능을 분석자의 마음대로 사용하기 위해서는 시그니처 파일을 생성해야한다.
BinDiff는 주로 어디에 사용되는가?
도구 중 BinDiff[6]는 Hex-Rays에서 개발한IDA Pro(Interactive DisAssembler)[7]의 플러그인으로, 바이너리코드간의 차이점과 유사점을 찾는 도구이다. 주로 악성코드 분석 연구에 사용된다. 그러나 새로운 버전으로 함수가 업데이트 되면 처음부터 새로 비교분석을 수행해야 하고, 프로그램 흐름을 파악하기 어려운 단점이 있다.
비교알고리즘의 단점은 무엇인가?
프로그램 특징을 이용하여 함수를 비교하는 연구는 Graph-editdistance와 Hungarian algorithm 및 기타 비교알고리즘을 이용하였다[4][5]. 하지만 이러한 비교알고리즘은 프로그램의 사이즈가 큰 경우 비교 속도가 느리다는 단점이 있다. 이러한 부분을 보완하기위하여 프로그램 분석 시 사용하는 여러 종류가 있다.
참고문헌 (15)
HyeyuKwon, "Strengthen the security of applications by using the open source security framework", Proc. of the KIISE Korea Computer Congress, pp. 1104-1106 June. 2016
Yeongcheol Kim, Eun-Sun Cho, "Similarity Analysis on Different Versions of Same Functions", Proc. of the KIISE Korea Computer Congress, pp. 760-762, Dec. 2016
Yongsuk Choi, Jongmoo Choi, "Binary based Software Similarity Analysis Tool". KIISE : Communioations of the Korean Institute of Information Scientistes and Engineers. 34(1), pp. 37-44, Jan. 2016
JeongHyeok Park, YongSuk Choi, JongMoo Choi, "Software Similarity Analysis via Stack Usage Pattern". Journal of KIISE : Computing Practices and Letters, 20(6), pp. 349-353, June. 2014
Xin Hu, Tzi-cker Chiudo, Kang G. Shin, "Large-Scale Malware Indexing Using Function-Call Graphs", ACM CCS 2009
Bindiff, https://www.zynamics.com/bindiff.html
IDA,https://www.hex-rays.com/products/ida
OpenSSL, https://www.openssl.org/
IDA F.L.I.R.T. Technology: In-Depth https://www.hex-rays.com/products/ida/tech/FLIRT/in_depth.shtml
Zlib, http://www.zlib.net/
Crypto++, https://www.cryptopp.com/
Zlib, https://ko.wikipedia.org/wiki/Zlib
Woo Hyun Ahn, Hyungsu Kim. "Attacking OpenSSL Shared Library Using Code Injection". Journal of KIISE : Computer System and Theory. 37(4), pp. 226-238, Aug. 2010
IDA api, https://www.hex-rays.com/products/ida/support/idapython_docs/
MongoDB, https://www.mongodb.com/
이 논문을 인용한 문헌
저자의 다른 논문 :
활용도 분석정보
상세보기
다운로드
내보내기
활용도 Top5 논문
해당 논문의 주제분야에서 활용도가 높은 상위 5개 콘텐츠를 보여줍니다. 더보기 버튼을 클릭하시면 더 많은 관련자료를 살펴볼 수 있습니다.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.