240387329dee4f03f98a89a2feff9bf30dcba61fcf614cdac24129da54442762

Posted by : on

Category :


악성코드 해시(SHA256) - 240387329dee4f03f98a89a2feff9bf30dcba61fcf614cdac24129da54442762

악성코드 포맷 - PE

악성코드 타입 - Gen:Variant.Zusy (ALYac)

운영체제 - Windows(x86)

악성코드 분석에 앞서, 프로그램을 기드라의 디스어셈블러로 봐 보았다.

디컴파일한 Main함수

디컴파일한 Main함수

디컴파일한 401000함수

디컴파일한 401000함수

기드라로 프로그램을 본 화면에서는, 구조체에 대한 값이 제대로 표현되어 있지 않아서 어떤 값이 무엇을 가르키는지 알 수 없다.

숙련된 디버거라면 어느 값에 어떤 내용이 들어있는지 경험상으로 알 수 있지만, 현재 실력으로는 동적으로 분석하는게 빠르므로 동적 분석을 진행하였다.

디스어셈블한 stub코드

동적분석은 x32dbg디버거로 진행하였다. 엔트리포인트에 들어간 뒤, exit 바로 앞에 존재하는 메인함수에 들어갔다.

디스어셈블한 401000함수

401000함수의 내부이다. Process32First에 인자로 들어가는 lppe(128)가 뭔지 제대로 모르니 MSDN에서 찾아보았다.

MSDN Process32First 인자

MSDN에 의하면, lppe는 PROCESSENTRY32 구조체를 가르키는 포인터같다. [in, out]이라고 적혀있는걸 보니, 해당 주소로 특정한 값이 나오는 모양이다.

왜 0x128이라는 값이 들어갔는지는 잘 모르겠지만, 동적 분석을 진행하면서 어떤 값이 들어가는지 실시간으로 알 수 있으니 제대로 알고 넘어갈 필요는 없을 것 같다.

아마 함수를 거치고 나면 프로세스의 이름, PID등이 적혀 나오는 것 같다.

401000함수를 한번 돌고 분석한 내용

401000함수의 반복문을 한번 돌리며 분석한 내용이다. 모든 프로세스에 대해, 인자와 프로세스 명이 같은지 확인하는 내용이 들어가 있다.

-104에는 매번 프로세스의 이름이 들어가며, 인자와 같은지 첫번째, 두번째 글자를 확인한 후, 반복문을 통해 계속해서 확인하는 구문이다.

내부 루프

프로세스명을 한글자씩 비교하는 루프이다. (계속 돌려서 첫글자가 같은 프로세스가 나올때까지 진행했지만, 제로플래그를 수정하는 방식으로도 진행 가능하다.)

한글자씩 문자를 비교하면서, 만일 문자열 종료코드가 나오면 다른 명령어를 실행하는 루트로 진행된다.

내부 루프의 문자열 포인터 이동

두글자를 이동한 후, 문자열 포인트를 두글자씩 옮기는 명령어다.

svchostx64.exe는 기본적인 운영체제에서 볼 수 있는 프로세스가 아닌, 해당 악성코드 전용 프로세스이므로 일치하는 결과가 없어야 정상이다.

만약 인자와 같은 프로세스가 있으면 어떤 명령이 실행되는지 진행해 봤다.

플래그 설정

-144를 0으로 설정한다. (보통은 sbb명령을 통해 ffffffff로 값을 설정해준다. 아마 boolean이 아닐까 추측한다.)

플래그 검사 이후

이후 플래그를 검사하며, 프로세스를 연 뒤, 프로세스를 종료한다.

그럼 함수는 프로세스를 검색 후 종료하는 것 밖에 하지 않으며, 메인함수에서 사용하는 함수는 파일삭제뿐인데 왜 바이러스인가?

이를 알기 위해 추가적으로 메인함수 분석을 진행하였다.

Main함수 분석

메인함수를 분석하면서 진행한 내용이다. %appdata%를 문자열로 바꿔준 후, svchost64.exe를 문자열에 추가해서 파일삭제를 진행시켜주는 프로그램이다.

해당 프로그램은 더 이상의 내용이 없어, 왜 해당 프로그램인지 멀웨어인지 찾아봤다.

바이러스토탈 검사결과에 대부분의 백신에서 악성코드로 판단하는것을 보아, 멀웨어 감염이 끝나고 목적을 수행하고 난 뒤, 멀웨어 실행을 끝나고 프로그램을 지워주는 킬스위치로 보인다.


Useful Links