{"id":8322,"date":"2024-07-24T12:07:19","date_gmt":"2024-07-24T12:07:19","guid":{"rendered":"\/cybersecurity-blog\/?p=8322"},"modified":"2024-07-25T11:49:24","modified_gmt":"2024-07-25T11:49:24","slug":"brute-ratel-c4-analysis","status":"publish","type":"post","link":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/","title":{"rendered":"Brute Ratel C4 Badger Used to Load Latrodectus"},"content":{"rendered":"\n<p><em>Editor&#8217;s note: The current article is authored by Mohamed Talaat, a cybersecurity researcher and malware analyst. You can find Mohamed on <a href=\"https:\/\/x.com\/BlueEye46572843\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">X<\/a> and <a href=\"https:\/\/www.linkedin.com\/in\/mohamed-talaat-049349198\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">LinkedIn<\/a>.<\/em><\/p>\n\n\n\n<p>Brute Ratel C4 (BRC4) is a customized, commercial command and control (C2) framework that was first introduced in December 2020. Its primary use is for conducting adversarial attack simulation, red-team engagements, and penetration tests.<\/p>\n\n\n\n<p>What sets BRC4 payloads apart from other C2 frameworks like <a href=\"https:\/\/any.run\/malware-trends\/cobaltstrike\" target=\"_blank\" rel=\"noreferrer noopener\">Cobalt Strike<\/a> or Metasploit is their ability to effectively bypass and avoid endpoint detection and response (EDR) solutions. This is due to the extensive research conducted by the developer on these software solutions.<\/p>\n\n\n\n<p>As you read our investigation and analysis of the BRC4 badger that was spotted loading <a href=\"https:\/\/any.run\/malware-trends\/latrodectus\" target=\"_blank\" rel=\"noreferrer noopener\">Latrodectus<\/a> loader into memory after a successful connection to the BRC4 C2 servers, the effectiveness of BRC4 will become clear.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What\u2019s Latrodectus?&nbsp;&nbsp;<\/h3>\n\n\n\n<p>Latrodectus is a recently discovered malware loader that is suspected to be a potential successor to the IcedID malware. Security researchers believe that Latrodectus was developed by the same threat actor group responsible for <a href=\"https:\/\/any.run\/malware-trends\/icedid\" target=\"_blank\" rel=\"noreferrer noopener\">IcedID<\/a>, due to similarities in development and behavior. Like other malware loaders, Latrodectus is used to deploy additional, more sophisticated malware onto compromised systems.<\/p>\n\n\n\n<p>Latrodectus was one of the malware targeted in Operation Endgame, a law enforcement operation aimed at disrupting cybercriminal activities. However, it seems that the developers behind Latrodectus were able to quickly recover from the temporary disruption caused by the operation and rebuild their infrastructure.<\/p>\n\n\n\n<p>Latrodectus has been observed to be delivered as part of a multi-stage attack that typically starts with a phishing email containing a malicious Java script or PDF file used to trick victims into installing a malicious MSI file. This MSI file contains an older version of the BRC4 badger, which is the focus of our analysis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Initial triage&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>While looking for new malware to investigate, we found an <a href=\"https:\/\/app.any.run\/tasks\/60839cf7-45fc-4297-a973-97998ce873b1\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=brute_ratel_analysis&amp;utm_term=240724&amp;utm_content=linktoservice\/\" target=\"_blank\" rel=\"noreferrer noopener\">interesting sample<\/a>&nbsp;submitted to <strong><a href=\"https:\/\/any.run\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=brute_ratel_analysis&amp;utm_term=240724&amp;utm_content=linktolanding\/\" target=\"_blank\" rel=\"noreferrer noopener\">ANY.RUN<\/a><\/strong>&#8216;s <em><a href=\"https:\/\/app.any.run\/submissions\/?utm_source=anyrunblog&amp;utm_medium=article&amp;utm_campaign=brute_ratel_analysis&amp;utm_term=240724&amp;utm_content=linktopublicsubmissions\/\" target=\"_blank\" rel=\"noreferrer noopener\">Public Submissions<\/a><\/em> database.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"989\" height=\"54\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1.png\" alt=\"\" class=\"wp-image-8323\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1.png 989w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1-300x16.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1-768x42.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1-370x20.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1-270x15.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image1-1-740x40.png 740w\" sizes=\"(max-width: 989px) 100vw, 989px\" \/><figcaption class=\"wp-element-caption\">The sample in question<\/figcaption><\/figure><\/div>\n\n\n<p>It was an <strong>MSI<\/strong> file, which matched the description above of how the malware is delivered as part of a multi-stage attack that involves a malicious <strong>MSI<\/strong>.<\/p>\n\n\n\n<!-- Highlight Block HTML START -->\n<div class=\"window\">\n  <div class=\"window-header\">\n    <div class=\"pill\">About MSI files<\/div>\n  <\/div>\n  <div class=\"window-body\">\n    <p>MSI files are a container file format that utilize the COM structure technology, allowing them to store necessary files for minimal user action. This makes them similar to self-extracting ZIP files, as they can unfold and start executing in a pre-defined order.<\/p>\n<p>Additionally, the installation procedure for MSI files allows execution with elevated privileges (NT AUTHORITY\\SYSTEM), which means that unprivileged users can execute their malware as SYSTEM. This makes MSI files an attractive deployment method for threat actors.<\/p>\n  <\/div>\n<\/div>\n<!-- Highlight Block HTML END -->\n\n\n<!-- Highlight Block CSS START -->\n<style>\n  .window {\nbackground: rgba(32, 168, 241, 0.1);\nborder: 1px solid rgba(75, 174, 227, 0.32);\n\n    border-radius: 4px;\n    margin: 20px auto 50px auto;\n    padding: 20px 40px;\n    line-height: 2rem;\n  }\n\n  .window-header {\n    display: flex;\n    justify-content: center;\n    margin-bottom: 20px;\n  }\n\n  .pill {\n    background-color: #fff;\n    border-radius: 20px;\n    color: #333;\n    font-weight: bold;\n    padding: 8px 32px;\nborder: 1px solid rgba(75, 174, 227, 0.32);\n  }\n\n  @media (max-width: 480px) {\n    .window {\n      padding: 10px;\n    }\n    \n    .pill {\n      font-size: 14px;\n      padding: 6px 12px;\n    }\n  }\n<\/style>\n<!-- Highlight Block CSS END -->\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"313\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image3-2.png\" alt=\"\" class=\"wp-image-8325\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image3-2.png 684w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image3-2-300x137.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image3-2-370x169.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image3-2-270x124.png 270w\" sizes=\"(max-width: 684px) 100vw, 684px\" \/><figcaption class=\"wp-element-caption\">ANY.RUN&#8217;s process tree displaying the connections between processes<\/figcaption><\/figure><\/div>\n\n\n<p>Upon execution of the malicious file, the Windows command line utility &#8220;msiexec&#8221; was spawned to execute the MSI file. The &#8220;msiexec&#8221; process then ran the following command:<\/p>\n\n\n\n<p>&#8220;C:\\Windows\\System32\\rundll32.exe&#8221;C:\\Users\\admin\\AppData\\Roaming\\upfilles.dll, stow<\/p>\n\n\n\n<p>This command loaded the BRC4 badger DLL (upfilles.dll) and executed the export function &#8220;stow&#8221;, which initiated the infection chain. This behavior is visible in the process tree above.<\/p>\n\n\n\n<p>Upon seeing the process execution flow and the command used to load the BRC4 badger DLL, we decided to investigate the MSI file further.<\/p>\n\n\n\n<!-- Regular Banner START -->\n<div class=\"regular-banner\">\n<!-- Text Content -->\n<p class=\"regular-banner__text\">\nAnalyze malware and phishing threats in <span class=\"highlight\">ANY.RUN sandbox<span>&nbsp;\n<\/p>\n<!-- CTA Link -->\n<a class=\"regular-banner__link\" id=\"article-banner-regular\" href=\"https:\/\/app.any.run\/?utm_source=anyrunblog&#038;utm_medium=article&#038;utm_campaign=brute_ratel_analysis&#038;utm_term=240724&#038;utm_content=linktoregistration#register\/\" rel=\"noopener\" target=\"_blank\">\nSign up for free\n<\/a>\n<\/div>\n<!-- Regular Banner END -->\n<!-- Regular Banner Styles START -->\n\n<style>\n.regular-banner {\ndisplay: flex;\ntext-align: center;\nflex-direction: column;\nalign-items: center;\ngap: 1.5rem;\nwidth: 100%;\npadding: 2rem;\nmargin: 1.5rem 0;\nborder-radius: 0.5rem;\nfont-family: 'Catamaran Bold';\nmargin-inline: auto;\nbackground: rgba(32, 168, 241, 0.1);\nborder: 1px solid rgba(75, 174, 227, 0.32);\n}\n\n.regular-banner__text {\nfont-size: 1.5rem;\nmargin: 0;\n}\n\n.highlight {\ncolor: #ea2526;\n}\n\n.regular-banner__link {\npadding: 0.5rem 1.5rem;\nfont-weight: 500;\ntext-decoration: none;\nborder-radius: 0.5rem;\ncolor: #FFFFFF;\nbackground-color: #1491D4;\ntext-align: center;\ntransition: all 0.2s ease-in;\n}\n\n.regular-banner__link:hover {\nbackground-color: #68CBFF;\ncolor: white;\n}\n<\/style>\n<!-- Regular Banner Styles END -->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Static analysis and reverse engineering&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>We began our analysis using Orca, a Microsoft database editing tool for examining and editing MSI files. Upon opening the MSI file in Orca, we navigated to the CustomActions table in the main database stream. <\/p>\n\n\n\n<p>There we found a <strong>LaunchFile<\/strong> action which started an embedded executable, <strong>viewer.exe<\/strong>. This executable then launched <strong>rundll32.exe<\/strong>, taking the name of the aforementioned <strong>DLL<\/strong> and the exported function as arguments.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"93\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-1024x93.png\" alt=\"\" class=\"wp-image-8326\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-1024x93.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-300x27.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-768x70.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-370x34.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-270x25.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2-740x68.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image4-2.png 1348w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">LaunchFile action in orca<\/figcaption><\/figure><\/div>\n\n\n<p>Because we can treat MSI files as self-extracting <a href=\"https:\/\/any.run\/cybersecurity-blog\/malware-packers-explained\/\" target=\"_blank\" rel=\"noreferrer noopener\">ZIP files<\/a>, we can unzip them using any basic extractor tool. Upon doing this, we found only a few files of interest, those were the ones mentioned in the <strong>CustomActions<\/strong> table, which is where the MSI file developer can specify custom actions to take place during the execution process of the MSI file such as executing an export from a DLL of interest.<\/p>\n\n\n\n<p>As we mentioned, MSI files can be treated as self-extracting ZIP files and can be unzipped using any basic extractor tool. <\/p>\n\n\n\n<p>When we unzipped the MSI file, we found only a few files of interest. These files were mentioned in the <strong>CustomActions<\/strong> table, which is where the developer of the MSI file can specify custom actions to take place during the execution process of the MSI file, such as executing an export from a DLL of interest. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"690\" height=\"750\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image5-2.png\" alt=\"\" class=\"wp-image-8328\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image5-2.png 690w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image5-2-276x300.png 276w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image5-2-370x402.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image5-2-270x293.png 270w\" sizes=\"(max-width: 690px) 100vw, 690px\" \/><figcaption class=\"wp-element-caption\">The file which contains the dll<\/figcaption><\/figure><\/div>\n\n\n<p>After unzipping the MSI file, we did not find the <strong>upfilles.dll<\/strong> file. Yet, after further investigation, we discovered that the DLL was hidden inside the <strong>disk1.cab<\/strong> file.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"598\" height=\"180\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image6-1.png\" alt=\"\" class=\"wp-image-8329\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image6-1.png 598w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image6-1-300x90.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image6-1-370x111.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image6-1-270x81.png 270w\" sizes=\"(max-width: 598px) 100vw, 598px\" \/><figcaption class=\"wp-element-caption\">Analysis showed the presence of the dll inside disk1.cab<\/figcaption><\/figure><\/div>\n\n\n<p>We then unzipped <strong>disk1.cab<\/strong> and extracted the <strong>upfilles.dll <\/strong>loader.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"46\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image7-1.png\" alt=\"\" class=\"wp-image-8330\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image7-1.png 633w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image7-1-300x22.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image7-1-370x27.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image7-1-270x20.png 270w\" sizes=\"(max-width: 633px) 100vw, 633px\" \/><figcaption class=\"wp-element-caption\">The contents of the cab file<\/figcaption><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>upfilles.dll &#8211; initial loader&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>After taking a closer look at the export, we quickly noticed that the string <strong>kernel32.dll<\/strong> was constructed using a technique called stack string builds, which is a common method for obfuscating strings.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"225\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-1024x225.png\" alt=\"\" class=\"wp-image-8331\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-1024x225.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-300x66.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-768x169.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-370x81.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-270x59.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8-740x163.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image8.png 1364w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Analysis of kernel32.dll<\/figcaption><\/figure><\/div>\n\n\n<p>The function used the obfuscated string <strong>kernel32<\/strong>.<strong>dll<\/strong> to obtain the base address of the DLL in memory. To do this, the function first attempted to locate the Process Environment Block (PEB) and parse it to get a pointer to the list of loaded modules. It then compared the length of the target DLL  to the lengths of the names of the modules loaded into the process memory, until it found a match. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"457\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-1024x457.png\" alt=\"\" class=\"wp-image-8332\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-1024x457.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-300x134.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-768x342.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-370x165.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-270x120.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9-740x330.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image9.png 1036w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Comparison of the target_dll to the one of the cur_module_name <\/figcaption><\/figure><\/div>\n\n\n<p>Having obtained the base address of <strong>kernel32.dll<\/strong>, a standard technique was employed to get the addresses of the functions necessary to load up the next stage of Brute Ratel in memory.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Get a pointer to the <strong>PEB_LDR_DATA <\/strong>through the <strong>PEB<\/strong><\/li>\n\n\n\n<li>Locate the export directory of kernel32.dll<\/li>\n\n\n\n<li>Walk the ENT (Export Names Table), hash function names, and compare the hashes until a match is found&nbsp;<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-1024x337.png\" alt=\"\" class=\"wp-image-8333\" width=\"650\" height=\"213\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-1024x337.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-300x99.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-768x253.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-370x122.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-270x89.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10-740x244.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image10.png 1218w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><figcaption class=\"wp-element-caption\">The address of the function with a matching hash is returned<\/figcaption><\/figure><\/div>\n\n\n<p>Functions resolved by hash:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GetProcAddress&nbsp;&nbsp;<\/li>\n\n\n\n<li>VirtualAlloc&nbsp;&nbsp;<\/li>\n\n\n\n<li>LoadLibraryA&nbsp;&nbsp;<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"571\" height=\"289\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image11.png\" alt=\"\" class=\"wp-image-8334\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image11.png 571w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image11-300x152.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image11-370x187.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image11-270x137.png 270w\" sizes=\"(max-width: 571px) 100vw, 571px\" \/><figcaption class=\"wp-element-caption\">Functions resolved by hash<\/figcaption><\/figure><\/div>\n\n\n<p>The loader then proceeded to decrypt the next stage using an <strong>XOR<\/strong> operation with a dynamically generated key. The next stage employed numerous EDR evasion techniques, which we will analyze in detail later.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"546\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-1024x546.png\" alt=\"\" class=\"wp-image-8335\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-1024x546.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-300x160.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-768x410.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-370x197.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-270x144.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12-740x395.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image12.png 1112w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Decryption of the next stage<\/figcaption><\/figure><\/div>\n\n\n<p>The encrypted next stage of the badger was stored in the last section of the initial DLL (upfilles.dll), the section name was <strong>&#8220;hVr&#8221;<\/strong>&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"827\" height=\"180\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13.png\" alt=\"\" class=\"wp-image-8336\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13.png 827w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13-300x65.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13-768x167.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13-370x81.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13-270x59.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image13-740x161.png 740w\" sizes=\"(max-width: 827px) 100vw, 827px\" \/><figcaption class=\"wp-element-caption\">Encrypted BRC4 badger<\/figcaption><\/figure><\/div>\n\n\n<p>Having decrypted the payload, a <strong>PAGE_EXECUTE_READWRITE <\/strong>memory was allocated to write the decrypted payload into, and then jump to it.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"500\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-1024x500.png\" alt=\"\" class=\"wp-image-8337\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-1024x500.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-300x147.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-768x375.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-370x181.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-270x132.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14-740x362.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image14.png 1269w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Decrypted BRC4 badger<\/figcaption><\/figure><\/div>\n\n\n<!-- Regular Banner START -->\n<div class=\"regular-banner\">\n<!-- Text Content -->\n<p class=\"regular-banner__text\">\nGet a 14-day free trial of <span class=\"highlight\">ANY.RUN sandbox<span>&nbsp;\n<\/p>\n<!-- CTA Link -->\n<a class=\"regular-banner__link\" id=\"article-banner-regular\" href=\"https:\/\/any.run\/demo\/?utm_source=anyrunblog&#038;utm_medium=article&#038;utm_campaign=brute_ratel_analysis&#038;utm_term=240724&#038;utm_content=linktodemo\" rel=\"noopener\" target=\"_blank\">\nRequest now\n<\/a>\n<\/div>\n<!-- Regular Banner END -->\n<!-- Regular Banner Styles START -->\n\n<style>\n.regular-banner {\ndisplay: flex;\ntext-align: center;\nflex-direction: column;\nalign-items: center;\ngap: 1.5rem;\nwidth: 100%;\npadding: 2rem;\nmargin: 1.5rem 0;\nborder-radius: 0.5rem;\nfont-family: 'Catamaran Bold';\nmargin-inline: auto;\nbackground: rgba(32, 168, 241, 0.1);\nborder: 1px solid rgba(75, 174, 227, 0.32);\n}\n\n.regular-banner__text {\nfont-size: 1.5rem;\nmargin: 0;\n}\n\n.highlight {\ncolor: #ea2526;\n}\n\n.regular-banner__link {\npadding: 0.5rem 1.5rem;\nfont-weight: 500;\ntext-decoration: none;\nborder-radius: 0.5rem;\ncolor: #FFFFFF;\nbackground-color: #1491D4;\ntext-align: center;\ntransition: all 0.2s ease-in;\n}\n\n.regular-banner__link:hover {\nbackground-color: #68CBFF;\ncolor: white;\n}\n<\/style>\n<!-- Regular Banner Styles END -->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Memory-only Brute Ratel Implant&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>The version of Brute Ratel that was loaded into memory during this attack was an older one, which likely contains many weaknesses that have since been fixed in later versions of BRC4.<\/p>\n\n\n\n<p>The technique used by the <strong>implant<\/strong> to keep the process alive involves jumping back and forth between different threads using the <strong>Sleep API<\/strong>. The Sleep API suspends the execution of the current thread for a specified amount of time, allowing other threads that were created to perform their tasks to take control.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"817\" height=\"291\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15.png\" alt=\"\" class=\"wp-image-8338\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15.png 817w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15-300x107.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15-768x274.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15-370x132.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15-270x96.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image15-740x264.png 740w\" sizes=\"(max-width: 817px) 100vw, 817px\" \/><figcaption class=\"wp-element-caption\">The thread sleeps for one minute giving control to other threads<\/figcaption><\/figure><\/div>\n\n\n<p>The BRC4 badger executes entirely in memory and never writes any files to disk in order to avoid leaving system-level artifacts. Its execution process begins by loading another embedded DLL into memory, which then writes x64 shellcode. This shellcode is responsible for decrypting and writing the final payload to memory.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"601\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-1024x601.png\" alt=\"\" class=\"wp-image-8339\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-1024x601.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-300x176.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-768x451.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-370x217.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-270x158.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16-740x434.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image16.png 1033w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">CreateRemoteThread function<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>X64 BRC4 shellcode&nbsp;<\/strong>&nbsp;<\/h3>\n\n\n\n<p>The x64 shellcode used in the BRC4 badger employs <strong>control-flow obfuscation<\/strong> techniques to calculate the address of the subsequent block of code.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image17.png\" alt=\"\" class=\"wp-image-8340\" width=\"650\" height=\"108\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image17.png 737w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image17-300x50.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image17-370x62.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image17-270x45.png 270w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><figcaption class=\"wp-element-caption\">The call used to put the address of the next inst onto the stack<\/figcaption><\/figure><\/div>\n\n\n<p>The shellcode used a unique method to locate the address of NTDLL. It first obtained a pointer to the PEB and then found the PEB_LDR_DATA structure, which was set to the NTDLL!PEB_LDR_DATA during process initialization. The PEB_LDR_DATA structure was located somewhere in the middle of the NTDLL. It then walked through the NTDLL until it reached the very start of the DLL, at which point it returned.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"223\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image18.png\" alt=\"\" class=\"wp-image-8341\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image18.png 703w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image18-300x95.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image18-370x117.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image18-270x86.png 270w\" sizes=\"(max-width: 703px) 100vw, 703px\" \/><figcaption class=\"wp-element-caption\">Walking ntdll<\/figcaption><\/figure><\/div>\n\n\n<p>The shellcode used a standard anti-debugging technique called <strong>NTGlobalFlag<\/strong> to detect the presence of a debugger before decrypting and loading the final payload into memory.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image19.png\" alt=\"\" class=\"wp-image-8342\" width=\"614\" height=\"74\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image19.png 614w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image19-300x36.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image19-370x45.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image19-270x33.png 270w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><figcaption class=\"wp-element-caption\">Checking for flags set by a debugger<\/figcaption><\/figure><\/div>\n\n\n<p>Instead of calling the function address directly, which could be detected by an already installed EDR hook, the shellcode retrieved the System Service Number (<strong>SSN<\/strong>) of the resolved function. It did this by walking the <strong>syscall<\/strong> stub and then returning the SSN to be used later to invoke the corresponding function.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"714\" height=\"204\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image20.png\" alt=\"\" class=\"wp-image-8343\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image20.png 714w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image20-300x86.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image20-370x106.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image20-270x77.png 270w\" sizes=\"(max-width: 714px) 100vw, 714px\" \/><figcaption class=\"wp-element-caption\">Malware&#8217;s use of SSN<\/figcaption><\/figure><\/div>\n\n\n<p>This technique employed by BRC4 was also heavily used in the final payload to resolve and invoke the needed functions.&nbsp;&nbsp;<\/p>\n\n\n\n<p>The process of dynamically retrieving <strong>syscall numbers or SSNs<\/strong> (which are just unique identifiers to functions exported by the kernel) is the outcome of an earlier research that solved the problem of having the syscall numbers change across different Windows versions and was named <strong>&#8220;Hell&#8217;s Gate&#8221;<\/strong>. This technique requires a clean version of NTDLL.&nbsp;<\/p>\n\n\n\n<p>A breakdown of the technique is as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Walk the given function&#8217;s syscall stub, until it finds the function&#8217;s SSN<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"393\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-1024x393.png\" alt=\"\" class=\"wp-image-8344\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-1024x393.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-300x115.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-768x295.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-370x142.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-270x104.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21-740x284.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image21.png 1349w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Execution of the technique<\/figcaption><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Having obtained the function&#8217;s SSN, there&#8217;s no point going through the whole syscall stub, instead we get a pointer to the last couple of instructions of the stub<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"246\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image22.png\" alt=\"\" class=\"wp-image-8345\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image22.png 650w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image22-300x114.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image22-370x140.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image22-270x102.png 270w\" sizes=\"(max-width: 650px) 100vw, 650px\" \/><figcaption class=\"wp-element-caption\">Pointer to syscall<\/figcaption><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Jump to a custom function which will invoke the syscall<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image23.png\" alt=\"\" class=\"wp-image-8346\" width=\"522\" height=\"96\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image23.png 522w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image23-300x55.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image23-370x68.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image23-270x50.png 270w\" sizes=\"(max-width: 522px) 100vw, 522px\" \/><figcaption class=\"wp-element-caption\">Jump to a custom function<\/figcaption><\/figure><\/div>\n\n\n<p>Having resolved the necessary functions to map the final payload to memory. The final payload is <a href=\"https:\/\/any.run\/cybersecurity-blog\/encryption-in-malware\/\" target=\"_blank\" rel=\"noreferrer noopener\">XOR<\/a> decrypted using a dynamically generated key.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"462\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-1024x462.png\" alt=\"\" class=\"wp-image-8347\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-1024x462.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-300x135.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-768x346.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-370x167.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-270x122.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24-740x334.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image24.png 1430w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Payload decryption <\/figcaption><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>BRC4 Final Payload&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>The final payload was designed to be highly EDR evasive. It implements many EDR evasion techniques meant to circumvent different components of different EDR vendors, the most notable of which is the &#8220;Hell&#8217;s Gate&#8221; technique using direct syscalls.&nbsp;<\/p>\n\n\n\n<p>There are other evasion techniques which we&#8217;ll break down, but it&#8217;s worth noting that aside from being evasive its core functionality is to gather system information, upload it to its C2 servers over <strong>HTTPS<\/strong>, then get further commands for what to do next.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Unregister DLL load callbacks<\/strong>&nbsp;<\/h2>\n\n\n\n<p>Some EDR products may register their function callbacks at the kernel level to receive telemetry from DLL load or unload events.<\/p>\n\n\n\n<p>To bypass this, a technique is used where an empty callback function is registered, which is added to the end of the chain of registered callback functions. The list of callbacks is stored in a circular doubly-linked list, where the last element points to the first one in the chain.<\/p>\n\n\n\n<p>By finding the pointer to the start of the chain, the technique can walk the list and unlink all of the registered callbacks, effectively suppressing the EDR&#8217;s attempt to receive DLL load and unload telemetry if it has already registered its own callback functions at the kernel level.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-1024x664.png\" alt=\"\" class=\"wp-image-8348\" width=\"648\" height=\"420\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-1024x664.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-300x194.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-768x498.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-370x240.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-270x175.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25-740x480.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image25.png 1202w\" sizes=\"(max-width: 648px) 100vw, 648px\" \/><figcaption class=\"wp-element-caption\">Last node\u2019s Flink points to the first callback entry which is the head of the list of callback functions<\/figcaption><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Proxying DLL Loads to Hide from ETWTI Stack Tracing<\/strong>&nbsp;<\/h2>\n\n\n\n<p>This technique is used to evade EDRs that rely on stack tracing telemetry for detection. The author disclosed a detailed description of this technique on their <a href=\"https:\/\/0xdarkvortex.dev\/proxying-dll-loads-for-hiding-etwti-stack-tracing\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">blog<\/a>.<\/p>\n\n\n\n<p>Some EDRs may trace and analyze function stack frames stored on the stack to find suspicious patterns and detect malicious activity. To avoid detection, this technique creates a clean stack for DLL loading by running the LoadLibraryExA function in a separate thread, hence its own clean stack frame.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"352\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-1024x352.png\" alt=\"\" class=\"wp-image-8350\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-1024x352.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-300x103.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-768x264.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-370x127.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-270x93.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26-740x254.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image26.png 1497w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Details of the technique<\/figcaption><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Evading ETW event logging (patchless evasion)<\/strong>&nbsp;<\/h2>\n\n\n\n<p>This is a new technique for evading Event Tracing for Windows (ETW). Typically, ETW patching involves overwriting the first few bytes of the &#8220;<strong>ETWEventWrite<\/strong>&#8221; function so that it returns prematurely, avoiding ETW telemetry. <\/p>\n\n\n\n<p>However, in this case, the author used a patchless evasion method. They set hardware breakpoints at two common functions called by ETW to log process events, &#8220;<strong>NtTraceEvent<\/strong>&#8221; and &#8220;<strong>NtTraceControl<\/strong>.&#8221; Then, they registered their own VEH to catch EXCEPTION_SINGLE_STEP exceptions, which occur when a hardware breakpoint is hit.<\/p>\n\n\n\n<p>When the breakpoint is hit and the handler catches, execution is redirected to a dummy function that does nothing but return zero. This prevents the actual function logic from executing, and as a result, the event is not logged.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"430\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-1024x430.png\" alt=\"\" class=\"wp-image-8352\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-1024x430.png 1024w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-300x126.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-768x323.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-370x156.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-270x113.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1-740x311.png 740w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image27-1.png 1463w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">ETW evasion<\/figcaption><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>C2 Communication&nbsp;<\/strong>&nbsp;<\/h2>\n\n\n\n<p>The malware first resolves all the necessary APIs and then performs system discovery to gather information about the infected system. <\/p>\n\n\n\n<p>This information is stored in a JSON construct and then encrypted using an RC4 encryption algorithm with the key <strong>LDTPTF78OUCCVQ0I<\/strong>.<\/p>\n\n\n\n<p>The encrypted data is then uploaded to one of the hardcoded command and control (C2) domains.<\/p>\n\n\n\n<p>The gathered information includes the current PID, thread ID, computer name, Windows version, and other system details.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Before encryption<\/strong>&nbsp;<\/h3>\n\n\n\n<p>{&#8220;cds&#8221;:{&#8220;auth&#8221;:&#8221;6J1D1M4P9A57JGC2&#8243;},&#8221;mtdt&#8221;:{&#8220;h_name&#8221;:&#8221;DESKTOP-8VTQJ38&#8243;,&#8221;wver&#8221;:&#8221;x64\/10.0&#8243;,&#8221;ip&#8221;:&#8221;0.0.0.0,0.0.0.0&#8243;,&#8221;arch&#8221;:&#8221;x64&#8243;,&#8221;bld&#8221;:&#8221;1337&#8243;,&#8221;p_name&#8221;:&#8221;QwA6AFwAVwBpA&nbsp;<\/p>\n\n\n\n<p>G4AZABvAHcAcwBcAFMAeQBzAHQAZQBtADMAMgBcAHIAdQBuAGQAbABsADMAMgAuAGUAeABlAA==&#8221;,&#8221;uid&#8221;:&#8221;*dtm&#8221;,&#8221;pid&#8221;:&#8221;4248&#8243;,&#8221;tid&#8221;:&#8221;1248&#8243;}}&nbsp;<\/p>\n\n\n\n<p>The ANY.RUN sandbox providess the C2 domains that the malware communicates with to send the collected system information over HTTPS.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"199\" src=\"\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28.png\" alt=\"\" class=\"wp-image-8353\" srcset=\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28.png 978w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28-300x61.png 300w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28-768x156.png 768w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28-370x75.png 370w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28-270x55.png 270w, https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/image28-740x151.png 740w\" sizes=\"(max-width: 978px) 100vw, 978px\" \/><figcaption class=\"wp-element-caption\">C2 domains detected by ANY.RUN<\/figcaption><\/figure><\/div>\n\n\n<p>It appears that we&#8217;re not receiving any response from the C2 domains because the domains are currently down.&nbsp;<\/p>\n\n\n\n<p>&nbsp;It also checks for a response from the C2 before it begins listening for further commands to execute.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Indicators of Compromise<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hashes<\/h3>\n\n\n\n<div class=\"wpdt-c row wpDataTableContainerSimpleTable wpDataTables wpDataTablesWrapper\n\"\n    >\n        <table id=\"wpdtSimpleTable-123\"\n           style=\"border-collapse:collapse;\n                   border-spacing:0px;\"\n           class=\"wpdtSimpleTable wpDataTable\"\n           data-column=\"2\"\n           data-rows=\"3\"\n           data-wpID=\"123\"\n           data-responsive=\"0\"\n           data-has-header=\"0\">\n\n                    <tbody>        <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell \"\n                                            data-cell-id=\"A1\"\n                    data-col-index=\"0\"\n                    data-row-index=\"0\"\n                    style=\" width:50%;                    padding:10px;\n                    \"\n                    >\n                                        b4a482a7e96cfdef632a7af286120156                     <\/td>\n                                                <td class=\"wpdt-cell \"\n                                            data-cell-id=\"B1\"\n                    data-col-index=\"1\"\n                    data-row-index=\"0\"\n                    style=\" width:50%;                    padding:10px;\n                    \"\n                    >\n                                        MSI                      <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell \"\n                                            data-cell-id=\"A2\"\n                    data-col-index=\"0\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        ccb6d3cb020f56758622911ddd2f1fcb                    <\/td>\n                                                <td class=\"wpdt-cell \"\n                                            data-cell-id=\"B2\"\n                    data-col-index=\"1\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        upfilles.dll                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell \"\n                                            data-cell-id=\"A3\"\n                    data-col-index=\"0\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        83bca228a6a8f5e6d7c95d2a08494d32                    <\/td>\n                                                <td class=\"wpdt-cell \"\n                                            data-cell-id=\"B3\"\n                    data-col-index=\"1\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        in-memory DLL (decrypted DLL embedded in upfilles.dll)                     <\/td>\n                                        <\/tr>\n                    <\/table>\n<\/div><style id='wpdt-custom-style-123'>\ntable#wpdtSimpleTable-123{ table-layout: fixed !important; }\ntable#wpdtSimpleTable-123 td, table.wpdtSimpleTable123 th { white-space: normal !important; }\n<\/style>\n\n\n\n\n<h3 class=\"wp-block-heading\">BRC4 Domains&nbsp;&nbsp;<\/h3>\n\n\n\n<p>boriz400[.]com<\/p>\n\n\n\n<p>anikvan[.]com&nbsp;<\/p>\n\n\n\n<p>ridiculous-breakpoint-gw.aws-use1.cloud-ara.tyk[.]io&nbsp;<\/p>\n\n\n\n<p>uncertain-kitten-gw.aws-euc1.cloud-ara.tyk[.]io&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Editor&#8217;s note: The current article is authored by Mohamed Talaat, a cybersecurity researcher and malware analyst. You can find Mohamed on X and LinkedIn. Brute Ratel C4 (BRC4) is a customized, commercial command and control (C2) framework that was first introduced in December 2020. Its primary use is for conducting adversarial attack simulation, red-team engagements, [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":8360,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[57,15,34,40],"class_list":["post-8322","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-malware-analysis","tag-anyrun","tag-malware","tag-malware-analysis","tag-malware-behavior"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.10 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Brute Ratel C4 Badger Used to Load Latrodectus - ANY.RUN&#039;s Cybersecurity Blog<\/title>\n<meta name=\"description\" content=\"Read analysis of a Brute Ratel C4 Badger sample deploying Latrodectus malware and learn about its evasion techniques.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mohamed Talaat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/\"},\"author\":{\"name\":\"Mohamed Talaat\",\"@id\":\"https:\/\/any.run\/\"},\"headline\":\"Brute Ratel C4 Badger Used to Load Latrodectus\",\"datePublished\":\"2024-07-24T12:07:19+00:00\",\"dateModified\":\"2024-07-25T11:49:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/\"},\"wordCount\":2384,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/any.run\/\"},\"keywords\":[\"ANYRUN\",\"malware\",\"malware analysis\",\"malware behavior\"],\"articleSection\":[\"Malware Analysis\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/\",\"name\":\"Brute Ratel C4 Badger Used to Load Latrodectus - ANY.RUN&#039;s Cybersecurity Blog\",\"isPartOf\":{\"@id\":\"https:\/\/any.run\/\"},\"datePublished\":\"2024-07-24T12:07:19+00:00\",\"dateModified\":\"2024-07-25T11:49:24+00:00\",\"description\":\"Read analysis of a Brute Ratel C4 Badger sample deploying Latrodectus malware and learn about its evasion techniques.\",\"breadcrumb\":{\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/any.run\/cybersecurity-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Malware Analysis\",\"item\":\"https:\/\/any.run\/cybersecurity-blog\/category\/malware-analysis\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Brute Ratel C4 Badger Used to Load Latrodectus\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/any.run\/\",\"url\":\"https:\/\/any.run\/\",\"name\":\"ANY.RUN&#039;s Cybersecurity Blog\",\"description\":\"Cybersecurity Blog covers topics for experienced professionals as well as for those new to it.\",\"publisher\":{\"@id\":\"https:\/\/any.run\/\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/any.run\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/any.run\/\",\"name\":\"ANY.RUN\",\"url\":\"https:\/\/any.run\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/any.run\/\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg\",\"contentUrl\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg\",\"width\":1,\"height\":1,\"caption\":\"ANY.RUN\"},\"image\":{\"@id\":\"https:\/\/any.run\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/www.any.run\/\",\"https:\/\/twitter.com\/anyrun_app\",\"https:\/\/www.linkedin.com\/company\/30692044\",\"https:\/\/www.youtube.com\/channel\/UCOgCPho7lzmH7m6fPNlukrQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/any.run\/\",\"name\":\"Mohamed Talaat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/any.run\/\",\"url\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/mohamed.png.jpeg\",\"contentUrl\":\"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/mohamed.png.jpeg\",\"caption\":\"Mohamed Talaat\"},\"description\":\"Mohamed Talaat is a Computer Engineer with a Bachelor in Computer Engineering from Suez Canal University (Ismailia, Egypt). Despite not having a strong cybersecurity background, he took it upon himself to establish a career in cybersecurity. \u041de found himself a better fit in Blue Teaming and malware analysis. Engaging in malware analysis and the development of TTPs, he also writes detection rules as part of his daily routine. Mohamed on LinkedIn.\",\"url\":\"#molongui-disabled-link\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Brute Ratel C4 Badger Used to Load Latrodectus - ANY.RUN&#039;s Cybersecurity Blog","description":"Read analysis of a Brute Ratel C4 Badger sample deploying Latrodectus malware and learn about its evasion techniques.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/","twitter_misc":{"Written by":"Mohamed Talaat","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#article","isPartOf":{"@id":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/"},"author":{"name":"Mohamed Talaat","@id":"https:\/\/any.run\/"},"headline":"Brute Ratel C4 Badger Used to Load Latrodectus","datePublished":"2024-07-24T12:07:19+00:00","dateModified":"2024-07-25T11:49:24+00:00","mainEntityOfPage":{"@id":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/"},"wordCount":2384,"commentCount":0,"publisher":{"@id":"https:\/\/any.run\/"},"keywords":["ANYRUN","malware","malware analysis","malware behavior"],"articleSection":["Malware Analysis"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/","url":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/","name":"Brute Ratel C4 Badger Used to Load Latrodectus - ANY.RUN&#039;s Cybersecurity Blog","isPartOf":{"@id":"https:\/\/any.run\/"},"datePublished":"2024-07-24T12:07:19+00:00","dateModified":"2024-07-25T11:49:24+00:00","description":"Read analysis of a Brute Ratel C4 Badger sample deploying Latrodectus malware and learn about its evasion techniques.","breadcrumb":{"@id":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/any.run\/cybersecurity-blog\/brute-ratel-c4-analysis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/any.run\/cybersecurity-blog\/"},{"@type":"ListItem","position":2,"name":"Malware Analysis","item":"https:\/\/any.run\/cybersecurity-blog\/category\/malware-analysis\/"},{"@type":"ListItem","position":3,"name":"Brute Ratel C4 Badger Used to Load Latrodectus"}]},{"@type":"WebSite","@id":"https:\/\/any.run\/","url":"https:\/\/any.run\/","name":"ANY.RUN&#039;s Cybersecurity Blog","description":"Cybersecurity Blog covers topics for experienced professionals as well as for those new to it.","publisher":{"@id":"https:\/\/any.run\/"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/any.run\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/any.run\/","name":"ANY.RUN","url":"https:\/\/any.run\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/any.run\/","url":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg","contentUrl":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2020\/08\/ANYRUN-Icon.svg","width":1,"height":1,"caption":"ANY.RUN"},"image":{"@id":"https:\/\/any.run\/"},"sameAs":["https:\/\/www.facebook.com\/www.any.run\/","https:\/\/twitter.com\/anyrun_app","https:\/\/www.linkedin.com\/company\/30692044","https:\/\/www.youtube.com\/channel\/UCOgCPho7lzmH7m6fPNlukrQ"]},{"@type":"Person","@id":"https:\/\/any.run\/","name":"Mohamed Talaat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/any.run\/","url":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/mohamed.png.jpeg","contentUrl":"https:\/\/any.run\/cybersecurity-blog\/wp-content\/uploads\/2024\/07\/mohamed.png.jpeg","caption":"Mohamed Talaat"},"description":"Mohamed Talaat is a Computer Engineer with a Bachelor in Computer Engineering from Suez Canal University (Ismailia, Egypt). Despite not having a strong cybersecurity background, he took it upon himself to establish a career in cybersecurity. \u041de found himself a better fit in Blue Teaming and malware analysis. Engaging in malware analysis and the development of TTPs, he also writes detection rules as part of his daily routine. Mohamed on LinkedIn.","url":"#molongui-disabled-link"}]}},"_links":{"self":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts\/8322"}],"collection":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/comments?post=8322"}],"version-history":[{"count":16,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts\/8322\/revisions"}],"predecessor-version":[{"id":8415,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/posts\/8322\/revisions\/8415"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/media\/8360"}],"wp:attachment":[{"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/media?parent=8322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/categories?post=8322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/any.run\/cybersecurity-blog\/wp-json\/wp\/v2\/tags?post=8322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}