Lokibot はインフォスティーラー型マルウェアとして、Web ブラウザ、メールクライアント、FTP クライアント等、感染 PC にインストールされている様々なプログラムからアカウント情報を奪取する機能を持っている。数年前から拡散し続けているマルウェアだが、最近でもTop 5に毎週含まれている。
Lokibot は最近の AgentTesla、Formbook、AveMaria 等のマルウェアと同様、ほとんどがスパムメールを通して拡散している。また、診断を回避するために「.NET」アウトラインのパッカーによりパッキングされて拡散している。
最近拡散に使用されたスパムメールは典型的な発注書(P.O.– Purchase Order)に関する内容を含んでおり、添付ファイルの実行へ誘導する。
添付ファイルを確認してみると、cab フォーマットの圧縮ファイルが存在し、この圧縮ファイルを解凍すると exe ファイルが抽出される。これが Lokibot マルウェアである。ユーザーが添付ファイルを解凍したあと、発注書ファイルと誤認識して開いてしまうと、Lokibot マルウェアが実行される。
1.動作フロー
Lokibot は実行されると、下記で整理するように、様々なアプリケーションのアカウント情報を抽出し、C&C サーバーに取得したアカウント情報を流出させる。以降、\AppData\Roaming\[ランダム]\[ランダム].exe パスにファイルをコピーしたあと、システムおよび隠し属性の付与、そして Run Key の登録を試みる。
最後に、C&C サーバーと定期的に通信を行い、コマンドを実行する。しかし、一般的な RAT やバックドアマルウェアとは異なり、追加のマルウェア(exeまたはdll形式)のダウンロードおよび実行、終了、削除、情報流出等、簡単なコマンドを除いて、その他の機能は提供されていない。

2.Lokibot クラック版
参考に、最近収集されているサンプルは2017年のブログで紹介したクラック版で生成されたファイルである。すなわち、マルウェアの製作者が作成して販売する公式ビルダーではなく、何者かがクラックして配布したバージョンのビルダーで生成されたバイナリであるが、最近でもこのビルダーで製作された lokibot が多数収集されている。参考に、マルウェアのビルダーにもこのようにクラック版が存在している理由は、他の有料ソフトウェアに対するクラック版が存在していることと同じ理由だと思われる。
一般的にクラック版は本来のバージョンと大きな違いがあってはならないが、このバージョンの場合は Side Effect が存在する。まず、Lokibot は C&C サーバーのアドレスをエンコードしてこれを保有し、後に CryptDecrypt() 関数を利用して復号化する。このバージョンで生成されたバイナリはすべて以下のような同一のオリジナル C&C サーバーのアドレスが復号化される。

しかし、この後パッチされた、すなわち追加されたルーティンを実行して、新たな C&C サーバーを取得する。パッチされたルーティンは .x セクションに存在し、そのコードのすぐ後ろにあるデータを0xFFキーを利用して XOR デコード処理して取得したアドレスを、オリジナル C&C サーバーのアドレスに上書きする。

問題は、C&C サーバーアドレスのURL以外にレジストリ Run Key (Software\Microsoft\Windows\CurrentVersion\Run) パスも同じルーティンを実行するが、これによって CryptDecrypt() 関数により復号化された Run key 文字列が再度エンコードされた C&C アドレスに変更され、その後 Run Key 登録 API 関数の呼び出しに失敗することである。すなわち、このクラック版で生成された Lokibot は Run Key 登録に失敗し、再起動後は実行が不可能である。

3.情報流出対象
Lokibot は他のインフォスティーラー型マルウェアと比較した場合も、その対象がかなり広い方である。ここでは、その対象となるプログラムを整理し、いくつかの対象に関しては簡単に説明していく。参考として、かなり前に製作されたマルウェアであるため、最新バージョンのプログラムでは情報流出機能が正常に動作しない場合もあり、セキュリティ設定で情報が暗号化されている場合は、流出しても攻撃者は使用することができないと思われる。
すなわち、使用するプログラムを最新バージョンにアップデートし、セキュリティ関連の設定をしておくだけでも、一定の部分の情報流出を防ぐことができる。

以下で詳細に説明していない大半のプログラムは、特定パスに存在するテキスト形式の設定ファイル、または特定レジストリに存在するデータをそのまま読み込んで C&C サーバーに送信する機能を持つ。
a. Web ブラウザ
– 情報流出対象: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 を保存していた。
– HKCU\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
このキーに含まれているレジストリ名(Value)は Hash 形式の URL であり、この名前のデータ(Data)は当該 URL に対するエンコードされた形式のアカウント情報である。問題は、このレジストリキーだけではアカウント情報が保存された Web サイトの URL とその URL のアカウント情報を確認できないことである。
そこで、Lokibot は FindFirstUrlCacheEntryW()、FindNextUrlCacheEntry() を利用してURL Cache を入手し、レジストリキー HKCY\Software\Microsoft\Internet Explorer\TypedURLs を参照してユーザーが入力した URL を手に入れる。すなわち、アカウント情報が保存されているということは、URL のキャッシュやユーザーが入力したログに当該 URL が保存されていると判断できるため、できる限りこのような値を取得しようとするのである。
以降、このようにして入手した URL に対してそれぞれ Hash を求めたあと、前の Storage2 キーで求めたレジストリ名を比較する。マッチする URL を発見した場合、CryptUnprotectData()API を呼び出してその URL に対するアカウント情報を取得するが、この API 引数には Storage2 キー内部に存在するレジストリデータだけでなく、当該 URL も必要である。これによって、URL およびその URL に対応するアカウント情報を取得できる。
Lokibot は Internet Explorer の過去バージョン以外に、最新バージョンも対象にしてアカウント情報の取得を試みる。Windows 8以降のバージョンでは、アカウント情報は Vault という Windows システムによって保存されるが、これは過去バージョンの Edge Web ブラウザも同様である。Vault に保存されたアカウント情報を取得するために vaultcli.dll をロードしたあと、VaultEnumerateValuts()、VaultOpenVault()、VaultEnumerateItems()、VaultGetItem() のような API を利用して取得する。
a.2. Chromium基盤の Web ブラウザ
以下の Web ブラウザは Chromium 基板の Web ブラウザであり、大半が類似しているため 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
まず、\AppData\Local\Google\Chrome\User Data\Default\Login Data ファイルの存在有無を確認し、存在しない場合は Web Data ファイルを確認する。これは過去の Chromium バージョンではアカウント情報が Web Data ファイルに保存されていたためである。 Login Data を先にチェックしたあと、このファイルが存在しない場合は過去バージョンとみなして、Web Data ファイルを読み込むためであると見られる。参考に、Chromium 基盤の Web ブラウザごとにパスが若干異なる場合があるため、上記のパス以外にもいくつかのパスを更にチェックする。

このようにして見つけた Login Data ファイルは SQLite version 3 フォーマットのデータファイルであり、このファイルを読み込んで URL、ID、エンコードされたパスワードを探す。見つけたパスワードは IE と同様に、CryptUnprotectData()API でデコードする。参考に、このような方式は Google Chrome バージョン80以降からは通用しない。当該バージョン以降からは追加で Local State ファイルに存在するマスターキーを参照する必要があるため、最新バージョンの Chrome ではアカウント情報の流出が不可能である。
a.3. Firefox
以下の Web ブラウザは Mozilla Firefox 基盤の Web ブラウザであり、大半が類似しているため、Firefox を基準に説明していく。
– FireFox、IceDragon、K-Meleon、SeaMonkey、Flock、BlackHawk、Lunascape、Cyberfox、PaleMoon、WaterFox
まず、レジストリを参照してインストールされているパスを入手する。その後、当該パスで nss3.dll と sqlite3.dll をロードし、バックグラウンドで使用される関数を求める。次に、\AppData\Roaming\Firefox\profiles.ini ファイルを通して設定ファイルのパスを入手する。
Firefox の場合、初期バージョンではアカウント情報が signons.txt、signons2.txt、signons3.txt ファイルに保存されていた。それ以降のバージョンから32.0まではsignons.sqlite、すなわち sqlite フォーマットのファイルに、そして、それ以降は json フォーマットの logins.json ファイルに保存されている。Lokibot は、これらのファイルすべてに対して情報流出を試みる。
Txt や json フォーマットの場合、いったんはアカウント情報が文字列として保存されているが、signons.sqlite ファイルに保存されているバージョンの場合は、上記でロードしたsqlite3.dll の関数を利用してSQLクエリ文によりアカウント情報を抽出する。

アカウント情報の場合はエンコードして保存されるが、base64デコードと前にロードした nss3.dll (Network Security Service)の関数によってこれにデコードを実行する。

b. メールクライアント
– 情報流出対象:Outlook、Thunderbird、PostBox、FossaMail、Foxmail、PocoMail、IncrediMail、gmailNotifierPro、CheckMail、Softwarenetz、OperaMail、Becky、WinChips、yMail、Trojita、TrulyMail
Outlook の場合、以下のようなレジストリキーの下位キーで、
– HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook
– HKCU\Software\Microsoft\Office\15.0\Outlook\Profiles\Outlook
– HKCU\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook
以下のような値を求める。
– 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
Categories: マルウェアの情報