SYMBOLCOMMON_NAMEaka. SYNONYMS
win.xdspy (Back to overview)

XDSpy


According to ESET Research, XDDown is a primary malware component and is strictly a downloader. It persists on the system using the traditional Run key. It downloads additional plugins from the hardcoded C&C server using the HTTP protocol. The HTTP replies contain PE binaries encrypted with a hardcoded two-byte XOR key. Plugins include a module for reconnaissance on the affected system, crawling drives, file exfiltration, SSID gathering, and grabbing saved passwords.

References
2021-04-29ESET ResearchRobert Lipovsky, Matthieu Faou, Tony Anscombe, Andy Garth, Daniel Chromek
@techreport{lipovsky:20210429:eset:ff67b6c, author = {Robert Lipovsky and Matthieu Faou and Tony Anscombe and Andy Garth and Daniel Chromek}, title = {{ESET Industry Report on Government: Targeted but not alone}}, date = {2021-04-29}, institution = {ESET Research}, url = {https://www.welivesecurity.com/wp-content/uploads/2021/04/ESET_Industry_Report_Government.pdf}, language = {English}, urldate = {2021-05-03} } ESET Industry Report on Government: Targeted but not alone
Exaramel Crutch Exaramel HyperBro HyperSSL InvisiMole XDSpy
2020-10-02ESET ResearchMatthieu Faou
@online{faou:20201002:xdspy:c3724c7, author = {Matthieu Faou}, title = {{XDSpy: Stealing government secrets since 2011}}, date = {2020-10-02}, organization = {ESET Research}, url = {https://www.welivesecurity.com/2020/10/02/xdspy-stealing-government-secrets-since-2011/}, language = {English}, urldate = {2020-10-05} } XDSpy: Stealing government secrets since 2011
XDSpy XDSpy
2020-10-01Github (eset)Matthieu Faou
@online{faou:20201001:xdspy:33a6429, author = {Matthieu Faou}, title = {{XDSpy Indicators of Compromise}}, date = {2020-10-01}, organization = {Github (eset)}, url = {https://github.com/eset/malware-ioc/tree/master/xdspy/}, language = {English}, urldate = {2020-10-08} } XDSpy Indicators of Compromise
XDSpy XDSpy
2020-09-30Virus BulletinMatthieu Faou, Francis Labelle
@techreport{faou:20200930:xdspy:3189c15, author = {Matthieu Faou and Francis Labelle}, title = {{XDSPY: STEALING GOVERNMENT SECRETS SINCE 2011}}, date = {2020-09-30}, institution = {Virus Bulletin}, url = {https://vblocalhost.com/uploads/VB2020-Faou-Labelle.pdf}, language = {English}, urldate = {2020-10-08} } XDSPY: STEALING GOVERNMENT SECRETS SINCE 2011
XDSpy XDSpy
Yara Rules
[TLP:WHITE] win_xdspy_auto (20221125 | Detects win.xdspy.)
rule win_xdspy_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2022-11-21"
        version = "1"
        description = "Detects win.xdspy."
        info = "autogenerated rule brought to you by yara-signator"
        tool = "yara-signator v0.6.0"
        signator_config = "callsandjumps;datarefs;binvalue"
        malpedia_reference = "https://malpedia.caad.fkie.fraunhofer.de/details/win.xdspy"
        malpedia_rule_date = "20221118"
        malpedia_hash = "e0702e2e6d1d00da65c8a29a4ebacd0a4c59e1af"
        malpedia_version = "20221125"
        malpedia_license = "CC BY-SA 4.0"
        malpedia_sharing = "TLP:WHITE"

    /* DISCLAIMER
     * The strings used in this rule have been automatically selected from the
     * disassembly of memory dumps and unpacked files, using YARA-Signator.
     * The code and documentation is published here:
     * https://github.com/fxb-cocacoding/yara-signator
     * As Malpedia is used as data source, please note that for a given
     * number of families, only single samples are documented.
     * This likely impacts the degree of generalization these rules will offer.
     * Take the described generation method also into consideration when you
     * apply the rules in your use cases and assign them confidence levels.
     */


    strings:
        $sequence_0 = { 55 8dac24d0d0ffff b8b02f0000 e8???????? a1???????? 33c5 89852c2f0000 }
            // n = 7, score = 200
            //   55                   | push                ebp
            //   8dac24d0d0ffff       | lea                 ebp, [esp - 0x2f30]
            //   b8b02f0000           | mov                 eax, 0x2fb0
            //   e8????????           |                     
            //   a1????????           |                     
            //   33c5                 | xor                 eax, ebp
            //   89852c2f0000         | mov                 dword ptr [ebp + 0x2f2c], eax

        $sequence_1 = { 85c0 7e0f 8a5510 30940decd8ffff 41 3bc8 }
            // n = 6, score = 200
            //   85c0                 | test                eax, eax
            //   7e0f                 | jle                 0x11
            //   8a5510               | mov                 dl, byte ptr [ebp + 0x10]
            //   30940decd8ffff       | xor                 byte ptr [ebp + ecx - 0x2714], dl
            //   41                   | inc                 ecx
            //   3bc8                 | cmp                 ecx, eax

        $sequence_2 = { ff15???????? ff35???????? 56 e8???????? 59 59 8bc6 }
            // n = 7, score = 200
            //   ff15????????         |                     
            //   ff35????????         |                     
            //   56                   | push                esi
            //   e8????????           |                     
            //   59                   | pop                 ecx
            //   59                   | pop                 ecx
            //   8bc6                 | mov                 eax, esi

        $sequence_3 = { 8d4584 56 50 e8???????? 8b1d???????? 83c418 }
            // n = 6, score = 200
            //   8d4584               | lea                 eax, [ebp - 0x7c]
            //   56                   | push                esi
            //   50                   | push                eax
            //   e8????????           |                     
            //   8b1d????????         |                     
            //   83c418               | add                 esp, 0x18

        $sequence_4 = { 8bd0 83e01f c1fa05 8b1495804e4100 c1e006 8d440224 802080 }
            // n = 7, score = 200
            //   8bd0                 | mov                 edx, eax
            //   83e01f               | and                 eax, 0x1f
            //   c1fa05               | sar                 edx, 5
            //   8b1495804e4100       | mov                 edx, dword ptr [edx*4 + 0x414e80]
            //   c1e006               | shl                 eax, 6
            //   8d440224             | lea                 eax, [edx + eax + 0x24]
            //   802080               | and                 byte ptr [eax], 0x80

        $sequence_5 = { 56 ff74240c b800000080 56 }
            // n = 4, score = 200
            //   56                   | push                esi
            //   ff74240c             | push                dword ptr [esp + 0xc]
            //   b800000080           | mov                 eax, 0x80000000
            //   56                   | push                esi

        $sequence_6 = { 8b0c8d804e4100 c1e006 03c1 f6400401 7524 e8???????? }
            // n = 6, score = 200
            //   8b0c8d804e4100       | mov                 ecx, dword ptr [ecx*4 + 0x414e80]
            //   c1e006               | shl                 eax, 6
            //   03c1                 | add                 eax, ecx
            //   f6400401             | test                byte ptr [eax + 4], 1
            //   7524                 | jne                 0x26
            //   e8????????           |                     

        $sequence_7 = { 5d c3 8b04cd5c004100 5d }
            // n = 4, score = 200
            //   5d                   | pop                 ebp
            //   c3                   | ret                 
            //   8b04cd5c004100       | mov                 eax, dword ptr [ecx*8 + 0x41005c]
            //   5d                   | pop                 ebp

        $sequence_8 = { 488d8510050000 389d10050000 7413 660f1f840000000000 fe08 }
            // n = 5, score = 100
            //   488d8510050000       | cmp                 byte ptr [eax], bh
            //   389d10050000         | jne                 0xfffffff7
            //   7413                 | dec                 eax
            //   660f1f840000000000     | lea    eax, [ebp + 0x1490]
            //   fe08                 | inc                 eax

        $sequence_9 = { 488d4001 403838 75f5 488d8590140000 4038bd90140000 }
            // n = 5, score = 100
            //   488d4001             | movzx               eax, byte ptr [ecx + edi + 0x17a268]
            //   403838               | mov                 byte ptr [ebp + ecx + 0x28c0], al
            //   75f5                 | dec                 eax
            //   488d8590140000       | lea                 eax, [eax + 1]
            //   4038bd90140000       | inc                 eax

        $sequence_10 = { 660ff805???????? f30f7f05???????? 0f1f440000 420fb68429902b0200 }
            // n = 4, score = 100
            //   660ff805????????     |                     
            //   f30f7f05????????     |                     
            //   0f1f440000           | nop                 dword ptr [eax + eax]
            //   420fb68429902b0200     | inc    edx

        $sequence_11 = { 0fb68411f8a71700 88440c20 488d4901 84c0 75ec 488bcb }
            // n = 6, score = 100
            //   0fb68411f8a71700     | je                  0x15
            //   88440c20             | nop                 word ptr [eax + eax]
            //   488d4901             | dec                 byte ptr [eax]
            //   84c0                 | test                al, al
            //   75ec                 | jne                 0xffffffed
            //   488bcb               | dec                 eax

        $sequence_12 = { 75f5 488d8d90140000 ff15???????? 4885c0 7412 }
            // n = 5, score = 100
            //   75f5                 | dec                 eax
            //   488d8d90140000       | lea                 ecx, [ecx + 1]
            //   ff15????????         |                     
            //   4885c0               | test                al, al
            //   7412                 | jne                 0xfffffff4

        $sequence_13 = { 413a841960ab0100 7542 48ff4210 488b4210 4c394208 }
            // n = 5, score = 100
            //   413a841960ab0100     | lea                 eax, [ebp + 0x520]
            //   7542                 | inc                 eax
            //   48ff4210             | cmp                 byte ptr [ebp + 0x520], bh
            //   488b4210             | movzx               eax, byte ptr [ecx + edx + 0x17a7f8]
            //   4c394208             | mov                 byte ptr [esp + ecx + 0x20], al

        $sequence_14 = { 33c9 660f1f440000 420fb6843968a21700 88840dc0280000 }
            // n = 4, score = 100
            //   33c9                 | movzx               eax, byte ptr [ecx + ebp + 0x22b90]
            //   660f1f440000         | xor                 ecx, ecx
            //   420fb6843968a21700     | nop    word ptr [eax + eax]
            //   88840dc0280000       | inc                 edx

        $sequence_15 = { 84c0 75e9 488d8520050000 4038bd20050000 }
            // n = 4, score = 100
            //   84c0                 | cmp                 byte ptr [ebp + 0x1490], bh
            //   75e9                 | dec                 eax
            //   488d8520050000       | lea                 eax, [ebp + 0x510]
            //   4038bd20050000       | cmp                 byte ptr [ebp + 0x510], bl

    condition:
        7 of them and filesize < 3244032
}
Download all Yara Rules