악성코드 분석 3 - packing

악성코드 및 포렌식|2021. 2. 3. 10:24

 

 

일반적인 악성코드는 vmware에서 실행이안되고

패킹을 해제하지않으면 안된다

패킹이 되있나 안되있나 방법은

peview로 확인을 해보면됩니다.

 

 

 

 

 

 

악성코드 분석 3

upx packing 해제

 upx.exe -d Malware3.exe -o Malware3_unpacked.exe

 

size증가가됬고

 

 

upx.exe는 포터블 익스포터블이라하고

 

실행시에는 다해제가 되긴하지만 정적분석이 불가능 하기떄문에 해제를 합니다.

 

upx.exe를 이용해서 해제를합니다.

 

이 사이즈가 커진이유는 코드들의 압축을 다 풀었다고 생각하면됩니다.

 

패킹이 해제된 파일을 보니까 이제 이상한 upx0 upx1이 사라진 것을 알게됬습니다.

 

 

30초뒤에 시작이된다고하는데  그이유는 그냥 악성코드가 바로 실행되지 않기 때문이다.

 

 

sniff hit을 보게되면

dns 쿼리도 발생이되면서

구글 dns랑 208.67.220.220이란게 적혀있는데

악성코드 서버가 아닐지 의심을해봅니다.

 

 

 

svc.exe가 변조될 가능성이다

 

 

 

 

pid 1756가 포트번호들을 열고있습니다.

 

근데 service 인 64to32가 관여하고있는거같습니다.

 

 

utx는 동시실행 방지하는 것이다.

 

svchost를 이용해서 net을 실행시킨거같다.

 

 

 

 

 

 

 

그리고 메모리 덤프를 진행하고

이 파일을 window10 으로 옮기고 나서

 

메모리 포렌식을 진행합니다.

 

 

vol.exe -f tak3.raw pstree

 

imageinfo 는 딱히 xp라서 프로파일러를

붙일필요는 없을거같다

 

아까본 pid 1756를 유심히 봐야될거같다

 

 

vol.exe -f 3.raw malfind -p 1756

해보니까 뭐 조작은되지않았다 나옵니다

 

 

 

 

 

 

vol.exe -f tak3.raw dumpregistry --dump-dir=./

 

rega로 열어보니까

보안서 비스일 가능성이있지만 그렇지않다.

 

 

 

dll을 보는데 64to32.dll이 있는데 이게딱보니 처음보고 이상한거같다

 

64to32.dll 을 호출한 놈이 누군지 찾으면된다.

 

pid가 644놈을 호출하는게 저 64to32.dll이라고생각한다.

 

 

 

 

vol.exe -f tak3.raw ldrmodules -p 1756

을해보면

여기서 64to32.dll을 호출하는데

 

vol.exe -f 3.raw filescan > 1.txt

 

64to32.dll을 찾았고

 

 

 

vol.exe -f 3.raw dumpfiles -Q 0x000000000a15c378 --dump-dir=./

 

으로 64to32.dll 을 뺴내서

 

virus total에 넣어보니까

 

바이러스에 검출에 성공했다.,

 

=============================

 

 

 

 

======================================================

 

 

 

 

아까 unpacking된것을 정적 분석하기위에

 

정적분석은 무조건 패킹이 해제된 상태에서 열어야하니까

패킹안된것을

 

ida로 열어봅니다.

 

 

 

백신이 있는것은 실행안되게 막아놨다. 백신이있으면 실행조차 안되게막아놨다.

 

 

백신 탐지 우회기법이 적용되어 있는지 확인하고, 어떤 동작을 수행하는지 분석

 

- IDA - Strings 탭에 보면 백신 이름에 대한 문자열(AYAgent.exe, V3Ltray.exe )

정의되어 있다. 해당 주소로 이동 - 참조점(xref - 4037A0)으로 가면,

exe 이름을 가져와서 DeleteFile 명령을 수행하는 것을 확인

 

 

 

 

찾고자 하는 문자열을 우클릭하고

jump to xref to operand를 누르고 ok를 누르면 점프가된다

 

 

 

 

 

 

 

 

이렇게 점프가되고

 

push는 메모리에 alayc을 올리고 v3를 메모리에올리고

그래도 밑으로내려보면

 

 

 

 

 

 

밑으로내리니까 filename을 불러놓고

filea를 삭제한다.

 

정리해보자면 v3 tray를 메모리에넣고 filename변수에넣고 filename 을가져와서결과적으론 

 

delete해버린다

 

실행되는 순간 파일명이 있으면 백신을 삭제한다.

 

백신을 실행 못시키게 제일 중요한파일을 삭제해버리는 겁니다.

실행파일을 강제로 삭제해버리는 것입니다.

 

운좋으면 삭제가되겠지만 100퍼센트 삭제가되는것은 아닙니다.

 

참고로 일반게스트 계정이면 권한이 없으니까 안될수도있습니다.

 

 

 

 

 

jump를 한뒤에

 

 

 

 

서비스에 등록된 이름과 시스템 명령어

 

- IDA - Strings 탭에 보면 svchost.exe -k netsvc 가 정의되어 있다. 해당 주소로 이동

 

service에선 악성코드가없었는데 

 

 

에지스트리를등록하고

service 를 64.32로 변경하고

 

함수를실행해서 

- 참조점(xref - 4032F0)에 가면 서비스 이름 확인(64to32)

 

- servicename 정의 후 레지스트리 등록(SYSTEM\\CurrentControlSet.....)

 

 

프로그램 실행 후 가장 먼저 호출되는 함수의 역할은?

- WinMain 함수의 call 401000을 보면 CreateMutex(중복 실행 방지)를 먼저 수행

 

댓글()