/stix-viz

STIX Visualization Tool

Primary LanguageHTMLBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

****************************************************

      STIX Viz v1alpha5

 Copyright (c) 2014 - The MITRE Corporation
 All rights reserved. See LICENSE.txt for complete terms.

****************************************************

BY USING THE STIX VIZ APPLICATION, YOU SIGNIFY YOUR ACCEPTANCE OF THE 
TERMS AND CONDITIONS OF USE.  IF YOU DO NOT AGREE TO THESE TERMS, DO NOT USE 
THE STIX VIZ APPLICATION. 

For more information, please refer to the terms.txt file.

#################################################################
StixViz v1.0 alpha5
Compatible with STIX v1.0.1

This is a proof of concept prototype to visualize a set of STIX documents 
as a node-link tree with the root at the top of the XML structure.

StixViz is implemented in Javascript as a standalone application using the node-webkit
application runtime which is based on the Chromium rendering engine and node.js.


To use STIXViz, first select a set of related XML files using the
'Choose Files' menu.  

STIXViz v1.0a5 includes three different views of STIX documents: Graph View,
Tree View and Timeline View. These views show the same information using different layouts. 
To switch between views, use the drop-down menu at the top of the 
window. On startup, the default view is Graph View.  


Graph View

Graph View displays the same entities as tree view, but in a fully connected
graph layout. The graph view uses a force-directed graph layout in order to 
dynamically position the nodes. Nodes may be dragged into a new position, 
in which case the layout will dynamically reconfigure itself. 

Nodes in the Graph View are expandable. The display begins with all but the top two 
levels collapsed. To view the underlying structure of a node, single-click on the node 
and it will expand. Single-click again and the node will collapse. Leaf nodes
are nodes with no children, and are represented by a washed-out color scheme and 
no dark border. 

By default, the graph includes "Grouping" nodes which are a parent of all nodes of the same
type. To remove these grouping nodes and see just the entity nodes in the graph, click
the "Ungroup" button in the menu bar. 

Hovering over a node in graph view highlights the links with other nodes. In-links
are shown in blue and out-links in green. 

Nodes may be fixed in position using the right-button context menu on each 
node. If a node is fixed, it may be dragged to a new position and it will stay 
where it was placed. Nodes may be un-fixed again using the context menu. 

Nodes and links may be filtered using the Filter menu on the left of the screen. Uncheck 
checkbox next to a node type to hide all nodes of that type. Click the plus sign next 
to a node type to see a list of all link types associated with that node type. Filter
links using the checkboxes next to the link types.

Nodes may also be hidden using the context menu. To re-display a hidden node, 
click on its parent node. 



Tree View

STIXViz Tree View displays a tree containing nodes for top
level STIX entities:  campaign, course of action, exploit target,
incident, indicator, observable, threat actor, and TTP. When the tree
first displays, there is a top level node shown for each component type
included in the xml files processed.  Nodes with a black and white
border can be expanded with a single click.

Each category of top level "items" is turned into a node in the tree. 
The nodes themselves are expandable to show the structure of the relationships 
between entities.  

A down arrow on a link indicates that the child node is specified as
part of the parent node's XML.  For instance, a campaign will contain
links with down arrows to indicator nodes specified by
campaign:Related_Indicators.

An up arrow indicates that the parent node is specified via an idRef
attribute in the child node.   For instance, a threat actor will contain
links to it from incident nodes that specify it under
incident:Threat_Actors.

Long node names are truncated in the tree view.  Mousing over a named
node will display the node's id if it has one, as well as the full
version of the text used as it's name.

A double click on a node will cause it to become the root node of the
tree, hiding other branches from view.   Double click on the root node
again to walk back up the tree.



Timeline View: 

The timeline view shows timestamped entities within a STIX document, such as 
incidents and their associated activities. Events that occur at a single point
in time are represented by a dot, and events that occur over a period of time (with a
start and end time) are represented by a horizontal bar. Different types of 
events are displayed with different colors, as denoted by the legend at the
upper right of the timeline view. 

The timeline can be zoomed and scrolled. When a new STIX file is loaded, it will 
initially display the full extent of the time period represented in the file. To zoom in on 
a specific period of time within the file, you can click and drag on the Overview bar
below the main timeline display. When a region of time in the overview bar is selected, 
the main timeline will zoom in on that region of time. You can then scroll the selected
area within the overview bar and the main display will scroll to show the corresponding
time interval.  



HTML Transform

The 'Show HTML' menu at the top of the page can be used to display an
XSLT transformed file at the bottom of the STIXViz window. In both Tree View and
Graph View, nodes that have an id specified in the XML file can be displayed 
in the HTML view as well. To do this, click right on the node and select 'Show HTML'.



This is a work in progress.  Feedback is most welcome!

requirements:
 - node webkit framework including mime module from node.js (currently tested with node-webkit v0.9.2) 
 - node.js (currently tested with version 0.10.13)
 - bootstrap.js (v3.0)
 - d3.js (v3)
 - jquery and jquery-ui (tested with jquery 1.10.2)
 - Stix HTML package (tested with v1beta4)
 - one or more STIX 1.0 input xml documents
 - Java 1.7 executable for XSLT transforms
    - Java Gson package (tested with 2.2.4)
    - Saxon HE (tested with version 9.5.3)
 
v1.0alpha5
2014-06-13

STIX - http://stix.mitre.org
#################################################################
--------------------------------------------------------------------------------
--Included Files----------------------------------------------------------------

README: this file.
LICENSE.txt
-src
 -nodejs: Runnable NodeJS package 
    index.html: The main html page for the application
    package.json: node-webkit config file for the StixViz app
    java.exe: Java executable needed for xslt STIX to HTML transform
    -public
     -js
        StixViz.js: Top level StixViz app
        JavaRpcClient.js: Remote connection to Java processing of XML transform
        STIXJsonGeneration.js:Manages conversion of STIX files into JSON
        STIXRelationshipJson.js: Transforms STIX XML into JSON data structure for tree layout
        STIXTTPProcessing.js: Converts TTP structure to JSON
        STIXNameResolver.js: Determine node names
        STIXRelationshipTree.js: Displays the tree structure
        STIXRelationshipGraph.js: Displays the graph structure
        STIXTTPProcessing.js: Process TTPs into Json
        STIXXSLTTransformer.js: Converts XML to HTML
        STIXUtilities.js: Utilities for XML to JSON conversion
        STIXRelationshipTimeline.js: Displays the Timeline view
        STIXTimelineJson.js: converts STIX to JSON Format for timeline
        -bootstrap
          bootstrap.min.js
        -d3
          d3.v3.js
        -jquery
          jquery-1.10.2.min.js
        -jquery-ui
          jquery-ui-1.10.3.custom.min.js
          jquery.ui.draggable.js
          -plugin
            jquery.layout-latest.min.js
      -xslt
        -images
          directory of icon images
        cybox_common.xsl
        icons.xsl
        normalize.xsl
        stix_common.xsl
        stix_to_html.xsl
        common.js
        wgxpath.install.js
        common.css
        theme_default.css
        
     -css
      stixLayout.css: common styles used by all views
      treeLayout.css: Stylesheet for tree display
      graphLayout.css: Stylesheet for graph view
      timeline.css: Stylesheet for timeline view
      -bootstrap
        bootstrap.min.css
      -jquery-ui
        jquery-ui-1.10.3.custom.min.css
        -plugin
          layout-default.css
    -node_modules
      mime
        node.js mime package contents
    -dist
      NodeRpc.jar: java package for handling remote procedure calls to perform XSLT transform
  -java
    Source code for the Java RPC library to respond to requests for XSLT transform. The executable jar file 
    containing this code is included in the "dist" directory of the nodejs package.
    
--------------------------------------------------------------------------------
--Usage Notes-------------------------------------------------------------------

Building: 
The StixViz app depends on the node.js "mime" module which is available from the npm package management system.
The mime module is already included in the node_modules directory of this package. To 
reinstall the mime module, be sure you have node.js installed, then cd to the root directory of the StixViz app 
and execute the command: 
> npm install mime

To run the StixViz app using node-webkit, execute the following command: 

> nw.exe {path to StixViz main directory}

To package the StixViz app to run standalone perform the following steps on Windows: 

1. Create a zip file (NOT zipx) containing index.html, package.json, the public directory and the node_modules directory
2. Name the zip file StixViz.nw
3. At the command prompt run 
> copy /b nw.exe+StixViz.nw StixViz.exe
This will create an executable StixViz.exe 
4. The executable requires the following files that come with the node-webkit distribution to be on the path:
nw.pak 
icudt.dll
ffmpegsumo.dll
libEGL.dll
libGLESv2.dll

On other platforms follow the instructions from https://github.com/rogerwang/node-webkit/wiki/How-to-package-and-distribute-your-apps 

-- Runnning from Binary Executable --

A pre-packaged Java 7 executable is available from the GitHub release page at 
https://github.com/STIXProject/stix-viz/releases/download/v1.0.5a/StixVizDistro_Windows_java7.zip

A pre-packaged Java 8 executable is available from the GitHub release page at 
https://github.com/STIXProject/stix-viz/releases/download/v1.0.5a/StixVizDistro_Windows_Java8.zip

To run the pre-packaged Windows executable, extract all of the files included in the zip file into a directory and double click the file StixViz.exe. 

A pre-packaged Mac OSX executable can be downloaded from https://github.com/STIXProject/stix-viz/releases/download/v1.0.5a/StixViz_Mac.zip.
Extract StixViz.app from the zip file.