Application Framework Documentation - x684867/nemesis_server GitHub Wiki

Core Architecure

The Nemesis project is built on top of a Linux-based node.js environment. While future efforts may port this over to Windows, that effort will have to come later. For now, Linux is the most cost effective platform for Nemesis, providing everything it needs and then some.

There are a couple architectural goals the following design aims to achieve:

  1. Nemesis must be horizontally scalable on the server side to support an arbitrary number of agents across multiple networks with extremely low latency.

  2. Nemesis must be energy efficient and elastically scalable to conserve operating costs in real time.

  3. Nemesis must separate individual data elements into "security zones" to prevent any one server's demise from leading to a greater exploit.

To achieve these goals:

  1. Nemesis is built on a Node.js framework that operates behind a NGINX web server.
  2. NGINX provides load balancing and defense-in-depth added security.
  3. Node.JS provides an elastically scalable (internal and clustered) worker framework which allows work to span multiple processor cores and multiple physical or virtual hosts load balanced by NGINX.
  4. Nemesis divides the key management service across four (4) separate web services (audit, broker, cipher and key). These services divide the workload into security zones where each unit's data can be compromised without completely compromising the entire system in a reasonably short amount of time.
  5. The system uses a system of policy management strategies to mitigate the impact of any breach.

Theory of Operation

Framework Packages and Assets

Section Package/Module/Component Comments
Framework: App(Main) Framework: App The app object (root.app) includes the core application object and its configuration created and loaded by the bootloader.
Framework: App(Main) Framework: Bootloader The file bootloader.js is the execution entry point for the Nemesis application and its framework.
Framework: App(Main) Framework: packageLoader The packageLoader.js file loads and manages the packages during run-time (with possible plans to extend the functionality over time to package installation and a 'build' process. Note that Framework "packages" are NOT intended to replace Node.JS NPM modules. Packages provide higher-level functionality specific to the framework. Nothing exists to say that a Package can't use an NPM module.
Framework: JSON Extensions JSON-Active Package This package will provide "activeJSON" parsing and loading functionality. Active JSON is a JSON object which includes functions and comments to present merged code-data objects for interoperability of software entities across processes and even hosts.
Framework: JSON: Extensions JSON-Commented Package This package provides functionality to support C-style comments within JSON ojbects.
Framework: JSON Extensions JSON-Config Package JSON-config.js extends the JSON object to provide tools for validating, managing and interacting with JSON-based configuration files.
Framework: Packages Types Package Centralized type management
Framework: Packages Screen Package Pretty Stdout (Screen Management) Package
Framework: Packages Error Package Centralized Error Management
Framework: Packages Logger Package Centralized SYSLOG Package (Overloading Screen Package)
⚠️ **GitHub.com Fallback** ⚠️