SYMBOLCOMMON_NAMEaka. SYNONYMS
win.beardshell (Back to overview)

BEARDSHELL

Actor(s): APT28

VTCollection    

According to CERT-UA, this is a malware developed using the C++ programming language. It provides capabilities for downloading, decryption (chacha20-poly150) and performing PowerShell scripts, as well as uploading the command's results.

References
2026-03-10 ⋅ ESET Research ⋅ ESET Research
Sednit reloaded: Back in the trenches
BEARDSHELL GRUNT SLIMAGENT X-Agent XTunnel
2025-09-16 ⋅ Sekoia ⋅ Amaury G., Charles M., Sekoia TDR
APT28 Operation Phantom Net Voxel
BEARDSHELL GRUNT SLIMAGENT
2025-06-21 ⋅ ⋅ Cert-UA ⋅ Cert-UA
Cyberattacks UAC-0001 (APT28) in relation to public authorities using BEARDSHELL and COVENANT
BEARDSHELL GRUNT SLIMAGENT
Yara Rules
[TLP:WHITE] win_beardshell_auto (20260917 | Detects win.beardshell.)
rule win_beardshell_auto {

    meta:
        author = "Felix Bilstein - yara-signator at cocacoding dot com"
        date = "2026-09-17"
        version = "1"
        description = "Detects win.beardshell."
        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.beardshell"
        malpedia_rule_date = "20260916"
        malpedia_hash = "53a643781c18e08f4a50949af60172d837a0b6f6"
        malpedia_version = "20260917"
        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 = { 4889c1 488b45b8 4801c8 488945c0 488b8db8000000 e8???????? 488b55c0 }
            // n = 7, score = 100
            //   4889c1               | dec                 eax
            //   488b45b8             | lea                 ecx, [ebp + 0x18]
            //   4801c8               | cmp                 eax, 0
            //   488945c0             | jne                 0x57f
            //   488b8db8000000       | mov                 dword ptr [esp + 0x94], eax
            //   e8????????           |                     
            //   488b55c0             | cmp                 dword ptr [esp + 0x94], 0

        $sequence_1 = { e8???????? e9???????? 488b55a8 488b4db8 4c8b4530 e8???????? e9???????? }
            // n = 7, score = 100
            //   e8????????           |                     
            //   e9????????           |                     
            //   488b55a8             | jne                 0x333
            //   488b4db8             | dec                 eax
            //   4c8b4530             | lea                 ecx, [esp + 0x98]
            //   e8????????           |                     
            //   e9????????           |                     

        $sequence_2 = { e9???????? c784248400000082ffffff e9???????? 8b842488000000 0d00000001 89842488000000 8b84248c000000 }
            // n = 7, score = 100
            //   e9????????           |                     
            //   c784248400000082ffffff     | inc    esp
            //   e9????????           |                     
            //   8b842488000000       | mov                 dword ptr [eax + 8], esi
            //   0d00000001           | dec                 eax
            //   89842488000000       | lea                 ecx, [0x54306]
            //   8b84248c000000       | dec                 eax

        $sequence_3 = { 8b85bc000000 83f800 0f850e070000 488b95a8040000 488d8d10040000 48898db0000000 e8???????? }
            // n = 7, score = 100
            //   8b85bc000000         | dec                 eax
            //   83f800               | sub                 eax, dword ptr [ebp + 8]
            //   0f850e070000         | dec                 eax
            //   488b95a8040000       | mov                 dword ptr [ebp - 0x28], eax
            //   488d8d10040000       | dec                 eax
            //   48898db0000000       | mov                 eax, dword ptr [ebp - 0x28]
            //   e8????????           |                     

        $sequence_4 = { 8b4c244c 488b442470 4863c9 4801c8 4889442470 488b442458 4883c0ff }
            // n = 7, score = 100
            //   8b4c244c             | mov                 eax, edx
            //   488b442470           | dec                 eax
            //   4863c9               | add                 edx, ecx
            //   4801c8               | dec                 eax
            //   4889442470           | mov                 ecx, dword ptr [eax + 8]
            //   488b442458           | xor                 eax, eax
            //   4883c0ff             | inc                 ecx

        $sequence_5 = { e8???????? e9???????? 488d8d08050000 e8???????? 488d8de0040000 e8???????? }
            // n = 6, score = 100
            //   e8????????           |                     
            //   e9????????           |                     
            //   488d8d08050000       | mov                 dword ptr [esp + 0x60], eax
            //   e8????????           |                     
            //   488d8de0040000       | dec                 eax
            //   e8????????           |                     

        $sequence_6 = { e9???????? 8b542428 2b54242c 83c201 488d4c2448 e8???????? 89442424 }
            // n = 7, score = 100
            //   e9????????           |                     
            //   8b542428             | mov                 dword ptr [ebp - 0x38], ecx
            //   2b54242c             | dec                 eax
            //   83c201               | mov                 eax, dword ptr [ebp - 0x38]
            //   488d4c2448           | dec                 eax
            //   e8????????           |                     
            //   89442424             | mov                 dword ptr [ebp - 0x30], eax

        $sequence_7 = { e8???????? 488b4de8 e8???????? c6450f00 488d4d08 48894db0 e8???????? }
            // n = 7, score = 100
            //   e8????????           |                     
            //   488b4de8             | dec                 eax
            //   e8????????           |                     
            //   c6450f00             | mov                 dword ptr [esp + 0x40], 3
            //   488d4d08             | dec                 eax
            //   48894db0             | lea                 eax, [0xd8289]
            //   e8????????           |                     

        $sequence_8 = { 4c8b442428 4c8b4c2430 4889c2 488d8c2480000000 e8???????? 488d8c2480000000 e8???????? }
            // n = 7, score = 100
            //   4c8b442428           | jb                  0x1b5
            //   4c8b4c2430           | mov                 dword ptr [esp + 0xc], 4
            //   4889c2               | jb                  0x1c3
            //   488d8c2480000000     | mov                 dword ptr [esp + 0xc], 6
            //   e8????????           |                     
            //   488d8c2480000000     | dec                 eax
            //   e8????????           |                     

        $sequence_9 = { f20f11442420 f20f10442420 e8???????? 83f800 0f95c0 2401 0fb6c0 }
            // n = 7, score = 100
            //   f20f11442420         | dec                 eax
            //   f20f10442420         | mov                 dword ptr [esp + 0x20], eax
            //   e8????????           |                     
            //   83f800               | dec                 eax
            //   0f95c0               | mov                 eax, dword ptr [esp + 0x40]
            //   2401                 | dec                 eax
            //   0fb6c0               | mov                 eax, dword ptr [eax + 0x10]

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