diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..4f139684 --- /dev/null +++ b/404.html @@ -0,0 +1,1687 @@ + + + +
+ + + + + + + + + + + + + + +Coming soon
+Coming soon
+The SEI is a research institute, and so we often are thinking about how to use GHOSTS in new ways to drive insight for our customers. Some of this work makes it here, with the caveat that it might be early beta editions or require some amount of engineer hand-holding in its current state. Some call it pre-release, we call it advanced features.
+ + + + + + + + + + + + + + + +Coming soon
+The GHOSTS ANIMATOR Source Code Repository is hosted on GitHub, but has been archived.
+Animator has been baked into the main GHOSTS API. Any development on features listed here will be done in the main GHOSTS repository.
+Animator brings NPCs to life in two ways:
+Initial Creation
+Animator creates the initial NPC profile, including details such as name, address, career, finances, and family members. Based on configuration, it can place users in a multi-level organizational structure, and establish relationships between users.
+Animation Jobs
+Via jobs that can be run during training and exercise events, Animator can update the NPC's preferences, beliefs, and relationships. This enables dynamic NPCs that change over time.
+At its core, Animator is a realistic user detail generator. Its primary function is to create sufficiently realistic identities and accompanying verbose portfolios of personal information. Each generated user, or NPC (Non-Player Character) as we call them, has numerous categories of details associated with them, and a great deal of metadata that define who they are. Each piece of information is generated using sourced datasets in an attempt to distribute characteristics realistically. We like to say it creates, "NPCs so real, they sell for a premium on the dark web."1
+git clone <https://github.com/cmu-sei/GHOSTS-ANIMATOR>
+cd ghosts-animator/src
+docker build . -t ghosts/animator
+docker compose up -d
+
or if you don't want to build and just run the latest docker-compose file:
+mkdir ghosts-animator
+cd ghosts-animator
+curl https://github.com/cmu-sei/GHOSTS-ANIMATOR/blob/master/src/docker-compose.yml -o docker-compose.yml
+docker compose up -d
+
Note, most configuration that you may want to change is located in ./config, and so you can mount that directory to your local machine and make changes there.
+Now browse to http://localhost:5000/
+The data generated by Animator can be leveraged in multiple areas, but is particularly applicable in four key areas:
+Training Machine Learning Algorithms - Animator creates larges sets of hyper-realistic user data. It can be leveraged to generate data sets that can be used for training machine learning algorithms. This enables the rapid training of anthropology-related ML algorithms that can leverage one or more of the hundred-plus data points generated by Animator.2
+Honeypot Payloads - NPC details generated by Animator are designed to be as realistic as possible given the available relevant open source information. This makes the user data convincingly real while still being completely fabricated. Therefore, the data is ideal for use in applications like honeypots, where the goal is to trick an attacker into thinking they are compromising an asset with real user data. This data is also perfect for any other application that would benefit from extremely realistic user information.
+Insider Threat Modeling - Each Animator NPC is given an Insider Threat Profile. This profile determines how likely it is that the NPC is an insider threat by incorporating the CDSE's Insider Threat Potential Indicators. As we continue developing Animator, it will be possible to configure NPCs to be more or less likely to be insider threats based on factors like their finances, criminal history, foreign contacts, and mental health.
+Social Network and Relationship Modeling - Animator can establish relationships between the NPCs it generates. As we increase the fidelity of inter-NPC relationships, Animator NPCs create larger and more realistic social networks. By leveraging Animator's ability to quickly generate thousands of inter-related NPCs, Animator can easily be used to perform social networking modeling and research.
+Animator currently supports storing NPC data in a local Mongo Database. This feature is still being actively improved.
+ + + + + + + + + + + + + + + + +So, now we have Animator-generated NPCs, and they have profile information and preferences.
+Animator has a job system that might enables us to push our simulation further:
+Jobs operate on a "per cycle" or "step" basis. For each cycle, the job processes a list of agents, and the actions or determinations programmed for each.
+We can use any combination of the following to drive agent decision-making:
+We implement the Reiss Motivational Profile (RMP) - which is a mathematical framework for reasoning about agent comparative motivations - agent A is twice as motivated by X than agent B - that is baselined every few years.
+Agents build relationships with other agents in the cohort. These get better or worse over time.
+How this works is that each agent has the potential to interact with n other agents (they can also potentially transfer knowledge as a result). The more an agent knows about a particular subject, maybe the more likely they are to transfer information to another agent.
+Agents build knowledge across an array of subjects that may alter their preferences. Within Animator, there are two main ways to learn:
+What an agent believes can directly influence their behavior. Beliefs shape understanding of the world and guide decision-making and problem-solving. Agents come to belief utilizing Bayes Theorem, which is a mathematical framework for reasoning about probability of evidence.
+So what does this all mean? Here is an example where an agent shares bits of information on social media:
+Some tweets contain no insight about the agent. Some disclose some bit of information:
+Other agents — and adversaries — can see and infer from this information!
+There are several jobs currently configurable within the Animator system.
+This job is responsible for creating and maintaining the social graph of the agents. It is responsible for creating the initial graph, and then updating it as agents interact with each other, and learn different knowledge types.
+This job is responsible for creating and maintaining the bayesian social belief of the agents. It is responsible for creating the initial belief, and then updating it as agents interact with each other, and learn different knowledge types.
+Here be dragons
+The following run with Animator's use of faker to generate content, but really begin to shine when hooked to a Large Language Model (LLM), either hosted as a cloud service or locally.
+This job has agents create and post content on social media. It is responsible for creating the initial share based on the agent and their history. After creating a reasonable thing that agent would say on social media, Animator sends an activity to the GHOSTS API proper to send down to the agent to execute.
+This job has agents chat with each other on an OSS chat platform. It is responsible for creating the initial chat based on the agent and their history. After creating a reasonable thing that agent would say on social media, Animator sends an activity to the GHOSTS API proper to send down to the agent to execute.
+This has agents get their next instruction directly from an LLM, based on who they are and their history. While GHOSTS can execute many of these activities, some activty generated will be beyond the scope of this project, but its inclusion can provide rich histories from which to generate future activities. With a powerful LLM, this generates some exceptionally real activities, but can also be hard to control for the training and exercise audience.
+Initial work in LLM-driven autonomous GHOSTS agents was documented in our technical report titled Simulating Realistic Human Activity Using Large Language Model Directives.
+The following is a quick start guide to getting LLM-driven GHOSTS NPCs up and running. This guide assumes you have already installed the GHOSTS API and Animator, and have a working LLM. If you do not have an LLM, you might consider Ollama — which is very easy to setup and run on Apple Silicon (and where most reasonable models run very fast).
+The process to stand up and use Ollama is:
+cd chat
+ollama create chat
+ollama run chat
+
"ContentEngine": {
+ "Source": "ollama",
+ "Host": "http://localhost:11434",
+ "Model": "chat"
+ }
+
Animator is a simulation of a population of agents. Animator runs in cycles, and for each cycle, the agents make decisions based on their attributes, preferences, motivations, and behaviors.
+appsettings.json
file points to Animator-specific configuration, which by default is in ./config/config.json
: {
+ "ApplicationDatabaseSettings": {
+ "ConnectionString": "mongodb://ghosts-mongo:32770",
+ "DatabaseName": "AnimatorDb"
+ },
+ "ApplicationSettings": {
+ "GhostsApiUrl": "http://localhost:52388/", //the root url of the Ghosts API
+ "Proxy": "",
+ "Animations": {
+ "IsEnabled": false, //if false, then all animations are disbled
+ "SocialGraph": {
+ "IsEnabled": false, //if false, just this animation is disabled
+ "IsMultiThreaded": true, //helpful to set to false for debugging purposes
+ "IsInteracting": true, //means new agent interactions are being generated
+ "MaximumSteps": 4000, //max steps to execute
+ "TurnLength": 9000, //ms per step
+ "ChanceOfKnowledgeTransfer": 0.3, //chance that an agent will share knowledge with another agent
+ "Decay": {
+ "StepsTo": 10, //min steps to execute before an agent begins forgetting things
+ "ChanceOf": 0.05
+ }
+ },
+ "SocialBelief": {
+ "IsEnabled": false,
+ "IsMultiThreaded": true,
+ "IsInteracting": true,
+ "MaximumSteps": 300,
+ "TurnLength": 9000
+ },
+ "SocialSharing": {
+ "IsEnabled": false,
+ "IsMultiThreaded": true,
+ "IsInteracting": true,
+ "IsSendingTimelinesToGhostsApi": false,
+ "IsSendingTimelinesDirectToSocializer": true,
+ "PostUrl": "http://localhost:8000",
+ "MaximumSteps": 100,
+ "TurnLength": 9000,
+ "ContentEngine": {
+ "Source": "ollama",
+ "Host": "http://localhost:11434",
+ "Model": "chat"
+ }
+ },
+ "Chat": {
+ "IsEnabled": false,
+ "IsMultiThreaded": true,
+ "IsInteracting": true,
+ "MaximumSteps": 300,
+ "TurnLength": 9000,
+ "IsSendingTimelinesToGhostsApi": false,
+ "PostUrl": "http://localhost:8065",
+ "ContentEngine": {
+ "Source": "ollama",
+ "Host": "http://localhost:11434",
+ "Model": "chat"
+ }
+ },
+ "FullAutonomy": {
+ "IsEnabled": false,
+ "IsMultiThreaded": true,
+ "IsInteracting": true,
+ "IsSendingTimelinesToGhostsApi": false,
+ "MaximumSteps": 10000,
+ "TurnLength": 9000,
+ "ContentEngine": {
+ "Source": "ollama",
+ "Host": "http://localhost:11434",
+ "Model": "activity"
+ }
+ }
+ }
+ },
+ "AllowedHosts": "*",
+ "ClientSettings": {
+ },
+ "CorsPolicy": {
+ "Origins": [
+ "http://localhost:4200"
+ ],
+ "Methods": [],
+ "Headers": [],
+ "AllowAnyOrigin": false,
+ "AllowAnyMethod": true,
+ "AllowAnyHeader": true,
+ "SupportsCredentials": true
+ }
+ }
+ ...
+
After you update the appsettings.json file, you will need to restart the Animator API server via:
+docker restart animator-api
+
{"use strict";/*!
+ * escape-html
+ * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
+ * MIT Licensed
+ */var Va=/["'&<>]/;qn.exports=za;function za(e){var t=""+e,r=Va.exec(t);if(!r)return t;var o,n="",i=0,a=0;for(i=r.index;i