{"id":114,"date":"2019-04-02T09:50:29","date_gmt":"2019-04-02T07:50:29","guid":{"rendered":"https:\/\/192.168.10.2\/blog\/?p=114"},"modified":"2019-05-16T12:40:22","modified_gmt":"2019-05-16T10:40:22","slug":"orangeworm-group-kwampirs-analysis-update","status":"publish","type":"post","link":"https:\/\/lab52.io\/blog\/orangeworm-group-kwampirs-analysis-update\/","title":{"rendered":"ORANGEWORM GROUP \u2013 KWAMPIRS ANALYSIS UPDATE"},"content":{"rendered":"\n<p>The OrangeWorm group was named and described by the Symantec Company in different blog entries <a href=\"https:\/\/www.symantec.com\/blogs\/threat-intelligence\/orangeworm-targets-healthcare-us-europe-asia\">[1]<\/a> <a href=\"https:\/\/content.connect.symantec.com\/sites\/default\/files\/2018-04\/Orangeworm%20IOCs.pdf\">[2]<\/a>. We would highlight from these entries that it is a group that has been operational since 2015 and is focused on attacking the <strong>health<\/strong>, pharmaceutical, technological, manufacturing and logistics sectors. The sector most affected is <strong>healthcare<\/strong> as described by Symantec.<\/p>\n\n\n\n<p>Based on this information, Lab52 has carried out an in-depth study of\n the Kwampirs tool (OrangeWorm\u2019s main tool) used by this group.<\/p>\n\n\n\n<p>Next, the RAT (Remote Administration Tool) in Dll format and the main binary or orchestrator of the infection will be analyzed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Technical analysis of Kwampirs Dropper<\/h3>\n\n\n\n<p>Within its arsenal, OrangeWorm has a RAT in DLL format whose \nexecution and lateral movement is carried out by an executable together \nwith the one that composes the threat known as Kwampirs.<\/p>\n\n\n\n<p>Regarding the executable, which we will call \u201cKwampirs Dropper\u201d \ninitially highlight its resources, among which are two images with \ncorrupt sections. One of which consists of the DLL with RAT capabilities\n encrypted with an XOR key that in each execution extracts, decrypts and\n executes:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"197\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img01.png\" alt=\"\" class=\"wp-image-195\"\/><\/figure><\/div>\n\n\n\n<p>This threat has a first execution block, in charge of decrypting all \nthe text strings that it will use and which are encrypted in its \u201c.data\u201d\n section with a relatively obfuscated XOR algorithm in order to make \ndetection and decryption difficult. After deciphering its strings, it \nextracts the creation and modification dates from User32.dll and \ncollects information about the operating system it is on. From this \npoint, its logic can be divided into 4 different paths, depending on the\n number of parameters, which provide different functionalities for each \nstage of infection of the threat.<\/p>\n\n\n\n<p>In order to provide the greatest clarity to this report, the order of\n description of the 4 possible ways of execution of the Kwampirs dropper\n will follow that of an infection of this threat, instead of the number \nof parameters incrementally:<\/p>\n\n\n\n<p><strong>Execution with a parameter<\/strong><\/p>\n\n\n\n<p>The logic that contains the section of code that is executed when it \nreceives a single parameter, is that of a hypothetical installation of \nthe threat, manually, or through a dropper.<\/p>\n\n\n\n<p>It should be noted that this section is completely dependent on \nhaving administrator privileges, and in case of not having them, in many\n points of the execution jumps directly to the end of the logic, thus \nending its execution.<\/p>\n\n\n\n<p>First, check the existence of the file \u201cC:\\Windows\\inf\\IE11.PNF\u201d, its\n size (66Bytes) and if it has enough privileges to access it.<br>\nIf it detects that it already exists (which would indicate that the \ncomputer is already infected) or that it does not have enough privileges\n (which would prevent it from performing the rest of the logic) it ends \nthe execution. If it does not exist and has sufficient privileges, it \ncreates the persistence service.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"433\" height=\"345\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img02.png\" alt=\"\" class=\"wp-image-196\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img02.png 433w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img02-300x239.png 300w\" sizes=\"(max-width: 433px) 100vw, 433px\" \/><\/figure><\/div>\n\n\n\n<p>This service generates it with a hardcoded name and data in the \nstrings that it has decrypted at the beginning of its execution, and \nemphasizes that it points to an executable with the name it has at that \nmoment, but in %System32% even though it has not been observed that it \ncopies itself to that route at any time. This implies that along with \nbeing run with administrator privileges, it also requires having been \ninstalled on that route by other means.<\/p>\n\n\n\n<p>After creating the service, it starts it, this time without any \nparameter, which gives way to another execution path within its logic.<br>\nFinally, it creates the file called ie11.PNF in which it writes 66 random bytes:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"286\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img03.png\" alt=\"\" class=\"wp-image-197\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img03.png 534w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img03-300x161.png 300w\" sizes=\"(max-width: 534px) 100vw, 534px\" \/><\/figure><\/div>\n\n\n\n<p>In the previous capture, you can see how it creates a buffer of \n66Bytes, which it fills with random bytes, and passes it as a parameter \nto a function that we have called \u201cCreateFileWith2tmp\u201d along with a \nstring, which in this case contains \u201cC:\\Windows\\inf\\ie11.PNF\u201d.<\/p>\n\n\n\n<p>The function \u201cCreateFileWith2tmp\u201d uses it constantly for the creation\n of each one of the files related to this threat, and is in charge of \ngenerating two temporary files, in one it stores the first Byte of the \nbuffer it receives as the second parameter, in the second file it stores\n the rest of the buffer, after which, it executes the following command \nto concatenate the content of both, and store it in a new file with the \nname that it has received as the third parameter.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"951\" height=\"32\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img04-1.png\" alt=\"\" class=\"wp-image-198\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img04-1.png 951w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img04-1-300x10.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img04-1-768x26.png 768w\" sizes=\"(max-width: 951px) 100vw, 951px\" \/><\/figure>\n\n\n\n<p>After generating this file, it finishes its execution, having started\n another instance of its own, as a service, and without parameters.<\/p>\n\n\n\n<p><strong>Execution without parameters<\/strong><\/p>\n\n\n\n<p>When the threat starts without parameters, after its first string \ndecryption block and collection of system information, it makes a call \nto the Microsoft API \u201cStartServiceCtrlDispatcherW\u201d responsible for \ninitiating the logic of a Windows service, after which it ends. \nTherefore, if it is not started as a service, it is not able to perform \nany action.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"170\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img05.png\" alt=\"\" class=\"wp-image-199\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img05.png 633w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img05-300x81.png 300w\" sizes=\"(max-width: 633px) 100vw, 633px\" \/><\/figure><\/div>\n\n\n\n<p>If it is loaded as a service, after a first execution of its binary \nwith a parameter, for example, the API \u201cStartServiceCtrlDispatcherW\u201d \npasses the execution flow of the application to a function of the \nbinary.<\/p>\n\n\n\n<p>This function consists in a first verification of the existence and \ncapacity of access to the file \u201cC:\\Windows\\inf\\mtmndkb32.PNF\u201d if it \nfinds a recent and accessible version of this one, it continues its \nnormal execution, in case of not finding it or having problems of access\n to it, it goes through the processes in search of the copies of itself \nthat it generates to run with 2 and 3 parameters, and in search of its \nmodules to finish these processes and later, to eliminate these \nexecutables, as a cleanup.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"682\" height=\"174\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img06.png\" alt=\"\" class=\"wp-image-200\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img06.png 682w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img06-300x77.png 300w\" sizes=\"(max-width: 682px) 100vw, 682px\" \/><\/figure><\/div>\n\n\n\n<p>Regardless of whether it finds the PNF file or not, it enters an \ninfinite \u201cwhile (! 0)\u201d loop, which is in charge of keeping its module in\n DLL format running and maintaining a copy of itself, running with two \nparameters, which is in charge of the lateral movement by SMB of the \nthreat.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"364\" height=\"63\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img07.png\" alt=\"\" class=\"wp-image-201\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img07.png 364w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img07-300x52.png 300w\" sizes=\"(max-width: 364px) 100vw, 364px\" \/><\/figure><\/div>\n\n\n\n<p>The infinite loop, first, looks for instances of its module in DLL \nformat in execution, in case of not finding it, it calls a function that\n takes charge of extracting from its resources the image mentioned at \nthe beginning of the report, trimming the corrupt section, decrypting it\n with an XOR key of 16Bytes, using the following algorithm:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"754\" height=\"330\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img08.png\" alt=\"\" class=\"wp-image-202\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img08.png 754w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img08-300x131.png 300w\" sizes=\"(max-width: 754px) 100vw, 754px\" \/><\/figure><\/div>\n\n\n\n<p>and store the result in System32 with one of the following names with extension \u201c.dll\u201d:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"106\" height=\"134\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img09.png\" alt=\"\" class=\"wp-image-203\"\/><\/figure><\/div>\n\n\n\n<p>Once you have the module on disk, run it through Microsoft executable \u201crundll32.exe\u201d passing the following parameters:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"52\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img10.png\" alt=\"\" class=\"wp-image-204\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img10.png 614w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img10-300x25.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img10-600x52.png 600w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><\/figure><\/div>\n\n\n\n<p>It then calls a function whose sole purpose is to call a one-minute \n\u201cSleep\u201d 20 times, causing his execution to pause for a period of 20 \nminutes.<\/p>\n\n\n\n<p>After 20 minutes, it makes a call to a function that if it does not \nfind an instance of itself running with 2 parameters, it makes a copy of\n its own binary with one of the following names:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"107\" height=\"80\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img01-1.png\" alt=\"\" class=\"wp-image-205\"\/><\/figure><\/div>\n\n\n\n<p>And it executes it with two parameters using the Microsoft API \nCreateProcessAsUserW, which allows it to add the token of the current \nuser as the creator of the process, so that the process is executed in \nits session:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"55\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img12.png\" alt=\"\" class=\"wp-image-206\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img12.png 451w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img12-300x37.png 300w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/figure><\/div>\n\n\n\n<p>After this, it performs a Sleep with a random value between 1 and 3 \nminutes, and repeats the same execution flow, thus ensuring that both \nits module in DLL format and its replica running with two parameters are\n kept running.<\/p>\n\n\n\n<p>At this point, we are running the process of the main Kwampirs \ndropper, loaded as System by the persistence service, an instance of \nrundll32, also as System generated by the process itself without \nparameters, and a second instance of the executable, this time with the \ncredentials of the user who has logged in, thanks to the use of the \n\u201cCreateProcessAsUserW\u201d API for its creation:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"280\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img13-1024x280.png\" alt=\"\" class=\"wp-image-207\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img13-1024x280.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img13-300x82.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img13-768x210.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img13.png 1105w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p><strong>Execution with 2 parameters<\/strong><\/p>\n\n\n\n<p>When the threat is executed with two parameters, after its first \nstring decryption block and collection of system information, it goes \ndirectly to a function in charge of scanning private IPs, which it tries\n to access by SMB in order to check its access and infection capacity.<\/p>\n\n\n\n<p>To do this, it first generates a Thread, which through the Microsoft \nAPI \u201cGetTcpTable\u201d obtains the list of IPv4 connections of the system, \nfrom which it filters all those that are through ports 445 and 138, so \nit is able to isolate those related to SMB traffic, afterwards it tries \nto infect these IPs directly.<\/p>\n\n\n\n<p>To make sure it does not miss any computer to which the user has \naccess, but which is not found on the table, the main thread of the \nthreat scans the entire subnet of the computer, trying to infect all its\n possible IP addresses.<\/p>\n\n\n\n<p>When the main Thread finishes scanning the computer\u2019s subnet. It \nenters a last zone of code, which generates random private \u201c\/ 24\u201d \nsubnets and scans them completely, in order to try to access subnets \ndifferent from that of the infected computer, but accessible by it.<\/p>\n\n\n\n<p>Each of the IP addresses generated by these three subnet scan \napproaches is passed to a function that attempts to infect them by \ntrying to access any of the following units via SMB:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ADMIN$<\/li><li>C$\\WINDOWS<\/li><li>D$\\WINDOWS<\/li><li>E$\\WINDOWS<\/li><\/ul>\n\n\n\n<p>To do this, it makes a call to the \u201cCreateFile\u201d API, passing as the \nfile path the IP address to be infected with the following path \u201c[IP]\\ \nADMIN $ \\ system32 \\ csrss.exe\u201d replacing the first element after the IP\n address for each of the strings of the previous list, generating the \nfollowing network traffic:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"91\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img14.png\" alt=\"\" class=\"wp-image-208\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img14.png 630w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img14-300x43.png 300w\" sizes=\"(max-width: 630px) 100vw, 630px\" \/><\/figure><\/div>\n\n\n\n<p>If it gets access to this file on any computer, it checks the \nexistence of ie11.PNF, to see if it is already infected, otherwise it \ncreates a new one on that computer and gives the date and time extracted\n from User32.dll :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"786\" height=\"207\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img15.png\" alt=\"\" class=\"wp-image-209\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img15.png 786w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img15-300x79.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img15-768x202.png 768w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/figure><\/div>\n\n\n\n<p>If it is able to create that file, it tries to copy itself, for which\n it chooses some of the hardcoded names it has in its strings:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>wmiapsrvce.exe<\/li><li>wmiapsvrce.exe<\/li><li>wmiapsvre.exe<\/li><li>wmiapvsre.exe<\/li><li>wmiaprvse.exe<\/li><li>wmiapsrve.exe<\/li><li>wmiapsrvcx.exe<\/li><\/ul>\n\n\n\n<p>And it generates a copy of itself with that name, on the remote computer through SMB:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"315\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img16-1024x315.png\" alt=\"\" class=\"wp-image-210\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img16-1024x315.png 1024w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img16-300x92.png 300w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img16-768x236.png 768w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img16.png 1276w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>Each time it is able to create both ie11.PNF and the Kwampirs \nexecutable, it calls a function that, depending on the SMB scanning \nroutine used to generate it, passes a number to it as a parameter. If it\n has reached this IP from the scanning logic of the system subnet, it \npasses it a 0, if it has done it through the scanning routine of random \nprivate networks, it passes a 1, if it has reached this address to \nthrough the thread, it passes a 2.<\/p>\n\n\n\n<p>This function generates a string like the following:<br>\n\u201cLucas-PC\\Lucas\\192.168.19.2\\0\\Mon Dec 03 17:38:27 2018\u201d<\/p>\n\n\n\n<p>The string consists of the user and domain with which the other \nsystem has been infected, the IP address of the infected victim \ncomputer, the number that it has received as a parameter and that \nidentifies the SMB scanning algorithm that detected the victim, and the \ndate and time of infection. This string encrypts it with an XOR \nalgorithm using a 203-byte hardcoded key and adds it to a temporary file\n called \u201cLb978YTy.tmp\u201d<\/p>\n\n\n\n<p>Finally, it creates a new copy of itself in System32 of the local \ncomputer, and executes it this time with 3 parameters, to which it \npasses, firstly the IP address of the computer it has just infected, and\n then two more parameters, similar to those it has received in its \nexecution.<\/p>\n\n\n\n<p><strong>Execution with 3 parameters<\/strong><\/p>\n\n\n\n<p>This last branch of execution of the Kwampirs dropper, is in charge \nof generating persistence in remote computers infected by its replica \nexecuted with two parameters, and is also in charge of the execution of \nthis persistence, which corresponds to the service called \u201cWmiApSrvEx\u201d.<\/p>\n\n\n\n<p>To do this, it first extracts the last character from its second and \nthird parameters, and passes it from \u201cchar\u201d to \u201cint\u201d. The second \nparameter, can be a value between 0 and 3, (if it is something \ndifferent, its execution ends). This value corresponds to the remote \ndirectory to which it has been able to access its replica of two \nparameters, thus obtaining the accessible remote path:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>0 = ADMIN$<\/li><li>1 = C$\\WINDOWS<\/li><li>2 = D$\\WINDOWS<\/li><li>3 = E$\\WINDOWS<\/li><\/ul>\n\n\n\n<p>The third parameter, can be a number between 0 and 6, and corresponds\n to the name that has put the copy of itself in the remote computer, as \nfollows:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>0 = wmiapsrvce.exe<\/li><li>1 = wmiapsvrce.exe<\/li><li>2 = wmiapsvre.exe<\/li><li>3 = wmiapvsre.exe<\/li><li>4 = wmiaprvse.exe<\/li><li>5 = wmiapsrve.exe<\/li><li>6 = wmiapsrvcx.exe<\/li><\/ul>\n\n\n\n<p>With this, and the address of the remote computer that has as its \nfirst parameter, tries to create and start the service \u201cWmiApSrvEx\u201d on \nthe remote computer, generating traffic like the following:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"407\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img17.png\" alt=\"\" class=\"wp-image-211\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img17.png 510w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img17-300x239.png 300w\" sizes=\"(max-width: 510px) 100vw, 510px\" \/><\/figure><\/div>\n\n\n\n<p>Depending on whether it is capable of generating and executing the \nservice or not, it makes a call to the registration function in the \n\u201cLb978YTy.tmp\u201d log of infected remote computers, but this time, the \nparameter can be a 3 if everything went well, or a 4 if it has not been \nable to generate or initiate persistence. Thus leaving in the \u201c.tmp\u201d \nfile registry a record of the computers to which he has had access (logs\n with 0.1 or 2) and if it has been able to infect them or not with (3 or\n 4) logs.<\/p>\n\n\n\n<p>If it is not able to infect the computer, it tries to eliminate the \nremote ie11.PNF file, obtaining in this way for it to try again to \ninfect said computer in a future execution.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Technical analysis of Kwampirs RAT<\/h3>\n\n\n\n<p>OrangeWorm within its arsenal has a RAT in Dll format (from now on \nKwampirs) that is executed by \u201cKwampirs Dropper\u201d. This device has the \nfollowing static characteristics:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"115\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_cod01.png\" alt=\"\" class=\"wp-image-212\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_cod01.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_cod01-300x47.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>In all the samples analyzed the ControlTrace () function is exported.\n This has not changed since the Symantec report. Kwampirs RAT depending \non the number of parameters will have a different behavior. The \npossibilities implemented on this occasion are two, when <strong>three<\/strong> parameters and when <strong>four<\/strong> parameters are passed to the function.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"68\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_cod02.png\" alt=\"\" class=\"wp-image-213\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_cod02.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_cod02-300x28.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>The analysis will describe the behavior of Kwampirs RAT in each of the two existing execution branches:<\/p>\n\n\n\n<p><strong>Execution with three parameters<\/strong><\/p>\n\n\n\n<p>The actions that Kwampirs RAT performs once it starts <strong>with three parameters<\/strong> are:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>The first thing it does is to decipher the compromise indicators \n(IOCs from now on). Once deciphered we will see them reflected in \nmemory:In\n the image above you can see the memory segment with all the URIs that \nthe malware will try in order to communicate. To decipher the IOCs the \nmalware uses the following logic:<\/li><li>The next step is to obtain the MACTimes of the user32.dll Dll. This \ngroup modifies the times of certain files that it creates on the disk \nand fixes the times of the user32.dll Dll, as already mentioned \n\u201cKwampirs Dropper\u201d. This is a measure to hinder the subsequent forensic \nanalysis. In the example below we can see the file 3.tmp (random name) \non the left, created by Kwampirs to store the identifiers of the \nhandlers of the Named Pipes that it has created, and on the right the \nuser32.dll dll of the system. If we look carefully, we see how the \nmodification time coincides exactly:<\/li><li>In the <strong>mtmndkb32.PNF<\/strong> file, a generated value is \nsaved from the system date at the time of execution. In each execution \n(Kwampirs Dropper as Kwampirs RAT) it checks the exact date the file was\n created and if not enough time has passed since the file was created, \nit does not run again. This is already described by Symantec in its \nreport and the \u201ccurrent\u201d samples have not changed their behavior.<\/li><li>In the event that Kwampirs RAT is downloaded, a module interacts with the <strong>mkdiawb3.PNF<\/strong>\n file before entering the network communication execution flow. This \nfile stores hashes in md5 of the modules. An example of the file with \nthe hash of the encrypted and unencrypted module can be seen below:This group calculates the hash on the file (module) after encrypting it and coding it in base64.<br>\nIf we do a hash to the downloaded module we will see how it matches with what is stored:\n<\/li><li>Kwampirs RAT creates different files with extension \u201c.TMP\u201d in the \ntemporary directory of the user and in the case of being executed with a\n user with administrator privileges renames the files and places it in \nthe directory C:\\windows\\inf with extension PNF (of which we have spoken\n previously). To copy them, it uses the cmd.exe command as shown below \nin an execution:<\/li><li>After moving the files, it launches a thread that contacts the \ncommand and control server (C2 from now on). This thread invokes the \nStartProcess () function. This thread receives modules from C2 with the \nhash of the signed module and checks it before executing them. During \nthis thread, a temporary file is generated where information of the \ncomputer is stored and then used in the requests. This file is called \ndigirps.PNF. Once the digirps.PNF file is decrypted you can see how it \nstores computer information such as the MAC Address:<br>\n\nAgain to decrypt the file we use the same algorithm but with a \ndifferent key and the MAC of the computer where the sample was executed \nis indeed obtained. The analysis carried out has not shown that a first \ninteraction with this file adds more useful information than the MAC \nAddress.\nAs already mentioned, network communications to C2 are performed in \nthis function. Until it receives a \u201cgood\u201d response, Kwampirs RAT sends \nthe following type of packets (in this case you can see how a C2 sends a\n successful response):\n\nWe see how the C2 has returned a code {XXX}: <strong>hash_md5_modulo<\/strong>. After receiving the module hash, the C2 sends it to the next GET:\n\nIn this case what it has returned is a module (Dll as well) that it \ninjects in memory and launches as a new thread of execution (these \nmodules are not dumped to disk). In this case, the module allows \nexecuting commands in the operating system. In a first iteration the \nmodule executes commands to gather information:\n\n\nThe module that Kwampirs RAT has downloaded is mapped into memory as follows:\n\n\nAfter loading it, a thread starts invoking a function named CF. For \nthis sample it is necessary that all the modules come with the function \nCF () to start the logic. The name of the DLL once mapped on this \noccasion is <strong>cmdDLL.dll<\/strong> which confirms that it is a module ready to execute commands.\nNext you can see the module\u2019s loop that reads the .data section with the commands and that will be launched with cmd.exe:\n\nAnd the following screenshot shows the part of the network that sends\n the POST request of the module whose capture of the network traffic was\n seen before:\n<\/li><li>After exiting the thread, the Sleep () function is executed with a random time and returns to point 5 to repeat the process.<\/li><\/ol>\n\n\n\n<p>When the Kwampirs RAT is executed with three parameters, the API that makes the HTTP request sometimes returns error <strong>12029<\/strong>\n (it could not establish the HTTP connection). In this case Kwampirs RAT\n will try to boot the malware with the CreateProcessAsUser () function \nas follows:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"398\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img34.png\" alt=\"\" class=\"wp-image-214\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img34.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img34-300x161.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>It looks like there are two instances of Kwampirs, but one with the \nuser SYSTEM and another with the user Lucas. This makes sense since \nthere are occasions where the user SYSTEM cannot exit through the proxy \nof the organization and with this technique aims to take the user who \nmay have configured the proxy and thus exit. The user instance tries \nagain to launch the HTTP requests.<\/p>\n\n\n\n<p><strong>Execution with four parameters<\/strong><\/p>\n\n\n\n<p>Kwampirs RAT when booted with 4 parameters is used to communicate through Named Pipes with another instance of Kwampirs RAT.<\/p>\n\n\n\n<p>The last parameter is the one that will give the name to the file \nthat will store the handles of the named pipes created by that same \ninstance. When booting with this amount of parameters, it calls the \nCreatePipe () function twice to create two Named Pipes. The pipe \nhandlers (in decimal) are stored in a file created in C:\\Windows\\Temp:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"693\" height=\"193\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img35.png\" alt=\"\" class=\"wp-image-215\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img35.png 693w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img35-300x84.png 300w\" sizes=\"(max-width: 693px) 100vw, 693px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>232 = E8<\/li><li>228 = E4<\/li><\/ul>\n\n\n\n<p>The handles of the process show that e8 and e4 are File handles:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"646\" height=\"830\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img36.png\" alt=\"\" class=\"wp-image-216\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img36.png 646w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img36-233x300.png 233w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><\/figure><\/div>\n\n\n\n<p>This mode of operation, as seen during the analysis, is used to \ncommunicate the Kwampirs RAT process started as SYSTEM (starting with \nthe service) with the process started as the user owner of the current \nsession of the machine.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"333\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img37.png\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img37.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img37-300x135.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>In the previous screenshot you can see how the process rundll32.exe \n(starting with SYSTEM, in this case it would be the master) that could \nnot go to the internet is about to write in a pipe to send the data to \nthe process that has been created with the CreateProcessAsUser () \nfunction. This data as you can see in the image is a numerical value and\n a URI. It is seen in the image how the handler where you write \nWriteFile () is 0x240 (it is seen at the top of the stack) that if we \nopen the handles of the rundll32 master process we see that it is a \nNamed Pipe:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"135\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img38.png\" alt=\"\" class=\"wp-image-218\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img38.png 656w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img38-300x62.png 300w\" sizes=\"(max-width: 656px) 100vw, 656px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"504\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img39.png\" alt=\"\" class=\"wp-image-219\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img39.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img39-300x204.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>If the handles of the rundll32 master process are opened with a tool \nlike ProcessHacker, it will be seen how it has an open handle on the \nrundll32 process, created with the user without privileges (from now on \nrundll32 slave):<br>\n<\/p>\n\n\n\n<p>Another similar situation that occurs during execution to the \nprevious one is when the master rundll32.exe opens the explorer.exe \nprocess. This is done with the OpenProcess () api and then \nOpenProcessToken () in order to obtain the token from the explorer.exe \nprocess (normally the owner of this process is the authenticated user \nand is the one most likely to have the configured proxy):<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"670\" height=\"410\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img40.png\" alt=\"\" class=\"wp-image-220\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img40.png 670w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img40-300x184.png 300w\" sizes=\"(max-width: 670px) 100vw, 670px\" \/><\/figure><\/div>\n\n\n\n<p>The following is a description of the entire sequence of actions \ncarried out for the rundll32 master process to send information to the \nrundll32 slave after having seen some peculiarities previously. The \nfollowing image shows the master process rundll32.exe that just opened \nthe slave process with the OpenProcess and will open a temporary file \nwith wfopen:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"314\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img41.png\" alt=\"\" class=\"wp-image-221\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img41.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img41-300x127.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>The temporary file contains the identifiers of the handles created in the rundll32 SLAVE process:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"258\" height=\"227\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img42.png\" alt=\"\" class=\"wp-image-222\"\/><\/figure><\/div>\n\n\n\n<p>In memory of the master process we will find those handles in their hexadecimal value:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"242\" height=\"84\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img43.png\" alt=\"\" class=\"wp-image-223\"\/><\/figure><\/div>\n\n\n\n<p>Once these handles are located, the master intends to duplicate them \nin order to obtain access to those handles in their process and that \ncorrespond to those of the slave process to communicate with each other:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"224\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img44.png\" alt=\"\" class=\"wp-image-224\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img44.png 740w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img44-300x91.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>In this execution, the value of lpTargetHandle was 0x290 and it is \nlinked (or duplicated) with one of the rundll32.exe slave processes that\n it just read from the temporary file.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"689\" height=\"551\" src=\"https:\/\/lab52.es\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img45.png\" alt=\"\" class=\"wp-image-225\" srcset=\"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img45.png 689w, https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img45-300x240.png 300w\" sizes=\"(max-width: 689px) 100vw, 689px\" \/><\/figure><\/div>\n\n\n\n<p>Summing up the operation, the master rundll32.exe opens the slave  process. Then it reads the temporary one where the handles are (in  decimal) of type pipe that the slave has created. The master makes a  duplicate handle of the two pipes of the slave in its process and thus  pass all the information through these pipes. A situation where this  logic is used is when the master process initiated by the service cannot  navigate. In this case, it creates the slave with the token of the user  who owns the explorer.exe and tries to navigate with the URIs provided  by the master due to the pipes created.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>References<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>[1] <a href=\"https:\/\/www.symantec.com\/blogs\/threat-intelligence\/orangeworm-targets-healthcare-us-europe-asia\">https:\/\/www.symantec.com\/blogs\/threat-intelligence\/orangeworm-targets-healthcare-us-europe-asia<\/a><\/li><li>[2] <a href=\"https:\/\/content.connect.symantec.com\/sites\/default\/files\/2018-04\/Orangeworm%20IOCs.pdf\">https:\/\/content.connect.symantec.com\/sites\/default\/files\/2018-04\/Orangeworm%20IOCs.pdf<\/a><\/li><li>[3] https:\/\/www.ccn-cert.cni.es\/ca\/seguretat-al-dia\/noticies-d-actualitat\/6156-orangeworm-apt-orientada-al-sector-medico.html<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compromise indicators<\/h3>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>\n<strong>IOC<\/strong>\n<\/td><td>\n<strong>Tipo<\/strong>\n<\/td><\/tr><tr><td>\n<strong>07f5fa96d31ed75edba8699f53a75502ade214b34469163011ced5b94e393f32<\/strong>\n<strong>12c6c48e1e52ebca20f4b890922fb31965317865d35ac04d216ad8b78f866999<\/strong>\n<strong>1486746bdba1161cfc15f37011c815911c33a2abd657198b835ac5f8eede663c<\/strong>\n<strong>281c2ad26346305dac90ce33c2c417b6a7271f990ba9fa5c7db65d6f2e501e94<\/strong>\n<strong>2d801f75a52f65ffb053ae052cad45a919afd431f5ca46e86abe3d9274c903e4<\/strong>\n<strong>2f04f6b04a735d4ccbc196942acbd3f7a64bc588a0107fc9e344df62a41ad85d<\/strong>\n<strong>303379ebb41bcb39bc8c5b7c102cff1a90a2ee207a51e0c0fd83c0348ea436a5<\/strong>\n<strong>34ce48c7481118aac4b5d772a64e0edf8e107a7f606913c49493d5dbc06f96d7<\/strong>\n<strong>39f8dd73baa0dd67607784b40fb4ad5881b50bb69a59eee2a844b615753062ed<\/strong>\n<strong>3b3c9a372188fea46b05e9253e03473fda963aaa76fdd459590ecca9db5af9fb<\/strong>\n<strong>3d0dbd119e9f1dd57db3331834c5206c4df321f3f6799c9a622f1a8abe462b2d<\/strong>\n<strong>64defebf7e600d92685672c4b4d3d2ed3fc6cca27663a65c42df61843573297b<\/strong>\n<strong>75d93cd55d54a38a9ec47efe26f4a2c4c8c14328175fdd8d69efc0187cef6a2e<\/strong>\n<strong>768fab04b19c18e375183bd762eda75359da3a964aa97000639cdfdd066f6edd<\/strong>\n<strong>7f9531e47146095f681564cfd5d322af3def6468202f62c6215af29c0453fb0a<\/strong>\n<strong>83a0b4476a0f50321308e4e1b4d680430e29a53b9669174d8113d6dcbca817e2<\/strong>\n<strong>85f8fa27a5f013d38a3c4a3742fbc43df90196326110fda9ad05ac2366d3e525<\/strong>\n<strong>908d608f2b39b37a2a72cbdd96476acc1159341927d41103370432ddf148b4d9<\/strong>\n<strong>97dd250670cef14e04db0145efe7fcfc945018b681e87e48a6f012fd7f79d02e<\/strong>\n<strong>a2d2584e1c46bc2954aaf47957f7fb48bc8209cdf04c1ccd226d689094a2b761<\/strong>\n<strong>b489e5469938f1410a955ab26dc2cb2c81923c75f545df3c351767d5f13b728d<\/strong>\n<strong>b570b07b43cdef3fe2f636a9db6da3dd1e2cb68d980a5fe5b3225713d4ce3e8f<\/strong>\n<strong>c783f6180147abfa55e8c6dc137b506b595ea111589a1ba4a870778b1f309b8c<\/strong>\n<strong>cade857aa5735467a69af2267f6c6179286bd5d1ad61b60332a21527b69d9736<\/strong>\n<strong>ced9a61ebaa8de7aa360ad2d24be26e2474fa4164118f8e32f4e2b2aba6ce511<\/strong>\n<strong>d1953d2c07d0572063364f34de99950407d07bd376dd9817ac799d5628ae5339<\/strong>\n<strong>d881198d26d10fc3a3ace876d4ef0db373b586de28a8b489248f3ea1840ba683<\/strong>\n<strong>e3bc08f7a12f9b68a73de99ecd0aaef1447bbbba9e35f518d42fd0e751be858f<\/strong>\n<strong>f8eb3a2054d6bc51fc0a127f9c01c4aaf238c0c681c36164a716268dc452ff91<\/strong>\n<\/td><td>\nHashes analyzed\n<\/td><\/tr><\/tbody><\/table>\n","protected":false},"excerpt":{"rendered":"<p>The OrangeWorm group was named and described by the Symantec Company in different blog entries [1] [2]. We would highlight from these entries that it is a group that has been operational since 2015 and is focused on attacking the health, pharmaceutical, technological, manufacturing and logistics sectors. The sector most affected is healthcare as described [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":195,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-114","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-uncategorised","8":"entry"},"featured_image_src":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img01.png","featured_image_src_square":"https:\/\/lab52.io\/blog\/wp-content\/uploads\/2019\/04\/Orangeworm_img01.png","author_info":{"display_name":"Dex","author_link":"https:\/\/lab52.io\/blog\/author\/dex\/"},"_links":{"self":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/114"}],"collection":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/comments?post=114"}],"version-history":[{"count":11,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/114\/revisions"}],"predecessor-version":[{"id":330,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/posts\/114\/revisions\/330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media\/195"}],"wp:attachment":[{"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/media?parent=114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/categories?post=114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lab52.io\/blog\/wp-json\/wp\/v2\/tags?post=114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}