CyberChef를 이용한 PBKDF2 기반 암호화 데이터 복호화
일반적으로 멀웨어에서 사용되는 암호화 방식은 하드코딩된 Key, IV 에 AES 와 같이 잘 알려진 알고리즘을 사용하는 것이다. 이런 경우 Key 와 IV 가 코드에 하드코딩되거나 런타임 도중 생성되기 때문에 Cyberchef 로 쉽게 복호화할 수 있다.
하지만 최근 발견된 멀웨어는 이러한 암호화 방식에 PBKDF2 를 추가해 복호화 과정을 분석하기 어렵게 만들었다. PBKDF2 은 무차별 대입 공격에 대한 취약성을 줄이기 위해 주어진 비밀번호와 Salt를 사용해 무작위 값을 생성한다. 이렇게 생성된 값은 AES 와 같이 알려진 알고리즘에 사용됨으로써 비밀번호 크래킹을 어렵게 만든다.
분석가인 우리에게 중요한 점은 이런 방법으로 암호화된 데이터를 어떻게 쉽게 복호화하느냐이다. 이 글에서는 Cyberchef 로 PBKDF2와 AES 를 이용해 암호화된 데이터를 복호화하는 방법에 대해 설명한다.
1. FileInfo
- MD5 : 25596412BE7A34C82C30F4652AE38CF3
- SHA256 : 7D7789F9E30220D886BF7C37F3DBC7BE0ADC361A451FFAD333E087EE72D92ECE
- FileType : exe (.NET)
- 비고 : PhatomStealer
예제 샘플은 MalwareBazaar 에서 다운로드할 수 있다.
해당 파일은 정보 탈취 기능을 가진 멀웨어이므로 반드시 격리된 환경에서만 테스트하기를 권고한다.
2. 복호화 코드 분석
다음은 테스트 샘플의 암호화된 문자열을 복호화하는 과정이다.

복호화 과정은 PBKDF2와 AES 알고리즘 단계로 나뉜다. PBKDF2 는 다음과 같은 하드코딩된 입력 값을 이용하여 AES 에 사용할 Key, IV 값을 생성한다.
다음은 샘플에서 사용되는 PBKDF2 데이터 생성, AES 복호화 코드다.

.NET 프레임워크에서는 Rfc2898DeriveBytes 클래스를 사용해 PBKDF2 알고리즘을 이용할 수 있다.

참고로 Key Size 가 384인 이유는 AES 에서 사용할 Key 가 32 바이트, IV 가 16바이트로 총 48바이트를 요구하며 이를 위해 PBKDF2의 실행 결과는 총 48바이트(384비트)를 생성해야 하기 때문이다.
샘플에서 사용되는 PBKDF2 입력 값은 다음과 같다.
- Passphrase : 3b 26 4b 46 21 4d 21 68 38 5e 69 54 3a 3c 29 61 3f 7e 6d 58 65 4e 2a 7e 6f 3f 67 4e 5b 76 40 72 51 3d 42
- Key size : 384
- Iteration : 1000
- Hashing Function : SHA1
- Salt : 66 33 6f 33 4b 2d 31 31 3d 47 2d 4e 37 56 4a 74 6f 7a 4f 57 52 72 3d 28 74 4e 5a 42 66 4b 2b 62 53 37 46 79
CyberChef 에서 Derive PBKDF2 key 를 선택하여 적절하게 옵션을 입력하면 다음과 같은 48 바이트 hex 값이 생성된다.
475f6e68e30d296766cc730b6c882653a5eb9a04031812ff0426d081f1fc86bd54f5712a1b6304a9bce604684434bc81
이제 생성된 48바이트를 앞의 32바이트, 뒤의 16바이트로 나누어 AES 알고리즘의 Key, IV 로 사용한다.
- Key : 475f6e68e30d296766cc730b6c882653a5eb9a04031812ff0426d081f1fc86bd
- IV : 54f5712a1b6304a9bce604684434bc81
다음은 입력 값 A0PtIFR6FC2+7dtbdcVP9w26FTrRmH70J9Utnh+wtOkTirhICQdsHONOgKECMQtc 을 주어진 Key 와 IV 로 복호화한 결과다.
