Modules for expansion services, import and export in MISP http://misp.github.io/misp-modules
 
 
 
 
Go to file
Alexandre Dulaunoy 3ee1f34aff removed unused attributes 2016-03-16 07:53:37 +01:00
bin Exclude dot files from modules list to be loaded 2016-03-09 07:39:29 +01:00
modules/expansion removed unused attributes 2016-03-16 07:53:37 +01:00
tests Sample JSON files reflecting config changes 2016-03-16 07:47:01 +01:00
var default var directory added 2016-02-18 09:25:51 +01:00
README.md sourcecache module added 2016-03-14 20:47:45 +01:00
REQUIREMENTS A minimal caching module added to cache link or url from MISP 2016-03-14 20:40:06 +01:00

README.md

MISP modules

MISP modules are autonomous modules that can be used for expansion and other services in MISP.

The modules are written in Python 3 following a simple API interface. The objective is to ease the extensions of MISP functionalities without modifying core components. The API is available via a simple REST API which is independent from MISP installation or configuration.

MISP modules support is included in MISP starting from version 2.4.X.

Existing MISP modules

  • DNS - a simple module to resolve MISP attributes like hostname and domain to expand IP addresses attributes.
  • passivetotal - a passivetotal module to query the passivetotal passive DNS interface.
  • sourcecache - a module to cache a specific link from a MISP instance.

How to add your own MISP modules?

Create your module in modules/expansion/. The module should have at minimum three functions:

  • introspection function that returns a dict of the supported attributes (input and output) by your expansion module.
  • handler function which accepts a JSON document to expand the values and return a dictionary of the expanded values.
  • version function that returns a dict with the version and the associated meta-data of the module.

Don't forget to return an error key and value if an error is raised to propagate it to the MISP user-interface.

If your module requires authentication, the following reserved MISP attributes are used to pass the authentication values from MISP towards the module:

  • module-username
  • module-password

Testing your modules?

MISP uses the modules function to discover the available MISP modules and their supported MISP attributes:

% curl -s http://127.0.0.1:6666/modules | jq .
[
  {
    "mispattributes": {
      "input": [
        "hostname",
        "domain",
        "ip-src",
        "ip-dst",
        "module-username",
        "module-password"
      ],
      "output": [
        "ip-src",
        "ip-dst",
        "hostname",
        "domain"
      ]
    },
    "meta": {
     "description": "PassiveTotal expansion service to expand values with multiple Passive DNS sources",
     "author": "Alexandre Dulaunoy",
     "version": "0.1"
    },
    "name": "passivetotal",
    "type": "expansion"
  },
  {
    "mispattributes": {
      "input": [
        "hostname",
        "domain"
      ],
      "output": [
        "ip-src",
        "ip-dst"
      ]
    },
    "meta": {
      "description": "Simple DNS expansion services to resolve IP address from MISP attributes",
      "version": "0.1",
      "author": "Alexandre Dulaunoy"
    },
    "name": "dns",
    "type": "expansion"
  }
]

The MISP module service returns the available modules in a JSON array containing each module name along with their supported input attributes.

Based on this information, a query can be built in a JSON format and saved as body.json:

{
  "results": [
    {
      "types": [
        "ip-src",
        "ip-dst"
      ],
      "values": [
        "188.65.217.78"
      ]
    }
  ]
}

Then you can POST this JSON format query towards the MISP object server:

curl -s http://127.0.0.1:6666/query -H "Content-Type: application/json" --data @body.json -X POST

How to contribute your own module?

Fork the project, add your module, test it and make a pull-request. Modules can be also private as you can add a module in your own MISP installation.