VBScript を埋め込んだ RTF ファイルを用いたマルスパムキャンペーン

はじめに

2021年4月頃から、細工した RTF ファイルを使って WarzoneRAT、AgentTesla、SnakeKeylogger、NanoCore、Remcos への感染を狙うキャンペーンを確認しています。 このキャンペーンは、細工された RTF ファイルをメールに添付して配信しており、以下の特徴が見られます。

  • 医薬品会社やプラスチック容器メーカーなどの企業に成りすましたメールを使用し、請求書の確認を促す。
  • CVE-2017-8570 の脆弱性を利用して、マルウェアに感染させる。
  • 1 つのメールに複数の RTF ファイルが添付されていることがある。
  • ダウンロードされるマルウェアの設定値が使い回されている。

本ブログでは、RTF ファイルの特徴とダウンロードされるファイルについて紹介します。

メールに添付された RTF ファイル

メールに「Invoice # 406496.doc」のような .doc の拡張子を持つファイルが添付されています。 このファイルを CVE-2017-8570 の脆弱性を持つ Word で開くと、VBScript および PowerShell が実行され、マルウェアがダウンロード・実行されます。

/posts/2021-07/rtf.png

図1. RTFの外観

RTF ファイルをテキストエディタで開くと、図2 のようなデータが確認できます。 17 行目以降の 16 進数のデータは VBScript であり、マルウェアのダウンロードに使用されます。

/posts/2021-07/rtf_content.png

図2. RTFの内容

RTF ファイルに埋め込まれた VBScript は、以下の CyberChef レシピで抽出することができます。抽出したスクリプトの一部を図 3 と図 4 に示します。

[
  { "op": "Regular expression",
    "args": ["User defined", "[0-9a-f]{30,}", true, true, false, false, false, false, "List matches"] },
  { "op": "From Hex",
    "args": ["Auto"] },
  { "op": "Regular expression",
    "args": ["User defined", "<script language = 'vbs.*'>.*</script>", true, true, true, false, false, false, "List matches"] },
  { "op": "Syntax highlighter",
    "args": ["vbscript"] }
]

図3 のスクリプトの 2、3 行目を確認すると、ダウンロード URL と保存されるファイル名が分かります。

/posts/2021-07/download_url_filename.png

図3. Base64 でエンコードされた URL とファイル名

これらは、それぞれ Base64 でエンコードされており、以下のように変換されます。

  • ダウンロード URL

    $ echo aHR0UDovL2xlZnRlcmlza2tva2tpc2tpa2luZXcueWRucy5ldS9taWNyb0YuZXhl | base64 -d
    httP://lefteriskkokkiskikinew.ydns.eu/microF.exe
    
  • 保存されるファイル名

    $ echo bWljcm9GLmV4ZQ== | base64 -d
    microF.exe
    

ファイルのダウンロードは、図4 のように PowerShell を用いて行われます。

  1. System.Net.WebClient を用いて、ファイルをダウンロードし、%appdata%\microF.exe として保存する。
  2. Start-Process を用いて、%appdata%\microF.exe を実行する。
/posts/2021-07/download_file.png

図4. ファイルのダウンロード処理

ダウンロードされるファイルの特徴

以下の3つの特徴についてまとめます。

  • 特徴1: ダウンロード URL のファイル名に同じ傾向がある。
  • 特徴2: 5 種類のマルウェアが使用される。
  • 特徴3: マルウェアの設定値は、同一の値が使い回されている。

特徴1: ダウンロード URL の傾向

ドメイン名は、何度か変更されていますが、使用されるファイル名には、micro[A-F].exe[no]?putty.exe のような傾向が見られます。

hxxp[://]adfddws[.]ftp[.]sh/nputty[.]exe
hxxp[://]adfddws[.]ftp[.]sh/oputty[.]exe
hxxp[://]hutyrtit[.]ydns[.]eu/microA[.]exe
hxxp[://]hutyrtit[.]ydns[.]eu/microB[.]exe
hxxp[://]hutyrtit[.]ydns[.]eu/microC[.]exe
hxxp[://]hutyrtit[.]ydns[.]eu/microF[.]exe
hxxp[://]hutyrtit[.]ydns[.]eu/putty[.]exe
hxxp[://]lefteriskkokkiskikinew[.]ydns[.]eu/microD[.]exe
hxxp[://]lefteriskkokkiskikinew[.]ydns[.]eu/microF[.]exe
hxxp[://]lefteriskkokkiskikinew[.]ydns[.]eu/putty[.]exe
hxxp[://]newhosteeeee[.]ydns[.]eu/microC[.]exe
hxxp[://]newhosteeeee[.]ydns[.]eu/putty[.]exe

特徴2: ダウンロードされるマルウェアの種類

以下のマルウェアが実際にダウンロードされることを確認しています。

  • WarzoneRAT(別名: AveMariaRAT)
  • AgentTesla
  • SnakeKeylogger
  • Remcos
  • NanoCore

また、同じ URL であってもダウンロードするタイミングによって、別の種類のマルウェアがダウンロードされることがあります。

参考: https://urlhaus.abuse.ch/url/1491590/

特徴3: 設定値の使い回し

多くの RAT や Stealer には、C2サーバやマルウェアの動作指定など、ユーザが自由に設定できる値や実行ファイル生成時に自動的に割り当てられる識別子など(以下、設定値)があります。 このような設定値を抽出してみたところ、ダウンロードされるファイルのハッシュ値がすべて異なっていたにもかかわらず、同一の値が使用されていました。

WarzoneRAT は、すべて共通の設定値が使用されていました。

  • 抽出した WarzoneRAT の設定値

    {
        "Hostname": "sdafsdffssffs.ydns.eu",
        "Port": 6703,
        "Install": true,
        "InstallName": "images.exe",
        "Startup": true,
        "StartupName": "Images",
        "OfflineLogs": true,
        "Persistence_Watchdog": true,
        "RandomString": "8GBVZ9NDZU"
    }
    

また、AgentTesla、SnakeKeylogger は、共に Telegram を使用しており、同一の Bot Token、Chat ID を使用していました。

  • 抽出した AgentTesla の設定値

    {
        "telegram_url": "https://api.telegram.org/bot1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc/sendDocument",
        "telegram_chat_id": "1407381447"
    }
    
  • 抽出した SnakeKeylogger の設定値

    {
        "telegram_bot_token": "1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc",
        "telegram_chat_id": "1407381447"
    }
    

おわりに

2021年4月頃から続いているマルスパムキャンペーンについて紹介しました。VBScript を埋め込んだ RTF ファイルを用いて、マルウェアへ感染させます。 毎回ハッシュ値が異なるものの最終的にダウンロードされるマルウェアの設定値が同一であることから、同じ攻撃者によるキャンペーンだと考えています。 今回使用された VBScript は、定期的に更新されており、難読化部分が細かく修正されています。現状ダウンロード処理などに大きな変更はありませんが、今後変化していく可能性があります。

付録

RTF ファイル一覧

  • 65d28c55878b2272953c5be2fce4b12e064df66bc9759bf6d05f160980d4b1f3

    • ダウンロードされるファイル
      • hxxp[://]hutyrtit[.]ydns[.]eu/microF[.]exe
      • e81c6b84f83b9ac8233102f31e21bfeeab4ffaa5aa4c02987ce910de908a83ed
      • WarzoneRAT の設定値
        {
            "Hostname": "sdafsdffssffs.ydns.eu",
            "Port": 6703,
            "Install": true,
            "InstallName": "images.exe",
            "Startup": true,
            "StartupName": "Images",
            "OfflineLogs": true,
            "Persistence_Watchdog": true,
            "RandomString": "8GBVZ9NDZU"
        }
        
  • a43609e845ce5ff1060f865d840b85ebf048a96117a3b7b79535779344500fc5

    • ダウンロードされるファイル
      • hxxp[://]hutyrtit[.]ydns[.]eu/microA[.]exe
      • 95d7c99af4ea07ed847623e0cb78145ac3e462b8fc294a62258d84cae3fe8af1
      • Remcos の設定値
        {
            "Version": "3",
            "License": "96BE68D123FB3036139C464E225313CA",
            "Connection": {
                "Connection": [
                    "fieldsdegreenf.duckdns.org:6553:1",
                    "aaeeerbbbeee.duckdns.org:6553:1",
                    "sdegreenfieldsdeeenf.duckdns.org:6553:1"
                ],
                "AssignedName": "chrome",
                "ConnectionInterval": 1,
                "ConnectionDelay": 0
            },
            "Installation": {
                "Install": true,
                "InstallParentDir": "AppData",
                "InstallFolder": "Remcos",
                "InstallFileName": "remcos.exe",
                "StartupValueName": "Remcos",
                "CurrentUserRun": true,
                "LocalMachineRun": false,
                "ExplorerRun": false,
                "UserinitStartup": "Not supported",
                "ShellStartup": "Not Supported",
                "HideInstalledFile": false,
                "MeltOriginal": false,
                "Mutex": "Remcos-09G4NK",
                "BypassUAC": false,
                "DisableUAC": false
            },
            "Stealth": {
                "VisibilityMode": "Invisible",
                "Injection": "No",
                "InjectionCustomProcess": "0",
                "DetectVMware": false,
                "DetectVirtualBox": false,
                "DetectSandboxie": false,
                "DetectDebuggers": false,
                "DetectProcessMonitor": false,
                "DetectProcessExplorer": false,
                "AnalysisReaction": "Close"
            },
            "Keylogger": {
                "OfflineKeylogger": "EnabledLogEverything",
                "FilterKeywords": [
                    ""
                ],
                "KeylogParentDir": "AppData",
                "KeylogFolder": "remcos",
                "KeylogFileName": "logs.dat",
                "CryptLog": false,
                "HideLog": false,
                "LogFileLimit": 20000
            },
            "ForceRelogin": {
                "Enabled": false,
                "Delay": 0,
                "OnlyOnFirstLaunch": true
            },
            "ScreenLogger": {
                "ScreenshotOnTimeInterval": false,
                "ScreenshotOnWindow": false,
                "SaveEncrypted": false,
                "ScreenshotFrequency": 10,
                "ScreenshotsParentDir": "AppData",
                "ScreenshotsFolder": "Screenshots",
                "WindowTitles": [
                    "notepad",
                    "solitaire",
                    ""
                ],
                "WindowCapFrequencyMinutes": 0,
                "WindowCapFrequencySeconds": 5
            },
            "AudioCapture": {
                "OfflineAudioCapture": false,
                "FileLengthInMinutes": 5,
                "AudioFilesParentDir": "AppData",
                "AudioFilesFolder": "MicRecords"
            },
            "TLS": {
                "certificate": "MIH+MIGmoAMCAQICEDhkT/gnP1K1ERb54ruiaHwwCgYIKoZIzj0EAwIwADAiGA8xOTcwMDEwMTAwMDAwMFoYDzIwOTAxMjMxMDAwMDAwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEM8ak7KmTrSVwba6MZu4lg4aWl240EG7PaaaqSjWdiXVWWhqj4LUBzIiBsCsnnu0oeIbHETy2v7Tp0/N5MqBLQjAKBggqhkjOPQQDAgNHADBEAiAa2WSJN1/0q8mXrm/0cWcaJ51V9STTfh+lDKAiuHKi8QIgOgFbWZJwABIumAMOmjZF51hx6XKp95TdMZpoUtLcWQs=",
                "ec_private_key": "MHcCAQEEICLj0pMkgEmzxcSyM0VhRRxME2kI6SdqoQWybR53d001oAoGCCqGSM49AwEHoUQDQgAEM8ak7KmTrSVwba6MZu4lg4aWl240EG7PaaaqSjWdiXVWWhqj4LUBzIiBsCsnnu0oeIbHETy2v7Tp0/N5MqBLQg=="
            }
        }
        
  • aa153bc9d5f755122d24ae91887331db60bcd8bab6290f576f50785a7a36c1bb

    • ダウンロードされるファイル
      • hxxp[://]hutyrtit[.]ydns[.]eu/microC[.]exe
      • 404 エラーが返ってきていたため、ダウンロードできなかった。
  • 6644e083e66223e8ea86c269b3cd998e7d40bea65efa1033e42c0c7159fb4e1f

    • ダウンロードされるファイル
      • hxxp[://]hutyrtit[.]ydns[.]eu/microD[.]exe
      • AgentTesla の設定値
        {
            "telegram_url": "https://api.telegram.org/bot1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc/sendDocument",
            "telegram_chat_id": "1407381447"
        }
        
  • ed60103a8a1837ed4691670a5307539ec832cf3ad076d6afe3bbf06c84ad4511

    • ダウンロードされるファイル
      • hxxp[://]adfddws[.]ftp[.]sh/nputty[.]exe
      • 871e94eda4712d5e5549cdb71e84f794baa7fe2b52ba191ecbbcd576549fd94d
      • NanoCore の設定値
        {
            "SurveillanceEx Plugin": "Binary data (100352 bytes)",
            "KeyboardLogging": true,
            "BuildTime": "2021-07-21 22:06:49.542088",
            "Version": "1.2.2.0",
            "Mutex": "0bb207a5-6f92-4ff1-abb5-35e0dc25fe5d",
            "DefaultGroup": "AUGUST",
            "PrimaryConnectionHost": "asweee.jumpingcrab.com",
            "BackupConnectionHost": "tryweaswweee.ydns.eu",
            "ConnectionPort": 8234,
            "RunOnStartup": false,
            "RequestElevation": false,
            "BypassUserAccountControl": true,
            "BypassUserAccountControlData": "Binary data (1278 bytes)",
            "ClearZoneIdentifier": true,
            "ClearAccessControl": false,
            "SetCriticalProcess": false,
            "PreventSystemSleep": true,
            "ActivateAwayMode": false,
            "EnableDebugMode": false,
            "RunDelay": 0,
            "ConnectDelay": 4000,
            "RestartDelay": 5000,
            "TimeoutInterval": 5000,
            "KeepAliveTimeout": 30000,
            "MutexTimeout": 5000,
            "LanTimeout": 2500,
            "WanTimeout": 8000,
            "BufferSize": 65535,
            "MaxPacketSize": 10485760,
            "GCThreshold": 10485760,
            "UseCustomDnsServer": true,
            "PrimaryDnsServer": "asweee.jumpingcrab.com",
            "BackupDnsServer": "tryweaswweee.ydns.eu"
        }
        
  • 88283b3c40bd8916565902ea6b9ee16edd41ef1a5f539329588945c48cdcb035

    • ダウンロードされるファイル
      • hxxp[://]adfddws[.]ftp[.]sh/oputty[.]exe
      • 2ccaa6433590b5f135f49de557167dd9bae9e2a80f5550a6379da77e336a0296
      • AgentTesla の設定値
        {
            "telegram_url": "https://api.telegram.org/bot1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc/sendDocument",
            "telegram_chat_id": "1407381447"
        }
        
  • 455af9180f83ac2ba91fd77b48592679cdaf79c7d70a2251ab19d7edd15338f7

    • ダウンロードされるファイル
      • hxxp[://]hutyrtit[.]ydns[.]eu/microB[.]exe
      • 4b6d2d4d20ed03f56ffffc9c92549c99b7bd4494c7335790e9cae0e0b5824193
      • SnakeKeylogger の設定値
        {
            "telegram_bot_token": "1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc",
            "telegram_chat_id": "1407381447"
        }
        
  • f0986ee9e586c78c3ad2ebcb511747986c4f513a7213760703c4367825d0c1b8

    • ダウンロードされるファイル
      • hxxp[://]hutyrtit[.]ydns[.]eu/putty[.]exe
      • 9ff689a1495abcd639295948f214b6643052b22ff0be692d585ee07ddbf0209b
      • WarzoneRAT の設定値
        {
            "Hostname": "sdafsdffssffs.ydns.eu",
            "Port": 6703,
            "Install": true,
            "InstallName": "images.exe",
            "Startup": true,
            "StartupName": "Images",
            "OfflineLogs": true,
            "Persistence_Watchdog": true,
            "RandomString": "8GBVZ9NDZU"
        }
        
  • 7a15c8c287234ab375013a4e069c28db39d516bf14518e54e5a9fb7e0c0c224b

    • ダウンロードされるファイル
      • hxxp[://]newhosteeeee[.]ydns[.]eu/microC[.]exe
      • 5602a38dd672c7daf709a315c7eb0169557193112daed1885a2fd7718e3ebcc8
      • SnakeKeylogger の設定値
        {
            "telegram_bot_token": "1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc",
            "telegram_chat_id": "1407381447"
        }
        
  • ecef57afce8a7d5eed2080401da0ce36d67c2493cf1385b432a6bf0a65f6e521

    • ダウンロードされるファイル
      • hxxp[://]newhosteeeee[.]ydns[.]eu/putty[.]exe
      • db531d6e969f16a9318224e16a18f3314fa75d0eaad90fc9a805f10d098d67c9
      • WarzoneRAT の設定値
        {
            "Hostname": "sdafsdffssffs.ydns.eu",
            "Port": 6703,
            "Install": true,
            "InstallName": "images.exe",
            "Startup": true,
            "StartupName": "Images",
            "OfflineLogs": true,
            "Persistence_Watchdog": true,
            "RandomString": "8GBVZ9NDZU"
        }
        
  • c49178ec8a1c9fb2d8f449e5a7a520f230025ac0f8e597fd41fc48b380227430

    • ダウンロードされるファイル
      • hxxp[://]lefteriskkokkiskikinew[.]ydns[.]eu/microD[.]exe
      • AgentTesla の設定値
        {
            "telegram_url": "https://api.telegram.org/bot1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc/sendDocument",
            "telegram_chat_id": "1407381447"
        }
        
  • f955c5a1d7cac9999cb1af1057923e8a99291699966f91a763db267a4771f5f7

    • ダウンロードされるファイル
      • hxxp[://]lefteriskkokkiskikinew[.]ydns[.]eu/microF[.]exe
      • 9e3bcb513af35cefa69e5194f7c1a7ded5e53ea1a26c0fb81ccac9d7998fe2b2
      • SnakeKeylogger の設定値
        {
            "telegram_bot_token": "1846829589:AAHSsEDTKvDOQ17YrNRY5_FXv5z4mpfGRIc",
            "telegram_chat_id": "1407381447"
        }
        
  • a9457644d3fc78f67028d464fde1bd0d943ba75db2714a85009afa1055463751

    • ダウンロードされるファイル
      • hxxp[://]lefteriskkokkiskikinew[.]ydns[.]eu/putty[.]exe
      • 46d13a3d0e1e8e2f86e587cdd040ef35123fc54d49ee4daaceacfde34d572046
      • WarzoneRAT の設定値
        {
            "Hostname": "sdafsdffssffs.ydns.eu",
            "Port": 6703,
            "Install": true,
            "InstallName": "images.exe",
            "Startup": true,
            "StartupName": "Images",
            "OfflineLogs": true,
            "Persistence_Watchdog": true,
            "RandomString": "8GBVZ9NDZU"
        }