{"id":51253,"date":"2023-03-30T19:54:03","date_gmt":"2023-03-30T19:54:03","guid":{"rendered":"https:\/\/packetstormsecurity.com\/news\/view\/34480\/Ironing-Out-The-macOS-Details-Of-A-Smooth-Operator.html"},"modified":"2023-03-30T19:54:03","modified_gmt":"2023-03-30T19:54:03","slug":"ironing-out-the-macos-details-of-a-smooth-operator","status":"publish","type":"post","link":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/","title":{"rendered":"Ironing Out The macOS Details Of A Smooth Operator"},"content":{"rendered":"<p>Ironing out (the macOS details) of a Smooth Operator<\/p>\n<p>The 3CX supply chain attack, gives us an opportunity to analyze a trojanized macOS application<\/p>\n<p>by: Patrick Wardle \/ March 29, 2023<\/p>\n<link rel=\"shortcut icon\" href=\"..\/images\/logoApple.ico\">\n<link rel=\"stylesheet\" type=\"text\/css\" href=\"..\/css\/style.css\">\n<link href=\"..\/css\/ss-social.css\" rel=\"stylesheet\">\n<link href=\"..\/css\/ss-standard.css\" rel=\"stylesheet\">\n<div readability=\"6.9942196531792\">\n<p>Objective-See&#8217;s research, tools, and writing, are supported by the &#8220;Friends of Objective-See&#8221; such as:<\/p>\n<p> <center> <\/center>\n<\/div>\n<div class=\"note\" readability=\"12.133333333333\">\n???? ???? Want to play along?<\/p>\n<p>As \u201cSharing is Caring\u201d I\u2019ve uploaded the malicious dynamic library <a href=\"https:\/\/github.com\/objective-see\/Malware\/raw\/main\/SmoothOperator.zip\">libffmpeg.dylib<\/a> to our public macOS malware collection. The password is: infect3d<\/p>\n<p>\n&#8230;please though, don&#8217;t infect yourself! <\/p>\n<\/div>\n<p><\/p>\n<h3 id=\"background\">Background<\/h3>\n<p>Earlier today, several vendors uncovered a massive supply chain attack, spreading malware dubbed SmoothOperator:<\/p>\n<p><center readability=\"4.0315457413249\"> <\/p>\n<blockquote class=\"twitter-tweet\" readability=\"10.750788643533\">\n<p lang=\"en\" dir=\"ltr\">Earlier today <a href=\"https:\/\/twitter.com\/CrowdStrike?ref_src=twsrc%5Etfw\">@CrowdStrike<\/a> reported a supply chain attack targeting the 3CX Voice Over Internet Protocol (VOIP) Windows desktop client.<\/p>\n<p>&#8211; 600,000 companies use it<br \/>&#8211; 12,000,000 users<br \/>&#8211; <a href=\"https:\/\/twitter.com\/Sophos?ref_src=twsrc%5Etfw\">@Sophos<\/a> has identified a MacOS variant infected<br \/>&#8211; Currently attributed to Lazarus Group<\/p>\n<p>\u2014 vx-underground (@vxunderground) <a href=\"https:\/\/twitter.com\/vxunderground\/status\/1641249699746267138?ref_src=twsrc%5Etfw\">March 30, 2023<\/a><\/p><\/blockquote>\n<p> <\/center><\/p>\n<p>For details on the supply chain attack, affecting 3CX, you can read the following:<\/p>\n<p>While these analyses were a great start, they all were missing one very important piece! Details on the macoS infection and the specific malicious component(s).<\/p>\n<p>Specifically, though the reports noted 3CX\u2019s macOS application may have been trojanized this was not conclusively confirmed, with one vendor noting, \u201cat this time, we cannot confirm that the Mac installer is similarly trojanized\u201d.<\/p>\n<p>\u2026sounds like its up to us to get to the bottom on this!<\/p>\n<h3 id=\"triage\">Triage<\/h3>\n<p>The <a href=\"https:\/\/www.crowdstrike.com\/blog\/crowdstrike-detects-and-prevents-active-intrusion-campaign-targeting-3cxdesktopapp-customers\/\">CrowdStrike report<\/a> noted that they had seen malicious macOS activity emanating from 3CX\u2019s macOS application \u2026and were kind enough to provide a name and hash of a disk image they believed was infected. This was the key to starting our investigation, so a big thanks to them!<\/p>\n<p>We\u2019ll start with this disk image, 3CXDesktopApp-18.12.416.dmg (<code>SHA-1: 3DC840D32CE86CEBF657B17CEF62814646BA8E98<\/code>):<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/objective-see.org\/images\/blog\/blog_0x73\/dmg.png\" width=\"100%\" class=\"center\"> <center>Trojanized Disk Image?<\/center> <\/p>\n<p>As you can see, it contains a single application, named \u201c3CX Desktop App\u201d.<\/p>\n<p>If we check its code-signing information, we can see not only is it validly signed by the 3CX developer, but also <strong>notarized<\/strong> by Apple! The latter means Apple checked it for malware \u201cand none was detected\u201d \u2026yikes!<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/objective-see.org\/images\/blog\/blog_0x73\/app.png\" width=\"100%\" class=\"center\"> <center>Trojanized Application<\/center> <\/p>\n<p>\nNotarization means the application will be allowed to run on recent versions of macOS, with the OS not blocking it. <\/p>\n<p>\u2026at this point, if I\u2019m being honest, the thought crossed my mind that maybe the reason none of the vendors (with their millions of dollars and large malware analysis teams) hadn\u2019t detailed the macOS trojanization mechanism was because there wasn\u2019t one? I mean, Apple had notarized the application, which in a way is giving it their sample of approval.<\/p>\n<p>I brushed this thought aside and kept digging \u2026which as the application was almost 400mb, was no trivial task.<\/p>\n<div readability=\"8\">\n<pre>\n% du -h \/Volumes\/3CXDesktopApp-18.12.416\/3CX\\ Desktop\\ App.app\n... 381M \/Volumes\/3CXDesktopApp-18.12.416\/3CX Desktop App.app <\/pre>\n<\/div>\n<p>I (eventually) came across a binary named <code>libffmpeg.dylib<\/code><br \/>\nburied deep within the App\u2019s <code>Contents\/Frameworks\/Electron\\ Framework.framework\/Versions\/A\/Libraries<\/code> directory.<\/p>\n<p>Its <code>SHA-1<\/code> hash is <code>769383fc65d1386dd141c960c9970114547da0c2<\/code>, and it was <a href=\"https:\/\/www.virustotal.com\/gui\/file\/a64fa9f1c76457ecc58402142a8728ce34ccba378c17318b3340083eeb7acc67\">uploaded to VirusTotal<\/a> early today where it was not flagged by any of the AV engines as being malicious:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/objective-see.org\/images\/blog\/blog_0x73\/dylib.png\" width=\"100%\" class=\"center\"> <center>A malicious dynamic library?<\/center> <\/p>\n<p>Using the file command, we see it\u2019s a Mach-O universal binary with 2 architectures: x86_64 &amp; arm64:<\/p>\n<div readability=\"10\">\n<pre>\n% file 3CX\\ Desktop\\ App.app\/Contents\/Frameworks\/Electron\\ Framework.framework\/Versions\/A\/Libraries\/libffmpeg.dylib libffmpeg.dylib: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64] libffmpeg.dylib: Mach-O 64-bit dynamically linked shared library x86_64\nlibffmpeg.dylib: Mach-O 64-bit dynamically linked shared library arm64 <\/pre>\n<\/div>\n<p>A quick triage of this binary revealed XOR loops, timing checks, dynamically resolved APIs, and string obfuscations \u2026all shady! ????<\/p>\n<p>Time to dig deeper!<\/p>\n<h3 id=\"analysis-of-libffmpegdylib\">Analysis of <code>libffmpeg.dylib<\/code><\/h3>\n<p>In this section we\u2019ll analyze the malicious logic of the <code>libffmpeg.dylib<\/code> binary. We\u2019ll focus on the Intel (<code>x86_64<\/code>) versions as the Arm version doesn\u2019t appear to be infected!<\/p>\n<p>At the start of the Intel version, a thread is spawned via a function called <code>run_avcodec<\/code><br \/>\nThis kicks off a (thread) function at 0x48430:<\/p>\n<div class=\"highlight\" readability=\"17\">\n<pre tabindex=\"0\"><code class=\"language-nasm\" data-lang=\"nasm\"><span><span>EntryPoint:\n<\/span><\/span><span><span><span>0<\/span><span>x000000000004b180<\/span> xor eax, eax <\/span><\/span><span><span><span>0<\/span><span>x000000000004b182<\/span> jmp _run_avcodec <\/span><\/span><span><span><span>...<\/span>\n<\/span><\/span><span><span>\n<\/span><\/span><span><span>_run_avcodec:\n<\/span><\/span><span><span><span>0<\/span><span>x0000000000048400<\/span> push rax <\/span><\/span><span><span><span>0<\/span><span>x0000000000048401<\/span> movabs rax, <span>0xaaaaaaaaaaaaaaaa<\/span>\n<\/span><\/span><span><span><span>0<\/span><span>x000000000004840b<\/span> mov rdi, rsp\n<\/span><\/span><span><span><span>0<\/span><span>x000000000004840e<\/span> mov <span>qword<\/span> [rdi], rax\n<\/span><\/span><span><span><span>0<\/span><span>x0000000000048411<\/span> lea rdx, <span>qword<\/span> [sub_48430]\n<\/span><\/span><span><span><span>0<\/span><span>x0000000000048418<\/span> xor esi, esi <\/span><\/span><span><span><span>0<\/span><span>x000000000004841a<\/span> xor ecx, ecx\n<\/span><\/span><span><span><span>0<\/span><span>x000000000004841c<\/span> call imp___stubs__pthread_create <\/span><\/span><span><span>\n<\/span><\/span><span><span><span>...<\/span><\/span><\/span><\/code><\/pre>\n<\/div>\n<p>The function at <code>0x48430<\/code> (named <code>sub_48430<\/code> in the disassembly) is where things get interesting!<\/p>\n<p>A quick triage of this function shows that its rather massive but more importantly contains various anti-analysis approaches aimed at thwarting static analysis. For example here is a snippet of decompilation showing a string begin de-XOR\u2019d:<\/p>\n<div class=\"highlight\" readability=\"8\">\n<pre tabindex=\"0\"><code class=\"language-C\" data-lang=\"C\"><span><span><span>do<\/span> {\n<\/span><\/span><span><span> <span>*<\/span>(<span>int8_t<\/span> <span>*<\/span>)(rsp <span>+<\/span> rax <span>+<\/span> <span>0x1b40<\/span>) <span>=<\/span> <span>*<\/span>(<span>int8_t<\/span> <span>*<\/span>)(rsp <span>+<\/span> rax <span>+<\/span> <span>0x1b40<\/span>) <span>^<\/span> <span>0x7a<\/span>;\n<\/span><\/span><span><span> rax <span>=<\/span> rax <span>+<\/span> <span>0x1<\/span>;\n<\/span><\/span><span><span>} <span>while<\/span> (rax <span>!=<\/span> <span>0x32<\/span>);<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>Clearly, it is not trivial to understand this solely via static analysis, so let\u2019s leverage dynamic analysis (read: use a debugger).<\/p>\n<p>Debugging a dynamic library is a bit tricky, as it can\u2019t be executed in a standalone manner. Not to worry, we can whip up a simple loader that will load it (or any passed in dylib) via the <code>dlopen<\/code> API:<\/p>\n<div class=\"highlight\" readability=\"10\">\n<pre tabindex=\"0\"><code class=\"language-C\" data-lang=\"C\"><span><span><span>#import &lt;dlfcn.h&gt;\n<\/span><\/span><\/span><span><span><span>#import &lt;Foundation\/Foundation.h&gt;\n<\/span><\/span><\/span><span><span><span><\/span>\n<\/span><\/span><span><span><span>int<\/span> <span>main<\/span>(<span>int<\/span> argc, <span>const<\/span> <span>char<\/span> <span>*<\/span> argv[]) {\n<\/span><\/span><span><span> <\/span><\/span><span><span> <span>void<\/span> <span>*<\/span> handle <span>=<\/span> dlopen(argv[<span>1<\/span>], RTLD_LOCAL <span>|<\/span> RTLD_LAZY);\n<\/span><\/span><span><span> <\/span><\/span><span><span> dispatch_main();\n<\/span><\/span><span><span>\n<\/span><\/span><span><span> <span>return<\/span> <span>0<\/span>;\n<\/span><\/span><span><span>}<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>Once this is compiled (as an <code>x86_64<\/code> program, as we want to debug the <code>x86_64<\/code> version of <code>libffmpeg.dylib<\/code>), we launch it via the <code>lldb<\/code> debugger:<\/p>\n<div readability=\"7\">\n<pre> % lldb dlopen_x64 libffmpeg.dylib <\/pre>\n<\/div>\n<p>We can then run the loader (<code>dlopen_x64<\/code>) via a debugger passing in the malicious dylib <code>libffmpeg.dylib<\/code>.<\/p>\n<p>Setting a breakpoint on <code>pthread_create<\/code> allows the debugger to break right before the thread function of interest to us, is executed. This is important as we don\u2019t know exactly where the library will be loaded in memory (and thus can\u2019t initially set a breakpoint on the address of the thread function).<\/p>\n<div readability=\"13\">\n<pre> % lldb dlopen_x64 libffmpeg.dylib ... (lldb) b pthread_create\n(lldb) run Process 21118 stopped\n* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x00007ff81c81c445 libsystem_pthread.dylib`pthread_create\nlibsystem_pthread.dylib`pthread_create:\n-&gt; 0x7ff81c81c445 +0&gt;: xorl %r8d, %r8d <\/pre>\n<\/div>\n<p>Once broken we can use the <code>image list<\/code> debugger command to find the address that the <code>libffmpeg.dylib<\/code> library is loaded, and from this, the address of the thread function. Then, we can set a breakpoint such the debugger will break once its about to be executed.<\/p>\n<p>Hooray, now we\u2019re in the debugger at the start of the thread function \u2026let\u2019s start stepping through it. We won\u2019t go through all its details, but instead highlight, well, highlights!<\/p>\n<p>First, it de-XORs components to build the following path: <code>~\/Library\/Application Support\/3CX Desktop App\/.session-lock<\/code>. It then attempts to open this file via the <code>open<\/code> API. (In the debugger the <code>RDI<\/code> register will hold the first argument (the file name) passed to <code>open<\/code>):<\/p>\n<div readability=\"10\">\n<pre>\nTarget 0: (dlopen_x64) stopped.\n(lldb) x\/s 0x3041946f0\n0x3041946f0: \"%s\/Library\/Application Support\/3CX Desktop App\/%s\" ... libffmpeg.dylib`___lldb_unnamed_symbol1736:\n-&gt; 0x10a0484f5 +341&gt;: callq 0x10a208858 ; symbol stub for: open Target 0: (dlopen_x64) stopped.\n(lldb) x\/s $rdi\n0x304193ee0: \"\/Users\/patrick\/Library\/Application Support\/3CX Desktop App\/.session-lock\"\n<\/pre>\n<\/div>\n<p>If this file does not exist the function will exit (so we\u2019ll create a blank file here, so we can keep debugging).<\/p>\n<p>The function then executes logic to query the host to get the OS version, computer name, etc, etc. On my machine (macOS 13.3), once it has gathered this information and concatenated it together it looks something like this: <code>\"13.3;Patricks-MacBook-Pro.local;6180;14\"<\/code>.<\/p>\n<p>It then generates a unique identifier (UUID) and write this out to a file named <code>.main_storage<\/code> also in the <code>~\/Library\/Application Support\/3CX Desktop App\/<\/code> directory:<\/p>\n<div readability=\"10\">\n<pre>\n% hexdump -C ~\/Library\/Application Support\/3CX Desktop App\/.main_storage\n00000000 49 4d 48 4f 1f 42 4b 1f 57 4a 4f 4b 43 57 4d 1c |IMHO.BK.WJOKCWM.|\n00000010 4a 43 57 4d 48 1b 19 57 49 4f 4c 4e 4b 19 43 4e |JCWMH..WIOLNK.CN|\n00000020 19 4b 19 1c 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a 7a |.K..zzzzzzzzzzzz|\n00000030 5e b8 46 1e 7a 7a 7a 7a |^.F.zzzz|\n<\/pre>\n<\/div>\n<p>This file is \u201cencrypted\u201d with the XOR key <code>0x7a<\/code>.<\/p>\n<p>After various anti-debugging logic (e.g. timing checks) it builds a URL to query. We can easily dump this in the debugger to reveal that it is <code>https:\/\/pbxsources.com\/queue<\/code>:<\/p>\n<div readability=\"7\">\n<pre>\n...\nProcess 18702 stopped (lldb) po $rax\nhttps:\/\/pbxsources.com\/queue <\/pre>\n<\/div>\n<div class=\"note\" readability=\"10\">\nThe domain pbxsources.com is listed by various vendors as an IoC to detect the Windows variant of this malware. <\/p>\n<p>It\u2019s not surprising the macOS variant used the same network infrastructure.<\/p>\n<\/div>\n<p>After setting a static user-agent (<code>Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/108.0.5359.128 Safari\/537.36<\/code>) and adding various host info as HTTP headers, it connects out to the decrypted URL.<\/p>\n<p>Unfortunately the URL the malware is trying to reach (pbxsources.com) is now offline:<\/p>\n<div readability=\"8\">\n<pre> % nslookup pbxsources.com\nServer: 1.1.1.1\nAddress: 1.1.1.1#53 ** server can't find pbxsources.com: NXDOMAIN <\/pre>\n<\/div>\n<p>\u2026so the malware doesn\u2019t get the <code>HTTP 200 OK<\/code> it wants, and thus goes off to snooze.<\/p>\n<div class=\"highlight\" readability=\"9\">\n<pre tabindex=\"0\"><code class=\"language-C\" data-lang=\"C\"><span><span>rax <span>=<\/span> strcmp(var_23F8, <span>\"200\"<\/span>); <\/span><\/span><span><span>\n<\/span><\/span><span><span>...\n<\/span><\/span><span><span><span>\/\/no match?\n<\/span><\/span><\/span><span><span><span><\/span><span>do<\/span> {\n<\/span><\/span><span><span> time(rbp);\n<\/span><\/span><span><span> <span>if<\/span> (<span>0x0<\/span> <span>&gt;=<\/span> r14) {\n<\/span><\/span><span><span> <span>break<\/span>;\n<\/span><\/span><span><span> }\n<\/span><\/span><span><span> sleep(<span>0xa<\/span>);\n<\/span><\/span><span><span>} <span>while<\/span> (true);<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>As the C&amp;C server is offline, our dynamic analysis comes to an end. But that\u2019s ok! Continued static analysis appears to show the malware expects to download a 2<sup>nd<\/sup>-stage payload. This appears to be saved as a file named <code>UpdateAgent<\/code> (in the Application Support\/3CX Desktop App\/ directory)<\/p>\n<p>In the annotated decompilation, you can see that once the file is written out, the malware sets it to be executable (via <code>chmod<\/code>), then executes it via the <code>popen<\/code> API:<\/p>\n<div class=\"highlight\" readability=\"16\">\n<pre tabindex=\"0\"><code class=\"language-C\" data-lang=\"C\"><span><span><span>\/\/write out 2nd-stage payload\n<\/span><\/span><\/span><span><span><span>\/\/ path (likely): \"UpdateAgent\"\n<\/span><\/span><\/span><span><span><span><\/span>rax <span>=<\/span> fopen<span>$<\/span>DARWIN_EXTSN(r13, <span>\"wb\"<\/span>);\n<\/span><\/span><span><span>fwrite(var_23F8 <span>+<\/span> <span>0x4<\/span>, <span>0xfffffffffffffffc<\/span>, <span>0x1<\/span>, rax);\n<\/span><\/span><span><span>fflush(rax);\n<\/span><\/span><span><span>fclose(rax);\n<\/span><\/span><span><span>\n<\/span><\/span><span><span><span>\/\/make +x <\/span><\/span><\/span><span><span><span><\/span>chmod(r13, <span>0x1ed<\/span>);\n<\/span><\/span><span><span> <\/span><\/span><span><span><span>\/\/add \"\"&gt; \/dev\/null\"\n<\/span><\/span><\/span><span><span><span><\/span>sprintf(r12, rbp);\n<\/span><\/span><span><span>popen<span>$<\/span>DARWIN_EXTSN(r12, <span>\"r\"<\/span>);<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>I don\u2019t have access to this binary, what it does is a mystery.<\/p>\n<h3 id=\"detection\">Detection<\/h3>\n<p>Let\u2019s end by talking how to detect the macOS variant of the SmoothOperator malware.<\/p>\n<p>First some IoCs (with the caveat that I don\u2019t know what \u201c3CX Desktop App.app\u201d normally does, but as we saw, the malicious library, <code>libffmpeg.dylib<\/code>, interacts w\/ the following files)<\/p>\n<p>File based IoCs (found in <code>~\/Library\/Application Support\/3CX Desktop App\/<\/code>)<\/p>\n<ul>\n<li><code>UpdateAgent<\/code><\/li>\n<li><code>.main_storage<\/code><\/li>\n<li><code>.session-lock<\/code><\/li>\n<\/ul>\n<p>In terms of domains the malware will attempt to connect to, we can, as noted by Snorre Fagerland on Twitter, simply de-XOR the entire <code>libffmpeg.dylib<\/code> binary with the key <code>0x7a<\/code> to recover a comprehensive list<\/p>\n<p><center readability=\"1.6190476190476\"> <\/p>\n<blockquote class=\"twitter-tweet\" readability=\"5.6666666666667\">\n<p lang=\"en\" dir=\"ltr\">Thanks for this! Concur on the xor &#8211; if people want a whole heap of indicators, just xor the entire file with 0x7a and see what falls out. <a href=\"https:\/\/t.co\/XNMfDyYr1I\">pic.twitter.com\/XNMfDyYr1I<\/a><\/p>\n<p>\u2014 Snorre Fagerland (@fstenv) <a href=\"https:\/\/twitter.com\/fstenv\/status\/1641339337152385025?ref_src=twsrc%5Etfw\">March 30, 2023<\/a><\/p><\/blockquote>\n<p> <\/center> <\/p>\n<p>Embedded Domains:<\/p>\n<ul>\n<li><code>officestoragebox.com\/api\/biosync<\/code><\/li>\n<li><code>visualstudiofactory.com\/groupcore<\/code><\/li>\n<li><code>azuredeploystore.com\/cloud\/images<\/code><\/li>\n<li><code>msstorageboxes.com\/xbox<\/code><\/li>\n<li><code>officeaddons.com\/quality<\/code><\/li>\n<li><code>sourceslabs.com\/status<\/code><\/li>\n<li><code>zacharryblogs.com\/xmlquery<\/code><\/li>\n<li><code>pbxcloudeservices.com\/network<\/code><\/li>\n<li><code>pbxphonenetwork.com\/phone<\/code><\/li>\n<li><code>akamaitechcloudservices.com\/v2\/fileapi<\/code><\/li>\n<li><code>azureonlinestorage.com\/google\/storage<\/code><\/li>\n<li><code>msedgepackageinfo.com\/ms-webview<\/code><\/li>\n<li><code>glcloudservice.com\/v1\/status<\/code><\/li>\n<li><code>pbxsources.com\/queue<\/code><\/li>\n<li><code>www.3cx.com\/blog\/event-trainings\/<\/code><\/li>\n<\/ul>\n<p>This list of URLs appear to be same as Window variant.<\/p>\n<h3 id=\"conclusion\">Conclusion<\/h3>\n<p>Today we added a missing puzzle piece to the 3CX supply chain attack. Here, for the first time we uncovered the trojanization component of the macOS component! Moreover, we thoroughly analyzed this component, while providing IoCs for detection.<\/p>\n<p>Now I\u2019m off to hunt for that 2<sup>nd<\/sup>-stage payload (and to sleep) Y\u2019all stay safe!\n<\/p>\n<div class=\"note\">\n<b><span>Interested in Mac Malware Analysis Techniques?<\/span><\/b><\/p>\n<table readability=\"4.811320754717\">\n<tr readability=\"4.811320754717\">\n<td> <img decoding=\"async\" src=\"https:\/\/objective-see.org\/images\/blog\/blog_0x6B\/book.png\" width=\"300px;\"> <\/td>\n<td width=\"75%\"> You&#8217;re in luck, as I&#8217;ve written a book on this topic! It&#8217;s 100% free online while all royalties from sale of the printed version donated to the Objective-See Foundation. <center> <a class=\"inlineLink\" href=\"https:\/\/taomm.org\">The Art Of Mac Malware, Vol. 0x1: Analysis<\/a> <\/center> <\/td>\n<\/tr>\n<tr>\n<td>&nbsp;<\/td>\n<td>&nbsp;<\/td>\n<\/tr>\n<tr readability=\"4.7707317073171\">\n<td> <img decoding=\"async\" src=\"https:\/\/objectivebythesea.org\/v6\/images\/speakers\/Patrick%20Wardle.png\" height=\"300px;\"> <\/td>\n<td width=\"75%\"> Or, come attend our macOS security conference, &#8220;<a class=\"inlineLink\" href=\"https:\/\/objectivebythesea.org\/v6\/index.html\">Objective by the Sea<\/a>&#8221; v6.0 in sunny Spain! &#8230;where I&#8217;m teaching a class on Mac Malware Detection &amp; Analysis <center> Sign up for the <a class=\"inlineLink\" href=\"https:\/\/objectivebythesea.org\/v6\/taomm.html\">The Art of Mac Malware<\/a> training. <\/center> <\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>READ MORE <a href=\"https:\/\/packetstormsecurity.com\/news\/view\/34480\/Ironing-Out-The-macOS-Details-Of-A-Smooth-Operator.html\">HERE<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>READ MORE HERE&#8230;<\/p>\n","protected":false},"author":2,"featured_media":51254,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[60],"tags":[10446],"class_list":["post-51253","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-packet-storm","tag-headlinemalwarebotnetapple"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ironing Out The macOS Details Of A Smooth Operator 2026 | ThreatsHub Cybersecurity News<\/title>\n<meta name=\"description\" content=\"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security &amp; Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ironing Out The macOS Details Of A Smooth Operator 2026 | ThreatsHub Cybersecurity News\" \/>\n<meta property=\"og:description\" content=\"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security &amp; Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/\" \/>\n<meta property=\"og:site_name\" content=\"ThreatsHub Cybersecurity News\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-30T19:54:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/objective-see.org\/images\/blog\/blog_0x73\/dmg.png\" \/>\n<meta name=\"author\" content=\"TH Author\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@threatshub\" \/>\n<meta name=\"twitter:site\" content=\"@threatshub\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TH Author\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/\"},\"author\":{\"name\":\"TH Author\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/person\\\/12e0a8671ff89a863584f193e7062476\"},\"headline\":\"Ironing Out The macOS Details Of A Smooth Operator\",\"datePublished\":\"2023-03-30T19:54:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/\"},\"wordCount\":1453,\"publisher\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/ironing-out-the-macos-details-of-a-smooth-operator.png\",\"keywords\":[\"headline,malware,botnet,apple\"],\"articleSection\":[\"Packet Storm\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/\",\"name\":\"Ironing Out The macOS Details Of A Smooth Operator 2026 | ThreatsHub Cybersecurity News\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/ironing-out-the-macos-details-of-a-smooth-operator.png\",\"datePublished\":\"2023-03-30T19:54:03+00:00\",\"description\":\"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/ironing-out-the-macos-details-of-a-smooth-operator.png\",\"contentUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/ironing-out-the-macos-details-of-a-smooth-operator.png\",\"width\":1316,\"height\":1040},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/ironing-out-the-macos-details-of-a-smooth-operator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"headline,malware,botnet,apple\",\"item\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/tag\\\/headlinemalwarebotnetapple\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ironing Out The macOS Details Of A Smooth Operator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/\",\"name\":\"ThreatsHub Cybersecurity News\",\"description\":\"%%focuskw%% Threat Intel \u2013 Threat Intel Services \u2013 CyberIntelligence \u2013 Cyber Threat Intelligence - Threat Intelligence Feeds - Threat Intelligence Reports - CyberSecurity Report \u2013 Cyber Security PDF \u2013 Cybersecurity Trends - Cloud Sandbox \u2013- Threat IntelligencePortal \u2013 Incident Response \u2013 Threat Hunting \u2013 IOC - Yara - Security Operations Center \u2013 SecurityOperation Center \u2013 Security SOC \u2013 SOC Services - Advanced Threat - Threat Detection - TargetedAttack \u2013 APT \u2013 Anti-APT \u2013 Advanced Protection \u2013 Cyber Security Services \u2013 Cybersecurity Services -Threat Intelligence Platform\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#organization\"},\"alternateName\":\"Threatshub.org\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#organization\",\"name\":\"ThreatsHub.org\",\"alternateName\":\"Threatshub.org\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Threatshub_Favicon1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/Threatshub_Favicon1.jpg\",\"width\":432,\"height\":435,\"caption\":\"ThreatsHub.org\"},\"image\":{\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/threatshub\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.threatshub.org\\\/blog\\\/#\\\/schema\\\/person\\\/12e0a8671ff89a863584f193e7062476\",\"name\":\"TH Author\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g\",\"caption\":\"TH Author\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ironing Out The macOS Details Of A Smooth Operator 2026 | ThreatsHub Cybersecurity News","description":"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.","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:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/","og_locale":"en_US","og_type":"article","og_title":"Ironing Out The macOS Details Of A Smooth Operator 2026 | ThreatsHub Cybersecurity News","og_description":"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.","og_url":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/","og_site_name":"ThreatsHub Cybersecurity News","article_published_time":"2023-03-30T19:54:03+00:00","og_image":[{"url":"https:\/\/objective-see.org\/images\/blog\/blog_0x73\/dmg.png","type":"","width":"","height":""}],"author":"TH Author","twitter_card":"summary_large_image","twitter_creator":"@threatshub","twitter_site":"@threatshub","twitter_misc":{"Written by":"TH Author","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#article","isPartOf":{"@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/"},"author":{"name":"TH Author","@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/person\/12e0a8671ff89a863584f193e7062476"},"headline":"Ironing Out The macOS Details Of A Smooth Operator","datePublished":"2023-03-30T19:54:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/"},"wordCount":1453,"publisher":{"@id":"https:\/\/www.threatshub.org\/blog\/#organization"},"image":{"@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2023\/03\/ironing-out-the-macos-details-of-a-smooth-operator.png","keywords":["headline,malware,botnet,apple"],"articleSection":["Packet Storm"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/","url":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/","name":"Ironing Out The macOS Details Of A Smooth Operator 2026 | ThreatsHub Cybersecurity News","isPartOf":{"@id":"https:\/\/www.threatshub.org\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#primaryimage"},"image":{"@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#primaryimage"},"thumbnailUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2023\/03\/ironing-out-the-macos-details-of-a-smooth-operator.png","datePublished":"2023-03-30T19:54:03+00:00","description":"ThreatsHub Cybersecurity News | ThreatsHub.org | Cloud Security & Cyber Threats Analysis Hub. 100% Free OSINT Threat Intelligent and Cybersecurity News.","breadcrumb":{"@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#primaryimage","url":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2023\/03\/ironing-out-the-macos-details-of-a-smooth-operator.png","contentUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2023\/03\/ironing-out-the-macos-details-of-a-smooth-operator.png","width":1316,"height":1040},{"@type":"BreadcrumbList","@id":"https:\/\/www.threatshub.org\/blog\/ironing-out-the-macos-details-of-a-smooth-operator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.threatshub.org\/blog\/"},{"@type":"ListItem","position":2,"name":"headline,malware,botnet,apple","item":"https:\/\/www.threatshub.org\/blog\/tag\/headlinemalwarebotnetapple\/"},{"@type":"ListItem","position":3,"name":"Ironing Out The macOS Details Of A Smooth Operator"}]},{"@type":"WebSite","@id":"https:\/\/www.threatshub.org\/blog\/#website","url":"https:\/\/www.threatshub.org\/blog\/","name":"ThreatsHub Cybersecurity News","description":"%%focuskw%% Threat Intel \u2013 Threat Intel Services \u2013 CyberIntelligence \u2013 Cyber Threat Intelligence - Threat Intelligence Feeds - Threat Intelligence Reports - CyberSecurity Report \u2013 Cyber Security PDF \u2013 Cybersecurity Trends - Cloud Sandbox \u2013- Threat IntelligencePortal \u2013 Incident Response \u2013 Threat Hunting \u2013 IOC - Yara - Security Operations Center \u2013 SecurityOperation Center \u2013 Security SOC \u2013 SOC Services - Advanced Threat - Threat Detection - TargetedAttack \u2013 APT \u2013 Anti-APT \u2013 Advanced Protection \u2013 Cyber Security Services \u2013 Cybersecurity Services -Threat Intelligence Platform","publisher":{"@id":"https:\/\/www.threatshub.org\/blog\/#organization"},"alternateName":"Threatshub.org","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.threatshub.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.threatshub.org\/blog\/#organization","name":"ThreatsHub.org","alternateName":"Threatshub.org","url":"https:\/\/www.threatshub.org\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2025\/05\/Threatshub_Favicon1.jpg","contentUrl":"https:\/\/www.threatshub.org\/blog\/coredata\/uploads\/2025\/05\/Threatshub_Favicon1.jpg","width":432,"height":435,"caption":"ThreatsHub.org"},"image":{"@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/threatshub"]},{"@type":"Person","@id":"https:\/\/www.threatshub.org\/blog\/#\/schema\/person\/12e0a8671ff89a863584f193e7062476","name":"TH Author","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/066276f086d5155df79c850206a779ad368418a844da0182ce43f9cd5b506c3d?s=96&d=mm&r=g","caption":"TH Author"}}]}},"_links":{"self":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/posts\/51253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/comments?post=51253"}],"version-history":[{"count":0,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/posts\/51253\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/media\/51254"}],"wp:attachment":[{"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/media?parent=51253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/categories?post=51253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.threatshub.org\/blog\/wp-json\/wp\/v2\/tags?post=51253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}