확장자 별 암호화 방식의 차이를 보이는 GandCrab v5.2
자사 블로그에서 이전 부터 언급해왔던 것처럼 GandCrab은 다양한 방식으로 유포 중이다. 지금까지 GandCrab은 버전을 업데이트하며 변화를 주어왔는데, 현재까지 확인되는 최신 내부 버전은 v5.2이다. 자사에서는 이 v5.2버전의 암호화 대상 확장자를 확인하는 방법에 있어 이전 버전과는 다른 점을 발견하였다.
GandCrab v5.2는 확장자 리스트를 3가지 그룹으로 분리하여 관리 및 확인하는데, 그 구성은 아래와 같다.
위에 언급 된 것과 같이 첫 번째 확장자 리스트는 해당 확장자일 경우 암호화에서 제외하고 두 번째 확장자 리스트의 경우 사실상 내부 코드에서 비교 후 사용되어지는 부분이 없어 페이크성으로 리스트만 가지고 있는 것으로 추측된다. 또한 마지막 세 번째 확장자 리스트들의 경우 이 확장자에 매치 될 경우와 그렇지 않을 경우에 따라 암호화하는 방식에 차이를 둠을 알 수 있었다.
파일 암호화 시 기존 버전과 같이 Salsa20알고리즘을 이용하는데, 이 때 파일의 앞에서 부터 0x100000크기만큼 나눠서 암호화를 진행한다. 세 번째 확장자 리스트에 매치될 경우 파일 전체를 암호화하고 그렇지 않을 경우, 파일 가장 앞부터 0x100000위치까지만 암호화한다. 그리고 파일 하위에 이 정보를 아래와 같이 저장한다.
즉 하위에 '암호화된 크기'가 저장 될 때 결국 세 번째 확장자 리스트에 매치될 경우 암호화 대상 원본 파일의 크기와 동일한 데이터가 저장되고, 매치되지 않을 경우에는 0x100000이 저장(파일 크기가 0x100000보다 작을 경우)되는 것이다. 따라서 파일의 크기가 0x100000보다 크고 위 세 번째 리스트에 매치되지 않으면 아래와 같이 데이터가 저장 될 것이다.
아래 [그림 3]에서 빨간색의 데이터는 비교시 다른 부분을 뜻한다.
그리고 확장자 별 암호화를 다르게 수행하는 루틴을 통해 암호화 제외 조건을 추가적으로 확인 할 수 있었는데 그 내용은 아래와 같다.
1. [그림 2]에서와 같이 암호화 후 하위에 저장되는 데이터 중 고정된 값으로 '0x1829899381820300'을 확인 할 수 있는데 이 값이 존재 할 경우 암호화 대상에서 제외된다. 따라서 한 번 암호화 된 파일은 재 감염(암호화)되지 않는다.
2. 대상 파일에 접근 시 CreateFile API를 사용하는데 이 때 dwFlagsAndAttributes 속성에 0x88000000을 세팅하기 때문에 암호화 대상에 포함되는 확장자이더라도 속성이 '읽기전용'일 경우 암호화에서 제외된다.
따라서 암호화 제외 조건을 총정리하면 아래와 같다.
1. 확장자가 아래와 같을 경우 (위 테이블에서 첫 번째 확장자 리스트)
2. 파일 명에 아래와 같은 데이터가 포함 될 경우
3. 폴더 경로에 아래와 같은 데이터가 포함 될 경우
4. 파일 끝에 아래와 같은 값이 존재할 경우
5. 파일의 속성이 '읽기 전용'일 경우
자사에서는 지속적으로 GandCrab의 유포 및 세부적 기능의 변화를 모니터링하고 있으며 진단법 또한 지속 업데이트 중이다.
파일 진단
Trojan/Win32.Agent
Trojan/Win32.Gandcrab
Malware/Win32.Generic