OWASP Jupiter

From OWASP
Revision as of 20:18, 15 April 2019 by Mattstanchek (talk | contribs) (Added description of what data Jupiter captures)

Jump to: navigation, search
OWASP Project Header.jpg

Introduction

An Application Security program is more successful when coverage of its processes and tooling can be proven. Unfortunately, software inventory lists consist of some custom-written applications for an organization but also include systems and software that aren't in scope for a traditional AppSec program (Active Directory or Adobe Reader, for instance).

Making matters worse, organizations are constantly transforming the ways they operate. New software is being written and deployed every day:

  • Microservices
  • Marketing sites
  • Batch jobs
  • New e-commerce features
  • Mobile apps

Traditional ITAM solutions aren't tracking these custom-written applications that are the lifeblood of your organization because they aren't designed to find them.

If "who owns this?" or "did you know this was in production?" sounds familiar, you're not alone.

OWASP Jupiter - Application Inventory Management System

Existing DevOps processes already know what software is being built and when it is being deployed.

What if we leveraged those DevOps processes to gather crucial information about the organization’s software applications?

Jupiter.png
Having quality application inventory data enables:
  • Improved insight into what is being built and deployed across the software portfolio
  • Efficient onboarding to Application Security tools and processes (static analysis, dynamic analysis, open source software component analysis, penetration testing, vulnerability management)
  • Enhanced metrics capabilities to determine tool and process coverage as well as the organization’s Application Security maturity level

What is an application? Asking that question to five different people will probably yield five different answers.  In terms of what the Jupiter Application Inventory Management System considers an application, it can be thought of as a singular module or code project unit that is built and deployed independently (aside from data or operating environment dependencies).

Taking another step, an application has certain attributes.  It has a name.  It has a codebase and thus a code repository.  Where is that repository?  It might have a team that supports it and somebody who is ultimately responsible for it.  Who owns it? These are the types of questions Jupiter helps to solve.

Data collected includes:

  • Common Name: The most widely known or current name of the application
  • Aliases: Other names the application might have or have had previously
  • Description: A brief synopsis of the application’s purpose for existing
  • Code Repository URL: The location where the application’s code is stored and versioned
  • Binary Repository URL: The location where build artifacts are stored and versioned
  • Primary Language: The most prominent programming language used in the application’s codebase
  • Secondary Languages: Additional programming languages used in the application’s codebase
  • Type: Applications might have a particular role inside of an application ecosystem, such as a microservice, user interface, batch job, etc.
  • Primary Owner: A person who has ultimate responsibility for the direction or well-being of the application
  • Secondary Owners: Other people who may be delegates of the Primary Owner
  • Business Unit: Particularly important in large organizations, this is the specific group within the organization to which the application belongs
  • Exposure: Applications have varying ways they can be exposed – internal to the organization, publicly available on the internet, or to a select group of users
  • Number of Users: The number of users (or an estimate) of the application
  • Data Classification: Many organizations have a data risk classification hierarchy and applications may fall into one of the categories
  • Deployment Environment: Because the Collector captures information at the build and deployment stages, the specific environment to which the build is destined can be recorded (e.g. QA, UAT, Production, etc.)
  • Deployment Environment URL: Correlating to the Deployment Environment, this is a URL for the application if it is a web application or service
  • Risk Level: Many organizations have formal risk levels that determine prioritization of resources aside from data categorization (can be a factor of data classification and exposure)
  • Regulations: Applicable regulations such as PCI, SOX, HIPPA, etc. can be listed
  • Chat Channel: Many application development and support teams have a way to communicate with each other and to collaborate within their organization such as Slack or Glip
  • Agile Scrum Board URL: Development teams often keep a list of their in-flight work and backlog in a project tracking system such as Jira or Redmine
  • Build Server URL: The CI server from which the recorded build or deployment originated
  • Age: Applications can have a long life and understanding a given application’s age can help determine risk and gauge other implications
  • Lifecycle Stage: Similar to age, an application can be New, in a Maintenance steady-state, or in Retirement
  • Last Deployment Date: The last date on which the application was deployed

High Level Design

Jupiter is a microservice-based solution that consists of several components.

First, the Jupiter Collector Service can gather primitive inventory data (antecessors) directly from DevOps tools, such as continuous integration servers like Jenkins via the Jupiter Collector Plugin, when the software is built and deployed.

The Inventory Management Console connects to the collector service and facilitates enrichment of the antecessor data into “gold records” representing an application.  These records are stored by the Curated Inventory Service via REST API or through the management console.

Jupiter High Level Design
Jupiter High Level Design

Project Resources

Source Code

Project Leader

Matt Stanchek

Classifications

Project Type Files TOOL.jpg
Incubator Project Owasp-builders-small.png
Owasp-defenders-small.png

Jupiter Application Inventory Management System Roadmap

  1. Collector Service
    1. Authentication
      • Utilize Auth Service for JWT validation
    2. Authorization
      • Based on JWT payload, enforce restrictions on CRUD operations
    3. Database Connectivity
      • Update Mongo connection code to update deprecated connection method
    4. Input Validation
      • Input length checks
      • Input type checks
    5. Data Fields
      • Enable data fields beyond Common Name and Primary Owner
    6. Containerization
      • Prepare Dockerfile
      • Build Docker container
      • Deploy and test Docker container
  2. Curated Inventory Service
    1. Authentication
      • Utilize Auth Service for JWT validation
    2. Authorization
      • Based on JWT payload, enforce restrictions on CRUD operations
    3. Input Validation
      • Input length checks
      • Input type checks
    4. Data Fields
      • Enable Application-specific data fields beyond Common Name and Primary Owner
      • Enable capture of Collector Service instance ID
    5. Data Integrity
      • Restrict Common Name to unique values
    6. Containerization
      • Prepare Dockerfile
      • Build Docker container
      • Deploy and test Docker container
  3. Auth Service
    1. Authentication
      1. Enable LDAP authentication
        • Build LDAP integration capabilities
        • Based on successful username/password LDAP authentication, provide time-limited JSON Web Token for subsequent requests
        • Enable facility to validate expiration of tokens and deny access to expired tokens
    2. Authentication
      • Define user roles (administrator, reader, creator/updater)
      • Enable issuance of tokens that restrict access based on user role
  4. Management Console
    1. Base Architecture
      1. Add Local SQLite Database
        • Enable saving of configuration and preferences
    2. Authentication
      1. Collector Services
        • Build an interface to allow configuration of Collector Services
      2. Curated Inventory Service
        • Build an interface to allow configuration of Curated Inventory Service
    3. Data Fields
      • Enable Application-specific data fields beyond Common Name and Primary Owner
    4. External Integrations
      Consistent naming across multiple external Application Security tools will allow for greater future automation and reporting as well as utilization.
      • Enable set up of Application in Fortify Software Security Center
      • Enable set up of Application in OWASP Dependency-Track
      • Enable set up of Application in OWASP Defect Dojo
      • Enable set up of Application in OWASP SecurityRAT
    5. User Experience
      1. Antecessors
        • Aggregate all Collectors’ data in available Antecessors list when there is more than one Collector Service defined
  5. Jenkins Collector Plugin
    1. Input Validation
      • Input length checks
      • Input type checks
    2. Connectivity Validation
      • Add a “Test Connection…” button to the Global config screen to test the Collector URL and token
    3. Data Fields
      • Enable Application-specific data fields beyond Common Name and Primary Owner under “Advanced”


FAQ

Q: Why is this project named "Jupiter"?

A: In 2001: A Space Odyssey, the Discovery One embarked on a mission to investigate the signal sent from the monolith on the Moon to Jupiter. In 2010: The Year We Make Contact, the crews of the Discovery and Leonov witness countless monoliths emerge from Jupiter before it is converted into a star. Aside from the cool sci-fi reference, there is an analog to what this project is for -- to start with a small amount of information about software applications in an organization's portfolio and build upon that knowledge to find more.