Malware

HWP Malware containing COVID-19 contents By Lazarus (코로나19 악성코드)

wsoh9812 2020. 11. 25. 18:58

라자루스그룹이 한국을 타겟으로 악성코드를 제작해 메일로 발송했다고한다.

인천 광역시 코로나 바이러스 대응 긴급 조회 .hwp
인천 광역시 코로나 바이러스 대응 긴급 조회 .hwp

뭐,, 내용은 위와 같다고 한다.

 


분 석 


hwp 악성코드는 postscript를 이용하는 것이 많이기 때문에 본능적으로

hwpscan2를 이용하여 postscript를 확인 해보았다.

 

postscript decompress

PostScript를 decompress 해보면 위와 같은 '/image <2F789.....'을 확인 할 수 있다.

[Tip] PostScript에서 바이너리를 '<>'로 감싼다고 한다.

그래서 악성행위를 하는 쉘코드? 정도로 볼 수 있는데 이것을 HxD에다가 넣어보면

 

HxD

이상한 코드가 보이는데 여기서 보면 또 '<'로 시작하는 부분을 볼 수 있는데 이것 역시 쉘코드?로 생각 되었다.

 

최종 쉘코드?

위의 '<3....'을 또 HxD로 열어보면 위와 같은 수상한 문자열을 확인 할 수 있다.

일단... 육안으로 봤을땐

[*] "파워쉘로 다운로드를 하는데. http://url/detail31.jpg파일을 temp폴더에 skype.jpg로 저장해라.

[*] regsvr32를 이용해 skype.jpg를 레지스트리에 등록한다.

(regsvr32는 dll파일을 레지스트리에 등록하는 것인데. 그러면 skype.jpg를 dll파일이라고 의심해볼 수 있다.)

[*] 그리고 또한번 파워쉘로 다운로드 하는데 위의 [*] 의 작업을 다른 파일로 한번 더한다.

 

detail31.jpg와 detail32.jpg 파일을 다운 받는데. detail32.jpg를 구할 수 없어.

detail31.jpg만 분석을 진행하겠다.

 

 

detail31.jpg 분석


API_Setting 함수 내부

 

[*] 맨 처음 API_Setting 함수를 통해 사용할 API들을 동적으로 불러옵니다.

( 함수 내보의 코드가 1600줄,,,, 일일 실행함,, 왜했지..)

 

 

지금 분석 하고 있는 것은 dll이다.

그래서 생각해 볼 수 있는것이 어떤 프로그램에 인젝션되어 실행되는 형식이다.

특정 프로그램에 인젝션 되었다고 가정해보면 

22번 인젝션된 프로그램의 PID구한다.

27번째 줄에 보면 PID와 V4를 비교해서 if문안으로 들어간다.

 

v4는 아래와 같다.

v4를 리턴하는 함수

주석 처리된 문자열의 프로세스가 있으면 그 프로세스의 PID를 리턴한다.

 

 이 함수의 return 값과 현재 프로세스의 PID가 서로 같아야 if문 안으로 들어간다. 즉, ( PID == v4 )

하지만 현재는 같지 않은 상황이기 때문에 else로 넘어간다.

 

[중요]

 나는 dll을 분석하고 있지만,  실제로는 dll이 binary.exe라는 프로그램에 인젝션 되어 실행되고 있다고 가정하자.

 

결론적으로, 우리는 if문안으로 들어가야되고(꼭 그래야하는 건 아니지만)

들어가기 위해서는 위에 주석처리된 프로세스 안에 dll이 인젝션 되어야 된다고 볼 수 있다.

 

왜 꼭 그래야 하는건 아닌가???????

if문에 걸리는 else 
sub_1000D040 내부

 

먼저 빨간색 박스를 살펴보면

[*] 인젝션된 프로그램의 PID를 읽어와서 토큰을 건드려 권한 상승을한다.

( 이 말은 dll.exe 파일의 토큰을 컨트롤해 권한을 상승 시킨다. )

 

파란색 박스는 상승된 프로세스(binary.exe)에 dll을 sub1000D530을 통해  injection 시킨다. 

 

[*] 요약하자면, 특정 프로세스에 dll이 인젝션 되었으면 다른 동작을 하지만 원하지 않은 프로세스에 인젝션 되었다면,

인젝션된 프로세스의 권한을 상승시킨뒤 dll을 주입시킨다.

 

[ 참고 ]

InterlockedDecrement : 여러 스레드에서 공유되는 데이터 값을 하나씩 증가시킬때
ReleaseMutex : 지정된 뮤텍스 오브젝트의 소유권을 해방합니다.

 

 

 

 

 

이제 위의 조건이 충족되면 

본격적으로 if문( PID == v4 ) 안으로 들어오게 된다.

 

if문 안으로 들어와서 쭉 실행시킨다음 핵심은 sub_10008A00 함수이다. 

 

sub_10008A00으로 진입해 보면 아래와 같다.

sub_10008A00 함수 내부

 

if문에 있는 함수를 하나씩 보면 아래와 같다.

check_Vmware 함수

[*] 현재 프로그램이 가상머신에서 돌아가고 있는지를 확인합니다.

debug_check 함수

[*] 디버거가 붙어있는지 확인

 

check_debuger 함수

 

check debuger함수 내부의 16번째 줄 함수 내부

[*] 윈도우 창을 확인하여 디버거가 있으면 프로그램을 종료 한다.

 

위 처럼

api로드 , Vwmare check, debug check, debuger check가 끝나면,

 

login 함수

[*] login 함수로 들어와서 로그인을 진행합니다.

 

 login 함수 분석

C2서버를 확인하는데 특정 주소에서 바로 문자열을 불러오는 식이었다.

하지만 악성코드는 C2서버 주소를를 하드코딩 해놓지 않는다.....

그래서 특정 문자열을 복호화해서 주소에 담아 두지 않을까.. 하는 생각에 추적해보았다.

 

함수 테이블?

Dll main을 호출하기 이전에 빨간색 박스에서 위의 함수테이블(그림)을 호출한다.

이 테이블에 있는 함수 들 중 하나가 C2서버 주소를 복호화 해준다.

C2서버 주소 복호화

 

테이블에 있는 나머지 함수들은 쓸데 없는 것같다...

 

 

fakenet

그렇게 C2서버 주소를 찾아 낼 수 있다.

 

 

[*] C2서버 로그인

http://C2서버주소/ts= 현재 날짜 및 시간&code=login&name=맥 정보&hmac=hmac정보를 C2서버로 보내 로그인을 한다.

 

MAC을 구해 암호화 한 것이 name의 인자로 들어감.

 

[*] code파라미터의 인자로 data, login, answer, question... 으로 다양한 공격형태가 존재한다.

 

 

이렇게 로그인에 성공하면 아래와 같은 다양한 형태의 공격을 하게 된다.


 

추가적인 기능은 C2서버랑 통신하면서 명령을 주고받는 그런 형식이다.

이러한 동작을 완벽히 분석하기는 힘들고, 바이너리도 너무 크고, dll injection 되서 실행되기 때문에 제대로 된 동적 분석도 불가능하다.  그래서 그냥 이 malware가 어떤 기능을 가지고 있는지 적어보겠다.

 

 

[*] WMI(윈도우관리도구)를 이용하여 컴퓨터 정보 얻기

 

Windows 보안센터에 등록되어있는 백신프로그램 정보, 컴퓨터의 디스플레이 장치, 컴퓨터 시스템정보, 프로세서 기타 정보 등을 획득한다.

 

 

[*] C2서버로 파일 업로드 및 다운로드

 

 

[*] 서버로 부터 받은 값을 구분하여 파일을 write할 수 있는 기능

 

[*] Injection된 바이너리 정보 획득

Injection된 파일의 버젼 정보 획득