study/악성코드 분석

WannaCrypto 웜 동작 함수 찾기 (1)

lucykorea414 2024. 2. 11. 20:32
728x90

워너크립토를 실행하고 SysAnalyzer로 분석을 해보자

 

레지스트리 모니터로 들어가면 실행파일을 확인 할 수 있다.

 

 

일단 워너크립토의 전체적인 암호화 분석 보다는

드로핑된 파일과 서비스된 파일 중에 네트워크를 담당하는 부분이 있는데

그 웜 부분만 분석을 해보장

 

아이다로 a.exe(랜섬웨어 실행파일)을 분석해봅쉬당

 

메인 함수에 킬스위치라는 부분이 나옴!

 

 

이렇게 생김

 

킬 스위치란?
랜섬웨어가 실행될때 저 인터넷 주소에 접속이 된다면 랜섬웨어가 실행을 안하고 종료됨.
가상기기를 우회하기 위해 넣었다는 의견도 있다.(https://www.boannews.com/media/view.asp?idx=54809)

 

 

 

저기서 접속이 잘 되면 인터넷 오픈을 한다

 

 

원래는 InternetOpenUrl 이라는 api를 쓴다!

 

이 api를 검색해보면...

https://learn.microsoft.com/ko-kr/windows/win32/api/wininet/nf-wininet-internetopenurla

 

연결이 성공적으로 되면 URL 핸들을 반환하고, 실패하면 null을 반환한다고 써있따

 

 

그래서 콜 값을 받아온 값, 이 리턴 값 EAX를 EDI에 넣고 나중에 테스트는 여기서 한다

 

 

여기서 테스트를 하는 이유는 edi가 0인지 아닌지 보는건데, 

edi가 0 이면 접속이 안되었다는거고, 0가 아닌 경우는 접속이 성공한 경우이다.

접속에 성공한 경우에는 오른쪽으로 점프를 하고 아닌 경우에는 왼쪽으로 간다.

 

그래서 접속에 성공한 경우(오른쪽)을 보면 바로 return 을 해서 실행이 꺼지게 되고

접속이 실패한 경우 왼쪽이 진짜 루틴인 거다!

 

이때 sub_40890을 콜 하는 것을 볼 수 있는데, 이 함수를 한번 실행하고 종료되는 양상을 볼 수 있다.

그럼 이 함수를 한번 들어가서 분석을 해보자!

 

여기서도 보면 몇까지 테스트를 하게 되는데, 저기서 compare 문을 보면 dword ptr 해가지고 인자가 2개 이상 넘어올 경우에 밑에 있는 오른쪽 루틴으로 빠지게 되고, 그렇지 않은 경우에는 왼쪽 루틴으로 빠지게 된다. (오른쪽 루틴이 찐 웜 루트임)

 

근데 우리는 -msecurity라는 인자를 받은 적이 있다!!

강의...

나는 안 보인다...

 

강의에서는 네트워크 설정을 Host Adapter only로 했지만 내가 Host only Network 로 해서 그런가??? ㅜㅜ

하지만 VirtualBox 7.0에서 Host only Adapter 는 없어졌다...........................

그래서 다른 윈도우 창으로 웜 작동이 안된건가??

 

 

사실 다시 실행을 시켜 봤는데도 강의처럼 smb 패킷이 안 뜬다 ㅜㅜ

 

 

 

어쨌든 -msecurity 가 넘어갔다고 치면 3개의 인자를 넘겨서 받은것 이므로 

왼쪽의 call sub_407F20이 실행된다.

 

이부분을 동적분석을 사용해서 직접 실행해보자

 

 

이 부분의 주소를 복사 하고

 

 

올리디버거에서 bp 걸고 실행시켜보면

 

 

-msecurity 가 넘어가지 않는다면 인자가 1로 뜨는걸 볼 수 있다!!

 

여기서 웜 부분을 무조건 실행하기 위해서 한번 패치를 해보자!

저기서 무조건 점프를 해야 웜이 실행이 되기 때문에 JGE를 JMP로 바꿔서 한번 실행 파일을 만들어볼게용

 

 

실패...

 

ㅜㅜ 다시 강의 내용만 일단 따라가자면,,,

웜은 무조건 -msecurity 옵션이 주어졌을 경우에만 실행이 된다!!


 

서ㅇㅇ양의 해결책으로 다시 실행~! (감사합니다)

 

 

C드라이브에 바로 넣어줬습니당

 

 

레츠고

 

 

ㅎㅎ

C드라이브에 넣었더니 -msecurity 가 생겼어요 *^^*

 

 

하지만 wireshark smb 패킷은 똑같긴 해요~~

ㅜㅜ

 

그래도 킵고잉~

 


어쨌든 정상적으로 실행을 하게 되면 argument가 2개 이상 넘겨져서 IDA에서 봤을때 오른쪽으로 넘어가게 된다!!

 

 

그리고 OpenSCManager, OpenService 등을 실행을 함

 

 

여기서 내용들을 세팅하는 것을 볼 수 있는 중간에 call sub_407FA0이라는 함수도 보임!!

 

 

이때 이 call을 따라가보면 ChangeServiceConfig 라는게 보임!!

 

설정들을 좀 바꾼다는 의미이고

 

좀 더 내려가다 보면

 

 

마지막에 StartServiceCtrlDispatcher을 호출함

이때 실행하는 구간은 408000 구간으로 실행함 (위의 offset loc_40800)

 

이걸 바로는 실행할 수는 없고 더블클릭해서 루틴은 볼수가 있음 

(40800에 bp를 걸어서 패치해서 실행은 할 수 있음)

이때 오프셋으로 mssecsvc2.0 이 실행되는걸 볼 수 있고

실제로 레지스트리 편집기를 열어보면

 

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mssecsvc2.0

랜섬웨어가 등록된 걸 볼 수 있음

 

여기를 자세히 살펴보면 이미지 path가 C:\a.exe -m security 라고 되어있는걸 볼 수 있음

 

이때, 이 서비스를 검색하면

 

이렇게 찾아짐! -> 실행이 되고 있음을 알 수 있음

 

다시 루틴으로 돌아와서

 

RegisterService랑 SetService 두개가 있는데 이거는 서비스에서 실행이 됐을 때 실행되는 함수들!!

 

그리고 밑으로 넘어가면 sub_407BD0 을 호출한다!

이 내용이 핵심 함수!!!!!

 

 

728x90