CryptXXX

Malwares 2016. 6. 3. 23:57


CryptXXX (3.0)



유포


- Angler Exploit Kit 을 통한 배포 및 설치/실행.

- 취약한 웹 사이트에서 Angler Exploit 이 있는 페이지로 랜딩.

- Angler Exploit 은 사용자 PC 의 취약점을 검색하고 Bedep 모듈을 동작.

- Bedep 모듈은 Angler Exploit Kit 의 Fileless Loader 역할을 하며 간단한 가상환경 체크도 수행.

- Bedep 로더를 통해 최종 파일이 드랍 및 실행.




동작


- rundll32.exe(svchot.exe 이름으로 복사) 통한 dll 실행.

- 백신 업체 제품 확인 및 차단.

- 약 90여개의 파일에 대한 암호화 진행.

- Volume Shadow Copy 삭제.

- 악성 DLL 이 가지고 있는 5개의 Export 함수를 통해 악성 동작을 수행. (Export 함수명 : MS 111, MS 112, ... , MS 115)

- 파일 암호화 이후 Screen Locker 동작.




분석


- 실행되는 파일(CryptXXX)은 DLL 파일로, Export 하고 있는 함수가 무슨 역할을 하는 지가  중요.

    • - 각 Export 함수의 역할
      • MS 111
- MS 112 를 호출.

      • MS 112
- 고유 사용자 ID 생성.
- MS 113, MS 115 호출.
- 랜섬노트(안내문) 생성 (!Recovery_[감염자_ID].html , !Recovery_[감염자_ID].bmp , !Recovery_[감염자_ID].txt)
- 시작프로그램 하위에 lnk 파일 생성. (재부팅 시 CryptXXX 동작)
- 암호화 키 생성.
- MAC time 변경.
- 파일 암호화 수행. (XOR, RSA)

      • MS 113
- 추가 모듈 다운로드. (StillerX 로 불리는 정보탈취 악성코드)
- CryptXXX 이외의 추가 모듈이기 때문에 따로 분석하지 않음.

      • MS 114
- 광역 플래그 세팅.
- 재부팅 시 MS 112 를 호출.

[ MS 114 함수의 코드 ]




      • MS 115
- 특정 관리 모듈의 실행상태 확인 후 종료. (WerFault.exe, taskmgr.exe, msconfig.exe, cmd.exe)
- 부모 프로세스(MS 112) 가 동작하고 있는지 확인. 
- 프로세스가 종료 되었다면, MS 112 를 다시 호출. (생존 주기 연장)

[ MS 115 함수의 주요 루틴 ]




      • 악성코드 내 문자열 복호화 루틴

- 악성코드 내에서 정적으로 사용하는 거의 모든 문자열은 Encoding 되어 있다.

- 특정 키 값을 사용하여 문자열을 복호화 하는데, 해당 파일에서는 모두 14(0xE)를 사용한다.



[ 악성코드 내의 문자열 복호화 ]




      • 백신 확인 루틴





      • 파일 MAC time 변경
- 악성파일이 생성하는 안내문 파일의 MAC time(Modify/Access/Create) 을 변경한다.
- SetFileTime API 사용








      • 모든 파일 조회후 대상 확장자 파일 비교
- 파일에 접근하여 확장자를 비교한다.
- 비교할 확장자는 특정 할당 버퍼에 주소 참조 형태로 가져온다.



암호화 

      • 랜덤 값 및 Seed 생성 부분

- 임의의 Key 집합을 만들기 위해 Delphi generator 를 사용.

- GetSystemTime 함수로 _SYSTEMTIME 구조체값을 얻어 옴. (16bytes)

- _SYSTEMTIME 구조체의 5번째(wHour) 이후의 값으로 Seed 를 계산.

- 해당 값은 이후 랜덤한 Key를 만들기 위한 Seed 값이 됨.

- 버전 5 이하의 Delphi 에서는 랜덤 함수에 사용하는 seed 값으로 위와 같이 system time을 사용다.

- 같은 시간에 대한 같은 seed 값이 생성되고 결국 같은 랜덤 값이 생기는 취약성이 발견.

- Seed = ((Hour * 60 + Minute) * 60 + Second) * 1000 + Milliseconds 형태로 seed를 생성.






- 생성한 seed 값을 이용해 실제 랜덤한 값을 생성하는 부분.

- Delphi 랜덤 함수에서 사용 되며 D.H.Lehme 의 multiplicative congruential algorithm 을 이용.

- X(k + 1) = (Xk * A) + C mod(M)

  X = 랜덤 값, A = 승수, C = 상수, M = 범위 이며, 

  Delphi 에선 A = 8088405, C = 1 를 사용하고 있음.






      • 암호화 동작 후 이름 변경
- 암호화 동작을 수행 한뒤 .crypt 확장명으로 파일 이름을 변경.
- MoveFile API 사용










암호화 이후 랜섬노트 화면





특징

      • CryptXXX 1.0/2.0 버전은 복호화 가능. (Key Bruteforce 방식)
      • CryptXXX 3.0 이상의 버전은 부분 복호화 가능. (일부 백신사에서 제공 하나 큰 의미가 없어 보임)








Last update ::

- 2016.06.09 (초안 작성)

- 2016.11.07 (내용 추가, 오타 수정)


Keywords ::

- Ransomware

- CryptXXX


References ::

- https://isc.sans.edu/forums/diary/Angler+Exploit+Kit+Bedep+and+CryptXXX/20981/ (Angler Exploit Kit 분석)

- Jean-Baptiste Bedrune, Eric Filiol, and Frederic Raynal : "Cryptography: All-out Attacks or How to Attack Cryptography Without Intensive Cryptanalysis";2010; (Delphi 암호화 방식)

- http://securityfactory.tistory.com/275 (Angler Exploit KIt 분석)

- https://www.proofpoint.com/tw/threat-insight/post/cryptxxx-ransomware-learns-samba-other-new-tricks-with-version3100 (CryptXXX 3.0 분석)

- http://blog.checkpoint.com/2016/05/27/cryptxxx-simple-evasive-effective/ (CryptXXX 분석)

- http://asec.ahnlab.com/1045 (CryptXXX 분석)







블로그 이미지

Elfmfl

,