Skip to content

Commit 2ef7ed7

Browse files
committed
4.3 Release
1 parent ef73e4d commit 2ef7ed7

File tree

388 files changed

+4359
-12870
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

388 files changed

+4359
-12870
lines changed

content/about/history.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ I'd like to personally thank and recognize the amazing engineers that I have had
2626
### Scot 3 Engineers
2727
* Nick Peterson
2828
* Nick Georgieff
29-
* Bryce Montoya
29+
* Bryce Montano
3030
* Javier Chavez
3131

3232
### Scot 4 Engineers

content/administration/ad.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,36 @@ SCOT can use AzureAD to authenticate users.
1111
To configure this type of authentication fill in the following fields:
1212

1313
Scopes
14-
: ?
14+
: The scopes to request when logging in (optional)
1515

1616
Authority
17-
: The URI to the AD authority
17+
: The authority used to log in to Azure; this is usually in the format https://login.microsoftonline.com/<tenant_id> or https://login.microsoftonline.com/
1818

1919
ClientID
20-
: ?
20+
: The client ID of your application in Azure Active Directory
2121

2222
Access Roles
23-
: ?
23+
: If set, users will be required to have the given application role in order to log in
2424

2525
Callback URL
26-
: ?
26+
: The callback url configured for your SCOT instance, this should usually be the base of the SCOT GUI, e.g. https://your-scot-instance.com/
2727

2828
Client Secret
29-
: ?
29+
: A client secret configured for your application in Azure Active Directory
3030

3131
Provider Name
32-
: ?
32+
: A name that identifies this authentication instance
3333

3434
Auto-create Groups
35-
: Select this if you want SCOT to automatically create corresponding Roles.
35+
: When set, SCOT will auto-create roles matching the names of all configured application roles when a user logs in
36+
3637

3738
Un-Email Usernames
38-
: Select this if you do not want usernames in the form of "[email protected]"
39+
: Whether or not to attempt to convert the username provided by Azure out of email address format (dropping the portion after the @)
40+
3941

4042
Certificate Authority Bundle
41-
: ?
43+
: When set to a path, the given certificate bundle is used instead of the default certificate bundle. Useful if the network is behind an intercepting proxy.
44+
4245

4346

content/administration/ldap.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ LDAP Authentication is set up by an admin user by going to the Administration Se
1111
Setting up LDAP for authentication can be very tricky, and it is recommended that you work with your local LDAP administrator to set the following settings.
1212

1313
Server
14-
: the FQDN of the LDAP Server
14+
: The address of the LDAP server
1515

1616
Bind User
1717
: the user with permission to bind to LDAP and perform queries
@@ -20,10 +20,10 @@ Bind Password
2020
: password for the Bind User
2121

2222
Test User
23-
: ?
23+
: A user that can be looked up to test user queries
2424

2525
Test Group
26-
: ?
26+
: A group that can be looked up to test group queries
2727

2828
Group Base DN
2929
: the DN for retrieving a set of groups. E.g. `ou=groups,ou=orgname1,dc=dcname1,dc=dcname2`
@@ -32,31 +32,31 @@ Group Filter
3232
: LDAP group lists can get rather large and when the total length of that list exceeds 1k characters, some LDAP implementations truncate the list. By applying a filter, you can help ensure that the group list is under that limit. We recommend picking a prefix to attach to all the groups you want to uses with SCOT. So if you pick a prefix like wg-scot, all your SCOT related groups would look like: wg-scot-response, wg-scot-mgmt, etc. The corresponding group filter would be `(| (cn=wg-scot*))`
3333

3434
User Base DN
35-
: The DN for looking up a user's groups. E.g. `ou=accounts,ou=ouname,dc=dcname1,dc=dcname2`
35+
: The base search domain for users
3636

3737
User Filter
38-
: E.g. `uid=%s`
38+
: The filter to use when searching for users
3939

4040
Provider Name
41-
: ?
41+
: A name that identifies this authentication instance
4242

4343
Auto-create Groups
44-
: Check this box if you want SCOT to detect new groups with your prefix and to automatically create a corresponding Role.
44+
: When set, all discovered ldap groups will be created as roles in SCOT
4545

4646
Username Attribute
47-
: ?
47+
: The ldap attribute containing a user's username (default: "uid")
4848

4949
Group Name Attribute
50-
: ?
50+
: The ldap attribute containing the group's name (default: "cn")
5151

5252
User Email Attribute
53-
: ?
53+
: The ldap attribute containing a user's email address
5454

5555
User Group Attribute
56-
: ?
56+
: The ldap attribute on a user containing that user's group memberships
5757

5858
Group Member Attribute
59-
: ?
59+
: The ldap attribute on a group containing that group's users
6060

6161
User Full Name Attribute
62-
: ?
62+
: The ldap attribute containing a user's full nam

content/install/manual_install.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ It will take several minutes to download and spin up all the containers. You ca
215215
watch kubectl -n scot4 get pods
216216
```
217217

218-
Once the display lookes like below, you can <ctrl-c> and end the watch program.
218+
Once the display lookes like below, you can ctrl-c and end the watch program.
219219

220220
```
221221
Every 2.0s: kubectl -n scot4 get pods dev24su: Tue Sep 10 14:41:32 2024

content/releases/4.1.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ weight = 2
2525
- Users can now delete Pivots if necessary.
2626
- The search engine is now indexing Subjects as well as entries.
2727
- Column filters can be negated by prefixing '!', e.g. '!Foo' would exclude rows containing 'Foo' in that column.
28-
- Wrapping text with either <noflair></noflair> or <span class="noflair"></span> will prevent the Flair engine from operating on that block.
28+
- Wrapping text with either &lt;noflair&gt;&lt;/noflair&gt; or &lt;span class="noflair"&gt;&lt;/span&gt; will prevent the Flair engine from operating on that block.
2929
-
3030

content/usage/Flair.md

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,43 @@ weight = 3
66

77
![SCOT-Flair-Logo](/images/flair-page-logo.png)
88

9-
One of SCOT's unique features is the ability to automatically highlight and cross-reference key pieces of data within submissions to SCOT. Flair refers to the highlighting and the addition of icons following that data. (The process that does the highlighting is also called "flair"). Entities are the pieces of data that are being highlighted.
9+
One of SCOT's unique features is the ability to automatically highlight and cross-reference key pieces of data within submissions to SCOT. Flair refers to the highlighting and the addition of icons following that data. (The process that does the highlighting is also called "flair"). Entities are the pieces of data that are being highlighted. Entities can be thought of a collection of IOC (indicators of compromise) but are not limited to just IOC's.
10+
11+
## What's it really doing?
12+
13+
The Flair engine searches strings (HTML and plain text) with a set of regular expressions. When one matches, it wraps that match in a HTML span that allows the front-end to recognize that text as an Entity. The Flair engine also updates SCOT's database of Entities and their locations.
14+
15+
At display time, the front-end queries the SCOT database for icons (flair items) to place after the span. Upon clicking on that span, SCOT will display all the locations that the entity has previously been found, as well as additional enrichment data that has been stored for the entity.
1016

1117
## Core Entities
1218

13-
Entities can be thought of a collection of IOC (indicators of compromise) but are not limited to just IOC's. The core set of entities that the flair process detects include:
19+
The core set of entities that the flair process detects include:
1420

15-
* IPv4 Addresses
16-
* IPv6 Addresses
17-
* Domain Names
18-
* Filenames with common extensions
1921
* CVE references
22+
* Browser User Agent strings (experimental)
2023
* CIDR blocks
24+
* IPv6 Addresses
25+
* IPv4 Addresses (with and without common obfuscation)
26+
* MD5, SHA1, and SHA256 Hashes
27+
* E-mail message ids
28+
* Domain Names (with and without common obfuscation)
29+
* Filenames with common extensions
2130
* UUIDs
2231
* Clsids
23-
* MD5, SHA1, and SHA256 Hashes
2432
* E-mail addresses
25-
* E-mail message ids
2633
* WinRegistry keys
2734
* jarm_hash
35+
* Country names (American English versions)
36+
* Internal Scot Links
37+
* SIDs
38+
39+
See [Core Entity Descriptions](/usage/core_entity.md) for more information about the core entities.
2840

2941
## User Defined Entities
3042

3143
In addition to the Core set, SCOT4 users can add "User Defined" Entities based on string matches. While viewing an Entry, a user can click and highlight any string within the Entry. A pop-up window will then ask the user to confirm creation of user defined entity and ask what [Entity Class](/about/terminology/#entity-class) to assign to this item.
3244

33-
Note: Choose your user defined entities carefully. 5 minutes after introducing this feature someone highlighted the word "the" (user defined flair has a 3 character minimum) and created an entity from it. This brought the system to a crawl while it dutifully began finding all instances of "the" in the data and flaired them. Cleanup was not fun. (contact [[email protected]](mailto:[email protected]) for details) SCOT follows the Unix philosophy of giving you enough rope to shoot yourself in the foot. Consider yourself warned!
45+
Note: Choose your user defined entities carefully. 5 minutes after introducing this feature someone highlighted the word "the" (user defined flair has a 3 character minimum) and created an entity from it. This dramatically slowed the system while it dutifully began finding all instances of "the" in the data and flaired them. Cleanup was not fun. (contact [[email protected]](mailto:[email protected]) for details) SCOT follows the Unix philosophy of giving you enough rope to shoot yourself in the foot. Consider yourself warned!
3446

3547
## Entity Icons
3648

@@ -52,8 +64,3 @@ The "Recent Appearances" table allows you to see where else this IP address appe
5264

5365
Finally, we see a series of Entries. These Entries can be from Actions or from your team's manual input. It is very useful to store the results of your research about this Entity here because it will be available to all users whenever this entity is encountered.
5466

55-
56-
57-
58-
59-

hugo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
baseURL = 'http://scot.baltig-pages.sandia.gov/scot4/scot4-docs/'
1+
baseURL = 'https://sandialabs.github.io/scot4-docs/'
22
languageCode = 'en-us'
33
title = 'Sandia Cyber Omni Tracker'
44
theme = 'hugo-theme-relearn'

themes/hugo-theme-relearn/.githooks/pre-push.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
# Linux, Windows and MacOS)
1111

1212
# #!/bin/sh
13-
# echo 'execute .githooks/pre-push.py' >> .githooks/hooks.log
1413
# python3 .githooks/pre-push.py
1514

1615
from datetime import datetime
16+
import os
1717
import re
1818
import subprocess
1919

@@ -29,14 +29,20 @@
2929
# an "#" (which are work in progress).
3030

3131
def main():
32+
script_name = "PRE-PUSH"
33+
script_dir = os.path.dirname(os.path.abspath(__file__))
34+
log_file = os.path.join(script_dir, "hooks.log")
3235
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
36+
repo_root = subprocess.check_output(['git', 'rev-parse', '--show-toplevel'], universal_newlines=True).strip()
37+
repo_name = os.path.basename(repo_root)
38+
3339
local_branch = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], universal_newlines=True).strip()
3440
wip_prefix = '^#\\d+(?:\\b.*)$'
3541
if re.match(wip_prefix, local_branch):
36-
print(f'{time}: Branch "{local_branch}" was not pushed because its name starts with a "#" which marks it as work in progress', file=open(".githooks/hooks.log", "a"))
37-
print(f'Branch "{local_branch}" was not pushed because its name starts with a "#" which marks it as work in progress')
42+
print(f'{time}: {repo_name} - {script_name} - Branch "{local_branch}" was not pushed because its name starts with a "#" which marks it as work in progress', file=open(log_file, "a"))
43+
print(f'{script_name} - Branch "{local_branch}" was not pushed because its name starts with a "#" which marks it as work in progress')
3844
exit(1)
39-
print(f'{time}: Branch "{local_branch}" was pushed', file=open(".githooks/hooks.log", "a"))
45+
print(f'{time}: {repo_name} - {script_name} - Branch "{local_branch}" was pushed', file=open(log_file, "a"))
4046
exit(0)
4147

4248
if __name__ == "__main__":

themes/hugo-theme-relearn/.github/actions/check_milestone/action.yaml

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ runs:
2323
with:
2424
query: |
2525
query {
26-
search(first: 1, type: ISSUE, query: "user:${{ github.repository_owner }} repo:${{ github.event.repository.name }} milestone:${{ env.MILESTONE }} state:closed") {
26+
search(first: 1, type: ISSUE, query: "repo:${{ github.repository_owner }}/${{ github.event.repository.name }} milestone:${{ env.MILESTONE }} state:closed") {
2727
issueCount
2828
}
2929
}
@@ -37,55 +37,60 @@ runs:
3737
with:
3838
query: |
3939
query {
40-
search(first: 1, type: ISSUE, query: "user:${{ github.repository_owner }} repo:${{ github.event.repository.name }} milestone:${{ env.MILESTONE }} state:open") {
40+
search(first: 1, type: ISSUE, query: "repo:${{ github.repository_owner }}/${{ github.event.repository.name }} milestone:${{ env.MILESTONE }} state:open") {
4141
issueCount
4242
}
4343
}
4444
45-
- name: Get old version number
46-
id: oldvers
47-
uses: andstor/file-reader-action@v1
45+
- name: Get current major version number
46+
id: majorvers
47+
uses: azarc-io/regex-property-action@master
48+
env:
49+
MILESTONE: ${{ inputs.milestone }}
4850
with:
49-
path: layouts/partials/version.txt
51+
value: ${{ env.MILESTONE }}
52+
regex: (\d+)\.\d+\.\d+
53+
replacement: "$1"
5054

51-
- name: Get old main version number
52-
id: oldmainvers
53-
uses: ashley-taylor/regex-property-action@v1
55+
- name: Get current minor version number
56+
id: minorvers
57+
uses: azarc-io/regex-property-action@master
58+
env:
59+
MILESTONE: ${{ inputs.milestone }}
5460
with:
55-
value: ${{ steps.oldvers.outputs.contents }}
56-
regex: (\d+)\.(\d+)\.\d+.*
57-
replacement: '$1\.$2'
61+
value: ${{ env.MILESTONE }}
62+
regex: \d+\.(\d+)\.\d+
63+
replacement: "$1"
5864

5965
- name: Get current patch version number
6066
id: patchvers
61-
uses: ashley-taylor/regex-property-action@v1
67+
uses: azarc-io/regex-property-action@master
6268
env:
6369
MILESTONE: ${{ inputs.milestone }}
6470
with:
6571
value: ${{ env.MILESTONE }}
6672
regex: \d+\.\d+\.(\d+)
6773
replacement: "$1"
6874

69-
- name: Get migration notes
70-
id: migrationnotes
71-
uses: andstor/file-reader-action@v1
72-
with:
73-
path: exampleSite/content/basics/migration/_index.en.md
74-
75-
- name: Check for old migration notes
76-
id: hasoldnotes
77-
uses: ashley-taylor/regex-property-action@v1
78-
with:
79-
value: ${{ steps.migrationnotes.outputs.contents }}
80-
regex: '.*?[\n\r\s]*<!--GH-ACTION-RELEASE-MILESTONE-->[\n\r\s]*-*\s*[\n\r\s]*?[\n\r]+##\s+${{ steps.oldmainvers.outputs.value }}\.0\s+.*?[\n\r][\n\r\s]*.*'
81-
flags: gs
82-
replacement: '1'
75+
- name: Check if releasenotes exists
76+
id: releasenotes
77+
shell: bash
78+
run: |
79+
if [ -f "exampleSite/content/introduction/releasenotes/${{ steps.majorvers.outputs.value }}/${{ steps.minorvers.outputs.value }}.en.md" ]; then
80+
echo "file_exists=true" >> $GITHUB_OUTPUT
81+
else
82+
echo "file_exists=false" >> $GITHUB_OUTPUT
83+
fi
8384
8485
- name: Set outcome
8586
id: outcome
8687
shell: bash
8788
run: |
88-
if [ "${{ fromJSON(steps.closed_issues.outputs.data).search.issueCount > 0 && fromJSON(steps.open_issues.outputs.data).search.issueCount == 0 && ( (steps.patchvers.outputs.value!='0'&&steps.hasoldnotes.outputs.value=='1') || (steps.patchvers.outputs.value=='0'&&steps.hasoldnotes.outputs.value!='1') ) }}" = "true" ]; then
89+
if [[ \
90+
${{ fromJSON(steps.closed_issues.outputs.data).search.issueCount }} -gt 0 && \
91+
${{ fromJSON(steps.open_issues.outputs.data).search.issueCount }} -eq 0 && \
92+
${{ steps.releasenotes.outputs.file_exists == 'true' }} \
93+
]]; then
8994
echo "outcome=success" >> $GITHUB_OUTPUT
9095
else
9196
echo "outcome=failure" >> $GITHUB_OUTPUT
@@ -94,12 +99,12 @@ runs:
9499
- name: Log results and exit
95100
shell: bash
96101
run: |
97-
echo outcome : ${{ steps.outcome.outputs.outcome }}
98-
echo has closed issues : ${{ fromJSON(steps.closed_issues.outputs.data).search.issueCount > 0 }}
99-
echo has open issues : ${{ fromJSON(steps.open_issues.outputs.data).search.issueCount > 0 }}
100-
echo is patch version : ${{ steps.patchvers.outputs.value != '0' }}
101-
echo has old main notes : ${{ steps.hasoldnotes.outputs.value == '1' }}
102-
echo are notes okay : ${{ (steps.patchvers.outputs.value!='0'&&steps.hasoldnotes.outputs.value=='1') || (steps.patchvers.outputs.value=='0'&&steps.hasoldnotes.outputs.value!='1') }}
102+
echo outcome : ${{ steps.outcome.outputs.outcome }}
103+
echo has closed issues : ${{ fromJSON(steps.closed_issues.outputs.data).search.issueCount > 0 }}
104+
echo count : ${{ fromJSON(steps.closed_issues.outputs.data).search.issueCount }}
105+
echo has all issues closed : ${{ fromJSON(steps.open_issues.outputs.data).search.issueCount == 0 }}
106+
echo count : ${{ fromJSON(steps.open_issues.outputs.data).search.issueCount }}
107+
echo has releasenotes : ${{ steps.releasenotes.outputs.file_exists }}
103108
if [ "${{ steps.outcome.outputs.outcome }}" = "failure" ]; then
104109
exit 1
105110
fi

0 commit comments

Comments
 (0)