{"id":89183,"date":"2020-06-18T14:47:55","date_gmt":"2020-06-18T09:17:55","guid":{"rendered":"https:\/\/blogs_admin.quickheal.com\/?p=89183"},"modified":"2020-06-18T17:17:27","modified_gmt":"2020-06-18T11:47:27","slug":"maze-ransomware-continues-threat-consumers","status":"publish","type":"post","link":"https:\/\/www.quickheal.com\/blogs\/maze-ransomware-continues-threat-consumers\/","title":{"rendered":"Maze ransomware continues to be a threat to the consumers"},"content":{"rendered":"<p>Maze is a recently highlighted ransomware among the ever-growing list of ransomware families. The ransomware is active from the past one year, although it came into limelight due to its new approach of publishing sensitive data of infected customers publicly.<\/p>\n<p>The malware uses different techniques to gain entry like the use of exploit kits or email impersonation. These phishing emails are having a Word document attachment that contains macros to run the malware in the system.<\/p>\n<p>Maze uses CHA-CHA algorithm for encryption and its key is encrypted using the RSA algorithm. Maze can run with or without mutex \u2014it uses some Russian IPs for the webserver to sends information from the victim system(s). It uses RSA encryption request for CnC communication and it will not encrypt the system for the specific region by checking keyboard type.<\/p>\n<p><strong>Stage \u2013 I<\/strong><\/p>\n<p><strong>VBA MACRO<\/strong><\/p>\n<p>The attached document file has a form containing an input box in which the number array of encrypted URL and path is present. The document file contains an ActiveX object. When it is executed, URL and path are decrypted post which it calls URLDownloadToFileA() that downloads an executable to the specified location.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89184 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/1.png\" alt=\"\" width=\"832\" height=\"511\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/1.png 832w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/1-300x184.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/1-768x472.png 768w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/1-635x390.png 635w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/1-789x485.png 789w\" sizes=\"(max-width: 832px) 100vw, 832px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 1. URLDownloadToFileA() Call with their parameters<\/em><\/h6>\n<p>&nbsp;<\/p>\n<p>The number array is read from text box then converted into characters and concatenated to form a URL and path where the file is downloaded. Sometimes it also uses PowerShell to download the file. In most of the cases, file is downloaded at \u201cC:\\Windows\\temp\u201d location.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89185 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/2.png\" alt=\"\" width=\"449\" height=\"213\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/2.png 449w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/2-300x142.png 300w\" sizes=\"(max-width: 449px) 100vw, 449px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 2. Characters stored in Number Array<\/em><\/h6>\n<p>&nbsp;<\/p>\n<p><strong>Stage \u2013 II<\/strong><\/p>\n<p><strong>A. CRYPTER<\/strong><\/p>\n<p>The first stage of Maze ransomware is custom cryptor. This cryptor is a packed one with few imports. It loads libraries by calling LoadLibrary() and GetProcAddress() from kernel32.dll. In this cryptor, function names are stored with their adler32 checksum.<\/p>\n<p>The cryptor is for anti-debugging, it passes junk strings to the function OutputDebugStringW().<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89186 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/3.png\" alt=\"\" width=\"852\" height=\"608\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/3.png 852w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/3-300x214.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/3-768x548.png 768w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/3-547x390.png 547w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/3-789x563.png 789w\" sizes=\"(max-width: 852px) 100vw, 852px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 3. Call to OutputDebugStringW()<\/em><\/h6>\n<p>In the below code, it checks whether the file is present or not, if present it will terminate. Similarly, it also checks specific command-line arguments if it is present it will change execution flow. Then malware loads the resource where actual DLL is present. The loaded resource is encrypted and XOR operation is used with key 0x41. After decryption, we get base64 encoded data.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89187 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/4.png\" alt=\"\" width=\"574\" height=\"426\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/4.png 574w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/4-300x223.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/4-525x390.png 525w\" sizes=\"(max-width: 574px) 100vw, 574px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 4. Xor Loop and API resolution<\/em><\/h6>\n<p>After copying all data onto the stack, API names are formed and then it calls Loadlibrary() Win32 API. Then it decodes base64 data by calling CryptStringToBinaryA() API. The decrypted buffer is again decrypted using CHA-CHA 20 algorithm which brings the actual payload of Maze ransomware. Along with payload (which is a DLL of Maze), it also decrypts shellcode. By using CreateThread() API, it executes the shellcode.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89188 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/5.png\" alt=\"\" width=\"589\" height=\"321\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/5.png 589w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/5-300x163.png 300w\" sizes=\"(max-width: 589px) 100vw, 589px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 5. Call to CreateThread()<\/em><\/h6>\n<p>In this payload code, it first loads the base address of kernel32 for PEB. The below code shows the loading of the address.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89189 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/6.png\" alt=\"\" width=\"478\" height=\"201\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/6.png 478w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/6-300x126.png 300w\" sizes=\"(max-width: 478px) 100vw, 478px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 6. The address is loaded from PEB<\/em><\/h6>\n<p>The shellcode allocates memory using VirtualAlloc() and copies DLL file to newly allocated space. Then it creates a thread and executes code from DLL. This code changes bytes at the original entry point and then jump to OEP.<\/p>\n<p><strong>B. MAZE PAYLOAD<\/strong><\/p>\n<p>In decrypted payload, it first loads all the APIs and then does patching of dbgUiRemoteBreakin from ntdl.dll. It is one of the anti-debugging techniques it uses to avoid attachment of debugger.<\/p>\n<p>First it calls VirtualProtect() on <strong>dbgUiRemoteBreakin<\/strong> with PAGE_EXECUTE_READWRITE as new flNewProtect. Then it replaces byte 6A with C3 by simple mov instruction. So, if someone tries to attach debugger it will get failed.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89190 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/7.png\" alt=\"\" width=\"578\" height=\"163\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/7.png 578w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/7-300x85.png 300w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 7. Copy 0xC3 at dbgUiRemoteBreakin Entry point<\/em><\/h6>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89191 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/8.png\" alt=\"\" width=\"861\" height=\"146\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/8.png 861w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/8-300x51.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/8-768x130.png 768w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/8-650x110.png 650w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/8-789x134.png 789w\" sizes=\"(max-width: 861px) 100vw, 861px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 8. Code before and after patching<\/em><\/h6>\n<p>Then it enumerates running processes using Process32First() and process32Next(). It calls APIs using \u2018je\u2019 instruction and address is pushed onto the stack which is executed after API call. The call is replaced with \u2018push\u2019 and \u2018jz\u2019 or \u2018je\u2019 instruction.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89192 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/9.png\" alt=\"\" width=\"888\" height=\"166\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/9.png 888w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/9-300x56.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/9-768x144.png 768w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/9-650x122.png 650w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/9-789x147.png 789w\" sizes=\"(max-width: 888px) 100vw, 888px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 9. Call to Process32NextW () using jz instruction<\/em><\/h6>\n<p>After process enumeration, it will obfuscate all the names with its algorithm which uses XMM registers. Then it calculates the hash of this obfuscated string which is then compared with some hardcoded hashes. Some of them are:<\/p>\n<p>Procmon64.exe: 0x776E0635<\/p>\n<p>Procexp64.exe: 0x78020640<\/p>\n<p>Ida.exe: 0x33840485<\/p>\n<p>Dumpcap.exe: 0x5FB805C5<\/p>\n<p>X32dbg.exe: 0x5062053<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89193 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/10.png\" alt=\"\" width=\"553\" height=\"136\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/10.png 553w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/10-300x74.png 300w\" sizes=\"(max-width: 553px) 100vw, 553px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 10: Compare hashes with running process hashes<\/em><\/h6>\n<p>When any of the process hash matches it calls TerminateProcess() and exits the running process.<\/p>\n<p>It will not encrypt files for specific keyboard type. To get keyboard type it calls the function GetUserDefaultUILanguage(). For eg:<\/p>\n<p>Russsian : 0x419 \/\/ NOT Encrypt For this value<\/p>\n<p>Ukrainian : 0x422 \/\/ NOT Encrypt For this value<\/p>\n<p>Serbian : 0x7C1A \/\/ NOT Encrypt For this value<\/p>\n<p>en_US : 0x409 \/\/ Encrypt For this value<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89194 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/11.png\" alt=\"\" width=\"526\" height=\"100\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/11.png 526w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/11-300x57.png 300w\" sizes=\"(max-width: 526px) 100vw, 526px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 11. Check value return by GetUserDefaultUILanguage()<\/em><\/h6>\n<p>Then It first communicates with CnC server where the IP list is hardcoded, all below mentioned IP seems to belong to Russia.<\/p>\n<p>91.218.114.4<\/p>\n<p>91.218.114.11<\/p>\n<p>91.218.114.25<\/p>\n<p>91.218.114.26<\/p>\n<p>91.218.114.32<\/p>\n<p>91.218.114.37<\/p>\n<p>91.218.114.38<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89195 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/12.png\" alt=\"\" width=\"546\" height=\"164\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/12.png 546w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/12-300x90.png 300w\" sizes=\"(max-width: 546px) 100vw, 546px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 12. Hardcoded Ip list<\/em><\/h6>\n<p>Then data is sent to CnC on the first request: Data which is sent is Username, Computername, OsVersion.<\/p>\n<p>Malware create mutex with unique ID unique ID is created using SHA(GetComputerName() + VolumeID()) .<\/p>\n<p>For the ransomware marker, it creates a unique file on root and each folder.<\/p>\n<p><strong>Maze Encryption Process:<\/strong><\/p>\n<p>Malware selects files for encryption based on the extension. It excludes the following extensions:<\/p>\n<p>\u00b7 Exe<\/p>\n<p>\u00b7 Dll<\/p>\n<p>\u00b7 Sys<\/p>\n<p>\u00b7 lnk<\/p>\n<p>It also excludes the following files:<\/p>\n<p>\u00b7 Decrypt-Files.txt<\/p>\n<p>\u00b7 Autorun.inf<\/p>\n<p>\u00b7 Boot.ini<\/p>\n<p>\u00b7 Desktop.ini<\/p>\n<p>\u00b7 Temp\/000.bmp<\/p>\n<p>Excluded folders:<\/p>\n<p>%windows%, @gaming%, %programdata%, %tor Brower%, %local Settings%, %appdata% etc<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89196 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/13.png\" alt=\"\" width=\"778\" height=\"101\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/13.png 778w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/13-300x39.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/13-768x100.png 768w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/13-650x84.png 650w\" sizes=\"(max-width: 778px) 100vw, 778px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 13. Checking folder names and if the same found it will not encrypt the folder.<\/em><\/h6>\n<p><strong>Encryption process:<\/strong><\/p>\n<p>It first creates key and then exports it in the \u201cc:\\programdata\\data1.tmp\u201d folder. Then it drops a ransom note in each folder before encryption. Later it will just import the key from this file and call \u201cCryptEncrypt()\u201d.<\/p>\n<p>It retrieves drive letters and then determine type of drive using GetDriveType(). Further it enumerates using API calls FindFirstFileA() and FindNextFileA().<\/p>\n<p>It deletes shadow copy by creating a fake path for wmic and then calls delete recover by calling CreateProcessW()It encrypts files using CHA-CHA algorithm and the key of chacha is encrypted using RSA. For this, it uses crypto APIs. Encrypted files are having a marker at the end which is \u201866116166\u2019.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89197 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/14.png\" alt=\"\" width=\"577\" height=\"474\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/14.png 577w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/14-300x246.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/14-475x390.png 475w\" sizes=\"(max-width: 577px) 100vw, 577px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 14. Encrypted File by Maze ransomware<\/em><\/h6>\n<p>It creates a thread for each drive, which then again call create thread function for each folder which does the encryption. Encryption will start from the root of C: or D: and parallelly it also accesses the shared drive by using WNetShareEnum() API. The same encryption function is used for encrypting shared drive files. The first folder which is encrypted is \u201c$Recycle Bin\u201d.<\/p>\n<p>CreateThread() with following function for each folder. File is opened as follows. File is encrypted by calling CryptEncrypt() and it is renamed by calling moveFileEx() with extension.<\/p>\n<p><strong>Encrypted File:<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-89198 size-full\" src=\"https:\/\/blogs_admin.quickheal.com\/wp-content\/uploads\/2020\/06\/15.png\" alt=\"\" width=\"670\" height=\"219\" srcset=\"https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/15.png 670w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/15-300x98.png 300w, https:\/\/www.quickheal.com\/blogs\/wp-content\/uploads\/2020\/06\/15-650x212.png 650w\" sizes=\"(max-width: 670px) 100vw, 670px\" \/><\/p>\n<h6 style=\"text-align: center;\"><em>Fig 15. File After encryption<\/em><\/h6>\n<p><strong>Maze Malware uses many tactics for anti-Analysis:<\/strong><\/p>\n<ul>\n<li>APIs are resolved at runtime.<\/li>\n<li>Indirect calling of API &amp; functions using JE &amp; JNE instructions.<\/li>\n<li>Patching DbgUiRemoteTracking to avoid attaching of debugger at runtime.<\/li>\n<li>Checking being debugged flag.<\/li>\n<li>Checking for VM.<\/li>\n<li>Checks RAM &amp; hardware size by using API \u2013 GlobalMemoryStatusEx &amp; GetDiskeSpaceW.<\/li>\n<li>Check process names by calculating its hashes.<\/li>\n<\/ul>\n<p><strong>Prevention measures to stay away from ransomware<\/strong><\/p>\n<p>Common infection vectors used by Maze Ransomware are phishing emails with MS Office attachments and fake\/phishing websites laced with Exploit Kits. Hence, we advise our end users to exercise caution while handling emails from unknown sources, downloading MS Office attachments, enabling macros, and clicking on suspicious links.<\/p>\n<p><strong>Indicators of compromise<\/strong><\/p>\n<p>49B28F16BA496B57518005C813640EEB<\/p>\n<p>BD9838D84FD77205011E8B0C2BD711E0<\/p>\n<div><strong>Subject Matter Expert<\/strong><br \/>\nPreksha Saxena | Quick Heal Security Labs<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Maze is a recently highlighted ransomware among the ever-growing list of ransomware families. The ransomware is active from the past one year, although it came into limelight due to its new approach of publishing sensitive data of infected customers publicly. The malware uses different techniques to gain entry like the use of exploit kits or [&hellip;]<\/p>\n","protected":false},"author":45,"featured_media":89199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-89183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/posts\/89183"}],"collection":[{"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/comments?post=89183"}],"version-history":[{"count":6,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/posts\/89183\/revisions"}],"predecessor-version":[{"id":89205,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/posts\/89183\/revisions\/89205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/media\/89199"}],"wp:attachment":[{"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/media?parent=89183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/categories?post=89183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.quickheal.com\/blogs\/wp-json\/wp\/v2\/tags?post=89183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}