올해 초부터 등장한 GandCrab의 열기는 식을 줄 모르고있다. 지속적 변형으로 현재까지 v4.4로 업그레이드되어 유포 중임을 확인하였는데, 4버전 대의 GandCrab에서 특이한 점은 이전 버전들과 다르게 네트워크 통신이 없이도 파일 암호화를 수행한다는 것이다. 공개키를 사용하는 랜섬웨어에서는 C&C를 통해 피해 PC의 공개키를 공격자에게 전송하고, 그 키와 매칭이 되는 개인키는 공격자만이 알고 관리하는 방식이 보통이다. 그렇다면 공개키를 공격자에게 전송하지 않는 GandCrab v4.x는 어떻게 공격자가 개인키를 관리할 수 있을까?’에 대한 의문을 시작으로 자사에서는 6월 말부터 확인 된 v4.xGandCrab(v4.0, v4.1, v4.1.2, v4.1.3, v4.2, v4.2.1, v4.3, v4.4)의 암호화 방식을 분석하였다.

먼저 파일에 대한 암호화가 이루어지는 방식은 아래와 [그림1], [그림2]와 같다.

[그림 1 ] – 키가 생성되어 저장되는 정보


[그림 2 ] – 생성 된 키를 통해 파일을 암호화하는 방식


[그림1]에서 보이는 것과 같이 공개키(public)와 개인키(private)는 쌍을 이루는데 해당 GandCrab에서는 사용자 시스템에서 로컬 키 쌍을 만들고 해당 키 정보를 레지스트리에 저장한다.

이 때 공개키는 그대로 저장하지만, 개인키의 경우 공격자의 공개키로 암호화 한 Salsa20의 키(Key)와 벡터(Nonce)을 이용하여 암호화 한 후에 저장한다. 이 때 저장될 때에 암호화 된 Salsa20의 키, 벡터 및 암호화된 로컬 개인키를 함께 저장한다. 또한 이 정보는 Base64로 암호화되어 랜섬노트에 기록되어지기도 한다.

[그림2]와 같이 파일을 암호화 할 때는 각각의 파일마다 Salsa20 암호화에 필요한 키와 벡터를 생성하여 진행하는데, 이때 사용하는 키와 벡터는 로컬의 공개키로 암호화되어 파일 끝에 저장된다.

이 과정을 거꾸로 올라가 보면 공격자의 개인키 한 개만 알면 모든 키와 벡터를 알고 복호화를 진행 할 수 있다는 결론에 이른다. 상세한 단계는 아래와 같다.


[그림 3] – 공격자 개인키가 필요한 이유


굉장히 복잡한 알고리즘이지만 결국에는 공격자 개인키를 알면 해당 PC의 모든 암호화 된 파일을 복호화 할 수 있게 된다. 

Magniber 랜섬웨어의 경우, 키를 알고있는 공격자 입장에서 암호화 된 파일만 있어도 복호화가 가능했던 반면 이번 GandCrab v4.x에서는 암호화 된 파일 뿐아니라 감염 된 PC의 '로컬 개인키가 암호화되어 저장 된 레지스트리의 값' 혹은 '암호화 후 감염 시스템에 생성 되는 랜섬노트(KRAB-DECRYPT.txt)'정보가 함께 필요하다. 해당 데이터 정보에 파일 복호화를 위한 핵심인 암호화 된 로컬 개인키가 존재하기 때문이다. 

실제 공격자가 제공하는 GandCrab v4.x 복구툴 확인 결과, 로컬 개인키를 함께 전달받아 파일 복호화를 수행하는 것을 확인하였다. 공격자는 공격자 개인키를 가지고 있기 때문에 [그림2] 하단에 설명 된 과정을 통해 로컬 개인키를 구할 수 있다.

GandCrab v4.x 복구툴이 동작하는 과정은 아래와 같다.

[그림 4] - 복구툴 동작 과정


해당 GandCrab 류는 자사에서 아래와 같이 진단 중이다.

행위 진단 Malware/MDP.Ransom

파일 진단 Trojan/Win32.Gandcrab 


Posted by 분석팀