2016년 2월 경, DRM 솔루션으로 유명한 S사의 제품을 변조하는 악성코드가 발견되었다.
악성코드의 유형은 APT 공격 악성코드이며, 제작한 곳은 "Rifle Campaign"으로 작년 이슈된 “검은 광산 작전”의 제작한 조직과 동일한 것으로 추정된다.
해당 악성코드로 인한 피해는 아직 확인 된 바가 없는 상태로 알려져있다.
2가지 종류의 샘플이 발견되었는데, 비슷한 기능을 하는 악성코드다.
* 샘플은 여러개의 파일을 Drop을 하게 되는데, 마지막 악성 서비스로 등록하는 DLL을 마무리 분석
* 환경
(1) WINDOWS 7
(2) IDA Pro, OllyDBG, ExeInfo PE, HxD, NotePad++ 등
* 분석
0. 들어가기 전
![]() |
<그림 0. 악성코드 흐름> |
![]() |
<그림 1. Drop 된 "wsupdatemgr.dll" PE 정보> |
* 해당 DLL은 서비스로 등록되어 동작하는 DLL이기 때문에, "ServiceMain" 기반으로 분석한다.
1. 서비스 시작
![]() |
<그림 2. 서비스 시작하는 과정> |
* 상당히 일반적인 서비스를 시작하는 과정
![]() |
<그림 3. 서비스를 실행 후 Thread 생성하는 과정> |
* 서비스를 실행하고 악성행위를 위한 Thread를 생성한다.
2. 파일경로 생성
![]() |
<그림 4. 파일명 복호화 하는 과정> |
* Encoding 된 문자열을 XOR을 통해 Decoding한다.
* 해당 XOR Decoding 알고리즘은 기존 DarkHotel에서 사용하는 XOR Decoding과 상당히 일치한다.
DWORD EncodeXOR(LPBYTE data, DWORD dwSize)
{
DWORD dwResult, i = 0;
DWORD XORKey1;
BYTE XORKey2 = 0xA2, XORKey3 = 0xD1, XORKey4;
XORKey1 = 0x2B39DBD1;
for (dwResult = 0x5A793B21; i < dwSize; XORKey1 = (((XORKey1 ^ (8 * XORKey1)) & 0x7F8) << 20) | (XORKey1 >> 8))
{
data[i] ^= XORKey2 ^ dwResult ^ XORKey3;
XORKey4 = XORKey3 & (XORKey2 ^ dwResult);
XORKey3 = (((XORKey1 ^ (8 * XORKey1)) & 0x7F8) << 20) | (XORKey1 >> 8);
XORKey2 = XORKey4 ^ dwResult & XORKey2;
dwResult = (((dwResult << 7) ^ (dwResult ^ 16 * (dwResult ^ 2 * dwResult)) & 0xFFFFFF80) << 17) | (dwResult >> 8);
i++;
}
return dwResult;
}
3. IP주소 생성 후 생성 된 IP주소로 연결
![]() |
<그림 5. IP주소 Decoding 후 연결> |
* Decoding 된 IP 주소로 단순하게 연결만 한다. (전혀 RECV, SEND 과정이 없다.)
* 성공적으로 연결 되면 추가적인 작업을 하게 된다.
4. IP주소 연결 성공 시, "SDSDec.dll" 파일명 생성 후 해당 파일을 XOR Decoding
![]() |
<그림 6. "SDSDec.dll" 파일을 XOR Decoding하여 "svchost.exe"로 저장하는 과정> |
![]() |
<그림 7. "SDSDec.dll" 및 "svchost.exe"를 "kernel32.dll"과 동일한 생성시간으로 설정하는 과정> |
* "SDSDec.dll" 파일 내용을 XOR Decoding 후 "svchoste.exe"로 저장하기 되는데 생성시간은 "kernel32.dll" 로 설정하게 된다.
* "SDSDec.dll" 파일이 무엇인지 알 수 없어서 어떤 공격을 위한 것인지 확인 할 수 없다.
* "SDSDec.dll"을 EXE로 만든다는 것은 기존에 "SDSDec.dll"이 EXE였단 것으로 판단된다.
5. 저장 된 "svchost.exe" 실행
![]() |
<그림 8. 저장 된 "svchost.exe" 실행하는 과정> |
* 숨겨서 실행하게 된다.
6. 생성한 파일 제거, Log 파일명 생성 후 Log 확인
![]() |
<그림 9. 시간 및 파일제거 후 Log 파일 확인하는 과정> |
![]() |
<그림 10. "setuperror.log" 생성 후 '#' 기반으로 자른 후 Log 확인> |
![]() |
<그림 11. 1시간 Sleep하는 과정> |
* 위 과정을 1시간 간격으로 무한반복하게 된다.
* 결과
악성 서비스 DLL도 핵심 악성행위를 하는 파일은 아닌 것 같다.
"SDSDec.dll"을 생성하는 또 다른 샘플이 필요한 것으로 파악된다.
기존 S사에서 제공하는 솔루션에는 "SDSDec.dll"이란 파일은 존재하지 않는다.
분석가 입장에서 추가적으로 시나리오를 가설하자면 다음과 같다.
총 3개의 샘플이 있어야 한다.
1번 샘플에서 Encoding 된 "SDSDec.dll" 생성
2번 샘플에서 Encoding 된 "SDSDec.dll" Decoding 하여 "svchost.exe" 생성 후 실행
(분석 내용)
3번 샘플에서 "SDSDec.dll" 및 "svchost.exe" 삭제
추가적으로 샘플 확보가 필요한 사항이다.