Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
BangersInMyKnickers
Nov 3, 2004

I have a thing for courageous dongles

OSI bean dip posted:

Isn't there a limit to the number AD users and groups?

not really. you don't want any one object enrolled in too many groups because you can have problems with the tokens becoming too large but at the end of the day its just a database and you can scale that thing like crazy just throw more hardware at it

Adbot
ADBOT LOVES YOU

BangersInMyKnickers
Nov 3, 2004

I have a thing for courageous dongles

spankmeister posted:

Also while Azure AD would be a decent choice, price concerns notwithstanding, Australian citizens might object to hosting their PII in the US or on systems possibly controlled by a US company under the Patriot Act.

Although Australia being a FVEY member that might be less of an issue.

e: I know the average EU citizen would probably flip their poo poo about hosting their government PII in the US. (Even though most of them share everything anyway through social media.)

MS has gotten pretty good about being able to make guarantees that your tenant will only be hosted out of the geographic area you specify and considering the relatively small amount of bandwidth going in and out of that country I would have to imagine there's already a substantial datacenter presence in the country. higher ed does similar things with guarantees that they're tenant will only be hosted inside the continental US

anthonypants
May 6, 2007

by Nyc_Tattoo
Dinosaur Gum

BangersInMyKnickers posted:

MS has gotten pretty good about being able to make guarantees that your tenant will only be hosted out of the geographic area you specify and considering the relatively small amount of bandwidth going in and out of that country I would have to imagine there's already a substantial datacenter presence in the country. higher ed does similar things with guarantees that they're tenant will only be hosted inside the continental US
plus if microsoft can get them to build a datacenter in aus, or get the government to give them huge waivers on taxes/whatever for that datacenter, it will be a win for microsoft

power botton
Nov 2, 2011

For a while I think the top limit was like 2 billion RIDs ever issued but most large companies who even have to consider planning for that sort of thing have moved past AD 2003 or whatever.

power botton
Nov 2, 2011

There were probably hacks to increase it though even back then.

fishmech
Jul 16, 2006

by VideoGames
Salad Prong

anthonypants posted:

plus if microsoft can get them to build a datacenter in aus, or get the government to give them huge waivers on taxes/whatever for that datacenter, it will be a win for microsoft

would also be a great way to pivot into getting way higher priority on any future government contracts

Volmarias
Dec 31, 2002

EMAIL... THE INTERNET... SEARCH ENGINES...

Same

mod saas
May 4, 2004

Grimey Drawer

test korea best korea

Wiggly Wayne DDS
Sep 11, 2010



eta to *.webex.com xss: https://bugs.chromium.org/p/project-zero/issues/detail?id=1096

Subjunctive
Sep 12, 2006

✨sparkle and shine✨


quote:

the user must click OK for code execution to happen

oh that's fine then

A Man With A Plan
Mar 29, 2010
Fallen Rib

Subjunctive posted:

oh that's fine then

I mean what kind of idiot would just click ok on whatever box popped up?

:negative:

dpkg chopra
Jun 9, 2007

Fast Food Fight

Grimey Drawer

mod saas posted:

test korea best korea

jre
Sep 2, 2011

To the cloud ?



mod saas posted:

test korea best korea

Wiggly Wayne DDS
Sep 11, 2010



Subjunctive posted:

oh that's fine then
an argument's brewing over there

anthonypants
May 6, 2007

by Nyc_Tattoo
Dinosaur Gum

Wiggly Wayne DDS posted:

an argument's brewing over there
https://twitter.com/FiloSottile/status/823669045245321221

Subjunctive
Sep 12, 2006

✨sparkle and shine✨

Wiggly Wayne DDS posted:

an argument's brewing over there

if someone's arguing that one-click exploit deployment is ok, I'm not sure I want to read it

vodkat
Jun 30, 2012



cannot legally be sold as vodka

I look forward to reading more about how this plays out in the webex thread

Wiggly Wayne DDS
Sep 11, 2010



it fizzled out, no one's saying that yet

Jabor
Jul 16, 2010

#1 Loser at SpaceChem
Pretty sure no-one thinks this is a good fix for the issue, but if the developer thinks they've addressed it sufficiently then it makes sense to release the details so everyone else can make up their mind about it.

I mean, what's the alternative? Say "we don't think your fix is good enough" followed by ... releasing the details after 90 days because the developer is happy with their solution and hasn't done anything more?

Shaggar
Apr 26, 2006
lmao it doesn't even warn you that it might not be starting a meeting.

the correct solution is to sign and verify whatever the meeting package is so you don't have some goofy url based filtering at all.

apseudonym
Feb 25, 2011

Jabor posted:

Pretty sure no-one thinks this is a good fix for the issue, but if the developer thinks they've addressed it sufficiently then it makes sense to release the details so everyone else can make up their mind about it.

I mean, what's the alternative? Say "we don't think your fix is good enough" followed by ... releasing the details after 90 days because the developer is happy with their solution and hasn't done anything more?

This is correct.

Subjunctive
Sep 12, 2006

✨sparkle and shine✨

it looked from the bug that Tavis just said "good work Cisco, that was fast" rather than "uh, no, that's still bad", so we don't know what Cisco would have done with the remaining 75+ days in the disclosure window

Shaggar
Apr 26, 2006
did cisco say that it was a temporary fix until they came out with a real one? cause if that's what happened then it would make sense to give them the full timeline since their intention is a real fix.

hackbunny
Jul 22, 2007

I haven't been on SA for years but the person who gave me my previous av as a joke felt guilty for doing so and decided to get me a non-shitty av
why do I keep raving about eyepyramid's string encryption? because you see, it's actually quite interesting. let's take the typical encrypted string:
C# code:
    public static string tXmat8k68AD15JNkI0ZLvLcbh9NKczW8BvlBZb0NKczW8BvlBZbAmBtKbwu6wn6A()
    {
        // compiler generated "on error resume next" code excised
        byte[] hgrghk = new byte[24] { 46, 248, 3, 205, 79, 223, 48, 194, 157, 28, 73, 207,
            64, 110, 193, 246, 239, 23, 169, 135, 200, 121, 110, 230 };
        byte[] tmpwebshell = new byte[24] { 118, 67, 213, 247, 212, 109, 179, 250, 185,
            125, 44, 82, 118, 64, 226, 0, 125, 212, 185, 61, 135, 177, 30, 246 };
        byte[] carrier = new byte[24] { 85, 196, 232, 151, 14, 97, 20, 134, 82, 26, 214,
            184, 145, 233, 79, 79, 57, 122, 131, 156, 209, byte.MaxValue, 197, 11 };
        return Secrets.DecryptString(hgrghk, tmpwebshell, carrier);
    }
encrypted strings all look like this, the only thing that changes is the byte arrays. I renamed the module that deals with this encryption scheme "Secrets" and the function that decrypts strings "DecryptString". note that the variable names (hgrghk, tmpwebshell and carrier) were derived by the decompiler from the argument names of DecryptString, which the obfuscator, whether intentionally or mistakenly, didn't rename, and they provide hints to their meaning. we'll see later. for now, let's have a look at DecryptString:
C# code:
public sealed class Secrets
{
    internal static string DecryptString(byte[] hgrghk, byte[] tmpwebshell, byte[] carrier)
    {
        string s;
        byte[] bytes;
        
        bytes = Module7.DecryptData(hgrghk, Module8.GetMasterTDESKey(),
            Module8.GetMasterTDESIV());
        s = Encoding.Unicode.GetString(bytes);
        if (!string.IsNullOrEmpty(s) && Encoding.Unicode.GetBytes(s).SequenceEqual(bytes))
            return s;

        bytes = Module7.DecryptData(tmpwebshell, Module8.GetMasterTDESKey(),
            Module8.GetMasterTDESIV());
        s = Encoding.Unicode.GetString(bytes);
        if (!string.IsNullOrEmpty(s) && Encoding.Unicode.GetBytes(s).SequenceEqual(bytes))
            return s;
    
        bytes = Module7.DecryptData(carrier, Module9.GetMasterTDESKey(),
            Module9.GetMasterTDESIV());
        s = Encoding.Unicode.GetString(bytes);
        if (!string.IsNullOrEmpty(s) && Encoding.Unicode.GetBytes(s).SequenceEqual(bytes))
            return s;

        return "";
    }

    // ...
as you can see, it decrypts the string from one of the three byte arrays, whichever decrypts correctly. without showing too much code, the decryption algorithm is:
  • let E be the byte array to be decrypted
  • let M be a sequence of bytes (master key)
  • let K be MD5(M)
  • let IV be SHA256(M)
  • let P be 3DES-CBC(K, IV, E)
not terribly competent use of cryptography but pretty straightforward. what makes it interesting is where M comes from. M is a serialized object, specifically an array of booleans serialized by System.Runtime.Serialization.Formatters.Binary.BinaryFormatter. the array of booleans is what makes this relatively crappy obfuscation true encryption and very, very interesting. every time the malware needs to decrypt a sensitive string (url, hostname, username, password etc.), it recalculates the whole array with a series of very interesting runtime checks:
C# code:
    internal static void InitializeMasterKey()
    {
        MasterKeyBits[0] = WasDebuggerDetected();
        MasterKeyBits[1] = AreRunExeOrGhkExeOrStkrExeInstalled();
        MasterKeyBits[2] = ApplicationHasExeExtension();
        MasterKeyBits[3] = ApplicationDoesSystemAutorun();
        MasterKeyBits[4] = RunningFromDesktop();
        MasterKeyBits[5] = RunningFromDocuments();
        MasterKeyBits[6] = RunningFromSystem();
        MasterKeyBits[7] = RunningFromTemp();
        MasterKeyBits[8] = StartedManuallySoonAfterDrop();
        MasterKeyBits[9] = StartedByAutorun();
        MasterKeyBits[10] = ApplicationHasTmpExtension();
        MasterKeyBits[11] = RunningInVMAndApplicationOlderThan5Days();
        MasterKeyBits[12] = Module9.GetExeHasBasename1();
        MasterKeyBits[13] = Module5.CachedDoesHardwareIdFileExist();
    }
first of all, note that the last two booleans are always false, which restricts the encryption to a 14 bit key - extremely easy to bruteforce (which I did). the checks range from the predictable to the clever to the extremely interesting, let's see them quick:
  • WasDebuggerDetected: was a debugger ever attached to this process? if we don't know yet, is a debugger attached right now? predictably, this must always be false: if we attach a debugger, this flag will eventually go true (and stay true until the process terminates), the key will go bad, none of the sensitive strings will ever decrypt again and the malware will stop working, hindering analysis. it's a simple but really clever idea that completely kills automated deobfuscation through symbolic execution, and makes analyzing a live sample a real pain in the rear end
  • AreRunExeOrGhkExeOrStkrExeInstalled: I mentioned that the sample I analyzed seems to be a simple dropper. it can drop up to three executables, internally named run.exe, ghk.exe and stkr.exe (on disk, they have different names - for example, run.exe can be called vasqy.exe, vrtdrv.exe, winxdrv.exe etc.). this check returns true if any of the three is currently installed in the system directory (windows\system32). surprisingly, bruteforcing the key reveals that this check must return true, which means an apparent chicken-and-egg problem: how can the dropper download those executables, if downloading them requires them to be already installed? well, if you read the code of DecryptString carefully, you'll see that there is, in fact, a second, distinct master key, used to decrypt the third byte array ("carrier"). we'll look at this in detail, later
  • ApplicationHasExeExtension: whether the program's executable file is something.exe. true for "hgrghk", false for "tmpwebshell". this is our first hint that hgrghk, tmpwebshell and carrier are three distinct agents of this malware, sharing a common code base, but fulfilling different roles
  • ApplicationDoesSystemAutorun: whether the currently running program is configured to autorun from the system-wide Run registry key. true for "hgrghk", false for "tmpwebshell", which suggests that hgrghk is the persistent agent
  • RunningFromDesktop: whether we're running from the desktop folder, or a subfolder of the desktop. must always be false. a really simple anti-analysis roadblock
  • RunningFromDocuments: same except from the documents folder
  • RunningFromSystem: whether we're running from the system32 directory. predictably, true for "hgrghk", false for "tmpwebshell"
  • RunningFromTemp: whether we're running from %tmp%. unsurprisingly, false for "hgrghk", true for "tmpwebshell"
  • StartedManuallySoonAfterDrop: a relatively complex check. the process start time must be within 2 minutes from the executable's last write time, and the executable must not be configured for autorun. false for "hgrghk", true for "tmpwebshell", meaning that tmpwebshell agents are downloaded to %tmp%, executed immediately and must not autorun at logon. an anti-analysis trick to ensure that agents only work in a restricted set of expected circumstances
  • StartedByAutorun: another non-trivial - and pretty clever - check. it finds a process named explorer.exe, takes it start time, adds 2 minutes, and returns true if the current process was started before then and if the current executable is configured to autorun. pretty much ensures that a malware analyst can't run an unmodified copy of this malware without some awkward gymnastics. mirrors the previous check, and must be true for "hgrghk" and false for "tmpwebshell"
  • ApplicationHasTmpExtension: whether the program's executable file is something.tmp. false for "hgrghk", true for "tmpwebshell"
  • RunningInVMAndApplicationOlderThan5Days: eyepyramid has a couple checks against running in a vm, and this is one of them. it queries wmi namespace root\cimv2 with query SELECT * FROM Win32_ComputerSystemProduct, which returns an object that represents the computer hardware. it queries this object's Name property, and sees if it contains the substring "virtual", which typically indicates a virtual machine (try it yourself in a windows vm, using builtin utility wbemtest). then, it takes the main executable's version number, x.y.z.w, and extracts the z and w fields, and uses them to build a timestamp (jan 1st 2000 + z days + w * 2 seconds). my sample has version 4.5.5519.26999, which comes out to february 10th 2015, two seconds to 3 PM, which agrees with the linker timestamp (Tue Feb 10 15:03:13 2015) and is almost certainly the build timestamp. RunningInVMAndApplicationOlderThan5Days takes these two values, and checks whether we're currently running in a VM and it's at least 5 days from when the malware was built. this check is expected to be false: we can only run in a VM within 5 days from the build time. probably both an anti-analysis check and a way for the malware author to do some in-house testing before deployment
  • Module9.GetExeHasBasename1: whether the program's executable file is named plfyp.exe, pming.exe, etc. (see the trend micro article for the full list). perhaps surprisingly the expected value of this check is false, meaning that those names are reserved for the "carrier" agent
  • Module5.CachedDoesHardwareIdFileExist: whether a file that uniquely identifies the current machine exists. must be true. this file is just an infection token, it contains 33 bytes of random garbage, and its name is the sha1 hash (in hex) of the utf-16 encoding of the hexadecimal representation of the sha1 hash of the utf-16 encoding of a concatenation of processor id, disk signature, computer system name and motherboard serial number (whew!). eyepyramid is this strange mix of pretty solid knowledge of malware development and analysis, and borderline inept use of .net. like how it's entirely written in procedural vb.net, using on error resume next and byref function arguments, using utf-16 instead of utf-8 (which I guess is entirely because the utf-16 codec class is called UnicodeEncoding, and the author was looking for the shortest, most obvious path from string to byte array). I'll hazard the guess that the author (or well, one of the authors) is an old school virus writer who never learned much about windows or high level programming languages, and taught himself vb.net for this project. he probably hadn't done any serious malware development in a while, but it's clear that he was somewhat on top of the state of the art of malware analysis
this covers "hgrghk" and "tmpwebshell". probably due to a mistake in my bruteforcer, I couldn't find the key for "carrier", but give me some time and I'm confident that I will

and remember, you heard it first here: it's a Dead Gay Forums Exclusive™ - Where Your :10bux: Count

hackbunny fucked around with this message at 05:19 on Jan 24, 2017

Volmarias
Dec 31, 2002

EMAIL... THE INTERNET... SEARCH ENGINES...

hackbunny posted:

a Dead Gay Forums Exclusive

Never stop please, these are always interesting

Shaggar
Apr 26, 2006
fuckin cool

big scary monsters
Sep 2, 2011

-~Skullwave~-
yeah these posts are really interesting hackbunny, and clearly enough explained that even a security know-nothing like me can follow

mod saas
May 4, 2004

Grimey Drawer

big scary monsters posted:

yeah these posts are really interesting hackbunny, and clearly enough explained that even a security know-nothing like me can follow

A Pinball Wizard
Mar 23, 2005

I know every trick, no freak's gonna beat my hands

College Slice

Volmarias posted:

Never stop please, these are always interesting

hackbunny
Jul 22, 2007

I haven't been on SA for years but the person who gave me my previous av as a joke felt guilty for doing so and decided to get me a non-shitty av
huh it was quick, I wonder what I was getting wrong the first time. as I mentioned, the "carrier" type of agent uses a different master key to decrypt its sensitive strings. since the master key is derived from a number of runtime checks, and only one set of outcomes is the correct one (i.e. it allows the decryption of strings that allow the malware to work), we can deduce a little bit more about the purpose and operation of the malware. specifically, the master key is derived from an array of booleans, filled thus:
C# code:
    internal static void InitializeMasterKey()
    {
        MasterKeyBits[0] = Module8.WasDebuggerDetected();
        MasterKeyBits[1] = GetExeHasBasename1();
        MasterKeyBits[2] = Module8.ApplicationHasExeExtension();
        MasterKeyBits[3] = Module8.ApplicationDoesSystemAutorun();
        MasterKeyBits[4] = Module8.RunningFromDesktop();
        MasterKeyBits[5] = Module8.RunningFromDocuments();
        MasterKeyBits[6] = Module8.RunningFromSystem();
        MasterKeyBits[7] = Module8.RunningFromTemp();
        MasterKeyBits[8] = Module8.StartedManuallySoonAfterDrop();
        MasterKeyBits[9] = Module8.StartedByAutorun();
        MasterKeyBits[10] = Module8.ApplicationHasTmpExtension();
        MasterKeyBits[11] = Module.GetSmallHardDiskAndNotXP();
        MasterKeyBits[12] = IsBuildOlderThan20150211();
        MasterKeyBits[13] = IsBuildOlderThan8Days();
        MasterKeyBits[14] = DateTimeUtils.IsClockAccurate();
        MasterKeyBits[15] = Module4.Computer.Network.IsAvailable;
    }
many checks are the same performed to decrypt the hgrghk and tmpwebshell strings but in a different order. some checks have pretty obvious expected outcomes: 0, 4 and 5 must be false, 14 and 15 must be true, and 1 is likely true (it was false for hgrghk and tmpwebshell). by hardcoding 6 out of 16 checks, we reduce the key strength to a mere 10 bits, which can be bruteforced in a matter of seconds (it's just 1024 tries at most), giving the following set of expected outcomes:
  • WasDebuggerDetected: obviously false
  • GetExeHasBasename1: true, as I expected. from now on, I can call the nebulously named "Basename1" entity "CarrierBasename", as it's the set of valid on-disk filenames (minus the .exe extension) for "carrier" type agents, making the decompiled code a little more readable. this newfound readability emboldens me to state that the sample I analyzed is a "carrier" type agent, and that, therefore, a "carrier" agent is a dropper that downloads other agents and executes them (including updates to itself)
  • ApplicationHasExeExtension: true
  • ApplicationDoesSystemAutorun: true
  • RunningFromDesktop: false, as expected
  • RunningFromDocuments: same
  • RunningFromSystem: true, but it pretty much followed from ApplicationHasExeExtension being true
  • RunningFromTemp: false, by exclusion. if the key was larger and bruteforcing impractical, I could slash the key space a bit by ensuring that only one of the RunningFrom flags could be true at the same time, reducing 16 possible cases to 5 and almost halving the key space twice
  • StartedManuallySoonAfterDrop: false. this pretty much followed from ApplicationDoesSystemAutorun being true
  • StartedByAutorun: true, predictably. mostly noting this to myself for future reference
  • ApplicationHasTmpExtension: can't be true because ApplicationHasExeExtension is true
  • GetSmallHardDiskAndNotXP: hey, now, this is an interesting check. it checks if the system disk is smaller than 50 GB and if the operating system name does not contain the string "Microsoft Windows XP"; expected value is false. I'm positive that this is an anti-vm check: if the disk is unrealistically small, and the machine isn't old enough to justify it, then we're probably running in a fake environment of some kind and not a real target
  • IsBuildOlderThan20150211: false. what a weird check! it compares two static dates: the build timestamp encoded in the version number, and february 11th, 2015 (the next day). always evaluates to false, regardless of when, where and how the code is executed. very confusing
  • IsBuildOlderThan8Days: false. it seems carrier agents are timebombed and automatically die if they can't update themselves after 8 days
  • DateTimeUtils.IsClockAccurate(): I expected this to be true, and it was. what this check does is, every 5 hours, download the front page of a randomly chosen major website (among which amazon, aol, google and youtube), and derive the current date and time from the Date http header field. if the local clock is within 60 minutes of the remote time, then the check returns true. I have no idea why the carrier cares so much about this
  • Module4.Computer.Network.IsAvailable: true. since the previous check defaults to true if the network isn't available, this ensures that true means we actually checked. I have never used vb.net so I'm not sure what's the meaning of the automatically generated module and all the machinery behind the "Computer" variable which is, in fact, a static property getter based on a, dunno, some kind of singleton based on System.Activator. I suspect com fuckery. I should use vb.net to see exactly what makes the compiler generate this kind of code
the press and antivirus firms were very quick to dismiss this as an unsophisticated malware. in fact, I've found evidence of:
  • a considerable amount of planning
  • a certain degree of opsec (although with glaring mistakes that eventually killed the whole operation)
  • knowledge of how malware is analyzed by malware experts and automated software
  • a unusual and clever "store and forward" model of c&c where all communication between agents and console happens through a third party (specifically, wbem folders, imap folders and emails)
  • self-updating software
  • non-trivial features like provisioning x509 certificates
  • a rather complex console that can push updates and receive operational logs from agents... written in vb.net
on the other hand, it's true that the author(s) show some naivety:
  • vb.net for christ's sake, and entirely procedural vb.net at it. I found like one lambda function though, as a linq "where" expression
  • clearly unfamiliar with medium-advanced programming concepts like encryption and unicode
  • use of a commercial obfuscator that can be trivially defeated
  • misuse of a commercial obfuscator in fact, as third party libraries like SevenZip and MailBee were left unobfuscated. reminder that this made it trivial for investigators to realize that the string "MN600-...-0E8C" was a MailBee license, which was tracked back to the occhioneros and led to their arrest. well if I get bored, I could try to crack MailBee's license key scheme :v:

Trabisnikof
Dec 24, 2005

Volmarias posted:

Never stop please, these are always interesting

A Pinball Wizard
Mar 23, 2005

I know every trick, no freak's gonna beat my hands

College Slice
:f5:

anthonypants
May 6, 2007

by Nyc_Tattoo
Dinosaur Gum

Volmarias posted:

Never stop please, these are always interesting

Shaggar
Apr 26, 2006
the licensed mail library is so loving weird

Bhodi
Dec 9, 2007

Oh, it's just a cat.
Pillbug

hackbunny posted:

[*]IsBuildOlderThan20150211: false. what a weird check! it compares two static dates: the build timestamp encoded in the version number, and february 11th, 2015 (the next day). always evaluates to false, regardless of when, where and how the code is executed. very confusing
I suspect this is a check to short-circuit similar to RunningInVMAndApplicationOlderThan5Days to prevent 'dev' builds (built after the hard-coded feb 2015 date) executing automatically. It's a way to pin auto-execution to only code that has (presumably) been tested to work in the build-test vm framework and prevent auto-execution for newer code, though it's a really wacky way it do it. I could see doing it this way if you have some sort of framework that you use for both development of new features and testing of the operation of mature ones, and your build system inserts that date into the code based on last tested-good configuration (or you alter it manually).

Bhodi fucked around with this message at 05:24 on Jan 24, 2017

Munkeymon
Aug 14, 2003

Motherfucker's got an
armor-piercing crowbar! Rigoddamndicu𝜆ous.



hackbunny posted:

  • DateTimeUtils.IsClockAccurate(): I expected this to be true, and it was. what this check does is, every 5 hours, download the front page of a randomly chosen major website (among which amazon, aol, google and youtube), and derive the current date and time from the Date http header field. if the local clock is within 60 minutes of the remote time, then the check returns true. I have no idea why the carrier cares so much about this

makes it harder to change the date just to see how the behavior changes or get the date-based behavior you want?

why the autorun checks? do analysis tools like to just use windows autorun to start the malware in the VM? seems like a bad idea if its so easy to spot but I guess most investigators won't think to sit there and twiddle their thumbs just in case so eh

Volmarias
Dec 31, 2002

EMAIL... THE INTERNET... SEARCH ENGINES...

Munkeymon posted:

why the autorun checks? do analysis tools like to just use windows autorun to start the malware in the VM? seems like a bad idea if its so easy to spot but I guess most investigators won't think to sit there and twiddle their thumbs just in case so eh

Sounds like the opposite; starting it manually to see what it does would result in nothing if "true" was the expected value here.

Volmarias
Dec 31, 2002

EMAIL... THE INTERNET... SEARCH ENGINES...

Bhodi posted:

I suspect this is a check to short-circuit similar to RunningInVMAndApplicationOlderThan5Days to prevent 'dev' builds (built after the hard-coded feb 2015 date) executing automatically. It's a way to pin auto-execution to only code that has (presumably) been tested to work in the build-test vm framework and prevent auto-execution for newer code, though it's a really wacky way it do it. I could see doing it this way if you have some sort of framework that you use for both development of new features and testing of the operation of mature ones, and your build system inserts that date into the code based on last tested-good configuration (or you alter it manually).

Same. With the auto incrementing build numbers, this smells of someone being too clever by half.

spankmeister
Jun 15, 2008






hackbunny posted:

and remember, you heard it first here: it's a Dead Gay Forums Exclusive™ - Where Your :10bux: Count

:swoon:

Adbot
ADBOT LOVES YOU

Chalks
Sep 30, 2009

This analysis is wonderful, thanks for posting it.

The use of a paid for library implies for me that more than one person was developing this, and the second less experienced person probably just picked up a library for sending mail that they had used in a previous legitimate project without realising it was tied to their personal details. It seems impossible to believe that someone who was so deep into illegal activity wouldn't simply pirate a copy of the library (or if it was the more experienced developer, I'm sure they would be capable of interacting with the email protocol directly or at least using an open source alternative)

I guess there wasn't any information released about how long ago the license for the mail library was purchased vs when the malware first included it? I expect the dates will be some time apart.

Bhodi posted:

I suspect this is a check to short-circuit similar to RunningInVMAndApplicationOlderThan5Days to prevent 'dev' builds (built after the hard-coded feb 2015 date) executing automatically. It's a way to pin auto-execution to only code that has (presumably) been tested to work in the build-test vm framework and prevent auto-execution for newer code, though it's a really wacky way it do it. I could see doing it this way if you have some sort of framework that you use for both development of new features and testing of the operation of mature ones, and your build system inserts that date into the code based on last tested-good configuration (or you alter it manually).

I guess if you hit F5 accidentally in visual studio and the code runs, this will prevent any damage unless you've just set the hardcoded date to the following day in order to finalise the build.

Things like this make me laugh because they almost certainly mean they accidentally did this once then added this weird check to prevent it from happening again.

Chalks fucked around with this message at 09:54 on Jan 24, 2017

  • Locked thread