20.01~20.11. 악성코드 탐지 프로세서
동아리에서 자바를 이용한 악성코드 탐지 프로젝트를 진행하였다.
총7명의 인원 이였고 3팀으로 나누어
1팀 파일쉘 기반 악성코드 특징값 추출
2팀 딥러닝 탐지
3팀 유사도해시 탐지 알고리즘 (it's My team)
으로 진행되었다.
20.01~20.03. 이론+코드 분석
맨땅에 헤딩하는 느낌이였다.
이론적인 지식은 있었지만 이에 대해 직접 구현을 해보자니 막막할 뿐이였다.
첫째, 관련 컨퍼런스와 비슷한 탐지 알고리즘들을 찾고 분석하자!
우리 조의 목적은 '유사도해시' 라는 방법을 이용하여 악성코드 탐지시간의 단축과 탐지의 정확성을 얻을수있다는
이론적인 방법을 직접 구현하고 테스트 하여 결과값을 보여주기로 정하였다.
실제 Trendmicro 사에서 유사도 해시기반으로 만들어진 TLSH 코드를 찾을 수 있었으며,
코드 분석을 진행하였고 추후 코드를 구현하는데 많은 도움이 되었다.


위의 환경을 세팅하여 TLSH의 테스팅 및 분석을 진행하였으며

두개의 유사한 파일을 만들어 그들간의 탐지속도를 테스팅을 해보았고

해시값을 생성하여 두 파일의 유사도 측정을 테스트 하였다.
#유사도 해시의 핵심이론은, 간단히 MD5 형식과 대조되어 생각하면 쉽다.
MD5는 데이터를 암호화하는 기술 이라 생각하면되는데, 암호화 과정에서 랜덤의 해시값을 생성하게 된다.
[TEST1] =! [TEST2] 두 비슷한 파일이라도 아예 다른 해시값을 생성하게 됨으로 해시값으로는 두 파일의 연관성을 추측할수 없다.
BUT?!?!?!
유사도해시는 비슷한 해시값을 생성하여 두 파일간의 연관성이 추측이 가능해진다.

관련 컨퍼런스를 깊이 조사해보면서 해시 기반의 제안되는 탐지 알고리즘이 다양하다는 사실이였으며,
왜 유사도해시를 사용해야하는가? 에 대해 타당성이 필요했기 때문에 다른 기존의 알고리즘들의 프로세서들의 이해가 필요한 시점이였다. (관련 컨퍼런스를 조사하면서 대부분의 자료들을 영작이였기 나름의 고충이 떠오른다..)

이미 몇년전에 유사도 해시를 이용한 테스팅 자료들이 해외논문을 통해 존재했고, 그들의 테스팅 결과를 확인하며 어느정도 확신을 가졌다.

20.04~20.07. 코드 작성 및 분석계속..
tlsh의 코드를 참고하여 새로운 작업물을 만들어야 했다.



tlsh 같은경우 Map을 이용해서 데이터 의 좌표값을 2차원으로 받고있다.
좌표 값끼리 연산을 통해서 거리값을 통해 파일비교를 진행하고있으나.
우리는 128비트의 해시를 써야되기 때문에 그에따란 128차원에 대한 좌표값이 필요했다.

128차원에 대한 좌표값을 생성했으나 컴퓨터가 읽을수 있게 int 값으로 변형시켜야한다.
[좌표추출특징값]>>[int값 전환]>>[특징값 생성]

128차원으로 구성된 값을 컴퓨터가 읽을수 있는 파일자체로 다시 변경하고자 하였다,

코드의 생성과 수정작업을 수개월간 하면서 학교 연구실에서 숙식생활이 일상이였던 기간이였다.
이때, 깃허브에 대해 자연스리 익히게 되었으며,
컴퓨터가 넉아웃되어 파일을 통채로 날려먹은적도 있고, 간단한 변수명의 불일관성으로 인해서 하루종일 에러와 싸우고 하면서 등의 수많은 고난과 싸우면서 코드의 형상관리에 대해서 뼈져리게 느꼈었다.
-수정된 코드는 표시필수!!
-또한 코드의 이해를 위한 주석처리 필수!!
-항상 백업본 저장 > Github 애용
또한 이 기간동안 교수님의 컨펌 및 도움 그리고
내가 팀원과 협업했을때의 나의 능력에 대해 알수있었다. 혼자했을때의 나보단 팀원과 같이 했을때의 프로젝트의 진척도가 높았으며, 심리적으로 얻는 힘또한 커 자주 밤을새며 코딩하며 버틸수 있었던거 같다.

일주일 단위로 ppt를 만들어 항상 프로젝트의 관련사항, 내용, 진척도를 발표하면서 남겼던게
나중에 큰 힘이 되었다.(코드 변경 이력사항을 항상 기록하자 ㅠㅠ)
20.08~20.11 최종 테스팅
최종적으로는 악성파일 탐지율과 탐지시간에 대해서 테스팅 결과값을 생성해야된다.
이 기간동안 정말 고생을 많이 하였다... 같은 팀원 상훈아 수고 많았다
소스코드의 저장 및 수정 이력,공유파일,주석,테스팅 환경,진척도등 최종테스팅까지 진행하며
부족한 부분을 많이 알수있었다.
[No.1] 전체 데이터에서의 테스트데이터의 개수를 주고 검색시간 Test
VP TREE Search // Brute Force Search

위의 조건문은 검색진행시 해시파일을 읽는 클래스의 조건문에 해당하는 구문이며
총표본 3만여개의 데이터에서 [3000]~[18000]까지의 데이터검색을 진행하였다.


VP TREE의 검색시간이 2배정도 빠른 수치를 보이며 #TEST성공적
[No.2] 전체 데이터에서의 테스트데이터의 개수를 주고 탐지율 Test



대략적인 탐지율90~92%를 보이며 최종 TEST종료
#ENDING
언어:JAVA
IDE:ECLIPSE,Intelli j
프로젝트명: 파일기반 악성코드 탐지 알고리즘 연구
수개월간 자바코드만 만지면서 어느정도 코드를 볼줄아는 기초적인 안목이 생겼다.
알고리즘 스터디를 진행하면서 알고리즘의 로직을 이해할려고 노력하였으며 깃허브에 꾸준히 커밋도 진행하였다.
탐지 알고리즘 코드 자체는 교수님의 기본 코드의 폼을 지원해 주셧고 거기에서 조금씩 변형된 형태로 코드작성을 마무리 하였다.
수많은 클래스 들의 결합이 존재하였고 거기서의 모듈형식으로 분석하고 사용하는 과정에서 정말 애먹었던 순간이였다.
또한 프로젝트에서의 팀원이 있다는게 얼마나 도움이 되는지 몸소 느꼈으며 끈끈한 협동심을 몸소 느꼈다.