Skip to content

Collection of Python scripts to interact with Tenable.io via API

Notifications You must be signed in to change notification settings

psmiraglia/python-tenable-helpers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tenable.io helpers

Collection of Python scripts to interact with Tenable.io via API.

How to set API credentials

Obtain ACCESS_KEY and SECRET_KEY from the Tenable.io console and save them in keys.py file

$ cat <<EOF > keys.py
ACCESS_KEY = 'HERE YOUR ACCESS KEY'
SECRET_KEY = 'HERE YOUR SECRET KEY'
EOF

Alternatively, you can set them as environment variables

$ export ACCESS_KEY="HERE YOUR ACCESS KEY"
$ export SECRET_KEY="HERE YOUR SECRET KEY"

If you use Docker, set them in the environment file

$ cat <<EOF > Docker.env
ACCESS_KEY=HERE YOUR ACCESS KEY
SECRET_KEY=HERE YOUR SECRET KEY
EOF

How to install

You can use a Python virtual environment

$ virtualenv -p python3 .venv
$ . .venv/bin/activate
$ pip install -r requirements.txt
$ pip install -e .

or build the Docker image

$ make docker

# or

$ docker build --tag psmiraglia/tenable-helpers .

How to use

agents-info.py (it will be soon removed)

Obtain information about linked agents.

$ ./agents-info.py -h
usage: agents-info.py [-h] [--never-connect] [--plugins-never-update]
                      [--agent-group-id AGENT_GROUP_ID]
                      [--agent-group-name AGENT_GROUP_NAME]

optional arguments:
  -h, --help            show this help message and exit
  --never-connect       list agents that never connected after the linking
  --plugins-never-update
                        list agents that never had pluging update after the
                        linking
  --agent-group-id AGENT_GROUP_ID
                        specify the agent group to get the agents from
  --agent-group-name AGENT_GROUP_NAME
                        specify the agent group to get the agents from
                        (ignored if --agent-group-id is used)

Example of execution

$ ./agents-info.py --never-connect --plugins-never-update --agent-group-id 123456
[never_connect] Start analysis
[never_connect] 6 agents
[never_connect] Result saved: never_connect.123456.20220720180812.csv
[plugins_never_update] Start analysis
[plugins_never_update] 164 agents
[plugins_never_update] Result saved: plugins_never_update.123456.20220720180812.csv
$ ./agents-info.py --never-connect --plugins-never-update
[1] Server (id: 654321)
[2] Client (id: 123456)
[3] DMZ (id: 112233)
[<] Select the agent group (1-3): 2
[never_connect] Start analysis
[never_connect] 6 agents
[never_connect] Result saved: never_connect.123456.20220720180812.csv
[plugins_never_update] Start analysis
[plugins_never_update] 164 agents
[plugins_never_update] Result saved: plugins_never_update.123456.20220720180812.csv

tio-group2tag

Create tag from agent group and assign it to related assets

$ tio-group2tag --help
Usage: tio-group2tag [OPTIONS]

Options:
  -n, --name TEXT  Name of the agent group
  -i, --id TEXT    ID of the agent group
  --help           Show this message and exit.

Examples of execution

$ tio-group2tag
[1] Server (id: 112233)
[2] Client (id: 112234)
[3] DMZ (id: 112235)
Select the agent group (1-3): 3
(*) Tag "AgentGroup:DMZ" with ID "00000000-0000-0000-0000-000000000000" has been created
(*) Got 3 over 3 agents
(*) Got 3 assets
(*) Tag "AgentGroup:DMZ" has been assigned to sql01|sql02|webserver12
$ docker run -ti --rm --env-file Docker.env psmiraglia/tenable-helpers tio-group2tag --name DMZ --id 112235
(*) Tag "AgentGroup:DMZ" with ID "00000000-0000-0000-0000-000000000000" has been created
(*) Got 3 over 3 agents
(*) Got 3 assets
(*) Tag "AgentGroup:DMZ" has been assigned to sql01|sql02|webserver12

tio-po2tag

Create tag by parsing a plugin output and assign it to related assets

$ tio-po2tag --help
Usage: tio-po2tag [OPTIONS]

Options:
  -c, --tag-category TEXT  Name of the tag category  [required]
  -n, --tag-name TEXT      Name of the tag  [required]
  -e, --regex TEXT         Regex to parse the plugin output  [required]
  --regex-negative         Use regex as negative
  -f, --filters TEXT       Assets filters  [required]
  --help                   Show this message and exit.

Examples of execution

$ tio-po2tag -c 'Firefox' -n '104.x' -f @po2tag/filters-20811.json --regex @po2tag/regex-20811-firefox-104.txt
(*) Filter: {"and": [{"property": "severity", "operator": "eq", "value": [0]}, {"property": "definition.id", "operator": "eq", "value": ["20811"]}]}
(*) Regex: ^mozilla firefox.*\[version 104(\.\d{1,})*\].*$
(*) Tag "Firefox:104.x" with ID "f03fd7f9-ea0b-47a9-a0fb-48435d265e8a" has been created
(*) Tag "Firefox:104.x" has been assigned to cli1
$ docker run -ti --rm -v "$(pwd)/po2tag:/data:ro" --env-file Docker.env psmiraglia/tenable-helpers tio-po2tag -c 'Firefox' -n '104.x' -f @/data/filters-20811.json --regex '^mozilla firefox.*\[version 104(\.\d{1,})*\].*$'
(*) Filter: {"and": [{"property": "severity", "operator": "eq", "value": [0]}, {"property": "definition.id", "operator": "eq", "value": ["20811"]}]}
(*) Regex: ^mozilla firefox.*\[version 104(\.\d{1,})*\].*$
(*) Tag "Firefox:104.x" with ID "f03fd7f9-ea0b-47a9-a0fb-48435d265e8a" has been created
(*) Tag "Firefox:104.x" has been assigned to cli1
$ tio-po2tag -c 'Firefox' -n 'NOT-104.x' -f @po2tag/filters-20811.json --regex @po2tag/regex-20811-firefox-104.txt --regex-negative
(*) Filter: {"and": [{"property": "severity", "operator": "eq", "value": [0]}, {"property": "definition.id", "operator": "eq", "value": ["20811"]}]}
(*) Regex: ^mozilla firefox.*\[version 104(\.\d{1,})*\].*$
(*) Tag "Firefox:104.x" with ID "f03fd7f9-ea0b-47a9-a0fb-48435d265e8a" has been created
(*) Tag "Firefox:104.x" has been assigned to cli12|cli23

tio-create-rg

Create remediation goals

$ tio-create-rg --help
Usage: tio-create-rg [OPTIONS]

Options:
  -n, --name TEXT         Name of the remediation goal  [required]
  -d, --description TEXT  Description of the remediation goal  [required]
  -c, --conditions TEXT   Conditions of the remediation goal  [required]
  -S, --start-date TEXT   Start date of the remediation goal (YYYY-MM-DD)
                          [required]
  -D, --due-date TEXT     Due date of the remediation goal (YYYY-MM-DD)
                          [required]
  --help                  Show this message and exit.

Examples of usage

$ tio-create-rg --name MyRemediationGoal --description @tio-create-rg/description.txt -c @tio-create-rg/conditions.json -S '2022-09-21' -D '2022-09-25'
(*) Load text from file: tio-create-rg/description.txt
(*) JSON: {"and": [{"id": "severity", "operator": "neq", "value": [0], "isFilterSet": true}, {"id": "state", "operator": "neq", "value": ["FIXED"], "isFilterSet": true}, {"id": "definition.name", "operator": "wc", "value": ["*adobe reader*"], "isFilterSet": true}]}
(*) Remediation goal has been created: MyRemediationGoal (1a322a5c-d92d-428e-9353-510953d45ac9)
$ tio-create-rg --name MyRemediationGoal --description "My inline description" -c @tio-create-rg/conditions.json -S '2022-09-21' -D '2022-09-25'
(*) JSON: {"and": [{"id": "severity", "operator": "neq", "value": [0], "isFilterSet": true}, {"id": "state", "operator": "neq", "value": ["FIXED"], "isFilterSet": true}, {"id": "definition.name", "operator": "wc", "value": ["*adobe reader*"], "isFilterSet": true}]}
(*) Remediation goal has been created: MyRemediationGoal (1a322a5c-d92d-428e-9353-510953d45ac9)
$ tio-create-rg --name MyRemediationGoal --description @tio-create-rg/description.txt -c '{"and": [{"id": "severity", "operator": "neq", "value": [0], "isFilterSet": true}, {"id": "state", "operator": "neq", "value": ["FIXED"], "isFilterSet": true}, {"id": "definition.name", "operator": "wc", "value": ["*adobe reader*"], "isFilterSet": true}]}' -S '2022-09-21' -D '2022-09-25'
(*) Load text from file: description.txt
(*) JSON: {"and": [{"id": "severity", "operator": "neq", "value": [0], "isFilterSet": true}, {"id": "state", "operator": "neq", "value": ["FIXED"], "isFilterSet": true}, {"id": "definition.name", "operator": "wc", "value": ["*adobe reader*"], "isFilterSet": true}]}
(*) Remediation goal has been created: MyRemediationGoal (1a322a5c-d92d-428e-9353-510953d45ac9)

tio-list-networks

List all the defined networks (also the "deleted" ones).

$ tio-list-networks --help
Usage: tio-list-networks [OPTIONS]

Options:
  --as-json
  --as-csv
  --help     Show this message and exit.

Examples of usage

$ tio-list-networks
Name : APAC
ID   : faa0a5e9-574c-4995-b18a-41c601bd8b72
URL  : https://cloud.tenable.com/tio/app.html#/settings/sensors/nessus/networks/network-details/faa0a5e9-574c-4995-b18a-41c601bd8b72/settings

Name : EMEA
ID   : 315b8469-1049-4806-819f-d502cc28381b
URL  : https://cloud.tenable.com/tio/app.html#/settings/sensors/nessus/networks/network-details/315b8469-1049-4806-819f-d502cc28381b/settings
$ tio-list-networks --as-json
[
  {
    "assets_ttl_days": 180,
    "created": 1665043358063,
    "created_by": "c3e4a104-8957-41e3-93c0-9a54dc892b49",
    "created_in_seconds": 1665043358,
    "description": "",
    "is_default": false,
    "modified": 1665656055675,
    "modified_by": "c3e4a104-8957-41e3-93c0-9a54dc892b49",
    "modified_in_seconds": 1665656055,
    "name": "APAC",
    "owner_uuid": "c3e4a104-8957-41e3-93c0-9a54dc892b49",
    "scanner_count": 5,
    "uuid": "faa0a5e9-574c-4995-b18a-41c601bd8b72"
  },
  {
    "assets_ttl_days": 180,
    "created": 1665043415366,
    "created_by": "c3e4a104-8957-41e3-93c0-9a54dc892b49",
    "created_in_seconds": 1665043415,
    "description": "",
    "is_default": false,
    "modified": 1665656062571,
    "modified_by": "c3e4a104-8957-41e3-93c0-9a54dc892b49",
    "modified_in_seconds": 1665656062,
    "name": "EMEA",
    "owner_uuid": "c3e4a104-8957-41e3-93c0-9a54dc892b49",
    "scanner_count": 1,
    "uuid": "315b8469-1049-4806-819f-d502cc28381b"
  }
] 

References

About

Collection of Python scripts to interact with Tenable.io via API

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published