-실습 1-1-
이 실습은 Lab01-01.exe와 Lab01-01.dll 파일을 사용한다. 파일에 관한 정보를 얻으려면 1장에서 사용한 기법과 도구를 사용하고 다음 질문에 대답해보자.
-질문-
1. http://www.virustotal.com/에 파일을 업로드한 후 보고서를 보자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?
Yes, exe, dll 모두 많은 백신이 트로이목마 악성코드로 진단하고 있다.
Lab01-01.exe를 virustotal에 올리면 49개의 백신에서 악성코드로 진단하는 것을 볼 수 있다.
AhnLab V3 백신이 맨 위에 보인다.
Lab01-01.dll을 virustotal에 올리면 40개의 백신에서 악성코드로 진단하는 것을 볼 수 있다.
2. 이 파일은 언제 컴파일됐는가?
peview를 통해 확인해보면 Lab01-01.exe는 UTC 기준 2010년 12월19일 16시16분19초에 컴파일됐음을 알 수 있다.
마찬가지로 Lab01-01.dll은 UTC 기준 2010년 12월19일 16시16분19초로 exe와 비슷한 시각에 컴파일됐음을 알 수 있다.
3. 이 파일이 패킹되거나 난독화 된 징후가 있는가? 그렇다면 무엇으로 판단했는가?
exe, dll 모두 패킹, 난독화 되지 않았다. strings와 peid를 통해 판단할 수 있었다. 또한 peview로 각 섹션의 Virtual Size, RVA를 확인한 결과도 이를 뒷받침한다.
strings로 exe 파일의 문자열을 확인해보면 여러 문자열들이 잘 출력되는 것을 볼 수 있다. 만약 이 프로그램이 패킹, 난독화 됐다면 식별 안되는 문자열들이 출력되거나 패킹, 난독화 해제를 하는데 필요한 함수들만 문자열로 출력됐을 것이다.
peid에 올려봤을 때는 Microsoft Visual C++ 6.0으로 잘 식별하는 것을 볼 수 있다. 만약 패킹, 난독화 됐으면 패커 명이 뜨거나 인식하지 못한다는 문자열이 떳을 것이다.
peview로 열었을 때 Virtual Size가 RVA보다 작은 것을 볼 수 있다. (스샷은 하나만 찍었는데, 나머지 섹션도 비슷하다.)
이 모든 결과를 종합해봤을 때 exe는 패킹, 난독화되지 않았을 가능성이 높다.
마찬가지로 dll도 여러 문자열들이 잘 출력된다.
또한 peid도 잘 인식한다.
peview로 확인했을 때 역시 Virtual Size가 RVA보다 작은 것을 알 수 있다. (나머지 섹션들도 같다.)
이를 종합했을 때 dll 파일 역시 패킹, 난독화되지 않았을 확률이 높다.
4. 임포트를 보고 악성코드 행위를 알아낼 수 있는가? 그렇다면 어떤 임포트인가?
dependency walker를 통해 exe, dll 파일을 열어서 확인할 수 있었다.
CreateFile, CopyFile, CreateFileMapping FindNextFile, FindFirstFile 등의 파일을 찾고 복사하는 api만 있는 것을 봤을 때, 이 exe 파일은 다른 악성행위 없이 악성행위를 실질적으로 수행할 어떤 파일을 복사해서 멀쩡한 파일을 감염시키거나, 새 파일을 생성하는 것 같다.
(CreateFile : 파일 생성, CopyFile : 파일 복사, FindNextFile, FindFirstFile : 특정 파일 찾기)
이상하게 Lab01-01.dll 파일을 exe 파일에서 로드하지 않는다.
dll은 process 관련 api 들이 kernel32.dll을 통해 import되고, 소켓 관련 dll인 ws2_32.dll을 로드하는 것을 보아 네트워크 관련 기능을 수행할 수 있다는 것을 알 수 있다.
여기서 의문점은 이 dll을 왜 exe에서 로드하지 않는 것인지, 그리고 이 dll에 왜 프로세스 생성 함수, 네트워크 관련 dll이 로드되는지다.
내가 생각한 가설은 이 Lab01-01.dll은 dll 파일이 아닌 분석가를 속이기 위해 dll 행세를 하는게 아닌가 싶다. exe 파일을 통해 이 dll이 복사돼거나 다른 멀쩡한 파일을 감염시켜 네트워크를 이용한 악성행위를 수행할 것 같다.
5. 감염된 시스템에서 검색할 수 있는 다른 파일이나 호스트 기반의 증거가 존재하는가?
4번 질문을 통해 얻은 정보 + exe 파일의 문자열을 통해 답을 찾을 수 있었다.
exe 파일의 문자열을 확인해봤을 때 Kernel32.dll의 주소와 Kernel32.dll에서 l을 1로 바꾼 Kerne132.dll 문자열이 있는 것을 볼 수 있다. 이를 봤을 때 Kerne132.dll로 Lab01-01.dll을 복사해 시스템 파일인척 가장하고 악성행위를 하지 않을까 생각이든다. 흥미로운 문자열은 이게 끝이기 때문에 아마 이 가설이 맞을 것 같다.
(Kernel32.dll은 중요 시스템 파일이기 때문에 위의 내 가설대로 감염시킨다면 시스템 오류가 날 수 있다. 그렇다면 악성행위를 하기 어렵기 때문에 공격자는 이를 원하지 않을 것이다. 따라서 감염이 아닌 복사일 확률이 높아보인다.)
따라서 호스트 기반의 증거는 Kerne132.dll 파일이다. 이 파일이 system32 폴더 내에 존재한다면 감염됐다고 볼 수 있다.
6. 감염된 장비에서 이 악성코드를 발견하기 위해 사용한 네트워크 기반의 증거는 무엇인가?
이 질문 역시 4번 질문을 통해 얻은 정보 + dll 파일의 문자열을 통해 답을 찾을 수 있었다.
dll 파일의 문자열을 확인해봤을 때 127.26.152.13이 보인다. 다른 흥미로운 문자열들은 보이지 않고 로드하는 dll을 고려해봤을 때 ws2_32.dll의 api들을 통해(이 api들은 기초 정적분석으로 확인할 수 없었다.) 127.26.152.13과 통신하며 리버스 쉘을 제공하지 않을까 생각이든다.
따라서 네트워크 기반의 증거는 이 127.26.152.13이 된다. 이 ip로 컴퓨터에서 통신이 이뤄진다면 그 컴퓨터는 감염됐다고 볼 수 있을 것이다.
7. 이 파일의 목적은 무엇이라고 판단되는가?
exe 파일을 통해 Lab01-01.dll 파일을 Kerne132.dll로 복사해 시스템 파일인척 가장해주고, 이 dll로 실질적인 악성행위를 수행하는 것 같다.
디스어셈블, 동적 분석을 해보지 않아 정확하진 않지만, 정적 분석 결과로는 127.26.152.13 주소의 서버에 리버스 쉘을 제공하는 백도어가 아닐까 싶다.
'Old (2021.01 ~ 2021.12) > Malware' 카테고리의 다른 글
악성코드 분석에 참고할만한 Dll, API 정리 (0) | 2021.07.27 |
---|---|
악성코드의 유형 정리 (0) | 2021.07.21 |