Skip to main content

Malware presence change events feed (TCF-0111)

The Malware Presence Change Events Feed provides a continuous list of new malicious samples, false positives (FPs) and malicious samples for which the ReversingLabs threat name changed.

Event types included in the feed:

  • New malicious - event type representing files for which the classification changed to MALICIOUS (including false negatives - FNs)
  • False positive (FP) - event type representing files for which the classification changed from MALICIOUS or SUSPICIOUS to KNOWN
  • Threat name changes - event type representing malicious files for which the threat name changed

By including event_type information in the response, the service enables users to filter records by event and easily get newly discovered samples that ReversingLabs classified as malicious, or information about false positive samples - malicious or suspicious samples for which the classification changed into KNOWN after rescanning.

The service also provides information about threat name changes for malicious samples. The threat_name field is returned in the response for "New malicious" and "Threat name changes" event types.

Threat names follow the ReversingLabs Malware Naming Standard <naming> (platform-subplatform.malware_type.malware_family). The following are examples of threat names formatted according to the standard:

Win32.Ransomware.Teslacrypt Android.Trojan.Smsbot Script-JS.Downloader.Nemucod

By comparing the threat_name fields in the response for the "Threat name changes" event type, users can track malware type changes, malware family changes, as well as changes in the affected platform.

Similarly, based on the threat_name field information in the response for "New malicious" event type, users can compile a list of new malicious samples by specific platform, malware type, or malware family.

The feed stores records for the last 365 days.

ReversingLabs Malware Naming Standard

The ReversingLabs detection string consists of three main parts separated by dots. All parts of the string will always appear (all three parts are mandatory).

platform-subplatform.type.familyname
  1. The first part of the string indicates the platform targeted by the malware.

    This string is always one of the strings listed in the Platform string table. If the platform is Archive, Audio, ByteCode, Document, Image or Script, then it has a subplatform string. Platform and subplatform strings are divided by a hyphen (-). The lists of available strings for Archive, Audio, ByteCode, Document, Image and Script subplatforms can be found in their respective tables.

  2. The second part of the detection string describes the malware type. Strings that appear as malware type descriptions are listed in the Type string table.

  3. The third and last part of the detection string represents the malware family name, i.e. the name given to a particular malware strain.

    Names "Agent", "Gen", "Heur", and other similar short generic names are not allowed. Names can't be shorter than three characters, and can't contain only numbers. Special characters (apart from -) must be avoided as well. The - character is only allowed in exploit (CVE/CAN) names (for example CVE-2012-0158).

Examples

If a trojan is designed for the Windows 32-bit platform and has the family name "Adams", its detection string will look like this:

Win32.Trojan.Adams

If some backdoor malware is a PHP script with the family name "Jones", the detection string will look like this:

Script-PHP.Backdoor.Jones

Some potentially unwanted application designed for Android that has the family name "Smith" will have the following detection string:

Android.PUA.Smith

Some examples of detections with invalid family names are:

Win32.Dropper.Agent
ByteCode-MSIL.Keylogger.Heur
Script-JS.Hacktool.Gen
Android.Backdoor.12345
Document-PDF.Exploit.KO
Android.Spyware.1a
Android.Spyware.Not-a-CVE
Win32.Trojan.Blue_Banana
Win32.Ransomware.Hydra:Crypt
Win32.Ransomware.HDD#Cryptor

Platform string

The platform string indicates the operating system that the malware is designed for. The following table contains the available strings and the operating systems for which they are used.

StringShort description
ABAPSAP / R3 Advanced Business Application Programming environment
AndroidApplications for Android OS
AOLAmerica Online environment
ArchiveArchives. See Archive subplatforms for more information.
AudioAudio. See Audio subplatforms for more information.
BeOSExecutable content for Be Inc. operating system
BootBoot, MBR
BinaryBinary native type
ByteCodeByteCode, platform-independent. See ByteCode subplatforms for more information.
BlackberryApplications for Blackberry OS
ConsoleExecutables or applications for old consoles (e.g. Nintendo, Amiga, ...)
DocumentDocuments. See Document subplatforms for more information.
DOSDOS, Windows 16 bit based OS
EPOCApplications for EPOC mobile OS
EmailEmails. See Email subplatforms for more information.
FirmwareBIOS, Embedded devices (mp3 players, ...)
FreeBSDExecutable content for 32-bit and 64-bit FreeBSD platforms
ImageImages. See Image subplatforms for more information.
iOSApplications for Apple iOS (iPod, iPhone, iPad…)
LinuxExecutable content for 32 and 64-bit Linux operating systems
MacOSExecutable content for Apple Mac OS, OS X
MenuetExecutable content for Menuet OS
NovellExecutable content for Novell OS
OS2Executable content for IBM OS/2
PackageSoftware packages. See Package subplatforms for more information.
PalmApplications for Palm mobile OS
ScriptScripts. See Script subplatforms for more information.
ShortcutShortcuts
SolarisExecutable content for Solaris OS
SunOSExecutable content for SunOS platform
SymbianApplications for Symbian OS
TextText native type
UnixExecutable content for the UNIX platform
VideoVideos
WebAssemblyBinary format for executable code in Web pages
Win32Executable content for 32-bit Windows OS's
Win64Executable content for 64-bit Windows OS's
WinCEExecutable content for Windows Embedded Compact OS
WinPhoneApplications for Windows Phone
Archive subplatforms
StringShort description
ACEWinAce archives
ARAR archives
ARJARJ (Archived by Robert Jung) archives
BZIP2Bzip2 archives
CABMicrosoft Cabinet archives
GZIPGNU Zip archives
ISOISO image files
JARJAR (Java ARchive) archives
LZHLZH archives
RARRAR (Roshal Archive) archives
7ZIP7-Zip archives
SZDDMicrosoft SZDD archives
TARTar (tarball) archives
XARXAR (eXtensible ARchive) archives
ZIPZIP archives
ZOOZOO archives
Other Archive identificationAll other valid Spectra Core identifications of Archive type
Audio subplatforms
StringShort description
WAVWave Audio File Format
Other Audio identificationAll other valid Spectra Core identifications of Audio type
ByteCode subplatforms
StringShort description
JAVAJava bytecode
MSILMSIL bytecode
SWFAdobe Flash
Document subplatforms
StringShort description
AccessMicrosoft Office Access
CHMCompiled HTML
CookieCookie files
ExcelMicrosoft Office Excel
HTMLHTML documents
MultimediaMultimedia containers that aren't covered by other platforms (e.g. ASF)
OfficeFile that affects multiple Office components
OLEMicrosoft Object Linking and Embedding
PDFPDF documents
PowerPointMicrosoft Office PowerPoint
ProjectMicrosoft Office Project
PublisherMicrosoft Office Publisher
RTFRTF documents
VisioMicrosoft Office Visio
XMLXML and XML metafiles (ASX)
WordMicrosoft Office Word
Other Document identificationAll other valid Spectra Core identifications of Document type
Email subplatforms
StringShort description
MIMEMultipurpose Internet Mail Extensions
MSGOutlook MSG file format
Image subplatforms
StringShort description
ANIFile format used for animated mouse cursors on Microsoft Windows
BMPBitmap images
EMFEnhanced Metafile images
EPSAdobe Encapsulated PostScript images
GIFGraphics Interchange Format
JPEGJPEG images
OTFOpenType Font
PNGPortable Network Graphics
TIFFTagged Image File Format
TTFApple TrueType Font
WMFWindows Metafile images
Other Image identificationAll other valid Spectra Core identifications of Image type
Package subplatforms
StringShort description
NuGetNuGet packages
DEBDebian Linux DEB packages
RPMLinux RPM packages
WindowStorePackagePackages for distributing and installing Windows apps
Other Package identificationAll other valid Spectra Core identifications of Package type
Script subplatforms
StringShort description
ActiveXActiveX scripts
AppleScriptAppleScript scripts
ASPASP scripts
AutoItAutoIt scripts (Windows)
AutoLISPAutoCAD LISP scripts
BATBatch scripts
CGICGI scripts
CorelDrawCorelDraw scripts
FeriteFerite scripts
INFINF Script, Windows installer scripts
INIINI configuration file
IRCIRC, mIRC, pIRC/Pirch Script
JSJavascript, JScript
KiXtartKiXtart scripts
LogoLogo scripts
LuaLua scripts
MacroMacro (e.g. VBA, AmiPro macros, Lotus123 macros)
MakefileMakefile configuration
MatlabMatlab scripts
PerlPerl scripts
PHPPHP scripts
PowerShellPowerShell scripts, Monad (MSH)
PythonPython scripts
RegistryWindows Registry scripts
RubyRuby scripts
ShellShell scripts
ShockwaveShockwave scripts
SQLSQL scripts
SubtitleWorkshopSubtitleWorkshop scripts
WinHelpWinHelp Script
WScriptWindows Scripting Host related scripts (can be VBScript, JScript, …)
Other Script identificationAll other valid Spectra Core identifications of Script type

Type string

This string is used to describe the general type of malware. The following table contains the available strings and describes what each malware type is capable of.

StringDescription
AdwarePresents unwanted advertisements
BackdoorBypasses device security and allows remote access
BrowserBrowser helper objects, toolbars, and malicious extensions
CertificateClassification derived from certificate data
CoinminerUses system resources for cryptocurrency mining without the user's permission
DialerApplications used for war-dialing and calling premium numbers
DownloaderDownloads other malware or components
DropperDrops malicious artifacts including other malware
ExploitExploits for various vulnerabilities, CVE/CAN entries
FormatMalformations of the file format. Classification derived from graylisting, validators on unpackers
HacktoolSoftware used in hacking attacks, that might also have a legitimate use
HyperlinkClassifications derived from extracted URLs
InfostealerSteals personal info, passwords, etc.
KeyloggerRecords keystrokes
MalwareNew and recently discovered malware not yet named by the research community
NetworkNetworking utilities, such as tools for DoS, DDoS, etc.
PackedPacked applications (UPX, PECompact…)
PhishingEmail messages (or documents) created with the aim of misleading the victim by disguising itself as a trustworthy entity into opening malicious links, disclosing personal information or opening malicious files.
PUAPotentially unwanted applications (hoax, joke, misleading...)
RansomwareMalware which encrypts files and demands money for decryption
RogueFraudulent AV installs and scareware
RootkitProvides undetectable administrator access to a computer or a mobile device
SpamOther junk mail that does not unambiguously fall into the Phishing category, but contains unwanted or illegal content.
SpywareCollects personal information and spies on users
TrojanAllows remote access, hides in legit applications
VirusSelf-replicating file/disk/USB infectors
WormSelf-propagating malware with exploit payloads

PULL with timestamp

This query returns samples with a newly calculated or changed malware presence classification and threat name, starting from the timestamp provided in the request. The feed will return at most 1000 records, or a little bit over 1000 if there are multiple records with the same timestamp.

To retrieve the next batch of records, the timestamp from the response field last_timestamp should be increased by 1 and used in the subsequent query as the value of the time_value parameter.

If the requested timestamp is not within the last 365 days, the service will respond with the status code 400 Bad Request.

GET /api/feed/mwp_change_events/v1/query/{time_format}/{time_value}/[?format=xml|json][&sample_available=false|true][&limit=N]

Request parameters

  • time_format
    • Format in which the time value will be specified. Supported values are: timestamp - number of seconds since 1970-01-01 00:00:00; utc - UTC date in the YYYY-MM-DDThh:mm:ss format
    • Required
  • time_value
    • Accepts values in the format set by time_format
    • Required
  • format
    • Parameter defining the format in which the resulting data will be returned. Supported values are: xml (default), json, tsv
    • Optional
  • sample_available
    • If this parameter is set to true in the request, filtering will be applied and the response will contain only samples that are present in the ReversingLabs storage and available for download. When set to false, the query will return all samples, regardless of their download availability status. The default is false, meaning that if the parameter is not provided in the request, filtering is not applied.
    • Optional
  • limit
    • The number of records to return in the response. The maximum and default value is 1000. Note that the response may include more records than requested to ensure that all records with the same timestamp are returned.
    • Optional

Response format

The response contains a list of records matching the requested timestamp. Every record in the list includes the following information:

  • SHA1, MD5, and SHA256 hashes associated with the sample,
  • event type,
  • sample classification,
  • threat name,
  • sample size,
  • sample type,
  • the timestamp of the update.

An empty response is returned if no records for the requested timestamp are available.

Response fields are described in the following table. Example responses can be found further in the document. Fields that do not appear in the response are considered empty. There will be no fields with empty or null values in the response.

  • SHA1
    • SHA1 of the sample
  • SHA256
    • SHA256 of the sample
  • MD5
    • MD5 of the sample
  • event_type
    • The type of event that triggered the record in the feed. Possible values: NEW_MALICIOUS; FP; THREAT_NAME_CHANGE
  • classification
    • Current Malware Presence status designation. The status designation is calculated by a proprietary ReversingLabs algorithm that adapts and improves as new information about the file and the threat is discovered. The algorithm takes the following into account: Spectra Intelligence antivirus scan results, threat and trust factors, parent/child relationships, certificates, and other metadata-specific information.
  • threat_name
    • Sample's detected threat name (platform-subplatform.malware_type.malware_family)
  • sample_size
    • Sample size (in bytes)
  • sample_type
    • Sample type
  • record_on
    • Timestamp of the update, indicating the date and time when the sample record was updated in the feed.

Response Examples

{"rl": {
"mwp_change_events_feed": {
"time_range": {
"from": "YYYY-MM-DDTHH:MM:SS",
"to": "YYYY-MM-DDTHH:MM:SS"
},
"entries": [
{
"sha1": "21841b32c6165b27dddbd4d6eb3a672defe54271",
"sha256": "2f6ed...55346",
"md5": "3133c2231fcee5d6b0b4c988a5201da1",
"event_type": "FP",
"classification":"KNOWN",
"sample_size":"636416",
"sample_type":"PE/Exe",
"record_on":"1470221633000"

},
{...},

],
"last_timestamp": "YYYY-MM-DDTHH:MM:SS_or_timestamp", -- the format is the same as the requested time format
}
}
}
{"rl": {
"mwp_change_events_feed": {
"time_range": {
"from": "YYYY-MM-DDTHH:MM:SS",
"to": "YYYY-MM-DDTHH:MM:SS"
},
"entries": [
{
"sha1": "21841b32c6165b27dddbd4d6eb3a672defe54271",
"sha256": "2f6ed...55346",
"md5": "3133c2231fcee5d6b0b4c988a5201da1",
"event_type": "THREAT_NAME_CHANGE",
"classification":"MALICIOUS",
"threat_name":"Win32.Trojan.Nsis"
"sample_size":"636416",
"sample_type":"PE/Exe",
"record_on":"1470221633000"

},
{...},

],
"last_timestamp": "YYYY-MM-DDTHH:MM:SS_or_timestamp", -- the format is the same as the requested time format
}
}
}

PULL without timestamp

For this query type, ReversingLabs is tracking the user's last query state, so the user doesn’t have to provide a timestamp in the request to retrieve the next batch of records.

PULL Query

This query returns a list of classification and threat name changes since a particular point in time. The starting point for this query is defined using the START query. If the user has not previously requested this query or called the START query, it will return records starting with the current timestamp. Every subsequent call will continue from the timestamp where the previous call ended. In case that the timestamp of the previous call is older than 365 days, the subsequent call will autocorrect this timestamp to the oldest available (i.e. current - 365 days), and corresponding records will be returned.

Unless the limit parameter is specified, the feed returns up to 1000 records and any surplus records sharing the same timestamp. This ensures that all the records with the same timestamp will be included in the recordset. The limit parameter must not be greater than 1000.

This endpoint is built to be queried by a single thread (single instance). Any concurrent requests will be blocked until the previous one is fulfilled.

Request parameters

  • format
    • Parameter defining the format in which the resulting data will be returned. Supported values are: xml (default), json
    • Optional
  • sample_available
    • If this parameter is set to true in the request, filtering will be applied and the response will contain only samples that are present in the ReversingLabs storage and available for download. When set to false, the query will return all samples, regardless of their download availability status. The default is false, meaning that if the parameter is not provided in the request, filtering is not applied.
    • Optional
  • limit
    • The number of records to return in the response. The maximum and default value is 1000. Note that the response may include more records than requested to ensure that all the records with the same timestamp are returned.
    • Optional

Response format

The response format is the same as in the PULL with timestamp.

START Query

This query sets the starting timestamp for the previously described PULL query.

The starting timestamp must be within the last 365 days, otherwise the service will respond with the status code 400 Bad Request.

PUT /api/feed/mwp_change_events/v1/query/start/[time_format]/[time_value]

Request parameters

  • time_format
    • Format in which the time value will be specified. Supported values are: timestamp - number of seconds since 1970-01-01 00:00:00; utc - UTC date in the YYYY-MM-DDThh:mm:ss format
    • Required
  • time_value
    • Accepts values in the format set by time_format
    • Required

Response format

A successful query returns an HTTP 200 OK message with an empty response body.

Examples

Format query field

Retrieving all new detections from 2019-05-09T07:25:10

[GET]

/api/feed/mwp_change_events/v1/query/timestamp/1557386701
/api/feed/mwp_change_events/v1/query/utc/2019-05-09T07:25:10

Retrieving all new detections from 2019-05-09T07:25:10 with samples available in the storage

[GET]

/api/feed/mwp_change_events/v1/query/timestamp/1557386701?sample_available=true
/api/feed/mwp_change_events/v1/query/timestamp/1557386701?sample_available=true&format=json

Retrieving all new samples from 2019-05-09T07:25:10 in JSON and XML formats

[GET]

/api/feed/mwp_change_events/v1/query/timestamp/1557386701?format=json
/api/feed/mwp_change_events/v1/query/timestamp/1557386701?format=xml

Setting the initial timestamp to 2017-03-26 10:33:20

[PUT]

/api/feed/mwp_change_events/v1/query/start/timestamp/1557386701

Pulling records from the latest timestamp

[GET]

/api/feed/mwp_change_events/v1/query/pull