Intrigue Core v0.3 released at DEFCON 25!

We’re proud to announce that Intrigue Core v0.3 is now GA, and available on the ‘master’ git branch. There’s a load of new features available, including entity correlation, enrichment and vastly improved search and analysis capabilities. We’ve got new AWS S3 discovery tasks, Github discovery tasks and a cool new Org-based whois search. See below for links to more detail for each of these features. This release also adds support for multiple strategies, and adds a new “Domain Intel” strategy (blog post forthcoming).

New Features

New Tasks

New Strategies 

Feature Update: Project Statistics

Just a quick note to mention a new addition: Project Statistics. Sometimes you need an overview of the types of entities and activity in the project. This is a handy way to get an overview. The individual counts are linked to the ‘Entities’ viewer, allowing you to dig in and get a better understanding.

Here’s a screenshot from a recent project:

This feature is immediately available on the ‘master’ branch. Enjoy!

Entity Correlation and Meta-Entity views

Earlier this week, we added a couple features named “Entity Enrichment” and “Entity Aliasing”. These features allowed users to get a better picture of an entity through techniques such as DNS and clever ways of comparing entities.

Now, to make this even easier, we’ve added a way to show these correlated entities as a single unit. This makes seeing an entity with many different names easier.

Announcing the “Meta-Entity” view:

Now you can see there are 107 unique “meta-entities” vs the standard view with each entity shown as its own row (202). Previously, you’d need to do this correlation yourself on the Entities page, and it was difficult to tell if you’d already looked into an entity because many lines could represent the same entity, just a different view.

Comments & feedback welcome!



Entity enrichment and aliasing

Announcing two new features called “entity enrichment” and “entity aliasing”.

Entity enrichment allows us to get a more complete picture of an entity. It is a process that happens automatically for certain entities upon their creation. Today IpAddress, DnsRecord, and Uri are supported. For each of these entity types, one or several enrichment tasks will be run as soon as the entity is created, allowing us to discover additional facts and alternate names (“aliases”) for the entity.

How it works: Upon creation, an enrichment task (lib/tasks/enrich/*) will be scheduled and run. In the case of an IpAddress, the name will be resolved to A, CNAME, or PTR records, DnsRecord entities created,  and finally “aliased” to the IpAddress.

Let’s show a quick demo.

First, create a new project and select the “Create Entity” task with a DnsRecord entity. In this case, we’ll use the DnsRecord “” with no recursive depth:


Hit “Run Task” and you’ll see that it kicks off the task, creating the entity:


Now browse to the entities page. Notice that there are now 3 total entities, one DnsRecord, and two IpAddress entities. Note also that the IpAddress entities are both are aliased to the “” DnsRecord. In this way, we can quickly find load balancers and other interesting DNS configurations.


Now, let’s try with a larger iteration strategy (3):4

Give it a few moments, and now, on the Entities view, filtering for IpAddress only, we can see the correlation of IpAddress to DnsRecord:


This is also a good way to find DNS entries that are no longer active or resolving to an IP, but this is left as an exercise for the reader.


Using scans to discover attack surface

So you’ve gotten an instance of intrigue-core up and running using the AMI or Docker guide, but what now!? Give scans a try. Here’s now.

Create a new project, let’s run this one on Mastercard (They run a public bounty on Bugcrowd):


Now, run a “Create Entity” task to create a DnsRecord with the name “”.

This time, however, let’s set our recursive depth to 3. This will tell the system to run all viable tasks when a new entity is created, recursing until we reach our maximum depth:


Hit “Run Task” and you’ll see that our entity was successfully created:


Now, let’s browse to the “Results” tab and get an overview of the “Autoscheduled Tasks” that have been kicked off automatically:


Wow, 83 tasks in just a few seconds! Core is FAST, thanks to Sidekiq and Sequel. Now we can browse over to the “Graph” tab, and get an overview of the entities (nodes) and the tasks (edges) that created them.


Note that the graph is generated every time you load the page, so you will need to refresh a couple times to get the graph to show. You can zoom in and out to get details on the nodes:


Browsing over to the “Dossier”, you can see that there’s some fingerprinting happening on the webservers, based on the page contents. Note that there’s nothing invasive happening here, this is simply just doing page grabs and analyzing the results:


One neat feature is that core actually parses web content – including PDFs and other file formats to pull out metadata. More to come on this!

All this in just a few minutes: attack_surface

Getting started with Intrigue Core on Docker

NOTE: this post will tell you how to build the standalone Docker image locally on your system. If you’d just like to USE the latest standalone docker image, there’s a pre-built image available on DockerHub

To build an Intrigue Core image using Docker, you’ll need to install Docker on your machine.

Next, pull down the Intrigue Core repository to your local machine with a git clone and jump into the directory:

$ git clone
$ cd intrigue-core

Then use Docker to build an image:

$ docker build -f Dockerfile-standalone . -t intrigue-core

Now, we can run the newly-minted image with Docker, and we’ll want to expose the UI/API listening on :7777! 

### Use the following command to start the Intrigue Core service
### NOTE: remove the -v option if you do not need to preserve
### data between runs!
$ docker run -e LANG=C.UTF-8 -v ~/intrigue-core-data:/data -p -it intrigue-core

NOTE: If you’re running on a system as a user other than root, you may need to add the —privileged flag.

This will start the docker image with the intrigue-core services, giving you output that looks like the following (shortened for brevity):

Starting PostgreSQL 10.0 database server                                                                                                                                                           [ OK ] 
Starting redis-server: redis-server.
Starting intrigue-core processes
[+] Setup initiated!
[+] Generating system password: [PASSWORD]
[+] Copying puma config....
[ ] File already exists, skipping: /core/config/puma.rb

* Listening on tcp://
Use Ctrl-C to stop

As it starts up, you can see that it generates a unique password. You can  now log in with the username intrigue and the password above at on your host machine!

Now, you’re up and running,  see: Up and running with Intrigue Core

Intrigue Core EC2 AMI

UPDATE: The latest test image can be found by searching ‘intrigue-core’ in Community AMIs. It is currently only available in the Northern Virginia (US-east-1) region on EC2.

The current AMI name is: intrigue-core-standalone-v0.70. The ID is: ami-076efce5ffba6e5c0 in US-East-1.

The instance is optimized for the m5.xlarge instance type, and make sure to open :7777 to your network.

Once it’s up & running, the services will need to be started with the provided command, copied below for convenience:

$ cd core && rake setup && rake update && god -c /home/ubuntu/core/util/god/intrigue-ec2.rb && god start

Congrats, you’re up and running! You can now access the core interface over SSL at https://HOSTNAME:7777.