All Projects → BBVA → mist

BBVA / mist

Licence: Apache-2.0 License
Create complex tools execution Workflows for working together

Programming Languages

python
139335 projects - #7 most used programming language
HTML
75241 projects
javascript
184084 projects - #8 most used programming language
shell
77523 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to mist

Github Actions For Desktop Apps
This repo contains a sample WPF application to demonstrate how to create CI/CD pipelines using GitHub Actions.
Stars: ✭ 156 (+642.86%)
Mutual labels:  continuous-integration, continuous-testing
boilerplate-typescript-rest-docker
How to use TypeScript & Docker building a REST service with debugging enabled (e.g. WebStorm or VSCode).
Stars: ✭ 17 (-19.05%)
Mutual labels:  continuous-integration, continuous-testing
Nevergreen
🐤 A build monitor with attitude
Stars: ✭ 170 (+709.52%)
Mutual labels:  continuous-integration, continuous-testing
Cdeasy
Continuous Delivery made Easy ;)
Stars: ✭ 143 (+580.95%)
Mutual labels:  continuous-integration, continuous-testing
swarmci
Swarm CI - Docker Swarm-based CI system or enhancement to existing systems.
Stars: ✭ 48 (+128.57%)
Mutual labels:  continuous-integration, continuous-testing
Terrahub
Terraform Automation and Orchestration Tool (Open Source)
Stars: ✭ 148 (+604.76%)
Mutual labels:  continuous-integration, continuous-testing
kraken
Kraken CI is a continuous integration and testing system.
Stars: ✭ 87 (+314.29%)
Mutual labels:  continuous-integration, continuous-testing
Flagsmith Frontend
Web App and Mobile App for Flagsmith
Stars: ✭ 86 (+309.52%)
Mutual labels:  continuous-integration, continuous-testing
phpci-installer
PHPCI Easy Installer for Laravel Homestead
Stars: ✭ 19 (-9.52%)
Mutual labels:  continuous-integration, continuous-testing
build-plugin-template
Template repository to create new Netlify Build plugins.
Stars: ✭ 26 (+23.81%)
Mutual labels:  continuous-integration, continuous-testing
Build
Netlify Build runs the build command, Build Plugins and bundles Netlify Functions.
Stars: ✭ 135 (+542.86%)
Mutual labels:  continuous-integration, continuous-testing
noise-php
A starter-kit for your PHP project.
Stars: ✭ 52 (+147.62%)
Mutual labels:  continuous-integration, continuous-testing
Jacoco Plugin
Jenkins JaCoCo Plugin
Stars: ✭ 119 (+466.67%)
Mutual labels:  continuous-integration, continuous-testing
Fledge
Fledge: A CI/CD tool for Flutter
Stars: ✭ 152 (+623.81%)
Mutual labels:  continuous-integration, continuous-testing
Pipelines
Build pipelines for automation, deployment, testing...
Stars: ✭ 105 (+400%)
Mutual labels:  continuous-integration, continuous-testing
Rok8s Scripts
Opinionated scripts for managing application deployment lifecycle in Kubernetes
Stars: ✭ 248 (+1080.95%)
Mutual labels:  continuous-integration, continuous-testing
Gocd
Main repository for GoCD - Continuous Delivery server
Stars: ✭ 6,314 (+29966.67%)
Mutual labels:  continuous-integration, continuous-testing
Structured Acceptance Test
An open format definition for static analysis tools
Stars: ✭ 10 (-52.38%)
Mutual labels:  continuous-integration, continuous-testing
badwolf
Docker based continuous integration, continuous deployment and code lint review system for BitBucket
Stars: ✭ 88 (+319.05%)
Mutual labels:  continuous-integration, continuous-testing
prettier
🔨 Native, blazingly-fast Prettier CLI on Github Actions
Stars: ✭ 19 (-9.52%)
Mutual labels:  continuous-integration, continuous-testing

MIST LOGO

When you need to create complex Workflows and need to communicate different tools working together, maybe you need MIST.

What is MIST

MIST is a high level programming language for defining executions workflows easily.

MIST is interpreted. So, you can use their command line interpreter for running .mist programs. MIST interpreter will create the workflow graph, execute each tool, manage executions and synchronization fo you.

A quick example about how to run a MIST program:

> mist run my_program.mist

Installing

> pip install mist-lang

Quick Start

Requirements

Before start, we should install some command line tools used by catalog functions in the Demos:

dnsrecon (for searchDomains)

  • Mac & Linux: pip install git+https://github.com/cr0hn/dnsrecon

nmap (fir findOpenPorts)

  • Mac: brew install nmap
  • Ubuntu: sudo apt install nmap

kafka-console-consumer & kafka-console-producer

  • Mac: brew install kafka
  • Ubuntu: sudo apt install kafka

NOTE: For Demo 3 to 5 a Kafka server is expected to be running at localhost

festin

  • Mac & Linux: pip install festin

NOTE: Is also recommended to install tor in order to prevent being banned when using festin

aws (for S3Store)

  • Mac: brew install awscli
  • Ubuntu: sudo apt install awscli

Demo 1 - The simplest scenario

Explanation

In this scenario we'll do:

  1. CLI Input - Read a domain as a parameter from CLI.
  2. Search Domains - Use MIST function for search related domains / sub-domains from a start domain.
  3. Fin OpenPorts - Search open port for each new domain / sub-domain found.
  4. Screen (Pring) - Displays the results into the screen (by using MIST 'print' function).

Use case diagram

Demo 1

MIST code (examples/demo/scenario-01.mist)

include "searchDomains" "findOpenPorts"

searchDomains(%domain) => findOpenPorts("80,443") => print()

Execute

> mist run examples/demo/scenario-01.mist domain=example.com

Demo 2 - Sending results to Kafka

Explanation

In this scenario we'll do:

  1. CLI Input - Read a domain as a parameter from CLI.
  2. Search Domains - Use MIST function for search related domains / sub-domains from a start domain.
  3. FindOpenPorts - Search open port for each new domain / sub-domain found.
  4. Kafka output - Send results to a Kafka topic.

Use case diagram

Demo 2

MIST code (examples/demo/scenario-02.mist)

include "searchDomains" "findOpenPorts" "kafkaProducer"

searchDomains(%domain) => findOpenPorts("80,443") =>
    kafkaProducer($KAFKA_SERVER, "domainsTopic")

Execute

> mist run examples/demo/scenario-02.mist domain=example.com

Demo 3 - Adding new tool and remove duplicate domains

Explanation

In this scenario we'll do:

  1. CLI Input - Read a domain as a parameter from CLI.
  2. Search domains:
    1. Search Domains - Use MIST function for search related domains / sub-domains from a start domain.
    2. Festin - Use MIST integration for Festin for search related domains / sub-domains from a start domain.
  3. Filter Repeated - Use MIST function to detect and remove repeated found domains.
  4. Fin OpenPorts - Search open port for each new domain / sub-domain get from Fitler Repeated.
  5. Kafka output - Send results to a Kafka topic.

Use case diagram

Demo 3

MIST code (examples/demo/scenario-03.mist)

include "searchDomains" "festin" "findOpenPorts" "filterRepeated" "kafkaProducer"

searchDomains(%domain) => foundDomains
festin(%domain, $DNS_SERVER, True) => foundDomains

foundDomains => filterRepeated(False) =>
    findOpenPorts("80,443") => kafkaProducer($KAFKA_SERVER, "domainsTopic")

Execute

> mist run examples/demo/scenario-03.mist domain=example.com

Demo 4 - Send results to Kafka and S3 through a dispatcher

Explanation

In this scenario we'll do:

  1. CLI Input - Read a domain as a parameter from CLI.
  2. Search domains:
    1. Search Domains - Use MIST function for search related domains / sub-domains from a start domain.
    2. Festin - Use MIST integration for Festin for search related domains / sub-domains from a start domain.
  3. Filter Repeated - Use MIST function to detect and remove repeated found domains.
  4. Find OpenPorts - Search open port for each new domain / sub-domain get from Fitler Repeated.
  5. Dispatcher (80 / 443) - Split results and send each port to a different queue.
  6. Send results:
    1. Kafka output - Send found 80 ports to a Kafka topic.
    2. S3 output - Send found 443 ports to a AWS S3 bucket.

Use case diagram

Demo 4

MIST code (examples/demo/scenario-04.mist)

include "searchDomains" "festin" "findOpenPorts" "filterRepeated" "kafkaProducer" "S3Store"

function dispatcher(p) => kafka, S3 {
    if (isEqual(p.port, "80")) {
        p => kafka
    } else {
        p => S3
    }
}

searchDomains(%domain) => foundDomains
festin(%domain, $DNS_SERVER, True) => foundDomains

foundDomains => filterRepeated(False) =>
    findOpenPorts("80,443") => dispatcher() => kafkaOutput, S3Output

kafkaOutput => kafkaProducer($KAFKA_SERVER, "domainsTopic")
S3Output => S3Store($BUCKET_URI)

Execute

> mist run examples/demo/scenario-04.mist domain=example.com

Demo 5 - Read from Kafka and a File

Explanation

In this scenario we'll do:

1 Input from multiple sources:

  1. File Input - Read domains from an external file.
  2. Kafka Input - Read domains from Kafka topics.
  3. CLI Input - Read domains from CLI.
  4. Search domains:
    1. Search Domains - Use MIST function for search related domains / sub-domains from a start domain.
    2. Festin - Use MIST integration for Festin for search related domains / sub-domains from a start domain.
  5. Filter Repeated - Use MIST function to detect and remove repeated found domains.
  6. Find OpenPorts - Search open port for each new domain / sub-domain get from Fitler Repeated.
  7. Dispatcher (80 / 443) - Split results and send each port to a different queue.
  8. Send results:
    1. Kafka output - Send found 80 ports to a Kafka topic.
    2. S3 output - Send found 443 ports to a AWS S3 bucket.

Use case diagram

Demo 5

MIST code (examples/demo/scenario-05.mist)

include "searchDomains" "festin" "findOpenPorts" "filterRepeated" "kafkaProducer" "S3Store" "kafkaConsumer" "tail"

function dispatcher(p) => kafka, S3 {
    if (isEqual(p.port, "80")) {
        p => kafka
    } else {
        p => S3
    }
}

kafkaConsumer($KAFKA_SERVER, "inputTopic", "*END*", False) => inputDomains
tail("domains.txt", "*END*") => inputDomains
%domain => inputDomains

inputDomains => searchDomains() => foundDomains
inputDomains => festin($DNS_SERVER, True) => foundDomains

foundDomains => filterRepeated(False) => findOpenPorts("80,443") =>
    dispatcher() => kafkaOutput, S3Output

kafkaOutput => kafkaProducer($KAFKA_SERVER, "domainsTopic")
S3Output => S3Store($BUCKET_URI)

Execute

> mist run examples/demo/scenario-05.mist domain=example.com

Authors

MIST is being developed by BBVA-Labs Security team members.

Contributions

Contributions are of course welcome. See CONTRIBUTING or skim existing tickets to see where you could help out.

License

MIST is Open Source Software and available under the Apache 2 license

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].