Distributed & real time digital forensics at the speed of the cloud
Go Makefile C++ PHP Pascal Shell SourcePawn
Latest commit e5503e6 Dec 27, 2016 @jvehent jvehent committed on GitHub Merge pull request #307 from ghost/typos-api
[doc] Fix typos in api.rst
Failed to load latest commit information.
actions [minor] remove upgrade module and additional references to module Dec 21, 2016
client [minor] fix import path for example module Dec 22, 2016
conf [minor] fix import path for example module Dec 22, 2016
database [minor] remove upgrade module and additional references to module Dec 21, 2016
doc [doc] Fix typos in api.rst Dec 24, 2016
mig-agent [minor] fix import path for example module Dec 22, 2016
mig-api [minor] Create an API endpoint for agents to retrieve PGP public keys… Sep 12, 2016
mig-loader [minor] remove symlinks from repo and replace with copies Nov 8, 2016
mig-runner [medium] move compression apply into client package Jan 22, 2016
mig-scheduler [minor] fix a few comment typos for detectMultiAgents Apr 20, 2016
modules Merge branch 'master' into issue-291-win-netstat Dec 22, 2016
pgp [minor] update numeric HTTP status codes to use values from net/http Apr 20, 2016
runner-plugins [medium] unify hashes under sha2/sha3, fixes #155 Jan 14, 2016
testutil [doc] add newline after license header to ignore it in godoc Aug 27, 2015
tools [minor] rename PERSISTCONFIGDIR -> MODULECONFIGDIR Dec 16, 2016
vendor [minor] revendor testify using makefile target Dec 22, 2016
workers [minor] Remove old worker code and update documentation Dec 29, 2015
.gitignore [minor] add vagrant dev box Oct 14, 2016
.travis.yml [minor] when travis tests run, enable all modules Dec 22, 2016
AUTHORS [doc] add Rob Murtha to AUTHORS file Dec 22, 2016
CONTRIBUTING.md [doc] update Contributing.md Oct 8, 2016
LICENSE [medium] Makefile support Feb 3, 2014
Makefile [minor] handle agent and loader built-in config as a target Dec 22, 2016
README.md [doc] Removed gap in README.md Nov 4, 2016
acl.go [medium/bug] Prevent one investigator from signing multiple times Sep 25, 2016
action.go [minor] Remove single signer check from action.go Sep 25, 2016
agent.go [minor] remove upgrade module and additional references to module Dec 21, 2016
command.go [doc] add newline after license header to ignore it in godoc Aug 27, 2015
constants.go [medium/bug] terminate scheduler when heartbeat to relays fails, fixes Nov 5, 2015
investigator.go [minor] improve investigator permission descriptive output Aug 16, 2016
loader.go [medium] add environment validation to loader authorization Aug 11, 2016
logging_posix.go [minor] add log file rotation for file output mode Apr 19, 2016
logging_windows.go [minor/bug] fix to build windows agent Apr 22, 2016
manifest.go [minor/bug] cache signers on validation and reject duplicates Aug 18, 2016
runner.go [minor] initial commit of mig-runner Sep 15, 2015
version.go [doc] update version.go Apr 29, 2016


MIG: Mozilla InvestiGator

Build Status

Build one-liner:

$ go get mig.ninja/mig && cd $GOPATH/src/mig.ninja/mig && make

MIG is OpSec's platform for investigative surgery of remote endpoints.

MIG is composed of agents installed on all systems of an infrastructure that are be queried in real-time to investigate the file-systems, network state, memory or configuration of endpoints.

Capability Linux MacOS Windows
file inspection check check check
network inspection check check (partial)
memory inspection check check check
vuln management check (planned) (planned)
log analysis (planned) (planned) (planned)
system auditing (planned) (planned) (planned)

Imagine it is 7am on a saturday morning, and someone just released a critical vulnerability for your favorite PHP application. The vuln is already exploited and security groups are releasing indicators of compromise (IOCs). Your weekend isn't starting great, and the thought of manually inspecting thousands of systems isn't making it any better.

MIG can help. The signature of the vulnerable PHP app (the md5 of a file, a regex, or just a filename) can be searched for across all your systems using the file module. Similarly, IOCs such as specific log entries, backdoor files with md5 and sha1/2/3 hashes, IP addresses from botnets or byte strings in processes memories can be investigated using MIG. Suddenly, your weekend is looking a lot better. And with just a few commands, thousands of systems will be remotely investigated to verify that you're not at risk.

MIG command line demo

MIG agents are designed to be lightweight, secure, and easy to deploy so you can ask your favorite sysadmins to add it to a base deployment without fear of breaking the entire production network. All parameters are built into the agent at compile time, including the list and ACLs of authorized investigators. Security is enforced using PGP keys, and even if MIG's servers are compromised, as long as our keys are safe on your investigator's laptop, no one will break into the agents.

MIG is designed to be fast, and asynchronous. It uses AMQP to distribute actions to endpoints, and relies on Go channels to prevent components from blocking. Running actions and commands are stored in a Postgresql database and on disk cache, such that the reliability of the platform doesn't depend on long-running processes.

Speed is a strong requirement. Most actions will only take a few hundreds milliseconds to run on agents. Larger ones, for example when looking for a hash in a big directory, should run in less than a minute or two. All in all, an investigation usually completes in between 10 and 300 seconds.

Privacy and security are paramount. Agents never send raw data back to the platform, but only reply to questions instead. All actions are signed by GPG keys that are not stored in the platform, thus preventing a compromise from taking over the entire infrastructure.


MIG is built in Go and uses a REST API that receives signed JSON messages distributed to agents via RabbitMQ and stored in a Postgres database.

It is:

  • Massively Distributed means Fast.
  • Simple to deploy and Cross-Platform.
  • Secured using OpenPGP.
  • Respectful of privacy by never retrieving raw data from endpoints.

Check out this 10 minutes video for a more general presentation and a demo of the console interface.

MIG youtube video

MIG was recently presented at the SANS DFIR Summit in Austin, Tx. You can watch the recording below:

MIG @ DFIR Summit 2015


Join #mig on irc.mozilla.org (use a web client such as mibbit).

We also have a public mailing list at list@mig.ninja.


All documentation is available in the 'doc' directory and on http://mig.mozilla.org .


Assuming you have a dedicated Ubuntu system (like a VM), you can use the standalone installation script to deploy a test environment rapidly.

$ sudo apt-get install golang git

# must be >= 1.5
$ go version
go version go1.6.1 linux/amd64

$ export GOPATH=$HOME/go

$ mkdir $GOPATH

$ go get mig.ninja/mig

$ cd $GOPATH/src/mig.ninja/mig

$ bash tools/standalone_install.sh

This script will install all of the components MIG needs for a localhost only installation. Follow instructions at the end of the script to convert it to a real infrastructure, or read Installation & Configuration.