구매 주문서 메일로 위장하여 유포 중인 Lokibot 악성코드

Lokibot 은 인포스틸러 악성코드로서, 웹 브라우저, 메일 클라이언트, FTP 클라이언트 등 감염 PC에 설치된 다양한 프로그램들에서 계정 정보를 탈취하는 기능을 가지고 있다. 수 년 전부터 꾸준히 유포되고 있는 악성코드이지만, 아래의 주간 통계에서 확인되듯이 최근까지도 Top 5에 매주 포함되고 있는 것을 확인할 수 있다.

asec.ahnlab.com/1371

Lokibot은 최근 AgentTesla, Formbook, AveMaria 등의 악성코드와 유사하게 대부분 스팸 메일을 통해 유포되고 있다. 또한 진단을 우회하기 위해 위의 악성코드들과 유사한 닷넷(.NET) 외형의 패커로 패킹되어 유포 중이다.

다음은 유포에 사용된 스팸 메일로서 아래와 같이 전형적인 구매 주문서(P.O. – Purchase Order) 관련 내용을 담고 있으며 첨부 파일 실행을 유도한다.

유포 이메일 내용 (CAB 첨부형태)

첨부 파일을 확인해 보면 cab 포맷의 압축 파일이 존재하며, 압축 파일을 풀면 exe 파일이 추출되는데, 이것이 Lokibot 악성코드이다. 만약 사용자가 위의 첨부 파일을 압축 해제한 후 구매 주문서 파일로 착각하고 실행시킬 경우 Lokibot 악성코드가 실행된다.

1. 동작 흐름

Lokibot은 실행되면 아래에서 정리할 다양한 애플리케이션들에 대한 계정 정보를 추출하고 C&C 서버에 획득한 계정 정보들을 유출한다. 이후 AppDataRoaming[랜덤][랜덤].exe 경로에 파일을 복사한 후 시스템 및 숨김 속성 부여 그리고 Run Key 등록을 시도한다.

마지막으로 C&C 서버와 주기적으로 통신하며 명령을 수행할 수 있다. 하지만 일반적인 RAT나 백도어 악성코드들과는 달리 추가 악성코드 (exe 또는 dll 형태) 다운로드 및 실행, 종료, 삭제, 정보유출 등 간단한 명령 외에는 다른 다양한 기능들이 제공되지는 않는다.

C&C 서버로 부터 명령을 받아 수행하는 루틴

2. Lokibot 크랙 버전

참고로 최근 접수되고 있는 샘플들은 2017년 다음 블로그에서 소개된 크랙 버전으로 생성된 파일들이다. 즉 악성코드 제작자가 만들어서 판매하는 공식 빌더가 아니라, 누군가가 크랙하여 배포한 버전의 빌더로 생성된 바이너리인데 최근까지도 이 빌더로 제작된 lokibot이 다수 접수되고 있다. 참고로 악성코드 빌더도 이렇게 크랙 버전이 존재하는 이유는 다른 유료 소프트웨어들에 대한 크랙 버전이 존재하는 것과 같은 이유일 것이다.

www.trendmicro.com/en_us/research/17/l/cve-2017-11882-exploited-deliver-cracked-version-loki-infostealer.html

일반적으로 크랙 버전이라면 원래 버전과 큰 차이가 없어야 하지만, 해당 버전의 경우 SIde Effect가 존재한다. 먼저 Lokibot은 C&C 서버 주소를 인코딩하여 가지고 있다가, 이후 CryptDecrypt() 함수를 이용해 복호화한다. 이 버전으로 생성된 바이너리들은 모두 아래와 같은 동일한 원래 C&C 서버 주소가 복호화된다.

디코딩된 원래 C&C 서버 주소

하지만 이후 패치된 즉 추가된 루틴을 진행하면서 새로운 C&C 서버를 획득하게 된다. 패치된 루틴은 .x 섹션에 존재하며, 해당 코드 바로 뒤에 있는 데이터를 0xFF 키를 이용해 XOR 디코딩하고 이렇게 얻은 주소를 원래 C&C 서버의 주소에 덮어쓴다.

패치된 루틴을 통해 생성된 C&C 주소

문제는 C&C 서버 주소 URL 외에 레지스트리 Run Key (SoftwareMicrosoftWindowsCurrentVersionRun) 경로도 동일한 루틴을 진행하게 되는데, 이에 따라 CryptDecrypt() 함수로 복호화된 Run key 문자열이 다시 인코딩된 C&C 주소로 변경되어 이후 Run Key 등록 API 함수 호출이 실패하게 된다. 즉 이 크랙 버전으로 생성된 Lokibot들은 Run Key 등록이 실패해서, 재부팅 이후 실행이 불가능하다.

비정상적인 값으로 변경되고 있는 Run Key 문자열

3. 정보 유출 대상

Lokibot은 다른 인포스틸러 악성코드들과 비교했을 때에도 그 대상이 굉장히 많은 편이다. 여기에서는 그 대상 프로그램들을 정리하고, 몇 개의 대상에 대해서는 간략하게 살펴본다. 참고로 오래 전 만들어진 악성코드이기 때문에 최신 버전의 프로그램들에서는 정보 유출 기능이 정상적으로 동작하지 않는 경우도 있으며, 만약 보안 설정으로 암호화되어 있다면 유출되더라도 공격자가 사용할 수 없을 것이다.

즉 사용하는 프로그램들을 최신 버전으로 업데이트하고 보안 관련 설정을 하는 것만으로도 일정 부분의 정보 유출을 방지할 수 있다.

정보 유출 기능을 담당하는 함수들

아래에서 상세하게 설명하지 않은 대부분의 프로그램들은 특정 경로에 존재하는 텍스트 형태의 설정 파일 또는 특정 레지스트리에 존재하는 데이터를 그대로 읽어서 C&C 서버로 보내는 기능을 갖는다.

a. 웹 브라우저
– 정보 유출 대상 : Chrome, Comodo Dragon, ChromePlus, Nichrome, RockMelt, Spark, Chromium, Titan Browser, Torch, Yandex Browser, Vivaldi, Chromode, Superbird, Coowon, Mustang Browser, 360 Browser, Citrio, Chrmoe Canaria, Orbitum, Iridium, Epic Privacy Browser, CocCoc Browser, Opera Stable, Opera Next, Sleipnir, FireFox, IceDragon, K-Meleon, SeaMonkey, Flock, BlackHawk, Lunascape, Cyberfox, PaleMoon, WaterFox, Internet Explorer, Edge, Safari, QtWeb, QupZilla, Opera

a.1. Internet Explorer / Edge
과거 버전의 Internet Explorer에서는 다음과 같은 레지스트리에 Auto Form 형태의 ID / PW를 저장하였다.
– HKCUSoftwareMicrosoftInternet ExplorerIntelliFormsStorage2

이 키에 포함되어 있는 레지스트리 이름(Value)은 Hash 형태의 URL이며, 해당 이름의 데이터(Data)는 해당 URL에 대한 인코딩된 형태의 계정 정보이다. 문제는 이 레지스트리 키만 가지고서는 계정 정보가 저장된 웹 사이트의 URL과 그 URL에 대한 계정 정보를 확인할 수 없다.

그래서 Lokibot은 FindFirstUrlCacheEntryW(), FindNextUrlCacheEntry()를 이용해 URL Cache 를 구하고, 레지스트리 키 HKCYSoftwareMicrosoftInternet ExplorerTypedURLs 를 참조하여 사용자가 입력한 URL들을 구한다. 즉 계정 정보가 저장되었다는 것은 URL 캐시나 사용자가 입력한 로그에 해당 URL이 저장되어 있을것이기 때문에 이러한 값들을 최대한 구하는 것이다.

이후 이렇게 구한 URL들에 대해 각각 Hash를 구한 후 앞의 Storage2 키에서 구한 레지스트리 이름들을 비교한다. 만약 매칭된다면 즉 매칭되는 URL을 찾았다면, CryptUnprotectData() API를 호출하여 해당 URL에 대한 계정 정보를 획득하는데, 이 API 인자로는 Storage2 키 내부에 존재하는 레지스트리 데이터 뿐만 아니라 해당 URL도 필요하다. 이를 통해 URL 및 해당 URL에 상응하는 계정 정보를 획득할 수 있다.

Storage2 키에 저장된 계정 정보

Lokibot은 Internet Explorer의 과거 버전 외에 최신 버전 대상으로도 계정 정보 획득을 시도한다. 윈도우 8 이후부터 계정 정보는 Vault라는 윈도우 시스템에 의해 저장되는데, 이는 과거 버전의 Edge 웹 브라우저도 동일하다. Vault에 저장된 계정 정보를 획득하기 위해 vaultcli.dll을 로드한 후 VaultEnumerateValuts(), VaultOpenVault(), VaultEnumerateItems(), VaultGetItem() 와 같은 API들을 이용해 구한다.

a.2. Chromium 기반 웹 브라우저
다음 웹 브라우저들은 Chromium 기반의 웹 브라우저들이며, 대부분 유사하기 때문에 Google Chrome을 기준으로 설명한다.

– Chrome, Comodo Dragon, ChromePlus, Nichrome, RockMelt, Spark, Chromium, Titan Browser, Torch, Yandex Browser, Vivaldi, Chromode, Superbird, Coowon, Mustang Browser, 360 Browser, Citrio, Chrmoe Canaria, Orbitum, Iridium, Epic Privacy Browser, CocCoc Browser, Opera Stable, Opera Next, Sleipnir

먼저 AppDataLocalGoogleChromeUser DataDefaultLogin Data 파일의 존재 유무를 확인하고, 존재하지 않을 시에는 Web Data 파일을 확인한다. 이는 과거 Chromium 버전에서 계정 정보가 Web Data 파일에 저장되었기 때문에 Login Data 먼저 검사한 후 이 파일이 존재하지 않으면 과거 버전으로 여기고 Web Data 파일을 읽기 위한 것으로 보인다. 참고로 다른 Chromium 기반 웹 브라우저들 마다 경로가 조금씩 다를 수 있기 때문에 위의 경로 외에도 몇 개의 경로를 더 검사한다.

Chromium 기반 웹 브라우저들에 대한 계정 정보 경로

이렇게 찾은 Login Data 파일은 SQLite version 3 포맷의 데이터 파일로서, 해당 파일을 읽어 URL, ID 그리고 인코딩된 비밀번호를 찾는다. 찾은 비밀번호는 IE에서와 동일하게 CryptUnprotectData() API로 디코딩한다. 참고로 이러한 방식은 구글 크롬 버전 80 이후부터는 통하지 않는다. 해당 버전 이후 부터는 추가적으로 Local State 파일에 존재하는 마스터 키를 참조해야 하기 때문에 최신 버전의 크롬에서는 계정 정보 유출이 불가능하다.

a.3. Firefox

다음 웹 브라우저들은 Mozilla Firefox 기반의 웹 브라우저들이며, 대부분 유사하기 때문에 Firefox 기준으로 설명한다.
– FireFox, IceDragon, K-Meleon, SeaMonkey, Flock, BlackHawk, Lunascape, Cyberfox, PaleMoon, WaterFox

먼저 레지스트리를 참조하여 설치된 경로를 구한다. 이후 해당 경로에서 nss3.dll과 sqlite3.dll을 로드하고 뒤에서 사용될 함수들을 구한다. 다음으로 AppDataRoamingFirefoxprofiles.ini 파일을 통해 설정 파일의 경로를 구한다.

Firefox의 경우 초기 버전에서는 계정 정보가 signons.txt, signons2.txt, signons3.txt 파일에 저장되었다고 하며, 이후 버전 32.0 까지는 signons.sqlite 즉 sqlite 포맷의 파일에, 그리고 이후 부터는 json 포맷의 logins.json 파일에 저장되고 있다. Lokibot은 이러한 파일들 모두에 대해 정보 유출을 시도한다.

txt나 json 포맷의 경우 계정 정보가 일단은 문자열로 저장되어 있지만, signons.sqlite 파일에 저장된 버전의 경우 위에서 로드한 sqlite3.dll의 함수들을 이용해 SQL 쿼리문으로 계정 정보를 추출한다.

SQL 쿼리문

계정 정보의 경우 인코딩되어 저장되는데, base64 디코딩과 앞에서 로드한 nss3.dll (Network Security Service)의 함수들로 디코딩을 진행한다.

인코딩된 Firefox 계정 정보를 디코딩하는 루틴

b. 메일 클라이언트

– 정보 유출 대상: Outlook, Thunderbird, PostBox, FossaMail, Foxmail, PocoMail, IncrediMail, gmailNotifierPro, CheckMail, Softwarenetz, OperaMail, Becky, WinChips, yMail, Trojita, TrulyMail

Outlook의 경우 다음과 같은 레지스트리 키의 하위 키에서,
– HKCUSoftwareMicrosoftWindows NTCurrentVersionWindows Messaging SubsystemProfilesOutlook
– HKCUSoftwareMicrosoftOffice15.0OutlookProfilesOutlook
– HKCUSoftwareMicrosoftOffice16.0OutlookProfilesOutlook

다음과 같은 값들을 구한다.
– Email, SMTP Email Address, SMTP Server, SMTP User Name, SMTP User, POP3 Server, POP3 User Name, POP3 User, NNTP Email Address, NNTP User Name, NNTP Server, IMAP Server, IMAP User Name, IMAP User, HTTP User, HTTP Server URL, HTTPMail User Name, HTTPMail Server, POP3 Port, SMTP Port, IMAP Port

Thunderbird, PostBox, FossaMail의 경우 Mozilla 기반으로서, 경로명만 다를 뿐 위에서 언급한 Firefox와 동일한 방식이 사용된다.

c. FTP 클라이언트
– 정보 유출 대상 : FtpShell, Notepad++ Ftp, MyFtp, FTPBox, sherrod Ftp, FTP Now, NetSarang, EasyFtp, SFTP, AbleFTP, JaSFtp, Automize, CyberDuck, FTPInfo, LinasFtp, FileZilla, Staff Ftp, BlazeFtp, NetFile, GoFtp, AlFtp, DeluxeFTP, TotalCommand FTP, FtpGetter, WS_FTP, AnyClient, ExpanDrive, Steed, FlashFXP, NovaFTP, NetDrive, SmartFtp, FreshFtp, BitKinex, UltraFXP, OrdinFtp, Fling, ClassicFtp, WinFtp, WinSCP, 32BitFtp, FtpNavigator

d. 인스턴트 메신저
– 정보 유출 대상 : Pidgin

e. 파일 관리자

– 정보 유출 대상 : NexusFile, FullSync, Far, Syncovery, SecureFx

f. 패스워드 관리자

– 정보 유출 대상 : mSecure, keePass, Enpass, Robo Form, 1Password

g. 스티커 노트
– 정보 유출 대상 : StickyPad, To-Do DeskList, Stickies, NoteFly, NoteZilla, Microsoft Sticky Notes

h. 터미널 에뮬레이터
– 정보 유출 대상 : Bitvise, Putty, SuperPutty, Kitty, Winbox

i. 포커 게임
– 정보 유출 대상 : ull Tilt Poker, Poker Stars

j. VNC
– 정보 유출 대상 : TightVNC, RealVNC

사용자들은 의심스러운 메일을 받게 된다면 첨부 파일의 실행을 지양해야 한다. 또한 V3를 최신버전으로 업데이트하여 악성코드의 감염을 사전에 차단 할 수 있도록 신경써야 한다.

현재 자사 V3 제품에서는 해당 악성코드를 아래와 같이 진단 중이다.

[파일 진단]
– Trojan/Win32.Lokibot.R349444 (2020.08.28.04)

[행위 진단]
– Malware/MDP.Inject.M218

[관련 IOC 정보]

C2
– http://79.124.8[.]8/plesk-site-preview/benetaeu-group.com/http/79.124.8.8/wj1/Panel/fre.php

HASH
– d6e4167f31ade27c559b119adfbcfc88

0 0 vote
Article Rating
guest
0 Comments
Inline Feedbacks
View all comments